0Pricing
Swift Academy · درس

مبادئ التصميم الموجّه بالبروتوكولات

فضّلوا تركيب البروتوكولات على وراثة الأصناف لتصميم أكثر مرونة.

مبادئ التصميم الموجّه بالبروتوكولات درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مرحبًا

تفضّل البرمجة الموجّهة بالبروتوكولات (POP) تركيب البروتوكولات على وراثة الفئات لبناء تعليمات Swift مرنة وقابلة للاختبار وإعادة الاستخدام.

مشكلة الوراثة

تسبب التسلسلات الهرمية العميقة للفئات مشكلات عدة: • ترث الفئات الفرعية كل حالة وسلوك الفئة الأب • قد يؤدي تغيير الفئة الأب إلى كسر الفئات الفرعية • لا يمكن الوراثة من فئتين تحل البروتوكولات المشكلات الثلاث كلها.

ابدؤوا ببروتوكول

```swift protocol Greetable { var greeting: String { get } func greet() } extension Greetable { func greet() { print(greeting) } // default implementation } ``` توفر امتدادات البروتوكولات تطبيقات افتراضية تحصل عليها أي جهة متوافقة مجانًا.

تركيب السلوكيات

```swift protocol Persistable { func save() } protocol Networked { func fetch() async throws -> Data } protocol Loggable { func log(_ msg: String) } struct DataService: Persistable, Networked, Loggable { ... } ``` يمكنكم مزج السلوكيات مثل مكعبات LEGO — من دون الحاجة إلى تسلسل هرمي للفئات.

امتدادات البروتوكولات للمنطق المشترك

```swift extension Loggable { func log(_ msg: String) { print("[\(type(of: self))] \(msg)") } } // Every Loggable type gets this for free ```

النمذجة بأثر رجعي

يمكن تطبيق البروتوكولات على أنواع لا تملكونها: ```swift protocol JSONConvertible { func toJSON() -> String } extension Int: JSONConvertible { func toJSON() -> String { "\(self)" } } ``` أضيفوا توافقات إلى أنواع المكتبة القياسية من دون إنشاء فئات فرعية.

أنواع القيم + البروتوكولات

يمنحكم توافق البُنى مع البروتوكولات دلالات القيم *والتعددية الشكلية* معًا: ```swift protocol Shape { var area: Double { get } } struct Circle: Shape { var radius: Double; var area: Double { .pi * radius * radius } } struct Square: Shape { var side: Double; var area: Double { side * side } } let shapes: [any Shape] = [Circle(radius:3), Square(side:4)] shapes.map { $0.area } // [28.27, 16] ```

حقن الاعتماديات عبر بروتوكول

```swift protocol DataStore { func save(_ data: Data) } struct FileStore: DataStore { func save(_ d: Data) { /* disk */ } } struct MockStore: DataStore { func save(_ d: Data) { /* test log */ } } class Service { let store: DataStore init(store: DataStore) { self.store = store } } ```

متى تستخدمون الفئات

تُفضَّل الفئات عندما: • تحتاجون إلى حالة مشتركة قابلة للتغيير (دلالات المرجع) • تحتاجون إلى التكامل مع واجهات برمجة التطبيقات ObjC/UIKit • تكون الوراثة هي النموذج الصحيح (وهو أمر نادر) واجعلوا البروتوكولات والبُنى هي الخيار الافتراضي لكل ما عدا ذلك.

اصطلاحات تسمية البروتوكولات

• بروتوكولات القدرات: اللاحقات `-able` و`-ible` و`-ing` ‏(Equatable وHashable وCoding) • بروتوكولات المفوَّض: اللاحقة `Delegate` أو `DataSource` • الدور المجرّد: اسم (`Store` و`Parser` و`Renderer`) تجعل الأسماء الجيدة التعليمات البرمجية الموجّهة بالبروتوكولات موضِّحةً لنفسها.

تحقق سريع

ماذا توفر امتدادات البروتوكولات للأنواع المتوافقة؟

مراجعة

أهم النقاط: • فضّلوا البروتوكولات والبُنى على التسلسلات الهرمية للفئات • توفر امتدادات البروتوكولات تطبيقات افتراضية مشتركة • ركّبوا السلوكيات من بروتوكولات صغيرة مخصّصة لغرض واحد • تتيح البروتوكولات حقن الاعتماديات لتحسين قابلية الاختبار • خصصوا الفئات لدلالات المرجع والتكامل مع ObjC اكتملت الدورة! التالي: أنواع القيم مقابل أنواع المراجع بالتفصيل.

الأسئلة الشائعة

هل درس «مبادئ التصميم الموجّه بالبروتوكولات» مجاني؟

نعم — نص درس «مبادئ التصميم الموجّه بالبروتوكولات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «مبادئ التصميم الموجّه بالبروتوكولات»؟

فضّلوا تركيب البروتوكولات على وراثة الأصناف لتصميم أكثر مرونة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «مبادئ التصميم الموجّه بالبروتوكولات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تركيب البروتوكولات باستخدام &
  2. التوافق الشرطي
  3. متطلبات Self وتصميم Equatable
  4. مبادئ التصميم الموجّه بالبروتوكولات
← العودة إلى Swift Academy