Monday, June 25, 2012

aggregation relationship

A.    Pengertian Aggregation Relationship
Agregasi merupakan hubungan antara dua kelas yang paling tepat digambarkan sebagai "memiliki-a" dan hubungan "seluruh / bagian". Ini adalah versi yang lebih khusus dari hubungan asosiasi . Kelas agregat berisi referensi ke kelas lain dan dikatakan memiliki kepemilikan dari kelas itu. Setiap kelas yang direferensikan dianggap sebagai bagian dari kelas-agregat
.

B.     Komponen Aggregation Relationship
·         Komposisi
Seperti kita ketahui, warisan memberi kita 'adalah-sebuah' hubungan. Untuk membuat pemahaman tentang komposisi lebih mudah, kita dapat mengatakan komposisi yang memberi kita hubungan 'bagian-of'. Komposisi ditampilkan pada diagram UML sebagai berlian diisi (lihat Gambar 1).

Gambar 1 - Komposisi

Jika kami akan pergi untuk model mobil, akan masuk akal untuk mengatakan bahwa mesin adalah bagian-mobil. Dalam komposisi, masa pakai bagian (Engine) dikelola oleh (Mobil) keseluruhan, dengan kata lain, ketika mobil hancur, Mesin hancur bersamanya. Jadi bagaimana kita mengungkapkan hal ini di C #?
public class Engine
{
 . . .
}
public class Car
{
    Engine e = new Engine();
    .......
}
Seperti yang Anda lihat dalam kode contoh di atas, Mobil mengelola masa Engine.
·         Agregasi
Jika warisan memberi kita 'ini-a' dan komposisi memberi kita 'bagian-dari, kita bisa berpendapat bahwa agregasi memberi kita' memiliki-sebuah 'hubungan. Dalam agregasi, masa bagian yang tidak dikelola oleh keseluruhan. Untuk membuat lebih jelas ini, kita perlu contoh. Selama 12 bulan terakhir + Saya telah terlibat dengan implementasi sistem CRM, jadi saya akan menggunakan bagian ini sebagai contoh.
Sistem CRM memiliki database pelanggan dan database yang terpisah yang menyimpan semua alamat dalam wilayah geografis. Agregasi akan masuk akal dalam situasi ini, sebagai Nasabah memiliki-a 'Alamat. Ini tidak masuk akal untuk mengatakan bahwa Alamat adalah 'bagian-dari' Nasabah, karena tidak. Pertimbangkan cara ini, jika pelanggan tidak lagi ada, apakah alamatnya? Saya berpendapat bahwa tidak ada lagi. Agregasi ditampilkan pada diagram UML sebagai berlian terisi (lihat Gambar 2).
Gambar 2 - Agregasi
Jadi bagaimana kita mengekspresikan konsep agregasi di C #? Yah, itu sedikit berbeda dengan komposisi. Perhatikan kode berikut:
Masyarakat
public class Address
{
 . . .
}
public class Person
{
     private Address address;
     public Person(Address address)
     {
         this.address = address;
     }
     . . .
}
Orang kemudian akan digunakan sebagai berikut:
Address address = new Address();
Person person = new Person(address);
or
Person person = new Person( new Address() );

Seperti yang Anda lihat, Orang tidak mengelola masa Alamat. Jika Orang hancur, Alamat masih ada. Skenario ini tidak memetakan dengan baik ke dunia nyata


C.    Contoh Implementasi Aggregation Relationship Dalam Program



Kode: CPP

#include<iostream.h>



class Employee

{

  public:



    Employee(char *name){

      cout<<"Employee::ctor\n";

      myName_p = new char(sizeof(strlen(name)));

      myName_p = name;

    }

    

    char* disp(){return(myName_p);};



    ~Employee()

    {

      cout<<"Employee:dtor\n\n";

      delete (myName_p);

    }



  private:

    char *myName_p;

};



class Company

{

  public:

    Company(char * compName, Employee* emp){

      cout<<"Company::ctor\n";

      name = new char(sizeof(strlen(compName))); 

      name = compName;

      myEmp_p = emp;

    };



    ~Company()

    {

      cout<<"Company:dtor\n\n";

      myEmp_p = NULL;

    };

    

  private:

    char *name;

    Employee *myEmp_p;

};





int main()

{

  cout<<"\nExample of Aggregation Relationship \n";

  cout<<"-----------------------------------------\n\n";

    

  {

    cout<<"Here, an Employee-Keerti works for Company-MS \n";

    Employee emp("Keerti");

  

    {

      Company comp("MS", &emp);

    } // here Company object will be deleted, whereas Employee object is still there



    cout<<"At this point Company gets deleted...\n";

    cout<<"\nBut Employee-"<<emp.disp();

    cout<<" is still there\n";

    

  } //here Employee object will be deleted



  return(0);

}



output:

-------



Example of Aggregation Relationship 

-----------------------------------------



Here, an Employee-Keerti works for Company-MS 

Employee::ctor

Company::ctor

Company:dtor



At this point Company gets deleted...



But Employee-Keerti is still there

Employee:dtor

Kode: CPP

#include<iostream.h>



class House;



class Room

{

  public:



    Room()

    {

    };



    static void createRoom_v(Room* (&room), House* hse, char* name)

    {

      room = new Room(hse, name); 

    }

    

    Room(House* hse, char* myName)

    {

      cout<<"Room::ctor\n";

      myHse_p = hse;

      

      if(NULL != myHse_p)

      {

        name_p = new char(sizeof(strlen(myName)));

        name_p = myName;

      }

      else

      {

        cout<<"Oops House itself is not Created Yet ...\n";

      }

    };



    ~Room()

    {

      cout<<"Room:dtor\n";

      myHse_p = NULL;

      delete (name_p);

    };



    void disp()

    {

      cout<< name_p;

      cout<<"\n";

    }

    

    static void initList_v(Room *(& roomsList_p)[3])

    {

      roomsList_p[3] = new Room[3];

    }



  private:

    House * myHse_p;

    char * name_p;

};



class House

{

  public:



    House(char *myName)

    {

      cout<<"House::ctor\n";

      name_p = new char(sizeof(strlen(myName)));;

      name_p = myName;



      Room::initList_v(roomsList_p);



      Room* myRoom;

      Room::createRoom_v(myRoom, this, "Kitchen");

      roomsList_p[0] = myRoom;

      

      Room::createRoom_v(myRoom, this, "BedRoom");

      roomsList_p[1] = myRoom;



      Room::createRoom_v(myRoom, this, "Drwaing Room");

      roomsList_p[2] = myRoom;

    }

    

    ~House()

    {

      cout<<"House:dtor\n";

      unsigned int i;

      

      cout<<"Delete all the Rooms ...\n";

      for(i=0; i<3; ++i)

      {

        if(roomsList_p[i] != NULL)

        {

          delete (roomsList_p[i]);

        }

          

      }

      delete [] roomsList_p;

      delete (name_p);

    }



    void disp()

    {

      cout<<"\n\nName of the House :"<<name_p;

      

      if(roomsList_p != NULL)

      {

        unsigned int i;

        cout<<"\n\nRooms details...\n";

        for(i=0; i<3; ++i)

        {

          if(NULL != roomsList_p[i])

          {

            roomsList_p[i]->disp();

          }

        }

        cout<<"\n\n";

      }

    }



  private:

    char* name_p;

    Room* roomsList_p[3];

};



int main()

{

  

  cout<<"\nExample of Composition Relationship\n";

  cout<<"-----------------------------------------\n\n";

  House hse("Vishranti Nilaya");



  cout<<"\n\nHouse details...\n";

  hse.disp();



  cout<<"Here House itself creates the Rooms and Deletes as well, before it gets deletd...\n";



  return(0);

}



output:

-------

Example of Composition Relationship

-----------------------------------------



House::ctor

Room::ctor

Room::ctor

Room::ctor





House details...





Name of the House :Vishranti Nilaya



Rooms details...

Kitchen

BedRoom

Drwaing Room





Here House itself creates the Rooms and Deletes as well, before it gets deletd...

House:dtor

Delete all the Rooms ...

Room:dtor

Room:dtor

Room:dtor


Alamat blog :  http://aggregationrlsp.blogspot.com/2012/06/v-behaviorurldefaultvmlo.html
DAFTAR PUSTAKA