• 0
romansy

مقدمه في التحليل والتصميم الكائني Ooad

سؤال

33 إجابة على هذا السؤال .

  • 0

جزاك الله خيرا وجعله ميزان حسناتك

هذا نتيجة البرنامج :

Staff : SudanCS
1 : Wajdy take 4000.0 $ ,language : java
2 : Geek take 5000.0 $ ,language : Assembly
3 : Ahmed take 3200.0 $ ,language : C++
4 : romansy take 3000.0 $ ,language : Php
10 : Mohammed take 9000.0 $ ,language : C++
Member Information :
2 : Geek take 5000.0 $ ,language : Assembly
1 : Wajdy take 4000.0 $ ,language : java
4 : romansy take 3000.0 $ ,language : Php

20 : Ossma take 5000.0 $ ,language : pascal
Member Information :
3 : Ahmed take 3200.0 $ ,language : C++


total salary : 29200.0

هذا كود الطباعة بس انا حاب اعرف كيف تظهر النتيجة بهذا الشكل ومن المعرف class Employee لا يحتوي على attribute language كيف قام بطباعة (انا اعرف السؤال مبتدء بس تحملني ) نحن عملنا pass عن طريق method :

 app.addMember(p1);

هذه ال method تستقبل class Employee

public String toString () {
String str = "Staff : " + name + "\n";
Iterator itr = staff.iterator();

while ( itr.hasNext() ){
Employee tmp = (Employee) itr.next();
str += tmp.toString() + "\n";
}

return str;
}

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكــم السـلام ورحمة الله وبركاتـه..

حياك الله ،،

أولا الكلاس Employee هو كلاس Abstract ، بمعنى أنك لا تستطيع عمل كائن منه .. فقط تستطيع أن ترث منه Inheritance . راجع الصوره التاليه (لم تتضح في المثال السابق ) :

OOAD11.PNG

هناك مفهوم في البرمجه الموجهه وهو تعدد الأشكال Polymorphisms وهي تعني أنه توجد هناك داله واحده بنفس الأسم في الكلاس الأب والكلاسات الأبناء وفي كل من هذه الكلاسات الأبناء لها عمل مختلف عن الأخر ، الأن عن طريق مؤشر للكلاس الأب قمت فيه بوضع قيمه أحد الكائنات الأبناء وقمت أستدعيت تلك الداله الموجوده في الكلاس الأب سوف يتم استدعاء الداله الموجوده في الأبن ..

نوضح أكثر في مثالنا السابق ، لدينا الكلاس الأب Employee وهو كلاس Abstract ويحتوي على داله toString تطبع معلومات الموظف العادي ، وقام Programmer بوراثه هذا الكلاس واعاد تعريف override الداله toString . وبنفس الأمر قام Leader بالوراثه من Programmer واعاد تعريف toString . وفي الداله main قمنا

الأن من خلال :

public String toString () {
String str = "Staff : " + name + "\n";
Iterator itr = staff.iterator();

while ( itr.hasNext() ){
Employee tmp = (Employee) itr.next();
str += tmp.toString() + "\n";
}

return str;
}

ستجد أننا نحصل على المؤشر الموجود في ArrayList باستخدام itr.next ونحوله cast لكي نسنده للمؤشر tmp ،، وعند استدعاء الداله toString في المؤشر tmp سوف يقوم بطباعه الداله toString الموجوده في الكائن الذي يؤشر له المؤشر itr.next .. وعلى حسب نوع ذلك الكائن يتم استدعاء الداله المناسبه فاذا كان Programmer فيتم طباعه toString الخاصه به ، واذا كان Leader فيتم طباعه toString الخاصه به ..

فقط هذا كل ما في موضوع تعدد الأشكال :) ...

بالطبع من أهم مزاياه سهوله الاضافه extendiblity ، لنفرض مثلا أنه حصل تغيير بسيط في المتطلبات وأرنا أن ندخل نوع جديد من الموظفين وهو المشرف Administator . كل ما علينا هو كتابه ذلك الكلاس وتعديل بسيط في الداله main ولن نقوم بتغيير اي سطر في داله الطباعه الخاصه بالSoftwareHouse .

كما بالصوره :

OOAD21.PNG

// Administrator.java

public class Administrator extends Employee {
private String department;

public Administrator (int id, String name , double salary , String dep) {
super(id,name,salary);
department = dep;
}

public void setDepartment (String dep ) {
department = dep;
}

public String getDepartment () {
return department ;
}

public String toString () {
return super.toString() + " ,Department : " + department;
}
}

فقط كل ما عليك أن تعمل كائن من هذا الكلاس في main وتدخله في الsoftware house ..وهكذا ستجد البرنامج قابل للأمتداد والتطوير باقل تغيير يمكن ..

بالتوفيق :) .

4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سلام عليكم ورحمة الله وبركاته

اخي wajdy لا استطيع ان اقول الا ربنا يوفقك

وشكرا...........................

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

بارك الله بك اخي وجدي على هذا المجهود العظيم

وزادني واياك من علمه

......

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

موضوع رائع يستحق أن يذهب للمفضلة مباشرة

بارك الله فيك ووفقك لما تصبوا اليه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك موضوع جيد

لكن لما لم يثبت الموضوع ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

موضوع في غاية الروعة

واظن ان هذا ما تبحث عنه اخي عبد العالي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي وجدي , بارك الله فيك و في علمك .

الموضوع مهم جدا .. ولدي أسئلة كثيرة سألتها سابقاً بعض الدكاترة لكن دون اجابة مقنعة :

1- هل نستخدم مثل هذه المنهجية و UML الذي يصفها مع جميع الأنواع مع البرامج ؟

سنستفيد مما سبق في أنظمة معيّنة مثل نظام بنكي - ادارة مكتبة - نظام محاسبي .. الخ .

لكن كيف يمكن تطبيق ماسبق على برنامج مثل Word أو Photoshop ؟

هل يمكن تطبيق ماسبق على برنامج مستعرض صور بسيط ؟

أم أن أسلوب التحليل هذا مناسب فقط لأنظمة معينة ؟

2- عندما أختار أحد Use Case وأعمل لها Sequence Diagram , ماذا سأستفيد ؟ ماذا سينتج ؟ هل الرسائل المرسلة هي عبارة عن Method مثلاً ؟ أم أن الهدف هو فقط استخلاص الفئات Classes ؟ هل يجب أن أعرض جميع الرسائل في Sequence Giagram أم أكتفي بالمهمّة فقط ؟

3- هل الرسائل في Sequence Diagram عبارة عن Method لكلاس معين , أم أننا أصلاً لم نعرف الـ Class حتى الان حتى نعرف ماهي Methodالخاصة به ؟

3- Collaboration Diagram معقّد قليلاً , هل يمكن الاستغناء عنه , واستبداله فقط بالـ Sequence Diagram ؟

4- درست عن مفهومThree-Tiers وهو يتكون من GUI - Problem Damion - Data Access Or DataBase >

عندما نحلل نظام يطبق هذا المفهوم , فاننا لانقوم بتحليل وتصميم الا Problem Domain , هذا صحيح .. أليس كذلك ؟

5- عندما أكون عضو في مشروع وقررت أن استخدم أحد طرق Design Patterns , هل سيتأثر الـ Class Diagram للمشروع ؟

أعني هل يجب أن أعيد تصميم العلاقات بناء على Design Pattern المستخدم , أم أن Class Diagram فقط يوضح العلاقات بين الكلاسات المهمة , وبالتالي لانهتم بالتفاصيل التي يجب أن تظهر وقت البرمجة؟

هل ستتأثر Sequence Diagram و Collaboration Diagram باستخدام بعض طرق Design Pattern ام لا ؟

6-أخيراً , درسنا في بعض المقررات مثل Data Structure شيء اسمه ADT , بحيث نكتب مواصفات كل كلاس Specification , أين تقع هذه المرحلة , في التصميم , في التحليل أو أثناء البرمجة ؟ هل ADT تعتبر شيء مستقل ومختلف عن الموضوع الذي تتحدث عنه الان .

أعرف أن الاسئلة كثيرة , لكن لاتتصوّر مدى السعادة لو حصلت على اجابة عليها - أو على بعضها .

تم تعديل بواسطه الشمري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لكن كيف يمكن تطبيق ماسبق على برنامج مثل Word أو Photoshop ؟

هل يمكن تطبيق ماسبق على برنامج مستعرض صور بسيط ؟

أم أن أسلوب التحليل هذا مناسب فقط لأنظمة معينة ؟

مثال بسيط الا و هو قوائم برنامج الوورد Microsoft Word كل عنصر من عناصر القائمة يتم تطبيقه باستخدام ال Command Pattern

مستعرض الصور ايضاًَ له العديد من الافكار باستخدام ال Patterns

- Collaboration Diagram معقّد قليلاً , هل يمكن الاستغناء عنه , واستبداله فقط بالـ Sequence Diagram ؟

لا يمكن الاستغناء عن ال Collaboration Diagrams بل من وجهة نظرى انه اهم ال Diagrams التى توضح العلاقات بين ال Objects

- عندما أكون عضو في مشروع وقررت أن استخدم أحد طرق Design Patterns , هل سيتأثر الـ Class Diagram للمشروع ؟

قرار استخدام ال DP يرجع لل Designer و ليس للمبرمج و طبيعى انه بعض الكلاسات ستتأثر عند استخدام ال Patterns لانك ممكن تقوم بعمل Interface Implementation او تقوم بالوراثة من فئة ام و بالتالى فستتغير الكلاس التى تعمل عليها

تم تعديل بواسطه طارق إبراهيم
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خير , لكن بالنسبة للنقطة الاولى ,

لكن كيف يمكن تطبيق ماسبق على برنامج مثل Word أو Photoshop ؟

هل يمكن تطبيق ماسبق على برنامج مستعرض صور بسيط ؟

أم أن أسلوب التحليل هذا مناسب فقط لأنظمة معينة ؟

لا أقصد DP المستخدمة .. لكن هل يتم تطبيق هذه الـ Diagrams التي ذكرها الاخ وجدي على كامل البرنامج .. مثل الفوتوشوب .. الذي يحوي على الالاف العناصر داخل الـ use cases ؟! .. وستقوم بعمل Sequence Diagrams لها .. الخ .. أم أنها تستخدم فقط في الأنظمة .. مثل نظام بنكي ..

ولانسوا باقي الأسئلة :-) ..

تم تعديل بواسطه الشمري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بعد فتره طويلة :) .

1- هل نستخدم مثل هذه المنهجية و UML الذي يصفها مع جميع الأنواع مع البرامج ؟

سنستفيد مما سبق في أنظمة معيّنة مثل نظام بنكي - ادارة مكتبة - نظام محاسبي .. الخ .

لكن كيف يمكن تطبيق ماسبق على برنامج مثل Word أو Photoshop ؟

هل يمكن تطبيق ماسبق على برنامج مستعرض صور بسيط ؟

أم أن أسلوب التحليل هذا مناسب فقط لأنظمة معينة ؟

الغرض الأساس من الUML هي أن تكون وسيلة لتخاطب المشتركين في تطوير النظام (محللين ومطورين ومختبرين) أي Idea Communication ، فاذا كان هناك أكثر من Stakholder فيجب أن تتم عملية طرح الأفكار بوسيلة موحدة وسهله للجميع ، ومن هنا كانت UML ،،

2- عندما أختار أحد Use Case وأعمل لها Sequence Diagram , ماذا سأستفيد ؟ ماذا سينتج ؟ هل الرسائل المرسلة هي عبارة عن Method مثلاً ؟ أم أن الهدف هو فقط استخلاص الفئات Classes ؟ هل يجب أن أعرض جميع الرسائل في Sequence Giagram أم أكتفي بالمهمّة فقط ؟

3- هل الرسائل في Sequence Diagram عبارة عن Method لكلاس معين , أم أننا أصلاً لم نعرف الـ Class حتى الان حتى نعرف ماهي Methodالخاصة به ؟

3- Collaboration Diagram معقّد قليلاً , هل يمكن الاستغناء عنه , واستبداله فقط بالـ Sequence Diagram ؟

الأسئلة تدور حول محور واحد ،، وخلاصه الأمر يمكن أن تتجاهل أي Diagram اذا لم تجده يوضح ما تريد بصورة أوضح ،،

4- درست عن مفهومThree-Tiers وهو يتكون من GUI - Problem Damion - Data Access Or DataBase >

عندما نحلل نظام يطبق هذا المفهوم , فاننا لانقوم بتحليل وتصميم الا Problem Domain , هذا صحيح .. أليس كذلك ؟

لا ليس فقط للBusiness Domain ، يمكن استخدام الUML لرسم الGUI وتوضيح الDeplyoment وحتى الDB .

5- عندما أكون عضو في مشروع وقررت أن استخدم أحد طرق Design Patterns , هل سيتأثر الـ Class Diagram للمشروع ؟

أعني هل يجب أن أعيد تصميم العلاقات بناء على Design Pattern المستخدم , أم أن Class Diagram فقط يوضح العلاقات بين الكلاسات المهمة , وبالتالي لانهتم بالتفاصيل التي يجب أن تظهر وقت البرمجة؟

هل ستتأثر Sequence Diagram و Collaboration Diagram باستخدام بعض طرق Design Pattern ام لا ؟

كما ذكر أخ طارق ،،اضافة الى ان تصميم الSequence Diagram والcollaboration يحتاج من الأساس خلفية جيده في OO ،، وعندما يتم بنائها بشكل جيد فلن تحتاج للتغير فيها كثيرا وخاصه الSequence diagram ..

6-أخيراً , درسنا في بعض المقررات مثل Data Structure شيء اسمه ADT , بحيث نكتب مواصفات كل كلاس Specification , أين تقع هذه المرحلة , في التصميم , في التحليل أو أثناء البرمجة ؟ هل ADT تعتبر شيء مستقل ومختلف عن الموضوع الذي تتحدث عنه الان .

يمكن أن تقع في مرحله التصميم أو البرمجه ،، مثلا رأينا أن هناك قطعه من الكود نستخدمها دائما في عده كلاسات فيمكن كبسبلتها في كلاس ووراثه هذا الكلاس لمن يريد ،، قد لا يرى ذلك المصمم وقت التصميم ولكن المبرمج بالتأكيد سوف يلاحظ هناك تكرار في الكود ، وهناك قاعده تقول أنه بمجرد وجود تكرار فيجب عمل اعاده تصحيح أو تصميم للكود Refactoring وهكذا أغلب الmodern projects تستخدم اساليب xp وكل دورة في المشروع تكون قصيرة وربما الدورة التالية تعالج قصور في الدورة السابقة وكهذا.. ثانيا الADT هي عباره عن مفاهيم وطريقة عملها قد تختلف على حسب الimplementation ،، ارجع لدرس خالد عن تفاصيل عمل هياكل البيانات في سي++ للمزيد.

كانت هذه اجابات بسيطة نظرا للإجابة المتأخرة ،، وسأكون سعيدا في حال وجدت أسئلة أخرى :) .

بالتوفيق،

تم تعديل بواسطه Wajdy Essam
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ماشاء الله دائما مواضيعك متميزه اخ وجدي.

بالتوفيق.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك يا أخ وجدي وإلى الأمام :thumb_up:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور اخي وجدي واستفدنا منه كثيرا جعل الله ذلك في ميزان حسناتك

وفقك الله :)

تم تعديل بواسطه atharitit
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكورين على المجهود

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله على الشرح المفصل

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

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

هل تنصحوني بقراءة هذا المقال أم مقال آخر؟ علماً بأنني بصدد تعلم لغة VB.NET

و هل تنفع هذه الأمور لبرمجة تطبيقات تتعامل مع قواعد البيانات و تصميم البرامج المحاسبية؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

استاذ وجدي شكراً جزيلاً على هذا الموضوع القيم

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

النموذج المتكرر Iterative Methodology كان هو الحل لهذه المشكله ، حيث يمكن في هذا النموذج أن نعود خطوه للوراء ونصلح ذلك الخلل ونكمل السير في هذه الدوره

Posted Image

OOAD3.PNG

حسب مفهومي:

نموذج الشلال waterfall model

قبل التطوير لا يدخل فيه التكرار

لكن المطور مضاف اليه التكرار

هل التعريف الدقيق ل

التكرار ( iterative ) : هو بكل مرحله من مراحل النظام يكون هناك تكرار العمل بالتصميم والتحليل إالى أن نكون سعيدين بالنتيجه ومن ثم ننتقل إالى مرحله أخرى من مراحل النظام وهاكذا ....

اذا لم يكن هو فما هو التعريف الدقيق ...؟!

-----------------------------------------------------------------------------------

OOAD4.PNG

هذا يعتبر :

التزايد ( incremental) : وهو تقسيم العمل الى أجزاء صغيره وكلما انتهينا من جزء إنتقلنا إالى الآخر.

اذا لم يكن هو فما هو مفهوم التزايد ؟!!

لانني بحثت عن هذا الموضوع ... اغلب الكتاب يتكلمون عن التكرار والتزايد المطور iterative and incremental development

الاستفسار الاخير :

هل من الممكن او من معقول أن نحصل على دورة حياة نظام (Life-cycle ) تكون مكرره ( iterative ) ولكن غير تزايديه ( incremental) .

أو العكس تكون تزايديه ( incremental) ولكن ليست مكرره ( iterative ).؟

و لماذا ال RUP-cycle يستخدمها جميعاً .؟

ارجو الافاده بأسرع وقت ممكن لاني محتاج هذي المعلمه جدا

شكرا جزيلاً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لو فرضنا أنك تريد عمل برنامج على الجوال لعرض معلومات الطقس،، وكانت هذه المعلومات الأولية المتوفرة ، من خلال هذه المعلومات يمكنك البدء في البرمجة وهذا ما يميز ال Iterative and incremental development ، حيث يمكنك أولاً في المرحلة الأولى كتابة كلاس يقوم بتحميل ملف معلومات الطقس من أحد الموقع (DB Downloader class).. هنا سوف تقوم بعمل تحليل وتصميم سريع لهذه المهمة حتى تقوم بكتابة كلاس مكبسل جيداً ويقوم بمهمه تحميل الملف من الموقع، بعدها تقوم بعمل testing سريع لهذا الكلاس للتأكد من أنه يعمل جيداً (سواء كلاس أخر (console app) يقوم بعمل اختبار له أو Unit-Testing للكلاس). لنفترض أن الزبون طلب أن تقوم بتحميل ملف المعلومات من موقع أخر سوف تقوم مرة أخرى وأنت ما زلت في هذه المرحلة بتغيير التصميم والكود والاختبار لكي يتناسب مع المطلوب..

عندما تنتهي من هذه المرحلة ، سوف تبدأ في المرحلة الثانية ولتكن عمل parse لهذا الملف وكتابة model classes تمثل الطقس،، سوف تعيد نفس الخطوات التي قمت بها في المرحلة السابقة (تحليل ، تصميم ، كود ، اختبار) وقد تحتاج للرجوع الى تعديل شيء ما اذا تطلب.. وحالياً أنت تضيف مكون جديد للنظام وبالتالي incremental لهذا النظام..

باختصار Iterative and incremental يجب أن يكونوا مع بعضهما البعض، والا ستظل تطور جزء معين في النظام وتترك الأجزاء الأخرى (اذا كنت تستخدم Iterative ققط) أو أنك ستكتب وتضيف بدون تخطيط أو اختبار أو حتى تعديل لمتطلبات العميل (اذا كنت تستخدم incremental فقط).

لماذا RUP يستخدمهم؟ بالطبع لأنها مرنة جداً ويمكنك البدء من خلالها بدون اكتمال كل المتطلبات.. وأيضاً منهجيات ال agile كXP تستخدم هذه الطريقة أيضاً لنفس الأسباب..

بالتوفيق،،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم اخي الفاضل.

بالنسبه للموضوع جميل ومفيد ومن التقنيات الجديده في تحليل النظم .

بارك الله فيك .

وجزك الله خيرا.

واتوقع منك المزيد من الابداع ........................

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك يا بشمهندس وجدى ، و ربنا يزيدك من علمه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي موضوع صراخة مفيد جدا بارك الله فيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله الف خير أخي وجدي .... وجعل الله مجهودك في ميزان حسناتك

بصراحة موضوع كامل شامل ( و الكمال لله ) تستاهل كل شكر عليه...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااضغط هنا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .