البرمجة بالكائنات …

“قديماً كان المبرمج يفكر في البرنامج على انه مجموعة من الدوال Routines أما في القرن الواحد و العشرين فقد أصبح يفكر فيه على أساس أنه مجموعة من الكائنات”

قالها Steve McConnel في كتاب Code Complete

أضحكتني يا سيد Steve، بالرغم من احترامي لكتابك الرائع Code Complete إلا أني أختلف معك كثيراً في الجملة السابقة التي ذكرتها (هذا من باب التسلق على أكتاف العظماء و إلا من أنا حتى أرد على كاتب تقني عظيم مثل هذا) ،فإني أرى مِن حولي أن بين كل 10 مبرمجين هنالك 12 مبرمج يجدون فكرة البرمجة بالكائنات غامضة إلى حد ما… كيف لا و قد امتلأت كتب البرمجة بأمثلة تشرح هذا الموضوع بطريقة عجيبة و غريبة !! فعندما تقرأ في أحد الكتب مثالاً يوضح فكرة الكائنات فيذكر بأن “الإنسان” يعتبر Class و أن “أحمد و محمد و علي و عباس و شعبان عبد الرحيم” عبارة عن Objects فكيف تريدنا بالتحديد أن نربط هذه المعلومة بالتطبيقات التي نبرمجها يومياً ! ..

على أية حال يا أحباب، تذكرت و أنا أقرأ كلام Steve المعاناة التي مررت بها قديماً عندما أردت تعلم مفهوم البرمجة بالكائنات حتى يسر الله لي لقاءً مع الأخ “المبرمج” فكان شرحه لي بطريقة مبسطة خالية من التعقيد أو التشبيهات الغريبة، بل كان يحدثني بلسان المبرمج و بعقلية المبرمج (و هذا قد كان قبل أكثر من سبعة سنوات و لست أعلم من حينها عن مكان الرجل أو أخباره لكني أسال الله أن يجزيه خيراً حتى يرضيه).

لذلك سأحاول أن أكتب مجموعة تدوينات توضح مفهوم البرمجة بالكائنات، و قد تجولت قليلاً بين المواقع العربية لأقرأ ما كُتب في هذا الموضوع حتى لا أكرر ما ذكره من سبقوني و بنفس الأسلوب، فخرجت بفكرة أظنها و الله أعلم ستساعد على إيصال مفهوم البرمجة بالكائنات بدون تعقيد …

حان و قت النوم .. اكمل لاحقاً بإذن الله .. ^_^

5 thoughts on “البرمجة بالكائنات …”

  1. السلام .. على قولك .. كثير من اصحابنا المبرمجين العرب يسمون انفسهم مبرمجين لانهم حسوا انهم وصلوا لمستواى العام العربي .. ! فاذا تحدثت لبعضهم و قلت .. ما هي لفات البرامج او ما هي لغه البرمجه المفظله لديك .. سيقول مثل ما قال عشره مثله .. وهي “اعرف كثير من لاغات البرمجه .. وانا محترف في معظم تلك اللغات ولكن هذي الكلاسات ما ادري ويش سالفتها”

  2. الدكتور يقول الكلاس عبارة عن صندوق والاوبجيكت هي الطماط اللي في الصندوق وفيه شي ثاني ناسي وش هو يكون هو السيارة اللي تحط فيها الصندوق خخخخخخ والله شرح عجيب مرة 🙁

    أنا بانتظارك على أحر من الجمر 🙂

  3. منقول من : http://www.swalif.net/softs/showthr…8&highlight=oop

    السلام عليكم ..
    الObject Orented هي مجرد طريقة للبرمجة … تركز على الترابط المنطقي للكائن .. ولماذا سموة كائن .. خليني اشرحلك …

    تخيل انك تريد ان تشتري سيارة !!! (وتخيل ان تلك السيارة كائن حي)
    طبعاً السيارة لها خصائص مثل .. يجب ان يكون لة 4 عجلات “في الغالب” و مكان لسائق السيارة و محرك و Gear Box و مصابيح امامية … وغيرها من خصائص التي تجب ان تكون في السيارة لكي تعمل !
    ولكن كل سيارة تتختلف في الاسم .. و الطراز و الحجم و السعر …

    يعني انت الان ستبرمج برنامج لمحل بيع السيارات …
    اي لماذا تبرمج كل سيارة لوحدة .. لماذا لا تستخدم الاشياء المشتركة كعامل مشترك و تبني فوق ذالك العامل اي اذا اردت ان تفعل ذالك تقوم بفعل الاتي

    // عمل سيارة جديدة
    $سيارة = سيارة() جديدة
    // اي الكائن $سيارة لدية الان اربع عجلات و محرك و ……
    // اضافة الفروق
    $سيارة->اسم = كامري
    $سيارة->طراز = 2006
    $سيارة->محرك = 6 سلندر

  4. أحسنت!
    أغلب ما سمعت وقرأت عن موضوع البرمجة الهيكلية هو الحديث عن النواحي الفلسفية للموضوع، لا أعترض على هذا الحديث لكن أعتقد أنها ليست طريقة لتعليم أبجدية البرمجة كائنية التوجه، وإنما تصلح لمستويات متقدمة منها.
    من الناحية الأكاديمة فهناك مذهبين -على حسب علمي- في تدريس البرمجة كائنية التوجه:
    1-تدريس الطالب البرمجة التقليدية ثم نقله إلى عالم الكائنات.
    2-تدريس الطالب مفهوم الكائنات من البداية.

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

    نفس الشئ حدث معي في الرياضيات فيما يتعلق بالكسور من الألف إلى الياء، فلم أفهمها إلا في مرحلة الثانوية، ولم أستوعبها إلا في الجامعة 🙂

    أعتذر على تشتت أفكاري 🙂
    تحياتي
    SaudiGeek

  5. بسم الله الرحمن الرحيم

    أولاً أستاذ مازن دائماً مواضيعك محل نقاش وتستاهل أنه الواحد يتعب في الرد عليها

    بالنسبة للبرمجة بالكائنات فإن افضل طريقة استخدمها واجد أن الكائن الناتج بالفعل كائن قوي هي كالتالي :

    أولاً يجب عليك الخروج من فكرة انك تبرمج وعش واقع الشئ الذي تصفه فمثلاً لو أردت أن أنشئ كائن يمثل شئ حقيقي بعيداً عن الكمبيوتر مثل كائن يمثل كتاب .

    فأنا أقوم بالتالي :

    أولاً انظر للشئ الذي اصفه وذلك بعيداً عن الكمبيوتر وفي مثالنا هنا كتاب

    ثانياً بما أن الشئ الذي أصفه وهو الكتاب يمكنني احضار مثله فأني أقوم بإحضار مجموعة من الكتب أمامي.

    ملاحظة في عالم البرمجة بالكائنات فإنك تعتمد على properties وهي خصائص الكائن و method أو اساليب وهي الوظائف التي يقوم بها الكائن وهي شيئان موجودة في جميع كائنات الأرض وتختلف من كائن إلى اخر

    فمثلاً بالنسبة للـ properties أو الخصائص فإنه تكون في الكائن ولايستطيع أن ينفك أويفلت منها فمثلاً لو أردت أن أصف كائن يمثل سيارة فإنه من احدى خصائص هذا الكائن عدد الكفرات وهي خاصية ثابتة في أي سيارة ولكن تختلف من سيارة إلى اخرى من ناحية العدد ولذلك ستحد أني سأضع cirnumber كمتغير ضمن الكائن ليحتفظ لي بعدد كفرات السيارة (وهذه خاصية)

    أما بالنسبة للـmethod فستجد أنها أفعال يقوم بها هذا الكائن ففي كائن السيارة ستجد أنه من الأساليب التي تقوم بها السيارة هي زيادة السرعة وربط المكابح وغيرها الكثير فإذا اردت ان اطبق اسلوب زيادة وخفض السرعة في السيارة ستجد أني امثلها بـfunction فأكتب في التعريف

    function Speed($sval)

    حيث أني احدد سرعة السيارة بالمتغير sval فلو اعطيته 100 فسيزيد من سرعة السيارة حتى تصل إلى 100 وهكذا …

    والخلاصة هنا أنك اذا اردت ان تبرمج بالكائنات يجب وضع الكلمتين properties و method في رأسك دائماً وأن تقترب من الشئ الذي تريد تصميمه وتبتعد قدر الإمكان عن البرمجة وأن تعيش أجواء الكائن الذي تشرحه وسجل ملاحظتك على ورق.

    (يجب أن تضع هذه النقطة في رأسك…. وتابع معي الآن)

    نعود الآن للكتاب فلو عشت اجواء الكتاب واخذت ورقة وقلم ستجد أن الكتاب يمتلك
    propertis أو خصائص كما اتفقنا مثل عدد الصفحات المؤلف رقم ISBN و عنوان الكتاب و الناشر وبلد النشر وتاريخ النشر .

    وهذه بعض الخصائص

    ونأتي الأن الى بعض الأساليب التي تستطيع القيام بها على الكتاب وهي مثلاً

    قرائته و اغلاق الكتاب والبحث في الكتاب عن موضوع معين وغيرها الكثير

    والآن بعد أن حددنا بعض الخصائص والأساليب ستجد أننا سهلنا على انفسنا عملية البرمجة وبعدها نأتي للتفكير البرمجي

    فأقول على سبيل المثال :

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

    هذا بالنسبة للتفكير في واحد من الخصائص

    أما بالنسبة للأساليب فأذكر لك على سبيل المثال قراءة الصفحة

    فستجد أنه لقراءة صفحة من الكتاب فأني اقوم بعمل دالة للقراءة كما اتفقنا ولكن ماهي الأسئلة التي يجب أن نطرحها قبل كتابة الأسلوب أو الدالة فأقول على سبيل المثال :

    لقراءة صفحة من كتاب فإن أحتاج لرقم الصفحة التي اريد قرائتها وبذلك ستجد أنه
    يجب عليك وضع دالة تحتوي على رقم الصفحة وترجع لنا الصفحة المراد قرائتها وستجد أن تمثيل الدالة سيكون كالتالي :

    function ReadBook($pagenumber)
    {
    ….

    return $page;
    }

    وخلاصة كلامي هو أنه أي كائن في العالم يحتوي على Propertis (خصائص وهي في عالم البرمجة تمثل بالمتغيرات) و Method (أساليب أو وظائف وهي في عالم البرمجة تمثل بالدوال)

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

    يعني بالعربي الفصصصصصصصصصصصصصصصصصيح أن البرمجة بالكائنات لاتعتمد على الشفرة وإنما تعتمد على على وصف المبرمج للكائن الذي سيبرمجه

    فإذا رأيت أحد المبرمجين يبرمج نفس الكائن الذي تبرمجه ولنقل كائن يمثل قطار فستجد المقارنة بين الكائنين من حيث الأفضل لن تكون بمقارنة الشفرة وإنما ستكون بأفضل وصف للكائن

    وهذا مالدي وأسف إذا حصل أي تقصير مني فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله سبحانه وتعالى

    ولك خالص تحياتي
    أخوك عبدالله عيد

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *