Membedakan Komposisi dan Agregasi


Seringkali kita dibingungkan dengan pemodelan kelas dalam rekayasa perangkat kelas. Apalagi bila kita terbatas hanya tahu secara konsep, tak tahu bagaimana mengaplikasikannya dalam bentuk kode. Sebenarnya kita dapat mudah bisa membedakannya asalkan kita memahaminya secara utuh.

Untuk pendahuluan, mari kita telusuri apakan perbedaan mendasar antara Relasi Composition dan Aggregation.

Komposisi:
Seperti kita ketahui,
pewarisan memberikan hubungan ‘is-a’, yang berarti sifat-sifat yang dimiliki kelas parent dimiliki pula oleh kelas child. Untuk mempermudah pemahaman mengenai kompisisi ini, kita dapat mengatakan komposisi memiliki hubungan ‘part-of’. Komposisi ditampilkan dlam bentuk diagram UML adalah sebagai berikut:

Bila kita memodelkan sebuah mobil, maka dapat dikatakan bahwa mesin adalah bagian dari mobil. Secara logis dapat dikatakan bahwa mesin adalah bagian dari mobil. Mobil tidak dapat dipisahkan dari mesin. Bila mesian tidak ada di sebuah mobil maka mobil itu tidak berfungsi sebgai mobil. Dalam C++ dapat dituliskan sebagai berikut:

class Engine
{
    ...
}
class Car
{
    Engine* e = new Engine();
}

Dapat dilihat pada kode di atas. Mobil mengelola masa hidup dari sebuah mesin. Atau kelas yang dipanggil dekelola masa pakainya oleh kelas yang memanggilnya.

Agregasi:
Jika
pewarisan memberikan kata ‘is-a’ dan komposisi memberikan kata ‘part-of’ maka bisa kita debatkan bahwa agregasi memberikan kara ‘has-a’. Dalam Agragasi, kelas kelas yang dipanggil tidak dikelola secara menyeluruh. Sebagai contoh, saaya terlibat dalam pelaksanaan sisten CRM 12 bulan terakhir. Sistem ini memiliki database pelanggan, terpisah, dan berisi semua alamat dalam wilayah geografis. Agragasi masuk dalam kasus ini. Bila pekerjaan sedang berjalan maka seorang pelanggan pastilah memiliki alamat. Namun bila tidak, pelanggan tidak disisi/memiliki alamat lagi. Hal ini dapat dimodelkan dengan diagram sebgai berikut:

Bagaimana agregasi menterjemahkannya dalam kode C++:

class Address
{
    ...
}
Class Person
{
    Address* address;
    Person(Address* address)
    {
        this->alamat = alamat;
    }
}

Bila digunakan/dipanggil

Address* address = new Address();
Person* person = new Person(alamat);
// atau Person person(alamat);

Atau

Person* person = new Person(new Address());

Seperti dapat anda lihat, seseorang tidak mengurusi alamatnya seumur hidup. Atau Masa pakai dari kedua objek dari kelas adalah independent.

Kesimpulan:

Seperti disebutkan di awal, bila semua bagian dari teori hingga implementasi kita paham 100% kita tidak akan kesulitan dalam membedakan istilah-istilahnya. Dalam kasus ini, komposisi diberi kata kunci ‘part-of’ dan agregasi diberi kata kunci ‘has’a’.

5 Responses

  1. Makasih infonya pak hary,,
    Sekalian mau tanya,, kalo kecamatan ma desa tu relasinya lebih tepat pake aggragation atau composition y??

    Reply Please, Thanks B4…

  2. Terima kasih atas apresiasinya. Untuk menentukan dua objek lebih tepat menggunakan relasi yang mana, gunakan kaidah part-of (bagian dari) dan has-a (memiliki) nya. Untuk kasus ini, bisakah sebuah kecamatan tidak memiliki desa, pasti tidak kan?!. Oleh karena itu menurut saya, relasi yang tepat untuknya adalah komposisi.

  3. terima kasih materinya sangat membantu😀

  4. alhamdulillah jadi ada bayangan,, makasih pak!

  5. Hello admin do you need unlimited articles for your page
    ? What if you could copy article from other websites, make
    it pass copyscape test and publish on your blog – i know the right tool for
    you, just search in google:
    loimqua’s article tool

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: