1 / 46

C++ Programming

C++ Programming. L9 . Classes(1). الصفوف Classes ـ تعريف :.

fuller
Download Presentation

C++ Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Programming L9 . Classes(1)

  2. الصفوف Classes ـ تعريف : • هو تعميم لفكرة الـStruct الموجود في لغة الـC حيث أن الـStruct في لغة الـC كانت تحتوي على data members فقط دون أن تحوي على methods ، وعلى الرغم من أن لغة C++ تحتوي أيضاً على بنية المعطيات Struct إلا أنها تختلف هذه الأخيرة عن الـClasses باختلاف شكلي بسيط سنتكلم عليه لاحقاً. • الصف هو نمط معطيات مهيكل يتم إنشاءه من قبل المبرمج أي أنه : User-defined (programmer-defined) type • عند تعريف الصف نقوم بوضع ما يسمى members والتي تعبر عن الـdata والـ behaviour للصف .

  3. الصفوف Classes ـ تعريف :

  4. الصفوف Classes ـ تعريف :

  5. الصفوف Classes ـ تعريف : • الصف هو بنية معطيات مهيكلة تحتوي على members والتي تقسم إلى : • Attributes (data members) : وهي المتحولات والأغراض والمؤشرات وغيرها. • Behaviour (methods) : وهو مجموعة من التوابع الأعضاء في الصف والتي توصف سلوك الصف وسوف ندعو هذه التوابع الأعضاء بـmethods . • بعد تعريف الصف يتم إنشاء متحول منه ويدعى المتحول عندها بـObject أو Instance .

  6. الصفوف Classes ـ تعريف : • إن استخدام الصفوف Classes تعتبر تحقيقاً لتقنية الـOOP من خلال : • Encapsulation • Compositions & Aggregation • Inheritance • Reusable OOP (Object Oriented Programming)

  7. الصفوف Classes ـ تعريف : • إن الكلمة المفتاحيةclass هي كلمة محجوزة في اللغة )تكتب بأحرف صغيرة( . • بعدها نقوم بكتابة اسم الصف بحيث يكون معبراً عنه . • ثم نقوم بوضع الـClass members وهي كما ذُكر سابقاً مكونة من data و methods . • نقوم بوضع فاصلة منقوطة بعد الانتهاء من تعريف الصف .

  8. الصفوف Classes ـ تعريف : • بعد الانتهاء من تعريف الصف لا يتم حجز أي مكان في الذاكرة، وكأنه نمط جديد تم تعريفه في اللغة . • تذكر أنه عندما نقوم بتعريف متحول من الصف المعرف مسبقاً فإن هذا المتحول يدعى Object أو Instance .

  9. الصفوف Classes ـ Class Members : • الصف هو بنية معطيات مهيكلة تحتوي على members والتي تقسم إلى : • Attributes (data members) : وهي المتحولات والأغراض والمؤشرات وغيرها. • Behaviour (methods) : وهو مجموعة من التوابع الأعضاء في الصف والتي توصف سلوك الصف وسوف ندعو هذه التوابع الأعضاء بـmethods .

  10. الصفوف Classes ـ Class Members : • Attributes (data members) : وهي المتحولات والأغراض والمؤشرات وغيرها. • تستخدم لتخزين المعطيات كما كنا نستخدم المتحولات في تخزين المعطيات، الآن أصبحت هذه المتحولات مهيكلة ضمن ما يسمى بالصف Class . • لا تحاول إعطاء قيم ابتدائية للـdata members الموجودة ضمن الـصف مباشرة وإن حاولنا ذلك فإنه سينتج لدينا Compiler Error . • يوجد تابع سنتعرف عليه بعد قليل هو الذي سيقوم بعملية التهيئة وإعطاء قيمة ابتدائية للـdata members في الصف ويدعى ذلك التابع بالباني Constructor .

  11. الصفوف Classes ـ Class Members : • Behaviour (methods) : وهي التوابع التي توصف سلوك الصف . • تستخدم للتعبير عن سلوك الصف . • تستطيع هذه التوابع رؤية جميع المتحولات data members المعرفة ضمن نفس الصف . • من خلال هذه التوابع يتم التعامل مع الصف، حيث تشكل مجموعة من التوابع واجهة المستخدم في التعامل مع الصف .

  12. الصفوف Classes ـ Access Modifiers : • إن لغات البرمجة الإجرائية التقليدية (procedural languages) مثل الـpascal تكون جميع المتحولات عامة public أي لا يمكن إخفائها ، في حين أن لغات البرمجة الموجهة الهدف OOP تستطيع إخفاء متحولاتها لتصبح private ، ويتم ذلك من خلال الصفوف classes ، وهذا ما يسمى بـInformation Hiding . • إن الـOOP تقدم لنا واجهة Interface للتعامل مع الصفClass من دون معرفة التفاصيل الداخلية التي تجري داخل الصف ، فالذي يهم المستخدم في النهاية هو النتيجة وليس كيفية الوصول إلى النتيجة .

  13. الصفوف Classesـ Access Modifiers : • في لغة الـC++ يتم تصنيف الـclass members إلى ثلاث أصناف وهي : • Private : • وهو النمط الافتراضي أي إذا لم نذكر الـAccess modifier للـmember في الصف فيتم وضعه افتراضياً على أنه private . • يتم رؤيته فقط من داخل الصف ومن الأصدقاء friends . • Public : تتم رؤيته من داخل الصف ومن الأصدقاء ومن أي مكان تتم رؤية الغرض . • Protected : تتم رؤيته من داخل الصف ومن الأصدقاء ومن الصفوف الأبناء .

  14. الصفوف Classesـ Access Modifiers : • في لغة الـC++ يتم تصنيف الـclass members إلى ثلاث أصناف وهي : • Private. • Public. • Protected. وهذه الكلمات الثلاث السابقة هي كلمات معرفة مسبقاً في اللغة .

  15. الصفوف Classesـ Access Modifiers : • لا يمكن الوصول إلى الـprivate member من خارج الصف. • يمكن الوصول إلى الـpublic member من خارج الصف . • إن الـprivate member يبق مخفي للمستخدم client الذي سوف يستخدم هذا الصف. • إذاً كيف سيتعامل هذا المستخدم مع هذه المتحولات المخفية الخاصة ؟؟ • عن طريق توابع methodsالـAccess Modifiers لها هو public .

  16. الصفوف Classesـ Example 1: يمكن كتابة Bodyالـmethod مباشرة داخل تعريف الصف وهي الطريقة الأولى

  17. الصفوف Classesـ Example 1: يمكن كتابة Bodyالـmethod خارج تعريف الصف مهما كان الـAccess modifierللـmethod وهي الطريقة الثانية إن النقطتان المتتاليتان::ندعوها بـscope resolution operator

  18. الصفوف Classesـ Time Example :

  19. الصفوف Classesـ Time Example : • إن الشكل التالي يمثل غرض من الصف Time أي Instance of Time Class. • يمكن للـclient التعامل مع الغرض عن طريق التوابع الموجودة في الصف والمعرفة على أنها public . • لا يمكن للـclient أن يصل إلى الـ private data or private methods .

  20. الصفوف Classesـ Time Example : • التابع السابق يدعى بالباني في الصف Constructor وفيه نقوم بإعطاء القيم الابتدائية للـdata members . • اسمه نفس اسم الصف . • لا يرد شي ، أي ليس له return type . • يستدعى ضمنياً عند إنشاء الغرض .

  21. الصفوف Classesـ Time Example : • التابع السابق هو method ضمن الصف Time والذي يقوم بضبط قيم الساعة وفق لشروط ، والذي يقوم بإسناد قيمة معينة في حال تم إدخال قيم خاطئة ، وهذه إحدى الفوائد التي تكمن خلف الـInformation Hiding .

  22. الصفوف Classesـ Time Example : • بعد الانتهاء من تعريف الصف يمكننا إنشاء غرض أو مؤشر أو مصفوفة أو مرجعية ، لاحظ التعريفات التالية : • يتم تعريف الغرض في الـmain function أو في صف آخر .

  23. الصفوف Classesـ Time Example :

  24. الصفوف Classes ـ Circle Example: • إذا كنا ضمن نطاق الصف class scope فإنه يمكننا الوصول إلى المتحولات والتوابع مهما كان الـaccess modifier لها ، وذلك فقط بمجرد ذكر اسم المتحول ، لاحظ التالي :

  25. الصفوف Classes ـ Circle Example: • عندما نقوم بتعريف غرض من الصف ، فإنه يمكننا الوصول إلى الـpublic members فقط عن طريق استخدام النقطة بعد اسم الغرض أو استخدام -> بعد اسم المؤشر .

  26. الصفوف Classes ـ Example: • هل يمكن تعريف متحول ضمن method في صف يحوي هذا الأخير متحول بنفس الاسم ؟

  27. الصفوف Classes ـ Count Example:

  28. الصفوف Classes ـ Set & Get methods:

  29. الصفوف Classes ـ Set & Get methods: • من المثال السابق نلاحظ أنه لا يمكننا الوصول إلى الـprivate data . • يمكننا التحكم بالـ private data عن طريق access methods وهي نوعين : • Set Methods • Get Methods إن منهجيات الـset و getهي وسائل مساعدة تمكننا من الوصول إلى الـprivate data

  30. الصفوف Classes ـ Set & Get methods: • يمكننا التحكم بالـ private data عن طريق access methods وهي نوعين : • Set Methods : • وفيها يتم تعديل قيم المتحولات الـprivate . • يتم فيها التحقق من صحة البيانات المدخلة check validity فمثلاً إذا كان لدينا set method لتعديل نصف قطر دائرة فيجب مراعاة في حال تم إدخال قيمة سالبة ، وفي حال تم ذلك ينبغي إظهار رسالة للمستخدم بأنه قام بإدخال قيمة خاطئة . • لا يرد شي أي return type is void .

  31. الصفوف Classes ـ Set & Get methods: • يمكننا التحكم بالـ private data عن طريق access methods وهي نوعين : • Get Methods : • وفيها يتم قراءة قيم المتحولات الـprivate . • يرد متحول من النمط المعاد أي أن له return type .

  32. الصفوف Classes ـ Set & Get methods:

  33. الصفوف Classes ـ Set & Get methods:

  34. الصفوف Classes ـ Set & Get methods:

  35. الصفوف Classes ـ Set & Get methods:

  36. الصفوف Classes ـ Questions : • هل من الممكن لـ private method أن يصل إلى private data في نفس الصف . • هل من الممكن لـ private method أن يصل إلى private method في نفس الصف . • هل من الممكن لـ private method أن يصل إلى public data في نفس الصف . • هل من الممكن لـ private method أن يصل إلى public method في نفس الصف . أعد نفس الأسئلة بالنسبة للـpublic method وبالنسبة للـprotected method . طالما نحن في نفس الصف فإننا نملك أعلى إمكانية للوصول أي كل ما سبق هو صحيح

  37. الصفوف Classes ـ Square Example:

  38. الصفوف Classes ـ Square Example:

  39. الصفوف Classes ـ فصل الواجهة عن التنفيذ:Separating Interface from Implementation • يمكن تقسيم الـ code في الصف إلى ملفين إحداهما باللاحقة .h والآخر باللاحقة .cpp • الملف الأول ذو اللاحقة .h هو ملف header نضع فيه الصف دون كتابة الـBodyللـmethods . • الملف الثاني ذو اللاحقة .cpp هو ملف source file نضع فيه الـBodyللـmethods . • وعن طريق هذه العملية يتم فصل الواجهة عن التنفيذ .

  40. الصفوف Classes ـ فصل الواجهة عن التنفيذ:Separating Interface from Implementation • لماذا نقوم بذلك ؟؟ • الـclient ليس مهتم بالتفاصيل التي تجري داخل الـcode والذي يهمه فقط هو الواجهة interface أي الـpublic methods دون أن يهتم بكيفية عمل هذه الـmethods. • تؤمن هذه العملية فصل الواجهة عن التنفيذ مما يسهل عملية التعديل على الكود البرمجي . • الذي يؤمن الواجهة هو الـpublic methods والتي تتم رؤيتها دون أن تتم رؤية الـprivate data والـ implementation وهذا يحقق الـInformation Hiding .

  41. الصفوف Classes ـ فصل الواجهة عن التنفيذ:Separating Interface from Implementation

  42. الصفوف Classes ـ فصل الواجهة عن التنفيذ:Separating Interface from Implementation • نقوم بإنشاء ملف header بالاسم Circle.h ونكتب فيه الكود التالي وهو يعبر عن هيكل الصف دون أن نكتب فيه كود برمجي أي لا يوجد bodies .

  43. الصفوف Classes ـ فصل الواجهة عن التنفيذ:Separating Interface from Implementation • نقوم بإنشاء ملف source file بالاسم Circle.cpp ونكتب فيه الكود التالي وهو يعبر عن تنفيذ الصف والذي يدعى بـimplementation . • في البداية نقوم بتضمين المكتبة المنشئة مسبقاً Circle.h .

  44. الصفوف Classes ـ فصل الواجهة عن التنفيذ:Separating Interface from Implementation • حان الآن وقت الاستدعاء في الـmain function .ولكن هنا يجب أيضاً تضمين الـheader file في البداية . • لاحظ كيف أن الكود أصبح أكثر تنظيماً . • اتبع هذا الأسلوب في البرامج التي تحوي أكثر من صف.

  45.  Homework  ما هو الفرق بين الـStruct والـ Class في C++ Languageوضح ذلك بالأمثلة

  46. The End

More Related