الفصل الثالث: ما هي البرمجة الموجهة للكائنات؟

البرمجة الموجهة للكائنات (أو OOP) هي نموذج أو نمط من البرمجة حيث يتم نمذجة حل مشكلة البرمجة كمجموعة من الكائنات المتعاونة. تتعاون الكائنات عن طريق إرسال رسائل إلى بعضها البعض. هو الأنسب لإدارة المشاكل الكبيرة والمعقدة.

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

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

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

يمكن للفئة أن ترث سمات وسلوك فئة أخرى (أصلها) ، ويمكنها تعديل أو تخصيص هذا السلوك (أي أساليبها) لنفسها. وهذا يؤدي إلى مفهوم تعدد الأشكال. تعدد الأشكال يعني أنه عندما يتلقى كائن رسالة ، تسمى الطريقة الصحيحة ، بناءً على فئة الكائن. قد تنتمي هذه الطريقة إلى الوالد ، أو قد تكون مخصصة لهذا الفصل.

إليك مثال على تعدد الأشكال:

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

في حين أن الميراث هو جانب هام من جوانب OOP ، فإنه ليس الطريقة الوحيدة لبناء البرامج. بدلا من الميراث ، يمكن استخدام التكوين أو التجميع. قد يتضمن الفصل مثيلات للفئات الأخرى دون أن يرث أي شيء. إنها علاقة "لها" كما في: الفئة "أ" لها مثيل من الفئة ب كعضو. إذا استخدمت الميراث ، فستكون الفئة ب نوعًا من كائنات الفئة أ ؛ هذه علاقة "نوع من". دعنا نوضح هذا بأمثلة ...

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

تحتوي السيارة على أشياء أو فئات أخرى كجزء من نفسها ، مثل المحرك والعجلات وعجلة القيادة ، وما إلى ذلك. لا ترث أي شيء من هذه الفئات.

بناءً على ذلك ، يتم تمثيل سمات الكائن (بيانات الكائن) بواسطة متغيرات المثيل. عادةً ، ستقوم بإنشاء طرق "getter" (الحصول على قيمة متغير مثيل) وطرق "setter" (تعيين أو تعديل قيمة متغير مثيل) لهما ، لأن متغيرات المثيل مخفية عن العالم الخارجي.

في Pharo ، يتم إنشاء متغيرات المثيل في تعريف الفئة ، على سبيل المثال:

فئة فرعية الحجم: #Time
   exampleVariableNames: 'ثانية nanos'
   classVariableNames: ''
   poolDictionaries: 'ChronologyConstants'
   الحزمة: "نواة التسلسل الزمني"

في فئة #Time (تعيّن التجزئة في #Time الوقت كرمز Smalltalk) ، يوجد متغيرين للثواني: 'الثواني' و 'nanos'. ستعمل أساليب الكائن على هذه المتغيرات ، والتي تمثل الحالة المخفية والداخلية للكائن.

بالمناسبة ، تستمد الفئة #Time من ، أو ترث ، فئة #Magnitude. بدلاً من ذلك ، يمكنك قول فئة Magnitude "فئات فرعية" في فئة Time. هذا هو لغة Smalltalk النموذجية.

يشبه الكائن مفهوم الوحدة التقليدية المستخدمة في لغات البرمجة الإجرائية البسيطة مثل C و Pascal. الوحدة النمطية تحتوي على بنية البيانات والوظائف التي تعمل على الهيكل. البيانات ، ومع ذلك ، ليست مخفية. يمكن لأي شخص الوصول إلى البيانات. الأهم من ذلك ، لا يمكن أن ترث الوحدات من الوحدات الأخرى.

الكائنات عادة ما تكون أكثر دقة من الحبيبات. وبالتالي ، فهي مثالية لنمذجة النظم المعقدة.

هذا كل شيء. هذا هو مقدمة البرنامج الموجه نحو الكائنات. إذا كنت ترغب في دراسة هذا الموضوع المثير للاهتمام بتعمق أكبر ، فهناك مجموعة كبيرة من الكتب والمواد المخصصة لـ OOP و Smalltalk ، على سبيل المثال:

  • Smalltalk بواسطة مثال ، بواسطة أليك شارب
  • Smalltalk ، الكائنات ، والتصميم ، بواسطة شاموند ليو
  • فارو بالقدوة ، لستيفان دوكاس ، ديميتريس كلوبيس ، نيكولاي هيس ، ديمتري زاجيدولين