الأخوة الكرام
في هذا الدرس للأخ وجدي حول مقدمة تصميم و تحليل المشاريع كائنية التوجه
في المثال الأخير الخاص بتنفيذ ال Class Diagram لشركة البرمجيات
نجد في هذه الصورة
أن العلاقة بين ال Software House و ال Employee هي علاقة Aggregation
بينما العلاقة بين ال Project Leader و ال Programmer هي علاق Association
و هذا واضح من الشكل لكني لاحظت أن تنفيذ الكود أو ال Implementation هو نفسه و لا يختلف في كل منهما
في كلا الحالتين يتم ال Implementation عن طريق ادراج collection من الكائن الآخر داخل الكلاس . و في كلاهما يتم انشاء ال Collection التي هي ArrayList من داخل الكلاس
فهل هذا وارد ؟؟
هل هذا يعني أن الفرق بين ال Aggregation و ال Association هو فرق في المفهوم فقط ؟ و أن التنفيذ الواحد قد يكون له أكثر من معنى و يتضح المعنى من خلال التصميم بال UML ؟
هذا هو الكود للحالتين
1- ال Association:
// Programmer.java
public class Programmer extends Employee {
private String language;
public Programmer (int id , String name ,double salary , String language) {
super(id,name,salary);
this.language = language;
}
public String getLanguage () {
return language;
}
public String toString () {
return super.toString() + " ,language : " + language;
}
public double getSalary () {
double value = super.getSalary();
if ( language.equals("java") )
value *= 0.2;
return value;
}
}import java.util.Iterator;
import java.util.ArrayList;
public class ProjectLeader extends Programmer {
private ArrayList<Employee> team;
public ProjectLeader (int id ,String name , double salary,String language) {
super(id,name,salary,language);
team = new ArrayList<Employee>();
}
public void addMember (Employee p) {
team.add(p);
}
public String toString () {
String str = super.toString();
str += "\nMember Information : \n";
Iterator itr = team.iterator();
while ( itr.hasNext() ) {
Employee tmp = (Employee) itr.next();
str += tmp.toString() + "\n";
}
return str;
}
public double getSalary () {
double value = super.getSalary();
int size = team.size();
double tmp = value * size * 0.1;
return value + tmp;
}
}2 - ال Aggregation
// SoftwareHouse.java
import java.util.ArrayList;
import java.util.Iterator;
public class SoftwareHouse {
private ArrayList<Employee> staff;
private String name;
public SoftwareHouse (String name) {
this.name = name;
staff = new ArrayList<Employee>();
}
public void addMember (Employee p) {
staff.add(p);
}
public String toString () {
String str = "Staff : " + name + "\n";
Iterator itr = staff.iterator();
while ( itr.hasNext() ){
Employee tmp = (Employee) itr.next();
str += tmp.toString() + "\n";
}
return str;
}
public double getTotalSalary () {
double sum = 0;
Iterator itr = staff.iterator();
while ( itr.hasNext() ) {
Employee tmp = (Employee) itr.next();
sum += tmp.getSalary();
}
return sum;
}
}أرجو الإفادة


