Aggregation
- Special Type of Association
- "has a " weak Relationship
- May or may not have relationship
Composition Aggregation
must have may have
total Participation Partial Participation
UML Diagram (See on Board)
Composition
- Filled Diamond
Aggregation
- Hollow Diamond
e.g.
Car must have engine, tyre and Body
Car may have Ac
class Engine{
public :
Engine() {
cout<<"Engine created"<<endl;
}
void start() {
cout<<"Engine Started 800 hrspower"<<endl;
}
};
class Tyre{
public :
Tyre() {
cout<<"Tyre created"<<endl;
}
void size() {
cout<<"Tyre Size is 14 inch"<<endl;
}
};
class Body{
public :
Body() {
cout<<"Body created"<<endl;
}
void type() {
cout<<"Body type is saloon color is white"<<endl;
}
};
class Ac{
public :
Ac() {
cout<<"Ac created"<<endl;
}
void cooling() {
cout<<"Super COOL "<<endl;
}
};
class Car {
private:
Engine e;
Body b;
Tyre t;
Ac *ac;
public :
Car () { ac=NULL;
cout<<"Car created with out Ac"<<endl;
}
Car (bool p) {
if (p==true)
ac=new Ac();
cout<<"Car created with Ac"<<endl;
}
void printSpecification(){
e.start();
b.type();
t.size();
if (ac!=NULL)
ac->cooling();
}
};
void main () {
Car c1;
c1.printSpecification();
cout<<"\n........................\n";
Car c2(true);
c2.printSpecification();
}
......................................................
e.g. Tea
A tea must have Milk, Water and Teabag
A tea may or may not have suger
......................................................
e.g Aggregation with Data members
A Computer composed of Disk, RAM and processor
A computer may have Speaker
computer (Brand,price)
disk(brand,size)
RAM(size)
processor(type,clockSpeed)
Speaker (power)
class Disk{
private:
char brand[30];
int size;
public:
Disk() { }
Disk (char b[],int s) {
cout<<" Disk Create "<<endl;
strcpy(brand,b);
size=s;
}
void setBrand(char b[]) { strcpy(brand,b);}
void setSize(int s) { size=s;}
char * getBrand() { return brand;}
int getSize() { return size;}
};
class RAM{
private:
int size;
public:
RAM() { }
RAM (int s) {
cout<<" RAM Create "<<endl;
size=s;
}
void setSize(int s) { size=s;}
int getSize() { return size;}
};
class Processor{
private:
char type[30];
int clockSpeed;
public:
Processor() { }
Processor (char b[],int s) {
cout<<" Processor Create "<<endl;
strcpy(type,b);
clockSpeed=s;
}
void setType(char b[]) { strcpy(type,b);}
void setClockSpeed(int s) { clockSpeed=s;}
char * getType() { return type;}
int getClockSpeed() { return clockSpeed;}
};
class Speaker{
private:
int power;
public:
Speaker() { }
Speaker(int s) {
cout<<" Speaker Created "<<endl;
power=s;
}
void setPower(int s) { power=s;}
int getPower() { return power;}
};
class Computer{
private:
char brand[20];
int price;
Disk disk;
Processor processor;
RAM ram;
Speaker *speaker;
public :
Computer( ) { speaker=NULL;}
Computer (char cbrand[],int pr,char dbrand[], int dsize,char ptype[], int
cspeed,int rsize,bool spFlag,int power=0)
:disk(dbrand,dsize),processor(ptype,cspeed),
ram(rsize)
// constructor initialization list
{ cout<<" Computer Created "<<endl;
if (spFlag==true){
speaker=new Speaker(power);
cout<<" Computer Created with Speakers"<<endl;
}
strcpy(brand,cbrand);
price=pr;
}
void setSpecification(char cbrand[],int pr,char dbrand[], int dsize,char ptype[],
int cspeed,int rsize)
{strcpy(brand,cbrand);
price=pr;
disk.setBrand(dbrand);
disk.setSize(dsize);
processor.setType(ptype);
processor.setClockSpeed(cspeed);
ram.setSize(rsize);
}
void printSpecification(){
cout<<"Computer Brand="<<brand<<endl;
cout<<"Computer Price="<<price<<endl;
cout<<"Computer Disk Brand="<<disk.getBrand()<<endl;
cout<<"Computer Disk Size="<<disk.getSize()<<endl;
cout<<"Computer Processor Type="<<processor.getType()<<endl;
cout<<"Computer Processor ClockSpeed="<<processor.getClockSpeed()<<endl;
cout<<"Computer RAM Size="<<ram.getSize()<<endl;
if (speaker!=NULL)
cout<<"Speaker Power ="<<speaker->getPower();
}
};
void main(){
Computer c("compaq",25000,"cgate",500,"core i7",300,10,true,300);
}
..........................................................