هو تعميم لفكرة الـ Struct الموجود في لغة الـ C حيث أن الـ Struct في لغة الـ C كانت تحتوي.
Download ReportTranscript هو تعميم لفكرة الـ Struct الموجود في لغة الـ C حيث أن الـ Struct في لغة الـ C كانت تحتوي.
هو تعميم لفكرة الـ Structالموجود في لغة الـ Cحيث أن الـ Structفي لغة الـ Cكانت تحتوي على data membersفقط دون أن تحوي على ، methodsوعلى الرغم من أن لغة C++تحتوي أيضاً على بنية المعطيات Structإال أنها تختلف هذه األخيرة عن الـ Classesباختالف شكلي بسيط سنتكلم عليه الحقاً. الصف هو نمط معطيات مهيكل يتم إنشاءه من قبل المبرمج أي أنه : User-defined (programmer-defined) type عند تعريف الصف نقوم بوضع ما يسمى membersوالتي تعبر عن الـ dataوالـ behaviour للصف . الصف هو بنية معطيات مهيكلة تحتوي على membersوالتي تقسم إلى : ) : Attributes (data membersوهي المتحوالت واألغراض والمؤشرات وغيرها. ) : Behaviour (methodsوهو مجموعة من التوابع األعضاء في الصف والتي توصف سلوك الصف وسوف ندعو هذه التوابع األعضاء بـ . methods بعد تعريف الصف يتم إنشاء متحول منه ويدعى المتحول عندها بـ Objectأو . Instance : من خاللOOP تعتبر تحقيقاً لتقنية الـClasses إن استخدام الصفوف Encapsulation Compositions & Aggregation Inheritance Reusable OOP (Object Oriented Programming) إن الكلمة المفتاحية classهي كلمة محجوزة في اللغة )تكتب بأحرف صغيرة ( . بعدها نقوم بكتابة اسم الصف بحيث يكون معبراً عنه . ثم نقوم بوضع الـ Class membersوهي كما ُذكر سابقاً مكونة من dataو . methods نقوم بوضع فاصلة منقوطة بعد االنتهاء من تعريف الصف . بعد االنتهاء من تعريف الصف ال يتم حجز أي مكان في الذاكرة ،وكأنه نمط جديد تم تعريفه في اللغة . تذكر أنه عندما نقوم بتعريف متحول من الصف المعرف مسبقاً فإن هذا المتحول يدعى Objectأو . Instance الصف هو بنية معطيات مهيكلة تحتوي على membersوالتي تقسم إلى : ) : Attributes (data membersوهي المتحوالت واألغراض والمؤشرات وغيرها. ) : Behaviour (methodsوهو مجموعة من التوابع األعضاء في الصف والتي توصف سلوك الصف وسوف ندعو هذه التوابع األعضاء بـ . methods ) : Attributes (data membersوهي المتحوالت واألغراض والمؤشرات وغيرها. تستخدم لتخزين المعطيات كما كنا نستخدم المتحوالت في تخزين المعطيات ،اآلن أصبحت هذه المتحوالت مهيكلة ضمن ما يسمى بالصف . Class ال تحاول إعطاء قيم ابتدائية للـ data membersالموجودة ضمن الـصف مباشرة وإن حاولنا ذلك فإنه سينتج لدينا . Compiler Error يوجد تابع سنتعرف عليه بعد قليل هو الذي سيقوم بعملية التهيئة وإعطاء قيمة ابتدائية للـ data membersفي الصف ويدعى ذلك التابع بالباني . Constructor ) : Behaviour (methodsوهي التوابع التي توصف سلوك الصف . تستخدم للتعبير عن سلوك الصف . تستطيع هذه التوابع رؤية جميع المتحوالت data membersالمعرفة ضمن نفس الصف . من خالل هذه التوابع يتم التعامل مع الصف ،حيث تشكل مجموعة من التوابع واجهة المستخدم في التعامل مع الصف . إن لغات البرمجة اإلجرائية التقليدية ) (procedural languagesمثل الـ pascalتكون جميع المتحوالت عامة publicأي ال يمكن إخفائها ،في حين أن لغات البرمجة الموجهة الهدف OOPتستطيع إخفاء متحوالتها لتصبح ، privateويتم ذلك من خالل الصفوف ، classes وهذا ما يسمى بـ . Information Hiding إن الـ OOPتقدم لنا واجهة Interfaceللتعامل مع الصف Classمن دون معرفة التفاصيل الداخلية التي تجري داخل الصف ،فالذي يهم المستخدم في النهاية هو النتيجة وليس كيفية الوصول إلى النتيجة . في لغة الـ C++يتم تصنيف الـ class membersإلى ثالث أصناف وهي : : Private (1 وهو النمط االفتراضي أي إذا لم نذكر الـ Access modifierللـ memberفي الصف فيتم وضعه افتراضياً على أنه . private يتم رؤيته فقط من داخل الصف ومن األصدقاء . friends : Public (2تتم رؤيته من داخل الصف ومن األصدقاء ومن أي مكان تتم رؤية الغرض . : Protected (3تتم رؤيته من داخل الصف ومن األصدقاء ومن الصفوف األبناء . في لغة الـ C++يتم تصنيف الـ class membersإلى ثالث أصناف وهي : .Private (1 .Public (2 .Protected (3 وهذه الكلمات الثالث السابقة هي كلمات معرفة مسبقاً في اللغة . ال يمكن الوصول إلى الـ private memberمن خارج الصف. يمكن الوصول إلى الـ public memberمن خارج الصف . إن الـ private memberيبق مخفي للمستخدم clientالذي سوف يستخدم هذا الصف. إذاً كيف سيتعامل هذا المستخدم مع هذه المتحوالت المخفية الخاصة ؟؟ عن طريق توابع methodsالـ Access Modifiersلها هو . public إن الشكل التالي يمثل غرض من الصف Time أي .Instance of Time Class يمكن للـ clientالتعامل مع الغرض عن طريق التوابع الموجودة في الصف والمعرفة على أنها . public ال يمكن للـ clientأن يصل إلى الـ . private data or private methods التابع السابق يدعى بالباني في الصف Constructorوفيه نقوم بإعطاء القيم االبتدائية للـ . data members اسمه نفس اسم الصف . ال يرد شي ،أي ليس له . return type يستدعى ضمنياً عند إنشاء الغرض . التابع السابق هو methodضمن الصف Timeوالذي يقوم بضبط قيم الساعة وفق لشروط ،والذي يقوم بإسناد قيمة معينة في حال تم إدخال قيم خاطئة ،وهذه إحدى الفوائد التي تكمن خلف الـ . Information Hiding بعد االنتهاء من تعريف الصف يمكننا إنشاء غرض أو مؤشر أو مصفوفة أو مرجعية ،الحظ التعريفات التالية : يتم تعريف الغرض في الـ main functionأو في صف آخر . إذا كنا ضمن نطاق الصف class scopeفإنه يمكننا الوصول إلى المتحوالت والتوابع مهما كان الـ access modifierلها ،وذلك فقط بمجرد ذكر اسم المتحول ،الحظ التالي : عندما نقوم بتعريف غرض من الصف ،فإنه يمكننا الوصول إلى الـ public membersفقط عن طريق استخدام النقطة بعد اسم الغرض أو استخدام > -بعد اسم المؤشر . هل يمكن تعريف متحول ضمن methodفي صف يحوي هذا األخير متحول بنفس االسم ؟ من المثال السابق نالحظ أنه ال يمكننا الوصول إلى الـ . private data يمكننا التحكم بالـ private dataعن طريق access methodsوهي نوعين : Set Methods Get Methods إن منهجيات الـ setو getهي وسائل مساعدة تمكننا من الوصول إلى الـ private data يمكننا التحكم بالـ private dataعن طريق access methodsوهي نوعين : : Set Methods وفيها يتم تعديل قيم المتحوالت الـ . private يتم فيها التحقق من صحة البيانات المدخلة check validityفمثالً إذا كان لدينا set methodلتعديل نصف قطر دائرة فيجب مراعاة في حال تم إدخال قيمة سالبة ،وفي حال تم ذلك ينبغي إظهار رسالة للمستخدم بأنه قام بإدخال قيمة خاطئة . ال يرد شي أي . return type is void يمكننا التحكم بالـ private dataعن طريق access methodsوهي نوعين : : Get Methods وفيها يتم قراءة قيم المتحوالت الـ . private يرد متحول من النمط المعاد أي أن له . return type هل من الممكن لـ private methodأن يصل إلى private dataفي نفس الصف . هل من الممكن لـ private methodأن يصل إلى private methodفي نفس الصف . هل من الممكن لـ private methodأن يصل إلى public dataفي نفس الصف . هل من الممكن لـ private methodأن يصل إلى public methodفي نفس الصف . أعد نفس األسئلة بالنسبة للـ public methodوبالنسبة للـ . protected method طالما نحن في نفس الصف فإننا نملك أعلى إمكانية للوصول أي كل ما سبق هو صحيح يمكن تقسيم الـ codeفي الصف إلى ملفين إحداهما بالالحقة .hواآلخر بالالحقة .cpp الملف األول ذو الالحقة .hهو ملف headerنضع فيه الصف دون كتابة الـ Bodyللـ . methods الملف الثاني ذو الالحقة .cppهو ملف source fileنضع فيه الـ Bodyللـ . methods وعن طريق هذه العملية يتم فصل الواجهة عن التنفيذ . لماذا نقوم بذلك ؟؟ الـ clientليس مهتم بالتفاصيل التي تجري داخل الـ codeوالذي يهمه فقط هو الواجهة interfaceأي الـ public methodsدون أن يهتم بكيفية عمل هذه الـ .methods تؤمن هذه العملية فصل الواجهة عن التنفيذ مما يسهل عملية التعديل على الكود البرمجي . الذي يؤمن الواجهة هو الـ public methodsوالتي تتم رؤيتها دون أن تتم رؤية الـ private dataوالـ implementationوهذا يحقق الـ . Information Hiding نقوم بإنشاء ملف header باالسم Circle.hونكتب فيه الكود التالي وهو يعبر عن هيكل الصف دون أن نكتب فيه كود برمجي أي ال يوجد . bodies نقوم بإنشاء ملف source file باالسم Circle.cppونكتب فيه الكود التالي وهو يعبر عن تنفيذ الصف والذي يدعى بـ . implementation في البداية نقوم بتضمين المكتبة المنشئة مسبقاً . Circle.h حان اآلن وقت االستدعاء في الـ . main function ولكن هنا يجب أيضاً تضمين الـ header fileفي البداية . الحظ كيف أن الكود أصبح أكثر تنظيماً . اتبع هذا األسلوب في البرامج التي تحوي أكثر من صف. Homework ما هو الفرق بين الـ Structوالـ Classفي C++ Language وضح ذلك باألمثلة