لا أستطيع فهم class, object in c++

Qandil

أشعر بإحباط شديد لعدم قدرتي علي فهم class, object في c++, ابحث كثيرا علي اليوتيوب لمحاولة فهمها لكنها صعبة جدا جدا جدا ، هل من طريقة تساعدني علي التغلب علي هذه المشكلة ، من خلال فيديو معين سهل او كتاب مهم يساعدني في ذلك ......

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

وما الغرض اساسا من هذه الدروس ؟

إذا كان لديك سؤال محدد يفضل طرحه مع إضافة مثال.

بشكل عام جميع لغات الرمجة عالية المستوى تدعم "البرمجة غرضية التوجه" اي "Object Oriented programming"

بماذا تفيد؟

تمثيل كائنات العالم الحقيقي بطريقة برمجية مثل تعريف class person له data members مثل الرقم الوطني, الاسم, الطول,اسم الأب, مكان الولادة, الجنس ..

بحيث نقوم بتغليف هذه الخصائص الخاصة بكائن محدد و نحدد الطريقة التي تمكننا من التعامل معها عن طريق methods الخاصة بهذا الصف التي هي تنقسم إلى نوعين Getters, Setters أي إسناد قيم لخصائص الكائن أو الحصول على قيمتها.

حيث نقوم بتعريف ال data members بطريقة private لمنع الوصول المباشر لها عن طريق اسم الصف

و نقوم بتعريف methods بالطريقة public بحيث نبرمج هذه الدوال للتأكد من طريقة التعامل مع البيانات مثل:

  1. عدم وضع قيم غير منطقة set_Weight إسناد الوزن (نمنع تخزين قيمة سالبة)

  2. نمنع الوصول لبيانات حساسة (أي data members خاص)

تساعد على حفظ البيانات المترابطة و القدرة علة نقلها و عرضها بطريقة مناسبة.

أولا : أشكرك للتعليق والافادة

ثانيا: لدي سؤال

لو أنني لدي فصل به 50 طالب لكل منهما معلوماته مثل ( الاسم ، العمر، الطول، الوزن)

وفقا للclass , فأننا سنقوم بكتابة البيانات الاربعة المذكورة سابقا، ونطبقها علي جميع الطلاب مع حفظ النسب المختلفة لكل طالب طبعا،

الا انني كما رايت في الشرح انه يكتب البيانات الاربع ، ثم يضع بها نسب طالب واحد فقط أو اثنين ، إذا فكيف سيكتب نسب كل الطالب ؟!

فلو انه سيكتب نسب ال50 طالب فأين الاختصار في ذلك كما هو الغرض من الclass ، واذا كان الاكتفاء بواحد أو اثنين فأين نسب بقية الطلاب ؟؟

شئ آخر : كما أني لو ارتدت تعديل نسب الطالب رقم 26 مثلا فكيف اصل اليه هو بالتحديد ؟؟

لا اعلم هل تفهمني أم لا ولكنني في غاية الشكر والامتنان لمحاولتك مساعدتي

نحن نقوم بتعريف Class بشكل يجمع صفات جميع الكائنات التي هي من نفس النوع

ثم نقوم بتعريف عدة Variables من نوع هذا ال Class

Person P1,P2,P3

وتقوم باسناد بيانات مختلفة لكل منهم على حدى

في حالة تعريف 50 متحول من نوع Person

نستخدم Array

[Person P[50

ونستدعي ال Constructor وال Functions لكل منها ..

هل يمكننا التواصل عبر الواتس آب او الفيس بوك ؟

الأمر أسهل مما يبدو عليه للوهلة الأولى، دعنا نتخلّص من التسميات الأجنبية الفاخرة ونستبدل Class بالصنف و Object بالعنصر.

الآن دعنا نتخلّص من قواعد الـ C++ الكتابيّة (Syntax) ودعنا نركّز على المنطق وشرح هاته المصطلحات.

فلنفرض أنّه لدينا مجموعة كتب وتحتوي عدّة مواصفات تهمّنا (Attributes/Properties) منها اسم الكتاب، عدد الصفحات، سنة النشر، رقم الطبعة، الكاتب ومجال الكتاب. قد نخزّن هذه المعلومات بالشكل التالي :

bookName = "Something"

bookPages = 150

bookYear = 2009

bookCopy = "3rd"

bookAuthor = "Jhon Doe"

bookGenre = "Fiction"

الآن، من الممكن تطبيق هذه الطريقة على كتاب، كتابين أو حتّى ثلاثة ولكن تخيّل حجم المتغيرات التي يجب أن تكتبها وما هو طول الكود الناتج عن مكتبة بها مئات الكتب!

هنا تأتي فكرة الـصنف أو ما يسمّى بالبرمجة كائنيّة التوجه وهي أنّنا نستطيع أن نعطي لعنصر ما (Object) مواصفات معيّنة (Attributes/Properties) بمجرد إسناده وتعريفه إلى صنف معيّن قمنا بتخصيص مواصفاته سابقاً.

وبالتشبيه بمثال الصناديق المتداول في شرح هذا المفهوم، اعتبر أنّ عنصر ما هو بمثابة صندوق كبير ويحتوي بداخله صناديق أصغر تحتوي بداخله معلومات مختلفة والتي هي المواصفات في هذا المثال وجميع الصناديق الكبيرة من هذا الصنف لها نفس الحجم والشكل ولكنّها تخزن بداخلها صناديق أصغر مختلفة القيم.

هذا يسهّل على المبرمج التعامل مع هذه البيانات إن كانت مجمّعة بصورة منظّمة يسهل الوصول إليها والتعامل معها.

الآن، إن فهمتَ هذا المبدأ هذا يعني أنّك مستعد للتعامل مع الأصناف في C++

اخترت لك المقطعين التاليين،

باللغة العربيّة:

باللغة الإنجليزيّة:

أتمنّى أنّ جميع النقاط كانت واضحة، هل هناك أيّ مفهوم لم تستوعبه بشكل كامل لكي أقوم بإعادة شرحه؟

ممتن جدا لك ولوقتك الثمين الذي استخدمته في الاجابة علي استفساري .

لكن ما لم افهمه حق واجد صعوبة فيه ، هي طريقة كتابة ال class وكيف اننا نضع ال private أولا ثم الpublic ولازم توضع ال int main بعدها لا قبلها ،

الامر بالنسبة لي اشبه بالعقدة ، لا اعرف لماذا اكتب هذه اولا وهذه اخرا وتلك في المنتصف،

الشئ الاخر ، لو انني لدي مثلا

صف به 20 طالب وارتدت تعديل بيانات الطالب رقم 7 علي سبيل المثال كيف اتوصل لذلك بهذه الطريقة ؟

هل استطيع أن اتواصل معك واتس آب مثلا او فيس بوك لو أمكن ؟

تستطيع التواصل معي على الرسائل الخاصّة بحسابي على IO حسوب، إلّا أنّي أفضّل أن تقوم بالتعليق ونشر أسئلتك هنا وذلك لكي يفيد هذا المنشور أكبر عدد من الأشخاص الذين يجدون مشكلة في فهم هذا الموضوع ويصبح كمرجع لهم.

العفو أخي، بالنسبة لكيفية كتابة تعريف الـ Class هي فقط قواعد وضعها مبرمجو اللغة ومع الممارسة يسهل عليكَ حفظها واستخدامها.

الشئ الاخر ، لو انني لدي مثلا

صف به 20 طالب وارتدت تعديل بيانات الطالب رقم 7 علي سبيل المثال كيف اتوصل لذلك بهذه الطريقة

لنفرض أنّ الصنف اسمه student والبيانات التي أردت تعديلها للطالب رقم سبعة هي علامته في إحدى المواد والتي هي في نهاية المطاف صفة (Property) ولتكن على سبيل المثال علامته في مادّة الرياضيات واسمها mathScore فيصبح لدينا التعبير الآتي:

student[7].mathScore = 75;

حيث أنّ 75 هي البيانات التي قمنا بإدخالها أو التعديل عليها.

أول شيء إنزع من رأسك مسألة : صعب جدا جدا

فإن لن تفعل لن تتعلم اي شيء ، حتى لو أحضرنا لك أفضل أستاذ في هذه المجرة والمجرات الأخرى

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