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

اليوم ، هناك العديد من الأساليب لتصميم وتنفيذ مشاريع البرامج. الأكثر طلبًا في العمل مع مشاريع البرامج الكبيرة هي: البرمجة الهيكلية ، البرمجة الوظيفية ، البرمجة الموجهة للكائنات .
بالنسبة لي ، أصبح من المثير للاهتمام تحليل أسباب أساليب التصميم هذه. وفي عملية التحليل ، كان الاكتشاف غير المتوقع هو حقيقة أنها تستند جميعها ضمنيًا إلى الفرضية التالية:
, .
تطوير مشاريع البرمجيات
ما هو المشروع دون الحاجة للتنمية؟ نادراً ما توجد مثل هذه المشروعات وتتميز بشكل أساسي بالدفع السريع للقطعة دون أي التزامات لاحقة من جانب المبرمج ، على سبيل المثال:
- مشروع صغير يمكن كتابته بنهج واحد ؛
- مشروع بدون كود معقد هيكليا ، مثقل بعدد كبير من العلاقات ؛
- منتج البرنامج دون الحاجة لدعمه ودعم المستخدم.
في مثل هذه الحالات ، تهدر جهود المبرمج للحفاظ ، على سبيل المثال ، على نهج وجوه المنحى. غالبًا ما أجد نفسي في هذا الدرس بلا معنى أثناء تطوير أداة مساعدة لمرة واحدة ، عندما أدركت فجأة أن كتابة نص الصف الرابع في هذا المشروع أخرني لمدة 15 دقيقة ولم أقربني من النتيجة. الأمر الأكثر حزنا هو أن جميع الطبقات التي كانت مكتوبة بصعوبة في مثل هذه المشاريع يتم نسيانها وعدم إعادة استخدامها ، أي أنها لا تسهل عملنا في المستقبل.
في جميع الحالات الأخرى ، يجب على المبرمج ، الذي يقلل من عمله ، وضع مشروع معقد هيكلياً ، وهو:
- قم بتصحيح الأخطاء عن طريق تحليل الكود وإيجاد الأماكن التي تتولد فيها هذه الأخطاء.
- لتقديم وظائف جديدة ، مع الحفاظ على وظيفة جميع القدرات المتاحة سابقا. عند القيام بذلك ، استخدم التعليمات البرمجية الموجودة (المكتوبة والمختبرة) في تنفيذ هذه المهام الجديدة.
- تقديم الدعم في استخدام منتج البرنامج.
- إجراء وصف وتنسيق وظائف جميع إصدارات المشروع.
- الحفاظ على جميع صيغ البيانات المستخدمة من قبل المشروع (حتى عفا عليها الزمن) التشغيلية.
- ونفذ العديد من المهام الأخرى التي تظهر في المواجهة مع المنافسين بسبب تغيير الأطر أو نهاية الدعم لنظام التشغيل المتقادم ...
إذا كنت تبحث عن أوجه تشابه لتطوير مشروع برمجيات ، فيمكنك تذكر تطور النوع البيولوجي.
"". - . - .
عمل المبرمج ليس بالأمر السهل ، لكن للمبرمج "مساعد". يتم إخفاء هذا المساعد في مكان ما في بنية عالمنا ، حيث يوجد ميزتان:
- القدرة على كتابة خوارزمية مفيدة واحدة واستخدامها في العديد من المهام المماثلة ،
- وجود عدد كبير من المهام المماثلة في حلها.
هذه الخوارزمية ، مفيدة في العديد من المجالات ، ستسمى خوارزمية عالمية للإيجاز. يمكن أن يسمى تنفيذه لحقل تطبيق معين بالتخصص ، لأن عملية تكرير الخوارزمية لاستخدامها في مجال التطبيق الضيق تشبه التخصص التطوري للخلايا في الكائن الحي.
من الواضح ، لإنشاء خوارزمية ، من الضروري تحديد الميزات التي تضمن إمكانية تطبيق الخوارزمية. يجب البحث عن هذه العلامات في بيانات الإدخال وفي وصف الموقف الأولي (السياق). لإنشاء خوارزمية عالمية ، من الضروري في كل مجال من مجالات الموضوع ، والذي يحتوي على مجموعات من علامات البيانات والمواقف الخاصة به ، تحديد علامات قابلية التطبيق التي تتطابق مع جميع المناطق. يتم تجاهل جميع العلامات الأخرى التي لا توفر قابلية التطبيق من قبل الخوارزمية العالمية . إضفاء الطابع الرسمي على الخوارزمية العالمية ، توصلنا إلى ضرورة استخدام التجريد - واحدة من أهم مبادئ OOP. علاوة على ذلك ، يتميز OOP بالتركيز فقط على استخراج البيانات.
سأحاول هنا كتابة أمثلة لاستخدام التجريد من مناطق مختلفة.
التجريد | خوارزميات | مجال التطبيق |
---|
الأعداد الطبيعية | خوارزميات حساب كمية | مهام محاسبة القيم الاقتصادية |
السمة المميزة للجسم المادي | خوارزميات لمقارنة كمية المادة | مهام مقارنة قيمة المنتج غير الخاضع للمساءلة |
التفاعل مع العمليات لمجموعة من العناصر: الزحف الكامل والمقارنة وتبادل المواقف | خوارزميات فرز المجموعة | برمجة |
واجهة العمليات نفسها لـ "عقدة النهاية" و "عقدة الفرع" في الشجرة | الخوارزميات بناءً على نمط تصميم التخطيط | تطوير مشروع البرمجيات المعقدة |
المفهوم الرئيسي "الموظف" | الصياغة في قسم "عقد العمل" | قانون العمل |
لبنة مشروع برمجيات
باستخدام تقنيات التجريد المختلفة ، يقوم المبرمج بتنفيذ الخوارزمية في شكل قسم من التعليمات البرمجية ، وهو عنصر منفصل وكامل من عمله. يمكن أن يكون هذا العنصر ، بناءً على لغة البرمجة المستخدمة ، دالة وكائنًا وتسلسلًا من التعليمات. لمزيد من الراحة لمزيد من المناقشة ، سوف نسمي هذا الرمز جزء كلمة " مكون ".
المكون - جزء من الكود (الإجراء ، الفئة ، مكون النشر ، إلخ):
- الذي ينفذ بعض الخوارزمية الكاملة التي تعمل في بعض المواقف الأولية ومع بعض بيانات الإدخال ،
- التي يمكن استخدامها عدة مرات في مشروع واحد (حتى عدة مرات أفضل في مشاريع مختلفة) ،
- توجد جميع الإرشادات التي يتم إغلاقها وعرضها دون الحاجة إلى عمليات بحث إضافية في بيئة التطوير ،
- التغييرات التي يؤديها المبرمج بشكل مستقل نسبياً فيما يتعلق بباقي الكود.
أنماط في تطوير مشروع البرمجيات
باستخدام مصطلح المكون ، يصبح من الممكن صياغة مجموعة من القوانين البسيطة الموجودة في تطوير مشروع البرنامج. سأقدم هذه الأنماط في شكل العبارات التالية ، مقسمة إلى 3 فئات.
- العبارات التي تصف خصائص المكون .
1.1. يتم استخدام مكون مكتوب بشكل صحيح في كثير من الأحيان عدة مرات.
1.2. في كل مكان يتم فيه استخدام المكون ، يُتوقع منه سلوكًا ثابتًا ، مما يؤدي إلى نتيجة قابلة للتكرار.
1.3. عند استخدام المكون في عدة أماكن ، يجب أن تلبي النتيجة كل مكان للاستخدام.
1.4. ينشئ السلوك المضمن في المكون قيودًا على أماكن استخدام هذا المكون .
1.5. في كل مكان استخدام المكون ، يمكن إشراك جميع القيود الخاصة به.
1.6. أي تغيير في أحد المكونات يغير حدوده ويتطلب التحقق من جميع أماكن استخدامه ، مما يتسبب في إضاعة مبرمج للوقت.
1.7. يُنصح بكتابة المكون في شكل كود في حالة واحدة ، أي أنه من الضروري إزالة ازدواجية نفس الكود. سيؤدي ذلك إلى تقليل عدد التعديلات عند إجراء تغيير على أحد المكونات . - بيانات تصف الأنماط في تنفيذ مهمة جديدة بواسطة المبرمج.
2.1 يُنصح باختيار خيار لتنفيذ مهمة جديدة مع تقليل الوقت الذي يقضيه المبرمج.
2.2. لتنفيذ مهمة جديدة ، يمكن للمبرمج إضافة مكونات جديدة أو تغيير سلوك المكونات القديمة.
2.3. تتطلب إضافة مكون بشكل أساسي التحقق فقط في مكان الاستخدام الجديد ، ويولد الحد الأدنى من الوقت للمبرمج.
2.4. التغيير في سلوك عنصر ما الناجم عن المهمة الجديدة ، وفقًا للبيان [1.6] ، يتطلب التحقق في مكان الاستخدام الجديد وفي جميع أماكن الاستخدام القديم ، مما يولد وقتًا إضافيًا للمبرمج مقارنةً بالوضع في البيان [2.3]. في حالة المكون المنشور ، يتطلب ذلك عمل جميع المبرمجين الذين يستخدمون المكون المعدل. - بيانات تصف الأنماط في تفاعل الخوارزميات العالمية وتخصصاتها:
3.1. هناك فرصة لكتابة مكون أساسي (يتم تقديم الاسم عن طريق القياس مع الفئة الأساسية ومن أجل الإيجاز ، سنستخدم كلمة " أساس "). تفي القاعدة فقط أهم ميزات بعض الخوارزمية العالمية .
3.2. من الممكن كتابة عنصر - تخصص (يشار إليه فيما يلي بإيجاز ، سنستخدم كلمة " تخصص "). التخصص يكمل الخوارزمية العالمية للقاعدة ، مما يجعلها قابلة للتطبيق في منطقة معينة من الاستخدام.
3.3. القاعدة ، كما يلي من العبارات [3.1] ، [3.2] ، لها تعقيد أقل وقيود تطبيق أقل من التخصص .
3.4. وفقًا للبيان [1.7] ، يُنصح بتطوير التخصص دون تكرار كود الخوارزمية العالمية من قاعدة البيانات .
3.5. لا تتطلب أماكن استخدام قاعدة البيانات التحقق بعد إجراء تغييرات على التخصص الذي تم تكوينه بشكل صحيح.
وجوه المنحى مفاهيم البرمجة
سأحاول ، باستخدام العبارات أعلاه ، تحليل المفاهيم الأساسية للبرمجة الموجهة للكائنات. يتخطى هذا التحليل مفهوم التجريد ، حيث سبق وصفه مسبقًا في إضفاء الطابع الرسمي على طريقة إنشاء خوارزمية عالمية .
فئة ، كائن
تعزز مفاهيم OOP هذه جدوى استخدام نوع خاص من المكونات الموصوف بمزيج من بعض البيانات الداخلية وطرق التعامل مع هذه البيانات. تتم ترجمة جميع عبارات المجموعة [1] و [2] إلى OOP ، والتي يتم استبدال مصطلح المكون بمفهوم الفئة .
في الوقت نفسه ، للوهلة الأولى ، يتم استنفاد العلاقات بين الطبقة والكائن من خلال مجموعة من البيانات [3] ، حيث يتم استبدال القاعدة بمفهوم الفئة ، والتنفيذ بمفهوم الكائن . علاوة على ذلك ، فإن التنفيذ ديناميكي ، وهذا قابل للتغيير أثناء تنفيذ البرنامج.
التغليف
يمكن اعتبار مفهوم " التغليف " من "وجهين".
الجانب الأول من مفهوم " التغليف " هو عزل المكون عن الأجزاء الأخرى من الكود. تسمح هذه الخاصية للمبرمج بإجراء عمليات في مناطق التعليمات البرمجية الموجودة "بالقرب" لإجراء تغييرات على المكون . وهذا يعني ، لتقليل الوقت الذي يقضيه المبرمج من خلال استبعاد البحث عن العناصر المتفاعلة المختلفة للبرنامج وتحليلها من العمل. يتم تعريف هذا الجانب بخصائص المكون التالي من تعريفه.
الجانب الثاني من مفهوم " التغليف " هو إخفاء التنفيذ الداخلي للمكون . هذا الإخفاء ممكن باستخدام مفاهيم الأساس والتنفيذ الموصوفة في مجموعة البيانات [3]. للقيام بذلك ، يتم تحديد أساليب الطبقة العامة مع القاعدة ، ويتم تحديد أساليب الطبقة الخاصة والمحمية مع التنفيذ . في أماكن الاستخدام ، يتم استخدام القيود التي تشكلها القاعدة ، وبالتالي يصبح من الممكن إجراء تغييرات في التنفيذ لا تتعلق بالقيود الأساسية . ولا يلزم إجراء تغييرات على هذه التغييرات في الأماكن التي تُستخدم فيها قاعدة البيانات [3.5] ، مما يقلل من عمل المبرمج.
من الجدير بالذكر أن مفهوم " التغليف " له تشبيه في علم الأحياء. تشبه هذه العملية الأولى الوظائف البيولوجية لـ " غشاء الخلية ".
ميراث
يستمر مفهوم " الميراث " في تعزيز أهمية استخدام مزيج من الأساس + التنفيذ . لهذا ، في مجموعة العبارات [3] ، من الضروري تحديد أساليب الفئة الأصل مع الأساس ، وتحديد أساليب الطبقة اللاحقة مع التنفيذ .
في تنفيذه ، يسمح مفهوم " الميراث " باستخدام العبارة [2.3] ، أي استخدام إضافة الكود بدلاً من تغييره وتكراره. في هذه الحالة ، يجب إزالة ازدواجية الخوارزمية الأساسية . ومع ذلك ، فإن النهج الذي يستخدم الميراث لتخصص خوارزمية عالمية له ناقص كبير. هذا العيب هو وجود مكونين متصلين بشدة ، يصعب تغييرهما بشكل مستقل. يتم إنشاء علاقات التبعية هذه بواسطة العلاقة بين الوالدين والطفل.
هناك العديد من الطرق البديلة لاستخدام حزمة الأساس +. سأقدم أمثلة أخرى على هذه الأساليب.
قاعدة | تطبيق | مجال التطبيق |
---|
أساليب الطبقة العامة | أساليب الطبقة الخاصة | التغليف |
طرق محمية للفئة الأم | أساليب الطبقة الوراثة | ميراث |
واجهة المكتبة الديناميكية | وظائف المكتبة الديناميكية | مكون = مكتبة ديناميكية |
القوالب (المعممة) الأساليب والفئات (القوالب ، العامة) | إنشاء مثيل للقالب باستخدام الوسائط المحددة | البرمجة العامة |
الأساليب العامة التي تقبل المندوبين | تخصص الطرق التي تشير إلى إجراءات معالجة محددة | إجراءات فرز شجرة أو تكوينها ، مع الإشارة إلى طريقة تقييم ترتيب العناصر |
الفئات التي تسمح بالتفاعل مع قالب الزائر | تشكيل "الزائر" مع الوظيفة المطلوبة | تصميم الزائر نمط |
لوحة التحكم NPP | مجموعة من الأتمتة والمعدات لمحطات الطاقة النووية | إخفاء تعقيد النظام من مشغل NPP |
في الوقت نفسه ، لاحظت أنه بالنسبة لمفهوم " الميراث " من منظمة التحرير الفلسطينية ، يمكن للمرء أن يجد أيضًا تشابهًا في عمليات التطور البيولوجي. في علم الأحياء ، يستخدم مصطلح " الوراثة " لهذا الغرض.
تعدد الأشكال
في رأيي ، فإن مفهوم " تعدد الأشكال " هو الجانب الثاني عند النظر في إجراء إنشاء خوارزمية عالمية . الجانب الأول ( التجريد ) هو طريقة عرض من وجهة نظر كيفية إنشاء خوارزمية عالمية . في الوقت نفسه ، عند النظر إلى الخوارزمية العالمية من وجهة نظر المستخدم ، نحصل على سجل لمفهوم تعدد الأشكال . أي أن تعدد الأشكال هو قدرة مفيدة لوظيفة ( مكون ) لمعالجة البيانات من أنواع مختلفة. تؤدي إضافة هذا المفهوم إلى OOP إلى تعزيز فائدة استخدام خوارزمية عالمية في تطوير مشروع برنامج.
تطبيقات تعدد الأشكال في لغات البرمجة المختلفة مختلفة جدا. تحدد مقالة ويكيبيديا الخاصة بتعدد الأشكال ، اعتمادًا على تنفيذها ، أربعة أنواع فرعية: حدودي ، إدراج (أو أنواع فرعية) ، التحميل الزائد ، نوع الصب. تحتوي هذه التطبيقات على اختلافات كبيرة ، ولكن يتم توحيدها جميعًا بهدف واحد - وهو كتابة خوارزمية عالمية لن تحتاج إلى تكرار لتخصصها المحدد.
وهذه المرة ، وبدون مفاجأة تقريبًا ، وجد تشبيهًا لمفهوم " تعدد الأشكال " في علم الأحياء. اسم هذا المصطلح البيولوجي يتزامن تماما مع مفهوم OOP. " تعدد الأشكال " - قدرة كائن واحد على الوجود في الدول ذات الهياكل الداخلية المختلفة أو في أشكال خارجية مختلفة.
استنتاج
وبالتالي ، يمكن تمثيل جميع المفاهيم الأساسية لـ OOP تقريبًا على أنها مجموعة من العبارات البسيطة المشكلة على أساس قوانين تطوير مشروع برمجيات. علاوة على ذلك ، بالنسبة لـ OOP ، يتم تعريف مصطلح المكون بمفهوم الفصل . إذا حددنا معنى مختلفًا لمصطلح المكون ، على سبيل المثال ، دالة ، فمن الممكن صياغة المفاهيم الأساسية للبرمجة الوظيفية .
في عملية كتابة المقال ، تم العثور على القياس البيولوجي للمفاهيم المستخدمة في البرمجة. تظهر هذه التشبيهات بسبب تشابه طرق تطوير منتج البرنامج وبعض عمليات التطور البيولوجي.
IMHO ، فمن المستحسن النظر في هذين المجالين العلميين معا. في هذه الحالة ، قد يكون من الممكن تنفيذ نقل القوانين من صناعة إلى أخرى ، وبالتالي ضمان تطوير كل من تكنولوجيا المعلومات والأوصاف الرسمية للعمليات البيولوجية.
شكرا لاهتمامكم
التعليقات
سأكون ممتناً للغاية للتعليقات والاقتراحات والاقتراحات ، لأنها تساعدني في ضبط اتجاه تطوير العمل في هذا المجال.
مراجع
تحرير بوريسوفا م.