Design patterns

يحوي مجموعة من المقالات العربية و الأجنبية سواء المنقولة منها أو التي قام أعضاء الموقع بكتابتها .

المشرف: Mohammad_807

Design patterns

مشاركة غير مقروءةبواسطة Mohammad_807 » السبت مارس 12, 2011 7:37 pm

السلام عليكم جميعاً ...
الحقيقة موضوع Design Patterns من أهم المواضيع يلي على أي مبرمج محترف أو مهندس برمجيات (Software Engineer ) أن يُلم بها بشكل جيد جداً .
سنبدأ بمجموعة من الأسئلة والأجوبة التي توضح الغرض من هذه المقالة :

? What is the design pattern

If a problem occurs over and over again, a solution to that problem has been used effectively. That solution is described as a pattern.
The design patterns are language-independent strategies for solving common object-oriented design problems. When you make a design, you should know the names of some common solutions. Learning design patterns is good for people to communicate each other effectively.
In fact, you may have been familiar with some design patterns, you may not use well-known names to describe them. SUN suggests GOF (Gang Of Four--four pioneer guys who wrote a book named "Design Patterns"- Elements of Reusable Object-Oriented Software), so we use that book as our guide to describe solutions. Please make you be familiar with these terms and learn how other people solve the code problems.



? Do I have to use the design pattern

If you want to be a professional Java developer, you should know at least some popular solutions to coding problems. Such solutions have been proved efficient and effective by the experienced developers. These solutions are described as so-called design patterns. Learning design patterns speeds up your experience accumulation in OOA/OOD. Once you grasped them, you would be benefit from them for all your life and jump up yourselves to be a master of designing and developing. Furthermore, you will be able to use these terms to communicate with your fellows or assessors more effectively.

Many programmers with many years experience don't know design patterns, but as an Object-Oriented programmer, you have to know them well, especially for new Java programmers. Actually, when you solved a coding problem, you have used a design pattern. You may not use a popular name to describe it or may not choose an effective way to better intellectually control over what you built. Learning how the experienced developers to solve the coding problems and trying to use them in your project are a best way to earn your experience and certification.

Remember that learning the design patterns will really change how you design your code; not only will you be smarter but will you sound a lot smarter, too.


?How many design patterns

Many. A site says at least 250 existing patterns are used in OO world, including Spaghetti which refers to poor coding habits. The 23 design patterns by GOF are well known, and more are to be discovered on the way.
Note that the design patterns are not idioms or algorithms or components.
A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations


?What is the relationship among these patterns

Generally, to build a system, you may need many patterns to fit together. Different designer may use different patterns to solve the same problem. Usually:
- Some patterns naturally fit together
- One pattern may lead to another
- Some patterns are similar and alternative
- Patterns are discoverable and documentable
- Patterns are not methods or framework
- Patterns give you hint to solve a problem effectively


References

Design Patterns -- Elements of Reusable Object-Oriented Software by GOF. -

الحقيقة هاد الكتاب هو أفضل مرجع لتعلم Design Patterns وهو موجود بمكتبة الكلية وعندي ياه PDf , وبتلاقوه بالأنترنت.
وبالمناسبة شرح الأمثلة بهاد الكتاب باستخدام لغة C++ بس يلي بيتعلم Design Patterns بأي لغة بيقدر ينتقل لأي لغة تانية لأن Design Pattern هو حل لمشكلة متكررة بغض النظر عن اللغة (قد تختلف الأدوات من لغة برمجة إلى أخرى بس الفكرة والهدف منها بيبقى نفسو).


java Design-patterns : A Tutorial -- by James W. Cooper -

خاص بلغة البرمجة جافا , يلي حابب يتعلم بسرعة وطبعاً المعلومات ضمنو بتعتمد على المرجع السابق :
Design Patterns -- Elements of Reusable Object-Oriented Software by GOF.


Sun's core J2EE Patterns -

خاصة بتصميم النظم المؤسساتية :

http://www.patterndepot.com/put/8/JavaPatterns.htm


C# Design Patterns: A Tutorial -- by James W. Cooper -

خاص بال C# كمان لاحظو أنو نفس الكاتب عامل كتابين واحد بال C# والتاني بالجافا والتنين بيشرحو ال Patterns تبع الكتاب المرجعي يلي هو:

" Design Patterns -- Elements of Reusable Object-Oriented Software by GOF."


أقسام النماذج التصميمة (Design Patterns) :
النـوع الأول: الأنماط البنائية Creational Patterns : هذه الأنماط تركز على كيفية بناء الكائنات التي تريدها وأيضاً على بناء كائن واحد فقط من الصنف .. أي أنه لن يكون بإمكانك استخدام عـدا كائن واحد من الصنف واحد
النـوع الثاني: الأنماط التركيبية Structural Patterns :هذه الأنماط تساعدك على تجميع عـدة كائنـات في هيكل أو تركيب واحد فقط ..
النـوع الثالث: الأنماط السلوكية Behavioral Patterns :هذا النوع من الانماط مهـمة للغاية إذ أنه يركز على كيفية الاتصال بين الكائنـات التي تسخدمها في برنامجك وأيضاً يساعدك على السيطرة على تدفق البرامج المعقدة الكبيرة.

من يجب أن يتعلم Design patterns :
الحقيقة هالمقال موجه للأشخاص المختصين بهندسة البرمجيات وهو جزء من مادة هندسة برمجيات 2 , بالإضافة إلى أن أي شخص يريد أن يزيد خبرته في مجال التحليل والتصميم غرضي التوجه يمكنه قراءة هذا المقال كما يمكن الأستزادة من خلال المراجع المذكورة (يعني ممكن طالب سنة تالتة يتعلم Design Pattens بيكون كتيير ممتاز).
بالاضافة إلى أن أي مبرمج سوف يعمل في بيئة حقيقة يجب عليه الإلتزام بهذه الحلول (Design patterns) في أثناء عمله .
سأحاول إن شاء الله أن أقوم في كل فترة بشرح نموذج تصميمي (Design pattern) ضمن هذا الموضوع -إذا كان في وقت!-
ولكن أتمنى من زملائي المتخصصين بالموضوع أن يقومو بتلخيص الأفكار المهمة لكل (Design pattern) على حدا وأن يتم شرحها من خلال هذا الموضوع .
علماً أنني سأقوم بإرفاق المراجع في وقت أخر .
لكم مني جزيل الشكر .....
Mohammad_807
مشرف منتدى البرمجة العام
مشرف منتدى البرمجة العام
 
مشاركات: 651
اشترك في: الأحد مارس 09, 2008 4:29 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: شبكات و نظم

Re: Design patterns

مشاركة غير مقروءةبواسطة الأمجد توفيق اصطيف » السبت مارس 12, 2011 11:37 pm

هل تسمح لنا أخ محمد أن نأخذ كلامك، ونضعه في الويكبيديا؟
Let's open-source our university!

انضم إلى ويكيلوجيا: ثورة التعاون والإنترنت

أنا مفتوح المصدر، يمكنك الاطلاع على ما أفكر به حالياً من خلال مدونتي
صورة العضو الشخصية
الأمجد توفيق اصطيف
عضو فعال
عضو فعال
 
مشاركات: 636
اشترك في: الأربعاء سبتمبر 09, 2009 7:15 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الثالثة

Re: Design patterns

مشاركة غير مقروءةبواسطة Mohammad_807 » الأحد مارس 13, 2011 6:11 pm

الأمجد توفيق اصطيف كتب:هل تسمح لنا أخ محمد أن نأخذ كلامك، ونضعه في الويكبيديا؟

أكيد موافق :ism: , وما في مشكلة
بس هاد الكلام مو كلامي يعني أنا ماني مخترعو .
هو عبارة عن تلخيص لبعض الأفكار في موقع ويب + مقدمة من كتاب , وعلى فكرة أنا كنت حابب ترجمهن للعربي بس حسيتهن رح يتبهدلو لهيك حطيتهن بالإنكليزي .
وإذا حابين تترجموهن ما في مشكلة ممكن نتساعد , خصوصاً إذا شرحنا ال 23 Patterns يلي مشروحين بالكتب .
طبعاً بمساعدة الطلاب ويُفضل هندسة برمجيات .
Mohammad_807
مشرف منتدى البرمجة العام
مشرف منتدى البرمجة العام
 
مشاركات: 651
اشترك في: الأحد مارس 09, 2008 4:29 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: شبكات و نظم

Re: Design patterns

مشاركة غير مقروءةبواسطة الأمجد توفيق اصطيف » الثلاثاء مارس 15, 2011 8:22 pm

Let's open-source our university!

انضم إلى ويكيلوجيا: ثورة التعاون والإنترنت

أنا مفتوح المصدر، يمكنك الاطلاع على ما أفكر به حالياً من خلال مدونتي
صورة العضو الشخصية
الأمجد توفيق اصطيف
عضو فعال
عضو فعال
 
مشاركات: 636
اشترك في: الأربعاء سبتمبر 09, 2009 7:15 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الثالثة

Re: Design patterns

مشاركة غير مقروءةبواسطة Mohammad_807 » الجمعة إبريل 22, 2011 2:53 pm

MVC & DAO & ORM

اليوم رح نحكي عن أحلى و أشهر Design Pattern على الإطلاق ويلي هو يُعبر بمثابة منهجية (Methodology ) كاملة لكيفية تصميم وبرمجة التطبيقات سواء كانت تطببيقات عادية أو حتى في التطبيقات المؤسساتية الكبيرة .

1.png


الهدف من هذا النموذج هو فصل المكونات الثلاثة عن بعضها البعض بشكل مستقل.
وكما نعلم أن نموذج التصميم هو حل لمكشلة متكررة فما هي المشكلة المتكررة التي يحلها MVC ؟
في الحقيقة الصورة التالية توضح الفكرة .

2.png


1-هي تعدد الواجهات Multiple Views مثلاً الواجهة الأولى هي برنامج Delphi والثانية هي تطبيق ويب والواجهة الثالثة هي تطبيق موبايل . وبالتالي الهدف هو إضافة واجهة جديدة من دون أن نقوم بتغير ال Controller .
2- المشكلة الثانية التي يحلها ال MVC هي تعدد وسائط التخزين Multiple Storage مثلاً ال Model 1 يتعامل مع Access DataBase و ال Model 2 يتعامل مع SqL server DataBase والثالث يتعامل مع Oracle DataBase .

في الحقيقة إن حل المشكلة الثانية يتم من خلال Design Pattern أخر هو DAO (Data Access Object) والذي يؤمن لنا التعامل مع أي قاعدة معطيات بغض النظر عن المزود سواءً كان Access أو SqL sever أو ... .
ولكن قبل هذه الطبقة (DAO) يتم وضع طبقة تُسمى ORM (Object Relational Mapping ) والتي تسمح لنا بقراءة وكتابة الأغراض من وإلى قاعدة المعطيات .

وبالتالي يكون الشكل العام للتطبيق الخاص بنا والذي يخضع لنموذج التصميم MVC حيث أن هذا التقسيم هو تقسيم منطقي كما يلي :

1 (2).png



شرح التقسيمات:
هذه التقسيمات منطقية (نقصد بالمنطقية أن التطبيق في النهاية هو تطبيق واحد مُقسم منطقياً على شكل صفوف أو مكتبات) إلى الأقسام التالية :
1- View : وهي الواجهة التي يتعامل معها المستخدم .

2- Controller : هو الذي يحوي كود منطق العمل (Business Logic Code ) ويجري ضمنه كل عمليات التحقق من المعرفات ID وهذه العمليات تُسمى Authentication بالإضافة إلى عملية التحقق من الصلاحيات وتُسمى هذه العملية أيضاً Authorization .

3- ( DAO & ORM (Model:
لنفرض الآن أننا نريد قراءة غرض من قاعدة المعطيات عندها يتم بناء غرض Object يتم مقابلة هذا الغرض بعدد من الحقول ضمن قاعدة المعطيات بشكل شفاف باستعمال نموذج تصميمي أخر هو ORM (Object Relational Mapping ) أي يتم مقابلة كل غرض لدينا ضمن ال Class Diagram بمجموعة من الحقول ضمن قاعدة المعطيات (تجري عملية التقابل لمرة واحدة فقط ويمكن تعديلها لاحقاً )وبالتالي فأن المبرمج ليس بحاجة إلى كتابة تعليمات SQL والتي لها العديد من المشاكل التي قمنا بذكرها في مقال سابق Transparent Objects Persistence .
ومن ثم يتم توليد تعليمات SQL التي تقوم بإحضار حقول هذا الغرض من قاعدة المعطيات وتمريرها إلى طبقة أخرى حيث يقطن Design Pattern أخر هو DAO والذي يقوم بالتعامل مع N Data Base at Run Time With The Same Code أي أننا نستطيع أن نقوم بالتعامل مع قاعدة معطيات Oracle , MySqL , SqL Server,… بنفس الكود وهذه الفكرة تُعتبر ثورة في عالم برمجة التطبيقات سواء كانت عادية أم مؤسساتية (التطبيقات المؤسساتية هي تطبيقات شبكية ضخمة تخضع للكثير من القواعد ومصممة بشكل خاص لتقوم بتخديم عدد ضخم جداً من الزبائن بكفاءة وفعالية عالية) .

ثم يقوم ال DAO بالإتصال بقاعدة المعطيات واسترجاع المعطيات منها ومن ثم يمررها لل ORM الذي يقوم ببناء الغرض وملئ حقوله من النتيجة التي وصلته ويعيده إلى المبرمج الذي قام بطلب الحصول على قيمة هذا الغرض(النتيجة تعود إلى ال Controller) .
نفس الكلام ينطبق عند طلب المبرمج كتابة أو تحديث قيمة هذا الغرض ضمن قاعدة المعطيات.

ملاحظات :
1- بعض الكتب بتحكي فكرة ال MVC بطريقة انا بعتبرها خاطئة , وهي أن طبقة ال Model تتخاطب مع طبقة ال View
وهذا الكلام غير صحيح (من وجهة نظري) بكل الأحوال سأحاول أن أسأل عن الموضوع.
2- لا يمكن تحقيق الفصل المنطقي بين الطبقات الثلاثة 100% و لكن يجب العمل على هذا النموذج لضمان سرعة تطوير البرمجيات .
3- أرجو من كل الطلاب يلي عم يشتغلو مشاريع أتمتة أو مشاريع Business Application والتي هي غالباً مشاريع طبقة ال View بتكون عالويب , أنو يلتزمو بهاد ال Design Pattern وبمكتبة الكلية في أكتر من مشروع مشغولين على الMVC -دورو بمشاريع الرابعة والخامسة- بتلاقو شي حلو .

شكراً للجميع , وفي حال وجود أسئلة وإستفسارات أنا جاهز .
ليس لديك الصلاحية لمشاهدة المرفقات
Mohammad_807
مشرف منتدى البرمجة العام
مشرف منتدى البرمجة العام
 
مشاركات: 651
اشترك في: الأحد مارس 09, 2008 4:29 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: شبكات و نظم


العودة إلى مقالات

الموجودون الآن

المستخدمون المتصفحون لهذا المنتدى: لا يوجد أعضاء مسجلين متصلين و 1 زائر

cron