البرمجة الشيئية

من ويكيبيديا، الموسوعة الحرة

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

الميزة الشائعة للكائنات هي أن الإجراءات (أو الطرق) مرفقة بها ويمكنها الوصول إلى حقول بيانات الكائن وتعديلها. في هذه العلامة التجارية لـ OOP ، يوجد عادةً اسم خاص مثل أو يستخدم للإشارة إلى الكائن الحالي. في OOP ، تم تصميم برامج الكمبيوتر عن طريق إخراجها من الكائنات التي تتفاعل مع بعضها البعض. [1] [2] لغات OOP متنوعة ، ولكن الأكثر شيوعًا تعتمد على الفئات ، مما يعني أن الكائنات هي أمثلة للفئات ، والتي تحدد أيضًا أنواعها . thisself

العديد من لغات البرمجة الأكثر استخدامًا (مثل C ++ و Java و Python وما إلى ذلك) هي نماذج متعددة وهي تدعم البرمجة الموجهة للكائنات بدرجة أكبر أو أقل ، عادةً بالاقتران مع البرمجة الإجرائية الحتمية .

تشمل اللغات المهمة الموجهة للكائنات: Ada و ActionScript و C ++ و Common Lisp و C # و Dart و Eiffel و Fortran 2003 و Haxe و Java و JavaScript و Kotlin و Logo و MATLAB و Objective-C و Object Pascal و Perl و PHP و Python و R ، Raku ، Ruby ، ​​Scala ،SIMSCRIPT و Simula و Smalltalk و Swift و Vala و Visual Basic.NET .

التاريخ

تدوين UML للفصل. تحتوي فئة الزر هذه على متغيرات للبيانات والوظائف . من خلال الوراثة ، يمكن إنشاء فئة فرعية كمجموعة فرعية من فئة Button. الكائنات هي حالات من فئة.

ظهرت المصطلحات التي تستدعي "الأشياء" و "الموجهة" بالمعنى الحديث للبرمجة الموجهة للكائنات لأول مرة في معهد ماساتشوستس للتكنولوجيا في أواخر الخمسينيات وأوائل الستينيات. في بيئة مجموعة الذكاء الاصطناعي ، في وقت مبكر من عام 1960 ، يمكن أن تشير كلمة "كائن" إلى عناصر محددة ( ذرات LISP ) بخصائص (سمات) ؛ [3] [4] استشهد آلان كاي لاحقًا بفهم تفصيلي لأجزاء LISP الداخلية باعتباره تأثيرًا قويًا على تفكيره في عام 1966. [5]

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

آلان كاي ، [5]

ومن الأمثلة المبكرة الأخرى لمعهد ماساتشوستس للتكنولوجيا Sketchpad التي أنشأها إيفان ساذرلاند في 1960-1961. في مسرد التقرير الفني لعام 1963 استنادًا إلى أطروحته حول Sketchpad ، حدد Sutherland مفاهيم "الكائن" و "المثيل" (مع مفهوم الفصل مشمول بـ "رئيسي" أو "تعريف") ، وإن كان متخصصًا في التفاعل الرسومي. [6] أيضًا ، أنشأ إصدار MIT ALGOL ، AED-0 ، رابطًا مباشرًا بين هياكل البيانات ("plexes" ، في تلك اللهجة) والإجراءات ، مع تحديد ما تم تسميته لاحقًا بـ "الرسائل" و "الأساليب" و "وظائف الأعضاء ". [7] [8]

قدمت Simula مفاهيم مهمة تعد اليوم جزءًا أساسيًا من البرمجة الموجهة للكائنات ، مثل الفئة والموضوع والوراثة والربط الديناميكي . [9] تم استخدام لغة برمجة Simula الموجهة للكائنات بشكل أساسي من قبل الباحثين المشاركين في النمذجة المادية ، مثل النماذج لدراسة وتحسين حركة السفن ومحتواها عبر موانئ الشحن. [9]

في السبعينيات ، تم تطوير الإصدار الأول من لغة برمجة Smalltalk في Xerox PARC بواسطة Alan Kay و Dan Ingalls و Adele Goldberg . تضمن Smalltalk-72 بيئة برمجة وتم كتابتها ديناميكيًا ، وتم تفسيرها في البداية ، ولم يتم تجميعها . اشتهر تطبيق Smalltalk بتوجيه الكائن على مستوى اللغة وبيئة التطوير الرسومية الخاصة به. ذهب Smalltalk من خلال إصدارات مختلفة ونما الاهتمام باللغة. [10]بينما تأثر Smalltalk بالأفكار المقدمة في Simula 67 ، فقد تم تصميمه ليكون نظامًا ديناميكيًا بالكامل يمكن من خلاله إنشاء الفئات وتعديلها ديناميكيًا. [11]

في سبعينيات القرن الماضي ، أثرت سمالتالك على مجتمع ليسب لدمج التقنيات القائمة على الكائنات التي تم تقديمها للمطورين عبر آلة ليسب . أدت التجارب مع ملحقات مختلفة لـ Lisp (مثل LOOPS و Flavours التي تقدم الوراثة المتعددة والمزج ) في النهاية إلى نظام Common Lisp Object ، الذي يدمج البرمجة الوظيفية والبرمجة الموجهة للكائنات ويسمح بالامتداد عبر بروتوكول Meta-object . في الثمانينيات ، كانت هناك محاولات قليلة لتصميم بنيات المعالجات التي تضمنت دعم الأجهزة للكائنات الموجودة في الذاكرة ، لكنها لم تكن ناجحة. تشمل الأمثلةIntel iAPX 432 و Linn Smart Rekursiv .

في عام 1981 ، قام غولدبرغ بتحرير عدد أغسطس من مجلة بايت ، حيث قدم Smalltalk والبرمجة الموجهة للكائنات لجمهور أوسع. في عام 1986 ، نظمت جمعية آلات الحوسبة المؤتمر الأول حول البرمجة الشيئية والأنظمة واللغات والتطبيقات (OOPSLA) ، والذي حضره بشكل غير متوقع 1000 شخص. في منتصف الثمانينيات ، تم تطوير Objective-C بواسطة Brad Cox ، الذي استخدم Smalltalk في ITT Inc. ، و Bjarne Stroustrup ، الذي استخدم Simula في أطروحة الدكتوراه ، ذهب في النهاية لإنشاء C ++ الموجهة للكائنات . [10] في عام 1985 ، برتراند مايرأنتج أيضًا التصميم الأول للغة إيفل . تركز على جودة البرامج ، Eiffel هي لغة برمجة موجهة بشكل بحت وترميز يدعم دورة حياة البرنامج بأكملها. وصف ماير طريقة تطوير برمجيات إيفل ، بناءً على عدد صغير من الأفكار الرئيسية من هندسة البرمجيات وعلوم الكمبيوتر ، في بناء البرمجيات كائنية التوجه . تعتبر آلية موثوقية Meyer ، التصميم حسب العقد ، ضرورية لتركيز الجودة في Eiffel ، والتي تعد جزءًا لا يتجزأ من الأسلوب واللغة.

الرسم البياني لمؤشر شعبية لغة البرمجة TIOBE من 2002 إلى 2018. في 2000s ، تنافست Java الموجهة للكائنات (الخضراء) والإجرائية C (السوداء) على المركز الأول.

في أوائل ومنتصف التسعينيات ، تم تطوير البرمجة الشيئية كنموذج البرمجة السائد عندما أصبحت لغات البرمجة التي تدعم التقنيات متاحة على نطاق واسع. وشملت هذه Visual FoxPro 3.0 ، [12] [13] [14] C ++ ، [15] ودلفي [ بحاجة لمصدر ] . تم تعزيز هيمنتها بشكل أكبر من خلال زيادة شعبية واجهات المستخدم الرسومية ، والتي تعتمد بشكل كبير على تقنيات البرمجة الموجهة للكائنات. يمكن العثور على مثال لمكتبة واجهة المستخدم الرسومية الديناميكية وثيقة الصلة ولغة OOP في أطر عمل Cocoa على نظام التشغيل Mac OS X ، مكتوبة باللغةObjective-C ، امتداد رسائل ديناميكي موجه للكائنات إلى C استنادًا إلى Smalltalk. عززت مجموعات أدوات OOP أيضًا من شعبية البرمجة المدفوعة بالأحداث (على الرغم من أن هذا المفهوم لا يقتصر على OOP).

في ETH Zürich ، كان نيكلاوس ويرث وزملاؤه يحققون أيضًا في موضوعات مثل تجريد البيانات والبرمجة المعيارية (على الرغم من أن هذا كان شائع الاستخدام في الستينيات أو قبل ذلك). اشتمل Modula-2 (1978) على كليهما ، وشمل تصميمهما اللاحق ، أوبيرون ، نهجًا مميزًا لتوجيه الكائن والفئات وما إلى ذلك.

تمت إضافة الميزات الموجهة للكائنات إلى العديد من اللغات الموجودة سابقًا ، بما في ذلك Ada و BASIC و Fortran و Pascal و COBOL . غالبًا ما أدت إضافة هذه الميزات إلى اللغات التي لم يتم تصميمها لها في البداية إلى مشاكل في توافق التعليمات البرمجية وقابليتها للصيانة.

في الآونة الأخيرة ، ظهر عدد من اللغات الموجهة بشكل أساسي للكائنات ، ولكنها متوافقة أيضًا مع المنهجية الإجرائية. اثنان من هذه اللغات هما بايثون وروبي . من المحتمل أن تكون اللغات الأكثر أهمية من الناحية التجارية هي Java ، التي طورتها Sun Microsystems ، بالإضافة إلى C # و Visual Basic.NET (VB.NET) ، وكلاهما مصمم لمنصة Microsoft .NET . يُظهر كل إطار من هذين الإطارين ، بطريقته الخاصة ، فائدة استخدام OOP من خلال إنشاء تجريد من التنفيذ. يدعم VB.NET و C # الوراثة عبر اللغات ، مما يسمح للفئات المحددة في لغة واحدة بفئات الفئات الفرعية المحددة في اللغة الأخرى.

الميزات

تستخدم البرمجة الموجهة للكائنات كائنات ، ولكن لا يتم دعم جميع التقنيات والبنى المرتبطة مباشرة باللغات التي تدعي أنها تدعم OOP. ينفذ عمليات على المعاملات. الميزات المذكورة أدناه شائعة بين اللغات التي تعتبر شديدة التوجه نحو الطبقة والكائنات (أو متعددة النماذج مع دعم OOP) ، مع استثناءات ملحوظة مذكورة. [16] [17] [18] [19]

مشتركة مع لغات غير OOP

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

الأشياء والفئات

عادةً ما تستخدم اللغات التي تدعم البرمجة الموجهة للكائنات (OOP) الوراثة لإعادة استخدام الكود وقابلية التوسع في شكل فئات أو نماذج أولية . أولئك الذين يستخدمون الفئات يدعمون مفهومين رئيسيين:

  • الفئات - التعاريف الخاصة بتنسيق البيانات والإجراءات المتاحة لنوع أو فئة معينة من الكائنات ؛ قد تحتوي أيضًا على بيانات وإجراءات (تُعرف باسم طرق الفصل) نفسها ، أي تحتوي الفئات على أعضاء البيانات ووظائف الأعضاء
  • كائنات - حالات الطبقات

تتوافق الكائنات أحيانًا مع الأشياء الموجودة في العالم الحقيقي. على سبيل المثال ، قد يحتوي برنامج رسومات على كائنات مثل "دائرة" ، "مربع" ، "قائمة". قد يحتوي نظام التسوق عبر الإنترنت على عناصر مثل "عربة التسوق" و "العميل" و "المنتج". [20] في بعض الأحيان ، تمثل الكائنات كيانات أكثر تجريدًا ، مثل كائن يمثل ملفًا مفتوحًا ، أو كائنًا يوفر خدمة ترجمة القياسات من المعتاد الأمريكي إلى القياس.

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

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

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

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

في بعض اللغات ، يمكن تكوين الفئات والأشياء باستخدام مفاهيم أخرى مثل السمات والخلطات .

المستندة إلى الفئة مقابل النموذج الأولي

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

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

إرسال ديناميكي / تمرير رسالة

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

يُعرف استدعاء الأسلوب أيضًا باسم تمرير الرسائل . يتم تصورها كرسالة (اسم الطريقة ومعلمات الإدخال الخاصة بها) يتم تمريرها إلى الكائن للإرسال.

تجريد البيانات

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

إذا كان الفصل لا يسمح باستدعاء الكود للوصول إلى بيانات الكائن الداخلية ويسمح بالوصول من خلال الطرق فقط ، فهذا شكل من أشكال إخفاء المعلومات المعروف باسم التجريد . تسمح بعض اللغات (Java ، على سبيل المثال) للفئات بفرض قيود الوصول بشكل صريح ، على سبيل المثال الإشارة إلى البيانات الداخلية privateبالكلمة الأساسية وطرق التعيين المخصصة للاستخدام بواسطة الكود خارج الفصل باستخدام publicالكلمة الأساسية. يمكن أيضًا تصميم الطرق بمستويات عامة أو خاصة أو متوسطة مثل protected(والتي تسمح بالوصول من نفس الفئة وفئاتها الفرعية ، ولكن ليس كائنات من فئة مختلفة). في لغات أخرى (مثل Python) يتم فرض هذا فقط عن طريق الاصطلاح (على سبيل المثال ، privateقد يكون للطرق أسماء تبدأ بشرطة سفلية). في لغات C # و Swift & Kotlin ، internalتسمح الكلمات الرئيسية بالوصول فقط إلى الملفات الموجودة في نفس التجميع أو الحزمة أو الوحدة النمطية مثل تلك الخاصة بالفصل الدراسي. [21]

تغليف

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

التكوين والميراث والتفويض

يمكن أن تحتوي الكائنات على كائنات أخرى في متغيرات الحالة الخاصة بهم ؛ يُعرف هذا باسم تكوين الكائن . على سبيل المثال ، قد يحتوي كائن في فئة الموظف (إما بشكل مباشر أو من خلال مؤشر) على كائن في فئة العنوان ، بالإضافة إلى متغيرات المثيل الخاصة به مثل "الاسم_الأول" و "الموضع". يتم استخدام تكوين الكائن لتمثيل علاقات "has-a": كل موظف لديه عنوان ، لذلك كل كائن موظف لديه حق الوصول إلى مكان لتخزين كائن العنوان (إما مضمّن بشكل مباشر داخل نفسه ، أو في موقع منفصل تتم معالجته عبر مؤشر) .

غالبًا ما تدعم اللغات التي تدعم الفصول الميراث. يسمح هذا بترتيب الفئات في تسلسل هرمي يمثل علاقات "نوع من أنواع". على سبيل المثال ، قد يرث موظف الفصل من فئة الشخص. تظهر جميع البيانات والأساليب المتاحة للفصل الأصلي أيضًا في الفصل الفرعي بنفس الأسماء. على سبيل المثال ، قد تحدد الفئة Person المتغيرات "first_name" و "last_name" بالطريقة "make_full_name ()". وستكون هذه متاحة أيضًا في فئة الموظف ، والتي قد تضيف المتغيرين "المنصب" و "الراتب". تسمح هذه التقنية بإعادة استخدام نفس الإجراءات وتعريفات البيانات بسهولة ، بالإضافة إلى إمكانية عكس العلاقات في العالم الحقيقي بطريقة بديهية. بدلاً من استخدام جداول قاعدة البيانات والإجراءات الفرعية للبرمجة ، يستخدم المطور كائنات قد يكون المستخدم أكثر دراية بها: كائنات من مجال التطبيق الخاص بهم. [22]

يمكن أن تتجاوز الفئات الفرعية الطرق التي تحددها الفئات الفائقة. يُسمح بالوراثة المتعددة في بعض اللغات ، على الرغم من أن هذا قد يجعل حل التجاوزات أمرًا معقدًا. تتمتع بعض اللغات بدعم خاص للمزيجات ، على الرغم من أنه في أي لغة ذات وراثة متعددة ، فإن mixin هو ببساطة فئة لا تمثل علاقة من نوع ما. عادةً ما يتم استخدام Mixins لإضافة نفس الطرق إلى فئات متعددة. على سبيل المثال ، قد توفر الفئة UnicodeConversionMixin طريقة unicode_to_ascii () عند تضمينها في فئة FileReader والفئة WebPageScraper ، والتي لا تشترك في أحد الوالدين المشتركين.

لا يمكن إنشاء مثيل لفئات الخلاصة في كائنات ؛ توجد فقط لغرض الوراثة في فئات "ملموسة" أخرى يمكن إنشاء مثيل لها. في Java ، finalيمكن استخدام الكلمة الأساسية لمنع تصنيف فئة فرعية.

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

يدعو مبدأ " مفتوح / مغلق " إلى أن الفئات والوظائف "يجب أن تكون مفتوحة للتمديد ، لكنها مغلقة للتعديل".

التفويض هو ميزة لغة أخرى يمكن استخدامها كبديل للوراثة.

تعدد الأشكال

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

على سبيل المثال ، يتم اشتقاق كائنات من النوع Circle and Square من فئة شائعة تسمى Shape. تقوم وظيفة الرسم لكل نوع من الأشكال بتنفيذ ما هو ضروري لرسم نفسه بينما يمكن أن يظل رمز الاستدعاء غير مبال بنوع معين من الشكل الذي يتم رسمه.

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

فتح العودية

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

لغات OOP

تعتبر Simula (1967) مقبولة عمومًا على أنها اللغة الأولى ذات السمات الأساسية للغة الموجهة للكائنات. تم إنشاؤه لصنع برامج المحاكاة ، حيث كان ما أصبح يسمى الكائنات هو تمثيل المعلومات الأكثر أهمية. Smalltalk (1972 إلى 1980) هو مثال مبكر آخر ، وهو المثال الذي تم من خلاله تطوير الكثير من نظرية OOP. فيما يتعلق بدرجة اتجاه الكائن ، يمكن إجراء الفروق التالية:

OOP باللغات الديناميكية

في السنوات الأخيرة ، أصبحت البرمجة الموجهة للكائنات شائعة بشكل خاص في لغات البرمجة الديناميكية . Python و PowerShell و Ruby و Groovy هي لغات ديناميكية مبنية على مبادئ OOP ، بينما تضيف Perl و PHP ميزات موجهة للكائنات منذ Perl 5 و PHP 4 و ColdFusion منذ الإصدار 6.

يحتوي نموذج كائن المستند لمستندات HTML و XHTML و XML على الإنترنت على ارتباطات بلغة JavaScript / ECMAScript الشائعة . ربما تكون JavaScript هي أشهر لغة برمجة قائمة على النماذج الأولية ، والتي تستخدم الاستنساخ من النماذج الأولية بدلاً من التوريث من فئة (على النقيض من البرمجة القائمة على الفصل ). لغة البرمجة النصية الأخرى التي تتبع هذا النهج هي Lua .

OOP في بروتوكول الشبكة

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

  • الحقول التي تحدد قيم البيانات التي تشكل الرسائل ، مثل طولها ونقطة الرمز وقيم البيانات.
  • كائنات ومجموعات كائنات مشابهة لما يمكن العثور عليه في برنامج Smalltalk للرسائل والمعلمات.
  • مدراء مشابهون لـ IBM i Objects ، مثل دليل للملفات والملفات التي تتكون من بيانات التعريف والسجلات. يوفر المديرون من الناحية المفاهيمية الذاكرة وموارد المعالجة للأشياء الموجودة لديهم.
  • عميل أو خادم يتكون من جميع المديرين اللازمين لتنفيذ بيئة معالجة كاملة ، ودعم جوانب مثل خدمات الدليل والأمن والتحكم في التزامن.

حدد الإصدار الأولي من DDM خدمات الملفات الموزعة. تم تمديده لاحقًا ليكون أساسًا لهندسة قواعد البيانات الارتباطية الموزعة (DRDA).

أنماط التصميم

يتم تناول تحديات التصميم الموجه للكائنات من خلال عدة مناهج. يُعرف الأكثر شيوعًا باسم أنماط التصميم المقننة بواسطة Gamma et al. . على نطاق أوسع ، يمكن استخدام مصطلح " أنماط التصميم " للإشارة إلى أي نمط حل عام وقابل للتكرار لمشكلة شائعة الحدوث في تصميم البرامج. بعض هذه المشاكل التي تحدث بشكل شائع لها آثار وحلول خاصة بالتنمية الموجهة بالكائنات.

الوراثة والتصنيف الفرعي السلوكي

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

عصابة من أربعة أنماط التصميم

أنماط التصميم: عناصر البرمجيات الموجهة للكائنات القابلة لإعادة الاستخدام هو كتاب مؤثر نُشر في عام 1994 من قبل إريك جاما وريتشارد هيلم ورالف جونسون وجون فليسيديس ،وغالبًا ما يشار إليها بشكل فكاهي باسم "عصابة الأربعة". إلى جانب استكشاف إمكانيات ومخاطر البرمجة الشيئية ، يصف 23 مشكلة وأنماط برمجة شائعة لحلها. اعتبارًا من أبريل 2007 ، كان الكتاب في طبعته السادسة والثلاثين.

يصف الكتاب الأنماط التالية:

التوجه الكائن وقواعد البيانات

تعد كل من أنظمة البرمجة الموجهة للكائنات وأنظمة إدارة قواعد البيانات العلائقية (RDBMSs) شائعة للغاية في البرامج اليوم . نظرًا لأن قواعد البيانات العلائقية لا تخزن الكائنات مباشرةً (على الرغم من أن بعض أنظمة RDBMS لها ميزات موجهة للكائنات لتقريب ذلك) ، فهناك حاجة عامة لربط العالمين. تُعرف مشكلة سد عمليات الوصول إلى البرمجة الموجهة للكائنات وأنماط البيانات بقواعد البيانات العلائقية باسم عدم تطابق المعاوقة العلائقية للكائنات . هناك عدد من الأساليب للتعامل مع هذه المشكلة ، ولكن لا يوجد حل عام بدون سلبيات. [24] أحد الأساليب الأكثر شيوعًا هو رسم الخرائط العلائقية للكائنات ، كما هو موجود في لغات IDE مثلVisual FoxPro والمكتبات مثل Java Data Objects و Ruby on Rails 'ActiveRecord.

هناك أيضًا قواعد بيانات كائنات يمكن استخدامها لاستبدال أنظمة RDBMS ، لكنها لم تكن ناجحة تقنيًا وتجاريًا مثل أنظمة RDBMS.

النمذجة والعلاقات في العالم الحقيقي

يمكن استخدام OOP لربط الكائنات والعمليات في العالم الحقيقي بنظرائها الرقميين. ومع ذلك ، لا يتفق الجميع على أن OOP تسهل رسم خرائط العالم الواقعي المباشر (انظر قسم النقد ) أو أن رسم خرائط العالم الحقيقي هو حتى هدف يستحق ؛ يجادل برتراند ماير في كتابه Object-Oriented Software Construction [25] أن البرنامج ليس نموذجًا للعالم ولكنه نموذج لجزء من العالم. "الواقع هو ابن عم مرتين". في الوقت نفسه ، لوحظت بعض القيود الرئيسية لـ OOP. [26] على سبيل المثال ، من الصعب التعامل مع مشكلة الدائرة والقطع الناقص باستخدام مفهوم الوراثة في OOP .

ومع ذلك ، قال نيكلاوس ويرث (الذي روج للقول المأثور المعروف الآن باسم قانون ويرث : "تصبح البرامج أبطأ بسرعة أكبر من سرعة الأجهزة") عن OOP في ورقته البحثية ، "أفكار جيدة من خلال النظرة الزجاجية" ، "يعكس هذا النموذج عن كثب بنية الأنظمة "في العالم الحقيقي" ، وبالتالي فهي مناسبة تمامًا لنمذجة الأنظمة المعقدة ذات السلوكيات المعقدة " [27] (على النقيض من مبدأ KISS ).

لاحظ Steve Yegge وآخرون أن اللغات الطبيعية تفتقر إلى نهج OOP المتمثل في تحديد الأولويات الصارمة للأشياء (الكائنات / الأسماء ) قبل الإجراءات (الأساليب / الأفعال ). [28] قد تتسبب هذه المشكلة في أن OOP تعاني من حلول أكثر تعقيدًا من البرمجة الإجرائية. [29]

OOP والتحكم في التدفق

تم تطوير OOP لزيادة قابلية إعادة الاستخدام والحفاظ على كود المصدر. [30] التمثيل الشفاف لتدفق التحكم ليس له أولوية وكان من المفترض أن يتم التعامل معه بواسطة مترجم. مع تزايد أهمية الأجهزة المتوازية والتشفير متعدد مؤشرات الترابط ، يصبح تطوير تدفق التحكم الشفاف أكثر أهمية ، وهو أمر يصعب تحقيقه باستخدام OOP. [31] [32] [33] [34]

المسؤولية - مقابل التصميم المستند إلى البيانات

يحدد التصميم المدفوع بالمسؤولية الفئات من حيث العقد ، أي أنه يجب تحديد فئة حول المسؤولية والمعلومات التي تشاركها. يتناقض هذا مع Wirfs-Brock و Wilkerson مع التصميم المستند إلى البيانات ، حيث يتم تحديد الفئات حول هياكل البيانات التي يجب الاحتفاظ بها. يعتقد المؤلفون أن التصميم القائم على المسؤولية هو الأفضل.

إرشادات SOLID و GRASP

SOLID هو ذاكري اخترعه مايكل فيذرز والذي يوضح خمسة مبادئ لتصميم هندسة البرمجيات:

GRASP (أنماط برامج تعيين المسؤولية العامة) هي مجموعة أخرى من الإرشادات التي دعا إليها كريج لارمان .

نقد

تم انتقاد نموذج OOP لعدد من الأسباب ، بما في ذلك عدم تلبية أهدافه المعلنة لإعادة الاستخدام والنمطية ، [35] [36] والإفراط في التأكيد على جانب واحد من تصميم البرمجيات والنمذجة (البيانات / الكائنات) على حساب أهمية أخرى الجوانب (الحساب / الخوارزميات). [37] [38]

ادعى لوكا كارديلي أن كود OOP "أقل كفاءة جوهريًا" من الكود الإجرائي ، وأن OOP يمكن أن يستغرق وقتًا أطول في التجميع ، وأن لغات OOP لها "خصائص نمطية سيئة للغاية فيما يتعلق بامتداد الفئة وتعديلها" ، وتميل إلى أن تكون معقدة للغاية . [35] تم التأكيد على النقطة الأخيرة من قبل جو أرمسترونج ، المخترع الرئيسي لإيرلانج ، والذي نقل عنه قوله: [36]

مشكلة اللغات الشيئية هي أنها تمتلك كل هذه البيئة الضمنية التي تحملها معهم. أردت موزة لكن ما حصلت عليه كان غوريلا تمسك الموز وكل الغابة.

دراسة بواسطة Potok et al. لم يظهر أي فرق كبير في الإنتاجية بين OOP والنهج الإجرائية. [39]

صرح كريستوفر جيه ديت أن المقارنة الحاسمة لـ OOP مع التقنيات الأخرى ، خاصة العلائقية ، أمر صعب بسبب عدم وجود تعريف متفق عليه وصارم لـ OOP ؛ [40] ومع ذلك ، اقترح Date و Darwen أساسًا نظريًا على OOP يستخدم OOP كنوع من نظام النوع القابل للتخصيص لدعم RDBMS . [41]

في مقال ادعى لورانس كروبنر أنه بالمقارنة مع اللغات الأخرى (لهجات LISP ، واللغات الوظيفية ، وما إلى ذلك) لا تتمتع لغات OOP بنقاط قوة فريدة ، وتسبب عبئًا ثقيلًا من التعقيد غير الضروري. [42]

يقارن ألكسندر ستيبانوف اتجاه الكائن بشكل غير مواتٍ إلى البرمجة العامة : [37]

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

اقترح بول جراهام أن شعبية OOP داخل الشركات الكبيرة ترجع إلى "مجموعات كبيرة (ومتغيرة باستمرار) من المبرمجين المتوسطين". وفقًا لغراهام ، فإن الانضباط الذي تفرضه OOP يمنع أي مبرمج من "إحداث الكثير من الضرر". [43]

اقترح Leo Brodie وجود صلة بين الطبيعة المستقلة للكائنات والميل إلى تكرار الكود [44] في انتهاك لمبدأ " لا تكرر نفسك " [45] لتطوير البرمجيات.

لاحظ ستيف ييج أنه ، على عكس البرمجة الوظيفية : [46]

البرمجة الشيئية تضع الأسماء أولاً وقبل كل شيء. لماذا تذهب إلى مثل هذه الأطوال لوضع جزء من الكلام على قاعدة التمثال؟ لماذا يجب أن يكون لمفهوم ما الأسبقية على مفهوم آخر؟ ليس الأمر كما لو أن OOP قد جعل الأفعال فجأة أقل أهمية بالطريقة التي نفكر بها بالفعل. إنه منظور منحرف بشكل غريب.

وصف ريتش هيكي ، مبتكر Clojure ، أنظمة الكائنات بأنها نماذج مفرطة في التبسيط للعالم الحقيقي. وشدد على عدم قدرة OOP على نمذجة الوقت بشكل صحيح ، والتي تزداد إشكالية لأن أنظمة البرامج أصبحت أكثر تزامنًا. [38]

رايموند ، مبرمج يونكس ومدافع عن البرمجيات مفتوحة المصدر ، انتقد الادعاءات التي تقدم البرمجة الموجهة للكائنات على أنها "حل حقيقي واحد" ، وقد كتب أن لغات البرمجة الموجهة للكائنات تميل إلى تشجيع البرامج ذات الطبقات الكثيفة التي تدمير الشفافية. [47] يقارن ريموند هذا بشكل سلبي بالنهج المتبع مع يونكس ولغة البرمجة سي . [47]

أطلق Rob Pike ، وهو مبرمج مشارك في إنشاء UTF-8 و Go ، على البرمجة الموجهة للكائنات " الأرقام الرومانية للحوسبة" [48] وقال إن لغات OOP غالبًا ما تحول التركيز من هياكل البيانات والخوارزميات إلى الأنواع . [49] علاوة على ذلك ، يستشهد بمثال لأستاذ جافا كان الحل "الاصطلاحي" لمشكلة ما هو إنشاء ستة فصول جديدة ، بدلاً من مجرد استخدام جدول بحث . [50]

فيما يتعلق بالميراث ، يذكر بوب مارتن أنه نظرًا لكونها برامج ، فإن الفئات ذات الصلة لا تشارك بالضرورة علاقات الأشياء التي تمثلها. [51]

دلالات رسمية

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

كانت هناك عدة محاولات لإضفاء الطابع الرسمي على المفاهيم المستخدمة في البرمجة الشيئية. تم استخدام المفاهيم والبنى التالية كتفسيرات لمفاهيم OOP:

لم تثبت محاولات العثور على تعريف إجماعي أو نظرية وراء الأشياء نجاحًا كبيرًا (على الرغم من ذلك ، انظر Abadi & Cardelli ، A Theory of Objects [53] للحصول على تعريفات رسمية للعديد من مفاهيم وتركيبات OOP) ، وغالبًا ما تتباعد على نطاق واسع. على سبيل المثال ، تركز بعض التعريفات على الأنشطة العقلية ، والبعض الآخر على هيكلة البرنامج. أحد أبسط التعريفات هو أن OOP هو فعل استخدام هياكل أو مصفوفات بيانات "الخريطة" التي يمكن أن تحتوي على وظائف ومؤشرات لخرائط أخرى ، وكل ذلك مع بعض السكر النحوي والنطاق في الأعلى. يمكن إجراء الوراثة عن طريق استنساخ الخرائط (تسمى أحيانًا "النماذج الأولية").

انظر أيضا

أنظمة

لغات النمذجة

المراجع

  1. ^ كيندلر ، إي. Krivy ، I. (2011). "محاكاة كائنية التوجه للأنظمة ذات التحكم المتطور". المجلة الدولية للنظم العامة: 313 - 343. {{cite journal}}: Cite journal requires |journal= (help)
  2. ^ لويس جون. لوفتوس ، وليام (2008). Java Software Solutions أسس تصميم البرمجة الطبعة السادسة . شركة بيرسون التعليمية ISBN 978-0-321-53205-3.، القسم 1.6 "البرمجة الشيئية"
  3. ^ مكارثي ، ياء ؛ برايتون ، ر . إدواردز ، د . فوكس ، ب . هودز ، ل . لوكهام ، د . مالينغ ، ك . بارك ، د . راسل ، س. (مارس 1969). "دليل مبرمجي LISP I" (PDF) . بوسطن ، ماساتشوستس : مجموعة الذكاء الاصطناعي ومركز حساب MIT ومختبر الأبحاث: 88f. مؤرشفة من الأصلي (PDF) في 17 يوليو 2010. في اللغة العامية المحلية لمعهد ماساتشوستس للتكنولوجيا ، يُشار أيضًا إلى قوائم الارتباط [للرموز الذرية] باسم "قوائم الخصائص" ، وأحيانًا تسمى الرموز الذرية "كائنات". {{cite journal}}: Cite journal requires |journal= (help)
  4. ^ مكارثي ، جون ؛ أبراهامز ، بول دبليو. إدواردز ، دانيال ج . هارت ، سوابنيل د. ليفين ، مايكل الأول (1962). دليل LISP 1.5 للمبرمجين . مطبعة معهد ماساتشوستس للتكنولوجيا . ص. 105 . رقم ISBN 978-0-262-13011-0. كائن - مرادف للرمز الذري
  5. ^ أ ب "الدكتور آلان كاي عن معنى" البرمجة الشيئية "2003. تم استرجاعه في 11 فبراير 2010 .
  6. ^ ساذرلاند ، آي إي (30 يناير 1963). "Sketchpad: نظام اتصال رسومي بين الإنسان والآلة" . التقرير الفني رقم 296 ، مختبر لينكولن ، معهد ماساتشوستس للتكنولوجيا عبر مركز المعلومات الفنية للدفاع (stinet.dtic.mil). مؤرشفة من الأصلي في 8 أبريل 2013 . تم الاسترجاع 17 يوليو 2019 .
  7. ^ تطوير لغات سيمولا ، كريستين نيغارد ، أوليه يوهان داهل ، ص 254 Uni-kl.ac.at
  8. ^ روس ، دوج. "أول لغة هندسة برمجيات" . الجدول الزمني لمختبر LCS / AI . معمل MIT لعلوم الحاسب والذكاء الاصطناعي . تم الاسترجاع 13 مايو 2010 .
  9. ^ أ ب هولمفيك ، جان رون (1994). "ترجمة Simula: دراسة تاريخية للنشأة التكنولوجية" (PDF) . حوليات IEEE لتاريخ الحوسبة . 16 (4): 25–37. دوى : 10.1109 / 85.329756 . S2CID 18148999 . مؤرشفة من الأصلي (PDF) في 30 أغسطس 2017 . تم الاسترجاع 3 مارس 2018 .  
  10. ^ أ ب برتراند ماير (2009). لمسة من الرقي: تعلم البرمجة جيدًا باستخدام الكائنات والعقود . Springer Science & Business Media. ص. 329. بيب كود : 2009 tclp.book ..... M. رقم ISBN 978-3-540-92144-8.
  11. ^ كاي ، آلان. "التاريخ المبكر لسمالتالك" . مؤرشفة من الأصلي في 10 يوليو 2008 . تم الاسترجاع 13 سبتمبر 2007 .
  12. ^ 1995 (يونيو) Visual FoxPro 3.0 ، تطورت FoxPro من لغة إجرائية إلى لغة موجهة للكائنات. يقدم Visual FoxPro 3.0 حاوية قاعدة بيانات وإمكانيات سلس للعميل / الخادم ودعم لتقنيات ActiveX وأتمتة OLE ودعم فارغ. ملخص إصدارات فوكس
  13. ^ موقع ويب تاريخ FoxPro: Foxprohistory.org
  14. ^ 1995 دليل المراجعين لبرنامج Visual FoxPro 3.0: DFpug.de
  15. ^ كورانا ، روهيت (1 نوفمبر 2009). البرمجة الشيئية باستخدام C ++ ، 1E . رقم ISBN 978-81-259-2532-3.
  16. ^ ديبورا جيه ارمسترونج. كواركات التنمية الشيئية . دراسة استقصائية لما يقرب من 40 عامًا من أدبيات الحوسبة التي حددت عددًا من المفاهيم الأساسية الموجودة في الغالبية العظمى من تعريفات OOP ، بترتيب تنازلي لشعبية: الوراثة ، الكائن ، الفئة ، التغليف ، الطريقة ، تمرير الرسائل ، تعدد الأشكال ، والتجريد.
  17. ^ جون سي ميتشل ، مفاهيم في لغات البرمجة ، مطبعة جامعة كامبريدج ، 2003 ، ISBN 0-521-78098-5 ، ص 278. القوائم: الإرسال الديناميكي والتجريد وتعدد الأشكال الفرعي والوراثة. 
  18. ^ مايكل لي سكوت ، لغة البرمجة البراغماتية ، الإصدار 2 ، Morgan Kaufmann ، 2006 ، ISBN 0-12-633951-1 ، ص. 470. يسرد التغليف والميراث والإرسال الديناميكي. 
  19. ^ بيرس ، بنيامين (2002). أنواع ولغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. رقم ISBN 978-0-262-16209-8.، القسم 18.1 "ما هي البرمجة الشيئية؟" القوائم: إرسال ديناميكي أو تغليف أو طرق متعددة (إرسال متعدد) أو تعدد الأشكال الفرعية أو الميراث أو التفويض أو التكرار المفتوح ("هذا" / "الذات")
  20. ^ بوخ ، جرادي (1986). هندسة البرمجيات مع Ada . أديسون ويسلي. ص. 220. ردمك 978-0-8053-0608-8. ربما تكون أعظم قوة للنهج الموجه نحو التنمية هي أنه يقدم آلية تلتقط نموذجًا للعالم الحقيقي.
  21. ^ "ما هي البرمجة الشيئية (OOP) بكلمات بسيطة؟ - Software Geek Bytes" . 5 يناير 2023 . تم الاسترجاع 17 يناير 2023 .
  22. ^ جاكوبسن ، إيفار ؛ ماغنوس كريسترسون باتريك جونسون جونار أوفرجارد (1992). هندسة البرمجيات كائنية التوجه . مطبعة أديسون ويسلي إيه سي إم. ص  43 - 69 . رقم ISBN 978-0-201-54435-0.
  23. ^ "لغة برمجة الزمرد" . 26 فبراير 2011.
  24. ^ نيوارد ، تيد (26 يونيو 2006). "فيتنام علوم الكمبيوتر" . إمكانية التشغيل البيني يحدث. مؤرشفة من الأصلي في 4 يوليو 2006 . تم الاسترجاع 2 يونيو 2010 .
  25. ^ ماير ، الطبعة الثانية ، ص. 230
  26. ^ M.Trofimov ، OOOP - الحل الثالث "O": افتح OOP. الدرجة الأولى ، OMG ، 1993 ، المجلد. 3 ، العدد 3 ، ص 14.
  27. ^ ويرث ، نيكلوس (2006). "أفكار جيدة من خلال النظرة الزجاجية" (PDF) . كمبيوتر . 39 (1): 28-39. دوى : 10.1109 / مولودية .2006.20 . S2CID 6582369 . مؤرشفة من الأصلي (PDF) في 12 أكتوبر 2016 . تم الاسترجاع 2 أكتوبر 2016 .  
  28. ^ Yegge ، Steve (30 آذار / مارس 2006). "التنفيذ في مملكة الأسماء" . steve-yegge.blogspot.com . تم الاسترجاع 3 يوليو 2010 .
  29. ^ بورونكزيك ، تيموثي (11 يونيو 2009). "ما الخطأ في OOP" . zaemis.blogspot.com . تم الاسترجاع 3 يوليو 2010 .
  30. ^ أمبلر ، سكوت (1 يناير 1998). "نظرة واقعية على إعادة استخدام الكائنات" . drdobbs.com . تم الاسترجاع 4 يوليو 2010 .
  31. ^ شيلي ، عساف (22 أغسطس 2008). "عيوب النمذجة الكائنية" . شبكة برامج إنتل . تم الاسترجاع 4 يوليو 2010 .
  32. ^ جيمس ، جاستن (1 أكتوبر 2007). "تعدد مؤشرات الترابط هو فعل وليس اسمًا" . techrepublic.com. مؤرشفة من الأصلي في 10 أكتوبر 2007 . تم الاسترجاع 4 يوليو 2010 .
  33. ^ شيلي ، عساف (22 أغسطس 2008). "كيف: البرمجة متعددة النواة (المعالجة المتعددة) إرشادات تصميم فئة C ++ المرئية ، وظائف الأعضاء" . support.microsoft.com . تم الاسترجاع 4 يوليو 2010 .
  34. ^ روبرت هاربر (17 أبريل 2011). "بعض الأفكار حول تعليم FP" . نوع المدونة الوجودية . تم الاسترجاع 5 ديسمبر 2011 .
  35. ^ أ ب كارديلي ، لوكا (1996). "الخصائص الهندسية السيئة للغات الشيئية" . ACM Comput. البقاء على قيد الحياة . 28 (4es): 150-es. دوى : 10.1145 / 242224.242415 . ISSN 0360-0300 . S2CID 12105785 . تم الاسترجاع 21 أبريل 2010 .  
  36. ^ أ ب ارمسترونج ، جو. في المبرمجون في العمل: تأملات في حرفة البرمجة. بيتر سيبل ، أد. Codersatwork.com أرشفة 5 مارس 2010 في آلة Wayback . ، تم الوصول إليه في 13 نوفمبر 2009.
  37. ^ أ ب ستيبانوف ، ألكساندر . "STLport: مقابلة مع أ. ستيبانوف" . تم الاسترجاع 21 أبريل 2010 .
  38. ^ أ ب ريتش هيكي ، JVM Languages ​​Summit 2009 الكلمة الرئيسية ، هل نحن هناك بعد؟ نوفمبر 2009.
  39. ^ بوتوك ، توماس ؛ ملادين فوك آندي ريندوس (1999). "تحليل إنتاجية البرامج الكائنية التي تم تطويرها في بيئة تجارية" (PDF) . البرمجيات: الممارسة والخبرة . 29 (10): 833-847. دوى : 10.1002 / (SICI) 1097-024X (199908) 29:10 <833 :: AID-SPE258> 3.0.CO ؛ 2-P . S2CID 57865731 . تم الاسترجاع 21 أبريل 2010 .  
  40. ^ تاريخ CJ ، مقدمة في أنظمة قواعد البيانات ، الطبعة السادسة ، صفحة 650
  41. ^ تاريخ CJ ، هيو داروين. مؤسسة أنظمة قواعد البيانات المستقبلية: البيان الثالث (الإصدار الثاني)
  42. ^ كروبنر ، لورانس. "البرمجة الشيئية كارثة مكلفة يجب أن تنتهي" . smashcompany.com. مؤرشفة من الأصلي في 14 أكتوبر 2014 . تم الاسترجاع 14 أكتوبر 2014 .
  43. ^ جراهام ، بول . "لماذا لا يكون ARC موجهًا للكائنات بشكل خاص" . PaulGraham.com . تم الاسترجاع 13 نوفمبر 2009 .
  44. ^ برودي ، ليو (1984). التفكير الرابع (PDF) . ص 92-93 . تم الاسترجاع 4 مايو 2018 .
  45. ^ هانت ، أندرو. "لا تكرر نفسك" . فئة البرمجة المتطرفة . تم الاسترجاع 4 مايو 2018 .
  46. ^ "Stevey's Blog Rants: Execution in the Kingdom of Nouns" . تم الاسترجاع 20 مايو 2020 .
  47. ^ أ ب إريك س.ريموند (2003). "فن برمجة يونكس: يونكس ولغات كائنية التوجه" . تم الاسترجاع 6 أغسطس 2014 .
  48. ^ بايك ، روب (2 مارس 2004). "[9 معجبين] رد: خيوط: خياطة شارات الشرف على نواة" . comp.os.plan9 (القائمة البريدية) . تم الاسترجاع 17 نوفمبر 2016 .
  49. ^ بايك ، روب (25 يونيو 2012). "الأقل هو أكثر أضعافا مضاعفة" . تم الاسترجاع 1 أكتوبر 2016 .
  50. ^ بايك ، روب (14 نوفمبر 2012). "قبل بضع سنوات رأيت هذه الصفحة" . مؤرشفة من الأصلي في 14 أغسطس 2018 . تم الاسترجاع 1 أكتوبر 2016 .
  51. ^ "مبادئ العم بوب الصلبة" . يوتيوب .
  52. ^ استطلاع ، إريك. "التصنيف الفرعي والوراثة لأنواع البيانات الفئوية" (PDF) . تم الاسترجاع 5 يونيو 2011 .
  53. ^ أ ب أبادي ، مارتن ؛ كارديلي ، لوكا (1996). نظرية الأشياء . Springer-Verlag New York، Inc. ISBN 978-0-387-94775-4. تم الاسترجاع 21 أبريل 2010 .

قراءات إضافية

روابط خارجية