الoop حاسس مش فاهمه كويس انا شوفت بلايليست المهندس عادل نسيم بس مش عارف ادوس في مشروع لوحدي — سؤالك جميل مكنتش عارف داخلة كويسة للموضوع دا غير إني أتسأل عنه فربنا يبارلك، والإجابة في ثريد البوست دا curiouscat.live
OOP theory and practice.
المشكلة القائمة في ال Computer Science في تدريسه بصفة خاصة هي تحويله من علم قايم على فكرة تقديم حلول لمشاكل مختلفة إلى حلول مجردة بل وأحيانًا مش بتعرف حتى إنها حلول.
من الحاجات التعيسة اللي زي كدا ال programming paradigms.
المشكلة القائمة في ال Computer Science في تدريسه بصفة خاصة هي تحويله من علم قايم على فكرة تقديم حلول لمشاكل مختلفة إلى حلول مجردة بل وأحيانًا مش بتعرف حتى إنها حلول.
من الحاجات التعيسة اللي زي كدا ال programming paradigms.
بتلاقي نفسك محطوط في كورس جافا في الكلية عن ال oop وإنها مهمة بس مش فاهم جت منين وأنت لسه كنت بتكتب ب c++ أو في ظرف مؤسف أكتر بتكتب ب phyton فأنت ايه دخلك بكل دا مش الكود كان شغال ايه لازمة ال classes وال objects وال four principles والعك دا
تعالى معي من القعر.
من أين بدأت ال OOP مش هدخل في التاريخ العميق كلغات برمجة وإنما كمفهوم، أول من صك مصطلح OOP كان ألن كاي فمهم نعرف هو حط المصطلح دا لأيه وهدفه منه كان ايه؟
من أين بدأت ال OOP مش هدخل في التاريخ العميق كلغات برمجة وإنما كمفهوم، أول من صك مصطلح OOP كان ألن كاي فمهم نعرف هو حط المصطلح دا لأيه وهدفه منه كان ايه؟
“OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.”
~ Alan Kay
~ Alan Kay
الأسس الرئيسية هنا كدا
- message passing
- local retention
- hiding of state-process
- extreme-late i.e. Dynamic binding
عشان نفهم الكلام دا محتاجين نبص بصة خاطفة وسريعة على ال procedural programing لإن كان السابق لل oop
- message passing
- local retention
- hiding of state-process
- extreme-late i.e. Dynamic binding
عشان نفهم الكلام دا محتاجين نبص بصة خاطفة وسريعة على ال procedural programing لإن كان السابق لل oop
باختصار شديد وإن شاء الله مش مخل هو قايم على
ال functions و ال flow controls وال loops
كل دا مش بيخدم على ال modeling بتاع ال data إنما طريقة التعامل معاها
ال functions و ال flow controls وال loops
كل دا مش بيخدم على ال modeling بتاع ال data إنما طريقة التعامل معاها
بدل ما الداتا محصورة في preemptive data types سهلة على cpu عايزين نعمل Model معقد أكتر مماثل ليها في الواقع.
دا حاصل من ال structs حقيقة لو تعرف c.
بس لسه ناقصك حاجة مهمة وهي ازاي تغير في ال state بتاعت كل struct هتقولي function هقولك دي المشكلة
تقولي مشلكة؟
دا حاصل من ال structs حقيقة لو تعرف c.
بس لسه ناقصك حاجة مهمة وهي ازاي تغير في ال state بتاعت كل struct هتقولي function هقولك دي المشكلة
تقولي مشلكة؟
أقولك اه، ليه ال function المتصلة بال data تبقى منعزلة عن ال data نفسها ؟
مش احنا كنا عملنا grouping لكل حاجة مرتبطة في complex type ليه لسه ال function أو ال behavior معزول؟
عشان كدا ال class بيعرف بشكل ما أو بآخر إنه struct with functions.
مش احنا كنا عملنا grouping لكل حاجة مرتبطة في complex type ليه لسه ال function أو ال behavior معزول؟
عشان كدا ال class بيعرف بشكل ما أو بآخر إنه struct with functions.
لما حطينا ال behavior مع ال data قدرنا نحقق أول تلاتة
- messaging
بدل ما الداتا بتتعامل مع بعض ب function أجنبية عنهم لأ بقت ال function مرتبطة بيهم.
- local retention and protection
الوحيد القادر على تعديل ال Data لل object دا بقي هو نفسه مش function براه
- messaging
بدل ما الداتا بتتعامل مع بعض ب function أجنبية عنهم لأ بقت ال function مرتبطة بيهم.
- local retention and protection
الوحيد القادر على تعديل ال Data لل object دا بقي هو نفسه مش function براه
- hiding of state-process
ال object بقى مالك نفسه وال state بتاعته بقت encapsulated جواه مش عشوائية في local variable برا أو ينفع تتغير من function ملهاش صلة مباشرة بيه.
ال object بقى مالك نفسه وال state بتاعته بقت encapsulated جواه مش عشوائية في local variable برا أو ينفع تتغير من function ملهاش صلة مباشرة بيه.
وأخيرًا ودي قد تبدو معقدة وهي ال extreme-late binding تعالى نفصصها
ايه هو ال binding؟
هو الربط بين ال function call وال actual code.
في منه نوعين
ايه هو ال binding؟
هو الربط بين ال function call وال actual code.
في منه نوعين
Early binding
ودا إن ال compiler بيبقى عارف إن الكود المرتبط بال function call قبل ما البرنامج يشتغل
ودا إن ال compiler بيبقى عارف إن الكود المرتبط بال function call قبل ما البرنامج يشتغل
Late binding
ودا إن ال function definition بيتحدد في ال runtime مش ال compile time كله بناءً على نوع الداتا اللي بتستخدم ال function دي
ودا إن ال function definition بيتحدد في ال runtime مش ال compile time كله بناءً على نوع الداتا اللي بتستخدم ال function دي
بس كدا يسيدي دا ال oop احنا كان عندنا شوية مشاكل من بعترة الداتا وعشوائية التغيير فيها فعملنا ال modeling دا ليها
شايفك بتخبط كف على كف وتقولي أنا جاي مش فاهم ال four principles تقوم مديني أربعة غيرهم؟
الحقيقة إني بكلمك في ال oop اللي بجد إنما ال four principles دول توسع عن مقصد ألن كاي بس وماله
الحقيقة إني بكلمك في ال oop اللي بجد إنما ال four principles دول توسع عن مقصد ألن كاي بس وماله
Abstraction
دا حصل فعلاً من فكرة إني تعمل model للداتا في unit معينة وتعمل hierarchy منها
دا حصل فعلاً من فكرة إني تعمل model للداتا في unit معينة وتعمل hierarchy منها
Encapsulation
إنك تحط كل وسائل تعديل ال state بتاعت الداتا في ال unit دي
إنك تحط كل وسائل تعديل ال state بتاعت الداتا في ال unit دي
Inheritance
هو الحقيقة مش ضروري لل oop اللي قصده ألن إنما بيعمل إضافة شقية من ال code reusability وال dynamic binding
هو الحقيقة مش ضروري لل oop اللي قصده ألن إنما بيعمل إضافة شقية من ال code reusability وال dynamic binding
Polymorphism
نفس الكلام هو late-binding و with extra steps.
نفس الكلام هو late-binding و with extra steps.
نيجي لل practice بقى.
بعدما عرفت مميزات أو حلول ال oop لازم تعرف إنك محتاج مشكلة محتاجة الحلول دي عشان تستعمل ال paradigm دا.
مينفعش تتعامل مع مشكلة زي simple calculator مثلاً وتعملي class أصل ليه وأنت معندكش غير أربع أو خمس operations
بعدما عرفت مميزات أو حلول ال oop لازم تعرف إنك محتاج مشكلة محتاجة الحلول دي عشان تستعمل ال paradigm دا.
مينفعش تتعامل مع مشكلة زي simple calculator مثلاً وتعملي class أصل ليه وأنت معندكش غير أربع أو خمس operations
أنت محتاج مشكلة فيها complex data modeling حاجة فيها data hierarchy غير كدا بجد مفيش أي لزمة للoop غير لو بتكتب Java أو c# فاللغة بتغصب عليك إنك تشتغل مع class مش أكتر.
معلومة هامشية : مش من هواة تقييم المحتوى إنما لما بصيت على ال playlist بتاعت الأخ عادل نسيم لقيت حشو مريب و language specific بشكل غبي وكذلك الباقي كله بيشرح ال oop في سياق لغة بعينها وال syntax فالكلام كله حشو فارغ.
فربنا يتوب علينا من الحشو.
فربنا يتوب علينا من الحشو.
جاري تحميل الاقتراحات...