المنهجيــــة غرضيــة التوجـــــه Object Oriented Methodology

Download Report

Transcript المنهجيــــة غرضيــة التوجـــــه Object Oriented Methodology

‫المنهجيــــة غرضيــة التوجـــــه‬
‫‪Object Oriented Methodology‬‬
‫المحاضرة الثانية عشر‬
‫مراجعة عامة‬
‫د‪ .‬محمد احمد‬
‫مقدمـــــــــــــة‬
‫• بدأ استخدام المنهجيات المهيكلة في السبعينيات مترافقا مع ظهور مفهوم دورة‬
‫حياة النظم‪ ،‬ثم تم تطوير المنهجيات المهيكلة الموجهة باإلجراءات ( ‪Process‬‬
‫‪ )Oriented‬كتقنية تحليل وتصميم أكثر فعالية‪ .‬وقد استندت المنهجيات المهيكلة‬
‫على بنى البرامج الحاسوبية القائمة على الفصل بين خطوات البرنامج‬
‫(اإلجراءات ‪ )Processes -‬والبيانات (‪.)Data‬‬
‫• مع مطلع الثمانينيات‪ ،‬ومع تطور وانتشار نماذج قواعد البيانات‪ ،‬احتلت تقنيات‬
‫نمذجة البيانات دورا أكبر في تطوير النظم البرمجية مما أدى إلى ظهور‬
‫المنهجيات الموجهة بالبيانات (‪ .)Data-Oriented‬وعلى الرغم مما قدمته هذه‬
‫المنهجيات من تحسينات إال أنها حافظت على استخدام مبدأ التقسيم الوظيفي في‬
‫مرحلة تصميم النظم‪.‬‬
‫‪2‬‬
‫نقاط ضعف المنهجيات التقليدية‬
‫– يتطلب النموذج الشاللي إكمال كل مرحلة من مراحل التطوير قبل االنتقال إلى‬
‫المرحلة التالية‪ ،‬مما يزيد من خطورة انتقال األخطاء من مرحلة إلى المراحل التالية‪.‬‬
‫– يمكن أن يؤدي التقسيم الوظيفي إلى تصميم غير مستقر ألن هذا التصميم يعتمد‬
‫على اإلجراءات التي غالبا ما تتغير نتيجة لظهور متطلبات جديدة أو نتيجة لتصحيح‬
‫أخطاء سابقة‪.‬‬
‫– تفترض المنهجيات التقليدية أن تطوير النظام البرمجي يبدأ من الصفر بدال من‬
‫إعادة استخدام رماز موجود مسبقا‪ ،‬وهذا طبيعي ألن التقسيم الوظيفي يؤدي إلى‬
‫فصل اإلجراءات (المعالجة) عن البيانات مما يجعل نقل الرماز وإعادة استخدامه‬
‫أمرا صعبا للغاية‪.‬‬
‫– بما أن التقسيم الوظيفي موجه لحل مسألة محددة‪ ،‬يصبح هذا الحل (التصميم)‬
‫وحيدا مما يجعل بناء تطبيقات عامة االستخدام أمرا صعبا‪.‬‬
‫‪3‬‬
‫منهجية التحليل والتصميم غرضية التوجه‬
‫• اعتاد المحللون في الماضي خالل قيامهم بتطوير النظم على التركيز‬
‫على المعطيات ليحصلوا بذلك على نماذج (مثل ‪ )ERD‬تشكل‬
‫المعطيات محورها الرئيسي (‪ )Data centric approach‬أو على‬
‫إجرائيات العمل ليحصلوا بذلك على نماذج (مثل ‪ )DFD‬تشكل‬
‫اإلجراءات محورها الرئيسي (‪.)Process centric approach‬‬
‫• تعتمد المنهجية غرضية التوجه على النظر إلى نظام المعلومات‬
‫كمجموعة من األغراض (تتضمن اإلجراءات والبيانات بآن معا)‬
‫المتفاعلة والتي تعمل معا إلنجاز مهمات محددة‪.‬‬
‫‪4‬‬
‫منهجية التحليل والتصميم غرضية التوجه‬
‫• تساعد المنهجية غرضية التوجه على التركيز على كال الجانبين‬
‫(المعطيات واإلجرائيات) في الوقت نفسه‪:‬‬
‫– جوهر عملية التحليل‪ :‬مقاربة المسألة من زاوية األغراض (أشياء أو مفاهيم‬
‫من العالم الحقيقي)‪.‬‬
‫– جوهر عملية التصميم‪ :‬تعريف الحل كمجموعة من األغراض البرمجية (مع‬
‫إسناد مسؤوليات لألغراض)‪.‬‬
‫• تحتل المعطيات كما األفعال درجة األهمية ذاتها‪.‬‬
‫• الغرض (‪)Object‬‬
‫– مكون برمجي يجمع في البنية ذاتها كال من المعطيات واألفعال التي يجري‬
‫تطبيقها على تلك المعطيات‪.‬‬
‫‪5‬‬
‫المنهجية غرضية التوجه والمنهجيات المهيكلة‬
‫ما الفرق؟‬
‫• يتعامل التصميم المهيكل مع تطوير النظام كمسألة تجزئة خوارزمية‬
‫(أو تجزئة وظيفية) حيث يمثل كل مجتزأ في النظام خطوة رئيسية من‬
‫خطوات الحل اإلجمالي‪ .‬بالمقابل تعتمد المنهجية غرضية التوجه على‬
‫التجزئة الغرضية (أي على األغراض وليس الخوارزميات)‪ ،‬فيركز‬
‫التحليل على وصف ما يجب أن يقوم به النظام بداللة األغراض‬
‫الرئيسية لفضاء المسألة كما يركز التصميم على وصف كيف سيعمل‬
‫النظام باستخدام تلك األغراض‪.‬‬
‫‪6‬‬
‫منهجية التحليل والتصميم غرضية التوجه‬
‫حساب مصرفي‬
‫المعطيات‪ :‬الرصيد‬
‫األفعال‪ :‬سحب‪ ،‬إيداع‪ ،‬استعالم عن الرصيد‬
‫‪7‬‬
‫األنظمة غرضية التوجه – مفاهيم أساسية‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪8‬‬
‫األغراض والصفوف ‪.Objects and Classes‬‬
‫الطرق والرسائل ‪Methods and Messages‬‬
‫التغليف وإخفاء المعلومات ‪Encapsulation and Information‬‬
‫‪Hiding‬‬
‫الوراثة ‪Inheritance‬‬
‫تعددية األشكال والربط الديناميكي ‪Polymorphism and‬‬
‫‪Dynamic Binding‬‬
‫‪ -1‬األغراض والصفوف‬
‫• الغرض هو “شيء” في نظام المعلومات قادر على االستجابة للرسائل‬
‫التي يتلقاها‪ .‬والصف هو مجموعة من األغراض المتشابهة‪ .‬فعلى‬
‫سبيل المثال‪ ،‬يمكن أن يحوي الصف “زبون” أغراضا مثل “فادي” أو‬
‫“عامر”‪ .‬لكل أغراض الصف المجموعة نفسها من الواصفات‬
‫(‪ )attributes‬مثل‪ :‬االسم‪ ،‬الكنية‪ ،‬العنوان‪ ،‬تاريخ الميالد‪ ،‬رقم‬
‫الهاتف وغيرها‪.‬‬
‫• من أمثلة صفوف األغراض‪ :‬استمارة إدخال المعطيات في نظام‬
‫حاسوبي (‪ ،)data-entry form‬الزر (‪ )button‬وعلبة النص‬
‫(‪ .)text box‬يجري إنشاء األغراض المستقلة كأمثال من هذه‬
‫الصفوف‪ .‬بالمثل‪ ،‬يمكن النظر إلى الطابعة كصف في حين أن‬
‫الطابعات المختلفة التي قد تستخدمها هي أغراض من هذا الصف لكل‬
‫منها قيم واصفات خاصة بها‪.‬‬
‫‪9‬‬
‫األغراض والصفوف‬
‫• الغرض‪ :‬هو أي شيء يتميز بسلوك (‪ )Behavior‬محدد وله في‬
‫لحظة محددة حالة معينة (‪.)State‬‬
‫– أغراض من العالم الحقيقي‪ :‬دراجة‪ ،‬كتاب‪ ،‬طالب‪ ،‬صف‪..‬‬
‫– أغراض برمجية‪ :‬تمثل أغراضا حقيقية أو أغراضا مجردة (قائمة مثال)‪.‬‬
‫• الطرق‪ :‬هي إجراءات (‪ )procedures‬تتواصل بواسطتها األغراض‬
‫فيما بينها (طالب‪ :‬يسجل‪ ،‬يدرس‪.)...‬‬
‫• الواصفات (‪ :)Attributes‬متحوالت تخزن معلومات عن حالة‬
‫الغرض (طالب‪ :‬االسم‪ ،‬الرقم‪.)...‬‬
‫• الصف‪ :‬هو قالب أو نموذج (‪ )Prototype‬لكل األغراض التي هي‬
‫من النوع نفسه (طالب‪ ،‬جامعة‪ ،‬شكل هندسي‪)...‬‬
‫– يُنظر إلى الغرض كمثل (‪ )Instance‬من صف (‪ SVU‬هو غرض من‬
‫الصف ‪ myCircle ،University‬و ‪ mySquare‬أغراض من الصف‬
‫‪.)Shape‬‬
‫‪10‬‬
‫‪ -2‬الطرق والرسائل‬
‫• تجسد الطرق سلوك الغرض‬
‫• مشابهة للتابع (‪ )Function‬أو اإلجراء (‪.)Procedure‬‬
‫• الرسائل هي آلية تفعيل الطرق‬
‫• يُرسل غرض ما رسالة إلى غرض آخر لتفعيل إحدى طرقه (مشابهة‬
‫لعملية استدعاء تنفيذ إجراء)‪.‬‬
‫‪11‬‬
‫‪ -3‬التغليف وإخفاء المعلومات‬
‫• التغليف (‪)Encapsulation‬‬
‫– جمع المعطيات واإلجراءات التي تتعامل معها في كيان واحد‪.‬‬
‫• إخفاء المعلومات (‪)Information Hiding‬‬
‫– يُزود المستخدم فقط بالمعلومات الالزمة الستخدام الغرض‪.‬‬
‫– يشكل هذا أساس مبدأ إعادة االستخدام (‪ )Reusability‬إذ يكفي الستخدام أي‬
‫غرض استدعاء طرقه‪.‬‬
‫‪12‬‬
‫‪ -4‬الوراثة‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪13‬‬
‫الوراثة (‪ :)Inheritance‬يمكن تنظيم الصفوف في بنية هرمية يرث‬
‫من خاللها صف ما صفات وطرق صف أعلى‪.‬‬
‫تتوضع الصفوف العامة (‪ )general‬أو العليا (‪ )Superclasses‬في‬
‫أعلى هرمية الصفوف‪.‬‬
‫تتوضع الصفوف الخاصة (‪ )Specific‬أو الفرعية (‪)Subclasses‬‬
‫في أسفل الهرمية‪.‬‬
‫ترث الصفوف الخاصة صفات وطرق الصفوف التي تتوضع فوقها‬
‫في هرمية الصفوف‪.‬‬
‫صفوف حقيقية (‪ )Concrete‬وصفوف مجردة (‪.)Abstract‬‬
‫الصفوف المجردة والصفوف الحقيقية‬
‫‪14‬‬
‫‪ -5‬تعددية األشكال والربط الديناميكي‬
‫• تعددية األشكال‬
‫– تُفسر الرسالة نفسها بطرق مختلفة وفقا لنوع الغرض الذي يستقبل الرسالة‪.‬‬
‫• الربط الديناميكي‬
‫– يسمى أحيانا الربط المتأخر (‪)late binding‬‬
‫– تؤجل عملية انتقاء الطريقة إلى زمن التنفيذ (وفقا لنمط الغرض)‬
‫– في الربط السكوني يجب تحديد نمط الغرض (وبالتالي اإلجراء) أثناء‬
‫الترجمة (‪.)compile time‬‬
‫‪15‬‬
‫تعددية األشكال والربط الديناميكي‬
Instance variable: SALARY
Method: monthPay = SALARY / 12
Employee
Super Class
Sub Class
Pilot
Instance variable:
Method:
flyPay
monthPay
Super monthPay + flyPay
Mechanic
overtimePay
monthPay
Super monthPay + overtimePay
16
‫التحليل والتصميم غرضي التوجه‬
‫• التحليل غرضي التوجه‪ :‬يعرف كل أنماط األغراض التي تؤدي عمل‬
‫النظام ويبين كيف تتفاعل هذه األغراض إلنجاز المهمات‪.‬‬
‫• التصميم غرضي التوجه‪ :‬يعرف كل أنماط األغراض اإلضافية‬
‫الالزمة للتخاطب مع محيط النظام (من أشخاص و تجهيزات‬
‫سن تعريف أنماط األغراض بحيث يمكن تحقيقها بلغة‬
‫وغيرها) كما يح ّ‬
‫برمجة أو بيئة برمجة محددة‪.‬‬
‫‪17‬‬
‫خطوات التحليل غرضي التوجه‬
‫ينطوي التحليل غرضي التوجه على أربع خطوات أساسية‪:‬‬
‫‪ .1‬التعرف على األغراض وصفوفها‪.‬‬
‫‪ .2‬التعرف على العالقات بين األغراض‪.‬‬
‫‪ .3‬التعرف على واصفات األغراض‪.‬‬
‫‪ .4‬التعرف على الخدمات‪.‬‬
‫‪18‬‬
‫خطوات التصميم غرضي التوجه‬
‫ينطوي التصميم غرضي التوجه على أربع خطوات أساسية‪:‬‬
‫‪ .1‬تعريف دورة حياة كل غرض‪.‬‬
‫‪ .2‬تعريف العالقات بين الصفوف‪.‬‬
‫‪ .3‬تعريف منطق الخدمات‪.‬‬
‫‪ .4‬إكمال تعريف الصفوف‪.‬‬
‫‪19‬‬
‫مميزات المنهجية غرضية التوجه‬
‫• تتميز المنهجية غرضية التوجه بأنها‪:‬‬
‫• ُمساقة بحاالت االستخدام (‪)Use-case driven‬‬
‫• متمحورة حول البنيان (‪)Architecture Centric‬‬
‫• تكرارية وتزايدية (‪)Iterative and Incremental‬‬
‫• إجرائية التطوير المفضلة‪:‬‬
‫• اإلجرائية الموحدة (‪.)The Unified Process‬‬
‫‪20‬‬
‫‪ -1‬مساقة بحاالت االستخدام‬
‫• مساقة بحاالت االستخدام‪:‬‬
‫– حاالت االستخدام هي أداة النمذجة األساسية التي تستخدم لتعريف سلوك‬
‫النظام‪.‬‬
‫– تصف حالة االستخدام كيف يتخاطب المستخدم مع النظام إلنجاز عملية ما‬
‫(مثل إجراء حجوزات أو البحث عن معلومات)‪.‬‬
‫– تُستخدم حاالت االستخدام لتحديد متطلبات عمل النظام الوظيفية‬
‫(‪ )Functional Requirements‬وإيصالها للمبرمجين الذين سيطورون‬
‫النظام‪.‬‬
‫‪21‬‬
‫‪ -2‬متمحورة حول البنيان‬
‫• أي أن توصيف بنيان النظام هو الذي يقود أنشطة التوصيف والبناء‬
‫والتوثيق‪ .‬يقدم التحليل والتصميم غرضي التوجه ثالثة نماذج مختلفة‬
‫(لكن مترابطة ومتسقة فيما بينها) لبنيان النظام يجسد كل منها شكل‬
‫النظام من وجهة نظر محددة‪ :‬وظيفية‪ ،‬سكونية‪ ،‬ديناميكية‪.‬‬
‫• يجري تحديد البنية البدائية بالبحث عن الوظائف األساسية‬
‫صفنا مزيدا من حاالت االستخدام‬
‫• تنضج البنية أكثر كلما اكتشفنا وو ّ‬
‫‪22‬‬
‫متمحورة حول البنيان‬
‫ثالثة نماذج مختلفة للنظام نفسه‬
‫• النموذج الوظيفي (‪ :)Functional‬يصف السلوك الخارجي للنظام من وجهة نظر‬
‫المستخدم‪ .‬نستخدم حاالت االستخدام ومخططات حاالت االستخدام لبناء هذا‬
‫النموذج‪.‬‬
‫• النموذج السكوني (‪ :)Static‬يصف بنية النظام من حيث هو أغراض وصفوف‬
‫لها واصفات وطرق وتربط بينها عالقات‪ .‬نستخدم مخططات الصفوف‬
‫ومخططات األغراض لبناء هذا النموذج إضافة إلى ما نسميه بطاقات ‪CRC‬‬
‫(‪.)Class-Responsibility-Collaboration‬‬
‫• النموذج الديناميكي (‪ :)Dynamic‬يصف السلوك الداخلي للنظام بداللة الرسائل‬
‫المتبادلة بين األغراض والتغيرات التي تطرأ على حاالت هذه األغراض‪ .‬نستخدم‬
‫مخططات التسلسل ومخططات التعاون ومخططات الحاالت لبناء هذا النموذج‪.‬‬
‫تُطور هذه النماذج في مرحلة التحليل ويجري تحسينها أثناء التصميم‪ .‬يتم إضافة‬
‫مخططات أخرى مع االنتقال من التحليل إلى التصميم ومع االنتقال من التصميم‬
‫إلى التنفيذ‪.‬‬
‫‪23‬‬
‫النموذج الوظيفي‬
Boundary
Library System
Actor
Borrow book
Employee
Client
Remove book
Return book
24
‫النموذج السكوني‬
‫‪25‬‬
‫النموذج الديناميكي‬
:System
Librarian
enterBorrower(id)
borrowResource(callNumber)
printReport()
report
data token
26
‫‪ -3‬تكرارية وتزايدية‬
‫• قانون ميلر (‪)Miller’s Law‬‬
‫– في لحظة محددة يمكننا فقط التركيز على سبعة عناصر (أو وحدات من‬
‫المعلومات)‪.‬‬
‫– للتعامل مع مقادير أكبر من المعلومات نعتمد مبدأ “الصقل المتدرج”‬
‫(‪.)Stepwise refinement‬‬
‫• نركز على المفاهيم األكثر أهمية في الوقت الراهن‪.‬‬
‫• نؤجل المفاهيم غير األساسية حاليا إلى وقت الحق‪.‬‬
‫• بالنتيجة‪ ،‬تجري معالجة المفاهيم بترتيب موافق (إلى حد بعيد) لترتيب أهميتها‪.‬‬
‫– هذا ما نسميه “إجرائية تكرارية” (‪.)Incremental Process‬‬
‫‪27‬‬
‫تكرارية وتزايدية‬
‫• تركز المنهجية غرضية التوجه على التطوير التكراري التزايدي الذي‬
‫يخضع لعمليات اختبار وتحسين تستمر طيلة فترة حياة المشروع‪.‬‬
‫يؤدي كل تكرار إلى جعل النظام أقرب من احتياجات المستخدم‬
‫الحقيقية‪.‬‬
‫– يُنفذ المشروع بتكرار حلقات (‪)iterations‬‬
‫– يؤدي كل تكرار إلى إنتاج نسخة مزيدة (‪ )increment‬أكثر قربا إلى المنتج‬
‫النهائي من سابقتها‪.‬‬
‫– يتضمن كل تكرار‪ :‬تحليل‪ ،‬تصميم‪ ،‬تحقيق‪ ،‬اختبار‬
‫‪28‬‬
)‫تكرارية وتزايدية (توضيح‬
Student
- studNum: int
- studSurname: String
- studGivenname: String
+ getSurname(): String
+ setSurname(name: String) : void
Student
Student
studNum
studSurname
getSurname()
‫في نموذج التحليل‬
)‫(مرحلة مبكرة‬
‫في فضاء المسألة‬
‫(عند جمع‬
)‫المتطلبات‬
‫مع التقدم باتجاه نموذج التصميم‬
29
‫تكرارية وتزايدية‬
‫‪30‬‬
‫‪ -4‬إيجابيات المنهجية غرضية التوجه‬
‫• باالعتماد على تقنية إخفاء المعلومات تصبح الصيانة أسهل (ينخفض‬
‫احتمال األخطاء المتدحرجة – ‪.)regression faults‬‬
‫• يصبح التطوير أسهل‬
‫– عادة‪ ،‬لكل غرض مقابل فيزيائي (من العالم الحقيقي)‪.‬‬
‫• األغراض المصممة جيدا هي وحدات مستقلة‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪31‬‬
‫التغليف‪ :‬يتضمن الغرض كل ما له عالقة بالكائن الفعلي الذي يمثله الغرض‪.‬‬
‫يجري التواصل بين الوحدات بإرسال رسائل بين األغراض‪.‬‬
‫تصبح إعادة استخدام الوحدات (األغراض) ممكنة كونها وحدات مستقلة‬
‫بعضها عن بعض‪.‬‬
‫تنخفض درجة تعقيد البرمجية‪.‬‬