6 c_

Document Sample
6 c_ Powered By Docstoc
					           ‫مىتذيبت جبمع العوم .‬

‫دورة تصميم بروبمج تسيير مخزن .‬

                ‫مخطط الفئبت .‬

        ‫إعذاد شىيقي وصرالذيه‬
   ‫سنتطرق فً موضوعنا هذا إلى مخطط الفئات بعد انتهائنا من مخطط حاالت االستخدام , لكن قبل الخوض فً مناقشة‬
        ‫هذا المخطط علٌنا أوال التطرق إلى بعض المفاهٌم المتعلقة بهذا المخطط و بالتحدٌد مفهوم البرمجة الكائنٌة المنحى‬
    ‫)‪ (POO: Programmation orientée objet‬ألنها األساس الذي ٌقوم علٌه مخطط الفئات , لنبدأ على بركة هللا .‬

                                                                                   ‫1. البرمجة كائنٌة المنحى :‬

    ‫تمهٌد : ٌحاول اإلنسان دوما تؽٌٌر أسلوب حٌاته و تحدٌثه و تطوٌره باستمرار و ذلك طلبا للرفاهٌة و العٌش الحسن و‬
  ‫اختصارا للوقت الثمٌن الذي ٌعد بالنسبة لإلنسان أهم شًء فً حٌاته و البرمجة هً واحدة من المجاالت التً طالها هذا‬
                                                  ‫التطوٌر و التحسٌن حٌث مرت بثالث مراحل مهمة أثناء تطورها :‬

‫- مرحلة البرمجة بلغة اآللة: فً هذه المرحلة كان المبرمجون ٌكتبون برامجهم باستخدام رقمٌن فقط هما الصفر و الواحد‬
                                               ‫و كانت البرامج التً تكتب بهذه اللؽة جد معقدة و من الصعب فهمها.‬

  ‫- مرحلة البرمجة بلغة التجمٌع ‪ : langage d'assemblage‬أتت هذه اللؽة لتزٌل بعض تعقٌدات لؽة اآللة فهً لٌست‬
 ‫إال صارا لتعلٌمات ست عشرٌة هً فً األصل صفر وواحد, ساهمت هذه اللؽة فً التطور السرٌع للؽات البرمجة إال‬‫اخت‬
       ‫أنها مازالت تحتوي على بعض التعقٌدات و التعلٌمات التً توحً للمبرمج بأنه مازال ٌتعامل مباشرة مع المكونات‬
                                                                                             ‫الداخلٌة للحاسب .‬

 ‫- مرحلة البرمجة اإلجرائٌة ‪ :La programmation Procédurale‬مع ظهور هذا الجٌل من لؽات البرمجة بزغ فجر‬
     ‫اللؽات عالٌة المستوى و التً تشبه تعلٌماتها لؽة اإلنسان فهً تحتوي كلمات باللؽة اإلنجلٌزٌة كـ ‪ BEGIN‬و ‪ END‬و‬
 ‫‪ While‬و ‪ IF‬و ؼٌرها.و بظهور هذه اللؽات أصبحت البرمجة فً متناول الجمٌع حتى الهواة من المبرمجٌن , فً الوقت‬
‫الذي كانت فٌه لؽات البرمجة منخفضة المستوى (لؽة اآللة و لؽة التجمٌع ) مقتصرة على دوي االختصاص. لكن هذا الجٌل‬
  ‫من لؽات البرمجة كان ٌعتمد على اإلجراءات و الدوال التً كانت تطبق عددا من ا لتعلٌمات على مجموعة من المعطٌات‬
  ‫أو البٌانات , و كانت البرامج التً تكتب بإحدى لؽات البرمجة اإلجرائٌة ؼٌر منظمة وتفتقر للتنسٌق بل كانت عبارة عن‬
‫عدد كبٌر من الدوال و اإلجراءات المتداخلة التً ٌصعب أحٌانا تذكرها و العمل بها . و أبسط مثال عن المكتبات البرمجٌة‬
                                             ‫ُت‬
                                             ‫ت‬
  ‫تً تعتمد على أسلوب البرمجة هذا هً مكتبة ال ‪ Win 32 API‬التً ستعمل للتحكم بالوٌندوز مكتوبة بلؽة السً و هً‬     ‫ال‬
                                                         ‫تتكون من عشرات اآلالؾ من الدوال التً ٌستحٌل تذكرها .‬

‫ع اللؽات الحدٌثة‬‫- مرحلة البرمجة الكائنٌة : ٌعد مفهوم البرمجة كائنٌة المنحى أساس لؽات البرمجة فً وقتنا الحالً فجمً‬
                        ‫تعتمد علٌه , حٌث أن لؽة السً ++ و الجافا و السً شارب و ؼٌرها كلها لؽات كائنٌة المنحى.‬

  ‫مفهوم البرمجة كائنٌة المنحى جاء بعد البرمجة اإلجرائٌة التً كانت تفتقر للتنظٌم و التنسٌق , من هنا انطلقت البرمجة‬
                                                         ‫ب‬
      ‫كائنٌة المنحى فقد جاءت لكً تجمع بٌن المعالجة التً تقوم ها اإلجراءات و الدوال و بٌن البٌانات و المعطٌات التً‬
   ‫تحتاج لهذه المعالجة , فبعد أن كانت هذه اإلجراءات مفصلة تماما عن البٌانات (ٌمكن أن تقوم بتعرٌؾ بٌانات برنامجك‬
 ‫فً أوله و اإلجراءات فً وسطه أو آخره ), أصبحت اآلن فً البرمجة كائنٌة المنحى مدم جة مع بعضها فً نفس المكان‬
 ‫الذي ٌدعى الكائن ‪( Objet‬ربما ٌبدو لك هذا المصطلح جدٌدا و ؼرٌبا , لكنه فً الحقٌقة أساس البرمجة كائنٌة المنحى ,‬
                             ‫ي‬
     ‫ذلك أن مخترعً هذه البرمجة ركزوا على محاكاة الواقع لالستفادة من كونه الشًء الذي حتك به اإلنسان كثٌرا ) ,‬
  ‫فأصبح لكل كائن من الكائنات التً تشكل فً مجموعها برنامجك بٌاناته (خصائصه) و دواله أو إجراءاته الخاصة به .‬
  ‫فال ٌمكن لدالة أو إجراء ٌنتمً لكائن آخر بالتدخل و التعدٌل على بٌانات هذا الكائن مباشرة , إذا فأول مفهوم من مفاهٌم‬
                                                                               ‫البرمجة كائنٌة المنحى هً الكائنات :‬

    ‫الكائن )‪ : (Objet‬فً البرمجة كائنٌة المنحى ٌمكن اعتبار البرنامج عبارة عن مجموعة من الكائنات التً تتفاعل فٌما‬
‫بٌنها من أجل القٌام بوظائؾ هذا البرنامج , كل كائن من هذه الكائنات ٌحتوي على خصائص )‪ (Propriétés‬سوءا كانت‬
                                                                                   ‫صؾ‬
‫هذه الخصائص عبارة عن ات ممٌزة )‪ (Attributs‬للكائن أو عبارة عن سلوكٌات )‪ٌ (comportement‬تصؾ به .‬

                                                                       ‫كما قلت آنفا الكائن ٌتمٌز بعدة خصائص هً :‬

‫- الل عرف أو الهوٌة )‪ :(Identité‬كل كائن ٌحتوي على معرؾ ٌسمح له بالتماٌز عن ؼٌره من الكائنات, فمثال ٌمكن أن‬
                                                                                                     ‫ُم‬
  ‫نمٌز المنتج ‪ Produit‬و هو كائن عن باقً المنتجات بالرمز ‪ Code‬و كائن السٌارة برقم السٌارة التسلسلً ‪Numéro‬‬
                                                                                    ‫‪.d'immatriculation‬‬
      ‫- الصفات )‪ : (Attributs‬هً عبارة عن معلومات تمٌز الكائن , و بعبارة برمجٌة هً عبارة عن متؽٌرات تخزن‬
                                                                                ‫معلومات حول حالة الكائن .‬

        ‫- الطرائق )‪ (Les méthodes‬أو العملٌات ‪ : Opérations‬فً الحقٌقة فً البرمجة كائنٌة المنحى نستعمل لفظ‬
       ‫‪ méthode‬أو ‪ opération‬عوضا عن ‪fonction‬أو ‪ procédure‬ذلك أنها أصبحت كما قلنا مدمجة فً الكائن.‬

 ‫الطرائق هً السلوكٌات التً ٌتصؾ بها الكائن أو مجموعة العملٌات القادر على انجازها و هً تسمح للكائن بالتفاعل مع‬
                                                                                                            ‫ال‬
                          ‫باقً كائنات , كما أنها مرتبطة بقوة بالصفات ‪ Attributs‬ألنها ؼالبا ما تقوم بالتعدٌل علٌها.‬

   ‫الفئة ‪ : La classe‬الفئة هً نوع مجرد من بٌانات ‪ Type de données abstrait‬لدٌها خصائص ‪propriétés‬‬
      ‫مشتركة بٌن جمٌع أفراد عائلة من الكائنات و بإمكانها إنشاء كائنات تمتلك هذه الخصائص .ٌمكن القول أن الفئة هً‬
‫النموذج العام لنوع من الكائنات فمثال فئة الطلبة تحتوي على صفة : االسم , اللقب , رقم الطالب , سنة الطالب ... من هذه‬
                                                                          ‫ن‬
        ‫الفئة ٌمكن أن ننشأ نسخة لطالب اسمه صرالدٌن , لقبه شنٌقً , رقمه :2556451 , سنة دراسته أولى ماستر ..‬

    ‫الكبسلة ‪ : Encapsulation‬أو ما ٌعرؾ أٌضا بالتؽلٌؾ و هً تنص على إخفاء تفاصٌل عملٌة من العملٌات التً ٌقوم‬
  ‫بها الكائن و إبراز ما ٌعرؾ بالواجهة فقط )‪ (Interface‬و ذلك لٌتسنى لمستخدم الفئة معرفة المه ام التً ٌمكن لفئته القٌام‬
‫بها من دون الخوص فً تفاصٌلها . فمثال إذا كانت لدٌك فئة تحتوي على الدوال الرٌاضٌة كالجب و جٌب التمام و ؼٌرها ,‬
                                                                       ‫يُت‬
   ‫أنت كمستعمل لهذه الفئة لن تضطر لمعرفة كٌؾ حسب الجٌب مثال , بل ٌكفً أن تمرر القٌمة التً ترٌد االستعالم عنها‬
   ‫فقط إلى عملٌة الجٌب و التً بدورها تتولى عوضا عنك حساب هذه القٌمة و تقدمها إلٌك جاهزة لالستعمال . و هنا ٌظهر‬
                                                 ‫الفئ‬
    ‫مفهوم مبرمج الفئة و مستعمل الفئة فمبرمج الفئة سٌهتم بجمٌع تفاصٌل ة و ٌقوم ببرمجة جمٌع عملٌاتها. أما مستعمل‬
                                                                         ‫الفئة ما علٌه سوى استعمال هذه العملٌات الجاهزة.‬

                    ‫ت‬
       ‫هناك فائدة أخرى للكبسلة و هً حفظ بٌانات الكائن من التؽٌٌر من طرؾ كائن آخر مباشرة و ذلك ل جنب تداخل و‬
 ‫تعارض البٌانات. و بهذا ٌصبح الكائن مستقال تماما عن بقٌة الكائنات و ٌصبح له كٌان خاص , فلو أردنا إجراء تؽٌٌرات‬
  ‫على كائن من الكائنات التً تشكل برنامجنا فنحن سنهتم بهذه التؽٌٌرات على مستوى هذا الكائن فقط من دون الخوؾ من‬
 ‫تأثٌر هذه التؽٌٌرات , و هذا ما لم ٌكن فً البرمجة اإلجر ائٌة التً ٌؤدي فٌها تؽٌٌر بسٌط فً متؽٌر من متؽٌرات البرنامج‬
       ‫أو فً دالة من دواله إلى التأثٌر على عدد كبٌر من الدوال و المتؽٌرات التً كانت فً حالة ترابط وثٌق فٌما بٌنها .‬

  ‫الوراثة ‪ : Héritage‬الوراثة فً البرمجة تشبه إلى حد كبٌر الوراثة فً الواقع , فنقول عن فئة أنها ترث فئة أخرى هذا‬
    ‫ٌعنً أن جمٌع خصائص الفئة الموروثة ستنتقل إلى الفئة الوارثة ( ما ٌقابلها فً الطبٌعة جمٌع ممتلكات الموروث تنتقل‬
                                                                                                      ‫إلى الورثة).‬

                  ‫كانت هذه بعض مفاهٌم البرمجة الكائنٌة المنحى فٌما ٌلً سنقوم بشرح مخطط الفئات و أهم خصائصه .‬

                                                              ‫2. مخطط الفئات ‪: Diagramme de Classes‬‬

      ‫ٌعتبر هذه المخطط أهم مخططات ‪ UML‬و هو المخطط الذي ال ٌنبؽً أن ٌؽٌب عن أي نمذجة ألي نظام ٌعتمد على‬
                                                                                 ‫البرمجة كائنٌة المنحى .‬

     ‫و فً حٌن أن مخطط حاالت االستخدام ٌوضح لنا النظام من وجهة نظر الممثلٌن ‪ ,Les acteurs‬فإن مخطط الفئات‬
                                                                                                           ‫البن‬
    ‫ٌوضح لنا ٌة الداخلٌة للنظام .هذا المخطط ٌوفر لنا تمثٌال مجردا لكائنات النظام التً تتفاعل فٌما بٌنها من أ جل تنفٌذ‬
                                                                                            ‫مخططات حاالت االستخدام.‬
                                                                                ‫2.1. تمثٌل الفئة فً مخطط الفئات :‬

                                                                           ‫الفئة تمثل فً هذا المخطط بالشكل التالً :‬




                                                                                ‫ال‬
  ‫الشكل مقسم إلى ثالث أجزاء , فً جزء األول نقوم بكتابة اسم الفئة و ٌكون اسم الفئة دال على الوظٌفة التً تؤدٌها ,‬
      ‫فً الجزء الثانً نقوم بسرد جمٌع الصفات التً تتصؾ بها فئتنا و فً الجزء األخٌر نقوم بإدراج جمٌع الطرائق أو‬
                                                                                      ‫العملٌات التً تقوم بها الفئة .‬

 ‫2.2. مجال الرؤٌة ‪ :La visibilité‬ربما قد الحظت عالمة + و – و # , هذه العالمات تبٌن لنا إمكانٌة الوصول إلى الـ‬
                                                          ‫ت‬
                                   ‫‪ Attribut‬أو الـ ‪ méthode‬التً بدا خل الفئة , و هً عرؾ بمحددات الوصول :‬

‫محدد الوصول ‪ : (+) Public‬أي عنصر من الفئة أو من خارج الفئة ٌمكنه رؤٌة الخاصٌة (الصفة ‪ Attributs‬أو العملٌة‬
                                                                                          ‫ُت‬
                                                                                          ‫ت‬
                                                                          ‫‪ )opération‬التً سبق بهذا المحدد .‬

                                                          ‫ُت‬
                                                          ‫ت‬
                  ‫محدد الوصول ‪ :(-) Private‬ال ٌمكن رؤٌة الخاصٌة التً سبق بهذا المحدد إال من داخل الفئة نفسها .‬

    ‫محدد الوصول ‪ :)#( Protected‬ال ٌمكن رؤٌة الخاصٌة التً تسبق بهذا المحدد إال من داخل الفئة أو من فئة أخرى‬
                                                                                             ‫ورثت هذه الفئة.‬

                                 ‫مثال : لنأخذ على سبٌل المثال فئة السٌارة , سٌكون تمثٌلها فً مخطط الفئات كما ٌلً :‬




                                                                                  ‫ال‬
    ‫هذه الفئة لدٌها ثالث صفات هً نوعٌة ‪ ,La marque‬الطراز ‪ , Le modèle‬المسافة التً قطعتها ‪La distance‬‬
    ‫‪ ,écoulée‬إضافة إلى العملٌة )(‪ Conduire‬و التً تمثل سلوك القٌادة , و من المعلوم أن السٌارة كلما قطعت مسافة‬
         ‫معٌنة ٌقوم عداد خاص فً السٌارة بحساب ه ذه المسافة , أي أن هذه العملٌة تقوم بالتأثٌر أو التعدٌل على الصفة‬
            ‫‪ DistanceEcoulée‬حٌث و فً كل مرة ٌتم استدعاء العملٌة ‪ Conduire‬نقوم بإضافة قٌمة ‪ Km‬إلى قٌمة‬
                                                                                      ‫‪ DistanceEcoulée‬القدٌمة .‬

                                                                ‫ة‬
   ‫و ربما تالحظ أن الصفة ‪ DistanceEcoulée‬مسبوق بمحدد الوصول ‪ Private‬ذلك لنمنع أي تعدٌل لهذه الصفة من‬
                                                    ‫است‬
  ‫خارج الفئة ‪ , Voiture‬و نحصر هذا التعدٌل فقط من خالل دعاء العملٌة )(‪ Conduire‬و هذا ما ٌمكن أن نترجمه‬
                                                                 ‫ي ه‬
                     ‫فً الواقع إلى أن المسافة التً تقطعها السٌارة ال مكن ا أن تتؽٌر إال إذا تحركت هذه السٌارة فعال .‬
                                                                                       ‫2.3. العالقات بٌن الفئات :‬

                                                     ‫2.3.1. التعمٌل و الوراثة ‪: Généralisation et Héritage‬‬

    ‫سبق لنا و أن شرحنا مفهوم الوراثة فً البرمجة كائنٌة المنحى . فً مخطط الفئات نمثل عالقة الورا ثة بٌن فئتٌن بسهم‬
‫رأسه مثلث ٌشٌر إلى الفئة الموروثة و بداٌته من الفئة الوارثة , الفئة الوارثة تحتوي جمٌع خصائص الفئة الموروثة ماعدا‬
                                                                   ‫ال‬
         ‫الخصائص الخاصة أي التً تكون مسبوقة بمحدد وصول ‪ . Private‬المثال التالً ٌبٌن لنا هذه العالقة بٌن الفئة‬
                                                                   ‫‪ Personne‬و الفئتٌن ‪ Étudiant‬و ‪Enseignant‬‬




 ‫ٌمكننا القول أن الفئة ‪ Personne‬أعم من الفئتٌن ‪ Étudiant‬و ‪ Enseignant‬أو الفئتٌن السالفتٌن الذكر أخص من الفئة‬
                                                         ‫ل‬
  ‫‪ Personne‬أي كلما اتجهنا إلى األعلى زاد التعمٌم و كما اتجهنا إلى األسفل زاد التخصٌص و ٌظهر هذا جلٌا فً حالة‬
                                                           ‫كون هناك أكثر من عالقة تعمٌم واحدة كالمثال التالً :‬




                                                                           ‫2.3.2. الروابط ‪:Les Associations‬‬

                                                                                             ‫ي‬
                           ‫الروابط توضح لنا طر قة ارتباط الفئات فٌما بٌنها و العالقات التً تجمع بٌن مختلؾ الفئات .‬
 ‫مثال فً المثال التالً فئة المضلع ‪ Polygone‬معرفة على األقل بثالث نقاط أو أكثر أي بٌنها و بٌن الفئة ‪ Point‬رابطة‬
                                                                                    ‫‪( Défini par‬معرؾ بـ)‬




                                                             ‫- نهاٌة الرابطة ‪: Terminaison d'association‬‬

   ‫عرفنا فٌما سبق أن الفئة تحتوي على صفات ‪ Attributs‬هذه الصفات ٌمكن أن تكون عبارة عن متؽٌر من نوع سلسلة‬
     ‫حروؾ ‪ string‬أو متؽٌر صحٌح ‪ int‬أو أي نوع من المتؽٌرات التً نعرفها فً لؽات البرمجة , الجدٌد هنا هو أن الـ‬
   ‫‪ٌ Attribut‬مكن أن ٌكون نوعا جدٌدا من المتؽٌرات قمنا نحن بإنشائه كأن ٌكون نسخة من فئة عر فناها سابقا , و علٌه‬
                        ‫ّر‬
   ‫ٌمكننا تمثٌل هذا المتؽٌر لما نستعمله فً مخطط الفئات بوضع اسمه نهاٌة الرابطة بجانب الفئة التً استنسخناه منها , و‬
    ‫ل‬                      ‫ا‬
 ‫بالعودة للمثال السابق الفئة ‪ polygone‬تحتوي ثالث نسخ أو أكثر من الفئة ‪ Point‬تشكل رؤوس ‪ Les sommets‬هذا‬
                                                ‫الـ ‪ , polygone‬و ٌمكننا تمثٌل هذه العالقة فً مخطط الفئات كما ٌلً :‬




 ‫و لكً تبسط الفكرة أكثر الكود التالً المكتوب بلؽة السً شارب ٌوضح طرٌقة تحوٌل المخطط السابق إلى كود برمجً .‬
                                                                 ‫سنقوم بالتطرق لهذا الموضوع فً األخٌر :‬

‫‪class Polygone‬‬
    ‫{‬
        ‫من أكبر 3//;]‪public Point[] Sommets = new Point[X‬‬                                         ‫حيف ‪X‬‬
    ‫}‬


                                                                             ‫و التمثٌل السابق مطابق للتمثٌل التالً :‬




                                                                                     ‫- التعدد ‪: La multiplicité‬‬

‫ربما الحظت فً المثال السابق أن فئة ‪ polygone‬أمامها رقم 1 و فئة ‪ Point‬أمامها المجال 3..* فً الحقٌقة هذه هً الـ‬
‫‪ Multiplicité‬أي أنه أي نسخة من فئة ال ‪( Polygone‬أي كائن من الكائنات التً ٌمكننا إنشائها من هذه الفئة ) ٌمكنه أن‬
    ‫ٌحتوي ثالث نسخ من الفئة ‪ Point‬فأكثر تشكل رؤوس هذا الـ ‪ polygone‬و أن أي نسخة من الفئة ‪ Point‬تنتمً إلى‬
                                                                        ‫نسخة واحدة و وحٌدة من الفئة ‪.Polygone‬‬

                                                                      ‫و هذه بعض األمثلة حول ال ‪: multiplicité‬‬

                                                                                      ‫- نسخة واحدة فقط:1 أو 1..1‬

                                                                                  ‫- صفر نسخة أو أكثٌر: * أو *..0‬
                                                                                   ‫- على األقل نسخة واحدة: *..1‬

                                                                                   ‫- من واحد إلى ستة نسخ : 6..1‬

                                                                               ‫- اتجاه الرابطة ‪La navigabilité‬‬

 ‫فً الحالة العامة اتجاه الرابطة ٌكون فً الجهتٌن , لكن ٌمكننا تحدٌد االتجاه فً حالة كون فئة ما تستعمل فئة أخرى و‬
‫الفئة الثانٌة ال ٌمكنها استعمال الفئة األولى , و هذا ما نالحظه فً المثال السابق حٌث أن ال ‪ Polygone‬معرؾ بثالث‬
     ‫نقاط بٌنما النقطة من المستحٌل أن تكون معرفة ب ‪ Polygone‬وهذا ما ٌدل علٌه اتجاه السهم فً نهاٌة الرابطة .‬

‫ٌجدر بً اإلشارة إلى أن الرابطة ال تكون فقط بٌن فئتٌن اثنٌن بل ٌمكنها أن تتعدى ذلك إلى ثالث فئات أو أكثر و تسمى‬
  ‫فً هذه الحالة رابطة متعددة ‪ ,Association n-aire‬بٌنما تسمى فً الحالة األولى ‪ Association binaire‬رابطة‬
                                                                                                         ‫ثنائٌة.‬

                                                                     ‫- الفئة-الرابطة ‪: La classe-association‬‬

                                     ‫تق‬
  ‫الفئة- الرابطة تجمع بٌن خصائص الفئات و خصائص الروابط معا, فهً وم بربط فئتٌن أو أكثر و تحتوي صفات و‬
                                        ‫عملٌات ‪ Des attributs et des opérations‬مثل أي فئة أخرى .‬

                                   ‫تمثل الفئة- الرابطة بخط متقطع بٌن الفئة و الرابطة التً تمثلها و هذا شكلها العام:‬




                                                                                ‫حٌث أن الفئة ‪ C‬هً الفئة- الرابطة.‬

                                                                                       ‫- التجمٌع ‪:L'agrégation‬‬

                                                                                ‫ال‬
 ‫التجمٌع هً حالة خاصة من رابطة تعبر عن عالقة احتواء , هذه العالقة ال تحتاج لتسمٌة فهً تعنً >>ٌحتوي<< أو‬
                                        ‫>>مشكل من>> . تمثل هذه العالقة بمعٌن فارغ ٌشٌر إلى الفئة الحاوٌة .‬

                                                                                      ‫هذا مخطط عام هذه العالقة :‬
                                                                                   ‫- التركٌب ‪: La composition‬‬

 ‫التركٌب أقوى من التجمٌع إذ أن الكائن المشكل من تركٌب عدة كائنات أخرى ال ٌمكنه االستؽناء عن كائن واحد من هذه‬
                                        ‫الكائنات التً تشكله . تمثل هذه العالقة بمعٌن ممتلئ ٌشٌر إلى الفئة المركبة .‬
                                           ‫َ‬

  ‫مثال ذلك السٌارة م ركبة من محرك ‪ moteur‬و أربع عجالت ‪ , quatre roues‬فإذا نزعنا مركب من هذه المركبات‬
                                                          ‫من السٌارة ال ٌمكننا القول عنها أنها سٌارة كاملة .‬




                                                                                         ‫2.3. إعداد مخطط الفئات:‬

                                                             ‫من أجل بناء مخطط الفئات علٌنا إتباع الخطوات التالٌة :‬

      ‫جد فئات المجال الذي أنت بصدد دراسته : هذه المرحلة تتم ؼالبا باستشارة خبٌر فً هذا المجال فهو ٌزودك بأدق‬
   ‫التفاصٌل و ٌعطٌك كل المعلومات التً تحتاجها من أجل استخراج الفئات و خصائصها , و ٌتم ذلك ؼالبا عن طرٌق‬
   ‫استعمال دفتر الشروط ‪ Cahier des charges‬تكتب فٌه جمٌع معلومات المشروع التً نستقٌها من المستخدم .و فً‬
    ‫حالتنا نحن علٌنا االتصال بصاحب المحل الذي ٌزودنا بكل المعلومات الالزمة لنكتبها هنا فً المنتدى فً فقرة نص‬
                             ‫المشروع , بعدها علٌنا التمحٌص فً هذه المعلومات و استخالص الفئات التً نحتاجها .‬

‫جد العالقات أو الروابط بٌن الفئات : العالقات دوما تستخرج من أفعال أو من جمل فعلٌة تدل على ارتباط فئة بفئة أخرى‬
‫أو بعدد من الفئات , مثل >>‪( <<est composé de‬مركب من ) , >>‪ٌ( <<Possède‬ملك) , >> ‪<<Travail pour‬‬
                                                                                                ‫(ٌعمل لدى) ...‬

          ‫جد خصائص الفئات: الصفات ‪ Attributs‬ؼالبا ما تكون عبارة عن أسماء أو جمل سمٌة كسرعة السٌارة مثال‬

                                  ‫>>‪, <<la vitesse d'une voiture‬أو سعر منتج >>‪. <<Prix d'un produit‬‬

  ‫بالنسبة للعملٌات فٌمكننا جمعها من خالل معرفة مختلؾ الوظائؾ التً ٌؤدٌها كائن ما , كإضافة منتج جدٌد ‪Ajouter‬‬
                                                                                ‫‪ , produit‬تعدٌل منتج ...‬

                                     ‫نظل و بسط النموذج : و ذلك عن طرٌق إزالة الفئات المكررة و استخدام الوراثة .‬

 ‫ال ٌمكننا بناء مخطط فئات كامل من أول وهلة بل سنضطر فً كل مرة تظهر لنا فٌها مستجدات للعودة إلى هذا المخطط‬
    ‫أو أي مخطط آخر للتعدٌل علٌه و إضافة كل ما هو جدٌد . و علٌه فإن النمذجة كائنٌة المنحى هً عبارة عن عملٌة‬
                                         ‫تكرارٌة و لٌست خطٌة , سنضطر فٌها للعودة للوراء حال اضطرارنا لذلك.‬

                                                                   ‫2.4. تحوٌل مخطط الفئات إلى تعلٌمات برمجٌة :‬

   ‫لكل من التصامٌم و الرسومات السابقة ترجمة فً لؽات البرمجة , فهدفنا فً النهاٌة الوصول إلى البرنامج الذي نحن‬
  ‫بصدد دراسته و هذا ال ٌكون إال باستعمال لػة من لؽات البرمجة , طبعا كائنٌة المنحى . فً القسم الموالً سأقوم بذكر‬
                                        ‫كٌفٌة تحوٌل مخطط الفئات فً لؽة البرمجة كائنٌة المنحى سً شارب )#‪: (C‬‬
                                                                          :‫تحوٌل فئة‬



class ClasseA
    {
        public string Attribut1;
        private int Attribut2;
        protected double Attribut3;
        ...

          public void opération1;
          private string opération2;
          ...
   }

                                                                  :‫تحوٌل عالقة وراثة‬



class ClasseA:ClasseB
    {
        ...
        ...
    }
                    }




                                                              :1 ‫تحوٌل رابطة 1 مقابل‬


class ClasseA
    {
        public ClasseB b = new ClasseB();

   }
        class ClasseB
   {
            public ClasseA a = new ClasseA();

    }

                                                :‫تحوٌل رابطة 1 مقابل 1 ذات اتجاه واحد‬


class ClasseA
    {
        private ClasseB b = new ClasseB();

   }
class ClasseB
   {
         // A ‫الفئة من نسخ على تحتوي ال الفئة هذه‬
         ...

   }
                                                                         :* ‫تحوٌل رابطة 1 مقابل‬

class ClasseA
    {
       private ArrayList<ClasseB> b = new ArrayList();

     }
         class ClasseB
     {
            public ClasseA a = new ClasseA();

     }
                                                          :‫تحوٌل رابطة 1 مقابل * ذ ات اتجاه واحد‬

class ClasseA
    {
       private ArrayList<ClasseB> b = new ArrayList();

     }


class ClasseB
    {
         // A ‫الفئة من نسخ تحتوي ال الفئة هذه‬

     }

                                                                              ‫مق‬
                                                                : ‫تحوٌل رابطة 1 بل قٌمة محددة‬


class ClasseA
    {
        private ClasseB[] b = new ClasseB[8];

     }

class ClasseB
    {
          public ClasseA a = new ClasseA();
    }


                                                                          : ‫تحوٌل رابطة التجمٌع‬



           ‫ٌكون تحوٌل هذه الرابطة كتحوٌل أي رابطة عادٌة‬




                                                                          : ‫تحوٌل رابطة التركٌب‬

‫تحول رابطة التركٌب ٌكون كأي رابطة عادٌة ذات اتجاه واحد‬
   ‫بعد كل هذا الدرس الطوٌل و الممل سنعود اآلن لمشروعنا لنطبق كل ما درسناه علٌه , لكن قبل ذلك سنضطر فً هذه‬
      ‫حة باللون األخضر.‬‫المرة أٌضا للعودة إلى نص مشروعنا للتعدٌل علٌه قلٌال كالعادة . التعدٌالت و اإلضافات موض‬

                                  ‫1 . المحل ٌحتوي على منتجات للبٌع ‪ Produits‬تشكل لنا المخزون المتوفر فً المحل.‬
                                                                                     ‫منت‬
‫2. ٌقوم صاحب المحل بشراء جات من عند ممولٌن ‪ fournisseurs‬و ذلك فً تارٌخ محدد و عن طرٌق فاتورة تقدم‬
                                               ‫من طرؾ الممول و ٌتم إدخال بٌانات هذه المنتجات كوصول. ‪Arrivage‬‬
   ‫3. قبل شراء المنتجات صاحب المحل ٌقوم بتحرٌر طلبٌة ‪ٌ Commande‬ضع فٌها جمٌع المنتجات التً ٌرٌد شرائها‬
                                                                                                      ‫من عند الممول.‬
                                ‫4. ٌتعامل صاحب المحل مع الزبائن عن طرٌق الفواتٌر التً تحوي المنتجات المشترات .‬
 ‫5. كل منتج لدٌه تعرٌفة أو رمز ‪ Code‬لدٌه وصؾ ,‪ Désignation‬ثمن شراء ,‪Prix Achat‬ثمن بٌع ,‪Prix Vente‬‬
                                                      ‫كمٌة ‪ Quantité‬و الحد األدنى فً المخزن ‪.Stock Minimum‬‬
‫6. الفاتورة تحتوي على العدٌد من المنتجات, فً المقابل المنتج الواحد ٌمكن أن ٌظهر فً أكثر من فاتورة . الفاتورة لدٌها‬
                  ‫رقم , ‪ Numéro‬تارٌخ إجراء الفاتورة ‪ Date de facture‬و قٌمة المبلػ المدفوع للفاتورة ‪Montant‬‬
                                                                                                  ‫ب‬     ‫ي‬
                                                              ‫7. الزبون تصؾ رقم, اسم, لقب, رقم الهاتؾ, عنوان .‬
                                                                         ‫8.الطلبٌة تحتوي رقم و تارٌخ إجراء الطلبٌة .‬

                                                          ‫9. الممول لدٌه رقم, اسم, لقب, رقم هاتؾ, فاكس, عنوان.‬
 ‫01. طبعا كل عملٌة تحدٌث أو إضافة أو حذؾ لمنتج أو فاتورة أو زبون أو ممول ٌقوم بها صاحب المحل بعدما ٌسجل‬
                                                                                        ‫دخوله للبرنامج بكلمة سر .‬
 ‫11. ٌمكن لصاحب المحل من تعدٌل إعدادات البرنامج من تؽٌٌر للؽة البرنامج أو أخد نسخة احتٌاطٌة من قاعدة البٌانات‬
                                                                           ‫أو الرجوع إلى نسخة تم تخزٌنها من قبل.‬
‫21. ٌمكن لصاحب المحل االضطالع على المخزن و ذلك من أجل تحدٌد المنتجات التً على وشك النفاد منه أو من أجل‬
                                                                                               ‫تعدٌل بٌانات محددة.‬

                                                                       ‫31. كل منتجا ٌنتمً لفئة محددة من المنتجات .‬

                                 ‫41. دفع الفاتورة ٌكون دفعة واحدة أو على مراحل و ٌتم فً كل مرحلة تسجٌل تاري‬
‫خ الدفع و المبلػ المدفوع. نسمً هذه‬
    ‫العملٌة بالـ ‪ . versement‬كذلك بالنسبة للمنتجات التً ٌجلبها صاحب المحل من عند الممولٌن ٌمكنها أن تكون دفعة‬
                                                                                         ‫واحدة أو على مراحل.‬

                    ‫51. ٌمكن أن ٌكون هناك أكثر من مدٌر للمحل ٌتحكم فً مختلؾ عملٌات البٌع و الشراء أو ؼٌرها .‬

          ‫61. ٌمكن لصاحب المحل أن ٌقوم بصرؾ بعض التكالٌؾ,‪ Dépense‬نقوم بتخزٌن تارٌخ صرفها و قٌمة هذه‬
                                                                                ‫التكالٌؾ ‪.Le montant‬‬



                                   ‫اآلن نبدأ فً نمذجة مخطط الفئات اعتمادا على المراحل التً ذكرناها فً الدرس :‬

                                                                                              ‫أوال استخراج الفئات:‬

                                                        ‫من الجملة 1 من نص المشروع نستخرج الفئة منتج ‪Produit‬‬
                                     ‫من الجملة 2 ٌمكننا استخراج فئة الممول ‪ Fournisseur‬و فئة الـ ‪Arrivage‬‬




                                                               ‫من الجملة 3 نستخرج فئة الطلبٌة ‪Commande‬‬




                                                           ‫من الجملة 4 لدٌنا فئتٌن هما فئة الزبون و فئة الفاتورة‬




                                                          ‫من الجملة 31 ٌمكننا استخراج الفئة "فئة" ‪Catégorie‬‬




                              ‫كذلك فئة مدٌر المحل ‪ Administrateur‬و فئة التكالٌؾ ‪ Dépense‬من الجملة 61.‬




                                                                            ‫ثانٌا استخراج الروابط بٌن الفئات :‬

‫أوال الفئة ‪ Produit‬هً الفئة المركزٌة فً شروعنا ألن أؼلب الروابط تكون بٌنها و بٌن الفئات األخرى و بالرجوع إلى‬
 ‫الجملة 4 من نص المشروع نستخرج رابطة بٌن الفئة ‪ Produit‬و الفئة ‪ Facture‬فكل فاتورة تحتوي منتج واحد على‬
                ‫األقل أو أكثر, و كل منتج ٌمكن أن ٌظهر فً أي فاتورة . هذا ما ٌمكننا ترجمته فً المخطط التالً :‬
  ‫من الجملة 2 نستخلص رابطة بٌن المنتج و الممول حٌث أن لكل منتج فً مخزننا ممول أحضرنا من عنده هذا المنتج ,‬
                          ‫حٌث لكل منتج ممول واحد و لكل ممول العدٌد من المنتجات التً قام ببٌعها لصاحب المحل .‬




‫الرابطة التً بٌن الممول و المنتج هً رابطة وصول ‪ , Arrivage‬هذه الرابطة تحتوي على خصائص كما ذكرنا فً نهاٌة‬
                                           ‫الجملة الثانٌة لذلك علٌنا تحوٌلها إلى فئة _رابطة لٌصبح المخطط هكذا :‬




 ‫من الجملة 3 ٌمكننا استخراج رابطة احتواء بٌن الطلبٌة و المنتج , الطلبٌة و الممول , حٌث ٌقوم صاحب المحل بتحرٌر‬
                                 ‫طلبٌة ٌضع فٌها جمٌع المنتجات التً ٌعتزم شرائها من عند ممول ٌحدده مسبقا .‬

‫من الجملة 5 ٌمكننا تحدٌد رابطة بٌن الزبون و الفاتورة , حٌث لكل زبون فاتورة أو أكثر و الفاتورة متعلق بزبون واحد و‬
                                                                                                           ‫وحٌد.‬

                                                                                                          ‫ؾ‬
                                                                                       ‫ٌكون مخططنا كما ٌلً :‬
 ‫من الجملة 31 كل منتج ٌنتمً لفئة معٌنة ‪ , Catégorie‬أي توجد رابطة انتساب ‪ Appartenace‬بٌن فئة ‪ Produit‬و‬
                                                                                       ‫فئة ‪: Catégirie‬‬




  ‫الجملة 41 : قبل وصولً إلى هذا الحل أي إنشاء فئة ‪ Versement‬بها كل هذه الخصائص. كانت هذه الفئة عبارة عن‬
‫صفة من صفات فئة ال ‪ Facture‬و فئة ‪ , Arrivage‬و كانت مهٌئة لالحتواء قٌمة الفاتورة فقط , لكن بعض التواصل مع‬
‫صاحب المحل اتضح أن الـ ‪ٌ Versement‬مكن أن ٌكون على مراحل و ٌمكن أن تحمل كل مرحلة من الدفع قٌم ة معٌنة‬
                                                                                   ‫مرت‬
                                 ‫. لذا ستكون هذه الفئة بطة مع الفئة ‪ Facture‬و الفئة ‪ Arrivage‬على حدا سواء:‬
    ‫ ,حٌث ٌمكن أن ٌقوم أي‬Dépenses ‫ جد واضحة مع المصارٌؾ‬administrateur ‫الجملة 61 : ستكون عالقة الـ‬
                                                           .‫ بصرؾ تكالٌؾ معٌنة‬Administrateur




                                                                         : ‫ثالثا استخراج خصائص الفئات‬

           : ‫اعتمادا على النص أعاله و بالرجوع إلى صاحب المحل , الجدول التالً ٌحتوي كل الفئات و خصائصها‬

            opération ‫العملٌة‬                  Attribut ‫الصفة‬                             Classe ‫الفئة‬
AjouterProd()                    Code_Prod                                                   Produit
ModifierProd()                   Designation
SupprimerProd)(                  PrixAchat
AfficherProd)(                   PrixUnitaire
                                 QuantitéEnStock
                                 StockMin
                                 TVA
AjouterFacture()                 Num_Fact                                                    Facture
SupprimerFacture)(               Date
ModifierFacture)(
AnnulerFacture)(
AfficherFacture)(
ImprimerFacture)(
AjouterFourn)(                   ID_Fourn                                               Fournisseur
SupprimerFourn)(                 Nom
ModifierFourn)(                  Prenom
                                 Tel
                                 Fax
                                 Adresse
                                 Banque
                                 Num_compte
AjouterArriv)(                   Num_Arriv                                                  Arrivage
ModifierArriv)(                  Date
SupprimerArriv)(                 Quantité
AnnulerArriv)(                   PrixAchat
‫()‪AjouterComm‬‬                          ‫‪Num_Comm‬‬                                                       ‫‪Commande‬‬
‫()‪ModifierComm‬‬                         ‫‪Date‬‬
‫()‪SupprimerComm‬‬
‫()‪ImprimerComm‬‬
‫()‪AjouterClient‬‬                        ‫‪ID_Cient‬‬                                                              ‫‪Client‬‬
‫()‪SupprimerClient‬‬                      ‫‪Nom‬‬
‫()‪ModifierClient‬‬                       ‫‪Prenom‬‬
‫()‪AfficherClients‬‬                      ‫‪Tel‬‬
‫()‪AfficherCréditClient‬‬                 ‫‪Adresse‬‬
                                       ‫‪Banque‬‬
                                       ‫‪Num_Chèque‬‬
‫‪AjouterCat‬‬                             ‫‪Num_Cat‬‬                                                          ‫‪Catégorie‬‬
‫‪SupprimerCat‬‬                           ‫‪Nom_Cat‬‬
‫‪modifierCat‬‬                            ‫‪Desc_cat‬‬
‫()‪AjouterVersement‬‬                     ‫‪Num_Versement‬‬                                                  ‫‪Versement‬‬
‫()‪SupprimerVersement‬‬                   ‫‪Date_Versement‬‬
‫()‪ModifierVersement‬‬                    ‫‪Montant‬‬
‫()‪AjouterAdmin‬‬                         ‫‪Nom_Admin‬‬                                                 ‫‪Administrateur‬‬
‫()‪ModifierAdmin‬‬                        ‫‪MotDePasse‬‬
‫()‪SupprimerAdmin‬‬
‫)(‪AjouterDép‬‬                           ‫‪Num_Dép‬‬                                                           ‫‪Dépense‬‬
‫)(‪ModifierDép‬‬                          ‫‪Date‬‬
‫)(‪ModifierDép‬‬                          ‫‪Montant‬‬
‫)(‪SupprimerDép‬‬

                                       ‫‪PrixVente‬‬                                                       ‫‪Fact_Prod‬‬
                                       ‫‪Quantité‬‬
                                       ‫‪Quantité‬‬                                                     ‫‪Comm_Prod‬‬


 ‫هناك توضٌح فٌما ٌخص الفئة ‪ , Arrivage‬هذه الفئة تحتوي على صفتٌن ربما ٌتضح أنها لٌستا تابعتٌن لها بل خاصتٌن‬
                                                                                           ‫بالفئة ‪. Produit‬‬

        ‫لنفهم سبب وضعهما هنا علٌنا أوال االتفاق على أمر مهم ذكرناه فً نص المشروع , لقد قلنا أن المنتجات تمثل لنا‬
    ‫المخزون المتوفر فً المحل , أي أن الفئة ‪ Produit‬تمثل بشكل من األشكال المخزن فً حد ذاته . حٌث تحدد الصفة‬
 ‫‪ Quantité‬كمٌة هذا المنتج المتوفرة فً المحل بٌنما الصفة ‪ Quantité‬الموجودة فً الفئة ‪ Arrivage‬فهً خاصة بهذه‬
  ‫الفئة و تخص منتجا معٌنا من منتجات المخزن , كذلك األمر بالنسبة للصفة ‪ , PrixAchat‬هذه الصفة تمثل سعر الشراء‬
        ‫العام , أي الذي حسبناه اعتمادا على مجموعة من اإلٌصاالت ‪ , Arrivages‬هذا فً الفئة ‪ Produit‬أما فً الفئة‬
                                                 ‫‪ Arrivage‬فهذه الخاصٌة تمثل سعر شراء المنتج من عند الممول .‬

  ‫أٌضا قد أضفت فئتٌن جدٌدتٌن هما ‪ Comm_Prod , Fact_Prod‬لسبب مماثل لما سبق و هما فئتٌن تربطان المنتج و‬
   ‫الفاتورة , الطلبٌة و المنتج على التوالً . حٌث من المعلوم أنه إذا جاء مشتري لشراء م نتج ما فسعر بٌع هذا المنتج لهذا‬
    ‫الزبون لٌس بالضرورة ٌكون مطابقا للسعر األولً الموضوع لهذا المنتج فً المخزن , كذلك األمر بالنسبة للخاصٌتٌن‬
    ‫‪ Quantité‬الموجودتٌن فً الفئتٌن ‪ Facture‬و ‪ Commande‬فهذه الكمٌة خاصة بالفاتورة أو خاصة بالطلبٌة و هً‬
                                                                                               ‫إل‬
        ‫مختلفة من فاتورة ى فاتورة كما أنها مؽاٌرة للكمٌة الموجودة فً المخزن . و ٌمكنك استنتاج نفس الشًء بالنسبة‬
                                                                                             ‫للخاصٌة ‪.PrixVente‬‬
‫للتوضٌح هذا جزء من المخطط بعد إضافة الفئتٌن الجدٌدتٌن :‬
‫بعد إضافة كل هذه الخصائص للفئات وضع أنواع هه الخصائص (‪ )... int , String‬و إضافة الفئتٌن و أطراؾ الروابط‬
                                                                ‫الملونة باألخضر نحصل على المخطط التالً :‬




                                                                        ‫المرحلة األخٌرة : تبسٌط و تنظٌل المخطط :‬

                                       ‫ب‬
‫ٌمكننا تحسٌن المخطط ع ن طرٌق استخراج الفئات التً ٌمكننا أن نربط بٌنها عالقة الوراثة. لو تأملت معً قلٌال لوجدت‬
        ‫أن هذه العالقة ٌمكن عملها بٌن فئات ٌمكنها أن تحمل خصائص مشتركة فٌما بٌنها. هذه الفئات هً فئة ‪ Client‬و‬
             ‫ُت‬
             ‫ست‬                                                                          ‫س‬
‫‪ Fournisseur‬حٌث نجمع الخصائص المشتركة بٌن هذه الفئات فً فئة جدٌدة اسمها ‪ Personne‬و ورث هذه الفئة‬
                                   ‫من الفئتٌن السابقتٌن . المخطط التالً ٌوضح عالقة الوراثة بٌن هذه الفئات الثالثة :‬
‫لٌكون مخططنا فً النهاٌة كما ٌلً:‬
       ‫طبعا ال ٌمكننا ضبط جمٌع هذه الخصائص من أول نمذجة كما قلت سابقا فربما ٌنقصنا صفات أو عملٌات أخرى أو هناك‬
                               ‫صفات أو عملٌة ال حاجة لنا بها , لذا سنضطر للتعدٌل على هذا الجدول كلما احتجنا لذلك .‬

                                                     ‫كذلك األمر بالنسبة للفئات سنقوم بتحدٌثها كلما دعت الضرورة لذلك .‬

                                 ‫إلى هنا أقوم قد أنهٌت هذا الجزء من تصمٌم المشروع و أرجو أن ال أكون قد أطلت علٌكم .‬

                                                      ‫أي اقتراحات أو استفسارات أو مداخالت نحن هنا لمناقشتها جمٌعا .‬



         ‫بالنسبة لهذا المخطط فقد استعملت برنامج ‪ StarUML‬و هو أفضل م ن البرنامج السابق بكثٌر . لتحمٌل البرنامج اضؽط‬
                                                                                                      ‫هذا الرابط:‬

‫‪http://www.mediafire.com/?uqmyyynlb2z‬‬



                                                                  ‫أو زر هذا الرابط لالضطالع على موضوع البرنامج:‬
‫‪http://www.science-collector.com/vb/t3832.html‬‬



                            ‫المخططات موجودة فً المرفقات لمن ٌرٌد تحمٌلها و هً تحتاج للبرنامج المذكور أعاله لفتحها .‬

                                                                                       ‫ل‬
                                          ‫كذلك أضفت نسخة ‪ PDF‬تحمٌل الموضوع و قراءته على شكر كتاب إلكترونً .‬

				
DOCUMENT INFO
Shared By:
Stats:
views:12
posted:2/3/2013
language:
pages:20
Description: book prigram and adsens and borsah