باستخدام مراقب نمط التشابه في C

لقد تذكرت مؤخرًا قراءة كتاب عن أنماط تصميم java وبسبب حقيقة أنني ما زلت لا أفهم كيف يتم ذلك من الذاكرة في OOP ، قررت أن أكتب عملي في C.

قررت البحث مرة أخرى في كتاب جافا هذا عن كيفية تطبيق هذا النمط. نظرت إلى الفصل بأكمله ، ونظرت إلى الكود ، لكن لم يتبق شيء في رأسي. لماذا هذا ) هل من الصواب التفكير في أسلوب oop؟ على سبيل المثال ، أعرف القليل من java و c ++ ، لكن ما مدى ملاءمة إجراء التنفيذ بحيث يكون الاستخدام ممتعًا ولا ينسى؟ أيضًا للتجربة ، نظرت إلى كيفية إجراء ذلك في c ++. حسنًا ، بصراحة ، من الصعب علي أن أنظر إلى مثل هذا الرمز ، وعلي أن أقرأ كل سطر وأفكر.

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

void sub_trade ( void *event, void *data ) { /*        . */ } 

الآن أريد إنشاء ناشر والاشتراك في الأحداث. في هذه الحالة ، لا تحتاج إلى استدعاء أي شيء إضافي. من الضروري فقط الإشارة إلى أي ناشر ينقل المشترك.

 enum { TRADE }; init_publisher ( TRADE, sub_trade, NULL ); 

وهذا كل شيء. لقد اشتركنا في الناشر. الآن في ملف آخر ، على سبيل المثال ، أريد أن أعمل رسالة إخبارية في الدردشة عبر الإنترنت. لا أعرف مدى ملاءمة القيام بذلك في OOP ، والأكثر من ذلك في java ، ولكن بمساعدة تطبيقي يتم ذلك ببساطة. بالمناسبة ، ربما يتعين على جافا استخدام أساليب ثابتة.

أنا أعلن وظيفة مشترك آخر.

 enum { TRADE }; void notify_chat_trade ( void *event, void *data ) { /*       */ } ... init_publisher ( TRADE, notify_chat_trade, NULL ); 

الآن في الملف حيث يتم تلقي البيانات الجديدة وتحليلها ، تأتي بيانات الخصم. أحتاج فقط إلى استدعاء هذه الوظيفة وسيتم نقل البيانات عند الضرورة.

 /*      10,      . */ send_event ( TRADE, 10 ); 

وبالتالي فهي مريحة وبسيطة دون صعوبات الاستخدام ، ويمكنك الحصول على النتيجة المرجوة. أعتقد أنني فعلت جيدا.

بالمناسبة ، من يستطيع أن يشرح لي ، هل هي البرمجة الهيكلية أم الإجرائية؟

Source: https://habr.com/ru/post/ar483520/


All Articles