نمط تصميم البرمجيات
يصف نمط تصميم البرمجيات حلاً قابلاً لإعادة الاستخدام لسلوك شائع الاستخدام في البرمجيات . [ 1 ] لا يُعد نمط التصميم بنية جامدة تُنسخ مباشرةً إلى شفرة المصدر ، بل هو وصف ونموذج لحل نوع معين من المشكلات، ويمكن استخدامه في سياقات مختلفة، بما في ذلك لغات البرمجة ومنصات الحوسبة المتنوعة . [ 2 ] يمكن اعتبار أنماط التصميم أفضل الممارسات الرسمية التي يمكن للمبرمج استخدامها لحل المشكلات الشائعة عند تصميم البرمجيات.
تُظهر أنماط التصميم الموجهة للكائنات عادةً العلاقات والتفاعلات بين الفئات أو الكائنات ، دون تحديد فئات أو كائنات التطبيق النهائية المعنية. قد لا تكون الأنماط التي تتضمن حالة قابلة للتغيير مناسبة للغات البرمجة الوظيفية . يمكن الاستغناء عن بعض الأنماط في اللغات التي تدعم حل المشكلة التي تحاول حلها بشكل مدمج، كما أن الأنماط الموجهة للكائنات ليست بالضرورة مناسبة للغات غير الموجهة للكائنات. [ 3 ]
تاريخ
نشأت الأنماط كمفهوم معماري على يد كريستوفر ألكسندر في وقت مبكر من عام 1977 في كتابه "لغة الأنماط " (انظر مقالته "نمط الشوارع"، مجلة معهد الفيزياء الأمريكي، سبتمبر 1966، المجلد 32، العدد 5، الصفحات 273-278). في عام 1987، بدأ كينت بيك وورد كانينغهام تجربة فكرة تطبيق الأنماط على البرمجة - وتحديدًا لغات الأنماط - وعرضا نتائجهما في مؤتمر OOPSLA في ذلك العام. [ 4 ] [ 5 ] وفي السنوات اللاحقة، تابع بيك وكانينغهام وآخرون هذا العمل.
اكتسبت أنماط التصميم شعبية في علوم الحاسوب بعد نشر كتاب " أنماط التصميم: عناصر البرمجيات القابلة لإعادة الاستخدام والموجهة للكائنات" عام 1994 من قِبل ما يُعرف بـ"عصابة الأربعة" (إريك غاما، وريتشارد هيلم، ورالف جونسون، وجون فليسيدس)، والتي يُشار إليها اختصارًا بـ"GoF". [ 6 ] وفي العام نفسه، عُقد أول مؤتمر للغات أنماط البرمجة ، وفي العام التالي أُنشئ مستودع أنماط بورتلاند لتوثيق أنماط التصميم.
على الرغم من أن أنماط التصميم قد تم تطبيقها عمليًا لفترة طويلة، إلا أن صياغة مفهوم أنماط التصميم بشكل رسمي قد تراجعت لعدة سنوات. [ 7 ]
يمارس
يمكن لأنماط التصميم تسريع عملية التطوير من خلال توفير نماذج تطوير مُثبتة. [ 8 ] يتطلب تصميم البرمجيات الفعال مراعاة المشكلات التي قد لا تظهر إلا لاحقًا أثناء التنفيذ. غالبًا ما يحتوي الكود المكتوب حديثًا على مشكلات خفية ودقيقة تستغرق وقتًا لاكتشافها، وهي مشكلات قد تتسبب أحيانًا في مشاكل كبيرة لاحقًا. يمكن أن تساعد إعادة استخدام أنماط التصميم في منع هذه المشكلات، [ 9 ] وتحسين سهولة قراءة الكود لمن هم على دراية بهذه الأنماط.
يصعب تطبيق تقنيات تصميم البرمجيات على نطاق أوسع من المشكلات. توفر أنماط التصميم حلولاً عامة، موثقة بصيغة لا تتطلب تفاصيل مرتبطة بمشكلة معينة. [ 10 ]
في عام 1996، دُعي كريستوفر ألكسندر لإلقاء كلمة رئيسية في مؤتمر OOPSLA لعام 1996. تحدث فيها عن تطور عمله في مجال الأنماط في الهندسة المعمارية، وعن آماله في أن يُسهم مجتمع تصميم البرمجيات في توسيع نطاق الأنماط في الهندسة المعمارية لإنشاء هياكل حية تستخدم مخططات توليدية تُشبه إلى حد كبير شفرة الحاسوب.
عزر
يصف النمط تصميمًا برمجيًا ، يُعرف أيضًا باسم بنية دقيقة نموذجية ، كمجموعة من مكونات البرنامج (مثل الفئات والأساليب...) وعلاقاتها. يقوم المطور بتكييف هذا التصميم مع قاعدة بياناته البرمجية لحل المشكلة التي يصفها النمط. يتميز الكود الناتج ببنية وتنظيم مشابهين للتصميم المختار.
أنماط خاصة بالمجال
بُذلت جهودٌ أيضًا لتقنين أنماط التصميم في مجالاتٍ مُحددة، بما في ذلك استخدام أنماط التصميم الموجودة، بالإضافة إلى أنماط التصميم الخاصة بكل مجال. ومن الأمثلة على ذلك أنماط تصميم واجهة المستخدم ، [ 11 ] وتصور المعلومات ، [ 12 ] والتصميم الآمن، [ 13 ] و "سهولة الاستخدام الآمنة"، [ 14 ] وتصميم مواقع الويب ، [ 15 ] وتصميم نماذج الأعمال. [ 16 ]
تتضمن وقائع المؤتمر السنوي للغات الأنماط في البرمجة العديد من الأمثلة على الأنماط الخاصة بمجال معين. [ 17 ]
البرمجة الكائنية التوجه
تُظهر أنماط التصميم الموجهة للكائنات عادةً العلاقات والتفاعلات بين الفئات أو الكائنات ، دون تحديد فئات أو كائنات التطبيق النهائية المعنية. قد لا تكون الأنماط التي تتضمن حالة قابلة للتغيير مناسبة للغات البرمجة الوظيفية . يمكن الاستغناء عن بعض الأنماط في اللغات التي تدعم حل المشكلة التي تحاول حلها بشكل مدمج، كما أن الأنماط الموجهة للكائنات ليست بالضرورة مناسبة للغات غير الموجهة للكائنات.
أمثلة
يمكن تنظيم أنماط التصميم في مجموعات بناءً على نوع المشكلة التي تحلها.
إبداعي
يقوم النمط الإبداعي بإنشاء الكائنات.
| اسم | وصف | في أنماط التصميم | في Code Complete [ 18 ] | آخر |
|---|---|---|---|---|
| مصنع التجريد | توفير واجهة لإنشاء مجموعات من الكائنات ذات الصلة أو التابعة دون تحديد فئاتها الملموسة. | نعم | نعم | غير متوفر |
| باني | افصل عملية بناء كائن معقد عن تمثيله، مما يسمح لعملية البناء نفسها بإنشاء تمثيلات مختلفة. | نعم | نعم | غير متوفر |
| حقن التبعية | تقبل الفئة الكائنات التي تحتاجها من مُحقِّن بدلاً من إنشاء الكائنات مباشرةً. | غير متوفر | نعم | غير متوفر |
| أسلوب المصنع | حدد واجهة لإنشاء كائن واحد ، ولكن دع الفئات الفرعية تحدد أي فئة يتم إنشاء مثيل لها. تسمح طريقة المصنع للفئة بتأجيل إنشاء المثيل إلى الفئات الفرعية. | نعم | نعم | غير متوفر |
| التهيئة الكسولة | تكتيك لتأجيل إنشاء كائن، أو حساب قيمة، أو أي عملية أخرى مكلفة حتى الحاجة إليها لأول مرة. يظهر هذا النمط في دليل GoF تحت مسمى "الوكيل الافتراضي"، وهو استراتيجية تنفيذ لنمط الوكيل . | نعم | نعم | PoEAA [ 19 ] |
| متعدد الأطنان | تأكد من أن الفئة تحتوي فقط على مثيلات مسماة، ووفر نقطة وصول عالمية إليها. | نعم | نعم | نعم |
| مجموعة الكائنات | تجنب تكاليف شراء الموارد وتحريرها الباهظة عن طريق إعادة تدوير العناصر التي لم تعد قيد الاستخدام. يمكن اعتبار ذلك تعميمًا لأنماط مجمع الاتصالات ومجمع الخيوط . | نعم | نعم | نعم |
| النموذج الأولي | حدد أنواع الكائنات المراد إنشاؤها باستخدام نموذج أولي، وقم بإنشاء كائنات جديدة من "الهيكل" لكائن موجود، مما يعزز الأداء ويقلل من استهلاك الذاكرة إلى الحد الأدنى. | نعم | نعم | نعم |
| الاستحواذ على الموارد هو التهيئة (RAII) | تأكد من تحرير الموارد بشكل صحيح من خلال ربطها بعمر الأشياء المناسبة. | نعم | نعم | نعم |
| سينغلتون | تأكد من أن لكل فئة نسخة واحدة فقط، ووفر نقطة وصول عالمية إليها. | نعم | نعم | نعم |
الهيكلي
يقوم النمط الهيكلي بتنظيم الفئات والكائنات لتشكيل هياكل أكبر توفر وظائف جديدة.
| اسم | وصف | في أنماط التصميم | في Code Complete [ 18 ] | آخر |
|---|---|---|---|---|
| المحوّل ، أو الغلاف، أو المترجم | يُحوّل المُهايئ واجهة فئة ما إلى واجهة أخرى يتوقعها العملاء. يسمح المُهايئ للفئات بالعمل معًا والتي لا يمكنها ذلك لولا وجود واجهات غير متوافقة. ويُقابله في نمط تكامل المؤسسات المُترجم. | نعم | نعم | نعم |
| كوبري | افصل التجريد عن تنفيذه مما يسمح لهما بالتغير بشكل مستقل. | نعم | نعم | نعم |
| مركب | قم بتجميع الكائنات في هياكل شجرية لتمثيل التسلسلات الهرمية بين الجزء والكل. يتيح التركيب للعملاء التعامل مع الكائنات الفردية وتراكيب الكائنات بشكل موحد. | نعم | نعم | نعم |
| مصمم ديكور | أضف مسؤوليات إضافية إلى كائن ما ديناميكيًا مع الحفاظ على نفس الواجهة. توفر الزخارف بديلاً مرنًا للتوريث لتوسيع الوظائف. | نعم | نعم | نعم |
| وفد | قم بتوسيع فئة عن طريق التركيب بدلاً من التوريث. يقوم الكائن بمعالجة الطلب عن طريق تفويضه إلى كائن ثانٍ (المفوض). | نعم | نعم | نعم |
| كائن الامتداد | إضافة وظائف إلى التسلسل الهرمي دون تغيير التسلسل الهرمي نفسه. | نعم | نعم | نعم |
| الواجهة | توفر واجهة موحدة لمجموعة من الواجهات في نظام فرعي. تحدد الواجهة واجهة ذات مستوى أعلى تجعل استخدام النظام الفرعي أسهل. | نعم | نعم | نعم |
| وزن الذبابة | استخدم خاصية المشاركة لدعم أعداد كبيرة من الكائنات المتشابهة بكفاءة. | نعم | نعم | نعم |
| وحدة التحكم الأمامية | يرتبط هذا النمط بتصميم تطبيقات الويب، حيث يوفر نقطة دخول مركزية لمعالجة الطلبات. | نعم | نعم | |
| علامة | واجهة فارغة لربط البيانات الوصفية بفئة. | نعم | نعم | جافا الفعالة [ 22 ] |
| وحدة | قم بتجميع عدة عناصر ذات صلة، مثل الفئات، والعناصر الفردية، والأساليب، المستخدمة عالميًا، في كيان مفاهيمي واحد. | نعم | نعم | نعم |
| الوكيل | قم بتوفير بديل أو عنصر نائب لكائن آخر للتحكم في الوصول إليه. | نعم | نعم | نعم |
| توأم [ 23 ] | تتيح تقنية Twin نمذجة الوراثة المتعددة في لغات البرمجة التي لا تدعم هذه الميزة. | نعم | نعم | نعم |
السلوكي
يصف النمط السلوكي التعاون بين الأشياء.
| اسم | وصف | في أنماط التصميم | في Code Complete [ 18 ] | آخر |
|---|---|---|---|---|
| سبورة | نمط الذكاء الاصطناعي لدمج مصادر البيانات المتباينة (انظر نظام السبورة السوداء ) | نعم | نعم | نعم |
| سلسلة المسؤولية | تجنب ربط مُرسِل الطلب بمُستقبِله بإتاحة الفرصة لأكثر من كائن واحد لمعالجة الطلب. قم بربط الكائنات المُستقبِلة وتمرير الطلب عبر السلسلة حتى يقوم أحد الكائنات بمعالجته. | نعم | نعم | نعم |
| يأمر | يُتيح تغليف الطلب ككائن إمكانية تخصيص العملاء بطلبات مختلفة، بالإضافة إلى إمكانية وضع الطلبات في قائمة انتظار أو تسجيلها. كما يُتيح دعم العمليات القابلة للتراجع. | نعم | نعم | نعم |
| واجهة سلسة | صمم واجهة برمجة تطبيقات (API) بحيث تكون متسلسلة الأساليب بحيث تُقرأ كلغة برمجة خاصة بالمجال (DSL). كل استدعاء أسلوب يُعيد سياقًا يُتيح من خلاله استدعاء الأسلوب المنطقي التالي (أو الاستدعاءات التالية). | نعم | نعم | نعم |
| مترجم | بالنظر إلى لغة معينة، حدد تمثيلاً لقواعدها النحوية بالإضافة إلى مترجم يستخدم هذا التمثيل لتفسير الجمل في تلك اللغة. | نعم | نعم | نعم |
| المُكرِّر | توفير طريقة للوصول إلى عناصر كائن مجمع بشكل تسلسلي دون الكشف عن تمثيله الأساسي. | نعم | نعم | نعم |
| الوسيط | عرّف كائنًا يجسّد كيفية تفاعل مجموعة من الكائنات. يعزز الوسيط الترابط المرن بمنع الكائنات من الإشارة إلى بعضها البعض بشكل صريح، ويسمح بتغير تفاعلها بشكل مستقل. | نعم | نعم | نعم |
| تذكار | دون انتهاك مبدأ التغليف، يتم التقاط الحالة الداخلية للكائن وإخراجها إلى الخارج مما يسمح باستعادة الكائن إلى هذه الحالة لاحقًا. | نعم | نعم | نعم |
| كائن فارغ | تجنب المراجع الفارغة من خلال توفير كائن افتراضي. | نعم | نعم | نعم |
| مراقب أو ناشر/مشترك | قم بتحديد تبعية من واحد إلى متعدد بين الكائنات حيث يؤدي تغيير الحالة في كائن واحد إلى إخطار جميع الكائنات التابعة له وتحديثها تلقائيًا. | نعم | نعم | نعم |
| خادم | يُعرّف نمط الخادم وظائف مشتركة لمجموعة من الفئات. ويُطلق عليه أيضًا اسم فئة المساعدة أو فئة الأدوات المساعدة، وهو تطبيق لمجموعة معينة من الفئات. لا تحتوي فئات المساعدة عادةً على كائنات، لذا فهي تحتوي على جميع الطرق الثابتة التي تعمل على أنواع مختلفة من كائنات الفئات. | نعم | نعم | نعم |
| مواصفة | منطق الأعمال القابل لإعادة التركيب بطريقة منطقية . | نعم | نعم | نعم |
| ولاية | اسمح للكائن بتغيير سلوكه عند تغير حالته الداخلية. سيبدو الكائن وكأنه قد غيّر فئته. | نعم | نعم | نعم |
| استراتيجية | حدد مجموعة من الخوارزميات، وقم بتغليف كل منها، واجعلها قابلة للتبديل. تسمح الاستراتيجية للخوارزمية بالتغير بشكل مستقل عن العملاء الذين يستخدمونها. | نعم | نعم | نعم |
| طريقة القالب | يُحدد الهيكل الأساسي للخوارزمية في عملية ما، مع تأجيل بعض الخطوات إلى الفئات الفرعية. تسمح طريقة القالب للفئات الفرعية بإعادة تعريف خطوات معينة من الخوارزمية دون تغيير هيكلها. | نعم | نعم | نعم |
| زائر | يمثل هذا عمليةً تُجرى على نسخ من مجموعة من الفئات. يسمح الزائر بتعريف عملية جديدة دون تغيير فئات العناصر التي تُجرى عليها. | نعم | نعم | نعم |
التزامن
يدعم نمط التزامن المعالجة المتزامنة .
| اسم | وصف | في POSA2 [ 24 ] | آخر |
|---|---|---|---|
| الكائن النشط | يفصل هذا الأسلوب تنفيذ الدوال عن استدعاءاتها، حيث توجد كل دالة في مسار تحكم مستقل. والهدف هو إدخال التزامن، باستخدام استدعاء الدوال غير المتزامن وجدول زمني لمعالجة الطلبات. | نعم | غير متوفر |
| التهرب من المسؤولية | لا تقم بتنفيذ إجراء على كائن إلا عندما يكون الكائن في حالة معينة. [ 25 ] | لا | غير متوفر |
| خصائص الربط | دمج عدة مراقبين لإجبار خصائص الكائنات المختلفة على التزامن أو التنسيق بطريقة ما. [ 26 ] [ 27 ] | لا | غير متوفر |
| حساب النواة | نفس الحساب عدة مرات بالتوازي، ويختلف باختلاف المعلمات الصحيحة المستخدمة مع عمليات حسابية للمؤشرات غير المتفرعة في مصفوفات مشتركة، مثل ضرب المصفوفات المحسن بواسطة وحدة معالجة الرسومات أو الشبكة العصبية الالتفافية . | لا | غير متوفر |
| تم التحقق من القفل مرتين | قلل من عبء الحصول على القفل عن طريق اختبار معيار القفل (تلميح القفل) أولاً بطريقة غير آمنة؛ فقط إذا نجح ذلك، يتم تنفيذ منطق القفل الفعلي. قد يكون غير آمن عند تطبيقه في بعض تركيبات اللغات/الأجهزة. لذلك، يمكن اعتباره أحيانًا نمطًا سيئًا . | نعم | غير متوفر |
| غير متزامن قائم على الأحداث | يتناول هذا البحث المشاكل المتعلقة بالنمط غير المتزامن التي تحدث في البرامج متعددة الخيوط. [ 28 ] | لا | غير متوفر |
| نظام تعليق محمي | يدير العمليات التي تتطلب الحصول على قفل واستيفاء شرط مسبق قبل تنفيذ العملية. | لا | غير متوفر |
| ينضم | يُتيح نمط الربط كتابة برامج متزامنة ومتوازية وموزعة عبر تمرير الرسائل. وبالمقارنة مع استخدام الخيوط والأقفال، يُعد هذا نموذج برمجة عالي المستوى. | لا | غير متوفر |
| قفل | يقوم أحد الخيوط بوضع "قفل" على مورد ما، مما يمنع الخيوط الأخرى من الوصول إليه أو تعديله. [ 27 ] | لا | PoEAA [ 19 ] |
| نمط تصميم المراسلة (MDP) | يسمح بتبادل المعلومات (أي الرسائل) بين المكونات والتطبيقات. | لا | غير متوفر |
| كائن المراقبة | كائن تخضع أساليبه للاستبعاد المتبادل ، مما يمنع عدة كائنات من محاولة استخدامه في نفس الوقت عن طريق الخطأ. [ 25 ] | نعم | غير متوفر |
| مفاعل | يوفر كائن المفاعل واجهة غير متزامنة للموارد التي يجب التعامل معها بشكل متزامن. | نعم | غير متوفر |
| قفل القراءة والكتابة | يسمح بالوصول المتزامن للقراءة إلى كائن، ولكنه يتطلب وصولاً حصرياً لعمليات الكتابة. [ 25 ] قد يتم استخدام إشارة أساسية للكتابة، وقد يتم استخدام آلية النسخ عند الكتابة أو لا. | لا | غير متوفر |
| جدولة | تحكم بشكل صريح في متى يمكن للخيوط تنفيذ التعليمات البرمجية أحادية الخيوط. | لا | غير متوفر |
| نمط معالج الخدمة | لكل طلب، يقوم الخادم بإنشاء معالج عميل مخصص لمعالجة الطلب. [ 29 ] ويُشار إليه أيضًا باسم "خيط لكل جلسة" . [ 30 ] | لا | غير متوفر |
| مجموعة الخيوط | يتم إنشاء عدد من الخيوط لتنفيذ عدد من المهام، والتي تُنظم عادةً في قائمة انتظار. في العادة، يكون عدد المهام أكبر بكثير من عدد الخيوط. ويمكن اعتبار هذا حالة خاصة من نمط مجمع الكائنات . | لا | غير متوفر |
| تخزين خاص بالخيط | الذاكرة الثابتة أو "العامة" المحلية الخاصة بخيط معين. | نعم | غير متوفر |
| التزامن الآمن مع الملكية الحصرية | يُغني استخدام آليات التزامن أثناء التشغيل عن الحاجة إليها، إذ يُمكن إثبات الملكية الحصرية. تُعدّ هذه ميزة بارزة في لغة Rust، لكن التحقق أثناء الترجمة ليس الوسيلة الوحيدة، فغالبًا ما يُصمّم المبرمج هذه الأنماط يدويًا في الكود، متجاوزًا استخدام آليات التأمين، لأنه يُقيّم أن متغيرًا مُعينًا لن يتم الوصول إليه بشكل متزامن أبدًا. | لا | غير متوفر |
| عملية ذرية لوحدة المعالجة المركزية | تدعم معمارية x86 وغيرها من معمارية المعالجات المركزية مجموعة من التعليمات الذرية التي تضمن سلامة الذاكرة عند تعديل القيم الأولية (الأعداد الصحيحة) والوصول إليها. على سبيل المثال، يمكن لخيطين زيادة عداد بأمان. يمكن أيضًا استخدام هذه الإمكانيات لتنفيذ آليات أنماط التزامن الأخرى المذكورة أعلاه. تستخدم لغة C# فئة Interlocked لهذه الإمكانيات. | لا | غير متوفر |
الوثائق
تصف وثائق نمط التصميم السياق الذي يُستخدم فيه النمط، والقوى الكامنة في هذا السياق التي يسعى النمط إلى حلها، والحل المقترح. [ 31 ] لا يوجد تنسيق موحد ومعياري لتوثيق أنماط التصميم، بل استخدم مؤلفو الأنماط تنسيقات مختلفة. مع ذلك، ووفقًا لمارتن فاولر ، أصبحت بعض أشكال الأنماط أكثر شيوعًا من غيرها، وبالتالي أصبحت نقاط انطلاق شائعة لجهود كتابة الأنماط الجديدة. [ 32 ] ومن الأمثلة على تنسيقات التوثيق الشائعة الاستخدام، التنسيق الذي استخدمه إريك غاما ، وريتشارد هيلم ، ورالف جونسون ، وجون فليسيدس في كتابهم " أنماط التصميم" . ويتضمن الأقسام التالية:
- اسم
- اسم وصفي وفريد يساعد في تحديد النمط والإشارة إليه.
- نية
- وصف للهدف من وراء هذا النمط وسبب استخدامه.
- يُعرف أيضًا باسم
- أسماء أخرى لهذا النمط.
- تحفيز
- سيناريو يتكون من مشكلة وسياق يمكن فيه استخدام هذا النمط.
- قابلية التطبيق
- الحالات التي يكون فيها هذا النمط قابلاً للاستخدام؛ سياق استخدام النمط.
- بناء
- تمثيل بياني للنمط. يمكن استخدام مخططات الفئات ومخططات التفاعل لهذا الغرض.
- مشاركون
- قائمة بالفئات والكائنات المستخدمة في النمط وأدوارها في التصميم.
- تعاون
- وصف لكيفية تفاعل الفئات والكائنات المستخدمة في النمط مع بعضها البعض.
- عواقب
- وصف للنتائج والآثار الجانبية والمفاضلات الناتجة عن استخدام هذا النمط.
- تطبيق
- وصف لتطبيق النمط؛ جزء الحل من النمط.
- نموذج التعليمات البرمجية
- توضيح لكيفية استخدام النمط في لغة برمجة.
- الاستخدامات المعروفة
- أمثلة على الاستخدامات الحقيقية لهذا النمط.
- أنماط ذات صلة
- أنماط أخرى لها علاقة ما بالنمط؛ مناقشة الاختلافات بين النمط والأنماط المشابهة.
نقد
يرى البعض أن الحاجة إلى نمط تصميم قد تكون مؤشرًا على غياب ميزة معينة في لغة البرمجة. يوضح بيتر نورفيج أن 16 نمطًا من أصل 23 نمطًا في كتاب أنماط التصميم (الذي يركز بشكل أساسي على لغة C++) قد تم تبسيطها أو حذفها (عبر دعم اللغة المباشر) في لغتي Lisp أو Dylan . [ 33 ] وقد توصل هانيمان وكيزاليس (2002) إلى ملاحظات مماثلة، حيث قاما بتطبيق العديد من أنماط التصميم الـ 23 باستخدام لغة برمجة موجهة نحو الجوانب (AspectJ)، وأظهرا أنه تم إزالة التبعيات على مستوى الكود من تطبيقات 17 نمطًا من أنماط التصميم الـ 23، وأن البرمجة الموجهة نحو الجوانب يمكن أن تبسط تطبيقات أنماط التصميم. [ 34 ] انظر أيضًا مقال بول جراهام "انتقام المهووسين". [ 35 ]
قد يؤدي الاستخدام غير المناسب للأنماط إلى زيادة التعقيد بلا داعٍ. [ 36 ]
بحسب التعريف، يجب برمجة النمط من جديد في كل تطبيق يستخدمه. [ 37 ] ولأن بعض الباحثين يرون في ذلك تراجعًا عن إعادة استخدام البرمجيات كما توفرها المكونات ، فقد عمل الباحثون على استخدام إمكانيات البرمجة العامة لتحويل الأنماط إلى مكونات، في عملية تُسمى التجزئة إلى مكونات . [ 38 ] [ 39 ] وقد تمكن ماير وأرنوت (2006) من توفير تجزئة كاملة أو جزئية لثلثي الأنماط التي حاولوا تطبيقها. [ 40 ]
لتحقيق المرونة، قد تُدخل أنماط التصميم مستويات إضافية من التوجيه غير المباشر ، مما قد يؤدي إلى تعقيد التصميم الناتج وتقليل أداء وقت التشغيل .
متعلق ب
المفاهيم التالية متشابهة في طبيعتها العامة ولكنها تختلف عن نمط تصميم البرمجيات: [ 41 ] [ 42 ] [ 19 ] [ 43 ]
- نمط هندسة البرمجيات
- حلٌّ قابلٌ لإعادة الاستخدام ومُجرَّبٌ لمشكلةٍ متكررةٍ على مستوى النظام، يُعالج المخاوف المتعلقة بالبنية العامة، وتفاعلات المكونات، وخصائص جودة النظام. [ 44 ] تعمل أنماط هندسة البرمجيات على مستوى تجريدٍ أعلى من أنماط التصميم، حيث تُعالج تحدياتٍ أوسع نطاقًا على مستوى النظام. في حين أن هذه الأنماط تؤثر عادةً على مخاوف مستوى النظام، إلا أن التمييز بين أنماط الهندسة المعمارية وأساليبها قد يكون غير واضحٍ أحيانًا. ومن الأمثلة على ذلك قاطع الدائرة . [ 41 ] [ 42 ] [ 19 ]
- أسلوب هندسة البرمجيات
- تنظيم هيكلي رفيع المستوى يُحدد بنية النظام ككل، ويُبين كيفية تنظيم المكونات، وكيفية تفاعلها، والقيود المفروضة على هذه التفاعلات. تتضمن أنماط البنية عادةً مُفردات لأنواع المكونات والوصلات، بالإضافة إلى نماذج دلالية لتفسير خصائص النظام. تُمثل هذه الأنماط المستوى الأكثر عمومية لتنظيم النظام. ومن الأمثلة عليها: البنية الطبقية ، والخدمات المصغرة ، والبنية الموجهة بالأحداث . [ 41 ] [ 42 ] [ 19 ]
- نمط التنفيذ
- يُفرّق بيك بين أنماط التصميم، التي تصف عمومًا العلاقات بين الفئات، وأنماط التنفيذ ، التي غالبًا ما تقتصر على فئة واحدة. [ 45 ] وانطلاقًا من هذا، يُعرّف إيجلبرجر (2022) نمط التنفيذ بأنه أسلوب برمجي لا يُضيف تجريدًا، وبالتالي يقع ضمن مستوى تفاصيل التنفيذ. [ 46 ] ولهذا السبب، غالبًا ما تكون هذه الأنماط خاصة بلغة البرمجة المستخدمة، مع اعتبار النسخ والتبديل و RAII مثالين على ذلك في لغة C++، [ 43 ] مع أن هذه الأساليب قد تُشكّل أنماط تصميم حقيقية في لغات أخرى. [ 47 ]
انظر أيضاً
- مبدأ التجريد
- الهيكل الخوارزمي
- نمط مضاد
- النمط المعماري
- نمط البروتوكول المتعارف عليه
- أنماط تصحيح الأخطاء
- نمط التصميم
- أنماط التصميم الموزعة
- إطار عمل هندسة المؤسسة
- GRASP (التصميم الموجه للكائنات)
- فئة مساعدة
- نمط تصميم التفاعل
- قائمة أنماط وأساليب هندسة البرمجيات
- قائمة فلسفات تطوير البرمجيات
- قائمة بمواضيع هندسة البرمجيات
- لغة الأنماط
- نظرية الأنماط
- الأنماط التربوية
- مستودع أنماط بورتلاند
- مصطلحات البرمجة
- إعادة هيكلة
- منهجية تطوير البرمجيات
مراجع
الاقتباسات
- ↑ ألكسندريسكو، أندريه (2001). تصميم لغة C++ الحديثة: البرمجة العامة وتطبيقات أنماط التصميم . أديسون-ويسلي. ص. xviii. ISBN 978-0-201-70431-0.
- ↑ هورنر، مارك (2005). "الأنماط" . معايير تصميم وبرمجة Pro .NET 2.0 في لغة C# . دار نشر Apress. الصفحات 171-181 . ISBN 978-1-59059-560-2.
- ↑ سيسيليا، جين (10 يونيو 2026). "التحول الأنطولوجي لهندسة البرمجيات: أهمية أنماط التصميم في لغات البرمجة الحديثة" . تم الاطلاع عليه بتاريخ 10 يونيو 2026 .
- ↑ سميث، ريد (1987). "حلقة نقاش حول منهجية التصميم: جلسة نقاش OOPSLA '87" . إشعارات ACM SIGPLAN . 23 (5). رابطة آلات الحوسبة . doi : 10.1145/62138.62151 .
حذر وارد من الإفراط في طلب البرمجة، فيما أسماه "المستوى المتقدم للخبراء". وأشار إلى أن "لغة الأنماط" المكتوبة يمكن أن تُحسّن بشكل كبير من اختيار وتطبيق المفاهيم المجردة. واقترح "تحولًا جذريًا في عبء التصميم والتنفيذ"، مُؤسسًا المنهجية الجديدة على تكييف عمل كريستوفر ألكسندر في لغات الأنماط، وأن لغات الأنماط الموجهة للبرمجة التي طُوّرت في
شركة تيكترونيكس
قد ساعدت بشكل كبير في جهود تطوير البرمجيات لديهم.
- ↑ بيك، كينت ؛ كانينغهام، وارد (سبتمبر 1987). استخدام لغات الأنماط للبرمجة كائنية التوجه . ورشة عمل OOPSLA '87 حول المواصفات والتصميم للبرمجة كائنية التوجه . تم الاطلاع عليه بتاريخ 26 مايو 2006 .
- ↑ بيك وآخرون (1996) ، ص 104، 106.
- ^ باروني، ألين لوسيا؛ غيهينوك، يان جايل؛ هيرفي ألبين أميوت (يونيو 2003). إضفاء الطابع الرسمي على أنماط التصميم (تقرير). التقرير الفني لـEMN. نانت : المدرسة الوطنية العليا للتقنيات الصناعية والمناجم في نانت. سيتيسيركس 10.1.1.62.6466 . S2CID 624834 – عبر ResearchGate.
- ↑ بيشوب، جوديث (ديسمبر 2007). أنماط تصميم C# 3.0 . دار نشر أورايلي ميديا. رقم ISBN 978-0596527730.
- ↑ تياكو، بيير ف. (31 مارس 2009). "النمذجة الرسمية وتحديد أنماط التصميم باستخدام RTPA" . في تياكو، بيير ف. (محرر). تطبيقات البرمجيات: المفاهيم والمنهجيات والأدوات والتطبيقات . ص 636. doi : 10.4018/978-1-60566-060-8 . ISBN 9781605660615.
- ↑ بيك وآخرون (1996) ، ص 109.
- ↑ لاكسو، ساري أ. (16-09-2003). "مجموعة أنماط تصميم واجهة المستخدم" . جامعة هلسنكي، قسم علوم الحاسوب . تم الاسترجاع في 31-01-2008 .
- ↑ هير، ج.؛ أغراوالا، م. (2006). "أنماط تصميم البرمجيات لتصور المعلومات" . معاملات IEEE في التصور ورسومات الحاسوب . 12 (5): 853-860 . CiteSeerX 10.1.1.121.4534 . doi : 10.1109 / TVCG.2006.178 . PMID 17080809. S2CID 11634997 .
- ↑ دوغيرتي، سي.؛ ساير، ك.؛ سيكورد، آر سي؛ سفوبودا، د.؛ توغاشي، ك. (2009). أنماط التصميم الآمن . معهد هندسة البرمجيات، جامعة كارنيجي ميلون . doi : 10.1184/R1/6583640.v1 .
- ↑ غارفينكل، سيمسون ل. (2005). مبادئ وأنماط تصميم أنظمة الحاسوب التي تتسم بالأمان وسهولة الاستخدام في آن واحد (أطروحة دكتوراه). معهد ماساتشوستس للتكنولوجيا . hdl : 1721.1/33204 .
- ↑ دياز، ب.؛ روسون، م.ب.؛ إيدو، إ.؛ كارول، ج.م. (مارس 2009). "أنماط تصميم الويب: دراسة أهداف المستخدم واستراتيجيات التصفح". في: بايبك، ف.؛ روسون، م.ب.؛ دي رويتر، ب.؛ وولف، ف. (محررون). تطوير المستخدم النهائي . الندوة الدولية الثانية حول تطوير المستخدم النهائي. سلسلة محاضرات في علوم الحاسوب . المجلد 5435. هايدلبرغ: سبرينغر برلين . الصفحات 186-204 . doi : 10.1007/978-3-642-00427-8_11 . ISBN 978-3-642-00427-8.
- ↑ أمشوف، ب.؛ دولم، س.؛ إشترفيلد، ج.؛ غاوسماير، ج. (2015). "أنماط نماذج الأعمال للتقنيات الثورية". المجلة الدولية لإدارة الابتكار . 19 (03). مطبعة إمبريال كوليدج : 1540002. doi : 10.1142/S1363919615400022 . ISSN 1757-5877 .
- ↑ لغات أنماط البرمجة، وقائع المؤتمر (سنوي، 1994-)
- 1 2 3 ماكونيل (2004) ، ص 104-105.
- 1 2 3 4 5 فاولر (2002) .
- ^ ألور، كروبي ومالكس (2003) ، ص. 166.
- ↑ فاولر (2002) ، ص 344.
- ↑ بلوخ، جوشوا (2008). "البند 37: استخدام واجهات العلامات لتعريف الأنواع" . جافا الفعالة (الطبعة الثانية ). أديسون - ويسلي. ص 179. ISBN 978-0-321-35668-0.
- ↑ موسنبوك، هانزبيتر (يوليو 1999). "التوأم - نمط تصميم لنمذجة الوراثة المتعددة" (ملف PDF) . وقائع المؤتمر الدولي الثالث التذكاري لأندريه إرشوف حول آفاق معلوماتية النظم . PSI '99. نوفوسيبيرسك، روسيا: سبرينغر-فيرلاغ . الصفحات 358-369 . ISBN 978-3-540-67102-2.
- ↑ شميدت، دوغلاس سي؛ ستال، مايكل؛ رونيرت، هانز؛ بوشمان، فرانك (2000). هندسة البرمجيات الموجهة بالأنماط، المجلد 2: أنماط الكائنات المتزامنة والمتصلة بالشبكة . جون وايلي وأولاده. ISBN 978-0-471-60695-6.
- 1 2 3 Zheng & Harper (2010) ، ص 42.
- ↑ خصائص الربط
- 1 2 غابريجيليتش، بريموز (27 فبراير 2019). "مقدمة للأنماط". التدريب العملي على أنماط التصميم مع دلفي . نشر الحزمة. ص 9 – 35. ردمك 978-178934324-3.
- ↑ ناجل، سي.؛ إيفين، بي.؛ جلين، ج.؛ واتسون، ك.؛ سكينر، إم. (2008). "نمط البرمجة غير المتزامنة القائم على الأحداث". لغة سي شارب الاحترافية 2008. وايلي. الصفحات 570-571 . ISBN 978-0-470-19137-8.
- ↑ فرانكالنزا، أدريان؛ تابون، جيرارد (أكتوبر 2023). " ElixirST: نظام أنواع قائم على الجلسات لوحدات Elixir" . مجلة الأساليب المنطقية والجبرية في البرمجة . 135. doi : 10.1016/j.jlamp.2023.100891 . S2CID 251442539 .
- ↑ شميدت، دوغلاس سي؛ فينوسكي، ستيف (يوليو-أغسطس 1996). "ترابط الكائنات: مقارنة تقنيات البرمجة البديلة لخوادم كوربا متعددة الخيوط (العمود 7)" (ملف PDF) . تقرير SIGS C++ . S2CID 2654843 .
- ↑ غابرييل، ديك . "تعريف النمط" . مؤرشف من الأصل بتاريخ 2007-02-09 . تم الاسترجاع بتاريخ 2007-03-06 .
- ↑ فاولر، مارتن (2006-08-01). "كتابة أنماط البرمجيات" . تم الاسترجاع في 2007-03-06 .
- ↑ نورفيج، بيتر (1998). أنماط التصميم في اللغات الديناميكية . عالم الكائنات.
- ↑ هانيمان، يان؛ كيتزاليس، غريغور (2002). "تنفيذ أنماط التصميم في جافا وأسبكت جيه". وقائع المؤتمر السابع عشر لجمعية ACM SIGPLAN حول البرمجة الكائنية التوجه، والأنظمة، واللغات، والتطبيقات . OOPSLA '02. الصفحات 161-173 . doi : 10.1145/582419.582436 . ISBN 1581134711.
- ↑ غراهام، بول (2002). "انتقام المهووسين" . تم الاسترجاع في 11 أغسطس 2012 .
- ↑ ماكونيل (2004) ، ص 105.
- ^ جاما وآخرون. (1995) ، ص. 3.
- ↑ أرنوت، كارين مارغريت أليس (2004). من الأنماط إلى المكونات (أطروحة دكتوراه). سويسرا: المعهد الفدرالي السويسري للتكنولوجيا في زيورخ . doi : 10.3929/ethz-a-004715194 . hdl : 20.500.11850/72828 .
- ↑ أوليفيرا، بي سي دي إس؛ وانغ، إم؛ غيبونز، جيه (19 أكتوبر 2008). "نمط الزائر كمكون قابل لإعادة الاستخدام، وعام، وآمن من حيث النوع" . إشعارات ACM SIGPLAN . 43 (10). رابطة آلات الحوسبة : 439-456 . doi : 10.1145/1449955.1449799 . eISSN 1558-1160 .
- ↑ ماير، برتراند ؛ أرنوت، كارين (يوليو 2006). "التجزئة: مثال الزائر" (ملف PDF) . مجلة الكمبيوتر . 39 (7). معهد مهندسي الكهرباء والإلكترونيات : 23-30 . CiteSeerX 10.1.1.62.6082 . doi : 10.1109/MC.2006.227 . S2CID 15328522 .
- 1 2 3 ريتشاردز وفورد (2020) .
- 1 2 3 جاما وآخرون (1995) .
- 1 2 إيجلبرجر (2022) ، ص. 8.
- ↑ بابار، محمد علي؛ كيتشنهام، باربرا؛ ماهيشواري، بيوش (2006). "تقييم قيمة المعلومات المعمارية المستخرجة من الأنماط في تصميم البرمجيات" . المؤتمر الدولي العاشر للتقييم والتحليل في هندسة البرمجيات (EASE) . doi : 10.14236/ewic/ease2006.6 . ISSN 1477-9358 . تاريخ الاسترجاع: 6 مايو 2026 .
- ↑ بيك (2007) ، الفصل 5.
- ↑ إيجلبرجر (2022) ، ص 5-8.
- ↑ إيجلبرجر (2022) ، ص 404.
فهرس
- ألور، ديباك؛ كروبي، جون؛ مالكس، دان (مايو 2003). أنماط J2EE الأساسية: أفضل الممارسات واستراتيجيات التصميم (الطبعة الثانية ). برنتيس هول . ISBN 978-0-13-142246-9.
- بيك، كينت (أكتوبر 2007). أنماط التنفيذ . أديسون-ويسلي . ISBN 978-0-321-41309-3.
- فاولر، مارتن (2002). أنماط هندسة تطبيقات المؤسسات . أديسون-ويسلي . ISBN 978-0-321-12742-6.
- جاما، إريك ؛ هيلم، ريتشارد ؛ جونسون، رالف ؛ فليسيدس، جون (1995). أنماط التصميم: عناصر البرمجيات القابلة لإعادة الاستخدام والموجهة للكائنات . أديسون-ويسلي . ISBN 978-0-201-63361-0. Wikidata Q126543992 .
- بيك، كينت ؛ كروكر، ر.؛ ميسزاروس، ج.؛ كوبلين، ج . أو.؛ دومينيك، ل.؛ باولش، ف.؛ فليسيدس، ج. (مارس 1996). "التجربة الصناعية مع أنماط التصميم" (ملف PDF) . وقائع المؤتمر الدولي الثامن عشر لهندسة البرمجيات . ICSE. برلين: IEEE . الصفحات 103-114 . doi : 10.1109/ICSE.1996.493406 . ISBN 0-8186-7247-1. Wikidata Q140403193 . مؤرشف من الأصل (PDF) في 14 يوليو 2022.
- إيجلبرجر، كلاوس (2022). تصميم برمجيات C++: مبادئ وأنماط تصميم برمجيات عالية الجودة . سيباستوبول، كاليفورنيا: أورايلي ميديا. ISBN 978-1-098-11316-2. Wikidata Q140403021 .
- ماكونيل، ستيف (يونيو 2004). "التصميم في البناء". كود كومبليت: دليل عملي لبناء البرمجيات ( الطبعة الثانية). مطبعة مايكروسوفت . الصفحات 73-124 . ISBN 978-0-7356-1967-8.
- ريتشاردز، مارك؛ فورد، نيل (2020). أساسيات هندسة البرمجيات: منهج هندسي . دار نشر أورايلي ميديا. رقم ISBN 978-1492043454.
- تشنغ، ج.؛ هاربر، ك. إي. (1 مايو 2010). "أنماط تصميم التزامن، وخصائص جودة البرمجيات، وتكتيكاتها". وقائع ورشة العمل الدولية الثالثة حول هندسة البرمجيات متعددة النوى . IWMSE '10. كيب تاون، جنوب أفريقيا: رابطة آلات الحوسبة . ص 40-47 . doi : 10.1145/1808954.1808964 . ISBN 978-1-60558-964-0. Wikidata Q140404313 .
للمزيد من القراءة
- ألكسندر، كريستوفر ؛ إيشيكاوا، سارة؛ سيلفرشتاين، موراي؛ جاكوبسون، ماكس؛ فيكسدال-كينغ، إنغريد؛ أنجيل، شلومو (1977). لغة الأنماط: المدن، المباني، البناء . نيويورك: مطبعة جامعة أكسفورد. ISBN 978-0-19-501919-3.
- بيك، كينت (1997). أنماط أفضل الممارسات في لغة سمول توك . برنتيس هول. ISBN 978-0134769042.
- بورشرز، جان (2001). منهج الأنماط في تصميم التفاعل . جون وايلي وأولاده . ISBN 978-0-471-49828-5.
- برينش هانسن، بير (1995). دراسات في علوم الحوسبة: نماذج البرمجة المتوازية . برنتيس هول. ISBN 978-0-13-439324-7.
- بوشمان، فرانك؛ منير، ريجين. روهنيرت، هانز. سومرلاد، بيتر (1996). هندسة البرمجيات الموجهة نحو الأنماط، المجلد الأول: نظام من الأنماط . جون وايلي وأولاده. رقم ISBN 978-0-471-95869-7.
- كوبلين، جيمس أو .؛ شميدت، دوغلاس سي. (1995). لغات أنماط تصميم البرامج . أديسون-ويسلي . ISBN 978-0-201-60734-5.
- كوبلين، جيمس أو .؛ فليسيدس، جون إم.؛ كيرث، نورمان إل. (1996). لغات أنماط تصميم البرامج 2. أديسون -ويسلي . ISBN 978-0-201-89527-8.
- إلورانتا، فيلي بيكا؛ كوسكينن، يوهانس؛ ليبانن، ماركو؛ ريجونين، فيل (2014). تصميم أنظمة التحكم الموزعة: منهج لغة النمط . وايلي. رقم ISBN 978-1118694152.
- فاولر، مارتن (1997). أنماط التحليل: نماذج الكائنات القابلة لإعادة الاستخدام . أديسون-ويسلي . ISBN 978-0-201-89542-1.
- فريمان، إريك؛ فريمان، إليزابيث؛ سييرا، كاثي ؛ بيتس، بيرت (2004). أنماط التصميم من Head First . دار نشر أورايلي . رقم ISBN 978-0-596-00712-6.
- هوهمان، لوك؛ فاولر، مارتن ؛ كاواساكي، جاي (2003). ما وراء هندسة البرمجيات . أديسون-ويسلي . ISBN 978-0-201-77594-5.
- غابرييل، ريتشارد (1996). أنماط البرمجيات: حكايات من مجتمع البرمجيات (ملف PDF) . مطبعة جامعة أكسفورد . ص 235. ISBN 978-0-19-512123-0تمت أرشفة النسخة الأصلية (PDF) بتاريخ 2003-08-01.
- غراند، مارك (3 فبراير 2003). أنماط في جافا، المجلد 1: فهرس لأنماط التصميم القابلة لإعادة الاستخدام موضحة باستخدام لغة النمذجة الموحدة ( الطبعة الثانية). جون وايلي وأولاده. ISBN 978-047144933-1.
- هوب، غريغور؛ وولف، بوبي (2003). أنماط تكامل المؤسسات: تصميم وبناء ونشر حلول المراسلة . أديسون-ويسلي . ISBN 978-0-321-20068-6.
- هولوب ألين (2004). هولوب على الأنماط . أبريس . رقم ISBN 978-1-59059-388-2.
- كيرشر، مايكل؛ فولتر، ماركوس؛ زدون، أوفه (2005). أنماط الاتصال عن بُعد: أسس برمجيات الوسيطة للكائنات الموزعة في المؤسسات والإنترنت والوقت الحقيقي . جون وايلي وأولاده . ISBN 978-0-470-85662-8.
- لارمان، كريج (2005). تطبيق لغة النمذجة الموحدة (UML) والأنماط . برنتيس هول . ISBN 978-0-13-148906-6.
- ليسكوف، باربرا ؛ غوتاغ، جون (2000). تطوير البرامج بلغة جافا: التجريد، والمواصفات، والتصميم الموجه للكائنات . أديسون-ويسلي . ISBN 978-0-201-65768-5.
- مانوليسكو، دراغوس؛ فولتر، ماركوس؛ نوبل، جيمس (2006). لغات أنماط تصميم البرامج 5. أديسون -ويسلي . ISBN 978-0-321-32194-7.
- مارينسكو، فلويد (2002). أنماط تصميم EJB: أنماط وعمليات ومصطلحات متقدمة . جون وايلي وأولاده . ISBN 978-0-471-20831-0.
- مارتن، روبرت سيسيل ؛ ريل، ديرك؛ بوشمان، فرانك (1997). لغات أنماط تصميم البرامج 3. أديسون -ويسلي . ISBN 978-0-201-31011-5.
- ماتسون، تيموثي ج.؛ ساندرز، بيفرلي أ.؛ ماسينجيل، بيرنا ل. (2005). أنماط البرمجة المتوازية . أديسون-ويسلي. ISBN 978-0-321-22811-6.
- شميدت، دوغلاس سي .؛ ستال، مايكل؛ رونيرت، هانز؛ بوشمان، فرانك (2000). هندسة البرمجيات الموجهة بالأنماط، المجلد 2: أنماط الكائنات المتزامنة والمتصلة بالشبكة . جون وايلي وأولاده. ISBN 978-0-471-60695-6.
- شالواي، آلان؛ تروت، جيمس ر. (2001). شرح أنماط التصميم، الطبعة الثانية: منظور جديد للتصميم الموجه للكائنات . أديسون-ويسلي. ISBN 978-0-321-24714-8.
- فليسيدس، جون م. (1998). تهجين الأنماط: أنماط التصميم التطبيقية . أديسون-ويسلي . ISBN 978-0-201-43293-0.
- وير، تشارلز؛ نوبل، جيمس (2000). برمجيات الذاكرة الصغيرة: أنماط للأنظمة ذات الذاكرة المحدودة . أديسون-ويسلي . ISBN 978-0-201-59607-6تمت أرشفة النسخة الأصلية بتاريخ 17-06-2007.
- أنماط تصميم البرمجيات
- تطوير البرمجيات
