طريقة البرمجة الصحيحة

السلام عليكم ورحمة اللهlazarus-ide

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

تهدف البرمجة والتصميم بطريقة صحيحة تحقيق أهداف مهمة في عالم تطوير البرامج منها:

  • سهولة وسرعة تطوير البرامج، بالتالي تقليل تكلفة التطوير.
  • سرعة التعديل بناءً على حاجة الزبائن والعملاء
  • تحقيق اﻹعتمادية والكفاءة في البرامج الناتجة بالنسبة للزبون.
  • إمكانية إضافة أجزاء جديدة modules دون تغيير في هيكل البرنامج
  • عدم الحاجة لتغيير معمارية النظام بعد فترة من تشغيله
  • سهولة دخول مبرمجين جدد في تطوير ذلك النظام أو استلامهم تطويره بالكامل
  • تطوير نسخة واحدة فقط من النظام لاستخدامها لعدد من الزبائن لديهم احتياجات مختلفة

وغيرها من اﻷهداف اﻷخرى والتي تختلف حسب كل مجال برمجي مستهدف.

وجدت أمس نقاط مهمة تصف مباديء و طريقة البرمجة والتصميم الصحيحتين في هذا الرابط، ففكرت بترجمة بعضاً منها، لكن ترجمتها بتصرّف:

  • عدم إعادة الكود: في حال أن هُناك أجزاء من الكود تمت إعادتها أو ظهرت الحاجة لها في أكثر من مرة، نقوم بتطبيق مبدأ التجريد فنستخرج ذلك الجزء من الكود من اﻹجراء الأم إلى إجراء جديد بطريقة تسمح باستخدامه مرة أخرى، مثلاً وضعه في مكتبة خارجة، أو خدمة ويب أو في قسم من البرنامج يمكن الوصول إليه من باقي اﻷقسام . بهذه الطريقة نكون قد حققنا مبدأين: مبدأ إعادة الاستخدام ومبدأ التجريد.
  • البساطة: ويهدف هذا المبدأ لكتابة كود بسيط مقروء سهل التعديل، وسهل الصيانة في حالة وجود أخطاء.
  • استخدام الطريقة اﻷبسط: هذا مبدأ مهم جداً، فبدلاً من استخدام مكتبة معقدة أو منصة أو framework معقد وتحتوي على كثير من اﻷشياء غير المستخدمة يمكننا استخدام إجراءات ومكونات قياسية توفرها اللغة نفسها او كتابة مكون جديد يقوم بكتابته المبرمج نفسه إذا لم تأخذ منه وقت طويل. في حال اﻹعتماد على مكونات ومكتبات خارجية معقدة يصبح لدينا بعد فترة برنامج صعب الصيانة و كبير الحجم ويمكن أن تمنعنا هذه المكتبات أن نقوم بالترقية مثلاً إلى نسخة جديدة من لغة البرمجة لأن الشركة أو الفرد الذي قام بكتابة تلك المكتبة لم يتكرم علينا يإصدار نسخة جديدة من تلك المكتبة لتواكب النسخة الجديدة من لغة البرمجة.
  • مبدأ الفتح واﻹغلاق: وهو يعني منع المكتبة أو المكون أو خدمة الويب التي طورناها من التعديل بواسطة اﻵخرين، لكن مع جعلها مفتوحة للإضافة. أي أن نمنع تغيير السلوك المفترض به أن تسلكه تلك المكتبة في النسخ الجديدة منها، لكن نسمح بإضافة إجراءات وصفات جديدة تجعل هذه المكتبة أو المكون ذات إمكانات أكبر. ويمكن استخدام الوراثة والتجريد وتعدد الأشكال لتحقيق هذا الهدف: inheritance, abstraction and polymorphism
  • مبدأ الوظيفة الواحدة: كل إجراء لابد أن تكون له وظيفة واحدة، وهذه أيضاً من سمات التجريد. فاﻹجراءات التي تكون لها أكثر من هدف وأكثر من ناتج تكون أكثر تعقيداً وأصعب في الصيانة وتكون أقل استخداماً في نفس البرنامج و أقل استخداماً بين البرامج المختلفة.
  • تقليل اﻹرتباط: لابد لتحقيق الـ portability لأي كائن أو حتى إجراء أن لا يرتبط بمكونات أو أجزاء كثيرة في البرنامج. فيمكن استخراج الجزء المتصل بالبرنامج المعين في مكتبة أو مكون أو إجراء آخر أي تقسيمه إلى طبقتين ليتم اﻹستفادة من الطبقة العليا في برامج أخرى. يمكن تطبيق نفس المبدأ على مستوى البرامج، مثلاً برنامج حسابات مرتبط مع برامج إدارة موارد بشرية أو العكس، فبدلاً من اﻹرتباط المباشرة مع نوع معين من البرامج، يمكن عمل برنامج أو خدمة ويب أو مكتبة وسيطة تسمح بتجريد النظام اﻵخر وجعل البرنامج الأساسي يمكن أن يرتبط مع أي برنامج مختلف مع تغيير الطبقة الوسيطة فقط.
  • اخفاء التفاصيل: إخفاء التفاصيل الكود للإجراءات المختلفة مع إظهار الـ header فقط لتلك الدالة تسمح للمبرمج تعديل تلك التفاصيل والكود الداخلي implementation دون تغيير أجزاء الكود التي تستخدم ذلك اﻹجراء.

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

4 thoughts on “طريقة البرمجة الصحيحة

  1. معظم النقاط التي ذكرتها موجودة تحت مفاهيم ال SOLID
    يوجد شرح أكثر هنا:
    https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design

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

  2. قرأت اليوم مفاهيم الـ S.O.L.I.D
    فهمها صعب بعض الشيء، وتفترض استخدام البرمجة الكائنية، لكن المفاهيم السابقة أكثر عموماً ولا تشترط البرمجة الكائنية.
    نحتاج لتطبيق تلك المفاهيم باستخدام لغات برمجة غير كائنية مثل لغة سي، لاستخدامها في مجال برمجة اﻹلكترونيات مثلاً، فليس هُناك مجال لاتسخدام برمجة كائنية أو شروط كائنية. فقط مفهوم الفتح واﻹغلاق اعتقد أنه لا يمكن تنفيذه إلا بلغة كائنية.
    لدي تحدي في مشروع إلكترونيات قادم أن يتم بناءه بطريقة modular حتى يتقبل العمل على أجهزة مختلفة المواصفات بدون تغيير هيكل البرنامج الأساسي بأقل التغييرات.
    فالتحدي هو كيفية تطبيق تلك الشروط أو عدد منها باستخدام لغة C

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s