أشعر بإحباط شديد لعدم قدرتي علي فهم class, object في c++, ابحث كثيرا علي اليوتيوب لمحاولة فهمها لكنها صعبة جدا جدا جدا ، هل من طريقة تساعدني علي التغلب علي هذه المشكلة ، من خلال فيديو معين سهل او كتاب مهم يساعدني في ذلك ......
لا أستطيع فهم class, object in c++
إذا كان لديك سؤال محدد يفضل طرحه مع إضافة مثال.
بشكل عام جميع لغات الرمجة عالية المستوى تدعم "البرمجة غرضية التوجه" اي "Object Oriented programming"
بماذا تفيد؟
تمثيل كائنات العالم الحقيقي بطريقة برمجية مثل تعريف class person له data members مثل الرقم الوطني, الاسم, الطول,اسم الأب, مكان الولادة, الجنس ..
بحيث نقوم بتغليف هذه الخصائص الخاصة بكائن محدد و نحدد الطريقة التي تمكننا من التعامل معها عن طريق methods الخاصة بهذا الصف التي هي تنقسم إلى نوعين Getters, Setters أي إسناد قيم لخصائص الكائن أو الحصول على قيمتها.
حيث نقوم بتعريف ال data members بطريقة private لمنع الوصول المباشر لها عن طريق اسم الصف
و نقوم بتعريف methods بالطريقة public بحيث نبرمج هذه الدوال للتأكد من طريقة التعامل مع البيانات مثل:
عدم وضع قيم غير منطقة set_Weight إسناد الوزن (نمنع تخزين قيمة سالبة)
نمنع الوصول لبيانات حساسة (أي data members خاص)
تساعد على حفظ البيانات المترابطة و القدرة علة نقلها و عرضها بطريقة مناسبة.
أولا : أشكرك للتعليق والافادة
ثانيا: لدي سؤال
لو أنني لدي فصل به 50 طالب لكل منهما معلوماته مثل ( الاسم ، العمر، الطول، الوزن)
وفقا للclass , فأننا سنقوم بكتابة البيانات الاربعة المذكورة سابقا، ونطبقها علي جميع الطلاب مع حفظ النسب المختلفة لكل طالب طبعا،
الا انني كما رايت في الشرح انه يكتب البيانات الاربع ، ثم يضع بها نسب طالب واحد فقط أو اثنين ، إذا فكيف سيكتب نسب كل الطالب ؟!
فلو انه سيكتب نسب ال50 طالب فأين الاختصار في ذلك كما هو الغرض من الclass ، واذا كان الاكتفاء بواحد أو اثنين فأين نسب بقية الطلاب ؟؟
شئ آخر : كما أني لو ارتدت تعديل نسب الطالب رقم 26 مثلا فكيف اصل اليه هو بالتحديد ؟؟
لا اعلم هل تفهمني أم لا ولكنني في غاية الشكر والامتنان لمحاولتك مساعدتي
الأمر أسهل مما يبدو عليه للوهلة الأولى، دعنا نتخلّص من التسميات الأجنبية الفاخرة ونستبدل 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 علي سبيل المثال كيف اتوصل لذلك بهذه الطريقة ؟
العفو أخي، بالنسبة لكيفية كتابة تعريف الـ Class هي فقط قواعد وضعها مبرمجو اللغة ومع الممارسة يسهل عليكَ حفظها واستخدامها.
الشئ الاخر ، لو انني لدي مثلا
صف به 20 طالب وارتدت تعديل بيانات الطالب رقم 7 علي سبيل المثال كيف اتوصل لذلك بهذه الطريقة
لنفرض أنّ الصنف اسمه student والبيانات التي أردت تعديلها للطالب رقم سبعة هي علامته في إحدى المواد والتي هي في نهاية المطاف صفة (Property) ولتكن على سبيل المثال علامته في مادّة الرياضيات واسمها mathScore فيصبح لدينا التعبير الآتي:
student[7].mathScore = 75;
حيث أنّ 75 هي البيانات التي قمنا بإدخالها أو التعديل عليها.
التعليقات