بتـــــاريخ : 2/22/2011 9:00:00 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1234 0


    OOP البرمجة كائنية المنحى نظرة تحليلية مفصلة ,,,

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : HGB | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :

    السلام عليكم ,,,

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

    مقدمة :

    ( OOP(Object Orientation Programming البرمجة كائنية المنحى " البرمجة الموجهه بالكائنات " هي ذلك المفهوم الذي بزغ الى عالم البرمجة ليغير طريقة البرمجة الاجرائية القديمة ذات الدوال والمناهج الضيقة الأفق الى سعة ورحابة الكائنات ,,,

    منذ بزوغ فجر تاريخ البرمجة بدأ المبرمجون بكتابة برامج باستخدام لغة الالة ,, فوجدو بعد فترة أن هذه اللغة متعبة لحد يجعل تطور البشرية في هذا المجال أمرا صعبا للغاية ,, فقررو تطوير البرمجة لاستخدام دلالات تعبر بلغة أقرب للغة البشر عن برمجة الصفر والواحد ,,فاخترعو لغة الاسمبلي " التي ليست الا اختصارا لتعليمات ست عشرية هي في الأصل صفر وواحد " ,, فتطورت البرمجة بشكل كبير وسريع لكن مع ازدياد الحاجة البشرية للسرعة قررو أن هذه اللغة تأخذ وقتا طويلا للغاية ,, فقررو مرة أخرى تبسيطها اكثر فبدأو باختراع لغات البرمجة عالية المستوى أمثال الكوبول والباسكال والبيسك وأمثالها الكثير ,, وكانت كلها مسيطرة في وقتها حتى بزغ فجر لغة السي ,,
    مرة أخيره " حتى الان " قرر المبرمجون أنهم بحاجة الى التبسيط زيادة فقررو أن يحاولو محاكاة الواقع فلا أسهل من التعامل بشكل طبيعي مع الاشياء ,,وهنا بزغ فجر لغات البرمجة كائنية المنحى ,,

    لغة السي لغة اجرائية لاتحتوي على مفهوم الكائنات فالسي أفضل مالديها في التعامل البنيوي هو ال Struct ,,,
    أما في لغة السي ++ فتوجد الفئات Classes التي هي أساس التعامل الكائني المنحى ,,,
    قبل أن نستمر انظر الى مكتبة ال Win32 Api ,, مكتبة ضخمة جدا تتحكم بالوندوز كله لكنها مكتوبة بلغة السي ,, ليست كائنية المنحى حيث تتكون من عشرات الالاف من الدوال التي يستحيل تذكرها ,,
    وفي نفس الوقت انظر الى مكتبى .NET FramWork مكتبة كائنية المنحى بشكل كامل تغلف دالات ال Win32 Api لتسهل الوصول اليها ,, وهي رائعة جدا سيحبها كل من يتعامل معها نظرا لسهولة وسرعة تعلم استخدامها ,,," وهي المصة الخاصة بلغات برمجة الدوت نت الجديدة " ,,,

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

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

    الان هذا الطفل لن يعرف مطلقا كيف يعمل هذا الرجل الالي كيف يتحرك اذا ضغطنا هذا الزر كيف يصدر صوتا اذا ضغطنا ذلك الزر !!

    هذا مشابه تماما لما يريدنا مخترعو ال OOP الوصول اليه ,,, أن نتحكم بالكائنات بكل سهولة دون الدخول في تفاصيل طريقة عملها ,,,
    ومن هنا بزغ فجر مفهومين جديدين للبرمجة " صانعو الفئات " "ومستخدمو الفئات " ,,,,
    صناع الفئات هم كما في لعبة الرجل الالي الشركة المصنعة لهذه اللعبة ,,
    والمستخدمون هم الاطفال الذين يلعبون بها ولايعلمون شيئا عن طريقة عملها الداخلية ,,, فقط يصدر الصانعون Manual لطريقة الاستخدام لكي يعرف الطفل كيف يستمتع بها وهو تماما مايحدث في كائنات ال OOP ,,,

    الان هل يمكن فعلا أن تكون البرمجة بهذه السهولة ,؟ أقول نعم اذا ركز كل على عمله ,,,
    مصنعو الفئات سيكون بالطبع عليهم العبء الأكبر ,, المستخدمون قد يكون عليهم عبء وقد يكونون في قمة حالات الاستمتاع بهذا الكائن ,,
    حالات الاستمتاع في الواقع كما لدينا الطفل الذي يلعب بالكائن الالي الكامل وهي اخر مراحل استخدام الكائن,, لأن الطفل لن يستخدم الكائن ليطوره لكائن اخر "الا اذا كنا في عالم ال Matrix ونحن لانعلم !!!",, فقط سيكتفي باللعب به ,,,

    أما لوكنا في مثال اخر لو كان الكائن الحالي لدينا هو عبارة عن محرك سيكون هناك بعض العبء على مستخدم الكائن الذي سيقوم بتركيبه مع عدة كائنات أخرى ليكون في النهاية كائنا جديدا ... هنا نحن لم ننتهي من سلسلة التطوير لهذا الكائن بعد ,, فيمكن اعتبار المستخدمين مطورين ,,,

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

    مثلا في محاكيات التفاعلات الكيميائية سيكون المطورون بداية كائن هو عبارة عن ذرة بالكتروناتها ونواتها وبوزوتروناتها وبروتوناتها وكل محتوياتها ,,,
    هذا الكائن سيدمج في كائن أكبر منه وهو الجزيئ سيتكون من عدة كائنات ذرة ,, ثم نتدرج حتى نصل الى المادة الكيميائية ,, ويكون مبرمجو الكائنات السفلية قد اضطلعو على كيفية تفاعل الجزيئات مع بعضها بشكل تام ثم يبدؤون بكتابة " الدوال (أقول الدوال هنا وأنا لاأمزح ) " التي ستقوم بعملية الاتحام الدمج بين الجزيئات ويملؤنها بكل تفاصيل التفاعلات ,, في النهاية فقط ما على مستخدم الكائن النهائي وهو " كائن بيانات المحلول " [ان ندخل له بيانات المحلول الاول والثاني ونطلب منه أن يفاعل بينهما وننتظر نتيجة التفاعل !!!!
    هذه الاشياء بالطبع تحتاج لكمبيوترات عملاقة سريعة لتنفذ كل هذا الكم من التعليمات ,,
    لكن يمكن التدرج وصولا لمستويات مبرمجي الالعاب حيث يقومون ببناء ألعابهم على أساس الكائنات ,,,
    مثلا خذ عندك لعبة بلياردو وهو مثال أوضح نوعا ما ,,,
    ماعلى مطوري اللعبة الا استخدام كائنات كرة بلياردو " لأنها الجزء الاصعب " كائن البلياردو هذا سيتعامل كما في الحياة الواقعية تماما ,,سيكون الكائن عبارة عن جسم كروي له كتلة بافتراض ان الجاذبيه الارضية 9.8 سنعطيه أيضا مكان لتخزين معلومات طاقته الحركية وطاقته الكامنة ,,, فكل ماعلينا هو كتابة دالة لتقوم بعملية التصادم بحيث أن كل كرة عندما تصطدم بكرة أخرى ستستمد طاقة حركية وطاقة كامنه داخلها بهذا المبدأ يمكن أن نحرك كراتنا وننسى تماما كيفية تصادمها وانعكاسها !!!

    أردت ان أبين هذه الأمور لأنها الاشياء التي أتعبتني في فهم الكائنات بالشكل الصحيح ,,, لم لأجد كتابا يتحدث عنها بالشكل المفروض ,, كل الكتب تعطي أمثلة سطحية سريعة مباشرة لاتعبر عن الاستخدام الامثل للكائنات ,,,
    فمثلا لو قلت لك مثال مصعد كهربائي هو عبارة عن كائن ,, ستقول لي يمكن أكتب برنامجا كهذا دون الدخول في تفاصيل الكائنات باستخدام لغة اجرائية بسيطة !! فيصبح المبرمج المبتديء الذي سكون ضيق الافق في البداية مشوشا لايعرف الاستخدام الامثل لهذه التقنية ,,,
    أخيرا قبل أن أنتهي من هذه المقدمة الفلسفية أقول أن المستقبل سيحمل فقط لغات كائنية المنحى من لم يرد الدخول في ذلك سيسقط وما عليه الا بانتظار قدره ,,,
    فأمر الكائنات ليس معقدا بل مفهومه مختلف فقط ,,,

    كلمات مفتاحية  :

    تعليقات الزوار ()