كتاب إبدأ مع لغة أوبجكت باسكال

مقدمة الكتاب

بسم الله الرحمن الرحيم، والصلاة والسلام على أشرف اﻷنبياء والمرسلين، نبينا محمد وعلى آله وصحبه أجمعين.

أما بعد فهذا الكتاب موجه لمن يريد أن يتعلم لغة باسكال الكائنية (Object Pascal) لإستخدمها مع بيئة فري باسكال Free Pascal أو بيئة دلفي Delphi. فهو يصلُح للمبرمج الجديد الذي ليست لديه خبرة في البرمجة ولكن شرط أن يكون لديه خبرة ومعرفة في علوم الحاسوب. كذلك فهو يصلُح لمن كانت لديه خبرة في لغة برمجة أخرى ويريد تعلم هذه اللغة.

وبالنسبة للمبرمج الجديد فهذا الكتاب يساعد أيضاً على فهم وتعلم البرمجة عموماً حيث أنه يساعد المبرمج على فهم كيفية حل المشاكل البرمجية والحيل التي يقوم بها المبرمج في التطبيقات المختلفة.

 ‫.‬

فصول الكتاب

  • الفصل اﻷول أساسيات اللغة

  • الفصل الثاني البرمجة الهيكلية Structured Programming

  • الفصل الثالث الواجهة الرسومية Graphical User Interface

  • الفصل الرابع البرمجة الكائنية المنحى Object Oriented Programming

إضغط هنا للحصول على الكتاب

الحصول على الأمثلة المصاحبة للكتاب

المؤلف

معتز عبدالعظيم الطاهر

دراسة حالة: إضافة مقارنة هيكل قاعدة بيانات في برنامج توربو بيرد

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

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

تكلمنا سابقاً عن مشروع TurboBird، وهو برنامج لإدارة قواعد بيانات فيربيرد وهو مفتوح المصدر وقد بدأته بنهاية عام 2009. وأصبحت استخدمه كأداة مُساعدة في تطوير البرامج التجارية التي أقوم بعملها. وأثناء التطوير في البرامج التجارية أقوم بتصحيح المشاكل الموجودة في برنامج توربو بيرد وأحياناً أقوم بعمل إضافات فيه، وهذا حال كثير من الأدوات مفتوحة المصدر، إذ يقوم الداعم لها بإستخدامها في أعماله التجارية وتطويرها.

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

  1. أن الحل سوف يكون عام وممكن استخدامه مع أي مشروع آخر يستخدم قاعدة البيانات فيربيرد
  2. أن تعم الفائدة لبقية المبرمجين الذين يستخدمون قاعدة البيانات فيربيرد
  3. أن تكون ميزة تنافسية لصالح برنامج توربوبيرد من مما يُزيد من استخدامه

وفي الآونة اﻷخيرة أصبحت أجد أن هناك من يتكلم عن برنامج توربو بيرد، مثل هذا الخبر

استخدمت في إضافة ميزة مقارنة هيكل قاعدة البيانات طريقة البرمجة الرشيقة Extreme programming والتي تكلمنا عنها سابقاً، حيث بدأت بوضع الخطة والهدف العام، واﻷشياء السهلة، مثل مقارنة الوحدات الناقصة في قاعدة البيانات الثانية، مثل الجداول، والحقول وغيرها. ثم المرحة الثانية الوحدات التي تم تغييرها، مثل تغيير حجم حقل أو تغيير محتويات إجراء أو تغيير خصائص فهرس ثانوي أو رئيسي. والمرحلة اﻷخيرة حذف الخصائص التي تم حذفها في قاعدة البيانات اﻷصلية، مثل الحقول التي تم اﻹستغناء عنها في النسخة المتطورة من قاعدة البيانات. وفي المرحلة الرابعة (إختيارية) تعديل الصلاحيات التي تغيرت.

بعدها قُمت مباشرة بتصميم فورم بسيط به قاعدة البيانات اﻷصلية وإختيار قاعدة البيانات لمقارنتها بها. بعد ذلك قُمت بعمل إجراء لقراءة أسماء وحدات قاعدة البيانات في كلتا القاعدتين ثم مقارنتها وإنتاج قائمة بالمفقود. بعد ذلك قُمت بعمل إجراء لإنتاج Script ليقوم بإنشاء هذه الوحدات الناقصة في قاعدة البيانات الثانية. بعد ذلك أقوم بعمل إختبارات مكثفة للتأكد من أن هذه اﻹجراء تمت بصورة جيدة.

وفي المرحلة الثانية قُمت بكتابة إجراء لمقارنة الحقول الناقصة في الجداول الموجودة في كلتا القاعدين، ثم إنتاج Script لإنشائها في قاعدة البيانات الثانية.

بعد ذلك قُمت بإضافة إجراء لمقارنة الوحدات الموجودة في كلتا القاعدتين لمعرفة إذا كان هُناك فرق، مثل الحقول المتغيرة، الفهارس، والإجراءات، والـ Triggers، والـ Domains. وعند وجود فرق أقوم بتطبيق الفرق، أو حذف تلك الوحدة أو الخاصية ثم إنشائها بالطريقة الموجودة في قاعدة البيانات اﻷولى.

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

وفي المرحلة اﻷخيرة حذف الخصائص التي تم حذفها من قاعدة البينات الأصلية. واستثنيت من ذلك المستخدمين، حيث أن المستخدمين لم أعتبرهم جزء من هيكل البيانات، وإنما جزء من الإعدادات الخاصة بالزبائن. كذلك لم أقم بحذف الـ Roles، وذلك لأنه لم يتضح بشكل قاطع، هل هو خاصية من هيكل البيانات وجزء من البرامج أم أنه كسابقه جزء من إعدادات البرنامج.

الجزء اﻷخير والذي لم أقم بعمله لضيق الوقت وهو الصلاحيات التي تغيرت بين القاعدتين. وكانت المقولة التي استندت عليها في وضع الخطة للبرنامج هي “مالايُدرك كله لا يُترك جُله“. فكان الجزء الذي تم بفضل الله يكفي لهذه المرحلة ويُأتمم جزء كبير من عملية إصدار نُسخ جديدة للبرامج التجارية.

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

وهذا مثال لأحد اﻹجراءات في عملية المقارنة مكتوبة بلغة أوجكت باسكال:


procedure TfmComparison.ScriptRemovedFields;
var
  i: Integer;
  Line, ATableName, AFieldName: string;
begin
  if RemovedFieldsList.Count > 0 then
  begin
    fQueryWindow.meQuery.Lines.Add('');
    fQueryWindow.meQuery.Lines.Add('-- Removed Fields');
  end;

  for i:= 0 to RemovedFieldsList.Count - 1 do
  begin
    Line:= RemovedFieldsList[i];
    ATableName:= copy(Line, 1, Pos(',', Line) - 1);
    System.Delete(Line, 1, Pos(',', Line));
    AFieldName:= Line;
    fQueryWindow.meQuery.Lines.Add('alter table ' + ATableName + ' drop '
       + AFieldName + ';');
  end;
end;

طريقة تطوير البرامج باستخدام البرمجة الرشيقة: الـ Agile, Extreme Programming

منذ بدايتي مع البرمجة انتهجت اسلوب الـ Extreme programming والمصنف ضمن طريقة البرمجة الرشيقة Agile Software Development، لكن لم أعرف هذا المُسمى إلا مؤخراً.

وهي طريقة سريعة لتطوير البرامج، وليست كطريقة الـ Water fall التقليدية والمرتكزة على التحليل الكامل للنظام قبل بداية تطويره. أما طريقة الـ Extreme Programming فتكون بداية مرحلة الكود مبكرة جداً، حيث يتم تقسيم تطوير النظام إلى عدة مراحل، وتكون المرحلة الأولى بسيطة وفيها الأشياء الأساسية، وتكون هذه المرحلة متضمنة الميزات الأساسية، وأي ميزة إضافية تتم إضافتها لاحقاً عند الطلب.

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

يتم تقسيم النشاطات في طريقة الـ Extreme programming إلى أربع نشاطات وهي:

  1. كتابة الكود: حيث أن هذه المدرسة تعتِبر أن أهم ناتج في عملية تطوير البرامج هو الكود
  2. الاختبار: وهو اختبار الوحدات Unit testing، وإختبار القبول Acceptance test
  3. الاستماع: يجب على المبرمجين الاستماع إلى الزبون لفهم متطلبات النظام وفهم ما يُعرف بالـ Business logic
  4. التصميم: وهو وضع هيكل للبرامج وقواعد البيانات وكافة الإجراءات

ميزات هذه المدرسة لتطوير البرامج هي:

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