بسم الله الرحمن الرحيم
أريد أن أتكلم عن فكرة بسيطة لكن ذات فعالية كبيرة في مجال البرامج الضخمة باستخدام لغات البرمجة الشيئية أو غرضية التوجه إذا أحببتم تسميتها (Object Oriented)
هذه الفكرة تتلخص في نظام الطبقات (فصل الطبقات ) أي أننا نوزع البرنامج إلى مجموعة بنى منطقية وعلى اساسها نبدء بالبرمجة ولكن في هذه الحالة يجب ان تكون هذه العملية مسبوقة بمرحلتي التحليل والتصميم والتي يسبقها ايضا مرحلة جمع المعطيات وتدعى هذه المراحل في بناء البرنامج او النظام بهندسة البرمجيات
إذا تتلخص عملية بناء البرنامج بالتالي:
1- جمع المتطلبات وهذه العملية هي أن نقوم بالذهاب إلى الشركة او المؤسسة التي نريد تطوير البرنامج لها ونبدء بالأسئلة عن طبيعة البرنامج والأقسام المدرجة به ومن الممكن أيضا ان نقوم بالدوام لفترة في هذه الشركة حتى نستطيع التعرف على طبيعة العمل الذي نريد أتمتته ومن ثم نجمع هذه المعلومات ضمن وثيقة تدعى وثيقة المتطلبات (Requirements Specification) والتي بصريح العبارة تتضمن كل (شاردة و واردة) في هذه الشركة
2- مرحلة التحليل وتتضمن تحليل هذه المعطيات و تنظيمها ويتخللها احيانا العودة إلى المرحلة السابقة للسؤال عن بعض المتطلبات
3- مرحلة التصميم ووتتضمن تحويل المعلومات التي حصلنا عليها في مرحلة التحليل عبر خطوات منظمة إلى ان ينتج معنا في النهاية صفوف ((Classes بجميع الطرق (Methods) الخاصة بهذه الصفوف وجميع المتحولات (Data Member) أيضاً
4- وفي النهاية تأتي مرحلة الشيفرة (Coding) والتي تتضمن تحويل الصفوف المرسومة في مرحلة التصميم الى صفوف مبرمجة بواسطة لغة برمجة غرضية التوجه مثل Java أو C#
وأعود بعض هذا العرض السريع لخطوات هندسة البرمجيات إلى الفكرة السابقة والتي هي فصل الطبقات
لنفترض اننا نريد برنامج صغير يقوم بالتعامل مع بيانات موظف وتخزينها على قاعدة بيانات وتعديل بيانات هذا الموظف أو حذفها
وبالتالي فان الناتج لدينا بعد مرحلتي جمع المتطلبات والتي تتمثل هنا بماهية بيانات الموظف أي نسأل الشخص الذي يريد هذا البرنامج ماهي البيانات الخاصة بالموظف والتي تريد تخزينها
فيجيب مثلا( اسم الموظف – عمره – حالته العائلية – رقمه الوظيفي .....)
ونسأله ماهي الوظائف التي تريد القيام بها على هذا الموظف فيجيب مثلا(حفظ بيانات الموظف-تعديله – حذف موظف-بحث بواسطةالاسم-بحث بواسطة الرقم .....)
وبالتالي ينتج لدينا بعدما سبق أنه يجب ان يكون لدينا صف يدعى Employee وهذا الصف له
Data Member هي (EmplyeeID,EmployeeName,EmployeeAge……)
ولهذا الصف Method وهي (saveEmployee-UpdateEmplyee-FindEmployeeByName...)
وبالتالي نقوم بانشاء الطبقات والتي ستسهل علينا عملية البرمجة بشكل كبير جدا حيث يكون لدينا هنا ثلاث طبقات كل طبقة تطلب خدمة من الطبقة التى هي أدنى منها
1- طبقة الواجهة :
والتي هي عبارة عن الواجهة التي سيتم ادخال البيانات عن طريقها أي تمثل الواجهة التي سيتعامل معها مستخدم البرنامج والتي تحوي على جميع العناصر المرئية
(TextBoxs , RadioButton,grid……)
وتحتوي ايضا على ازرار الحفظ والتعديل .......
2- طبقة الصفوف :
والتي تتضمن صف الموظف الذي تم استنتاجه قبل قليل
3- طبقة الدعم :
والتي تحوي على الصف الخاص بالاتصال بقاعدة البيانات بالإضافة الى أي صفوف مساعدة لاتنتمي للطبقات السابقة
ألية العمل:
عندما يقوم المستخدم بادخال البيانات عن طريق طبقة الواجهة ومن ثم يقوم بالضغط على زر الحفظ مثلا وعندها نقوم في الكود المكتوب في زر الحفظ بانشاء كائن (Object) من الصف الموظف (From Class Employee) ونقوم بعد إنشاء هذا الكائن بتمرير البيانات إلى الData Member الخاصة بالكائن الجديد ومن ثم نقوم باستدعاء طريقة الحفظ ( save Method) من خلال هذا الكائن الذي قمنا بتعريفه
أي تكون الشيفرة كالتالي:
Employee Emp = new Employee();
Emp.EmployeeID=TxtEmpID.Text.ToString();
…………………..
Emp.save();
وتقوم الشيفرة الخاصة بالمنهج Save بانشاء كائن من الصف الخاص بالاتصال بقاعدة البيانات والذي هو في طبقة الدعم ولنفترض ان اسم هذا الصف هو DBConnection ويكون الباني (Constructor) الخاص بهذا الصف مسؤول عن فتح الاتصال بقاعدة البيانات ولنفترض اننا قمنا بانشاء كائن (Object) من هذا الصف
DBConnection EmpConn = new DBConnection("Connection String"):
نقوم بتمرير البيانات المخزنة في الغرض السابق Emp إلى الغرض الذي قمنا بانشائه من صف الDBConnection ومن ثم نقوم بالتخزين على قاعدة البيانات بشكل عادي ولكن تكون التعليمات الخاصة بالحفظ على قاعدة البيانات داخل صف الDBConnection
وفي هذه الحالة عند التعديل لن نحتاج الى وقت كثير فمثلا اذا اردنا ان نضيف الى بيانات الموظف الراتب مثلا فلن نحتاج الى الكثير
أو لنفترض الحالة الأصعب أننا نريد الانتقال من قاعدة بيانات SQL Server إلى Oracle في هذه الحالة لن نحتاج سوى التعديل في صف الDBConnection
في الحقيقة ان الموضوع اكبر من مقالة صغيرة أكتبها ولكن عبارة عن لمحة موجزة أو مجرد تحفيز للمبرمجين ليتعرفوا على هذه الطريقة الرائعة