Saya menyadari perbedaan konseptual antara Agregasi dan Komposisi. Bisakah seseorang memberi tahu saya perbedaan implementasi di Java antara mereka dengan contoh?
Saya menyadari perbedaan konseptual antara Agregasi dan Komposisi. Bisakah seseorang memberi tahu saya perbedaan implementasi di Java antara mereka dengan contoh?
Jawaban:
Komposisi
final class Car {
private final Engine engine;
Car(EngineSpecs specs) {
engine = new Engine(specs);
}
void move() {
engine.work();
}
}
Pengumpulan
final class Car {
private Engine engine;
void setEngine(Engine engine) {
this.engine = engine;
}
void move() {
if (engine != null)
engine.work();
}
}
Dalam hal komposisi, Mesin sepenuhnya dikemas oleh Mobil. Tidak ada cara bagi dunia luar untuk mendapatkan referensi ke Mesin. Mesin hidup dan mati bersama mobil. Dengan agregasi, Mobil juga menjalankan fungsinya melalui Mesin, tetapi Mesin tidak selalu merupakan bagian internal Mobil. Mesin mungkin tertukar, atau bahkan dilepas seluruhnya. Tidak hanya itu, dunia luar masih bisa memiliki referensi ke Mesin, dan mengotak-atiknya terlepas dari apakah itu di dalam Mobil.
new Engine(EngineSpecs)
panggilan meskipun tidak ada mobil. Cara untuk mencapai komposisi adalah dengan membuat Engine sebagai kelas dalam, sehingga objek mesin selalu dibuat dengan mengacu pada Objek Mobil
Saya akan menggunakan contoh UML yang bagus.
Ambil universitas yang memiliki 1 hingga 20 departemen berbeda dan setiap departemen memiliki 1 hingga 5 profesor. Ada hubungan komposisi antara Universitas dan departemennya. Ada hubungan agregasi antara departemen dan 'profesornya.
Komposisi hanya agregasi KUAT, jika universitas dihancurkan maka jurusan juga harus dimusnahkan. Tapi kita tidak boleh membunuh profesor bahkan jika departemennya menghilang.
Di java:
public class University {
private List<Department> departments;
public void destroy(){
//it's composition, when I destroy a university I also destroy the departments. they cant live outside my university instance
if(departments!=null)
for(Department d : departments) d.destroy();
departments.clean();
departments = null;
}
}
public class Department {
private List<Professor> professors;
private University university;
Department(University univ){
this.university = univ;
//check here univ not null throw whatever depending on your needs
}
public void destroy(){
//It's aggregation here, we just tell the professor they are fired but they can still keep living
for(Professor p:professors)
p.fire(this);
professors.clean();
professors = null;
}
}
public class Professor {
private String name;
private List<Department> attachedDepartments;
public void destroy(){
}
public void fire(Department d){
attachedDepartments.remove(d);
}
}
Sesuatu di sekitar ini.
Ada penjelasan bagus di url yang diberikan di bawah ini.
http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit
Silakan periksa !!!
Mari kita atur persyaratannya. Agregasi adalah metrik dalam standar UML, dan berarti komposisi KEDUA dan agregasi bersama, cukup dinamai bersama . Terlalu sering itu salah disebut sebagai "agregasi". BURUK, karena komposisi adalah agregasi juga. Seperti yang saya mengerti, yang Anda maksud adalah "berbagi".
Lebih jauh dari standar UML:
komposit - Menunjukkan bahwa properti digabungkan secara gabungan, yaitu, objek gabungan memiliki tanggung jawab atas keberadaan dan penyimpanan objek yang disusun (bagian).
Jadi asosiasi universitas ke cathedra adalah sebuah komposisi, karena cathedra tidak ada diluar universitas (IMHO)
Semantik akurat dari agregasi bersama bervariasi menurut area aplikasi dan pemodel.
Yaitu, semua asosiasi lainnya dapat ditarik sebagai agregasi bersama, jika Anda hanya mengikuti beberapa prinsip Anda atau orang lain. Lihat juga di sini .
Program Komposisi sederhana
public class Person {
private double salary;
private String name;
private Birthday bday;
public Person(int y,int m,int d,String name){
bday=new Birthday(y, m, d);
this.name=name;
}
public double getSalary() {
return salary;
}
public String getName() {
return name;
}
public Birthday getBday() {
return bday;
}
///////////////////////////////inner class///////////////////////
private class Birthday{
int year,month,day;
public Birthday(int y,int m,int d){
year=y;
month=m;
day=d;
}
public String toString(){
return String.format("%s-%s-%s", year,month,day);
}
}
//////////////////////////////////////////////////////////////////
}
public class CompositionTst {
public static void main(String[] args) {
// TODO code application logic here
Person person=new Person(2001, 11, 29, "Thilina");
System.out.println("Name : "+person.getName());
System.out.println("Birthday : "+person.getBday());
//The below object cannot be created. A bithday cannot exixts without a Person
//Birthday bday=new Birthday(1988,11,10);
}
}
Pertama kita harus berbicara tentang apa sebenarnya perbedaan antara Aggregation
dan Composition
berada pada halaman yang sama.
Agregasi adalah asosiasi di mana entitas terkait mungkin ada, terlepas dari asosiasi. Misalnya, Seseorang mungkin terkait dengan sebuah Organisasi tetapi dia mungkin memiliki keberadaan independen dalam sistem.
sedangkan
Komposisi mengacu pada situasi ketika salah satu entitas terkait sangat terkait dengan yang lain dan tidak dapat ada tanpa keberadaan yang lain. Padahal identitas entitas itu selalu dikaitkan dengan identitas objek lainnya. Misalnya roda di dalam mobil.
Sekarang, agregasi dapat dengan mudah dicapai dengan memegang properti dari satu entitas di entitas lain seperti di bawah ini:
class Person {
Organisation worksFor;
}
class Organisation {
String name;
}
class Main {
public static void main(String args[]) {
//Create Person object independently
Person p = new Person();
//Create the Organisation independently
Organisation o = new Organisation();
o.name = "XYZ Corporation";
/*
At this point both person and organisation
exist without any association
*/
p.worksFor = o;
}
}
Untuk Komposisi, objek dependen selalu dibuat dengan identitas objek terkaitnya. Anda dapat menggunakan kelas dalam untuk hal yang sama.
class Car {
class Wheel {
Car associatedWith;
}
}
class Main {
public static void main() {
//Create Car object independently
Car car = new Car();
//Cannot create Wheel instance independently
//need a reference of a Car for the same.
Car.Wheel wheel = car.new Wheel();
}
}
Harap dicatat bahwa kasus penggunaan yang sama mungkin termasuk dalam agregasi / komposisi tergantung pada skenario aplikasi. Misalnya, kasus Organisasi-Orang dapat menjadi komposisi jika Anda mengembangkan aplikasi untuk orang-orang yang bekerja di suatu organisasi dan referensi ke organisasi harus untuk mendaftar. Demikian pula, jika Anda memelihara inventaris untuk suku cadang Mobil, hubungan Roda-Mobil dapat berupa agregasi.
Agregasi vs Komposisi
Agregasi menyiratkan hubungan di mana anak dapat hidup secara independen dari orang tua. Misalnya Bank dan Pegawai, hapus Bank dan Pegawai tetap ada.
sedangkan Komposisi menyiratkan hubungan di mana anak tidak bisa ada secara independen dari orang tua. Contoh: Manusia dan hati, hati tidak ada terpisah dari Manusia.
Relasi agregasi adalah relasi “has-a” dan komposisinya adalah relasi “bagian-dari”.
Komposisi adalah Asosiasi yang kuat sedangkan Agregasi adalah Asosiasi yang lemah.
Kedua jenis ini tentu saja merupakan asosiasi, dan tidak benar-benar dipetakan secara ketat ke elemen bahasa seperti itu. Perbedaannya terletak pada tujuan, konteks, dan bagaimana sistem dimodelkan.
Sebagai contoh praktis, bandingkan dua jenis sistem dengan entitas serupa:
Sistem registrasi mobil yang utamanya melacak mobil, dan pemiliknya, dll. Di sini kami tidak tertarik pada mesin sebagai entitas terpisah, tetapi kami mungkin masih memiliki atribut terkait mesin, seperti daya, dan jenis bahan bakar. Di sini Mesin mungkin merupakan bagian gabungan dari entitas mobil.
Sistem manajemen bengkel mobil yang mengatur suku cadang mobil, memperbaiki mobil, dan mengganti suku cadang, mungkin mesin lengkap. Di sini kami bahkan mungkin memiliki stok mesin dan perlu melacaknya dan bagian lain secara terpisah dan tidak bergantung pada mobil. Di sini Mesin mungkin merupakan bagian gabungan dari entitas mobil.
Bagaimana Anda menerapkan ini dalam bahasa Anda menjadi perhatian kecil karena pada tingkat itu hal-hal seperti keterbacaan jauh lebih penting.