Perbedaan Asosiasi, Agregasi dan Komposisi pada Object Oriented Programming

Ketika kita membaca atau membuat diagram class UML, kita tidak pernah lepas dari relasi antar class. Seringkali membingungkan adalah bagaimana implementasi relasi tersebut dalam bentuk kode program.

Ada beberapa teknik yang digunakan jika berbicara mengenai relasi antar class yaitu:

Assosiation (Assosiasi)

Assosiasi adalah hubungan antara object. Relasi assosiasi biasa disebut is “a” relationship. Assosiasi berarti bahwa sebuah object “menggunakan” object yang lain. Assosiasi adalah sebuah relasi dimana semua object memiliki lifecycle nya sendiri dan tidak ada yang bertindak sebagai owner.

Contoh Teacher dan Student. Banyak Student dapat berasosiasi dengan satu Teacher dan satu Student   dapat berasosiasi dengan banyak Teacher. Object keduanya bisa dibuat dan dihancurkan secara mandiri tanpa berpengaruh pada eksistensi object lain.

Aggregation (Agregasi)

Agregasi adalah bentuk hubungan yang lebih khusus dari Assosiasi dimana sebuah object memiliki lifecycle nya sendiri tapi dengan kepemilikan dan class child tidak dapat memiliki class parentnya. Relasinya biasa di sebut relasi “has-a”.

Sebagai contoh, Department dan Teacher. Satu Teacher tidak dapat memiliki banyak Department, tapi jika kita menghapus object Department, object Teacher tidak akan ikut terhapus. Contoh:

public class Department
    {
        private string _name;

        public Department(string name)
        {
            _name = name;
            _teachers = new List<Teacher>();
        }
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        public List<Teacher> _teachers;
    }

 

public class Teacher
    {
        private string _name;
        public Teacher(string name)
        {
            _name = name;
        }
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
    }

 

public class ClientTester
    {
        public void AggregationTest()
        {
            var department = new Department("Electrical Engineering");

            var teacher1 = new Teacher("Teacher 1");
            var teacher2 = new Teacher("Teacher 2");

            department._teachers.Add(teacher1);
            department._teachers.Add(teacher2);

        }
    }

Karena object teacher di buat di luar object department, sehingga jika object department dihancurkan maka object teacher tetap exist. Object department bisa memiliki banyak object teacher yang berasosiasi dengannya, tapi tidak sebaliknya. Sehingga dalam relasi ini object department adalah owner dari object teacher.

Relasi Agregasi disebut juga Weak Assosiation dan dalam UML disimbolkan seperti ini

agregasi

 

Composition (Komposisi)

Komposisi sama dengan relasi Agregasi, tapi lebih spesfic lagi yaitu lifecycle object bergantung pada object ownernya.

public class University
    {
        private string _name;
        private List<Department> _departments;
        public University(string name)
        {
            _name = name;
        }

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private void GenerateDepartment()
        {
            var electricalDepartment = new Department("Electrical Engineering");
            var biologyDepartment = new Department("Biology");
            _departments = new List<Department>
                {
                    electricalDepartment,
                    biologyDepartment
                };

        }
    }

 

public class ClientTester
{
  public void CompositionTest()
  {
      var university = new University("Diponegoro University");

   }

 }

Pada contoh ini class University bertindak sebagai object owner seperti pada relasi Agregasi di atas. Karena object electricalDepartment dan biologyDepartment di buat di dalam object univerty sehingga jika object university dihancurkan, maka object electricalDepartment dan biologyDepartment akan tidak exist lagi. Relasi Komposisi disebut juga Strong Association atau Death Relationship dan disimbolkan dalam UML seperti ini

komposisi

 

 

 

9 komentar pada “Perbedaan Asosiasi, Agregasi dan Komposisi pada Object Oriented Programming”

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s