كتاب-برمجة1 (1) PDF

Document Details

Al-Quds Open University

2011

د. خميس ُعمر, د. خليل الهندي, د. يوسف أبو زر, د. عماد نزال, د. نبيل عرفان

Tags

C++ programming programming computer science object-oriented programming

Summary

This document is a course material for a C++ programming course at Al-Quds Open University. It discusses object-oriented programming concepts and covers the fundamentals of object-oriented programming in C++. The document was prepared in 2011.

Full Transcript

‫برنامج التكنولوجيا‬ ‫والعلوم التطبيقية‬ ‫برمجة (‪)1‬‬ ‫رقم املقرر ‪1291‬‬ ‫لغة برمجة ‪C ++‬‬ ‫إعـ ـ ـ ــداد‬ ‫د‪.‬خميس ُعمر‬ ‫د‪.‬خليل الهندي‬ ‫د‪.‬يوسف أ...

‫برنامج التكنولوجيا‬ ‫والعلوم التطبيقية‬ ‫برمجة (‪)1‬‬ ‫رقم املقرر ‪1291‬‬ ‫لغة برمجة ‪C ++‬‬ ‫إعـ ـ ـ ــداد‬ ‫د‪.‬خميس ُعمر‬ ‫د‪.‬خليل الهندي‬ ‫د‪.‬يوسف أبو زر‬ ‫د‪.‬عماد نزال‬ ‫د‪.‬نبيل عرفان‬ ‫حقوق الطبع محفوظة‬ ‫‪2011‬‬ ‫جامعة القدس املفتوحة‬ ‫مقرر ‪ :‬برمجة (‪ / )1‬رقم املقرر ‪1291‬‬ ‫د‪.‬خليل الهندي‬ ‫إعداد المادة العلمية‬ ‫د‪.‬خميس ُعمر‬ ‫أ‪.‬د‪.‬عبدالرؤوف احلالق‬ ‫ا لتحـــــــــكـيم‬ ‫أ‪.‬محمد البرازي‬ ‫التحـــرير اللغــوي‬ ‫فريق‬ ‫أ‪.‬محمد البرازي‬ ‫التصميم التعــليمي‬ ‫اإلعداد‬ ‫أ‪.‬محمد ج‪.‬الطيطي‬ ‫التصمــيم الفـــني‬ ‫واإلنتاج‬ ‫‪..................‬‬ ‫التدقيق الطـــباعي‬ ‫أ‪.‬هند ناصر‬ ‫التنضيد الطـــباعي‬ ‫د‪.‬عمــــــــاد نزال ‪ -‬د‪.‬يو سف أبو زر‬ ‫إعداد المادة العلمية‬ ‫د‪.‬نبيل عرمان‬ ‫د‪.‬حممد حممود ذويب‬ ‫ا لتحـــــــــكـيم‬ ‫د‪.‬خليل خليفة‬ ‫التحـــرير اللغــوي‬ ‫فريق‬ ‫ أ‪.‬فريهان بركات‬ ‫التصميم التعــليمي‬ ‫التطوير‬ ‫ أ‪.‬حممد ج‪.‬الطيطي‬ ‫التصمــيم الفـــني‬ ‫ أ‪.‬فريهان بركات‬ ‫التدقيق الطـــباعي‬ ‫ أ‪.‬عي سى الهندي ‪ -‬أ‪.‬عالية أبو رمان‬ ‫التنضيد الطـــباعي‬ ‫ أ‪.‬ن سيم أحمد احلو ساين‬ ‫المراجع ة النهائي ة‬ ‫منشورات جامعة القدس المفتوحة‬ ‫‪2010‬‬ ‫حقوق النشر والطبع محفوظة جلامعة القدس املفتوحة‬ ‫ص‪.‬ب (‪ )77‬أم السماق تلفون (‪ )5522561‬عمان ‪ -‬األردن‬ ‫بريد ألكتروني‪[email protected] :‬‬ ‫‪001.434‬‬ ‫رقــم التصـنـــــــــيف‬ ‫جامعة القد س املفتوحة‬ ‫المؤلف ومن هو في حكـمه‬ ‫برجمة (‪)1‬‬ ‫عنـــــوان المصــــــنف‬ ‫‪ -1‬برجمة احلا سوب‬ ‫رؤوس الموضـــــــوعات‬ ‫‪ -2‬احلوا سيب‬ ‫)‪(2008/3/690‬‬ ‫رقم اإليــــــــــــــداع‬ ‫عمان ‪ -‬جامعة القد س املفتوحة‬ ‫المالحظــــــــــــــات‬ ‫* مت اعداد بيانات الفهر سة الأولية من قبل املكتبة الوطنية‬ ‫مقدمة المقرر‬ ‫وصف املقرر‪:‬‬ ‫تعد لغة ‪ C ++‬من أكثر لغات البرمجة انتشار ًا واستخدام ًا في احلياة العملية وذلك‬ ‫ّ‬ ‫لكونها لغة مرنة وقوية متكن املبرمجني من كتابة برامج تعالج مشاكل متنوعة سواء أكانت‬ ‫علمية أم صناعية أم جتارية‪ ،‬وتظهر قوة هذه اللغة وإمكانياتها في كتابة برامج النظم (‪System‬‬ ‫‪ )Software‬مثل نظم التشغيل واملترجمات وغيرها‪.‬‬ ‫فقد أصبح هناك اهتمام واضح بالبرمجة الكينونية في تطوير البرمجيات‪ ،‬ونتيجة لذلك‬ ‫عملت إضافات للغة واسعة االنتشار وهي لغة ‪ C‬واشتق منها لغة ‪ ++C‬بحيث اشتملت اللغة‬ ‫ال في لغة ‪ ،C‬إضافة إلى العديد من املزايا واإلضافات‬ ‫اجلديدة على جميع املزايا املوجودة أص ً‬ ‫اخلاصة بالبرمجة الكينونية‪ ،‬وبذلك ميكن تطوير برمجيات مختلفة باستخدام أساليب البرمجة‬ ‫الكينونية باستخدام لغة ‪ C ++‬مما ميكن املبرمج من االستفادة من جميع اخلصائص اجليدة في‬ ‫البرمجة الكينونية مثل إعادة استخدام البرامج (‪ ،)Software Reuse‬والوراثة (‪،)Inheritance‬‬ ‫وإخفاء املعلومات (‪ )Information Hiding‬وغيرها من امليزات األخرى‪.‬‬ ‫لقد وضع هذا املقرر بحيث تعالج الوحدة األولى املفاهيم األساسية في تطوير البرامج‬ ‫الكينونية بصورة مستقلة عن أي لغة برمجة‪ ،‬وتعالج الوحدات ‪ 5-2‬املفاهيم األسـاسية للغة‬ ‫‪ ،C ++‬وتعالج الوحدة السادسة موضوع معاجلة امللفات بلغة ‪.C ++‬‬ ‫األهداف العامة للمقرر‪:‬‬ ‫بعد االنتهاء من دراسة هذا املقرر والقيام بالتدريبات واألنشطة الواردة فيه‪ ،‬يتوقع منك‪،‬‬ ‫عزيزي الدارس‪ ،‬أن تصبح قادرا على أن‪:‬‬ ‫تعرف املفاهيم األساسية لتطوير برامج كينونية املنحى‪.‬‬ ‫‪ّ.1‬‬ ‫تعرف كيفية التحليل والتصميم الكينوني والبرمجة الكينونية‪.‬‬ ‫‪ّ.2‬‬ ‫‪.3‬تستخدم األصناف بعناصرها املختلفة وتنشئ كائنات منها‪.‬‬ ‫‪.4‬تستخدم اإلدخال‪/‬اإلخراج في لغة ‪. C ++‬‬ ‫تعرف املصفوفات وتبني كيفية التعامل مع مصفوفات من الكائنات وإجراء العمليات‬ ‫‪ّ.5‬‬ ‫عليها‪.‬‬ ‫تعرف وتستخدم الدوال واألصناف الصديقة والعمليات‪.‬‬ ‫‪ّ.6‬‬ ‫أ‬ ‫‪.7‬تبني أنواع الوراثة املختلفة وكيفية استخدامها‪.‬‬ ‫تعرف وتستخدم الدوال واألصناف القالبية‪.‬‬ ‫‪ّ.8‬‬ ‫تعرف خاصية تعدد األوجه وتستخدمها عند حاجتها‪.‬‬ ‫‪ّ.9‬‬ ‫تعرف وتستخدم امللفات بأنواعها املختلفة‪.‬‬‫‪ّ.10‬‬ ‫محتوى املقرر‪:‬‬ ‫ويتألف هذا املقرر من ست وحدات دراسية على النحو التالي‪:‬‬ ‫الوحدة األولـى‪ :‬تطوير البرامج الكينونية‪ ،‬تهدف هذه الوحدة إلى تبيان املفاهيم املستخدمة‬ ‫في البرمجة الكينونية والتحليل الكينوني والتصميم الكينوني‪.‬‬ ‫الوحدة الثانيـة‪ :‬التراكيب واألصناف‪ ،‬تعرض هذه الوحدة أهم أنواع البيانات املركبة‪.‬وتركز‬ ‫بشكل خاص على األصناف والكائنات والدوال املنتمية‪.‬وهي بذلك أولى‬ ‫الوحدات التي تناقش املفاهيم األساسية للغة ‪.C ++‬‬ ‫الوحدة الثالثـة‪ :‬املصفوفات واألصناف‪ ،‬تشرح هذه الوحدة كيفية التعامل مع قائمة من‬ ‫الكائنات بطرق مختلفة‪.‬‬ ‫الوحدة الرابعة‪ :‬الدوال الصديقة والعمليات‪ ،‬تناقش كيفية تعريف الدوال الصديقة والعمليات‬ ‫وكيفية استخدامها‪.‬‬ ‫الوحدة اخلامسة‪ :‬األصناف املشتقة والقوالب‪ ،‬تناقش هذه الوحدة الطرق املختلفة إلعادة‬ ‫استخدام البرامج عن طريق اشتقاق األصناف والوراثة والدوال واألصناف‬ ‫القالبية‪.‬‬ ‫تتطرق هذه الوحدة إلى تعريف هيكل البيانات‬‫الوحدة السادسة‪ :‬معاجلة امللفات بلغة ‪ّ ،C ++‬‬ ‫وموقع امللفات بينها والطرق املختلفة في تنظيم امللفات والينابيع وكيفية‬ ‫إنشاء امللفات التتابعية وامللفات العشوائية وقراءتها وحتديثها وأيض ًا إدخال‬ ‫الكائنات وإخراجها‪.‬‬ ‫والله ولي التوفيق؛؛؛‬ ‫ب‬ ‫محتويات المقرر‬ ‫الصفحة‬ ‫عنوان الوحدة‬ ‫رقم الوحدة‬ ‫‪1‬‬ ‫تطوير البرامج الكينونية‬ ‫(‪)01‬‬ ‫‪21‬‬ ‫التراكيب واألصناف‬ ‫(‪)02‬‬ ‫‪69‬‬ ‫املصفوفات واألصناف‬ ‫(‪)03‬‬ ‫‪149‬‬ ‫الدوال الصديقة والعمليات‬ ‫(‪)04‬‬ ‫‪207‬‬ ‫األصناف املشتقة والقوالب‬ ‫(‪)05‬‬ ‫‪289‬‬ ‫معاجلة امللفات بلغة ‪C++‬‬ ‫(‪)06‬‬ ‫ج‬ ‫د‬ ‫الوحدة األولى‬ ‫تطوير البرامج الكينونية‬ Object-Oriented Programs Development ‫‪2‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫محتويات الوحدة‬ ‫الصفحة‬ ‫امل ــوض ـ ـ ـ ــوع‬ ‫‪5‬‬ ‫‪.1‬املقدمة‬ ‫‪5‬‬ ‫‪ 1.1‬متهيد‬ ‫‪5‬‬ ‫‪ 2.1‬أهداف الوحدة‬ ‫‪6‬‬ ‫‪ 3.1‬أقسام الوحدة‬ ‫‪6‬‬ ‫‪ 4.1‬القراءات املساعدة‬ ‫‪6‬‬ ‫‪ 5.1‬ما حتتاج إليه لدراسة الوحدة‬ ‫‪7‬‬ ‫‪.2‬املفاهيم األساسية لتطوير البرامج الكينونية‬ ‫‪10‬‬ ‫‪.3‬التحليل الكينوني (‪)Object-Oriented Analysis‬‬ ‫‪10‬‬ ‫‪ 1.3‬حتديد الكينونات‬ ‫‪10‬‬ ‫‪ 2.3‬حتديد خصائص الكينونات‬ ‫‪11‬‬ ‫‪ 3.3‬حتديد العالقات بني الكينونات‬ ‫‪13‬‬ ‫‪ 4.3‬جتميع الكينونات‬ ‫‪14‬‬ ‫‪.4‬التصميم الكينوني (‪)Object-Oriented Design‬‬ ‫‪14‬‬ ‫‪ 1.4‬بناء العمليات‬ ‫‪14‬‬ ‫‪ 2.4‬اختيار لغة البرمجة الكينونية‬ ‫‪16‬‬ ‫‪.5‬البرمجة الكينونية (‪)Object-Oriented Programming‬‬ ‫‪16‬‬ ‫‪ 1.5‬خصائص البرامج اجليدة‬ ‫‪17‬‬ ‫‪ 2.5‬اخلصائص األساسية في لغات البرمجة الكينونية‬ ‫‪18‬‬ ‫‪.6‬اخلالصة‬ ‫‪18‬‬ ‫‪.7‬حملة عن الوحدة الدراسية الثانية‬ ‫‪19‬‬ ‫‪.8‬إجابات التدريبات‬ ‫‪19‬‬ ‫‪.9‬مسرد املصطلحات‬ ‫‪20‬‬ ‫‪.10‬املراجع‬ ‫‪3‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪4‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪.1‬املقدمة‬ ‫‪ 1.1‬متهيد‬ ‫ال بك إلى الوحدة األولى من مقرر برمجة (‪ )1‬وهي بعنوان‬ ‫عزيزي الدارس‪ ،‬أه ً‬ ‫تطوير البرامج الكينونية‪.‬‬ ‫تهدف ه ذه الوحدة إل ى إعطائك معلومات أساسية فيما يتعلق بتطوير البرامج‬ ‫الكينونية وخاصة التحليل والتصميم الكينوني وتوضيح بعض املفاهيم واملصطلحات‬ ‫األساسية اخلاصة بذلك‪.‬‬ ‫تتناول هذه الوحدة تعريف املفاهيم األساسية اخلاصة بتطوير البرامج الكينونية إضافة‬ ‫إلى تعريف مفهوم التحليل الكينوني من حيث حتديد الكينونات وخصائصها والعالقات‬ ‫بينها‪.‬ويتلو ذل ك مناقشة التصميم الكينوني م ن حيث بناء العمليات واختيار لغة‬ ‫البرمجة الكينونية املناسبة‪.‬وأخيرا توضيح املفاهيم األساسية املرتبطة بالبرمجة الكينونية‬ ‫وخصائص البرمجة اجليدة إضافة إلى اخلصائص األساسية للغات البرمجة الكينونية‪.‬‬ ‫وقد زودت هذه الوحدة بالعديد من األمثلة التوضيحية‪ ،‬والتدريبات‪ ،‬وأسئلة‬ ‫التقومي الذاتي إضافة إل ى بعض الرسومات التي توضح بعض املفاهيم‪ ،‬وستجد‪،‬‬ ‫ال للتدريبات التي تصادفها في نهاية الوحدة‪.‬‬‫عزيزي الدارس‪ ،‬حلو ً‬ ‫مرة أخرى‪ ،‬نرحب بك‪ ،‬آملني أن تستمتع بدراستك للمادة التي نعرضها لك في‬ ‫هذه الوحدة‪.‬‬ ‫‪ 2.1‬أهداف الوحدة‬ ‫ينتظر منك‪ ،‬عزيزي الدارس‪ ،‬بعد فراغك من دراسة هذه الوحدة‪ ،‬أن تكون‬ ‫قادر ًا على أن‪:‬‬ ‫‪ّ.1‬‬ ‫تعرف املفاهيم املستخدمة في البرمجة الكينونية (‪.)Object-Oriented Programming‬‬ ‫‪ّ.2‬‬ ‫تعرف املفاهيم املستخدمة في التحليل الكينوني (‪.)Object-Oriented Analysis‬‬ ‫‪ّ.3‬‬ ‫تعرف املفاهيم املستخدمة في التصميم الكينوني (‪.)Object-Oriented Design‬‬ ‫‪ّ.4‬‬ ‫تطبق املفاهيم املستخدمة في البرمجة الكينونية (‪.)Object-Oriented Programming‬‬ ‫‪5‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪ 3.1‬أقسام الوحدة‬ ‫تتكون هذه الوحدة من أربعة أقسام رئيسة‪.‬فالقسم األول يبحث في املفاهيم‬ ‫املستخدمة في البرمجة الكينونية وبذلك يتحقق الهدف األول‪.‬أما القسم الثاني‬ ‫فيوضح املفاهيم املستخدمة في التحليل الكينوني بذلك يتحقق الهدف الثاني‪.‬‬ ‫أما القسم الثالث فيشرح تعريف املفاهيم املستخدمة في التصميم الكينوني وبذلك‬ ‫يتحقق الهدف الثالث‪.‬وأخيرا فإن القسم الرابع يوضح املفاهيم املستخدمة في‬ ‫البرمجة الكينونية وبذلك يتحقق الهدف الرابع‪.‬‬ ‫‪ 4.1‬القراءات املساعدة‬ ‫لقد قدمنا الكثير من املفاهيم واملواضيع األساسية املرتبطة بتطوير البرامج‬ ‫الكينونية في هذه الوحدة‪.‬ولذلك من املفيد ج دا‪ ،‬عزيزي ال دارس‪ ،‬أن تعود‬ ‫إلى املصادر التالية ملا تتضمنه من مادة علمية إضافية وأمثلة وإيضاحات ستساعدك‬ ‫على استيعاب املادة التي تضمنتها هذه الوحدة‪ ،‬وهذه املصادر هي‪:‬‬ ‫‪1. Adams, J. and Nyhoff, L., “C++ An Introduction to Comput-‬‬ ‫‪ing,” Prentice Hall, 3rd Edition, 2003.‬‬ ‫‪2. Deitel, H. and Deitel, P., “C++ How to Program,” ISBN: 0-13-‬‬ ‫‪185757-6, Deitel & Associates, 5th Edition, 2006.‬‬ ‫‪3. Skansholm, J., “C++ From the Beginning,” Addison Wesley, 2nd‬‬ ‫‪Edition, 2002.‬‬ ‫‪4. Stoustrup, B., “The C++ Programming Language,” Addison‬‬ ‫‪Wesley, 2nd Edition, 1993.‬‬ ‫‪ 5.1‬ما حتتاج إليه لدراسة الوحدة‬ ‫لقد تضمنت هذه الوحدة العديد من املفاهيم األساسية‪ ،‬وبذلك فإن طبيعة‬ ‫امل ادة املعروضة‪ ،‬عزيزي ال دارس‪ ،‬حتتاج إل ى جو ه ادئ خ اص ومريح حتى‬ ‫تستطيع التركيز على املفاهيم املعطاة‪ ،‬وتستوعبها بالشكل املناسب‪.‬وك ل ما‬ ‫حتتاجه بعد ذلك بعض القرطاسية كقلم رصاص وورق أبيض لتقوم بتطبيق بعض‬ ‫املفاهيم وحتل األسئلة والتدريبات املعطاة في ثنايا الوحدة‪.‬‬ ‫‪6‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪.2‬املفاهيم األساسية لتطوير البرامج الكينونية‬ ‫يعد مصطلح “الكينونية” من املصطلحات املهمة في عالم احلاسوب هذه األيام‪ ،‬فأنت‪،‬‬ ‫ّ‬ ‫عزيزي الدارس‪ ،‬تسمع مصطلحات كثيرة لها عالقة بهذا املصطلح مثل التحليل الكينوني‪،‬‬ ‫التصميم الكينوني‪ ،‬البرمجة الكينونية وغير ذلك من املصطلحات ذات الصلة‪.‬ولعلك تتساءل‬ ‫عن املعنى الدقيق لهذا املصطلح الذي أصبح يتردد بصورة كبيرة بني الدارسني لتخصصات‬ ‫احلاسوب إضافة إلى العاملني في مجاالت احلاسوب املختلفة‪ ،‬وحقيقة األمر أنه ال يوجد‬ ‫تعريف أو معنى دقيق ومطلق ملصطلح “الكينونية” ولكننا نستطيع القول أنه طريقة أو أسلوب‬ ‫جديد في تطوير البرامج واألنظمة احلاسوبية من خالل التركيز على الكينونات‪/‬الكائنات‬ ‫ال من التركيز على الوظائف الرئيسة التي يجب على هذه األنظمة إجنازها‪.‬‬ ‫الرئيسة فيها بد ً‬ ‫في هذه الوحدة‪ ،‬سنعرض‪ ،‬عزيزي الدارس‪ ،‬املفاهيم األساسية املتعلقة بالتحليل الكينوني‬ ‫باعتبارها خطوة أساسية في أي عملية تطوير للبرامج الكينونية من خالل حتديد الكينونات‬ ‫ثم‪ ،‬سنعرض املفاهيم واألفكار الرئيسة املتعلقة بالتصميم‬ ‫وخصائصها والعالقات بينها ومن ّ‬ ‫الكينوني من خالل بناء العمليات الرئيسة املرتبطة بالكينونات املختلفة إضافة إلى اختيار لغة البرمجة‬ ‫الكينونية املناسبة‪ ،‬وأخيراً‪ ،‬سنعرض املفاهيم األساسية املتعلقة بالبرمجة الكينونية من خالل التركيز‬ ‫على خصائص البرامج الكينونية اجليدة واخلصائص األساسية في لغات البرمجة الكينونية‪.‬‬ ‫وكما أشرنا‪ ،‬عزيزي الدارس‪ ،‬فإن التطوير الكينوني هو طريقة أو أسلوب جديد في تطوير‬ ‫ال من التركيز على‬‫البرامج واألنظمة احلاسوبية من خالل التركيز على الكينونات الرئيسة فيها بد ً‬ ‫الوظائف الرئيسة التي يجب على هذه األنظمة إجنازها‪ ،‬ولكن ما هو الكائن‪/‬الكينونة؟‬ ‫إن مفهوم الكائن (‪ )Object‬مرتبط مبجموعة من اخلصائص التي حتدد من خالل مجموعة‬ ‫من املتغيرات التي تصف حالته ومجموعة من العمليات التي يستطيع إجنازها‪.‬إن كل كائن‬ ‫(‪ )Object‬له حالة ميكن أن تتغير أثناء تنفيذ البرنامج‪.‬ولكن من أين نحصل على الكينونات‪/‬‬ ‫تعد األصناف (‪ )Classes‬مصنع ًا للكائنات‪ ،‬حيث تستخدم إلنشاء الكائنات التي‬ ‫الكائنات؟ ّ‬ ‫حتتوي على متغيرات ودوال منتمية‪.‬وستتعرف‪ ،‬عزيزي الدارس‪ ،‬على كيفية إنشاء الكائنات‬ ‫والتعامل معها في الوحدات القادمة من هذا املقرر‪.‬‬ ‫تعد البرمجة الكينونية أسلوب ًا جديد ًا في البرمجة‪ ،‬حيث توفر إمكانيات متعددة مثل التنظيم‬ ‫تعد أسلوب ًا جديد ًا في التفكير‬ ‫اجليد‪ ،‬واالستخدام املتعدد‪ ،‬واملقاطع البرمجية املتكاملة‪ :‬كما ّ‬ ‫وفي بناء البرامج؛ حيث جتمع البرامج حقول البيانات مع البرامج الفرعية التي تستند في عملها‬ ‫‪7‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫على تلك احلقول في بنية واحدة تسمى كائن ًا (‪ )Object‬ويتم التعامل مع الكائن (‪)Object‬‬ ‫وكأنه وحدة واحدة‪.‬‬ ‫ومن املناسب أن يكون هدفنا عند استخدام الكينونات أن نبني نظام ًا أو منوذج ًا يحاكي‬ ‫املسألة قيد الدراسة كما هو في الواقع‪ ،‬ولتقريب ذلك إلى األذهان‪ ،‬ميكن اعتبار احلاسوب‬ ‫منوذجاً‪ ،‬ومن ثم‪ ،‬فإن هذا النموذج ميتلك كينونات تشكل جزءا من تركيبته‪ ،‬وكل كينون له‬ ‫مهمة محددة ويستخدم أدواته اخلاصة به وله روابط مع الكينونات األخرى‪ ،‬فعلى سبيل املثال‪،‬‬ ‫تعد لوحة املفاتيح والفأرة ووحدة املعاجلة املركزية والقرص الصلب كينونات تشكل جزء ًا من‬ ‫ّ‬ ‫تركيبة احلاسوب ولكل منها مهمة محددة‪.‬‬ ‫مثال (‪)1‬‬ ‫اكتب برنامج ًا حلساب صافي رواتب عدد من املوظفني في دائرة معينة‪ ،‬وإمكانية معرفة‬ ‫صافي راتب أي موظف عند اللزوم‪.‬‬ ‫إن مواصفات قيد كل موظف هي‪ :‬االسم‪ ،‬الراتب اإلجمالي‪ ،‬االقتطاعات‪،‬‬ ‫صافي الراتب‪ ،‬الدائرة‪.‬وحلل املسألة يحدد كل كينون وتركيبه‪ ،‬وميكن مالحظة وجود‬ ‫كينونني في هذه املسألة هما املوظف والدائرة‪.‬ونحتاج معرفة املتغيرات التي يتضمنها كل‬ ‫كينون وهي بيانات محلية خاصة بالكينون نفسه وذلك كما يلي‪:‬‬ ‫الكينون «موظف»‬ ‫يضم مجموعة اخلصائص التالية‪:‬‬ ‫ اسم املوظف‪ :‬مجموعة الرموز‪.‬‬ ‫ الراتب اإلجمالي‪ :‬عدد حقيقي‪.‬‬ ‫ االقتطاعات‪ :‬عدد حقيقي‪.‬‬ ‫ صافي الراتب‪ :‬عدد حقيقي‪.‬‬ ‫الكينون «الدائرة»‬ ‫يضم مجموعة اخلصائص التالية‪:‬‬ ‫ اسم الدائرة‪ :‬مجموعة رموز‪.‬‬ ‫ مجموعة كينونات (موظفني)‪ :‬منظومة من املوظفني‪.‬‬ ‫ عدد املوظفني في الدائرة‪ :‬عدد صحيح‪.‬‬ ‫‪8‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫ومن اجلدير بالذكر أن البرمجة الكينونية تهدف إلى إضافة ميزات التعميم عند تصميم‬ ‫الكينون األمر الذي يتطلب حتديد مجموعة من العمليات على الكينون وتعريفها وهي التي‬ ‫تساعد املستخدم على تنفيذ مهامه‪.‬ومن العمليات في الكينون «موظف»‪ ،‬نذكر ما يلي‪:‬‬ ‫‪ -1‬بناء‪/‬إنشاء الكينون وحتديد املعطيات األولية‪.‬‬ ‫‪ -2‬حتديد اسم املوظف وإسناده‪.‬‬ ‫‪ -3‬تعيني البيانات اخلاصة باملوظف‪.‬‬ ‫‪ -4‬حساب صافي الراتب‪.‬‬ ‫‪ -5‬إظهار النتائج‪.‬‬ ‫‪ -6‬إنهاء وجود الكينون‪.‬‬ ‫وبالطريقة نفسها حتدد العمليات املطلوبة للكينون “الدائرة”‪.‬كما أنه من اجلدير‬ ‫بالذكر أن املهام التي يقوم بها كل كينيون تشكل اخلدمات التي يقدمها الكينون للكينونات‬ ‫األخرى‪ ،‬فإذا مت استدعاء عملية من خالل كينون معني‪ ،‬فإنه يطلب منه تأدية مهمة تفيد‬ ‫كينون ًا آخر‪.‬‬ ‫أسئلة التقومي الذاتي (‪)1‬‬ ‫‪.1‬ما املقصود بالكينونية؟‬ ‫‪.2‬وضح الفرق بني الكينونات واألصناف‪.‬‬ ‫‪9‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪Object-Oriented Analysis‬‬ ‫‪.3‬التحليل الكينوني‬ ‫إن الهدف من التحليل الكينوني هو أن تصبح‪ ،‬عزيزي الدارس‪ ،‬على معرفة أكبر‬ ‫مبتطلبات البرنامج أو النظام والبدء في عملية بناء لنموذج أولي للبرنامج من خالل التركيز‬ ‫على الكائنات األساسية‪ ،‬حيث ميكن تلخيص هذه العملية مبا يلي‪:‬‬ ‫‪ -‬حتديد الكائنات في هذا النموذج األولي‪.‬‬ ‫‪ -‬وصف خصائص الكائنات‪.‬‬ ‫‪ -‬ربط الكائنات املختلفة مع بعضها‪.‬‬ ‫‪ -‬جتميع الكائنات املختلفة‪.‬‬ ‫‪ 1.3‬حتديد الكينونات‬ ‫قد تبدو عملية حتديد الكائنات األساسية معقدة في البداية‪ ،‬إال أن التفكير في البرنامج‬ ‫الكينوني والنظر إليه باعتباره منوذج ًا لتمثيل الواقع يجعل هذه العملية سهلة نسبي ًا وذلك‬ ‫من خالل جعل كل شيء له خصائص معينة ميكن متثيلها من خالل بيانات معينة في هذا‬ ‫الواقع كائناً‪ ،‬كما أن هناك طريقة أخرى لتحديد الكائنات وذلك من خالل التركيز على‬ ‫األسماء األساسية املستخدمة في وصف وظائف البرنامج أو النظام والنظر إليها باعتبارها‬ ‫كائنات محتملة في البرنامج الكينوني‪.‬‬ ‫‪ 2.3‬حتديد خصائص الكينونات‬ ‫إن لكل كائن (‪ )Object‬مجموعة من امليزات التي تصفه وتوضح حالته‪ ،‬وميكن‪،‬‬ ‫عزيزي الدارس‪ ،‬االستفادة من عملية وصف خصائص الكائنات لتحديد الكائنات الصحيحة‬ ‫واملطلوبة‪ ،‬وذلك من خالل استثناء بعض الكائنات التي ليس لها خصائص ضمن البرنامج‪.‬‬ ‫فإذا افترضنا أننا بصدد حتديد الكينونات في نظام التسجيل في جامعة القدس‬ ‫املفتوحة‪ ،‬فإننا نالحظ أن هناك عدد ًا من الكينونات مثل املقررات الدراسية والدارسني واملشرفني‬ ‫األكادمييني وغيرها‪.‬إن كل كائن (‪ )Object‬من هذه الكينونات له مجموعة من اخلصائص التي‬ ‫ميكن متثيلها ببيانات معينة‪.‬فاملقرر‪ ،‬على سبيل املثال‪ ،‬له مجموعة من اخلصائص مثل الرقم‪،‬‬ ‫االسم‪ ،‬عدد الساعات‪ ،‬الوصف ‪...‬إلخ‪.‬والدارس له مجموعة من اخلصائص مثل الرقم‪،‬‬ ‫يعد مؤشر ًا أساسي ًا‬ ‫االسم‪ ،‬العنوان‪ ،‬رقم الهاتف‪ ،‬العنوان‪...‬إلخ‪.‬إن وجود هذه اخلصائص ّ‬ ‫كينونات أساسية في نظام التسجيل‪.‬‬ ‫ٌ‬ ‫على أن املقررات والدارسني‬ ‫‪10‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫وعادة ما متثل األصناف التي تشتق منها الكينونات باستخدام رمز خاص هو‬ ‫املستطيل‪ ،‬حيث يقسم املستطيل إلى ثالثة أقسام‪ ،‬يوضع في القسم األول العلوي اسم‬ ‫الصنف‪ ،‬وفي القسم الثاني خصائص الصنف‪ ،‬وفي القسم الثالث مجموعة العمليات‬ ‫املختلفة اخلاصة بالصنف‪.‬‬ ‫ ‬‫مثال (‪)2‬‬ ‫لتمثيل الصنف “العربة” التي لها اخلصائص “السرعة‪ ،‬اللون‪ ،‬الوزن” والعملية‬ ‫“تغيير السرعة”‪ ،‬نستخدم الرمز اخلاص بذلك ونقوم بتقسيمه حسب ما مت توضيحه‬ ‫سابق ًا كما يلي‪:‬‬ ‫العربة‬ ‫السرعة‬ ‫اللون‬ ‫الوزن‬ ‫تغيير السرعة‬ ‫‪ 3.3‬حتديد العالقات بني الكينونات‬ ‫إن عملية التحليل الكينوني ستوضح العالقات والروابط األساسية بني الكائنات املختلفة‬ ‫وذلك من خالل التركيز على التفاعالت املختلفة بني الكائنات وعالقة الكائنات املختلفة بعضها‬ ‫ببعض‪ ،‬وبشكل عام‪ ،‬فإن هناك ثالثة أنواع أساسية من العالقات‪:‬‬ ‫‪ -‬عالقة يعرف (‪)knows‬‬ ‫‪ -‬عالقة يكون (‪)is‬‬ ‫‪ -‬عالقة ميلك (‪)has‬‬ ‫يوضح الشكل (‪ )1‬عالقة يعرف (‪ )knows‬بني الدارس واملقرر الذي سيدرسه؛ إذ‬ ‫يجب على الدارس أن يعرف املقرر الذي سيدرسه كما يجب أن يكون ملقرر معني قائمة‬ ‫من الدارسني الذين سيدرسونه‪.‬‬ ‫‪11‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫املقرر‬ ‫يدرس‬ ‫الطالب‬ ‫الشكل (‪)1‬‬ ‫مكون من‬ ‫ٌ‬ ‫أما العالقة الثانية فهي عالقة ميلك (‪ ،)has‬التي تصف حقيقة أن كائن ًا معين ًا‬ ‫أجزاء أخرى حيث إن كل جزء ميثل كائن ًا آخر‪.‬فعلى سبيل املثال‪ ،‬يتكون جهاز احلاسوب‬ ‫من شاشة‪ ،‬لوحة مفاتيح‪ ،‬فأرة‪... ،‬إلخ ويوضح الشكل (‪ )2‬عالقة ميلك (‪ )has‬بني‬ ‫جهاز حلاسوب وأجزائه املختلفة‪.‬‬ ‫احلاسوب‬ ‫)‪Empty (weak aggregation‬‬ ‫)‪(strong aggregation‬‬ ‫فأرة‬ ‫لوحة مفاتيح‬ ‫شاشة‬ ‫الشكل (‪)2‬‬ ‫أما العالقة الثالثة في عملية تطوير البرامج الكينونية فهي عالقة يكون (‪ )is‬التي‬ ‫تصف حقيقة أن كائن ًا معين ًا يكون له خصائص عامة يشترك بها مع أصناف أخرى حيث‬ ‫يتم وصف اخلصائص العامة من خالل صنف رئيس‪ ،‬فعلى سبيل املثال‪ ،‬فإن السيارات‪،‬‬ ‫والدراجات والقطارات لها خصائص مشتركة مثل السرعة والوزن حيث ميكن تعميمها‬ ‫في صنف رئيس يسمى العربة كما هو موضح في الشكل (‪.)3‬‬ ‫احلاسوب‬ ‫فأرة‬ ‫لوحة مفاتيح‬ ‫شاشة‬ ‫الشكل (‪)3‬‬ ‫‪12‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫وهناك بعض اخلصائص احمللية التي تكون خاصة باألصناف الفرعية وال تنطبق على‬ ‫الصنف الرئيس مثل قوة احملرك للسيارة وعدد العربات للقطار‪ ،‬وهل هناك غيار أم ال‬ ‫للدراجة‪.‬وباستخدام هذه العالقة فإنه ميكن القول أن السيارة عربة وأن الدراجة عربة وكذلك‬ ‫القطار فإنه عربة‪.‬متثل هذه العالقة خاصية أساسية في البرمجة الكينونية وهي مفهوم الوراثة‬ ‫(‪ )Inheritance‬التي متكننا من استخدام كائنات عرفت سابق ًا وتعديلها واإلضافة عليها مبا‬ ‫يتناسب مع متطلبات برامج جديدة‪.‬‬ ‫وهناك مالحظة بخصوص الرموز املستخدمة في وصف العالقات املختلفة؛ إذ قمنا‬ ‫باستخدام الرموز املستخدمة في لغة بناء النماذج املوحدة املسماة ‪Unified Modeling‬‬ ‫‪ Language) UML‬التي تعد لغة شبه قياسية في بناء النماذج اخلاصة بتطوير البرامج واألنظمة‬ ‫الكينونية‪.‬‬ ‫‪ 4.3‬جتميع الكينونات‬ ‫إن البرامج الكبيرة نسبيا تشتمل عادة على عدد كبير نسبيا من األصناف‪ ،‬ولذلك فإنه من‬ ‫املفيد جد ًا جتميع األصناف املترابطة مع بعضها في مجموعة من الرزم (‪ )Packages‬وذلك‬ ‫لتسهيل عملية التعامل مع البرنامج ولتنظيم األصناف املختلفة مبا يكفل تسهيل عملية التعديل‬ ‫والصيانة لهذه األصناف‪.‬‬ ‫ ‬ ‫تدريب (‪)1‬‬ ‫إذا علمت أن السيارة مكونة من محرك‪ ،‬وعجالت‪ ،‬وجسم‪ ،‬فمثل ذلك‬ ‫باستخدام العالقة املناسبة‪.‬‬ ‫ ‬ ‫تدريب (‪)2‬‬ ‫إذا علمت أن األشخاص املوجودين في جامعة القدس املفتوحة ينتمون إلى عدة فئات؛‬ ‫فمنهم اإلداريون‪ ،‬واألكادمييون والدارسون‪ ،‬فمثل ذلك باستخدام العالقة املناسبة‪.‬‬ ‫ ‬‫أسئلة التقومي الذاتي (‪)2‬‬ ‫‪.1‬ما الفرق بني عالقة «يكون» وعالقة «يعرف»؟‬ ‫‪.2‬كيف ميكن حتديد الكينونات األساسية في برنامج معني؟‬ ‫‪13‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪.4‬التصميم الكينوني ‪Object-Oriented Design‬‬ ‫لقد قمنا‪ ،‬عزيزي الدارس‪ ،‬بوصف عملية التحليل الكينوني التي متثل املرحلة‬ ‫األولى في عملية تطوير البرامج الكينونية‪ ،‬وإلى جانب كونها العملية األولى‪ ،‬إال أنها‬ ‫متثل املرحلة األساسية التي تعتمد عليها املراحل الالحقة حيث يأتي بعدها عملية التصميم‬ ‫الكينوني التي يتم أثناءها عمل الرسومات والنماذج اخلاصة بالبرنامج الكينوني وإكمال‬ ‫إضافة بعض املعلومات لألصناف وذلك من خالل التركيز على كيفية عمل األشياء وليس‬ ‫فقط على مجرد التركيز على حتديد هذه األشياء‪.‬‬ ‫‪ 1.4‬بناء العمليات‬ ‫ففي هذه املرحلة‪ ،‬يتم البدء بالكائنات التي حددت في مرحلة التحليل الكينوني وتتم‬ ‫إضافة التفصيالت الضرورية التي قد تشمل تطبيق مجموعة من اخلوارزميات املالئمة‬ ‫واتخاذ القرارات اخلاصة بكيفية إجناز العمليات املختلفة واملعلمات (‪ )Parameters‬التي‬ ‫حتتاجها‪ ،‬إضافة إلى اختيار الطريقة األنسب للتمثيل الداخلي لهذه الكائنات‪.‬‬ ‫فعلى سبيل املثال‪ ،‬إذا كنا بصدد بناء برنامج للتعامل مع األشكال الهندسية املختلفة‬ ‫مثل املستطيل‪ ،‬املربع‪ ،‬الدائرة‪ ،‬املثلث‪ ،‬فإنه من الواضح أن املستطيل هو أحد األصناف‬ ‫األساسية هنا‪.‬إن هناك مجموعة من اخلصائص التي ميكن حتديدها للمستطيل مثل‬ ‫الطول والعرض حيث يتم ذلك في العادة أثناء مرحلة التحليل‪.‬أما في مرحلة التصميم‬ ‫فإننا نحتاج إلى حتديد العمليات األساسية على هذا املستطيل مثل عملية حساب مساحة‬ ‫املستطيل حيث نقوم بتحديد كيفية حساب املساحة من خالل عملية ضرب طول املستطيل‬ ‫بعرضه‪.‬من الواضح أن هذه العملية حتتاج‪ ،‬بصورة عامة‪ ،‬إلى معلمتني أساسيتني وهما‬ ‫طول املستطيل وعرضه‪ ،‬وسوف تقوم بإعادة قيمة املساحة‪.‬‬ ‫‪ 2.4‬اختيار لغة البرمجة الكينونية‬ ‫ففي مرحلة التصميم الكينوني أيضا‪ ،‬تتم عملية اتخاذ القرار بخصوص لغة البرمجة‬ ‫املناسبة التي سيتم استخدامها لكتابة البرامج الالزمة لتنفيذ التصميم الكينوني حيث إن‬ ‫للغة البرمجة تأثير ًا كبير ًا على نواح كثيرة للكائنات املختلفة إضافة إلى قدرة البرنامج على‬ ‫االتصال مع البيئة احمليطة به‪.‬‬ ‫‪14‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫واجلدير ذكره أنه يفضل أن تتم عملية تنفيذ التصميم الكينوني بلغة برمجة كينونية‬ ‫يعد شرط ًا أساسياً؛ إذ ميكن أن تتم عملية التنفيذ بلغة غير كينونية وذلك‬ ‫إال أن ذلك ال ّ‬ ‫يعد أمر ًا‬ ‫من خالل التعامل مع األصناف وكأنها تراكيب بيانات جتريدية‪ ،‬إال أن ذلك ال ّ‬ ‫محبذ ًا ألننا سنفقد اخلصائص واحلسنات األساسية املرتبطة بتطوير البرامج الكينونية‬ ‫وخاصة الفائدة من إعادة استخدام بعض األصناف والوراثة وإخفاء املعلومات وغيرها‬ ‫من امليزات اجليدة لتطوير البرامج الكينونية‪.‬‬ ‫أسئلة التقومي الذاتي (‪)3‬‬ ‫‪.1‬ما الفرق األساسي بني التحليل الكينوني والتصميم الكينوني؟‬ ‫‪.2‬وضح الفائدة من استخدام لغة برمجة كينونية لتنفيذ التصميم الكينوني‪.‬‬ ‫‪15‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪.5‬البرمجة الكينونية ‪Object-Oriented Programming‬‬ ‫إن الهدف من مرحلة البرمجة في تطوير البرامج واألنظمة‪ ،‬بصورة عامة‪ ،‬هو تنفيذ‬ ‫النظام والوصول إلى برامج قابلة للتنفيذ‪ ،‬إال أن كون البرنامج قاب ً‬ ‫ال للتنفيذ ال يعني‬ ‫بالضرورة أنه برنامج جيد باملقاييس العامة كما أن هناك مجموعة من اخلصائص اجليدة‬ ‫للغات البرمجة الكينونية وهو ما سنقوم بتوضيحه في األقسام التالية من هذه الوحدة‪.‬‬ ‫‪ 1.5‬خصائص البرامج اجليدة‬ ‫ميكن اعتبار البرنامج جيدا إذا توافرت فيه اخلصائص األساسية التالية‪:‬‬ ‫‪ -1‬أن يكون برنامج ًا صحيحاً‪ :‬ميكن القول أن برنامج ًا معين ًا هو برنامج صحيح إذا قام بأداء‬ ‫وتعد هذه اخلاصية من‬ ‫الوظيفة احملددة في مرحلة التحليل والتصميم من دون أخطاء‪ّ.‬‬ ‫أهم اخلصائص الالزم توافرها في البرامج‪ ،‬بصورة عامة؛ إذ إن البرامج التي حتتوي على‬ ‫أخطاء ال ميكن قبولها بحال من األحوال وبذلك فإنه ال ميكن القول بأنها برامج جيدة‪.‬‬ ‫‪ -2‬أن يكون برنامج ًا فعا ًال‪ :‬ميكن القول أن البرنامج فعال إذا قام بأداء الوظيفة املطلوبة من‬ ‫خالل االستغالل األمثل لنظام احلاسوب ومكوناته‪.‬إن هذه اخلاصية أيضا مهمة جدا؛‬ ‫فالبرنامج الذي يحل مسألة معينة في وقت أطول من الوقت الذي يحتاجه اإلنسان حلل‬ ‫املسألة نفسها ال ميكن قبوله أو القول بأنه برنامج جيد من حيث الفعالية‪.‬‬ ‫ال إلعادة االستخدام‪ :‬ميكن القول أن البرنامج قابل إلعادة‬ ‫‪ -3‬أن يكون برنامج ًا قاب ً‬ ‫االستخدام إذا ُبني من مكونات ميكن االستفادة منها في بناء برامج أخرى‪.‬وفي العادة‬ ‫تكون البرامج اجلديدة التي سيتم االستفادة في بنائها من برامج أخرى برامج مشابهة‬ ‫للبرامج األصلية‪.‬ومن اجلدير ذكره أنه ليس من السهولة بناء برامج قابلة إلعادة‬ ‫االستخدام حيث إن هناك مجموعة من القيود والشروط التي يجب أن حتققها املكونات‬ ‫التي ميكن إعادة استخدامها‪ ،‬إال أن الفائدة التي نحصل عليها تكون كبيرة ومبررة للجهد‬ ‫املبذول للوصول إلى تلك البرامج‪.‬‬ ‫وتعد اخلصائص السابقة من اخلصائص األساسية للبرامج اجليدة‪ ،‬بصورة عامة‪ ،‬إال أن‬ ‫ّ‬ ‫هناك مجموعة أخرى من اخلصائص املهمة التي يجب توافرها في البرامج‪ ،‬بصورة عامة‪،‬‬ ‫مثل أن يكون برنامج ًا مرن ًا وقاب ً‬ ‫ال للتكيف مع الظروف والبيئات التي سيعمل بها وأن تكون‬ ‫تكلفة صيانته منخفضة‪.‬‬ ‫‪16‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪ 2.5‬اخلصائص األساسية في لغات البرمجة الكينونية‬ ‫إن من اخلصائص األساسية‪ ،‬عزيزي الدارس‪ ،‬للغات البرمجة الكينونية هو توافر‬ ‫املكونات الرئيسة التي متكننا من حتقيق فائدتني أساسيتني في البرمجة الكينونية وهما‪:‬‬ ‫‪.1‬خاصية إخفاء املعلومات (‪)Information Hiding‬‬ ‫ان املقصود بهذه اخلاصية في لغة البرمجة الكينونية أن حتتوي هذه اللغة على تركيب معني‬ ‫ميكننا من تعريف خصائص الكائن ووضعه‪ ،‬من متغيرات ودوال منتمية‪ ،‬في مكان واحد في‬ ‫البرنامج وبحيث ال تتمكن الكائنات األخرى من الوصول إلى هذه اخلصائص أو رؤيتها‪.‬‬ ‫‪.2‬خاصية الوراثة (‪)Inheritance‬‬ ‫إن املقصود بهذه اخلاصية في لغة البرمجة الكينونية أن حتتوي هذه اللغة على تركيب‬ ‫معني ميكننا من إعادة استخدام كائنات عرفت سابق ًا وتعديلها واإلضافة عليها مبا يتناسب مع‬ ‫متطلبات البرنامج اجلديد‪.‬إن هذه اخلاصية‪ ،‬عزيزي الدارس‪ ،‬مرتبطة بالعالقة (يكون) التي‬ ‫مت توضيحها سابقاً‪.‬‬ ‫إن هاتني اخلاصيتني ال تعنيان‪ ،‬عزيزي الدارس‪ ،‬أنهما اخلاصيتان املطلوبتان فقط في‬ ‫لغات البرمجة الكينونية اجليدة‪ ،‬ولكنهما متثالن احلد األدنى من اخلصائص اجليدة املطلوبة‪.‬‬ ‫فعلى سبيل املثال‪ ،‬فإن وجود إمكانية بناء برامج فرعية عامة (‪ )Generic Subprograms‬هي‬ ‫من اخلصائص املهمة في لغات البرمجة‪ ،‬وال شك في أن وجودها يسهل في عملية بناء برامج‬ ‫عامة ميكنها التعامل مع أنواع مختلفة من البيانات‪ ،‬مما يسهل على املبرمجني عملية كتابة برامج‬ ‫فرعية لكل نوع من أنواع البيانات ويقلل من حجم األسطر وعددها املطلوب كتابتها‪ ،‬مما يزيد‬ ‫من إنتاجية املبرمجني‪ ،‬بصورة عامة‪ ،‬حيث تعد إنتاجية املبرمجني عند استخدام لغة برمجة‬ ‫معينة من العوامل املهمة في اختيار لغة البرمجة التي سيتم استخدامها في بناء برنامج معني‪.‬‬ ‫أسئلة التقومي الذاتي (‪)4‬‬ ‫‪.1‬ما اخلصائص األساسية للبرامج الكينونية اجليدة؟‬ ‫‪.2‬ما اخلصائص األساسية للغات البرمجة الكينونية اجليدة؟‬ ‫‪17‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪.6‬اخلالصة‬ ‫مت في هذه الوحدة إعطاؤك معلومات أساسية فيما يتعلق بتطوير البرامج‬ ‫الكينونية‪ ،‬وخاصة التحليل‪ ،‬والتصميم الكينوني‪ ،‬وتوضيح بعض املفاهيم‬ ‫واملصطلحات األساسية اخلاصة بذلك‪.‬لقد تناولت هذه الوحدة تعريف املفاهيم‬ ‫األساسية اخلاصة بتطوير البرامج الكينونية إضافة إلى تعريف مفهوم التحليل‬ ‫الكينوني من حيث‪ ،‬حتديد الكينونات وخصائصها والعالقات بينها‪.‬وتبع ذلك‬ ‫مناقشة التصميم الكينوني من حيث‪ ،‬بناء العمليات واختيار لغة البرمجة الكينونية‬ ‫املناسبة‪.‬وأخيرا توضيح املفاهيم األساسية املرتبطة بالبرمجة الكينونية وخصائص‬ ‫البرمجة اجليدة إضافة إلى اخلصائص األساسية للغات البرمجة الكينونية‪.‬‬ ‫‪.7‬حملة عن الوحدة الدراسية الثانية‬ ‫في الوحدة الثانية‪ ،‬سوف نتطرق إلى تفصيالت أكثر بلغة‪ ،C ++‬حيث سيتم‬ ‫شرح مفاهيم أساسية وخاصة مفهوم األصناف الذي يعد الفكرة األساسية في‬ ‫لغات البرمجة الكينونية (‪.)Object-Oriented Languages‬كما سنتطرق ملفاهيم‬ ‫التراكيب (‪ )Structures‬التي تقابل السجالت (‪ )Records‬وعالقتها باألصناف‬ ‫وتوضيح كيفية التعامل معها واستخداماتها في البرامج املختلفة‪.‬‬ ‫‪18‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫‪.8‬إجابات التدريبات‬ ‫تدريب (‪)1‬‬ ‫السيارة‬ ‫اجلسم‬ ‫العجالت‬ ‫احملرك‬ ‫تدريب (‪)2‬‬ ‫الشخص‬ ‫دارس‬ ‫أكادميي‬ ‫إداري‬ ‫‪.9‬مسرد املصطلحات‬ ‫البرمجة الكينونية ‪ :Object-Oriented Programming‬هي البرمجة التي تستخدم‬ ‫‪-‬‬ ‫الكينون أساس ًا لبناء البرامج حيث تتعامل الكينونات مع بعضها لتحقيق أهداف البرمجة‪.‬‬ ‫التحليل الكينوني ‪ :Object-Oriented Analysis‬هو التحليل الذي يستند إلى‬ ‫‪-‬‬ ‫أساسيات البرمجة الكينونية ويستخدم الكينون أساس ًا لتحليل النظام‪.‬‬ ‫التصميم الكينوني ‪ :Object-Oriented Design‬هو التصميم الذي يستند إلى‬ ‫‪-‬‬ ‫أساسيات البرمجة الكينونية ويستخدم الكينون أساس ًا لتصميم النظام‪.‬‬ ‫‪19‬‬ ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬.‫ مجموعة من األصناف املترابطة مع بعضها‬:Package ‫الرزمة‬ - ،‫ يستخدم لوصف مجموعة كينونات لها السمات أو املالمح نفسها‬:Class ‫الصنف‬ -.‫وتقوم بعمليات متشابهة‬.‫جزء من البرنامج يضم البيانات والعمليات في قالب واحد‬:Object ‫الكائن‬ - ‫ برامج فرعية ميكنها التعامل مع عدة‬:Generic Subprograms ‫برامج فرعية عامة‬ -.‫أمناط من البيانات‬ ‫ عملية وضع قيود على الوصول‬:Information Hiding ‫خاصية إخفاء املعلومات‬ -.‫ إال باألساليب والصالحيات احملددة‬،‫إلى املعلومات‬ ‫ استخدام السمات واملالمح نفسها املوجودة لدى‬: Inheritance ‫خاصية الوراثة‬ - ‫ حيث ميكن أن يرث كينون ما بعض سماته وخصائصه من‬،‫كينون بوساطة كينون آخر‬.‫كينون آخر‬ ‫ املراجع‬.10 1. Adams, J. and Nyhoff, L., “C++ An Introduction to Computing”, Prentice Hall, 3rd Edition, 2003. 2. Deitel, H. and Deitel, P., “C++ How to Program”, ISBN: 0-13- 185757-6, Deitel & Associates, 5th Edition, 2006. 3. Keogh, J., “Object Oriented Programming: Principles and Fun- damentals”, Dreamtech Press, 2004. 4. Oestereich, B., “Developing Software with UML: Object-Oriented in Design and Practice”, Harlow: Addison-Wesley. 5. Skansholm, J., “C++ From the Beginning”, Addison Wesley, 2nd Edition, 2002. 6. Stoustrup, B., “The C++ Programming Language”, Addison Wes- ley, 2nd Edition, 1993. 7. Wirfs-Brock, R., Wilkerson, B., Wiener, L., “Designing Object-Ori- ented Software”, Prentice Hall, Inc. 20 ‫تطوير البرامج الكينونية‬ ‫الوحدة األولى‬ ‫الوحدة الثانية‬ ‫التراكيب واألصناف‬ ‫‪Structures and Classes‬‬ ‫‪22‬‬ ‫التراكيب واألصناف‬ ‫الوحدة الثانية‬ ‫محتويات الوحدة‬ ‫الصفحة‬ ‫امل ــوض ـ ـ ـ ــوع‬ ‫‪25‬‬ ‫‪.1‬املقدمة‬ ‫‪25‬‬ ‫‪ 1.1‬متهيد‬ ‫‪25‬‬ ‫‪ 2.1‬أهداف الوحدة‬ ‫‪26‬‬ ‫‪ 3.1‬أقسام الوحدة‬ ‫‪26‬‬ ‫‪ 4.1‬القراءات املساعدة‬ ‫‪26‬‬ ‫‪ 5.1‬ما حتتاج إليه لدراسة الوحدة‬ ‫‪27‬‬ ‫‪.2‬التراكيب ‪Structures‬‬ ‫‪32‬‬ ‫‪.3‬األصناف والكائنات ‪Classes & Objects‬‬ ‫‪32‬‬ ‫‪ 1.3‬تعريف الصنف‬ ‫‪35‬‬ ‫‪ 2.3‬إنشاء الكائنات من الصنف‬ ‫‪38‬‬ ‫‪ 3.3‬اإلعالن عن حقول الصنف ومحددات الوصول لها ‪Access Modefiers‬‬ ‫‪40‬‬ ‫‪.4‬دوال األصناف‬ ‫‪40‬‬ ‫‪ 1.4‬الدوال املنتمية (‪) Member Function‬‬ ‫‪49‬‬ ‫‪ 2.4‬إعادة التحميل للدوال ‪Function Overloading‬‬ ‫‪52‬‬ ‫‪ 3.4‬العوامل التلقائية ‪Default Arguments‬‬ ‫‪54‬‬ ‫‪ 4.4‬الدوال املنتمية الثابتة والكائنات الثابتة‬ ‫‪const member functions & const objects‬‬ ‫‪56‬‬ ‫‪.5‬اإلدخال واإلخراج في لغة ‪C ++‬‬ ‫‪56‬‬ ‫‪ 1.5‬اإلدخال ‪Input‬‬ ‫‪58‬‬ ‫‪ 2.5‬اإلخراج ‪Output‬‬ ‫‪59‬‬ ‫‪.6‬اخلالصة‬ ‫‪60‬‬ ‫‪.7‬حملة عن الوحدة الدراسية الثالثة‬ ‫‪60‬‬ ‫‪.8‬إجابات التدريبات‬ ‫‪66‬‬ ‫‪.9‬مسرد املصطلحات‬ ‫‪67‬‬ ‫‪.10‬املراجع‬ ‫‪23‬‬ ‫التراكيب واألصناف‬ ‫الوحدة الثانية‬ ‫‪24‬‬ ‫التراكيب واألصناف‬ ‫الوحدة الثانية‬ ‫‪.1‬املقدمة‬ ‫‪ 1.1‬متهيد‬ ‫ف ي ه ذه ال وح دة‪ ،‬ع زي زي ال دارس‪ ،‬سنعرض بالتفصيل ملفهومني مهمني وهما‬ ‫التراكيب واألصناف‪.‬تقابل التراكيب ‪ Structures‬السجالت ‪ Records‬في لغات‬ ‫برمجة أخ رى‪.‬أم ا األص ن اف ‪ Classes‬فهي الفكرة الرئيسة ف ي ل غ ات البرمجة‬ ‫الكينونية ‪ Object Oriented Languages‬وهي جزء من لغة ‪ C ++‬وليست جزء ًا‬ ‫من لغة ‪ C‬األصلية‪.‬كما سنناقش مفاهيم رئيسة أخرى في لغات البرمجة الكينونية‪،‬‬ ‫مثل الكائنات واملتغيرات والدوال املنتمية وكيفية تعريفها واستخدامها في لغة ‪.C ++‬‬ ‫وتعد هذه املفاهيم أساسية لفهم بقية الوحدات في هذا املقرر‪ ،‬لذا نرجو منك‪ ،‬عزيزي‬‫ّ‬ ‫الدارس‪ ،‬التأكد من فهم هذه الوحدة قبل االنتقال إلى بقية الوحدات‪.‬وقد مت تزويد‬ ‫هذه الوحدة بالعديد من األمثلة والتمارين التي نرجو منك إعطاءها الوقت واجلهد‬ ‫الالزمني حللها‪.‬تذكر‪ ،‬عزيزي الدارس‪ ،‬أن إجابات هذه التمارين موجودة في نهاية‬ ‫هذه الوحدة‪ ،‬ولكن‪ ،‬وحتى تتحقق الفائدة القصوى‪ ،‬عليك‪ ،‬عزيزي الدارس‪ ،‬أن‬ ‫حتاول بكل جد حل هذه التمارين قبل النظر إلى احلل‪.‬كذلك نرجو منك القيام بجميع‬ ‫النشاطات الواردة في هذه الوحدة‪.‬‬ ‫‪ 2.1‬أهداف الوحدة‬ ‫ينتظر منك‪ ،‬عزيزي الدارس‪ ،‬بعد فراغك من دراسة هذه الوحدة أن تكون قادرا‬ ‫على أن‪:‬‬ ‫تعرف وتستخدم التراكيب ‪.structures‬‬ ‫‪ّ.1‬‬ ‫‪.2‬تستخدم مصفوفات من التراكيب ‪.arrays of structures‬‬ ‫‪.3‬تعرف وتستخدم األصناف ‪.classes‬‬ ‫‪.4‬متيز بني التراكيب واألصناف‪.‬‬ ‫‪.5‬تنشئ الكائنات وتستخدمها بطريقة صحيحة‪.‬‬ ‫‪.6‬تكتب الدوال املنتمية وتستدعيها بطريقة صحيحة‪.‬‬ ‫‪.7‬تكتب الدوال السطرية‪.‬‬ ‫‪.8‬حتمل الدوال أكثر من تعريف واحد‪.‬‬ ‫‪.9‬تدخل البيانات وتخرجها بوساطة ‪ cin‬و ‪.cout‬‬ ‫‪25‬‬ ‫التراكيب واألصناف‬ ‫الوحدة الثانية‬ ‫‪ 3.1‬أقسام الوحدة‬ ‫تتكون هذه الوحدة من أربعة أقسام رئيسة‪.‬يبحث القسم األول في موضوع التراكيب‬ ‫واملصفوفات وهو بذلك يحقق الهدفني األول والثاني‪.‬أما القسم الثاني فيبحث في‬ ‫موضوع األصناف والكائنات وهو بذلك يحقق األهداف‪ :‬الثالث والرابع واخلامس‪.‬‬ ‫أما القسم الثالث فيبحث في كيفية تعريف الدوال املنتمية وكيفية استدعائها ويحقق هذا‬ ‫القسم الهدف السادس‪ ،‬كما يبحث كيفية حتميل الدوال أكثر من تعريف واحد وكيفية‬ ‫كتابة الدوال السطرية وهذا يحقق الهدفني السابع والثامن‪.‬أما القسم الرابع فيبحث في‬ ‫عمليات اإلدخال واإلخراج في لغة ‪ C ++‬ويحقق هذا القسم الهدف التاسع‪.‬‬ ‫‪ 4.1‬القراءات املساعدة‬ ‫لقد حاولنا تقدمي الكثير من املفاهيم املهمة في هذه الوحدة بشكل مبسط‪.‬ولكن‬ ‫كي تتعلم لغة ‪ C ++‬بشكل جيد جدا ستجد أنه من املفيد أن تدرس أكبر عدد ممكن‬ ‫من األمثلة والتمارين‪.‬لذا ننصحك بالرجوع إلى أكبر عدد ممكن من كتب لغة ‪.C ++‬‬ ‫وفيما يلي جتد قائمة من هذه الكتب‪:‬‬ ‫‪1. Cannon, Scott, “Understanding Programming: An Introduction‬‬ ‫‪Using C++”. Brooks/Cole Publishing Co, 2001.‬‬ ‫‪2. Nell Dale, Chip Weems, “Programming and Problem Solving‬‬ ‫‪with C++”, Fourth Edition. Jones and Bartlett Publishers, 2004.‬‬ ‫‪3. Savitch, Walter, “Problem Solving with C++”, 7/E Addison-‬‬ ‫‪Wesley Publishing Company, Inc 2008.‬‬ ‫‪ 5.1‬ما حتتاج إليه لدراسة الوحدة‬ ‫حتتاج لدراسة هذه الوحدة إلى جو هادئ وإلى بعض األوراق وقلم رصاص‪.‬‬ ‫كما حتتاج‪ ،‬حلل التمارين والقيام باألنشطة‪ ،‬إلى جهاز حاسوب مزود مبترجم للغة ‪C‬‬ ‫‪.++‬حاول‪ ،‬عزيزي الدارس‪ ،‬حل جميع متارين البرمجة باستخدام احلاسوب واختبار‬ ‫برامجك قبل النظر إلى احلل الصحيح في نهاية الوحدة‪.‬‬ ‫‪26‬‬ ‫التراكيب واألصناف‬ ‫الوحدة الثانية‬ ‫‪Structures‬‬ ‫‪.2‬التراكيب‬ ‫عزيزي الدارس‪ ،‬ال بد‪ ،‬وأنك عند دراستك للمتطلب السابق لهذا املقرر‪ ،‬لو‬ ‫حاولت أن تستذكر كثير ًا من األمثلة التي تصادفك يومي ًا لوجدت لدى زيارتك ملؤسسة‬ ‫حكومية‪ ،‬خدماتية‪ ،‬طبية أو تعليمية‪...‬إلخ‪ ،‬أنها حتتفظ بقيود خاصة مبراجعيها وذلك‬ ‫خلدمة األغراض اخلاصة باملؤسسة‪ ،‬حيث إنها تشترك جميع ًا بخاصية أساسية وهي أن‬ ‫هذه القيود مصممة بطريقة تتيح ملن يستخدمها الرجوع لها واإلفادة منها؛ فاملعلومات‬ ‫املتصلة بكل حالة من احلاالت الفردية التي متثلها تصف هذه احلالة دون غيرها وتعبر عنها‬ ‫تعبير ًا منهجي ًا محدداً‪.‬‬ ‫عندما نتعامل مع هذه املمارسات العملية في نطاق لغات البرمجة فإننا نحتاج إلى‬ ‫وسيلة مناسبة لالحتفاظ باملعلومات واحملافظة على تكاملها ومنهجيتها‪.‬والتركيب هو‬ ‫وبناء عليه فإن التركيب‪ :‬هو أسلوب منظم‬‫ً‬ ‫أحد الوسائل التي توفرها لغة ‪.C/C++‬‬ ‫لالحتفاظ باملعلومات املتصلة بأحد األشياء‪.‬فاملقصود أن التركيب قد يتضمن عنصر ًا أو‬ ‫أكثر من عناصر البيانات وهذا ما يكسبه سمة التركيب‪ ،‬أي أن التركيب ينتمي إلى النمط‬ ‫املركب (‪ )Structured Type‬من أمناط البيانات‪ ،‬شأنه في ذلك شأن املصفوفات‪ ،‬وهنا ال‬ ‫بد أن نالحظ أن عناصر البيانات التي يتضمنها التركيب ال تنتمي إلى نوع واحد من أنواع‬ ‫البيانات كما هو احلال مع املصفوفات‪.‬فسجل الزبون يتضمن اسمه‪ ،‬رقمه‪ ،‬عنوانه‬ ‫‪ ،...‬وغير ذلك من املعلومات‪.‬وكما تالحظ‪ ،‬فإن هذه املعلومات تختلف عن بعضها‬ ‫في طبيعة تكوينها وأسلوب متثيلها‪ ،‬وهذا على خالف ما هو قائم مع املصفوفات‪.‬‬ ‫بناء عليه‪ ،‬جند أن التركيب هو مجموعة أو حزمة من احلقول ‪ fields‬املتعلقة‬ ‫ً‬ ‫بكائن ‪ object‬معني يجمعها اسم تركيب محدد‪.‬وجند أن الشكل العام لإلعالن عن‬ ‫التركيب في لغة ‪ C ++‬يأخذ الشكل التالي‪:‬‬ ‫‪struct structure_name‬‬ ‫;‪{type1 member_name1‬‬ ‫;‪type2 member_name2‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫……………‪.‬‬ ‫;‪typeN member_nameN‬‬ ‫;)‪} object_name (copyname‬‬ ‫‪27‬‬ ‫التراكيب واألصناف‬ ‫الوحدة الثانية‬ ‫على سبيل املثال‪ ،‬قد يحتوي التركيب اخلاص بطالب معني على احلقول التالية‪:‬‬ ‫‪StName‬‬ ‫اسم الطالب‬ ‫ ‬ ‫‪StNumber‬‬ ‫رقم الطالب‬ ‫ ‬ ‫‪Department‬‬ ‫القسم‬ ‫ ‬ ‫‪Grade‬‬ ‫العالمة‬ ‫ ‬ ‫ويعرف هذا التركيب في لغة ‪ C ++‬كما يلي‪:‬‬ ‫‪struct Student‬‬ ‫ ‪{char‬‬ ‫;]‪StName[21‬‬ ‫‪int‬‬ ‫;‪StNumber‬‬ ‫‪char‬‬ ‫;]‪Department[7‬‬ ‫‪float‬‬ ‫;‪Grade‬‬ ‫;}‬ ‫يشكل هذا التعريف نوع ًا جديد ًا هو التركيب ‪ Student‬بحيث يحتوي على احلقول‬ ‫السالف ذكرها‪.‬الحظ‪ ،‬عزيزي الدارس‪ ،‬أن تعريف التركيب يجب أن ينتهي بفاصلة‬ ‫منقوطة كبقية اجلمل‪.‬كما أن هذا التعريف أنشأ نوع ًا جديد ًا يستخدم إلنشاء متغيرات من‬ ‫نوع ‪ Student.‬ويعرف املتغير ‪ X‬من النوع ‪ Student‬كما يلي‪:‬‬ ‫;‪struct Student X‬‬ ‫واجلملة‬ ‫‪struct‬‬ ‫;‪Student Z,Y‬‬ ‫تعرف املتغيرين ‪ Z‬و ‪ Y‬من النوع ‪ Student‬ولتمييز هذه املتغيرات عن بقية املتغيرات‬ ‫البسيطة فإننا ندعوها باملتغيرات املركبة‪.‬‬ ‫ومن املمكن دمج تعريف النوع وإنشاء املتغير املركب كما يلي‪:‬‬ ‫‪struct Student‬‬ ‫;]‪{char StName[21‬‬ ‫;‪int StNumber‬‬ ‫;]‪char Department[7‬‬ ‫‪float‬‬ ‫;‪Grade‬‬ ‫; ‪} X,Y,Z‬‬ ‫‪28‬‬ ‫التراكيب واألصناف‬ ‫الوحدة الثانية‬ ‫وهكذا نكون قد عرفنا تركيبا من نوع ‪ Student‬وأنشأنا املتغيرات املركبة ‪ X‬و‪ Y‬و ‪Z‬‬ ‫من ذلك النوع‪.Student‬وملعاجلة أي حقل في املتغير املركب ‪ X‬فإننا نستخدم اسم املتغير‬ ‫متبوعا بنقطة ثم اسم احلقل‪.‬فمثال‪ ،‬اجلملة‪:‬‬ ‫;‪X.StNumber = 123‬‬ ‫تخزن الرقم ‪ 123‬في احلقل ‪ StNumber‬اخلاص باملتغير ‪ X‬واجلملة‪:‬‬ ‫;”‪Z.StName=”Ali Ahmad‬‬ ‫تخزن القيمة ‪ Ali Ahmad‬في احلقل ‪ StName‬اخلاص بالتركيب‪Z.‬‬ ‫ومن املمكن في لغة ‪( C ++‬لكن ليس في لغة ‪ )C‬تعريف متغير مركب من نوع‬ ‫‪ Student‬بدون كتابة الكلمة ‪ struct‬كما يلي‬ ‫;‪Student X‬‬ ‫بعد أن تعرفنا على كيفية تعريف التراكيب‪ ،‬فإن املثال التالي يوضح كيفية التعامل‬ ‫مع تركيب الوقت املسمى ‪ ،Time‬انظر إلى التعريف‪:‬‬ ‫{ ‪struct Time‬‬ ‫‪int‬‬ ‫;‪hours‬‬ ‫‪int‬‬ ‫;‪minutes‬‬ ‫‪int‬‬ ‫;‪seconds‬‬ ‫};‬ ‫املثال التالي يعمل على تعريف دالة حلساب عدد الثواني للوقت املدخل‪ ،‬انظر تعريف‬ ‫الدالة‪:‬‬ ‫)‪int toSeconds(Time now‬‬ ‫;‪{return 3600*now.hours + 60*now.minutes + now.seconds‬‬ ‫}‬ ‫وكما ترى من التعريف‪ ،‬فإن هناك معام ً‬ ‫ال مركب ًا للدالة سمي ‪ now‬وهو من‬ ‫النوع ‪. Time‬أما في الدالة الرئيسة فأنشأ متغير ًا مركب ًا سمي ‪ t‬وهو من النوع ‪Time‬‬ ‫أيضاً‪ ،‬وبعدها مت إدراج اجلمل املخصصة إلدخال الوقت من لوحة املفاتيح‪ ،‬انظر إلى‬ ‫البرنامج بشكله الكامل‪:‬‬ ‫>‪#include > t.hours >> t.minutes >> t.seconds) { cout

Use Quizgecko on...
Browser
Browser