كيف تقوم بعمل Composition بمعناها في UML

السلام عليكم

بين الفينة والأخرى
أفكر في أن أتوقف عن التدوين
تسألوني عن السبب
لي عام وعشرون يوماً أدون
أحاول أن أكتب ما هو مفيد
لكن يبدو أن شعبيتي تخطت جميع الحدود
حتى التعليقات على تدويناتي شحيحة جداً
تصوروا كتبت أنا 74 تدوينة وهناك 200 تعليق في المدونة
بالطبع النصف أنا قمت بالرد على المعلقين
بمعنى أن العدد الفعلي 100 تعليق
وهذا يعني معدل 1.3 تعليقاً للتدوينة الواحدة
يبدولي أني سأموت كمداً من جراء تفاعلكم معي :)
اتركوكم مني ومن ضجري ففي الغالب لن أترك التدوين
لأني أتمتع بكتابة ما يعذبكم
تعالوا نتكلم عن موضوعنا
الموضوع كما لابد وأنكم لاحظتم من العنوان
كيف تقوم بعمل Composition بمعناها في UML
بمعنى آخر
كيف تمنع كائن من أن يولد إذا لم يكن هناك كائن آخر
بمعنى آخر
كيف تخبر المطور على حزمتك بأنه لا يستطيع استخدام null كمدخل لمدخل معين

بداية يجب أن أوضح مفهوم الترابط Composition في UML
الترابط هي علاقة بين كائن وكائن
مغزاها أن الكائن الأول لا يستيطيع التواجد بدون أن يكون الكائن الثاني موجوداً
مثال
السيارة لا وجود لها بدون العجلات

وتمثل في UML بمعين صغير مغلق إلى ناحية الفئة التي تحتاج إلى الفئة الأخرى
في مثالنا السيارة
مثال آخر
الرسالة تتكون من ثلاثة أقسام عنوان المرسل ونص الرسالة والملحقات
عنوان المرسل ونص الرسالة ضروريان وإلا فإنه لا يمكن إعتبار المظروف رسالة
بالنسبة للملحقات
قد أضع عملة ورقية كمساعدة
أو طابع بريد كتذكار
وقد لا أضع شيء
الشيفرة التالية توضح المفهوم

package Composition;

public class Car
{
	Wheel[] wheels;
    private Car(){
        //you can not use this constructor
    	/*في الجافا إذا كان هناك صانع كائنات آخر فلا حاجة لهذا
    	 * الصانع لكني أضيفه للغات الأخرى
    	 * وجعلت صلاحيته خاص لمنع استخدامه
    	 * لا أعلم إن كان هناك لغة تعمل بهذه الطريقة
    	 * لكن الاحتياط واجب
    	 */
    }
    public Car(Wheel[] wheels) throws Exception{
        if(wheels==null)
            throw new Exception("please give me cover");
        this.wheels=wheels;
        System.out.println("Thank you");
    }
    public static void main(String[] args) {
    	Car c=null;
		try {
			c=new Car(null);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		c.wheels=null;
		/*لاحظ أن الجملة السابقة ستعطيك
		 *nullException
		 *في حالة عدم تكوين الكائن c
		 *وهو الحاصل في حالتنا هذه
		 */
	}
}

أعيد وأكرر الموضوع مهم في الحزم packages
أنا أطور حزمة معينة أريد أن أخبر المبرمجين
الذين يستخدمون حزمتي
أن الكائن من فئة أ يعتمد على كائن من فئة ب
سأستخدم الشيفرة السابقة
أتمنى أن أكون أضفت شيئاً جديداً

ملاحظة: كتبت الموضوع لقسم الخبراء في منتدى الفريق العربي للبرمجة

مراجع
موقع wikipedia مقالة بعنوان Class diagram الجزء الخاص بالترابط Composition

http://en.wikipedia.org/wiki/Class_diagram#Composition

تحياتي

Tags: ,

22 Responses to “كيف تقوم بعمل Composition بمعناها في UML”

  1. weeknds قال:

    انا من متابعينك على الرغم من انه توجد اشياء تذكرها لا اعرف عنها شي
    ولكنني نادرا ما اعلق وهذا لا يعني انني لا استمتع بقراءة مواضيعك
    اتمنى لك التوفيق .. ولا تنقطع عن توفير معلومات مفيده
    أتمنى أن استطيع افادة مستخدمين الانترنت كما استفدت انا منهم

  2. admin قال:

    شكراً لك weeknds
    بصراحة ليس في نيتي ترك التدوين
    لأني أجد فيه منتفسي الخاص
    لكن الإنسان يمر بأوقات يحس فيها بالإحباط
    أنت تكتب فمن يقرأ ما تكتب
    تصوري أثر ذلك على المدون
    شكراً لك على التشجيع

    أتمنى أن استطيع افادة مستخدمين الانترنت كما استفدت انا منهم

    ليس هذا بالشيء الصعب

    تحياتي

  3. أميره قال:

    مممم
    وأنا متابعه أيضا .

    اخي .. لا تتركـ التدوين .. فمدونتكـ رائعة ..
    ولا تفكر في عدد تاركي التعليق .. فقط فكر في عدد القراء .
    فأنا مثلا .. أقرأ لكـ دوما ولا أتركـ تعليق سوى مرات قليله .

    دمت ودامت المدونه .

  4. admin قال:

    شكراً أميرة
    على كلماتك الجميلة
    أنا لا أهتم كثيراً للتعليق
    لكني أحب أن أعرف أن ما أكتب فيه
    يهم أحداً ما
    أيا كان هذا الأحد

    تحياتي

  5. fr7ty قال:

    السلام عليكم

    موفقين انشاءالله

  6. admin قال:

    وعليكم السلام

    الجميع بإذن الله
    بالمناسبة تعليق غريب
    هل هناك سبام عربي D:

    تحياتي

  7. M.Allaw قال:

    مشكور أخي علاء وموفق بإذن الله :)

  8. admin قال:

    على الرحب والسعة محمد

    تحياتي

  9. sara_albayati قال:

    السلام وعليكم:اطلب منك ان تعطيني معلومات اكثر عن كيفيه تكوين الانشاء

  10. admin قال:

    بصراحة لم أفهم المقصود بالضبط
    لكن للتوضيح أنا أتكلم عن نوع من أنواع العلاقات الموجودة في UML
    وهي تعني أن الفئة أ لا يمكن أن يكون منها كائن إلا إذا وجد كائن من الفئة ب
    مثال على ذلك
    الرسالة تتكون من مقدمة ومحتوى
    يمكن لك أن تتخلى عن المقدمة ولن يضر ذلك بالرسالة
    لكن لا يمكنك أن تعتبر أن هناك رسالة ما لم يوجد محتوى

    تحياتي

  11. حركات قال:

    موقع أكثر من رائع

  12. admin قال:

    شكراً على الإطراء الذي لا أستحقه في الغالب

    تحياتي

  13. ح ـتــى الثماله قال:

    thx 4 u.
    جزاااااااااكـ الله خير الجزااااء …

    مااارااا استفدت من الموضوع…واحمد ربنا على الهوم وركـ اللي عرفني على البيج
    تبعتكـ وشكرا…وان شاءالله اكون من تابعينك..

    تم اضافة المدونهـ لـ للمفضله واز هوم بيج كمان ^_^

    وعندي كم سؤال ماعرف اذا ممكن تقدر تفيدني فيهم …

    تقبل مروري

  14. admin قال:

    الحمد لله الذي جعلني ميسراً لأمور البشر
    بالطبع أي سؤال أنا في الخدمة

    تحياتي

  15. العمري قال:

    الله يعطيك العافيه يالغالي ,

    متآبعين وبصمت , الله يجزاك خير وينور دروبك كما تنور دروب اخوانك واخواتك من يهمهم ما تكتب ,,

    دعوآتي لك بالتوفيق الله يوفقك ,

    لآعدمنآك يآلغلا ,,

    تقبل ردي المتواضع

  16. admin قال:

    الله يعافيك أخ العمري
    وأي أسئلة أو استفسارات أنا في الخدمة

    تحياتي

  17. hamas قال:

    sry bt ma fhemet she o 3ende bkra exam plz bde brnamej ana atab2o

  18. admin قال:

    والله يا أخي نفسي أفهم ايش بدك بالضبط
    بس على العموم يبدولي أنك قدمت الامتحان
    وأي كلام مني هيكون بدون فائدة تذكر
    على العموم لو مازلت بحاجة للمساعدة أخبرني
    وبرجاء اكتب بالعربي أو الإنجليزي على الأقل حتى أستطيع الفهم

    تحياتي

  19. اكرم محمد عبد الرحمن قال:

    طيب اللي فهمته من اللي بتحكيه الاتي

    بدي امنع الراجل يعمل من عندي اوبجكت سيارة الا لو حط عجال وا وا وا
    العبرة اللي ما فهمتها انو يعني ليييييش خليت الكونستركتور برايفت !
    بدكاش الناس تعمل من الكار تبعتك اوبجكت !
    طيب ليش مش عامل ستاتيك فنكشن على الاقل ترجع شوية غراض من الكار تبعتك !؟
    ولا انت قصدك انو انت عامل الكار على اساس انو بس مكان بتعمل فيه
    assembly
    و بيعطيك نتيجة نهائية و بس … على اساس العجلات و البواب و المتور و الاشياء هادي !
    و بدكاش حد يقعد يبعبشلك فيه !
    تمام الاشي هادا و زي اللوز

  20. admin قال:

    هذه المقالة كتبتها في الماضي السحيق
    1- منع صانع الكائنات الخالي empty constructor باستخدام private و private تعني أن هذا العضو في الفئة class لا يمكن أن تتم مناداته خارج الفئة
    لأن صانع الكائنات الخالي يعني وجود سيارة بدون عجلات
    أنا وضعت حل للغات الكائنية جميعاً وما جعلني أفترض أن بعض لغات البرمجة قد تقوم بتوليد صانع كائنات خالي من ذاتها أن الجافا نفسها في حال عدم وجود صانع كائنات بمدخلات تقوم بوضع صانع كائنات خالي من ذاتها
    2- استخدام return لإيقاف صناعة الكائن لكن فعلياً هذه غير صحيح لأن اللغات الكائنية تعتمد على تنفيذ صانع الكائنات لبناء كائنات جديدة واستخدامي return لا يقدم أو يؤخر لذا انتهيت إلى رمي خطأ في حال كون المدخلات تساوي Null
    حل آخر بعدما تعلمت بعض الأنماط الشهيرة:
    1- صانع كائنات بصلاحية عبور private (سواءاً كان الصانع الخالي أو ذو المدخلات)
    2- استخدام نمط المصنع البسيط (دالة static تكون مسؤولة عن بناء الكائنات)

    تحياتي

  21. اكرم محمد عبد الرحمن قال:

    انت راجل فخم :) :) :) :) :) :) :) :)

  22. admin قال:

    أنا غلبان على الآخر :)

Leave a Reply