Agregasi vs Komposisi

206

Saya mengerti komposisi apa yang ada dalam OOP, tetapi saya tidak bisa mendapatkan gambaran yang jelas tentang apa itu Agregasi. Bisakah seseorang menjelaskan?

Vinoth Kumar CM
sumber

Jawaban:

322

Aturan sederhana:

  1. A "memiliki" B = Komposisi: B tidak memiliki arti atau tujuan dalam sistem tanpa A
  2. A "menggunakan" B = Agregasi: B ada secara independen (secara konseptual) dari A

Contoh 1:

Perusahaan adalah kumpulan Orang. Perusahaan adalah komposisi Akun. Ketika Perusahaan berhenti melakukan bisnis, Akunnya tidak ada lagi, tetapi Karyawannya tetap ada.

Contoh 2: (sangat sederhana)

Editor Teks memiliki Buffer (komposisi). Editor Teks menggunakan File (agregasi). Ketika Editor Teks ditutup, Buffer dihancurkan tetapi File itu sendiri tidak dihancurkan.

Curtis Batt
sumber
11
Jadi, apakah mobil itu agregat atau komposisi bagian-bagiannya?
reinierpost
2
Dan bagaimana agregasi berbeda dari hubungan lain antara dua jenis entitas?
reinierpost
55
@reinierpost Pada kenyataannya , mobil adalah agregasi bagian, dan bagian hanyalah agregasi molekul ... Namun, dalam model itu semua tergantung pada kebutuhan Anda. Apakah penting untuk memperlakukan mesin sebagai entitas yang terpisah sehingga Anda dapat melacak masa hidupnya tanpa tergantung pada mobil? Bisakah Anda menggunakan kembali mesin yang sama persis di mobil lain? Jika demikian, maka Anda mungkin menginginkan agregasi. Kalau tidak, Anda ingin komposisi karena Anda tidak peduli dengan mesin yang bukan bagian dari mobil, Anda juga tidak peduli tentang menggunakan kembali mesin.
Curtis Batt
3
apa yang hilang adalah contoh implementasi untuk pemahaman yang lengkap ...
Chesnokov Yuriy
1
Bagaimana dengan karyawan ketika perusahaan berhenti berbisnis? Karyawan dan orang adalah entitas yang berbeda, kan? Jadi dapatkah saya mengatakan perusahaan adalah komposisi karyawan?
arjun
36

Dari http://en.wikipedia.org/wiki/Object_composition

Agregasi berbeda dari komposisi biasa karena tidak menyiratkan kepemilikan. Dalam komposisi, ketika benda yang dimiliki dihancurkan, demikian pula benda yang terkandung. Secara agregasi, ini belum tentu benar. Misalnya, universitas memiliki berbagai departemen (misalnya, kimia), dan setiap departemen memiliki sejumlah profesor. Jika universitas ditutup, departemen tidak akan ada lagi, tetapi profesor di departemen tersebut akan terus ada. Oleh karena itu, sebuah Universitas dapat dilihat sebagai komposisi departemen, sedangkan departemen memiliki agregasi profesor. Selain itu, seorang Profesor dapat bekerja di lebih dari satu departemen, tetapi suatu departemen tidak dapat menjadi bagian dari lebih dari satu universitas.

Jadi - selagi Anda memiliki hubungan kepemilikan dengan komposisi, objek yang dimiliki juga dihancurkan ketika pemiliknya adalah - agregasi (dan objek yang terkandung) dapat eksis secara independen.

-

Pembaruan: Permintaan Maaf - jawaban ini terlalu sederhana di belakang.

c.batt memberikan definisi yang sangat baik dalam jawabannya: Agregasi vs Komposisi

HorusKol
sumber
3
Dalam contoh yang Anda kutip komposisi adalah hubungan satu-ke-banyak dan agregasi juga memiliki hubungan satu-ke-banyak, meskipun di sini juga bisa menjadi hubungan banyak-ke-banyak untuk agregasi (kita dapat mengira kemungkinan bahwa seorang guru dapat mengajar di berbagai departemen). Sedangkan departemen tidak dapat menjadi bagian dari beberapa universitas. Komposisi menyiratkan kepemilikan sedangkan agregasi tidak melampaui hubungan. Kutipan itu benar tetapi komentarnya tidak.
Newtopian
1
itu tidak ada hubungannya dengan kehancuran! UML tidak mendefinisikan sistem pengumpulan sampah.
Nama Tampilan
2
Saya pikir tautan wikipedia mendapatkan upvote refleksif, tapi ini definisi yang buruk - karena @bold menunjukkan hubungan ini tidak ada hubungannya dengan GC. Ini juga berantakan ketika suatu benda adalah komponen dari dua benda lain, seperti bola di sendi-bola bergabung dengan dua anggota badan buatan. Hubungan Komponen adalah tentang ketergantungan fungsional.
Steven A. Lowe
1
Saya setuju bahwa jawaban saya sangat kurang - tetapi begitu juga artikel WikiPedia ...
HorusKol
Perbedaan antara komposisi dan agregasi jelas. Masalah dengan agregasi adalah bahwa tidak jelas bagaimana perbedaannya dari pergaulan biasa.
reinierpost
20

Tidak ada penjelasan tunggal. Para penulis yang berbeda memiliki arti yang berbeda dengan agregasi. Sebagian besar tidak benar-benar berarti sesuatu yang spesifik.

reinierpost
sumber
4
Ini jawaban yang benar. Saya sudah membacanya dalam dua buku, salah satunya adalah UML Distilled Martin Fowler .
davidhaskins
17
  • Komposisi adalah sebuah Asosiasi

  • Agregasi adalah sebuah Asosiasi

  • Komposisi adalah Asosiasi yang kuat (Jika kehidupan objek yang terkandung sepenuhnya tergantung pada objek kontainer, itu disebut asosiasi yang kuat)

  • Agregasi adalah Asosiasi yang lemah (Jika kehidupan objek yang terkandung tidak tergantung pada objek wadah, itu disebut asosiasi yang lemah)

Contoh:

class Contained {
    public void disp() {
        System.out.println("disp() of Contained A");
    }
}

public class Container {
    private Contained c;

    //Composition
    Container() {
        c = new Contained(); 
    }

    //Association 
    public Contained getC() {
        return c;
    }

    public void setC(Contained c) {
        this.c = c;
    }     

    public static void main(String[] args) {
        Container container = new Container();
        Contained contained = new Contained();
        container.setC(contained);
    } 
}
Pawan
sumber
2
Apa perbedaan antara agregasi dan asosiasi yang bukan komposisi atau agregasi?
reinierpost
11

Komposisi (campuran) adalah cara untuk menggabungkan objek sederhana atau tipe data menjadi yang lebih kompleks. Komposisi adalah blok bangunan penting dari banyak struktur data dasar

Pengumpulan (pengumpulan) berbeda dari komposisi biasa karena tidak menyiratkan kepemilikan. Dalam komposisi, ketika benda yang dimiliki dihancurkan, demikian pula benda yang terkandung. Secara agregasi, ini belum tentu benar

╔═══════════╦═════════════════════════╦═══════════════════════╗
║           ║       Aggregation       ║      Composition      ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time     ║
║ Relation  ║ Has                     ║ part-of               ║
║ Example   ║ Car has driver          ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝

Keduanya menunjukkan hubungan antara objek dan hanya berbeda dalam kekuatannya. masukkan deskripsi gambar di sini

Notasi UML untuk berbagai jenis ketergantungan antara dua kelas masukkan deskripsi gambar di sini

Komposisi : Karena Mesin adalah bagian dari Mobil, hubungan di antara mereka adalah Komposisi. Inilah cara mereka diimplementasikan di antara kelas-kelas Java.

public class Car {
    //final will make sure engine is initialized
    private final Engine engine;  

    public Car(){
       engine  = new Engine();
    }
}

class Engine {
    private String type;
}

Agregasi : Karena Organisasi memiliki Orang sebagai karyawan, hubungan di antara mereka adalah Agregasi. Berikut adalah bagaimana mereka terlihat dalam hal kelas Java

public class Organization {
    private List employees;
}


public class Person {
    private String name;   
}

Sumber

Premraj
sumber
ini sepertinya tidak menawarkan sesuatu yang substansial atas poin yang dibuat dan dijelaskan dalam 12 jawaban sebelumnya
agas
Cukup yakin buku bisa ada tanpa perpustakaan. Contoh buruk!
T Blank
Di sini, Daftar Karyawan adalah bagian dari Objek Organisasi. Bagaimana ini bisa agregasi?
Salman Muhammad Ayub
Bagaimana asosiasi berbeda dari agregasi?
reinierpost
Saya suka jawaban ini. Akhirnya dijelaskan kepada saya dengan tepat apa perbedaan antara agregasi dan komposisi.
PandasRocks
6

agregasi adalah koleksi sederhana, seperti sekantong kelereng

komposisi menyiratkan dependensi internal / fungsional, seperti engsel pada kotak

mobil penumpang agregat; mereka masuk dan keluar tanpa merusak fungsi mobil

ban adalah komponen; lepaskan satu dan mobil tidak lagi berfungsi dengan benar

[catatan: ban serepnya agregat!]

Steven A. Lowe
sumber
1

Saya selalu melihat komposisi sebagai 'kebutuhan a', yaitu mobil membutuhkan mesin, dan saya melihat agregasi sebagai 'hal-hal yang terkait dengan suatu tujuan'. Jadi tetap dengan analogi mobil, agregasi saya mungkin mewakili perjalanan yang mungkin melibatkan menyatukan mobil dan penumpang. Perjalanan tidak memiliki mobil atau penumpang, saya mengumpulkan data yang terkait dengan skenario tertentu. Ketika perjalanan selesai, mobil dan penumpang melanjutkan. Ketika sebuah mobil berakhir, mobil dan mesinnya biasanya dihancurkan bersama.

Lazarus
sumber
0

Semantik, semua set terbuat dari himpunan bagian, kan? Karena itu:

  • Agregasinya adalah ketika himpunan bagian itu ada secara independen dari set ayah. Sebagai monitor dapat dicabut dari komputer untuk dihubungkan ke yang lain.

  • Komposisi adalah ketika himpunan bagian itu tergantung dari keberadaan set ayah. Seperti daun adalah bagian dari pohon atau hati adalah bagian dari tubuh.

Konsep-konsep ini berbicara tentang jenis ketergantungan antara dua objek atau kelas, secara konseptual. Langsung dalam suatu program, dalam suatu agregasi, ketika objek ayah membuang, objek agregat juga harus dibuang. Dalam skenario yang sama untuk komposisi, objek anak komposit akan bertahan kemudian objek ayah mengeluarkan.

Negarrak
sumber
-1

Bagaimana dengan contoh sederhana ini:

Array objek adalah komposisi. Array pointer ke objek adalah agregasi.

Jika saya menghapus yang pertama, isinya lenyap bersamanya. Yang kedua, di sisi lain dapat menghilang tanpa mempengaruhi keberadaan anggotanya kecuali ada metode khusus yang menghapus setiap objek saat penunjuknya dihapus.

pengguna2831074
sumber
3
ini sepertinya tidak menambahkan sesuatu yang substansial pada poin yang dibuat dan dijelaskan dalam 11 jawaban sebelumnya
nyamuk
Dengan penuh hormat tidak setuju, @gnat. Ini adalah contoh bermanfaat tentang bagaimana keduanya dapat diimplementasikan. Orang belajar lebih baik dengan contoh. (Saya datang ke sini untuk memeriksa pemahaman saya bahwa anggota penunjuk kemungkinan merupakan agregasi, dan anggota objek komposisi. Ini adalah satu-satunya jawaban untuk langsung mengatasinya.)
Bob Stein