Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقدمة في أنماط التصميم

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 89 من 110.

أنماط التصميم هي حلول مجربة لمشكلات شائعة يواجهها المطورون بشكل متكرر عند بناء البرمجيات. وبدلاً من إعادة اختراع العجلة في كل مرة، يمكنك تطبيق هذه القوالب الراسخة لحل تحديات مماثلة بطريقة متسقة وقابلة للصيانة.

فكر في أنماط التصميم (design patterns) كأنها وصفات طهي. تماماً كما لا يخترع الطاهي طريقة جديدة لصنع الخبز في كل مرة، يستخدم المبرمجون أنماطاً تم صقلها على مدى عقود. تستفيد هذه الأنماط من مفاهيم البرمجة كائنية التوجه (OOP) التي تعلمتها بالفعل - الأصناف (classes)، والوراثة (inheritance)، والواجهات (interfaces)، وتعدد الأشكال (polymorphism) - وتجمعها بطرق محددة لحل مشكلات معينة.

تُصنف أنماط التصميم عادةً إلى ثلاث فئات:

الفئةالغرضأمثلة
إنشائية (Creational)كيفية إنشاء الكائناتSingleton, Factory
هيكلية (Structural)كيفية تكوين الكائناتAdapter, Decorator
سلوكية (Behavioral)كيفية تواصل الكائناتObserver, Strategy

في الدروس القادمة، ستتعلم أنماطاً محددة من كل فئة. يعالج كل نمط مشكلة متميزة: ضمان وجود مثيل واحد فقط من الفئة (class)، أو إنشاء كائنات (objects) دون تحديد الفئات الدقيقة، أو السماح للكائنات بإخطار الآخرين بالتغييرات. إن فهم متى ولماذا يتم استخدام كل نمط لا يقل أهمية عن معرفة كيفية تنفيذه.

challenge icon

التحدي

سهل

دعنا نبني نظاماً بسيطاً لحل المشكلات يوضح كيف تنظم أنماط التصميم (design patterns) الكود حسب الفئة! ستقوم بإنشاء هيكل يصنف تحديات البرمجيات المختلفة ويقترح نوع النمط الذي قد يساعد في حلها.

ستقوم بتنظيم الكود الخاص بك في ملفين:

  • patterns.dart: أنشئ enum يسمى PatternCategory بثلاث قيم: creational، و structural، و behavioral. يجب أن يحتوي كل منها على حقل String description يشرح الغرض منه:
    • creational: "Handles object creation"
    • structural: "Handles object composition"
    • behavioral: "Handles object communication"
    أنشئ أيضاً كلاس يسمى Problem يمثل تحدياً برمجياً. يجب أن يحتوي على حقل String name وحقل PatternCategory category. قم بتضمين ميثود suggest() تعيد سلسلة نصية بالتنسيق التالي: [name] -> Use a [category description] pattern
  • main.dart: قم باستيراد ملف الأنماط الخاص بك ووضح كيف ترتبط المشكلات المختلفة بفئات الأنماط المختلفة. أنشئ ثلاث مثيلات (instances) من Problem:
    • مشكلة باسم Ensure single database connection مع الفئة creational
    • مشكلة باسم Make old API work with new system مع الفئة structural
    • مشكلة باسم Notify users when data changes مع الفئة behavioral
    قم باستدعاء suggest() لكل مشكلة واطبع النتائج.

يساعدك هذا التحدي على رؤية كيف يتم تصنيف أنماط التصميم حسب نوع المشكلة التي تحلها - وهو مفهوم أساسي بينما تبدأ في تعلم أنماط محددة في الدروس القادمة!

المخرجات المتوقعة:

Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication pattern

ورقة مرجعية

أنماط التصميم هي حلول مجربة لمشاكل البرمجة الشائعة. وهي عبارة عن قوالب تجمع بين مفاهيم البرمجة كائنية التوجه (OOP) (الأصناف، الوراثة، الواجهات، تعدد الأشكال) بطرق محددة.

تُصنف أنماط التصميم إلى ثلاث فئات:

الفئةالغرضأمثلة
إنشائية (Creational)كيفية إنشاء الكائناتSingleton, Factory
هيكلية (Structural)كيفية تركيب الكائناتAdapter, Decorator
سلوكية (Behavioral)كيفية تواصل الكائناتObserver, Strategy

جرّب بنفسك

import 'patterns.dart';

void main() {
  // TODO: قم بإنشاء ثلاثة مثيلات من Problem:
  // 1. name: "Ensure single database connection", category: creational
  // 2. name: "Make old API work with new system", category: structural
  // 3. name: "Notify users when data changes", category: behavioral

  // TODO: استدعِ suggest() لكل problem واطبع النتائج
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming