Uploaded by عدنان فرحان

The-unified-modelling-language-UML-Arabic-edition

advertisement
See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/304015518
The unified modelling language (UML) Arabic edition
Book · January 2016
CITATIONS
READS
0
4,695
1 author:
Abdulmajid Hissen Mohamed
Sebha University
22 PUBLICATIONS 93 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
Idea Extraction from Text View project
Idea mining semantically View project
All content following this page was uploaded by Abdulmajid Hissen Mohamed on 10 July 2018.
The user has requested enhancement of the downloaded file.
‫لغة توصيف البرمجيات الموحدة ‪UML‬‬
‫د‪ .‬عبدالمجيد حسين‬
‫كلية العلوم‪ ،‬قسم الحاسوب‬
‫جامعة سبها‬
‫الطبعة االولى‪.4102 :‬‬
‫الناشر‪ :‬جوري المحدودة‪.‬‬
‫جميع حقوق الطبع محفوظة‪.‬‬
‫‪1‬‬
‫اإلهداء‬
‫إلى من أوقد في نفسي شعلة البحث عن المعرفة في مرحلة‬
‫مبكرة من عمرى‪:‬‬
‫والدى رمحه اهلل‬
‫و إلى من ألهمتني عشق التعلم واكتساب المعرفة وعلمتني أن‬
‫ال أبالغ في الفرح بما أحققه من منجزات الصغيرة‪:‬‬
‫أمى‬
‫‪2‬‬
‫الفهرس‬
‫اإلهداء‪2 ............................................................................................‬‬
‫كلمة شكر وتقدير‪8 ..................................................................................‬‬
‫مقدمة‪9 .............................................................................................‬‬
‫الفصل األول‪ :‬أساسيات النظرية الشيئية ‪31 ...........................................................‬‬
‫‪ 0.1‬تمهيد ‪01 .........................................................................................................‬‬
‫‪ 1.1‬فلسفة وصف األشياء‪/‬الكائنات البرمجية ‪01 ...............................................................‬‬
‫‪ 2.1‬الوصف التجريدى ‪02 ...........................................................................................‬‬
‫‪ 3.1‬أدوات الوصف ‪01 ..............................................................................................‬‬
‫‪ 4.1‬خصائص المفهوم الشيئي‪/‬الكائناتي للبرمجيات ‪01 ........................................................‬‬
‫‪ 1.4.1‬مفهوم الشيئ‪/‬الكائن البرمجي ‪01 ....................................................... Object‬‬
‫‪ 2.4.1‬التصنيف ‪42 .................................................................................. Class‬‬
‫‪ 3.4.1‬التجريد ‪42 .......................................................................... Abstraction‬‬
‫‪ 4.4.1‬التغليف ‪ Encapsulation‬واخفاء البيانات ‪41 ......................Information Hiding‬‬
‫‪ 5.4.1‬الوراثة ‪10 .............................................................................. Inheritance‬‬
‫‪ 6.4.1‬معدل التماسك ‪12 ....................................................................... Cohesion‬‬
‫‪ 7.4.1‬معدل االرتباط ‪13 ........................................................................ Coupling‬‬
‫‪ 8.4.1‬تعدد األشكال ‪21 ............................................................... Polymorphism‬‬
‫‪ 9.4.1‬التطوير وفقا للمكونات البرمجية الجاهزة ‪20 ........................ Component-Based‬‬
‫‪ 10.4.1‬األنماط ‪24 ............................................................................... Patterns‬‬
‫أسئلة الفصل االول ‪21 ................................................................................................‬‬
‫الفصل الثانى‪ :‬وصف عام للغة الوصف ‪05 ....................................................UML‬‬
‫‪3‬‬
‫‪ 0.2‬تمهيد ‪11 .........................................................................................................‬‬
‫‪ 1.2‬مخططات ‪10 ......................................................................................... UML‬‬
‫‪ 4.4‬تعريف النموذج ‪14 ................................................................................... Model‬‬
‫‪ 1.2‬مخطط وصف وقائع اإلستخدام ‪11 ......................................... Use Case diagrams‬‬
‫‪ 4.2‬مخطط وصف تبدل الحالة ‪12 .............................................. Statechart Diagrams‬‬
‫‪ 5.2‬مخطط وصف المهام ‪11 ......................................................... Activity Diagrams‬‬
‫‪ 6.2‬مخطط التصانيف ‪15 ................................................................ Class Diagrams‬‬
‫‪ 7.2‬مخطط التسلسل ‪21 ........................................................... Sequence Diagrams‬‬
‫‪ 8.2‬مخطط وصف المكونات البرمجية ‪20 ................................... Component diagrams‬‬
‫أسئلة الفصل الثانى ‪21 ...............................................................................................‬‬
‫الفصل الثالث‪ :‬مخطط وقائع اإلستخدام ‪22 ............................................ Use Cases‬‬
‫‪ 0.3‬تمهيد‪14 .........................................................................................................‬‬
‫‪ 1.3‬وقائع اإلستخدام كوسيلة لحصر متطلبات النظم ‪11 .....................................................‬‬
‫‪ 2.3‬مدى استخدام مخططات وقائع اإلستخدام ‪12 ............................................................‬‬
‫‪ 3.3‬الرموز المستخدمة لتمثيل وقائع اإلستخدام ‪11 ...........................................................‬‬
‫‪ 4.3‬عملية فرز وتحديد الممثلين ‪13 .................................................................... Actors‬‬
‫‪ 5.3‬الممثلين غير البشر ‪13 ........................................................ Non Human Actors‬‬
‫‪ 6.3‬سيناريوهات وقائع االستخدام ‪31 ...........................................................................‬‬
‫‪ 7.3‬حدود النظام ‪34 ................................................................... System boundary‬‬
‫‪ 8.3‬العالقات بين عناصر وقائع اإلستخدام‪31 ..................................................................‬‬
‫‪ 1.8.3‬عالقة التعميم ‪ generalization‬بين وقائع اإلستخدام المختلفة ‪31 ...........................‬‬
‫‪ 2.8.3‬عالقة التعميم)الوراثة( ‪ generalization‬بين الممثلين ‪31 ......................... .actors‬‬
‫‪4‬‬
‫‪ 3.8.3‬عالقة االحتواء ‪ include‬بين وقائع اإلستخدام المختلفة ‪32 .....................................‬‬
‫‪ 4.8.3‬عالقة اإلمتداد ‪ extend‬بين وقائع استخدام مختلفة ‪33 ..........................................‬‬
‫‪ 9.3‬رسم مخططات وقائع اإلستخدام ‪51 .......................................................................‬‬
‫‪ 01.1‬توصيف وقائع االستخدام ‪50 ...............................................................................‬‬
‫‪ 33.1‬استخدام ادوات ‪ CASE‬لرسم وحفظ وقائع االستخدام ‪51 .............................................‬‬
‫أسئلة الفصل الثالث ‪52 ...............................................................................................‬‬
‫الفصل الرابع‪ :‬مخطط التصانيف ‪ Class diagram‬و نمذجة المفاهيم‪99 .............................‬‬
‫‪ 0.4‬تمهيد‪55 .........................................................................................................‬‬
‫‪ 1.4‬تحديد تصانيف النظم ‪55 .....................................................................................‬‬
‫‪ 2.4‬استخالص التصانيف األساسية للنظام ‪010 ...............................................................‬‬
‫‪ 1.2‬جدولة التصانيف ‪011 .........................................................................................‬‬
‫‪ 1.3.4‬تصانيف اإلتصال ‪011 ................................................. Boundary Classes‬‬
‫‪ 2.3.4‬تصانيف التحكم ‪012 ........................................................... Control Class‬‬
‫‪ 3.3.4‬التصانيف الكائنية ‪012 ........................................................... Entity Class‬‬
‫‪ 4.4‬مكونات مخطط التصانيف ‪011 ..............................................................................‬‬
‫‪ 1.4.4‬وصف التصانيف ومبدأ إخفاء واظهار المعلومات ‪015 .........................................‬‬
‫‪ 2.4.4‬تحديد العالقات بين التصانيف‪001 ..................................................................‬‬
‫‪ 5.4‬رسم مخطط التصانيف ‪001 .................................................................................‬‬
‫أسئلة الفصل الرابع ‪005 ..............................................................................................‬‬
‫الفصل الخامس‪ :‬مخططات وصف التفاعالت ‪320 ........................Interaction Diagrams‬‬
‫‪ 0.5‬تمهيد‪041 .......................................................................................................‬‬
‫‪ 1.5‬مخطط اإلتصاالت ‪041 ............................................ Communication diagrams‬‬
‫‪ 2.5‬مخطط التسلسل ‪011 ......................................................... Sequence Diagram‬‬
‫‪5‬‬
‫‪ 3.2.0‬العمر الزمنى للكائن ‪010 .................................................................. lifetime‬‬
‫‪ 4.4.1‬استثارة الكائنات ومسارات التنفيذ ‪014 ................................................................‬‬
‫أسئلة الفصل الخامس ‪021 ...........................................................................................‬‬
‫الفصل السادس‪ :‬مخطط وصف تبدل الحالة ‪305 .........................State chart Diagrams‬‬
‫‪ 0.6‬تمهيد‪011 .......................................................................................................‬‬
‫تبدل الحالة ‪010 ..............................................................................‬‬
‫‪ 1.6‬رموز مخطط َ‬
‫‪ 2.6‬وصف تبدل حالة كائن ‪014 .................................................................................‬‬
‫أسئلة الفصل السادس ‪012 ...........................................................................................‬‬
‫الفصل السابع ‪:‬مخطط وصف المهام ‪365 .....................................Activity Diagram‬‬
‫‪ 0.7‬تمهيد‪021 .......................................................................................................‬‬
‫‪ 1.7‬مكونات مخطط المهام ‪024 ..................................................................................‬‬
‫‪ 2.7‬تمثيل التفرعات الشرطية ‪021 ................................................................................‬‬
‫‪ 3.7‬إدراج الكائنات وتمثيل خطوط السباحة ‪021 ..............................................................‬‬
‫أسئلة الفصل السابع ‪025 .............................................................................................‬‬
‫الفصل الثامن‪:‬مخططات التنفيذ و نمذجة أساليب اإلنجاز ‪321 ........................................‬‬
‫‪ 0.8‬تمهيد‪011 .......................................................................................................‬‬
‫‪ 3.8‬ما هو المكون البرمجى ‪012 .................................................................................‬‬
‫‪ 2.8‬مخطط المكونات ‪011 ..................................................... Components diagram‬‬
‫‪ 1.8‬متى ُيستعان بالمكونات البرمجية المعاد استخدامها ‪012 ................................................‬‬
‫‪ 4.8‬عناصر مخطط المكونات البرمجية ‪011 ...................................................................‬‬
‫‪ 0.8‬حجم المكون البرمجى ‪015 ...................................................................................‬‬
‫‪6‬‬
‫‪ 6.8‬وسم المكونات البرمجية‪031 .................................................................................‬‬
‫‪ 7.8‬مخطط النشر ‪030 ............................................................. Deployment Model‬‬
‫‪ 8.8‬إدراج تفاصيل المكونات البرمجية ‪034 .....................................................................‬‬
‫‪ 9.8‬العالقات ‪ associations‬بين نقاط النشر ‪032 ..........................................................‬‬
‫أسئلة الفصل الثامن ‪031 .............................................................................................‬‬
‫الفصل التاسع‪ِ :‬‬
‫الحزم ‪ packages‬و تجزئة النظم ‪395 ...............................................‬‬
‫‪ 5.9‬تمهيد‪051 .......................................................................................................‬‬
‫‪ِ 1.9‬‬
‫الحزم ‪051 ...................................................................................... packages‬‬
‫‪ 2.9‬األنظمة الجزئية ‪052 .................................................................... Subsystems‬‬
‫أسئلة الفصل التاسع ‪055 .............................................................................................‬‬
‫المراجع االجنبية‪252 ................................................................................‬‬
‫المراجع العربية ‪254 .................................................................................‬‬
‫ملحق أ ‪ :‬قائمة مصطلحات‪250 .....................................................................‬‬
‫‪7‬‬
‫كلمة شكر وتقدير‬
‫عمال بالحديث النبوي الشريف‪( ،‬ال يشكر اهلل من ال يشكر الناس) فإنني‬
‫أجد نفسي مدينا بالشكر لكثير من األشخاص الذين أسهموا في إظهار هذا‬
‫الكتاب‪ ،‬سواء اكان ذلك بطريقة مباشرة‪ ،‬أو غير مباشرة‪ ،‬كنت سأكتفى بشكرهم‬
‫جميعا دون ذكر أسماء‪ ،‬لكنني أجد نفسى مدفوعا ألخص بالشكر بعضهم‪ ،‬عرفانا‬
‫بالجميل وتقدي ار للمعروف‪ .‬فأخص بشكري الجزيل للدكتورة ليي ساي بيك بجامعة‬
‫ماليا – ماليزيا‪ ،‬فهى من دفعني لتعلم لغة ‪ UML‬للمرة األولى‪ ،‬كما أشكر وبال‬
‫حدود أستاذي الدكتور الصادق البصير‪ ،‬الذي غرس في نفسي حب اللغة العربية‬
‫والكتابة بها‪ .‬كذلك اليمكنني بحال أن أغفل عن التعقيبات النقدية لطالبى‬
‫بالجامعات الليبية‪ ،‬لقد كانت سببا مباش ار في إعادة النظر في صياغتي العربية‬
‫للكثير من مصطلحات التقنية الشيئية‪ ،‬وألن الترجمة غالبا ما تمثل خيانة للنص‬
‫كما يقول المثل‪ ،‬فإنني أزعم أنهم ساهموا(أسهموا) إلى حد كبير في نفي هذه‬
‫الصفة عني بإختياري المصطلحات العربية التي اعتقدت أنها األصوب من حيث‬
‫ترجمتها إلى العربية‪ .‬الشكر موصول أيضا إلى زمالئي أعضاء هيئة التدريس‬
‫بقسم الحاسوب جامعة سبها‪ ،‬أحسب أن بعضهم منحنى سندا كبي ار إلستكمال‬
‫مغامرة التأليف دون كلل‪ .‬وفى السياق ذاته أتوجه بالشكر مقدما إلى كل من‬
‫لديه مالحظة أو تصويب أو أي إقتراح من شأنه تحقيق الفائدة في إصدارات‬
‫الطبعات التالية لهذا للكتاب‪.‬‬
‫واهلل ولى التوفيق‪.‬‬
‫‪8‬‬
‫مقدمة‬
‫الحمد هلل الذي أتاح لهذا الكتاب البروز في حيز الوجود‪ ،‬وأسأل اهلل أن‬
‫ُيشغل به حي از شاغ ار في أرفف كتب الحاسوب و المعلوماتية‪ ،‬أُدرك إن صياغة‬
‫كتابا واحدا ال يصنع مؤلفا؛ ولكنني أعتقد أن الرضا بهذه القناعة هو سبب رئيسي‬
‫في فقر المكتبة العربية خاصة كتب الحاسوب والمعلوماتية‪ .‬فرغم الجهود المبذولة‬
‫لسد النقص الكبير لإلصدارات العربية لكتب الحاسوب والمعلوماتية‪ ،‬إال أن هذه‬
‫الجهود ترتكز في مجملها على التأليف في مواضيع لغات برمجة الحاسوب‪ ،‬و‬
‫برمجيات التطبيقات التجارية‪ ،‬وبرمجيات النشر المكتبي وأعمال السكرتارية‬
‫وغيرها‪.‬‬
‫نحن نعتقد ان المكتبة العربية ال تزال بحاجة الى المزيد من تأليف الكتب‬
‫التى تتطرق الى وصف التراكيب والهياكل الهندسية المعقدة للنظم البرمجية‪.‬‬
‫فهناك شبه إجماع على أننا نعيش عصر "مجتمع المعلومات"‪ ،‬العصر الذي‬
‫صارت فيه المعلومات هي السالح األقوى مقارنة بسالح المحركات الذي ميز‬
‫عصر الثورة الصناعية‪ .‬بالطبع لم يختف ولم يتقلص دور المحركات في عصرنا‬
‫الحالي؛ ولكن البرمجيات عززت أداء المحركات عموما‪ ،‬حيث صارت أكثر دقة‬
‫وذكاءا في أدائها‪ ،‬فصارت البرمجيات تمثل جزءا أساس من أي منتج صناعي‪،‬‬
‫أو معرفي‪ ،‬أو خدمي‪ ،‬بحيث ال يمكن تصور أداء أي وظيفة أو خدمة ال تكون‬
‫البرمجيات جزءا من أدائها‪.‬‬
‫وهذا االنتشار الكبير للمنتجات البرمجية في حياتنا جعل من عملية‬
‫تصميم وبناء البرمجيات أم ار بالغ األهمية‪ ،‬فمثل ما للبرمجيات من دور إيجابي‬
‫في خدمة المجتمع؛ إال إنها وفى كثير من األحيان كانت مصد ار لكوارث مالية‬
‫‪9‬‬
‫فالبرمجيات هي عماد األسواق‬
‫وبشرية حدثت نتيجة ألخطاء البرمجيات‪.‬‬
‫المالية العالمية‪ ،‬وهى المحرك األساس لتقنية الفضاء‪ ،‬وكذلك التحكم في تسيير‬
‫وسائل المواصالت العصرية كالطائرات والسفن و غيرها‪ ،‬وأي خطأ تقني في أداء‬
‫هذه البرمجيات قد ينجم عنه خسائر مالية وبشرية هائلة‪ ،‬هذا ما جعل من‬
‫االهتمام بتحسين طرق بناء البرمجيات‬
‫أم ار‬
‫حثيثا لدى علماء الحاسوب‬
‫والمعلوماتية‪.‬‬
‫فمنذ مؤتمر الناتو المنعقد عام ‪ 0523‬ظهرت شعارات ضرورة تحسين‬
‫وتطوير طرق تصميم وبناء البرمجيات‪ ،‬وذلك لتفادى إنتاج برمجيات ذات جودة‬
‫منخفضة‪ ،‬منذ الخمسينيات وحتى بداية السبعينيات كانت العشوائية هي السمة‬
‫السائدة في طرق بناء البرمجيات‪ ،‬إذ لم تكن هناك معايير قياسية لوصف‬
‫وتصميم وبناء البرمجيات‪ ،‬بل كانت مهارات البرمجة لدى المطورين هي العنصر‬
‫األساس‪ ،‬بينما ال يسبق ذلك تجهيز أي مخططات أو نماذج وصفية لما سيتم‬
‫إنتاجه‪ ،‬وتتمثل النتائج السلبية لهذا المنحى في التعديل المتكرر للمنتج البرمجي‬
‫قيد البناء‪ ،‬وذلك من أجل إصالح األخطاء التي تُكتشف في كل مرة‪ .‬فمن المؤكد‬
‫إن هذه العمليات المتكررة لتعديل البرمجيات تؤدى إلى ضياع الوقت وزيادة تكلفة‬
‫المشاريع البرمجية‪.‬‬
‫حديثا صار المنحى الهندسي لصناعة المنتجات (صناعية‪ ،‬زراعية‪،‬‬
‫خدمية‪ ،‬معمارية) هو السائد‪ ،‬وما يميز المنحى الهندسي هو بناء نماذج وصفية‬
‫لما سيتم تصنيعه أوال‪ .‬ومن ميزة النماذج الوصفية أنها تُمكن من إجراء كافة‬
‫االختبارات والمقارنات حول شكل وسلوك المنتج قبل تصنيعه فعليا‪ ،‬ومن ثم فإن‬
‫‪10‬‬
‫أي أخطاء تصميمية سيتم اكتشافها قبل التصنيع الفعلي؛ وبذلك سيتم تجنب أي‬
‫كوارث أو مشاكل سببها استخدام المنتج النهائي‪.‬‬
‫تتعدد طرق ووسائل رسم النماذج الوصفية للمنتجات (قبل تصنيعها)؛‬
‫ولكن أكثرها رواجا هي التصاميم الورقية التي توضح مخططات وصف المنتجات‬
‫الهندسية كالخ ارئط اإلنشائية للبنايات أو خرائط تصميم الطائرات وغيرها‪ .‬إن كل‬
‫أعمال االختبارات تجرى على هذه المشاريع وهي في طور التصميم الوصفي قبل‬
‫إنجازها على أرض الواقع‪ .‬رغم طبيعتها كمنتج غير مرئي أو محسوس‪ ،‬إال أن‬
‫البرمجيات‬
‫تعد منتجات بالغة التعقيد‪ ،‬ويجب أن‬
‫تخضع في بنائها لذات‬
‫األسلوب الهندسي المتبع في بناء النظم الحسية كالبنايات واآلالت وغيرها‪ ،‬أي‬
‫يجب أن تُبنى البرمجيات اعتمادا على رسم مخططات وصفية لها يمكن من‬
‫خاللها إجراء كافة االختبارات حول مواصفات وسلوك المنتج البرمجي قبل‬
‫صناعته أو برمجته فعليا‪.‬‬
‫فهذا الكتاب يقدم شرحا مستفيضا ألحد لغات وصف البرمجيات‪ ،‬وذلك‬
‫عبر مجموعة من المخططات الوصفية التي تقوم بوصف نواحي مختلفة من‬
‫التطبيق البرمجي قيد البناء‪ .‬لقد تعددت لغات وصف البرمجيات حتى جاوزت‬
‫العشرات وهو ما أحدث فوضى في‬
‫مجال هندسة البرمجيات حول الطريقة‬
‫األمثل لوصف نظمها‪ .‬فظهرت لغة ‪) UML‬‬
‫‪Unified Modeling‬‬
‫‪ )Language‬تتويجا لتوحيد جهود ثالثة من أشهر واضعي طرق وصف‬
‫البرمجيات‪ ،‬وحاليا تعتبر ‪ UML‬هي اللغة األشهر واألكثر اعتمادا ضمن سوق‬
‫صناعة البرمجيات‪ ،‬بل ربما بلغ انتشارها وشهرتها إلى الحد الذي ال يمكن تخيل‬
‫مهندس برمجيات يجيد العمل بدونها‪.‬‬
‫‪11‬‬
‫عند كتابة هذا المرجع روعي في كتابته العديد من النواحي البيداغوجية‬
‫‪ pedagogical‬التي تجعل من استيعاب مخططات الوصف المعروضة أم ار‬
‫ميس ار‪ .‬ففي الفصل األول تم التعرض إلى مفاهيم النظرية الشيئية التي تعتبر لغة‬
‫‪ UML‬داعما رئيسا لها‪ ،‬فمعظم مكونات مخططات لغة ‪ UML‬لها خلفية‬
‫نظرية ضمن مفاهيم النظرية الشيئية لبناء البرمجيات‪ ،‬لذلك كان البد من اإللمام‬
‫بالخلفية النظرية للغة ‪ UML‬قبل عرض مخططاتها الوصفية‪ ،‬أما الفصل الثاني‬
‫فجاء بمثابة صورة جوية لمخططات لغة ‪ ،UML‬حيث أُعطيت نبذة عن كل‬
‫مخطط من المخططات الوصفية للغة ‪ ،UML‬تهدف إلى إعطاء المتلقي فكرة‬
‫عامة عن مخططات اللغة قبل تفصيل مكونات كل مخطط على حدة في فصول‬
‫الحقة‪ .‬ودعما لمنهج التعليم المدعم بالمسائل ‪ problem based learning‬فقد‬
‫اختير نظام المكتبة الجامعية نموذجا يتم من خالله بيان كيفية استخدام‬
‫مخططات ‪ UML‬لتجهيز مخططات الوصف المختلفة ضمن هذا النظام‪.‬‬
‫أخي ار‪ ،‬لقد أُعتمد في تأليف هذا الكتاب على عديد من المراجع والبحوث‬
‫األجنبية في هذا المجال‪ ،‬وقد أولينا عناية خاصة بالمصطلحات العربية‪ ،‬حيث تم‬
‫االلتزام بما هو سائد أحيانا‪ ،‬بينما اختيرت مصطلحات عربية أخرى لما بدا لنا أنه‬
‫هو األصوب واألدق‪.‬‬
‫‪12‬‬
‫الفصل األول‪ :‬أساسيات النظرية الشيئية‬
‫‪ 0.1‬تمهيد‬
‫قبل التطرق إلى مخططات وصف البرمجيات وفقا للمفهوم الشيئي‪ ،‬البد من‬
‫عرض المفاهيم األساسية التي تقوم عليها النظرية الشيئية‪ .‬ستالحظ الحقا أن‬
‫بعض هذه المفاهيم شائعة اإلستخدام في مجاالت أخرى غير صناعة البرمجيات‪،‬‬
‫ولكن يظل استيعابها من منظور صناعة البرمجيات أم ار أساسيا‪ .‬لذلك يمكن‬
‫إعتبار هذه المفاهيم بمثابة مفردات وصف بناء البرمجيات الشيئية التي البد لكل‬
‫مهندس برمجيات من االلمام بها‪ .‬ولكن لماذا نحتاج لوصف النظم المعلوماتية قبل‬
‫بنائها (برمجتها) فعليا‪ .‬إنه النهج الحديث إلنجاز أي مشروع هندسي (برمجيات‪،‬‬
‫معمار‪ ،‬عربة‪ ،‬الخ)‪ .‬فنجاح بناء أي مشروع هندسي يعتمد إعتمادا رئيسيا على‬
‫سالمة التصورات‪ ،‬ممثلة في مخططات وخرائط وصف المنتج الهندسي قبل عملية‬
‫بنائه‪.‬‬
‫‪ 1.1‬فلسفة وصف األشياء‪/‬الكائنات البرمجية‬
‫قبل الشروع إلى تفاصيل نماذج وصف أنظمة برمجيات الحاسوب البد أوال من فهم‬
‫فلسفة عملية الوصف بشكل عام‪ .‬فالوصف ليس ظاهرة مرتبطة فقط بوصف‬
‫األنظمة البرمجية‪ ،‬بل يتعدى ذلك إلى وصف أي كائن أو ظاهرة أو سلوك وغيره‪.‬‬
‫وعملية الوصف هي عبارة عن مقاربة لما هو عليه الشيئ المراد وصفه‪ ،‬سواءا‬
‫كان ذلك مبنى أو عربة أو عملية أو شخص أو آلة أو غيره‪ .‬ومهما بلغت دقة‬
‫الوصف لشئ ما فإنه ال يمكن بحال من األحوال مطابقة الشيئ الموصوف ذاته‪،‬‬
‫بل هي مجرد مقاربة وصفية تُمكن المتلقي من فهم وتمييز ما تم وصفه‪ .‬فمثال‪،‬‬
‫تعتبر خارطة اإلنشاء لمبنى معين عبارة عن وصف تقريبى لما تخيله مهندس‬
‫‪13‬‬
‫اإلنشاء حول ما سيكون عليه المبنى المرتقب‪،‬‬
‫حيث يمكن إجراء جميع‬
‫اإلختبارات على الخارطة قبل الشروع في البناء الفعلى‪ .‬االمر ذاته ينطبق على‬
‫خرائط وصف الطائرات والمباني والجسور وغيرها‪.‬‬
‫قد تختلف مخرجات عملية الوصف من واصف آلخر حيث تتداخل عوامل عدة‬
‫في اختيارات كل واصف‪ .‬فمثال لو وقعت حادثة سرقة امام جمع من الشهود‪ ،‬و‬
‫فر على اثرها السارق‪ ،‬ثم طُلب من الشهود وصف المتهم‪ ،‬الشك ان ما سيدونه‬
‫رجل الشرطة من اوصاف سمعها من الشهود ستكون مختلفة إلى حد كبير‪ .‬فبعض‬
‫الشهود سيركزون فى وصفهم على زى السارق مثال‪ ،‬بينما قد يهتم آخرين بوصف‬
‫مالمح الوجه وهكذا‪ .‬ولكن هل يجب أن يحصل رجل الشرطى على وصف‬
‫مطابق تماما للجانى حتى يتعرف عليه؟ من المؤكد انه سيحتاج فقط إلى وصف‬
‫تقريبى‪ ،‬وهو ما يمكن تسميته وصفا تجريديا للجانى‪ ،‬وبالمفهوم الهندسي يقال له‬
‫"نموذج" السارق‪.‬‬
‫‪ 2.1‬الوصف التجريدى‬
‫عند شروع المهندس المعمارى مثال في رسم خارطة اإلنشاء لمبنى معين‪ .‬الحظ‬
‫أن وصف المبنى سيتم اختزاله فقط في حيز ورقة صغيرة أو مجموعة أوراق‪.‬‬
‫ما من شك أن خارطة المبنى ال تطابق المبنى الحقيقي بالضبط‪ ،‬ولكنها كفيلة‬
‫بشرح ما سيكون عليه المبنى الحقيقى‪ .‬لذلك فعملية الوصف غالبا ال تتجاوز‬
‫وصف المكونات األساسية‪ ،‬أو العالمات الدالة لجوهر الشيئ‪ ،‬بينما يتم التغاضى‬
‫عن إيراد التفاصيل الدقيقة له‪ ،‬ورغم هذا االختصار الكبير في الوصف فإن تمييز‬
‫‪14‬‬
‫الموصوف سيكون من السهولة بمكان‪ .‬لذلك تسمى عملية الوصف المختصر هذه‪:‬‬
‫وصف تجريدي‪ .‬أي الوصف المختصر الذي ُيركز على الجوهر دون التفاصيل‪.‬‬
‫‪ 3.1‬أدوات الوصف‬
‫تأخذ عملية الوصف أساليب ومفردات مختلفة‪ ،‬وذلك حسب ما يراه الواصف أنه‬
‫أقرب للفهم والتمييز من قبل المتلقى‪ .‬وهنا نحتاج لما يمكن تسميته لغة الوصف‪،‬‬
‫أو رموز الوصف‪ .‬فلغة الوصف تمثل مفردات الوصف وقد يشمل ذلك مفردات‬
‫اللغات البشرية‪ ،‬والرسومات‪ ،‬والمنحوتات‪ ،‬بل حتى لغة اإلشارة للصم والبكم‪.‬‬
‫وكنموذج لتعدد طرق وأساليب الوصف في الحياة العامة‪ ،‬فالشعراء مثال يستخدمون‬
‫الشعر كلغة وصف لمواضيعهم الشعرية‪ ،‬سواءا كانت مدحا لشخص‪ ،‬أو وصفا‬
‫لمشهد أو غير ذلك‪ .‬انظر مثال للشاعر البحتري وهو يصف مشهد الربيع بقوله‪:‬‬
‫أتاك الربيع الطلق يختال ضاحكا‬
‫من ُ ِ‬
‫حتى كاد أن يتكلما‬
‫الحسن َ‬
‫الشاعر هنا أوجز وصف جمال الربيع بأبيات بليغة تدل على بهجة الربيع‪ ،‬وما‬
‫يبعثه في النفس من سرور‪ ،‬ولكن الحظ أن الشاعر لم يصف الكثير من التفاصيل‬
‫الدقيقة‪ ،‬التي قد ال يصلح الشعر (كلغة وصف) لوصفها‪ .‬وكنموذج آخر لوصف‬
‫الربيع‪ ،‬قد يلجأ رسام لوصف ذات المشهد بلغة وصف أخرى وهى الرسم‪ .‬إذا فنحن‬
‫هنا أمام وصف نفس المشهد‪ ،‬أو الظاهرة أو النظام (اصطالحا)‪ ،‬ولكن تم التعبير‬
‫عنه بلغتي وصف مختلفتين‪ .‬تأمل أي الوصفين أقرب للتعبير عن مشهد الربيع؟‬
‫في الدروس القادمة سنبين ضرورة فعل نفس الشيئ عند وصف البرمجيات‪،‬‬
‫فالنظم البرمجية يتم وصفها بصيغ ورموز وصف مختلفة‪ ،‬وذلك لتحقيق أغراض‬
‫‪15‬‬
‫سيتم الحديث عنها الحقا‪ .‬المثال السابق كان على صعيد وصف الظواهر أو‬
‫النظم بشكل عام‪ .‬أما على صعيد بناء وتطوير األنظمة الهندسية‪ ،‬تكمن الحاجة‬
‫إلى عملية الوصف عند التفكير في بناء أو تطوير أي كائن هندسي (مبنى‪ ،‬آلة‪،‬‬
‫عربة‪ ،‬الخ)‪ .‬ولتحقيق ذلك يتم أيضا اللجوء إلى لغات وصف معينة لعمل نماذج‬
‫وصفية لهذه األشياء قبل عملية االنجاز الفعلى لها‪ .‬فمثال‪ ،‬قبل ظهور برمجيات‬
‫الرسم الهندسي ‪ ،CAD‬كانت مادتا‬
‫الطين والخشب هما لغة وصف نماذج‬
‫ى‬
‫السيارات الجديدة‪ .‬فيتم صنع نموذج طينى أو خشبى للسيارة‪ ،‬ومن ثم تُجر َ‬
‫اإلختبارات المختلفة على المجسم التجريبى‪ ،‬كإختبارات انسيابية الهواء‬
‫‪ ،Aerodynamic‬ومقاومة الصدمات‪ ،‬وغيرها‪ .‬ونتيجة لعوامل التكلفة ومرونة‬
‫العمل‪ ،‬صارت رسومات ‪ CAD‬و ‪ MATLAB‬هي لغات الوصف األكثر‬
‫شيوعا في مثل هذه التطبيقات‪.‬‬
‫أما حول تعدد لغات الوصف‪ ،‬فيعود تباين مفردات أو لغات الوصف إلى ضرورة‬
‫اشتراك الواصف والمتلقي في فهم نفس اللغة‪ ،‬واال فقد أنتفت وظيفة الوصف من‬
‫االساس‪ .‬فمثال ما معنى قراءة ابيات قصيدة الربيع لشخص أصم؟ كذلك الحال‬
‫بالنسبة لوصف النظم المعلوماتية‪ ،‬فالمستفيد أو مشغل النظام المعلوماتى غالبا ما‬
‫يفتقد للمعلومات الكافية حول المصطلحات التقنية ألنظمة المعلومات ورموزها‬
‫المختلفة‪ .‬لذلك يجب أن تكون لغة الوصف في متناول فهم الزبون‪ ،‬أو المستخدم‪،‬‬
‫سواءا كان ذلك وصفا سرديا‪ ،‬أو وصفا باستخدام خرائط ومخططات مرئية سهلة‬
‫االستيعاب بالنسبة له‪.‬‬
‫‪16‬‬
‫‪ 4.1‬خصائص المفهوم الشيئي‪/‬الكائناتي للبرمجيات‬
‫الرواج الكبير للمفهوم الشيئي جعل منه خاصية يحرص الكثيرين على تطوير‬
‫برمجياتهم وفقا لها‪ .‬ولكن ما الذي يجعل من أي تطبيق‪ ،‬أو لغة برمجة‪ ،‬أو نظام‬
‫إدارة قاعدة بيانات‪ ،‬يكتسب هذه الخاصية‪ .‬هناك العديد من العناصر أو التراكيب‬
‫والخصائص التي يوفرها المفهوم الشيئي‪ ،‬أي تطبيق شيئي‪ ،‬أو لغة برمجة شيئية‪،‬‬
‫أو نظام قاعدة بيانات شيئية‪ ،‬البد أن يدعم هذه الخصائص المبينة بالفقرات‬
‫التالية‪.‬‬
‫‪ 1.4.1‬مفهوم الشيئ‪/‬الكائن البرمجي ‪Object‬‬
‫العالم من حولنا ملئ بالكائنات سواءا المحسوسة أو التجريدية (أى الوصفية)‪ ،‬وفى‬
‫إطار أداء أي وظيفة من وظائف الحياة‪ ،‬فإن ذلك يتخلله االستعانة بمجموعة من‬
‫الكائنات‪ ،‬التي تخدم بعضها بعضا من أجل إنجاز أي وظيفة‪ ،‬فمثال لو أردت‬
‫كتابة رسالة أو مقالة‪ ،‬فإنك تحتاج إلى قلم‪ ،‬و ورقة‪ ،‬ومكتب مريح يحتوى على‬
‫طاولة‪ ،‬وكرسي‪ ،‬وربما حاسوب شخصى‪ .‬جميع هذه األشياء الالزمة لكتابة الرسالة‬
‫تسمى اصطالحا "كائنات" ‪ .objects‬وكل كائن له شكل معين‪ ،‬و وظيفة مميزة‪،‬‬
‫فقد ُجعل القلم للكتابة‪ ،‬والكرسي للجلوس‪ ،‬والطاولة إلسناد األشياء عليها‪ ،‬وهكذا‬
‫فإن جميع األشياء أو الكائنات مرتبطة في اذهان البشر بمسميات ووظائف‬
‫محددة‪ ،‬وكما اسلفنا سابقا فإن ذلك ينسحب على جميع نواحي الحياة‪ .‬فالطبيب‬
‫كائن له وظيفة محددة وهى التطبيب‪ ،‬و التارزى كائن وظيفته الحياكة‪ ،‬وهكذا‪.‬‬
‫ولقد جرت العادة على ان كائنات الحياة بما فيها البشر تتخاطب وتتفاعل فيما‬
‫بينها بحسب حاجة كل كائن آلخر‪ .‬ووفقا لهذه القاعدة ال يمكن تصور أن شخصا‬
‫‪17‬‬
‫مريضا سيلجأ للتارزى لكى يصف له الدواء‪ ،‬ألنها هذه ليست وظيفة التارزى‪ .‬أو‬
‫ان شخصا سيستعين بفني إصالح العربات لبناء بيت!!! وهكذا‪.‬‬
‫سلوك الكائن (العمليات )‬
‫هوية الكائن (بيانات التعريف)‬
‫إضافة كتاب‬
‫تعديل بيانات كتاب‬
‫إلغاء كتاب‬
‫‪ :‬البرمجية بلغة ‪C++‬‬
‫العنوان‬
‫‪ :‬كتاب‬
‫النوع‬
‫‪ :‬د‪.‬بشير العيساوى‬
‫المؤلف‬
‫‪ :‬الدار العالمية للكتاب‬
‫الناشر‬
‫رقم النسخة ‪4231 :‬‬
‫‪ :‬متوفر‬
‫الحالة‬
‫مرجع‬
‫الشكل(‪ :)0-0‬وصف الكائن "مرجع” فى مكتبة جامعية‬
‫سلوك الكائن (العمليات )‬
‫هوية الكائن (بيانات التعريف)‬
‫الموقع‬
‫‪ -0‬نقل ملكية‬
‫‪ :‬شارع عمر المختار‬
‫‪ -4‬العرض في مزاد‬
‫سنة االنشاء ‪0511 :‬‬
‫المالك‬
‫‪ :‬عبداهلل عبدالسالم‬
‫الغرض‬
‫‪ :‬سكن‬
‫الشكل (‪ :)4-0‬وصف الكائن "منزل"‬
‫‪18‬‬
‫وفقا للمفهوم الشيئي فإن الكائن ‪ object‬هو أي شيء مميز له هوية وسلوك (اي‬
‫وظيفة)‪ ،‬بمعنى أي شيئ يمكن تمييزه ببيانات معينة ‪ data‬وله سلوك ‪behavior‬‬
‫يتمثل في الوظيـ ـ ـ ـفة التي ينجـ ـ ـ ـ ـ ـ ـزها (كتابة‪ ،‬طباعـ ـ ـ ـ ـ ـة‪ ،‬تطبيب‪ ،‬بيع‪ ،‬إلخ)‪.‬‬
‫األش ـ ـ ـ ـ ـكال (‪ )0-0‬و(‪ )4-0‬و(‪ )1-0‬تمثل مخططات لتعريف أشياء يمكن‬
‫إعتبارها كائنات ‪ ،objects‬فالبيت كائن له بيانات‪ ،‬وله مجموعة من العمليات‬
‫(السلوك) التي تميزه‪ ،‬وكذلك الحال بالنسبة للطبيب‪ ،‬والمحاضر‪ ،‬والعربة‪ ،‬والكتاب‬
‫وغيرها‪.‬‬
‫سلوك الكائن (العمليات )‬
‫هوية الكائن (بيانات التعريف)‬
‫‪ .0‬تشخيص األمراض ووصف العالج‬
‫االسم ‪ :‬د‪ .‬كريمة بشير‬
‫‪ .4‬القاء محاضرات تخصصية‬
‫العمر ‪21 :‬‬
‫‪ .1‬اجراء عملية جراحية‬
‫العنوان‪ 414:‬ميدان الجزائر‪,‬طرابلس‬
‫المؤهل‪ :‬دكتوراة طب‬
‫التخصص‪ :‬جراحة اعصاب‬
‫الشكل (‪ :)1-0‬وصف الكائن "طبيب"‬
‫الحظ أنه يندرج تحت تعريف "الكائن" ليس فقط الكائنات المحسوسة‪ ،‬كالكتاب‬
‫والطبيب و غيره‪ ،‬بل يتعدى ذلك إلى الكائنات المعنوية‪ ،‬مثل عملية (حجز رحلة‬
‫جوية)‪ ،‬أو (حساب مصرفى)‪ ،‬أو غيره من الكائنات المعنوية غير المحسوسة‪.‬‬
‫فمثال الحساب المصرفى يمكن ترشيحه ككائن برمجي ضمن متطلبات منظومة‬
‫‪19‬‬
‫معلومات مصرفية‪ ،‬فكل حساب مصرفى له بيانات تميزه مثل رقم الحساب‪ ،‬واسم‬
‫الزبون‪ ،‬ونوع الحساب (إدخار‪ ،‬إيداع‪ ،‬جاري)‪ ،‬والرصيد وغيره‪ .‬جميع هذه البيانات‬
‫تمثل هوية أي حساب مصرفى‪ .‬أما السلوك ‪ behavior‬المتوقع لهذا الكائن‬
‫فيتمثل ذلك في عملية (ايداع مبلغ مالى في) الحساب المصرفى‪ ،‬أو عملية (سحب‬
‫مبلغ مالي) من الحساب‪ ،‬أو عملية (استصدار كشف حساب)‪ .‬وجميع هذه‬
‫العمليات تُـنجز تحت سيطرة الكائن المعنى‪ .‬فمثال‪ ،‬ال ُيسمح لصاحب الحساب‬
‫سحب أي قيمة تتجاوز رصيد الحساب‪ .‬كل هذه العمليات تمثل سلوك الكائن‬
‫]حساب مصرفى[ (انظر الشكل ‪.)4-0‬‬
‫سلوك الكائن (العمليات )‬
‫هوية الكائن (بيانات التعريف)‬
‫نوع الحساب‬
‫رقم الحساب‬
‫االســـم‬
‫سحب قيمة‬
‫‪ :‬حساب جارى‬
‫إيداع نقدي‬
‫‪87-464-2:‬‬
‫طباعة كشف حساب‬
‫‪ :‬عمر على ابوالقاسم‬
‫تجميد حساب‬
‫الفرع المصرفي ‪ :‬المختار‬
‫الرصيد‬
‫‪2478 :‬‬
‫حساب مصرفى‬
‫الشكل (‪ :)4-1‬وصف الكائن غير حسي "حساب مصرفي"‬
‫فرز الكائنات البرمجية‬
‫تظل عملية تمييز الكائنات المرشحة لتمثيل أي نظام معلوماتى‪ ،‬هي مهارة بحد‬
‫ذاتها‪ ،‬فليس أي بيانات أو معلومات يمكن إعتبارها كائنات برمجية‪ ،‬فمنها ماهو‬
‫فاقد لالستقاللية‪ ،‬بل تابع لكائنات أخرى‪ ،‬و ليس له أي وجود مستقل لذاته‪ .‬فمثال‬
‫‪20‬‬
‫بيانات العنوان ‪ ،address‬الحظ أنها ال تمثل كائنا مستقال لذاته‪ ،‬ألن العنوان‬
‫خاصية من خصائص كائنات أخرى كالكائنات‪] :‬طالب[‪ ،‬أو ]شركة[‪ ،‬أو ]منزل[‬
‫وغيره‪ ،‬فلكل من هذه الكائنات خاصية تتمثل في إما عنوان الطالب‪ ،‬أو عنوان‬
‫الشركة‪ ،‬أو عنوان المنزل‪.‬‬
‫إن ما تحاول النظرية الشيئية تحقيقه‪ ،‬هو محاكاة نفس صيغة التعامل بين الكائنات‬
‫البرمجية المختلفة‪ ،‬أي أن التطبيقات البرمجية يتم تصميمها ثم برمجتها على هيئة‬
‫"كائنات برمجية"‪ ،‬تتخاطب وتتفاعل فيما بينها ألداء وظائف النظام المعني‪ .‬تتمثل‬
‫ميزة هذا النهج في بناء النظم البرمجية‪ ،‬في تبسيط بناء البرمجيات‪ ،‬والتقليل من‬
‫أخطاء المبرمجين‪ .‬فمثال لو أخطأ المبرمج في كتابة أمر إلستدعاء روتين معين‪،‬‬
‫وتم استدعاء وتنفيذ روتين آخر مشابه له في التسمية‪ ،‬ولكنه ينتمى لكائن آخر‪،‬‬
‫فإنه وفقا للسلوك المتوقع لكل كائن برمجي فإن أي استدعاء بين أي كائنين‬
‫برمجين ال عالقة بينها ستُكشف فو ار‪ .‬فمثال العملية (سحب مبلغ مالى) هي إحدى‬
‫سلوكيات الكائن ]حساب مصرفى[‪ ،‬من المؤكد أنه ستتم االستجابة ألي استدعاء‬
‫لهذه العملية من قبل الكائن ]زبون[ بالمصرف‪ ،‬نظ ار لوجود عالقة بين الكائنين‬
‫]زبون[ و ]حساب مصرفى[ ‪ .‬بينما لو تم خطأ استدعاء نفس العملية من قبل‬
‫الكائن ]سيارة[ الوارد ضمن منظومة خاصة بإدارة إستخدام مركبات المصرف‬
‫مثال‪ .‬فإنه من خالل المفهوم الشيئي سيتم اكتشاف هذا الخطأ تلقائيا لعدم وجود‬
‫عالقة بين الكائنين المختلفين‪ ،‬بينما ال يمكن االنتباه لذلك وفقا ألسلوب البرمجة‬
‫اإلعتيادية (غير الشيئية)‪.‬‬
‫و كمثال واقعي للتمثيل الشيئي للنظم‪ ،‬نورد سيناريو إعارة الكتب ضمن نظام مكتبة‬
‫جامعية‪ .‬الشكل (‪ )1-0‬يمثل مشهد مرئي لما يمكن أن نراه داخل المكتبة‬
‫‪21‬‬
‫الجامعية‪ .‬ضمن مكونات المشهد‪ ،‬الحظ توفر مجموعة من‬
‫المستفيدين من‬
‫الخدمات المكتبية‪ ،‬من طلبة‪ ،‬ومحاضرين‪ ،‬وموظفين‪ ،‬أو أي شخص آخر تشمله‬
‫لوائح العضوية بالمكتبة‪ .‬بإمكان أي من هؤالء التجول بين أرفف الكتب‪ ،‬واختيار‬
‫ٍ‬
‫كتاب ما‪ ،‬فإنه‬
‫الكتب الستعارتها‪ ،‬أو اإلطالع عليها‪ .‬فإذا أراد شخص إستعارة‬
‫سيتوجه مباشرة إلى ركن منظومة اإلعارة‪ ،‬مخاطبا الموظف المسئول من أجل‬
‫إستعارة الكتب‪ .‬هنا يقوم الموظف باستخدام النظام المعلوماتي وذلك بالنقر على‬
‫أزرار خيارات اإلعارة ضمن شاشات النظام‪ .‬يتم تقييد بيانات الكتاب المعار ثم يتم‬
‫تسليمه للمستعير في حال عدم وجود أي موانع تتعلق بالئحة اإلعارة‪.‬‬
‫موظفة مكتبة‬
‫كتاب‬
‫طالب‬
‫شاشة تحاور مع‬
‫المستخدم‬
‫محاضر‬
‫منظومة االعارة‬
‫زر ضمن شاشة التحاور مع نظام المكتبة‬
‫الشكل (‪ :)4-1‬مشهد يبيين الكائنات المعنية بنظام اإلعار بمكتبة جامعية‪.‬‬
‫‪22‬‬
‫هذا السيناريو هو في الواقع عبارة عن سلسلة من الرسائل ‪ ،messages‬التي‬
‫تُـرسل من كائن ألخر ألداء أي وظيفة‪ .‬فعندما يقوم أي عضو بالمكتبة بأخذ كتاب‬
‫معين من الرف‪ ،‬فهذه العملية إنما تعتبر رسالة بين الكائنين المعنيين‪ ،‬أي الكائن‬
‫]مستعير[ و الكائن ]كتاب[‪ .‬كذلك عندما‬
‫يتوجه المستعير إلى ركن اإلعارة‬
‫ويتواصل مع موظف اإلعارة‪ ،‬فهذه العملية هي أيضا رسالة بين الكائنين المعنيين‬
‫ألداء عملية اإلعارة‪ ،‬حيث يتم تقييد بيانات الكتب المعارة في الكائن ]حساب‬
‫إعارة[ التابع للمعنى‪ .‬وعلى هذا النوح‪ ،‬جميع العمليات والرسائل بين كائنات‬
‫المكتبة يمكن وصفها تجريديا كما هو مبين بالشكل (‪.)2-0‬‬
‫محاضر‬
‫طالب‬
‫رسالة معالجة‬
‫حساب‬
‫إعار‬
‫موظف‬
‫مستعير‬
‫كتاب‬
‫نظام اإلعار‬
‫شاشة‬
‫المكتبية‬
‫تحاور مع‬
‫المستخدم‬
‫زر‬
‫الشكل (‪ :)6-1‬تطوير البرمجيات الشيئية بإسلوب التخاطب بين كائنات النظام‪.‬‬
‫‪23‬‬
‫‪ 2.4.1‬التصنيف ‪Class‬‬
‫التصنيف ‪ class‬هو عبارة عن "قالب" يمثل الوصف العام لمجموعة من الكائنات‬
‫التي تتشابه في خصائصها وسلوكها‪ .‬فالتصنيف ‪ class‬يمثل القالب الذي يمكن‬
‫عن طريقه استنساخ أي كائن له نفس الخصائص والسلوك‪ .‬الحظ أن هذه‬
‫الخاصية مستمدة من النزعة البشرية لتصنيف األشياء‪ ،‬ففي واقع الحياة يتم تمييز‬
‫الكائنات الطبيعية على هيئة تصنيفات عديدة‪ ،‬مثل (كائنات حية وكائنات جامدة)‪،‬‬
‫و (طيور‪-‬الثدييات) و (مناطق حارة‪-‬مناطق باردة) وغيرها‪.‬‬
‫التصنيف طالب‬
‫عبدالرحمن بشير‬
‫جامعة النجاح‬
‫كلية الهندسة‬
‫فدوى المغربى‬
‫جامعة النجاح‬
‫كلية الطب‬
‫منذر الحوات‬
‫جامعة النجاح‬
‫كلية التربية‬
‫كائنات تنتمى‬
‫للتصنيف‬
‫طالب‬
‫الشكل (‪ :(8-1‬شكل يمثل عالقة تصنيف بكائنات تابعة له‪.‬‬
‫لمزيد من التفصيل‪ ،‬يمكن إعتبار العنصر ]طالب[ كتصنيف يندرج تحته كل كائن‬
‫له خصائص الطالب‪ ،‬بمعنى أن أي شخص ينتمى لمؤسسة تعليمية‪ ،‬ويدرس‬
‫مجموعة من المقررات‪ ،‬ويخضع إلختبارات التحصيل وغيرها‪ .‬كل عنصر ينتمى‬
‫إلى هذا التصنيف يسمى حالة أو عينة ‪ .instance‬فالطالب عبدالرحمن بشير‪،‬‬
‫والمقيد تحت الرقم دراسى ‪ 402‬بجامعة النجاح‪ ،‬ال يمكن إدراجه كتصنيف ‪class‬‬
‫‪24‬‬
‫بمفرده‪ ،‬فهو يعتبر كائن ‪ object‬ينتمى إلى التصنيف ]طالب[‪ ،‬كذلك الحال مع‬
‫بيانات أي طالب آخر ينتمى إلى نفس التصنيف (انظر الشكل ‪ .)1-0‬إذا فالكائن‬
‫يمثل نسخة أو حالة ‪ instance‬لتصنيف ما‪.‬‬
‫طالب‬
‫طبيب‬
‫فالح‬
‫موظف‬
‫الشكل (‪ :)7-1‬شكل يمثل إدراج مجموعة كائنات ضمن تصنيف ]شخص[‪.‬‬
‫لتمييز الكائنات وتصنيفاتها‪ ،‬يمكن إدراج أي كائن ضمن تصنيف معين إذا توفرت‬
‫بينهما عالقة "يعتبر" (‪ .)is a‬فمن خالل الشكل (‪ )3-0‬الحظ أن كل من الكائنات‬
‫الحقيقية مثل ]فالح[ و]طالب[ و]موظف[ و]طبيب[ كلها تعنى ]شخص[ معين‪.‬‬
‫فالفالح شخص والطالب شخص معين وكذلك الموظف والطبيب‪.‬إذا ما يمكن أن‬
‫ندرجه تحت التصنيف ]شخص[‪ ،‬هو كل كائن له خصائص مثل اسم وطول‬
‫ووزن وعنوان ومهنة وعمر وغيره‪ .‬الحظ أن جميع هذه الخصائص أو البيانات‬
‫هي فى الحقيقة خصائص مشتركة بين تلك الكائنات ( طالب وطبيب وفالح‬
‫وموظف وغيرهم)‪.‬‬
‫الشكل (‪ )5-0‬يمثل مثاال آخ ار لتصنيفات أخرى وهذا التصنيف هو ]عقار[‪ ،‬حيث‬
‫يعتبر المنزل عقار‪ ،‬وكذلك المسجد‪ ،‬والمدرسة‪ ،‬والعيادة‪ ،‬وهى سميت كذلك‬
‫‪25‬‬
‫الشتراكها جميعا في بعض الخصائص األساسية‪ ،‬مثل المالك‪ ،‬والمساحة‪،‬‬
‫والعنوان‪ ،‬وغرض االستفادة منه‪ ،‬وغيره‪ .‬لذلك ادرجت هذه الكائنات تحت نفس‬
‫التصنيف ‪ class‬أي ]عقار[‪.‬‬
‫تصنيف عقار‬
‫منزل‬
‫مسجد‬
‫عياد‬
‫مدرسة‬
‫الشكل (‪ :)9-1‬شكل يمثل إدراج مجموعة كائنات ضمن تصنيف ]عقار[‪.‬‬
‫‪ 3.4.1‬التجريد ‪Abstraction‬‬
‫كما تمت اإلشارة إليه سابقا‪ ،‬يمثل التجريد وسيلة لوصف شيء ما دون التعمق في‬
‫تفاصيله‪ ،‬حيث يتم التركيز فقط على النواحي التي تخدم الغرض من الوصف‪.‬‬
‫فمثال عند الرغبة في وصف بيانات نظام معلومات الطالب الجامعيين‪ .‬الحظ أن‬
‫بيانات النظام المرتقب تتمحور حول الكائنات‪] :‬طالب[ و ]محاضر[ و]مقرر‬
‫دراسي[ وغيرها‪ .‬فإذا حصرنا مؤقتا عملية الوصف التجريدى في العنصر ]طالب[‪،‬‬
‫سنالحظ أن الطالب ككائن بشرى‪ ،‬لديه العديد من البيانات التفصيلية المتعلقة به‪.‬‬
‫وتتمثل هذه البيانات في مجموعة البيانات الشخصية مثل االسم‪ ،‬العمر و الطول‬
‫و الوزن وغيرها‪ ،‬ثم البيانات الصحية‪ ،‬مثل فصيلة الدم‪ ،‬و شفرة الحمض النووى‬
‫‪ ، DNA‬وأمراض الحساسية التي قد يعانى منها‪ .‬إضافة لذلك هناك بيانات أخرى‬
‫‪26‬‬
‫مثل عدد االخوة و رقم الحساب المصرفى (إن وجد)‪ ،‬وتفاصيل رخصة القيادة‬
‫وغيرها‪.‬‬
‫السؤال الذي يمكن طرحه هنا هو‪ :‬هل هناك حاجة إلدخال كل هذه المعلومات‬
‫ضمن النظام المعلوماتى لمعالجة بيانات طالب الجامعة؟ الحظ أنه ال حاجة‬
‫لتخزين كل هذه البيانات‪ ،‬إن ماسيتم إدخاله منها هو فقط مايتعلق بمعالجة بيانات‬
‫أى طالب ضمن العمليات المتوقعة في نظام معلومات الطالب الجامعيين‪ .‬لذا يتم‬
‫اإلكتفاء بالبيانات األساسية‪ ،‬ذات العالقة بمجال التعليم الجامعى‪ ،‬و يتم تجاهل‬
‫أمرض الحساسية‪ ،‬وشفرة‬
‫البيانات األخرى‪ .‬فمثال‪ ،‬بيانات رخصة القيادة‪ ،‬و ا‬
‫الحمض النووى‪ ،‬كلها ال عالقة لها بنظام معلومات الطالب الجامعيين‪ ،‬ويجب‬
‫التغاضى عنها‪ ،‬هذا هو المقصود بالوصف التجريدي للنظام قيد البناء‪ .‬الحظ أن‬
‫البيانات التي تم تجاهلها قد تكون ذات أولوية ضمن نظم أخرى‪ ،‬فمثال بيانات‬
‫أم ارض الحساسية قد تكون بيانات محورية في نظام معلومات المرضى في عيادة‬
‫طبية‪ ،‬بينما تعتبر بيانات شفرة الحمض النووي ذات أهمية محورية عند تجريد‬
‫البيانات لتصميم منظومة المعلومات الجنائية للمواطنين‪ ،‬لذلك تسمى عملية‬
‫التركيز على تفاصيل دون أخرى بعملية التجريد لبيانات النظام المعلوماتي‬
‫المرتقب‪.‬‬
‫‪ 4.4.1‬التغليف ‪ Encapsulation‬واخفاء البيانات ‪Information Hiding‬‬
‫ذكرنا أنه في عملية تجريد بيانات أي نظام مرتقب‪ ،‬يتم فقط دراسة وفرز ما يجب‬
‫االقتصار عليه من البيانات المتوفرة عن النظام‪ .‬أما عملية التغليف‬
‫‪ encapsulation‬فهي تُعنى بالكيفية التي ستنظم وفقها البيانات المنتقاة‪ ،‬وكذلك‬
‫‪27‬‬
‫تحديد سبل معالجة البيانات المعنية‪ .‬وفقا للمفهوم الشيئي فإن عملية التغليف‬
‫تتمحور في فرز البيانات على هيئة مغلفات )كبسولة(‪ ،‬كل منها يسمى تصنيف‬
‫‪ .class‬وسميت مغلفات ألنها تخفي مابداخلها من تفاصيل للتراكيب البيانية ‪data‬‬
‫‪ structures‬وأنواع الدوال ‪ ،functions‬التي من خاللها تتم معالجة البيانات‬
‫)انظر الشكل ‪.)01-0‬‬
‫التصنيف ‪ :‬مستعير‬
‫التصنيف ‪ :‬كتاب‬
‫إسم المحاضر‬
‫العنوان‬
‫الدرجة العلمية‬
‫المؤلف‬
‫القسم‬
‫رقم التصنيف‬
‫تاريخ مباشرة العمل‬
‫الناشر‬
‫إسم الطالب‬
‫سنة النشر‬
‫التخصص‬
‫الرقم الدولي‬
‫الفصل الدراسى‬
‫إسم الموظف‬
‫إضافة بيانات كتاب جديد()‬
‫الدرجة الوظيفية‬
‫تعديل بيانات كتاب()‬
‫إالمهنة‬
‫ضافة بيانات مستعير جديد()‬
‫إستعارة نسخة()‬
‫إستعارة نسخة كتاب()‬
‫إسترجاع نسخة معارة()‬
‫إرجاع نسخة معارة()‬
‫…‪.‬‬
‫الشكل (‪ :)11.-…1‬مثال لمغلفات تحوى تراكيب البيانات والعمليات الممثلة لسلوك التصنيف‬
‫…‪.‬‬
‫المعني‪.‬‬
‫عادة كل مغلف أو تصنيف ‪ class‬لديه واجهة ‪ interface‬يتم التعامل معه من‬
‫خاللها‪ ،‬و دون النظر للتفاصيل‪ .‬هذا األسلوب في التعامل يحاكي األساليب‬
‫‪28‬‬
‫المتبعة في جميع النظم الهندسية التي يتعامل معها البشر‪ .‬فالطائرة مثال تعتبر‬
‫مغلفا أو تصنيفا‪ ،‬يقوم قائد الطائرة بالتحكم في تشغيلها عبر واجهة تعامل‬
‫‪ interface‬تتمثل في مجموعة العدادات‪ ،‬وأجهزة المالحة الجوية المختلفة‪ ،‬ولكنه‬
‫يجهل تماما التفاصيل المعقدة لنظرية عمل المحركات‪ ،‬وحركة أجنحة الطيران‬
‫ألنها ال تعنيه‪.‬‬
‫الشكل (‪ :)11-1‬مثال لمفهوم إخفاء التفاصيل واالكتفاء بالتعامل مع منافذ اإلتصال‬
‫بأجهز تشغيل السيار ‪.‬‬
‫تعتبر قيادة السيارة كمثال أكثر شيوعا لمفهوم التغليف واخفاء التفاصيل‪ ،‬فقيادة‬
‫السيارة تستلزم فقط معرفة كيفية التعامل مع واجهة القيادة ‪ Interface‬المتمثلة في‬
‫العدادات والدواسات وعمود تبديل السرعات وغيره (انظر الشكل ‪ ،)00-0‬بينما‬
‫تفاصيل احتراق الوقود وانتاج طاقة الحركة وغيرها من تعقيدات‪ ،‬فهى عادة ما‬
‫تكون خارج إهتمام السائق‪ ،‬بل اليلزمه اإللمام بتفاصيلها ألنه ببساطة ال حاجة له‬
‫بها للتمكن من قيادة السيارة‪ .‬فمن وجهة نظر التقنية الشيئية‪ ،‬تعتبر السيارة مغلف‬
‫ويكتَفَى فقط بإبراز واجهة تعامل‬
‫يخفي التفاصيل النظرية لطريقة عملها‪ُ ،‬‬
‫‪ dashboard‬مختصرة وغير معقدة تتمثل في عدادات السرعة والدواسات وعمود‬
‫‪29‬‬
‫تغيير السرعات‪.‬‬
‫المفهوم الشيئي للبرمجة يهدف إلى تحقيق نفس طريقة التعامل‬
‫مع البرمجيات عبر خاصية التغليف‪.‬‬
‫مبرمجي النظم الشيئية‬
‫وفقا لمفهوم البرمجة الشيئية أصبح هناك نوعان من المبرمجين‪ ،‬مبرمجون‬
‫مختصون ببرمجة التصانيف ‪( class‬أى المغلفات)‪ ،‬وآخرون يستغلون التصنيفات‬
‫الجاهزة في برمجة وتجميع التطبيقات المختلفة‪ .‬فالنوع الثاني من المبرمجين ال‬
‫يهتم بالتفاصيل الداخلية للمغلفات البرمجية بينما يكتفون فقط باإللمام بواجهة‬
‫التعامل مع هذه المكونات تماما كسائقي السيارات‪ .‬انظر مثال أسلوب البرمجية‬
‫المرئية ‪ visual programming‬المتمثلة في لغات ‪Visual Basic‬و ‪Visual‬‬
‫‪ C++‬و غيرها‪ .‬يمكن للمبرمج بهذه اللغات المرئية ان ينشئ تطبيقا برمجيا في‬
‫وقت يسير جدا‪ ،‬فجميع مكونات التحاور مع المستخدم‪ ،‬من أزرار أوامر‪ ،‬ومكونات‬
‫إدخال البيانات (انظر الشكل ‪ )04-0‬تعتبر جاهزة لإلستخدام وفقا الختيارات‬
‫المبرمج‪ .‬يمكن للمبرمج فقط تعديل خصائص االلوان‪ ،‬وعناوين البيانات وترتيبها‬
‫على الشاشة‪ .‬جميع هذه اإلجراءات يمكن للمبرمج إنجازها‪ ،‬دون اإلطالع على‬
‫شفرة البرامج التي تنشئ العناصر المختلفة لعناصر التحاور مع المستخدم‪.‬‬
‫الطريقة السابقة لتصميم وبناء البرمجيات‪ ،‬تعتمد على ما يسمى بأسلوب إخفاء‬
‫المعلومات ‪ information hiding‬عن من ليس له عالقة باإلطالع عليها‪ .‬هذه‬
‫الخاصية لها أهمية كبيرة في سهولة أعمال الصيانة للبرمجيات‪ ،‬فيمكن اإلحتفاظ‬
‫بنفس بيانات واجهة التعامل ‪ ،interface‬بينما يتم تعديل المكونات الداخلية‬
‫للمغلفات‪ ،‬أو التصانيف‪ ،‬دون إحداث أي خلل بالتطبيقات التي تستخدمها‪ .‬فقد يتم‬
‫‪30‬‬
‫اللجوء لتغيير تراكيب قاعدة البيانات‪ ،‬أو الفهارس المعتمدة للوصول للبيانات‬
‫وغيرها دون التعديل الجذرى في التطبيقات البرمجية المعنية‪.‬‬
‫الشكل )‪ :)12– 1‬بيئة تطوير البرمجيات المرئية واإلعتماد على النماذج الجاهز القابلة‬
‫للتعديل‪.‬‬
‫‪ 5.4.1‬الوراثة ‪Inheritance‬‬
‫تتمثل الوراثة عموما في اشتراك أكثر من كائن في خصائص معينة‪ .‬فمثال رغم‬
‫أن البشر والحيوانات كائنان مختلفان‪ ،‬إال أنهما يشتركان في بعض الخصائص‬
‫كالوالدة مثال‪ .‬كذلك يهدف المفهوم الشيئي إلبراز الخصائص المشتركة للكائنات‬
‫‪31‬‬
‫البرمجية المختلفة‪ .‬والهدف من التصنيف الوراثي لألشياء هو االختصار في‬
‫الوصف‪ ،‬واالكتفاء بما يجب التصريح به‪ ،‬بينما يتم معرفة الصفات الموروثة‬
‫ضمنيا‪ .‬فمجرد تعريف كائن ما كالغراب مثال بأنه طائر‪ ،‬فهو تلقائيا يرث‬
‫الخصائص العامة ألي طائر‪ ،‬مثل القدرة على الطيران‪ ،‬دون الحاجة للتعريف بأنه‬
‫يستطيع الطيران و أن له جناحين و غير ذلك‪.‬‬
‫والبشر عادة يتعاملون تلقائيا بمبدأ وراثة الصفات في وصفهم وتعريفهم لألشياء‪.‬‬
‫فهم يلجأون للتجريد واإلختصار في إيصال المعلومات‪ ،‬وذلك إعتمادا على فهم‬
‫اآلخرين للتفاصيل الدقيقة عمال بمبدأ وراثة المفاهيم‪ .‬فالعرب القدماء يقولون‪:‬‬
‫"توضيح الواضحات من الفاضحات"‪ ،‬أي أن اإلغراق في الوصف عادة سيئة‪ ،‬بل‬
‫قد يوصف فاعلها بالحمق أحيانا‪ .‬تخيل مثال‪ ،‬أن شخصا ما تردد على بيتكم‬
‫سائال عن شقيقك في حال غيابه‪ ،‬ثم أردت وصف الشخص لشقيقك إثر عودته‬
‫للبيت‪ ،‬من المؤكد أنك لن تصف السائل بأنه شخص له عينين‪ ،‬ويقف على قدمين‬
‫اثنتين‪ ،‬وله قامة طويلة‪ ،‬وأنه يرتدى ربطة عنق!!! تُرى هل يجب ذكر كل هذه‬
‫التفاصيل لالستدالل على هوية شخص معين!! قطعا ال‪ .‬فمن المعلوم أن أي‬
‫]شخص[ يمكن أن تكون له مثل هذه االوصاف‪ ،‬و وصف الشخص على ذلك‬
‫النحو ال يفيد شيئا‪ ،‬أي بمجرد ِذكر أن شخصا ما أتى للسؤال عن آخر فهذا كافيا‬
‫مبدئيا‪ ،‬فكل هذه االوصاف هي أوصاف ضمنية ويرثها أي شخص‪ .‬بل أن هذا‬
‫الوصف المغرق في تفاصيل ال لزوم لها‪ ،‬قد ال يساعد كثي ار في معرفة هوية‬
‫السائل‪ .‬فإذا قلت أن شخصا ُيدعى فالن أو به عاهة مميزة‪ ،‬فإن ذلك أكثر‬
‫اختصار وداللة على هوية الشخص الموصوف دون اإلغراق في وصفه على ذلك‬
‫النحو الذى اليفيد‪.‬‬
‫‪32‬‬
‫و على صعيد البرمجيات فإنه يستفاد من خاصية الوراثة في تجنب تكرار بعض‬
‫التراكيب البيانية‪ .‬وكذلك الدوال البرمجية‪ ،‬وذلك عند برمجة التطبيقات المختلفة‪.‬‬
‫فتكرار البيانات المتشابهة له تأثير سلبي على استغالل الذاكرة‪ ،‬كذلك فهو يساهم‬
‫في تعقيد شفرة البرمجيات مما يؤذى إلى صعوبة صيانتها‪ .‬وخاصية الوراثة لها‬
‫صلة مباشرة بخاصية التصنيف‪ ،‬فالتصنيف يبين مسارات الوراثة بين الكائنات‬
‫المختلفة (أى من يرث بيانات وسلوك من)‪ .‬فارتباط الكائن ]س[ بعالقة "يعتبر"‬
‫مع الكائن ]ص[‪ ،‬انما تعنى ان الكائن ]س[ يرث جميع خصائص (اى بيانات‬
‫وسلوك) الكائن ]ص[‪ .‬لذلك عوضا عن التصريح بهذه الخصائص ضمن تعريف‬
‫الكائن ]س[‪ ،‬فإنه يشار فقط إلى أنه يرث الكائن ]ص[ ومن ثم فإنه سيرث سلوك‬
‫وجميع خصائص الكائن االب ضمنيا‪.‬‬
‫ألدراك مفهوم الوراثة ضمن إطار نظام المكتبة الجامعية‪ ،‬الحظ أنه رغم إشتراك‬
‫جميع المستفيدين بالمكتبة في خصائص معينة‪ ،‬إال أنه هناك بيانات معينة تميز‬
‫كل شريحة من المستفيدين بالمكتبة‪ ،‬فالطالب له بيانات معينة تميزه عن‬
‫المحاضر‪ ،‬وكذلك الموظف االداري بالجامعة له بيانات معينة تميزه عن الطالب‬
‫وهكذا‪ .‬فبيانات الرقم الدراسى مثال ال تنطبق على المحاضر وكذلك بيانات الدرجة‬
‫الوظيفية للمحاضر أو الموظف ال تنطبق على الطالب وهكذا‪ .‬لذلك يتم تسمية‬
‫تصنيف تجريدى عام يطلق عليه‪] :‬مستعير[‪ ،‬هذا التصنيف يحوي تفاصيل‬
‫البيانات والعمليات المشتركة‪ ،‬بين جميع شرائح المستعيرين‪ ،‬وتتم وراثة هذه‬
‫البيانات‪ ،‬و العمليات‪ ،‬من قبل الكائنات الفرعية‪ ،‬التي تمثل خصوصيات كل كائن‬
‫يمثل شريحة من شرائح المستعيرين مثل‪] :‬طالب[ و]محاضر[ و]موظف[‪.‬‬
‫فعوضا عن كتابة عدد ثالث دوال منفصلة‪ ،‬إحداها إلعارة كتاب لطالب‪ ،‬وأخرى‬
‫إلعارة كتاب لمحاضر‪ ،‬وثالثة إلعارة كتاب لموظف‪ ،‬فإنه وفقا لمفهوم الوراثة يتم‬
‫‪33‬‬
‫كتابة دالة عمومية واحدة إلعارة كتاب‪ ،‬ويتم استدعاء نفس الدالة من قبل عضو‬
‫المكتبة‪ ،‬سواءا كان محاض ار‪ ،‬أو طالبا‪ ،‬أو موظفا‪ .‬ويمكن إنجاز ذلك بعد‬
‫التصريح بأن‬
‫التصنيفات‪:‬‬
‫]طالب[ و]محاضر[ و]موظف[ جميعها‬
‫التصنيف ]مستعير[‪ ،‬وذلك على النحو المبين بالشكل (‪.)01-0‬‬
‫ترث‬
‫من خالل الشكل(‪ ،)01-0‬الحظ أن النموذج األعلى من الشكل يمثل تصميم‬
‫وبرمجة دالتي إعارة واسترجاع الكتب لكل صنف من اصناف المستعيرين‪ .‬كل‬
‫منها كتبت على حدة‪ .‬بينما النموذج األسفل من الشكل يمثل استغالل خاصية‬
‫الوراثة في النظم الشيئية‪ .‬الحظ أن هذه الطريقة أكثر إختصار في الوصف وفى‬
‫قلة المجهود البرمجى‪ .‬فبمجرد إبراز ارتباط التصنيفات‪] :‬طالب[ و]محاضر[‬
‫و]موظف[ مع التصنيف ]مستعير[ بعالقة الوراثة‪ ،‬إثرها ال يجب كتابة دالة‬
‫خاصة لإلعارة لكل تصنيف على حدة‪ ،‬بل جميعها تستغل نفس الدوال المعرفة‬
‫داخل التصنيف األب وهو التصنيف ]مستعير[‪.‬‬
‫‪ 6.4.1‬معدل التماسك ‪Cohesion‬‬
‫برز مفهوم تجزئة البرمجيات مع ظهور لغات البرمجة الهيكلية‪ ،‬حيث أمكن كتابة‬
‫البرامج على هيئة روتينات يتم إنجازها‪ ،‬واختبارها‪ ،‬بصورة منفردة‪ ،‬ثم تلصق‬
‫ببعضها وفقا لالرتباط الوظيفى بينها‪ .‬وشكـل مفهوم التجزئة أسلوبا جديدا‪ ،‬ساهم‬
‫في إنجاز البرمجيات بصورة جماعية‪ ،‬باإلضافة إلى التحسن الكبير في جودة‬
‫البرمجيات المنجزة‪ .‬مؤخ ار برزت مسائل عدة تتعلق بما يتكون منهه الجزيء‬
‫(الروتين)‪ ،‬وما حجمه‪ ،‬وكثافة اقتران روتين معين بغيره من الروتينات األخرى‪،‬‬
‫التي تشاركه في أداء وظيفة أو مهمة معينة‪.‬‬
‫‪34‬‬
‫دالة إعارة كتاب لطالب‬
‫{‬
‫دالة إسترجاع كتاب لطالب‬
‫{ ‪.....‬‬
‫}‬
‫‪.....‬‬
‫}‬
‫دالة إعارة كتاب لمحاضر‬
‫دالة إعارة كتاب لموظف‬
‫{‬
‫دالة استرجاع كتاب لمحاضر‬
‫‪.....‬‬
‫{‬
‫دالة إسترجاع كتاب لموظف‬
‫‪.....‬‬
‫‪.....‬‬
‫‪.....‬‬
‫}‬
‫}‬
‫{‬
‫}‬
‫ملف‬
‫طالب‬
‫{‬
‫}‬
‫ملف‬
‫موظفون‬
‫ملف‬
‫محاضرون‬
‫جزء – أ‪ :‬تصميم برمجيات دون االستعانة بمفهوم الوراثة‬
‫مستعير‬
‫رقم العضوية‬
‫غرامة مستحقة‬
‫إعار كتاب( )‬
‫{‪}......‬‬
‫استرجاع كتاب( )‬
‫{‪}......‬‬
‫محاضر‬
‫موظف‬
‫طالب‬
‫جزء – ب‪ :‬تصميم برمجيات باإلستعانة بمفهوم الوراثة‬
‫الشكل (‪ :)11-1‬نموذجين لتصميم برمجيات وفقا لألسلوب التقليدى (أعلى) وآخر وفقا‬
‫ألسلوب الوراثة (أاسفل)‪.‬‬
‫‪35‬‬
‫خاصية تماسك الروتين البرمجي تتعلق بعدد الوظائف أو المهام التي يقوم بها كل‬
‫روتين‪ .‬كلما كبر عدد وظائف الروتين أُعتبر ذو تماسك منخفض‪ ،‬وهى خاصية‬
‫سيئة خاصة عندما تكون الوظائف غير ذات صلة مطلقا‪ .‬ويشكل التماسك‬
‫المنخفض تحديا كبي ار أثناء صيانة البرمجيات المعنية الحقا‪ .‬على صعيد هندسة‬
‫البرمجيات الشيئية‪ ،‬يتمثل معيار التماسك في معدل تماسك التصانيف ‪classes‬‬
‫والدوال ‪ ،methods‬فهى إما ان تكون ذات معدل‬
‫تماسك عالي ‪highly‬‬
‫‪ cohesive‬أو ذات معدل تماسك منخفض ‪.low cohesion‬‬
‫تثمثل التصانيف والدوال ذات التماسك عالي الكثافة في جعلها إما تصف شيئا‬
‫واحدا بالنسبة للتصانيف‪ ،‬أو بجعلها تقوم بوظيفة واحدة بالنسبة للدوال‪ .‬فبالنسبة‬
‫للتصانيف مثال‪ ،‬عند تصميم منظومة اإلعارة بالمكتبة الجامعية‪ ،‬يمكن اقتراح‬
‫التصانيف‪] :‬محاضر[ و ]طالب[ و]موظف[‪ .‬الحظ أنه رغم إشتراك هذه‬
‫التصانيف في البيانات األساسية الخاصة باإلعارة كرقم المرجع المعار وتاريخ‬
‫اإلعارة ومدتها‪ ،‬غير انه لكل من هذه التصانيف بيانات أخرى تميزه‪ ،‬كالمنصب‬
‫الوظيفى بالنسبة للتصنيف ]موظف[‪ ،‬والفصل الدراسى بالنسبة للتصنيف ]طالب[‪،‬‬
‫و الدرجة العلمية بالنسبة للتصنيف ]محاضر[‪ .‬لذاك هناك بيانات تخص كل نوع‬
‫من أنواع المستفيدين من خدمات المكتبة‪ .‬ومن تم‪ ،‬فإن اختزال كل أنواع‬
‫المستفيدين واقتراح تصنيف تجريدى شامل يدعى ]مستعير[ ‪( borrower‬يجمع‬
‫تفاصيل جميع أنواع المستفيدين) يعتبر أم ار غير جيد‪ .‬وتعتبر هذه الطريقة في‬
‫التمثيل ذات تماسك‪/‬التصاق منخفض ‪ low cohesion‬وهو خاصية سيئة‪.‬‬
‫أما الطريقة المثلى فهي اقتراح كائنات ذات تماسك عالي‪ ،‬وذلك بإتباع التمثيل‬
‫الهرمى ‪ hierarchal‬للتصانيف‪ ،‬والذي يعتمد على مفهوم وراثة ‪inheritance‬‬
‫‪36‬‬
‫الخصائص المتشابهة بين التصانيف‪ .‬فعند تصميم نظام المكتبة‪ ،‬يتم تمييز كل‬
‫نوع من أنواع المستعيرين كتصنيف ‪ class‬بمفرده‪ ،‬بينما يتم اقتراح تصنيف عام‬
‫يمثل الخصائص المشتركة (البيانات) بين جميع انواع المستعيرين‪ .‬يمكن تسمية‬
‫التصنيف العام‬
‫بـ ]مستعير[ بينما تقوم التصـانيف الفرعية مثل ]محاضر[‬
‫و ]طالب[ و]موظف[ بوراثة البيانات والعمليات األساسية لعمليات االستعارة‪ .‬وفقا‬
‫سيمثل بتصنيف بمفرده‬
‫لهذا النهج في التمثيل فإن كل نوع من أنواع المستعيرين ُ‬
‫وهو ما يوافق شرط التماسك العالي ‪ high cohesion‬وهى خاصية ايجابية‪.‬‬
‫تتميز الوحدات البرمجية ذات التماسك العالي‪ ،‬بإنها إذا كانت هناك حاجة إلى‬
‫تغيير أي من العمليات‪ ،‬أو تراكيب البيانات التي تخص أي من أنواع المستعيرين‪،‬‬
‫فإن التعديالت المحتملة ستكون فقط في التصنيف المعنى دون غيره من‬
‫التصانيف‪.‬‬
‫فمثال إن كانت هناك حاجة إلتاحة الفرصة للمحاضرين فقط‬
‫لالستعارة الخارجية ‪ ( interlibrary loan‬أي استعارة كتب من مكتبات جامعات‬
‫أخرى)‪ .‬ففي هذه الحالة يتم التعديل في تركيبة التصنيف ]محاضر[ فقط‪ ،‬يتم ذلك‬
‫بإضافة‬
‫دالة جديدة تقوم بأداء هذه العملية‪ ،‬بينما ال يتم التطرق ألى من‬
‫التصانيف األخرى عند إجراء هذه العملية‪ ،‬ومن ثم فهى لن تتأثر سلبا بأعمال‬
‫الصيانة التي تجرى على التصنيف المراد تعديله‪.‬‬
‫بالنسبة لتماسك للدوال فمثال عند تصميم تصنيف ‪ class‬من نوع ]كتاب[‪ ،‬فمن‬
‫المؤكد أن هذا التصنيف سيتضمن دوال عديدة‪ ،‬مثل‪ :‬عملية استعارة كتاب‬
‫)(‪ borrow_a_book‬وعملية استرجاع كتاب )(‪ return_a_book‬باإلضافة‬
‫إلى عمليات أخرى مثل أضف كتاب جديد )(‪ add_a_book‬وعملية حذف كتاب‪،‬‬
‫)(‪ delete_a_book‬وغيرها‪ .‬الحظ أنه من الممكن جعل كل من عمليتى استعارة‬
‫‪37‬‬
‫كتاب‪ ،‬وعملية استرجاع كتاب‪ ،‬تُنجزان من خالل دالة ‪ function‬واحدة‪ .‬في هذه‬
‫الحالة تسمى هذه الدالة السابقة بدالة ذات تماسك منخفض ‪.low cohesion‬‬
‫مشكلة هذه الطريقة في بناء البرمجيات أن شفرة البرامج ‪ code‬تكون أكثر تعقيدا‪،‬‬
‫فمثال عند الرغبة في تعديل الئحة استرجاع الكتب‪ ،‬فإن مهندس الصيانة سيتتبع‬
‫شفرة الدالة بأكملها لكى ينجز التغيرات المناسبة‪ ،‬رغم أن التغييرات تخص مهمة‬
‫واحدة وهي مهمة (اى استرجاع كتاب) دون غيرها‪ .‬لذلك يستحسن جعل كل من‬
‫العمليتين تنجز بواسطة دالة ‪ method‬منفردة‪ ،‬عندها يكون كل من الدالتين‬
‫الجديدتين ذات تماسك عالي البنية وهو ما توصى به أساليب هندسة البرمجيات‬
‫الحديثة‪ .‬الشكل (‪ )02-0‬يبين تصو ار لألنواع المختلفة لتماسك الدوال البرمجية‪.‬‬
‫‪ 7.4.1‬معدل االرتباط ‪Coupling‬‬
‫االرتباط هي خاصية يقاس من خاللها كثافة اإلتصاالت (أي االستدعاءات) بين‬
‫وحدات البناء البرمجية ممثلة في التصانيف ‪ classes‬والدوال ‪ methods‬التي‬
‫يتكون منها النظام‪ .‬ويتمثل االرتباط للتصانيف في عملية استدعاء أي تصنيف‬
‫لتصنيف آخر أو مجموعة تصانيف أخرى وذلك من أجل إنجاز مهمة معينة‪ .‬أما‬
‫االرتباط بين الدوال فيتمثل في عملية استدعاء دالة ما ‪ method‬لدالة‬
‫أو لمجموعة دوال أخرى النجاز وظيفة معينة‪ .‬ويتم إنجاز االرتباط بين أي‬
‫تصنيفين بطريقتين مختلفتين‪ ،‬فعند استدعاء تصنيف ما لتصنيف آخر دون التدخل‬
‫الم َخاطَب‪ ،‬عندها يسمى‬
‫في المكونات الداخلية للتصنيف ُ‬
‫هذا النوع من االرتباط‬
‫إرتباطا مرنا ‪ loose coupling‬وهو النوع الجيد من االرتباط‪ .‬أما عندما يكون‬
‫االرتباط بين التصنيفين المعنيين يشمل استدعاء وتنفيذ بعض البيانات‪ ،‬أو الدوال‬
‫الخاصة بتصنيف معين من قبل تصنيف أخر‪ ،‬عندها يسمى هذا النوع من‬
‫‪38‬‬
‫اإلرتباط ارتباط قوي ‪ strong coupling‬وهو سيئ التأثير‪ ،‬حيث تعتبر خاصية‬
‫االرتباط القوي أم ار‬
‫يخرق قواعد النظرية الشيئية وتحديدا مفهوم التغليف‬
‫‪ encapsulation‬الذي يصر على استقاللية الكائنات‪.‬‬
‫)‪Function sak( , , ,‬‬
‫دالة ذات تماسك(سيئ)‬
‫)‪Function xyz( , , ,‬‬
‫دالة ذات تماسك(مقبول)‬
‫)‪Function abc( , , ,‬‬
‫دالة ذات تماسك مثالى‬
‫الشكل(‪ :)14-1‬نماذج لدوال ذات ترابط داخلى‪/‬تماسك مختلف‪.‬‬
‫لتوضيح هذه المسألة من خالل نظام المكتبة الجامعية‪ ،‬الحظ أنه عند الحاجة إلى‬
‫إنجاز عملية استعارة كتاب من قبل أي ]مستعير[‪ ،‬يجب أوال الكشف عن حالة‬
‫الكتاب (معار‪ ،‬محجوز‪ ،‬مرجع ال يعار‪ ،‬الخ)‪ .‬إلجراء هذه العملية يمكن جعل‬
‫التصنيف ]مستعير[ قاد ار على قراءة بيانات حالة الكتاب ‪ book status‬المدرجة‬
‫ضمن التصنيف ]كتاب[‪ ،‬ومن ثم استكمال العملية‪ .‬وهذا النوع من االرتباط يسمى‬
‫إرتباط قوي‪ .‬الطريقة األخرى تتمثل في مخاطبة التصنيف ]مستعير[ للتصنيف‬
‫]كتاب[ وذلك بواسطة ارسال الرسالة )(‪( get_book_status‬أي ما هي حالة‬
‫المراد)‪ .‬في هذه الحالة فإن عملية قراءة البيانات المعنية تتم من قبل‬
‫الكتاب ُ‬
‫التصنيف المختص وهو التصنيف ]كتاب[ وهو بدوره ينقل الجواب للتصنيف‬
‫‪39‬‬
‫]مستعير[‪.‬‬
‫هذا النوع من اإلرتباط يسمى ترابطا مرنا وهو االفضل ألنه يعزز‬
‫أسلوب التخاطب عبر المراسالت ‪ messages‬الذي توصى به النظرية الشيئية‪.‬‬
‫‪ 8.4.1‬تعدد األشكال ‪Polymorphism‬‬
‫هذا المفهوم هو محاكاة لسلوك حيوان الحرباء‪ ،‬اذ من المعروف ان الحرباء لها‬
‫القدرة على أن تتلون بألوان مختلفة‪ .‬و بالنسبة لهندسة البرمجيات الشيئية فالهدف‬
‫من تحقيق خاصية تعدد األشكال هو بناء مكونات برمجية‪ ،‬لديها القدرة على‬
‫التكيف مع أنواع مختلفة من المعطيات‪ .‬تحقيق هذه الخاصية ُيمكن من تفادي‬
‫كتابة شفرات برامج ‪ code‬مختلفة للتعامل مع كل نوع من أنواع المعطيات‪،‬‬
‫فالكائن متعدد األشكال سيسلك سلوكا متبدال وذلك وفقا للمعطيات المزود بها‪.‬‬
‫فمثال‪ ،‬نظ ار الن لوائح اإلعارة في نظام المكتبة تختلف بحسب نوع المستعير‬
‫(محاضر‪ ،‬طالب‪ ،‬موظف) فمن البديهي أنه سيتم تصميم وكتابة دوال مختلفة‬
‫النجاز عملية اإلعارة لكل نوع من أنواع المستعيرين وذلك على النحو التالى‪:‬‬
‫استدعاء دالة دالة اإلعارة لطالب‪.....‬‬
‫استدعاء دالة اإلعارة لمحاضر‪........‬‬
‫استدعاء دالة اإلعارة لموظف‪.........‬‬
‫)(‪borrorw_book_student‬‬
‫)(‪borrorw_book_lecturer‬‬
‫)(‪borrorw_book_employee‬‬
‫الحظ أن كل من الدوال السابقة لها شكل واحد في التعامل‪ ،‬أي أنها تقوم بأداء‬
‫خدمة إعارة كتاب لصنف معين من المستعيرين (طالب‪ ،‬محاضر‪ ،‬موظف)‪.‬‬
‫مايراد تحقيقه باستخدام خاصية تعدد األشكال ‪ polymorphism‬هو تصميم دالة‬
‫ُ‬
‫واحدة يمكنها التكيف مع أي نوع من أنواع المعطيات المختلفة المتمثلة في‬
‫أصناف المستعيرين‪ .‬فوفقا للمعطيات المرسلة عند استدعاء الدالة متعددة األشكال‬
‫فإنها تسلك السلوك الخاص بالمعطيات المعنية‪ .‬إن كانت المعطيات تشير إلى أن‬
‫‪40‬‬
‫المستعير هو من صنف ]محاضر[‪ ،‬فإن الدالة ستختبر شروط اإلعارة بالنسبة‬
‫للمحاضرين‪ ،‬وهكذا بالنسبة ألصناف المستعيرين اآلخرين‪ ،‬أي أن نفس الدالة‬
‫تتعامل مع معطيات مختلفة وبسلوك مغاير‪ .‬لذلك فإنه عوضا عن كتابة دالة‬
‫خاصة باإلعارة لكل شريحة من شرائح المستعيرين ( كما هو مبين سابقا)‪ ،‬فإنه يتم‬
‫اللجوء إلى صياغة دالة واحدة متعددة األشكال (أى حرباوية التشكل) لها القدرة‬
‫على التعامل مع الشرائح المختلفة من المستعيرين ُك ٌل حسب لوائح اإلعارة الخاصة‬
‫به‪.‬‬
‫‪ 9.4.1‬التطوير وفقا للمكونات البرمجية الجاهزة ‪Component-Based‬‬
‫لقد تم إعتماد طريقة بناء البرمجيات بواسطة المكونات الجاهزة في إطار حملة‬
‫إعادة إستخدام المكونات البرمجية المستعملة سابقا ‪ .software reuse‬و تهدف‬
‫هذه الحملة إلى عدم برمجة النظم المعلوماتية من الصفر في كل مرة‪ ،‬بل يتم‬
‫اللجوء إلى إعادة استغالل مكونات برمجية سابقة كلما أمكن‪ ،‬وذلك اختصا ار‬
‫للوقت والجهد‪ .‬ورغم الوعود التي صاحبت ظهور النظرية الشيئية من حيث قدرتها‬
‫على تصميم مكونات برمجية يمكن إعادة استخدامها على نطاق واسع‪ ،‬إال أن ما‬
‫تحقق حتى اآلن هو أقل بكثير من المتوقع‪ .‬فكان من المفترض أن يتم إعادة‬
‫إستخدام المكونات الشيئية على مستوى التصانيف ‪ ،classes‬إال أن التفاصيل‬
‫الدقيقة للتصانيف ولغات البرمجية المنجزة بها‪ ،‬حالت في كثير من األحيان دون‬
‫إعادة استخدامها دون تغييرات جوهرية‪ .‬لذلك تم التفكير في تصميم مكونات‬
‫برمجية أكثر عمومية‪ ،‬ولها صفة االستغالل في العديد من التطبيقات داخل مجال‬
‫معين (تعليم‪ ،‬ترفيه‪ ،‬تجارة الكترونية‪ ،‬الخ)‪.‬‬
‫‪41‬‬
‫من حيث الحجم‪ ،‬تعتبر المكونات البرمجية ‪ software components‬ذات‬
‫حجم أكبر من العناصر الشيئية المألوفة (تصنيف‪ ،‬كائن)‪ .‬بل قد تتكون من‬
‫مجموعة من التصانيف ذات العالقة والتى تقوم بمهمة محددة‪ .‬ويعتبر هذا فرقا‬
‫جوهريا بين المكونات البرمجية ‪ software components‬والعناصر الشيئية مثل‬
‫التصنيف ‪ class‬مثال‪ .‬فإعادة إستخدام التصانيف ‪ classes‬تستلزم التوافقية‬
‫‪ compatibility‬بين لغات التمثيل لهذه التصانيف ولغة التمثيل المستخدمة في‬
‫البرمجيات المستهدف بنائها‪ ،‬أما فيما يخص إعادة إستخدام المكونات البرمجية‪،‬‬
‫يتم فقط استدعائها ألداء الخدمة ‪ service‬المنوطة بها‪ ،‬فهي لها القدرة على‬
‫التخاطب مع أي نوع من أنواع المكونات البرمجية التي تستدعيها‪ ،‬و بأى لغة‬
‫ُكتبت أو نوع نظام تشغيل يدعمها ‪ .‬أي أن مسألة شرط التوافقية ليست مطروحة‬
‫مطلقا‪.‬‬
‫‪ 10.4.1‬األنماط ‪Patterns‬‬
‫يطلق مصطلح نمط ‪ pattern‬على كل ما هو سائد من سلوك أو شكل وغيره‪.‬‬
‫ِ‬
‫فالحرفى المختص في صناعة أي شيء غالبا ما يسلك نهجا نمطيا (مكر ار) في‬
‫إنجاز مشغوالته‪ ،‬والتعامل مع األنماط المتكررة هو ما يكسب المهارة التي تميز‬
‫المبتدئين عن المحترفين في المجاالت المختلفة‪ .‬ومفهوم التعامل باألنماط ليس‬
‫حك ار على صناعة البرمجيات‪ ،‬بل هو متبع من قبل أي مهندس أو حرفى في أي‬
‫مجال من مجاالت الحياة‪ .‬فمثال لو تتبعنا سلوك مهندس االنشاءات المدنية عند‬
‫شروعه في رسم التصاميم االنشائية أو المعمارية لمبنى مدرسة مثال‪ ،‬فمن المالحظ‬
‫أن هناك أنماط سائدة الشكال عمارة المدارس‪ ،‬فالمدرسة باالساس عبارة عن‬
‫مجموعة فصول دراسية ومكاتب وساحات النشاط الرياضى وغرف المنافع الالزمة‬
‫‪42‬‬
‫مع مراعاة نواحي السالمة والصحة العامة في التصميمات المستهدفة‪ .‬و من‬
‫األنماط السائدة لتصميم المدارس أنها تتمحور حول مجموعة من الفصول‬
‫المتجاورة طوليا أو على هيئة شكل مربع ناقص ضلع تتخلله ساحة النشاط وهكذا‪.‬‬
‫تمثل هذه األنماط نقطة البداية ألي مهندس معماري وهى بالتأكيد تجعله يضع كل‬
‫تركيزه في ابتكار التفاصيل الدقيقة التي من الممكن أن تميز مدرسة عن أخرى‪.‬‬
‫وإلدراك أهمية االسترشاد باألنماط وسهولة العمل من خاللها‪ ،‬تخيل أن ُيطلب من‬
‫معمارى امريكى أن يصمم مسجدا حديثا في مدينة عربية‪ .‬الشك أن مهمة هذا‬
‫المعمارى من الصعوبة بمكان‪ ،‬فقد ال على دراية باألنماط السائدة لعمارة المساجد‬
‫في بالدنا المسلمة‪ .‬ولذلك فهو غالبا سيصمم المسجد بصورة قد ال تثير استحسان‬
‫الناس الذين تعودوا على االنماط الشائعة لعمارة المساجد في بلدان العالم‬
‫االسالمي‪ .‬بينما من اليسير إسناد نفس المهمة لمعمارى مسلم نشأ في بيئة مسلمة‪،‬‬
‫حيث عادة ما يكون هذا المعماري ملما باألنماط السائدة في عمارة المساجد‬
‫ومتأث ار بها‪ .‬لذلك فهو البد أن يلجأ إلى إستخدام انماط معمارية سائدة كالمآذن‬
‫والقباب واألقواس وغيرها‪.‬‬
‫وليس المهندسين المعماريين وحدهم من يلجأون للتعامل مع األنماط بل هو‬
‫أسلوب متبع من قبل مصممى السيارات‪ ،‬ومصممى المصانع‪ ،‬ومصممى‬
‫المالبس‪ ،‬وغيرهم‪ .‬بالتالى فالتعامل مع األنماط من قبل مهندسي البرمجيات أم ار‬
‫ليس جديدا‪ ،‬بل هو استعارة لنفس المفهوم واستخدامه في مجال هندسة البرمجيات‪.‬‬
‫يهدف رصد أنماط البرمجيات ‪ software patterns‬إلى توفير مكتبة من أنماط‬
‫تصميم البرمجيات‪ ،‬والتى تساعد في تسريع عملية بناء البرمجيات عن طريق‬
‫‪43‬‬
‫إعادة إستخدام ‪ reuse‬األنماط السابقة‪ .‬وهذه اإلعادة ليست بالضرورة إعادة َحرفية‬
‫للبرمجيات السابقة في جميع تفاصيلها‪ ،‬بل إعادة إستخدام األنماط األساسية فيما‬
‫تضاف الحقا الجزئيات اإلبداعية التي تميز كل مبرمج‪ .‬عمليا‪ ،‬الحظ أنه هناك‬
‫تشابها كبي ار في برمجيات البريد اإللكترونى ‪ .Email‬فالنمط السائد لهذه البرامج‬
‫أنها تحتوى على مساحة لتحرير الرسائل‪ editor‬ومساحة لتحميل الملفات الملحقة‬
‫‪ attachments‬إضافة لروابط ‪ links‬الستعراض صفحة البريد الوارد‪ ،‬وصفحة‬
‫البريد الصادر وغيرها‪ .‬أي شخص ينوى تصميم وبناء برنامج بريد الكترونى جديد‬
‫البد وأن يستعين بهذه األنماط السائدة لبرامج البريد اإللكتروني‪ .‬وهذا ما يفسر‬
‫سهولة إستخدام أي برنامج بريد الكترونى ألول مرة من قبل مستخدمين إعتادوا‬
‫التعامل مع برامج بريد إكترونى أخرى‪ .‬ومما تقدم فإنه إضافة لتسريع إنتاج‬
‫البرمجيات فإن وجود مكتبة لألنماط البرمجية السائدة‪ ،‬تساهم في نقل خبرات‬
‫المبرمجين والمصممين المحترفين إلى المبرمجين والمصممين الجدد‪.‬‬
‫‪44‬‬
‫أسئلة الفصل االول‬
‫اختر االجابة الصحيحة قرين كل سؤال ؟‬
‫‪ -0‬تبرز الحاجة لوصف النظم المعلوماتية من أجل ‪.....‬‬
‫أ‪ -‬توفير قناة اتصال بين مهندس البرمجيات و المؤسسة المستفيدة‪.‬‬
‫ب‪ -‬تحليل النظام المعلوماتى قيد البناء‪.‬‬
‫ج‪ -‬إعداد نماذج مخططات وصف تجريدية تستخدم لفهم تفاصيل النظام‬
‫قيد البناء وآلية عمله‪.‬‬
‫د‪ -‬تسهيل مهمة المبرمجين من أجل ترجمة مخططات النظام إلى شفرة‬
‫برمجيات‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة ‪.‬‬
‫‪ -4‬تستخدم صيغ الوصف القياسية (لغات الوصف) للتغلب على مشكلة‪...‬‬
‫أ‪ -‬صعوبة التواصل بين الزبون ومهندسي االبرمجيات‪.‬‬
‫ب‪ -‬الغموض المصاحب للوصف السردى لتفاصيل النظم المعلوماتية قيد‬
‫البناء‪.‬‬
‫ج‪ -‬صعوبة قياس انتاجية مهندسي البرمجيات‪.‬‬
‫د‪ -‬بطء إنجاز التطبيقات البرمجية في مواعيدها المقررة‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة‪.‬‬
‫‪ -1‬يساهم تعدد مفردات ومخططات وصف النظم في ‪......‬‬
‫أ‪ -‬تعقيد عملية بناء النظم المعلوماتية‪.‬‬
‫ب‪ -‬دقة وصف مكونات النظم المعلوماتية من نواحيها المختلفة‪.‬‬
‫ج‪ -‬إرهاق مهندسي البرمجيات في أعمال وصف النظم‪.‬‬
‫‪45‬‬
‫د‪ -‬ليس لتعدد المفردات والنماذج أي تأثير على وصف وبناء النظم‬
‫ه‪ -‬جميع االجابات خاطئة ‪.‬‬
‫‪ -2‬توفر النماذج التجريدية لوصف النظم المعلوماتية (قيد البناء) ‪......‬‬
‫أ‪ -‬مجاال إلختبار ومراجعة النظم قبل إنجازها الفعلي‪.‬‬
‫ب‪ -‬وسيلة لتفادى ارتكاب أخطاء تصميم النظم قيد البناء‪.‬‬
‫ج‪ -‬وسيلة لتنظيم إنجاز االعمال من قبل فرق تطوير البرمجيات‪.‬‬
‫د‪ -‬قاموسا مرجعيا لجميع اعضاء فرق تطوير البرمجيات‪.‬‬
‫ه‪ -‬جميع االجابات صحيحة‪.‬‬
‫‪ -1‬يمثل الكائن ‪.... object‬‬
‫أ‪ -‬اى عنصر بيانات يتعلق بمجال التطبيق (النظام) قيد التحليل‪.‬‬
‫ب‪ -‬اى عنصر بيانات له هوية وسلوك مستقل ضمن بيئة النظام‪.‬‬
‫ج‪ -‬اى مستند من مستندات النظام الحالى والمستهدف ميكنته‪.‬‬
‫د‪ -‬اى كائن بشرى يتعلق بالنظام قيد البناء‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة ‪.‬‬
‫‪ -2‬أحد العناصر التالية ال ينطق عليه مفهوم الكائن ‪ object‬ضمن المنهج‬
‫الشيئي لتمثيل البرمجيات‪.‬‬
‫أ‪ -‬زبون‪.‬‬
‫ب‪ -‬فاتورة‪.‬‬
‫ج‪ -‬سلعة‪.‬‬
‫د‪ -‬قلم‪.‬‬
‫ه‪ُ -‬م َوِرد (مزود)‪.‬‬
‫‪ -1‬الرسالة ‪ message‬هي عبارة عن ‪.....‬‬
‫أ‪ -‬عملية تمثل سلوكا معينا ألحد كائنات النظام‪.‬‬
‫‪46‬‬
‫ب‪ -‬وحدة بناء النظم الشيئية‪.‬‬
‫ج‪ -‬ارسال معلومة من كائن ‪ object‬آلخر‪.‬‬
‫د‪ -‬طلب خدمة يؤديها كائن ‪ object‬لصالح كائن آخر‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة ‪.‬‬
‫‪ -3‬التصنيف ‪ class‬هو عبارة عن ‪.......‬‬
‫أ‪ -‬مجموعة من الكائنات التي تربطها عالقة "وراثة"‪.‬‬
‫ب‪ -‬وصف تجريدى عام لمجموعة من الكائنات التي تشترك في بعض‬
‫الخصائص والسلوك‪.‬‬
‫ج‪ -‬وصف تجريدى عام لمجموعة من الكائنات التي تستدعى بعضها‬
‫البعض‪.‬‬
‫د‪ -‬اصناف البيانات التي لها سلوك وهوية مميزة‪.‬‬
‫ه‪ -‬تصنيف الكائنات ‪ objects‬وفقا لوظائفها‪.‬‬
‫‪ -5‬بيانات احد الخيارات التالية ال يمكن تمثيلها من خالل تصنيف ذو مستوى‬
‫تجريد أعلى‪.‬‬
‫أ‪ -‬فاتورة – كشف حساب – كشف طلبية‪.‬‬
‫ب‪ -‬سيارة – جرار – شاحنة‪.‬‬
‫ج‪ -‬مدرسة – روضة – جامعة‪.‬‬
‫د‪ -‬كرسي – فصل – تلميذ‪.‬‬
‫ه‪ -‬جميع االجابات صحيحة‪.‬‬
‫‪ -01‬يمثل التغليف ‪ encapsulation‬عملية ‪.......‬‬
‫أ‪ -‬تمثيل الكائنات ذات العالقة على هيئة مغلفات ذات مستوى تجريد‬
‫اعلى‪.‬‬
‫‪47‬‬
‫ب‪ -‬تجميع الكائنات ذات العالقة على هيئة مغلفات تُدعى تصانيف‬
‫‪.classes‬‬
‫ج‪ -‬إعداد توليفة من البيانات والعمليات التي تُجرى عليها والتعامل معها‬
‫وحدة واحدة‪.‬‬
‫د‪ -‬إعداد كبسوالت (مغلفات) برمجية تحوى بداخلها تراكيب بيانات النظام‬
‫فقط‪.‬‬
‫ه‪ -‬جميع االجابات صحيحة‪.‬‬
‫‪ -00‬تتمثل خاصية إخفاء المعلومات ‪ information hiding‬في ‪.....‬‬
‫أ‪ -‬استخدام خوارزميات التشفير إلخفاء الطبيعة الحقيقية لبيانات النظام‪.‬‬
‫ب‪ -‬اخفاء تفاصيل بناء النظام عن الزبون‪.‬‬
‫ج‪ -‬حجب التفاصيل الداخلية للكائن البرمجي‬
‫وحصر التعامل مع‬
‫الكائنات األخرى بواسطة الرسائل ‪ message‬المخولة‪.‬‬
‫د‪ -‬حجب سلوك (عمليات) الكائنات عن التصانيف األخرى‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة‪.‬‬
‫‪ -04‬تستخدم خاصية الوراثة في ‪......‬‬
‫أ‪ -‬صياغة الرسائل ‪ messages‬الموجهة من كائن آلخر‪.‬‬
‫ب‪ -‬تفادى مشكلة تكرار بيانات كائنات النظام المتشابهة‪.‬‬
‫ج‪ -‬ضمان استجابة كائن ما لرسالة ‪ message‬مرسلة من كائن آخر‪.‬‬
‫د‪ -‬الكشف عن األخطاء التنفيذية للكائنات‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة ‪.‬‬
‫‪ -01‬تستخدم خاصية التماسك ‪..... cohesion‬‬
‫أ‪ -‬لتقدير درجة تعقيد ‪ complexity‬البنية الداخلية للكائن أو التصنيف‬
‫البرمجي‪.‬‬
‫‪48‬‬
‫ب‪ -‬لتقدير كثافة الرسائل ‪ messages‬الموجهة من كائن ما إلى كائنات‬
‫النظام األخرى‪.‬‬
‫ج‪ -‬لمعرفة معدل األخطاء الداخلية التي تحتويها الدوال الداخلية للكائن‬
‫البرمجى‪.‬‬
‫د‪ -‬لتحقيق خاصية إخفاء البيانات والسلوك للكائنات والتصانيف‬
‫البرمجية‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة ‪.‬‬
‫‪ -02‬تستخدم خاصية االرتباط ‪..... coupling‬‬
‫أ‪ -‬لتقدير درجة تعقيد ‪ complexity‬البنية الداخلية للكائن أو التصنيف‬
‫البرمجى‪.‬‬
‫ب‪ -‬لتقدير كثافة الرسائل ‪ messages‬الموجهة من كائن ما إلى كائنات‬
‫النظام األخرى ذات العالقة‪.‬‬
‫ج‪ -‬لمعرفة معدل األخطاء الداخلية التي تحتويها الدوال الداخلية للكائن‬
‫البرمجى‪.‬‬
‫د‪ -‬لتحقيق خاصية اخفاء البيانات والسلوك للكائنات والتصانيف‬
‫البرمجية‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة ‪.‬‬
‫‪ -01‬تساهم خاصية تعدد األشكال ‪ Polymorphism‬في ‪.......‬‬
‫أ‪ -‬بناء مكونات برمجية متعددة المستويات الوراثية‪.‬‬
‫ب‪ -‬بناء دالة برمجية متعددة السلوك (عمليات)‪.‬‬
‫ج‪ -‬بناء مكونات برمجية متعددة التراكيب البيانية‪.‬‬
‫د‪ -‬بناء دالة برمجية متعدد المعامالت ‪.parameters‬‬
‫ه‪ -‬تسهيل صيانة البرمجيات الشيئية عبر إعتمادها خاصية الوراثة‪.‬‬
‫‪49‬‬
‫الفصل الثانى‪ :‬وصف عام للغة الوصف ‪UML‬‬
‫‪ 0.2‬تمهيد‬
‫تعتبر لغة التوصيف الموحدة ‪ ،UML‬لغة الوصف األحدث واألشهر في مجال‬
‫وصف وتطوير النظم المعلوماتية‪ ،‬بل يمكن وصفها بأنها لغة الوصف القياسية‬
‫عالميا‪ .‬وبالتالى أضحى إتقان لغة ‪ UML‬من المهارات األساسية لكل مهندس‬
‫برمجيات الحاسوب‪ ،‬وكأي لغة بشرية‪ ،‬أو لغة برمجية‪ ،‬فإن لغة ‪ UML‬تتكون من‬
‫مجموعة من المفردات‪ ،‬والقواعد‪ ،‬والمخططات‪ ،‬التي يتم من خاللها وصف أي‬
‫نظام معلوماتي‪ .‬وقدرة لغة ‪ UML‬على الوصف ال تقتصر فقط على وصف‬
‫النظم المعلوماتية المدعمة حاسوبيا‪ ،‬بل تتعدى ذلك إلى وصف أي نظام هندسي‬
‫أو اقتصادي أو اجتماعي أو غيره‪.‬‬
‫قبل بروز لغة ‪) UML‬أواخر الثمانيات وحتى أوائل التسعينيات(‪ ،‬كانت هناك‬
‫العديد من لغات وصف و نمذجة النظم المعلوماتية‪ .‬بل إن صناعة البرمجيات‬
‫آنذاك كانت شهدت ما ُسمى بحرب اللغات و الطرق الوصفية‪ ،‬وذلك نظ ار للعدد‬
‫الهائل لطرق وصف وبناء البرمجيات المختلفة‪ ،‬والتى تتباين في طرائقها و‬
‫المخططات الوصفية التي تستعين بها‪ .‬ولكن ما يميز لغة ‪ UML‬هو بروزها‬
‫تتويجا إلسهامات رواد أشهر ثالثة طرق لوصف النظم المعلوماتية‪ .‬وتتمثل هذه‬
‫الطرق الثالث فى‪:‬‬
‫‪ -0‬طريقة ‪ Booch‬للمؤلف ‪Grady Booch‬‬
‫‪ -4‬طريقة ‪ Objectory‬للمؤلف ‪Ian Jacobson‬‬
‫‪50‬‬
‫‪ -1‬طريقة )‪ Object Modeling Technology (OMT‬للمؤلف ‪Jim‬‬
‫‪.Rambaugh‬‬
‫للوصول إلى طريقة معيارية لوصف ونمذجة البرمجيات‪ ،‬فقد تضافرت جهود‬
‫المؤلفين الثالثة للخروج بطريقة واحدة‪ ،‬يتم فيها األخذ باإلعتبار المزايا والعيوب‬
‫التي تضمنتها كل طريقة وصفية‪ .‬لقد كانت حصيلة هذه الجهود هو الخروج بما‬
‫ُسمى بلغة وصف البرمجيات الموحدة ‪ .UML‬منذ ذاك الحين‪ ،‬صارت لغة‬
‫‪ UML‬هي لغة الوصف المرئية المعتمدة لتحليل وتصميم النظم الشيئية من قبل‬
‫عنى بوضع‬
‫مؤسسة )‪ Object Management Group (OMG‬والتى تُ َ‬
‫(انظر‬
‫البرمجيات‬
‫بصناعة‬
‫الخاصة‬
‫والمعايير‬
‫المقاييس‬
‫‪.)http://www.omg.org/‬‬
‫‪ 1.2‬مخططات ‪UML‬‬
‫رغم أن ‪ UML‬توصف إصطالحا بأنها لغة لوصف أنظمة الحاسوب‪ ،‬كلغة‬
‫‪ C++‬أو ‪ JAVA‬وغيرها‪ .‬إال أنها تختلف من حيث تميزها في استخدام الرسوم‪،‬‬
‫أو األشكال الهندسية لوصف النظم‪ ،‬عوضا عن استخدام النصوص الرقمية‬
‫والحرفية فقط كما هو الحال في لغات البرمجة االعتيادية‪ .‬لذلك تُـشكل األشكال‬
‫ما يسميه كيمبل)‪ Kimmel(2005‬بالنحو المرئى ‪visual‬‬
‫والرموز‬
‫‪ ،grammar‬وذلك خالفا للقواعد النحوية المعتادة التي تعتمد على النص فقط‪.‬‬
‫وقياسا على عدم ضرورة إلمام أي شخص بجميع قواعد النحو العربي كي يتمكن‬
‫كتابة تقرير جيد‪ ،‬فكذلك الحال بالنسبة لتعلم لغة ‪ .UML‬فنظ ار لشمولية التطبيقات‬
‫‪51‬‬
‫المختلفة لهذه اللغة‪ ،‬فإنها تحتوى على العديد من القواعد‪ ،‬ومخططات التمثيل‪،‬‬
‫التي ليس من الواجب االستعانة بها جميعا لتمثيل أي نظام‪ .‬بل يخضع استخدام‬
‫مخططات لغة ‪ UML‬إلى متطلبات النظام قيد االنجاز‪.‬‬
‫مسألة االستعانة بالرسوم والصور في وصف األشياء‪ ،‬هي لمجرد تقريب فهم المراد‬
‫وصفه‪ ،‬و بأقل جهد ذهنى ممكن‪ .‬فوفقا للمثل الصينى القديم‪ :‬الصورة أكثر تعبي ار‬
‫من الوصف السردى بآالف الكلمات‪ ،‬كذلك الحال بالنسبة للغة ‪ ،UML‬فهى‬
‫تعتمد إعتمادا أساسيا على األشكال الهندسية في وصف النظم‪ ،‬كطريقة أدق تعبي ار‬
‫و أيسر للفهم من ِقبل أعضاء فرق تطوير البرمجيات من ناحية‪ ،‬وكذلك كوسيلة‬
‫للتحاور مع زبائن النظم المعلوماتية من ناحية أخرى‪ ،‬فالزبون العادي غالبا ما‬
‫يجهل أو يغفل العديد من المصطلحات التقنية المختلفة‪.‬‬
‫‪ 4.4‬تعريف النموذج ‪Model‬‬
‫النموذج هو عبارة عن مجموعة من المخططات ‪ ،diagrams‬ذات األشكال‬
‫الهندسية‪ ،‬والصور‪ ،‬التي تحمل دالالت وصفية محددة‪ .‬وتماثل هذه األشكال‬
‫والصور في وظيفتها الحروف االبجدية الى لغة بشرية‪ .‬فبدال من االستعانة‬
‫بالوصف السردى للنظام‪ ،‬يتم إنجاز عملية الوصف عبر األشكال‪ ،‬والصور‪،‬‬
‫و هي أسرع استيعابا‪ ،‬و أيسر للفهم‪ ،‬مقارنة بالوصف السردى‪ ،‬الذي قد يتجاوز‬
‫العديد من الصفحات‪ ،‬هذا باإلضافة إلى الغموض الذي قد يصاحب النصوص‬
‫السردية عموما‪.‬‬
‫‪52‬‬
‫مثلما تمثل الجملة‪ ،‬أو العبارة‪ ،‬وحدة البناء األساسية لكتابة النصوص في اللغات‬
‫البشرية‪ ،‬فإن مخططات لغة ‪ UML‬المختلفة‪ ،‬تُمثل وحدة بناء أي نموذج ‪model‬‬
‫لوصف مخرجات عمليات تحليل وتصميم النظم المعلوماتية‪ .‬والنموذج ‪Model‬‬
‫هو عبارة عن مخطط ‪ diagram‬أو مجموعة من المخططات الوصفية التي‬
‫تصف أي عملية أو وظيفة من وظائف النظام المعلوماتى قيد البناء‪.‬‬
‫مشهد الزبون‬
‫‪Use Case diagrams‬‬
‫البنى األساسية‬
‫مشهد ُ‬
‫‪Class Diagrams‬‬
‫‪Object diagram‬‬
‫‪Component Diagrams‬‬
‫‪Sequence and Collaboration‬‬
‫‪Diagrams‬‬
‫‪State chart Diagrams‬‬
‫‪Component diagram‬‬
‫‪Packages‬‬
‫مشهد تفاصيل وظائف النظام‬
‫واساليب التنفيذ‬
‫مشهد التشغيل الفعلى‬
‫‪Deployment Diagrams‬‬
‫الشكل )‪ : )1-2‬المخطط العام لمخططات لغة ‪ UML‬والمشاهد التي تدعمها‪.‬‬
‫تقوم لغة ‪ UML‬بوصف النظم عبر إستخدام مخططات عديدة كل منها يقوم‬
‫بوصف وتمثيل النظام من نواحي معينة‪ .‬فكل نظام يمكن وصفه من مشاهد أو‬
‫‪53‬‬
‫زوايا متعددة وكل مشهد أو زاوية ربما يحتاج إلى صيغة معينة لوصفه‪ .‬ويمكن‬
‫إجمال مخططات لغة ‪ UML‬و اغراضها بالشكل )‪ .)1-2‬الحظ انه هناك‬
‫العديد من المخططات التي توفرها لغة ‪ UML‬وهى تختلف حول أي من نواحي‬
‫النظام التي يقوم بوصفها كل مخطط‪.‬‬
‫الشكل (‪ :)4-4‬الوصف المختلف للفيل من قبل جماعة العميان‪.‬‬
‫حول سبب تعدد مخططات لغة الوصف لغة ‪ UML‬يمكن االستعانة بقصة الفيل‬
‫وجماعة العميان‪ُ .‬يحكى أنه كان هناك مجموعة من العميان‪ ،‬يسيرون وسط‬
‫الغابة‪ ،‬وفجأة تدحرجوا من فوق هضبة‪ ،‬و وجد كل منهم نفسه معلقا بناحية من‬
‫نواحي كائن ضخم سقطوا فوقه وعلى نواحيه(انظر الشكل ‪ .)2-2‬بدأ الجميع‬
‫بمحاولة التعرف على الكائن الضخم من خالل تحسس مواضعهم‪ ،‬قال الذي‬
‫‪54‬‬
‫إعتلى ظهر الفيل إنه مجرد جبل‪ ،‬وقال آخر كان ممسكا بخرطوم الفيل‪ ،‬إنها أفعى‬
‫ضخمة‪ ،‬بينما تكهن آخر (كان ممسكا بفخذ الفيل) بأنه يمسك بجذع شجرة‪.‬‬
‫وهكذا فكل واحد منهم رمى بتكهن معين‪ ،‬دون أن يميز أي واحد منهم أنه فيل‪ .‬من‬
‫المالحظ أن كل شخص إستطاع أن يعبر عن تصوره عن الكائن دون أن يميزه‬
‫على وجه الدقة‪ .‬الدرس المستفاد هاهنا هو أنه لوصف أى شئ على وجه الدقة‪،‬‬
‫البد من معرفة نواحيه المختلفة كلها‪ .‬ولكى يتم ذلك البد من االستعانة بلغة‬
‫وصف تصف المشاهد أو الزوايا المختلفة للكائن‪ .‬الكائن فى هذا المثال هو النظام‬
‫إصطالحا‪ ،‬فمن أجل االلمان الجيد بنظام ما‪ ،‬البد من النظر إليه ووصفه من‬
‫جميع الزوايا‪.‬‬
‫الفقرات التالية تعرض مختص ار لكل مخطط وصفي من مخططات ‪ ،UML‬بينما‬
‫سيتم تفصيل مكوناتها في فصول الحقة‪.‬‬
‫‪ 1.2‬مخطط وصف وقائع اإلستخدام ‪Use Case diagrams‬‬
‫تستخدم مخططات وقائع اإلستخدام ‪ Use Case‬في رسم نموذج وقائع‬
‫اإلستخدام للنظام قيد التحليل‪ .‬وهى تقوم بوصف وتعريف الوظائف‪/‬الخدمات‬
‫األساسية للنظام المعلوماتى‪ .‬مخططات وقائع اإلستخدام‬
‫ال تقوم بوصف‬
‫التفاصيل الدقيقة لوظائف النظام بل تكتفى فقط بعناوين الوظائف‪/‬الخدمات مع‬
‫بيان المنفذين لها أو المستفيذين منها‪ .‬ويرمز ألي وظيفة بشكل بيضاوى بينما‬
‫يرمز للمنفذ‬
‫أو المستفيد من العملية برسم كاريكاتورى لكائن بشرى كما هو‬
‫مبين بالشكل (‪.)3-2‬‬
‫‪55‬‬
‫طلب عناوين جديدة من ناشرين‬
‫إستعارة كتاب‬
‫موظف‬
‫مكتبة‬
‫مستعير‬
‫إسترجاع كتاب معار‬
‫الشكل (‪ :)1–2‬جانبا من نموذج وصف وقائع اإلستخدام ضمن نظام مكتبة جامعية‪.‬‬
‫الشكل (‪ )3-2‬يبين مثال مختصر لمخطط وقائع اإلستخدام الخاص بنظام‬
‫معلومات مكتبة جامعية‪ .‬الحظ ان المخطط يورد فقط عناوين الوظائف‪/‬الخدمات‬
‫التي يمكن أدائها عبر النظام المعنى وكذلك من هو الفاعل أو المستفيد من أي‬
‫خدمة من خدمات المكتبة الجامعية‪.‬‬
‫‪ 4.2‬مخطط وصف تبدل الحالة ‪Statechart Diagrams‬‬
‫تستخدم مخططات وصف تبدل الحالة في رصد تغير حالة أي كائن برمجي من‬
‫صورة ألخرى‪ ،‬ويحدث هذا التغير إستجابة ألى رسالة ‪ message‬كطلب تنفيذ‬
‫عملية أو خدمة معينة‪ .‬فمن المعلوم أن أي رسالة إنما هي طلب ألداء أي عملية‪،‬‬
‫‪56‬‬
‫و أى عملية قد ينجم عنها تغيير حالة الكائن المعنى من صفة ألخرى‪ .‬فمثال من‬
‫خالل نظام االعارة بمكتبة جامعية‪ ،‬ستتغير حالة الكائن ]كتاب[ من صفة متوفر‬
‫إلى صفة معار إثر استالم رسالة بطلب تنفيذ عملية إعارة نسخة كتاب)(‪ .‬كذلك‬
‫تنقل صفة الكتاب من صفة معار إلى صفة متوفر إثر تنفيذ عملية‬
‫استرجاع كتب)( من قبل احد المشتركين بالمكتبة‪ .‬الشكل (‪ )4-2‬يبين مخطط‬
‫وصف تبدل حالة الكائن ]كتاب[ من حالة ألخرى مع بيان الرسائل ‪messages‬‬
‫التي تساهم في تشكل كل حالة من حاالت نسخة الكتاب‪.‬‬
‫رسالة طلب استرجاع كتاب‬
‫متوفر على الرف‬
‫)(‪Return_book‬‬
‫معار‬
‫)(‪Borrow_book‬‬
‫رسالة طلب إعارة كتاب‬
‫الشكل (‪ :)4-2‬مخطط وصف تبدل الحالة للكائن كتاب‪.‬‬
‫‪ 5.2‬مخطط وصف المهام ‪Activity Diagrams‬‬
‫تستخدم مخططات وصف المهام ‪ Activity diagrams‬في وصف خطوات تنفيذ‬
‫أي مهمة مدرجة ضمن مخططات وقائع االستخدام‪ .‬ووظيفتها مشابهة لوظيفة‬
‫الخرائط اإلنسيابية ‪ flowcharts‬التقليدية‪ .‬فهى تبين أوال خطوات إنجاز أي‬
‫عملية باإلضافة إلى تزامن تنفيذ هذه الخطوات‪ .‬قد يتم تنفيذ بعض الخطوات‬
‫‪57‬‬
‫بالتوالى و أخرى بالتوازى‪ ،‬وذلك وفقا لتسلسل حل المسألة قيد الوصف‪.‬‬
‫الشكل (‪ )0-2‬يبين مخطط وصف مهمة استرجاع كتب)( من قبل موظف‬
‫مكتبة جامعية‪.‬‬
‫إستالم نسخة كتاب مسترجعة‬
‫]تجاوز مد االعار [‬
‫طباعة إيصال نقذى‬
‫حساب الغرامة المقرر‬
‫تصنيف شخص‬
‫تعديل بيانات الكتاب ووضعه على الرف‬
‫إنتقل إلى الزبون التالى‬
‫الشكل (‪ :)4-2‬مخطط وصف عملية استرجاع الكتب من قبل موظف مكتبة‪.‬‬
‫‪58‬‬
‫‪ 6.2‬مخطط التصانيف ‪Class Diagrams‬‬
‫يستخدم مخطط التصانيف في وصف البنية األساسية الثابتة للنظام ‪static‬‬
‫‪ ،view‬هذا المخطط ال يتعرض لتفاصيل سلوك ‪ behavior‬النظام‪ ،‬من عمليات‬
‫ووظائف وغيرها‪ .‬فهو تحديدا يقوم بتعريف تصانيف ‪ classes‬البيانات األساسية‬
‫التي يتضمنها النظام المقصود‪ ،‬فكل تصنيف ُيمثل قالبا بيانيا يمثل العينات‬
‫المختلفة لبيانات النظام قيد الوصف‪ .‬فإثر فرز تصانيف النظام تتم االستعانة بهذا‬
‫المخطط لتحديد عالقات التعاون فيما بين تصانيف النظام‪ ،‬وذلك من أجل إنجاز‬
‫الخدمات المتوقعة من النظام‪.‬‬
‫كتيب ملكية‬
‫*‪1..‬‬
‫‪1‬‬
‫لها‬
‫يمتلك‬
‫‪1‬‬
‫سائق‬
‫‪1‬‬
‫‪1‬‬
‫يملك‬
‫*‪1..‬‬
‫شاحنة‬
‫مركبة‬
‫سيارة‬
‫دراجة نارية‬
‫الشكل (‪ :)6-2‬شكل يمثل جزءامن مخطط التصانيف ضمن نظام معلومات‬
‫المركبات اآللية التابعة لمصلحة المرور والتراخيص‪.‬‬
‫‪59‬‬
‫عند تعريف أي تصنيف‪ ،‬يتم تحديد بياناته األساسية‪ ،‬والمهام التي يساهم في‬
‫إنجازها‪ .‬إضافة إلى ذلك فمخطط التصانيف يقوم أيضا بتبيان العالقات‬
‫‪ relationship‬بين التصانيف المختلفة للنظام المستهدف‪ .‬فإلنجاز عملية إعارة‬
‫كتاب من مكتبة جامعية‪ ،‬الحظ أن هذه العملية هي تفاعل يتم بين أي عضو‬
‫بالمكتبة وبين أي من الكتب القابلة لإلعارة‪ .‬لذلك ُيفهم أنه هناك عالقة تربط بين‬
‫التصنيف ]مستعير[ والتصنيف ]كتاب[‪ .‬الشكل (‪ )6-2‬يبين مثاال مصغ ار لمخطط‬
‫تصانيف نظام معلومات المركبات اآللية التابع لمصلحة المرور وتراخيص القيادة‪.‬‬
‫‪ 7.2‬مخطط التسلسل ‪Sequence Diagrams‬‬
‫يستخدم مخطط التسلسل في وصف سلوك أو عمليات النظام عبر وظائفه‬
‫المختلفة‪ .‬وتحديدا يقوم مخطط التسلسل بوصف تسلسل تنفيذ الخطوات الداخلة‬
‫في إجراء أي خدمة من خدمات النظام‪ .‬لذلك فكل واقعة استخدام‪ ،‬يتم وصف‬
‫محتواها باستخدام مخطط تسلسل‪ ،‬يصف خطوات تنفيذ العملية الممثلة بواقعة‬
‫اإلستخدام المعنية‪ .‬ويشمل هذا المخطط إيراد جميع الكائنات ‪ ،objects‬أو‬
‫التصانيف ‪ classes‬المسئولة عن تنفيذ خدمات معينة‪ .‬ويتم التخاطب بين‬
‫الكائنات المختلفة للنظام‪ ،‬بواسطة الرسائل ‪ ، messages‬حيث تُمثَل كل رسالة‬
‫بواسطة روتين يتم استدعائه لتنفيذ عملية معينة‪ .‬الشكل (‪ )1-4‬يبين مخطط‬
‫تسلسل مختصر لوصف تسلسل خطوات عملية استعارة كتاب‪.‬‬
‫‪60‬‬
‫كتاب‬
‫واجهة مستخدم‬
‫>>‪<<UI‬‬
‫مشتركين‬
‫مستخدم‬
‫طلب إعارة)(‬
‫أكشف عن العضوية) )‬
‫] شروط اإلعارة مستوفاة[‬
‫إنجز عملية االعارة)(‬
‫تحديث قيد اإلعارة للمستعير)(‬
‫الشكل (‪ :)8-2‬شكل يمثل مقطع مختصر لمخطط النسلسل لعملية إستعار كتاب‪.‬‬
‫‪ 8.2‬مخطط وصف المكونات البرمجية ‪Component diagrams‬‬
‫لقد اختلفت طرق البرمجة وتطورت بشكل كبير‪ ،‬بدءا بأسلوب البرمجية المتتالية‪،‬‬
‫حيث يتكون البرنامج من مئات أو آالف السطور المتتالية‪ ،‬من أوامر أي لغة‬
‫برمجة‪ ،‬إلى أسلوب البرمجية الهيكلية‪ ،‬حيث يقسم البرنامج إلى مجموعة من‬
‫الروتينات المنفصلة‪ ،‬والتى يستدعى بعضها بعضا وفقا لتسلس لخوارزمية الحل‪.‬‬
‫ومن أجل تبسيط و تسريع عملية برمجة النظم المعلوماتية‪ ،‬فإن األسلوب االحدث‬
‫لكتابة البرمجيات‪ ،‬يعتمد على‬
‫اإلستفادة من المكونات المتشابهة للبرمجيات‬
‫السابقة‪ ،‬واعادة استخدامها في بناء النظم الجديدة‪ .‬و ألن المكونات البرمجية‬
‫المعاد استخدامها كانت قد اختبرت من قبل في نظم أخرى فبالتالى تُعد نسبة‬
‫‪61‬‬
‫ظهور األخطاء البرمجية أقل في البرمجيات المعتمدة على إعادة اإلستخدام‬
‫مقارنة ببرمجيات أخرى ُبنِيت من الصفر‪.‬‬
‫يختلف حجم وتعقيد المكونات البرمجية وفقا لوظائفها‪ ،‬فهي قد تتخذ شكل تصنيف‬
‫‪ ،class‬أو مجموعة تصانيف (تمثل مكونا برمجيا واحدا)‪ .‬لتحقيق مبدأ إعادة‬
‫استخدام المكونات البرمجية‪ ،‬فكل مكون برمجي ‪ component‬يمكن أن يكون‬
‫مزود خدمة ‪ ،provider‬أو مستفيد من خدمات مكونات برمجية أخرى‪ ،‬ولذلك‬
‫فكل مكون برمجي يجب أن يكون له منافذ استقبال‪ ،‬أو قنوات تزويد‪ ،‬وذلك‬
‫على النحو المبين بالشكل (‪.)3-4‬‬
‫قنوات تزويد خدمة‬
‫>>‪<<component‬‬
‫دفع غرامة‬
‫قنوات استقبال خدمة‬
‫الشكل (‪ :)3-4‬شكل ُيمثل هيئة الجزيء البرمجي‪.‬‬
‫‪62‬‬
‫االنماط ووسم التصانيف الشائعة ‪Stereotypes‬‬
‫لغويا أي شئ يتكرر حدوثه ُيطلق عليه "نمط"‪ ،‬وعند شيوع نمط معين‪ ،‬يمكن‬
‫التعبير عنه برمز معين بدل تعريفه لفظيا‪ .،‬ويطلق على هذا الرمز مصطلح‬
‫"وسم"‪ .‬ويعتبر استخدام الوسم وسيلة شائعة اإلستخدام من قبل البشر عموما‪ .‬فمثال‬
‫لو شاهدت رسما كاريكاتوريا في صحيفة أجنبية‪ ،‬وضمن المشهد الكاريكاتورى‬
‫شخص يرتدى عقال و غترة على رأسه‪ ،‬من المؤكد ان ذلك يشير إلى شخصية‬
‫عربية‪ .‬ففي الغرب يستخدمون رمز الغترة والعقال للداللة على العرب‪ .‬في هذه‬
‫الحالة ُيطلق على الغترة والعقال لفظ وسم ‪ stereotype‬لنمط شائع‪ .‬تستغل لغة‬
‫‪ UML‬هذه الخاصية‪ ،‬عبر توفير مجموعة الوسوم‪ ،‬أو األنماط الشائعة في‬
‫الوصف‬
‫الرمزي‬
‫لمكونات‬
‫المخططات‬
‫المختلفة‪،‬‬
‫مثل‬
‫التصانيف‪،‬‬
‫و المكونات البرمجية‪ ،‬و وقائع اإلستخدام وغيرها‪ .‬فكل تصنيف شائع يوسم بوسم‬
‫معين مثل الوسم >>‪<<interface‬‬
‫والذى يعنى ان التصنيف المعني يمثل‬
‫شاشة تحاور بين المستخدم والنظام‪.‬‬
‫هناك أيضا نوعان من التصانيف الشائعة ‪ stereotypes‬و التي تستخدم في‬
‫تبيان عالقة التوريث خاصة بين مكونات وقائع اإلستخدام ‪ ،Use Case‬هذان‬
‫التصنيفان يطلق عليهما الوسم >>‪ <<include‬والوسم >>‪ ،<<extends‬والتى‬
‫سيتم التطرق لها الحقا‪.‬‬
‫‪63‬‬
‫شخص‬
‫يشمل الطالب النظامى‬
‫والمنتسب‬
‫مريض‬
‫طالب‬
‫موظف‬
‫الشكل )‪ :)9-2‬نموذج الستخدام الهوامش التوضيحية اوالتعليقات ضمن مخطط‬
‫تصانيف‪.‬‬
‫إيراد الهوامش و التعليقات ضمن المخططات‬
‫يعتبر تضمين الهوامش والمالحظات التعريفية حول مكونات أي مخطط أم ار‬
‫مستحسنا‪ ،‬وذلك لتيسير فهم المكونات التي قد يصاحبها بعض الغموض‪ ،‬أو تلك‬
‫المعرضة لسوء الفهم‪ .‬بالتالى فهوامش لغة ‪ ،UML‬تقوم بنفس وظيفة أسطر‬
‫المالحظات‪ ،‬التي يتم تضمينها في شفرة لغات البرمجة (مثل لغات ‪ C‬و‪Pascal‬‬
‫وغيرها) لشرح مقاطع معينة في شفرة البرامج‪ .‬يتم إيراد الهوامش ضمن مستطيل‬
‫مظلل أحد زواياه معكوفة وذلك على النحو المبين بالشكل (‪ .)9-2‬فمن خالل‬
‫الشكل‪ ،‬الحظ الهامش المتعلق بالتصنيف ]طالب[‪ ،‬حيث يشرح هذا الهامش من‬
‫هو المشمول بتعريف التصنيف‪ .‬ورغم الفائدة الكبيرة إليراد الهوامش‪ ،‬إال انه ال‬
‫ينصح باللجوء اليها إال فيما يلزم التنبيه له‪ ،‬فإيراد العديد من الهوامش بمخططات‬
‫‪ UML‬قد يساهم في زيادة حجمها ومن ثم صعوبة تتبعها‪.‬‬
‫‪64‬‬
‫عدد المواد =‪11‬‬
‫بكالوريوس علم الحاسوب‬
‫‪*..0‬‬
‫‪0‬‬
‫مادة‬
‫الشكل (‪ :)01-4‬نموذج تمثيل قيد تصنيف معين‪.‬‬
‫القيود ‪Constraints‬‬
‫تستخدم القيود إليراد أي شروط مصاحبة إلدراج أي عنصر من عناصر‬
‫مخططات ‪ UML‬المختلفة‪ .‬فمثال لو وضع شرط وجوب اجتياز خمسون مادة‬
‫للحصول على درجة بكالوريس علم الحاسوب‪ ،‬عندها يتم إبراز ذلك على‬
‫النحو المبين بالشكل (‪.)01-2‬‬
‫مدى قراءة البيانات ‪ Visibility‬وحمايتها ‪Protection‬‬
‫عادة ما تحتوى التصانيف ‪ classes‬على بيانات ووظائف تختلف في سماحية‬
‫الوصول إليها‪ ،‬وهذا يتمشى مع مفهوم إخفاء البيانات‪ ،‬الذي ينادى به المفهوم‬
‫الشيئي‪ .‬وتصنف مكونات أي كائن ‪ object‬على أنها إما محمية ‪ ،protected‬أو‬
‫عامة ‪ ،public‬أو خاصة ‪ .private‬البيانات العامة يمكن الوصول إليها من قبل‬
‫أي كائن‪ ،‬له القدرة على استدعاء الكائن المستهدف‪ .‬أما البيانات المحمية‪ ،‬فهى‬
‫‪65‬‬
‫ما يتعلق تحديدا بلغة البرمجة الشيئية المختارة‪ ،‬بينما تمثل البيانات الخاصة تلك‬
‫التي يمكن فقط الوصول إليها من قبل كائنات تنتمى لنفس جنس التصنيف‬
‫‪ .class‬تستخدم ‪ UML‬الرموز ‪#‬‬
‫أو ‪ +‬أو – للداللة على سماحية الوصول‬
‫لبيانات و وظائف الكائن قيد المعالجة‪ .‬الجدول التالى يبين استخدام هذه الرموز‪.‬‬
‫جدول ‪ :0-4‬رموز سماحية استغالل بيانات التصانيف‬
‫سماحية الوصول‬
‫الرمز‬
‫‪#‬‬
‫بيانات محمية ‪protected‬‬
‫‪+‬‬
‫بيانات عامة ‪public‬‬
‫_‬
‫بيانات خاصة ‪private‬‬
‫‪66‬‬
‫أسئلة الفصل الثانى‬
‫اختر االجابة الصحيحة قرين كل سؤال ؟‬
‫‪ -3‬مصطلح ‪ UML‬هو اختصار لـ ‪.....‬‬
‫أ‪Unified Molding Language -‬‬
‫ب‪Unified Modeling Language -‬‬
‫ج‪United Modeling Language -‬‬
‫د‪Universal Modeling Language -‬‬
‫ه‪ -‬جميع االجابات خاطئة‪.‬‬
‫‪ .4‬تتكون لغة ‪ UML‬من ‪......‬‬
‫أ‪ -‬مجموعة من القواعد واألشكال التي يتم من خاللها وصف أي نظام‬
‫معلوماتي قيد البناء‪.‬‬
‫ب‪ -‬مجموعة من األشكال الهندسية القابلة لترجمتها إلى شفرة برامج بأحدى‬
‫لغات الحاسوب‪.‬‬
‫ج‪ -‬صيغ و مفردات وأشكال للتعامل بين محللي النظم المعلوماتية قيد‬
‫البناء‪.‬‬
‫د‪ -‬مجموعة من المخططات تشكل جزءامن وثائق النظام المعلوماتي حال‬
‫االنتهاء من انجازه‪.‬‬
‫ه‪ -‬جميع االجابات صحيحة‪.‬‬
‫‪ .1‬تعتبر ‪ UML‬لغة الوصف ‪ .......‬المستخدمة في وصف النظم البرمجية‬
‫أ‪ -‬الوحيدة‪.‬‬
‫ب‪ -‬األقل شهرة‪.‬‬
‫ج‪ -‬األشهر‪.‬‬
‫د‪ -‬األسرع‪.‬‬
‫‪67‬‬
‫ه‪ -‬االقدم‬
‫‪ .2‬من أجل تجنب سوء الفهم و سرعة استيعاب نواحي النظام قيد البناء فإن‬
‫‪ UML‬تعتمد إعتمادا أساسيا على إستخدام ‪ ......‬عند وصفها للنظم‪.‬‬
‫أ‪ -‬مخططات وقائع اإلستخدام ‪.Use-case‬‬
‫ب‪ -‬االختصار‪.‬‬
‫ج‪ -‬األشكال والمخططات الرسومية‪.‬‬
‫د‪ -‬النظرية الشيئية‪.‬‬
‫ه‪ -‬جميع االجابات صحيحة‪.‬‬
‫‪ .1‬يعود اختصار وبساطة األشكال والرموز المستخدمة في رسم مخطط ‪use‬‬
‫‪ case‬إلى ‪....‬‬
‫أ‪ -‬اعتباره المخطط الذي يتم إعداده أوال‪.‬‬
‫ب‪ -‬استخدامه في حصر المتطلبات‪.‬‬
‫ج‪ -‬اعتباره وسيلة للتحاور مع الزبائن اللذين غالبا ال يكونون على غير‬
‫دراية بالمصطلحات التقنية المختلفة‪.‬‬
‫د‪ -‬انه افضل وسيلة للتعامل مع الزبائن ذوي المتطلبات المتبدلة كل‬
‫حين‪.‬‬
‫‪ .6‬النموذج هو ‪......‬‬
‫أ‪ -‬عبارة عن مجموعة مخططات هندسية تقوم بوصف وتمثيل النظام‬
‫من نواحي معينة‪.‬‬
‫ب‪ -‬وصف سردي يستخدم لشرح نواحي معينة من النظام قيد البناء‪.‬‬
‫ج‪ -‬وسيلة اتصال بين الزبون والمطور‪.‬‬
‫د‪ -‬وصف رياضى لوصف النظم المعلوماتية قيد البناء‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة‪.‬‬
‫‪68‬‬
‫‪...... .7‬إستخدام مخططات متعددة لوصف النظم المعلوماتية قيد البناء‬
‫أ‪ -‬ال يجب‪.‬‬
‫ب‪ُ -‬ينصح بـ‪.‬‬
‫ج‪ -‬يجب‪.‬‬
‫د‪ -‬أحيانا يجب‪.‬‬
‫ه‪ -‬ال ُينصح‪.‬‬
‫‪ .8‬تستخدم مخططات وقائع اإلستخدام ‪ use case‬في إبراز ‪........‬‬
‫أ‪ -‬الوظائف األساسية للنظام بتفصيل كامل‪.‬‬
‫ب‪ -‬الوظائف األساسية للنظام باختصار‪.‬‬
‫ج‪ -‬الكائنات األساسية للنظام والعالقات بينها‪.‬‬
‫د‪ -‬وصف المكونات البرمجية المستخدمة في إنجاز النظام قيد البناء‪.‬‬
‫ه‪ -‬تبدل حالة الكائنات البرمجية التي يحتويها النظام‪.‬‬
‫‪ .9‬تستخدم مخططات الحالة ‪ Statechart Diagrams‬في إبراز ‪........‬‬
‫أ‪ -‬الوظائف األساسية للنظام بتفصيل كامل‪.‬‬
‫ب‪ -‬الوظائف األساسية للنظام باختصار‪.‬‬
‫ج‪ -‬الكائنات األساسية للنظام والعالقات بينها‪.‬‬
‫د‪ -‬مجموعة الرسائل ‪ messages‬بين الكائنات البرمجية المستخدمة في‬
‫إنجاز النظام قيد البناء‪.‬‬
‫ه‪ -‬بيانات تبدل حالة الكائنات البرمجية التي يحتويها النظام‪.‬‬
‫‪ .11‬تستخدم مخططات وصف المهام ‪Activity Diagrams‬‬
‫‪........‬‬
‫أ‪ -‬عدد المهام المختلفة التي يقوم بها النظام‪.‬‬
‫‪69‬‬
‫في إبراز‬
‫ب‪ -‬مجموعة الرسائل ‪ messages‬المستخدمة في استدعاء وتنفيذ المهام‬
‫المختلفة‪.‬‬
‫ج‪ -‬وصف خطوات تنفيذ أي مهمة من مهام النظام‪.‬‬
‫د‪ -‬العالقة بين المهام المختلفة للنظام‪.‬‬
‫ه‪ -‬تبدل حالة الكائنات البرمجية التي يحتويها النظام‪.‬‬
‫‪.11‬يستخدم مخطط التصانيف ‪ Class Diagrams‬في إبراز ‪........‬‬
‫أ‪ُ -‬بنية تصانيف ‪ class‬النظام والشفرة المصاحبة لها‪.‬‬
‫ب‪ -‬المهام الوظيفية التي يدخل في إنجازها التصانيف المعنية للنظام‪.‬‬
‫ج‪ُ -‬بنية التصانيف ‪ classes‬األساسية للنظام والعالقات بينها‪.‬‬
‫د‪ -‬مجموعة الرسائل ‪ messages‬التي تقوم باستدعاء العمليات المدرجة‬
‫داخل لكل تصنيف ‪.class‬‬
‫ه‪ -‬تبدل حالة التصانيف البرمجية التي يحتويها النظام‪.‬‬
‫‪ .12‬تستخدم مخططات التسلسل ‪ Sequence Diagrams‬في إب ارز ‪........‬‬
‫أ‪ -‬تسلسل االحداث التي تمثل متطلبات النظام المختلفة‪.‬‬
‫ب‪ -‬تسلسل استدعاء الرسائل ‪ messages‬المستخدمة في النظام‪.‬‬
‫ج‪ -‬سلسلة العالقات بين الكائنات البرمجية المختلفة للنظام‪.‬‬
‫د‪ -‬تسلسل تنفيذ الخطوات الداخلة في إجراء أي خدمة من خدمات‬
‫النظام‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة‬
‫‪ .13‬يستخدم مخطط الجزيئات‪/‬المكونات البرمجية ‪Component diagrams‬‬
‫في إبراز ‪.....‬‬
‫أ‪ُ -‬بنية أي مكون برمجي ‪ component‬من المكونات البرمجية للنظام‪.‬‬
‫ب‪ -‬تسلسل استدعاء الرسائل ‪ messages‬المستخدمة في النظام‪.‬‬
‫‪70‬‬
‫ج‪ -‬الكائنات البرمجية المختلفة التي يتكون منها أي مكون برمجي‬
‫‪ component‬للنظام‪.‬‬
‫د‪ -‬تسلسل تنفيذ العمليات الداخلة في إجراء‬
‫النظام‪.‬‬
‫أي خدمة من خدمات‬
‫ه‪ -‬جميع االجابات خاطئة‬
‫‪ .02‬تساهم االستعانة باستخدام المكونات‪/‬الجزيئات البرمجية ‪ components‬في‬
‫……‪ ..‬قيد البناء‬
‫أ‪ -‬إبطاء عملية برمجة النظم المعلوماتية‪.‬‬
‫ب‪ -‬تسريع برمجة النظم المعلوماتية‪.‬‬
‫ج‪ -‬تكدس الكائنات داخل كل مكون برمجي‪.‬‬
‫د‪ -‬كثرة االعطال البرمجية داخل النظم المعلوماتية‪.‬‬
‫ه‪ -‬جميع االجابات خاطئة‪.‬‬
‫‪ ........ .01‬نسبة ظهور األخطاء‬
‫البرمجية في التطبيقات المعتمد في بنائها‬
‫على إعادة استخدام مكونات برمجية سابقة‪.‬‬
‫أ‪ -‬تزداد‪.‬‬
‫ب‪ -‬تنعدم‪.‬‬
‫ج‪ -‬تقل‪.‬‬
‫د‪ -‬تندر‪.‬‬
‫ه‪ -‬أحيانا تزداد‪.‬‬
‫‪71‬‬
‫‪View publication stats‬‬
Download