Java ассоциациясы



Java

Java ассоциациясы деген эмне

Java ассоциациясы эки класстын ортосундагы мамилени сүрөттөйт. Бул алардын объектилери аркылуу мамилелерди орнотот. Ассоциация бири-бирине, бирөөсүнө көпүнө, бирөөсүнө же бирине бирине чейинки мамилелерди чагылдырышы мүмкүн. Бул мүмкүнчүлүк берет HAS-A класстардын ортосундагы мамиле.

Төмөндө ушул ассоциациялык мамилелердин ар кандай мисалдарын карап көрөлү.

  • Адам 1 гана айдоочулук күбөлүккө ээ болушу мүмкүн. Бул бири-бирине болгон мамилени көрсөтөт.
  • Бир адамдын бир нече банктык эсеби болушу мүмкүн. Бул бирден көпкө байланыш.
  • Көптөгөн кызматкерлерде отчеттун бирден башкаруучусу болушу мүмкүн. Бул көп кишинин мамилесин чагылдырат.
  • Көптөгөн студенттерде көптөгөн мугалимдер болушу мүмкүн. Бул көп-көп байланышты көрсөтөт.

Java ассоциациясынын мисалын көрүүдөн мурун, жөнүндө түшүнүккө ээ болуу керек тукум куучулук ошондой эле түшүнүк.

Java ассоциациясынын мисалы

Бул мисалда бир кафедра көптөгөн окутуучуларды камтый турган бирден көпкө байланышты көрсөтөт. Ар бир класс өзүнчө жашай алса дагы, java ассоциациясы аркылуу экөөнү тең объектилери аркылуу байланыштыра алабыз.

Биз түзөбүз Окутуучу камтыган класс аттары жана сабактар. Бизде мугалимдин аты-жөнүн жана сабагын алуу боюнча 2 ыкма бар. Конструктор аркылуу биз аталышты жана теманы тиешелүүлүгүнө жараша орното алабыз.

In бөлүм класс, деп жарыялайбыз бөлүмдүн аты жана мугалимдердин тизмеси анткени бул бирден көпкө байланыштын ассоциациясы. Конструктор аркылуу бөлүмдүн атын инициализациялайбыз, ал эми гетер методун колдонуп, бөлүмдүн атын алабыз.

Эми мугалимдердин тизмесин алуу жана мугалимдердин тизмесин түзүү үчүн дагы 2 ыкмага ээ болушубуз керек. Бул үчүн биз жасайбыз getTeachers() Жана setDepartment(мугалимдер).

Андан кийин, эки класс үчүн өзүнчө нускаларды түзүп, ошого жараша методдорду атайбыз. Колдонуу ArrayList биз мугалимдердин тизмесин түзүп, андан кийин мугалимдерди бир бөлүмгө бириктирүү үчүн setDepartment бөлүмүнө өткөрүп берсек болот.

import java.util.ArrayList;
import java.util.List;

class Teacher {
  String name;
  String subject;
  
  Teacher(String name, String subject) {
    this.name = name;
    this.subject = subject;
  }
  
  public String getTeacherName() {
    return name;
  }
  
  public String getSubject() {
    return subject;
  }
  
  public String toString() {
    return name;
  }
  
}
public class Department {
  
  String deptname;
  List<Teacher> teachers;
  
  Department(String name) {
    this.deptname = name;
  }
  
  public String getDepartmentName() {
    return deptname;
  }
  
  public List<Teacher> getTeachers() {
    return teachers;
  }
  
  public void setDepartment(List<Teacher> teachers) {
    this.teachers = teachers;
  }

  public static void main(String[] args) {
    Department d = new Department("Computer Science");
    
    Teacher t1 = new Teacher("Shyamala", "Data Structures");
    Teacher t2 = new Teacher("Mohan","Networking");
    
    List<Teacher> teachers = new ArrayList<Teacher>();
    teachers.add(t1);
    teachers.add(t2);
    
    d.setDepartment(teachers);
    
    System.out.println(d.getTeachers() + " are the list of teachers in the Department " + d.getDepartmentName());
    System.out.println("Teacher details: ");
    System.out.println(t1.getTeacherName() + " " + t1.getSubject());
    System.out.println(t2.getTeacherName() + " " + t2.getSubject());
  }

}
[Shyamala, Mohan] are the list of teachers in the Department Computer Science
Teacher details: 
Shyamala Data Structures
Mohan Networking

Эми ассоциация деген эмне экенибизди түшүнгөндөн кийин, javaдагы ассоциациянын ар кандай формаларын талкуулайлы.

Ассоциациянын формалары

Ассоциация төмөндө айтылгандай эки түрдүү форманы камтыйт:

  • курамы
  • кошуу

Java ассоциациясы

курамы

Курамы а белгилейт таандык же анын бөлүгү бирикменин түрү. Башкача айтканда, бир объект башка объектини камтыйт же андан турат деп айта алабыз. Бул бирикменин күчтүү түрүн ишке ашырат, демек, эгер ички объект негизги сырткы объект жок болуп кете албаса.

Мисалы, бизде окуучуларсыз мектеп болбойт. Демек, мектеп окуучуларсыз иштей албайт. Демек, ал мектеп менен окуучулардын ортосунда композиция орнотот.

Дагы бир мисал, бизде кыймылдаткычсыз унаа болбойт, демек, кыймылдаткычсыз унаа кыймылдай албайт. Демек, бул эки класс тыгыз байланышта.

Композициянын өзгөчөлүктөрү

  • Эки класс бири-биринен өтө көз каранды
  • 2 класстын ортосундагы композиция эки жак тең бири-бирисиз жашай албайт дегенди билдирет.
  • Бул мамиленин бир бөлүгүн ишке ашырат.
  • Бул биригүүнүн чектелген түрү.

Композициянын мисалы

Төмөнкү мисалда, биз Студент менен Мектептин ортосундагы курамын көрсөтөбүз. Демек, мектеп окуучулардын тизмесин камтыйт, эгерде мектеп жок кылынса, анда ал дагы жок болот. Себеби, мектеп конструкторунда, биз студенттер тизмесинин объектисин параметр катары өткөрүп беребиз

import java.util.ArrayList;
import java.util.List;

//Student class
class Student {
  String studentname;
  int rollno;
  
  Student(String studentname, int rollno) {
    this.studentname = studentname;
    this.rollno = rollno;
  }
}

//School class which contains students
class School {
  private final List<Student> students;
  
  School(List<Student> students) {
    this.students = students;
  }
  
  public List<Student> getTotalNumberOfStudents() {
    return students;
  }
  
}
public class CompositionDemo {

  public static void main(String[] args) {
    Student s1 = new Student("Akash",100);
    Student s2 = new Student("Avinash",101);
    Student s3 = new Student("Balu",102);
    
    //Create list of students
    List<Student> students = new ArrayList<Student>();
    students.add(s1);
    students.add(s2);
    students.add(s3);
    
    School s = new School(students);
    List<Student> stu = s.getTotalNumberOfStudents();
    for(Student student: stu) {
      System.out.println("Student Name: " + student.studentname + " | " + " Roll No: " + student.rollno );
    }

  }

}
Student Name: Akash |  Roll No: 100
Student Name: Avinash |  Roll No: 101
Student Name: Balu |  Roll No: 102

кошуу

Агрегация - бул а-ны жүзөгө ашыруучу Ассоциациянын дагы бир формасы HAS-A мамилеси жана ал бир багыттагы мамилени гана колдойт. Демек, бир класстын экинчи класска шилтемеси бар. Мисалы, бир адамдын дареги бар деп айтсак болот. Адамга болгон тескери жол, башкача айтканда, мааниси жок. Ошондуктан биз бул ассоциациянын дагы бир түрү болгон бир тараптуу мамиле деп айтабыз.

Агрегациянын мисалы

class Address {
  String flatname;
  int flatno;
  String streetname;
  String area;
  String city;
  int pincode;
  
  Address(String name, int no, String streetname, String area, String city, int pin) {
    this.flatname = name;
    this.flatno = no;
    this.streetname = streetname;
    this.area = area;
    this.city = city;
    this.pincode = pin;	
  }
  
}
public class Person {
  String name;
  Address ad;
  
  Person(String name, Address ad) {
    this.name = name;
    this.ad = ad;
  }

  public static void main(String[] args) {
    Address ad = new Address("OakMont",10,"Maruthi nagar","Banaswadi","Bangalore",560072);
    Person p = new Person("Ravi",ad);
    System.out.println("Person Name: " + p.name);
    System.out.println("Address: ");
    System.out.println(p.ad.flatno + ", " + p.ad.flatname + ", " + p.ad.streetname);
    System.out.println(p.ad.area);
    System.out.println(p.ad.city + " - " + p.ad.pincode);

  }

}
Person Name: Ravi
Address: 
10, OakMont, Maruthi nagar
Banaswadi
Bangalore - 560072

Көрө Java-дагы агрегация бириктирүү түшүнүгү жөнүндө көбүрөөк түшүнүү үчүн окуу куралы.

Курам менен агрегациянын ортосундагы айырмачылык

Төмөндө javaдагы ассоциациянын эки формасынын айырмачылыктары келтирилген.

курамыкошуу
Ассоциациянын күчтүү түрүАссоциациянын алсыз түрү
Карым-катнаштын бир бөлүгүн же бир бөлүгүн ишке ашыратБар мамилелер
Эки класс тең бири-бирине көз каранды.
Бала классы ата-эне классысыз жашай албайт
Бала классы ата-энеси жок болсо дагы, өз алдынча жашай алат

 

шилтеме