الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن أن يتشابه ال Implementation لل Aggregation و ال Association ؟

بدأه بن حسن في 31 مايو 2011 · 2 رد · 926 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الكرام

في هذا الدرس للأخ وجدي حول مقدمة تصميم و تحليل المشاريع كائنية التوجه

/index.php?showtopic=186606

في المثال الأخير الخاص بتنفيذ ال Class Diagram لشركة البرمجيات

نجد في هذه الصورة

OOAD11.PNG

أن العلاقة بين ال 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;
        }
}

أرجو الإفادة

تم تعديل هذه المشاركة بواسطة بن حسن في 31 مايو 2011 في 18:03

1

أسألكم الدعاء لأبي و أمي

#2

الفرق هو فرق إداري ومنطقي. لذا قد لا يكون ظاهراً أحياناً في الكود.

عندما نقول أن Software House هو Agregation للـEmployee. فهذا يعني أننا نسمي مجموعة الموظفين (employee) كلها باسم واحد هو Software House.

لكن عندما نقول أن مجموعة من الـEmployee لها علاقة association مع project Leader فنحن نعني أن هذه المجموعة (وهذه المجموعة فقط) تتبع هذا الـproject Leader

لنقل أننا نريد أن نطبق علاوة سنوية لكل الموظفين. عندها سنطبقها على جميع المنتمون إلى Software House

لكن لنقل أننا لدينا مدير مشروع project leader يريد أن يعطي مكافئة للموظفين الذين يعملون تحته. عندها نطبق فقط على الموظفين الـassociated مع هذا الـproject leader

#3

أولا ... أحييك أخى على السؤال

ثانيا:

ليست عندي إجابه محدده للسؤال ..

ولكنى أعتقد أن ال aggregation و ال composition هما عمليتان uni-directional (احادي الإتجاه)

أما ال association .. رغم أنها علاقة أضعف من العلاقتان السابقتان إلا أنها ثانية الإتجاه (bi-direction) في الأصل. (قد لا تريد جعلها كذلك في الحالة التي تحت يديك)

هذا الرابد مفيد جدا:

(ootips) Association, Aggregation and Composition

أيضا أنظر هذا:

http://www.jguru.com...w.jsp?EID=51520

تم تعديل هذه المشاركة بواسطة هويدي في 31 مايو 2011 في 18:59

مواضيع مشابهة