البرمجة الكائنية التوجه

البرمجة كائنية التوجه ( OOP ) هي نموذج برمجي قائم على الكائنات [ 1 ] - وهي كيانات برمجية تُغلف البيانات والوظائف . يتكون برنامج OOP من كائنات تتفاعل فيما بينها. [ 2 ] [ 3 ] لغة OOP هي لغة توفر خصائص البرمجة كائنية التوجه، ولكن نظرًا لأن مجموعة الخصائص التي تُساهم في OOP محل جدل، فإن تصنيف لغة ما على أنها OOP - ومدى دعمها لـ OOP - أمر قابل للنقاش. ولأن النماذج البرمجية ليست حصرية، يمكن أن تكون اللغة متعددة النماذج (أي تُصنف على أنها أكثر من مجرد OOP).
تشمل اللغات البارزة التي تدعم البرمجة الكائنية 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 ) .
تاريخ
بدأت فكرة "الكائنات" في البرمجة مع مجموعة الذكاء الاصطناعي في معهد ماساتشوستس للتكنولوجيا (MIT) في أواخر الخمسينيات وأوائل الستينيات. في ذلك الوقت، كان مصطلح "الكائن" يشير إلى وحدات LISP ذات خصائص محددة (سمات). [ 5 ] [ 6 ] ومن الأمثلة المبكرة الأخرى برنامج Sketchpad الذي ابتكره إيفان ساذرلاند في معهد ماساتشوستس للتكنولوجيا في الفترة 1960-1961. في مسرد تقريره التقني، عرّف ساذرلاند مصطلحات مثل "الكائن" و"النسخة" (مع تغطية مفهوم الفئة بمصطلح "الرئيسي" أو "التعريف")، وإن كان ذلك مخصصًا للتفاعل الرسومي. [ 7 ] لاحقًا، في عام 1968، ربطت لغة البرمجة ALGOL ، AED-0، وهي نسخة معهد ماساتشوستس للتكنولوجيا ، بين هياكل البيانات ("plexes") والإجراءات، مما مهّد الطريق لما سُمّي لاحقًا "الرسائل" و"الأساليب" و"الدوال الأعضاء". [ 8 ] [ 9 ] كانت مواضيع مثل تجريد البيانات والبرمجة المعيارية من النقاط الشائعة للنقاش في ذلك الوقت.
في غضون ذلك، طُوِّرت لغة سيمولا في النرويج خلال الفترة من 1961 إلى 1967. [ 8 ] وقد أدخلت سيمولا مفاهيم أساسية في البرمجة الكائنية، مثل الأصناف ، والوراثة، والربط الديناميكي . [ 10 ] استُخدمت سيمولا بشكل رئيسي من قِبل الباحثين العاملين في مجال النمذجة الفيزيائية ، مثل حركة السفن ومحتوياتها عبر موانئ الشحن. [ 10 ] وتُعتبر سيمولا عمومًا أول لغة تتمتع بالخصائص والإطار الأساسيين للغة كائنية التوجه. [ 11 ]
لقد فكرت في أن الأشياء تشبه الخلايا البيولوجية و/أو أجهزة الكمبيوتر الفردية على شبكة، ولا يمكنها التواصل إلا من خلال الرسائل (لذا جاءت الرسائل في البداية - استغرق الأمر بعض الوقت لمعرفة كيفية القيام بالرسائل في لغة برمجة بكفاءة كافية لتكون مفيدة).
بدأ آلان كاي، متأثرًا بكلٍ من معهد ماساتشوستس للتكنولوجيا ولغة سيمولا، بتطوير أفكاره الخاصة في نوفمبر 1966. ثم ابتكر لغة سمول توك ، وهي لغة برمجة كائنية التوجه مؤثرة. وبحلول عام 1967، كان كاي يستخدم مصطلح "البرمجة كائنية التوجه" في أحاديثه. [ 1 ] ورغم أنه يُلقب أحيانًا بـ"أبو" البرمجة كائنية التوجه، [ 12 ] فقد صرّح كاي بأن أفكاره تختلف عن المفهوم الشائع للبرمجة كائنية التوجه، وألمح إلى أن الأوساط العلمية في مجال علوم الحاسوب لم تتبنَّ فكرته. [ 1 ] وتشير مذكرة صادرة عن معهد ماساتشوستس للتكنولوجيا عام 1976، شاركت في كتابتها باربرا ليسكوف، إلى لغات سيمولا 67 ، وكلو ، وألفارد كلغات كائنية التوجه، لكنها لا تذكر لغة سمول توك. [ 13 ]
في سبعينيات القرن العشرين، طُوِّرت النسخة الأولى من لغة البرمجة سمول توك في مركز أبحاث زيروكس بارك على يد آلان كاي ، ودان إنجلز، وأديل غولدبرغ . تميزت سمول توك-72 باستخدامها للكائنات على مستوى اللغة وبيئة التطوير الرسومية الخاصة بها. [ 14 ] كانت سمول توك نظامًا ديناميكيًا بالكامل، يسمح للمستخدمين بإنشاء وتعديل الفئات أثناء عملهم. [ 15 ] وقد طُوِّر جزء كبير من نظرية البرمجة الكائنية التوجه في سياق سمول توك، مثل الوراثة المتعددة. [ 16 ]
في أواخر سبعينيات وثمانينيات القرن العشرين، برزت البرمجة الكائنية التوجه (OOP) بشكل ملحوظ. بدأ تطوير لغة Flavors Lisp الكائنية التوجه عام 1979، حيث قدمت مفهومي الوراثة المتعددة والمزج (mixins) . [ 17 ] في أغسطس 1981، سلطت مجلة Byte الضوء على لغة Smalltalk والبرمجة الكائنية التوجه، مقدمةً هذه الأفكار لجمهور واسع. [ 18 ] تأثر نظام الكائنات LOOPS، الخاص بلغة Interlisp -D، بكلمتي Smalltalk وFlavors، ونُشرت ورقة بحثية عنه عام 1982. [ 19 ] في عام 1986، حضر المؤتمر الأول للبرمجة الكائنية التوجه والأنظمة واللغات والتطبيقات ( OOPSLA ) ألف شخص. شكل هذا المؤتمر بداية الجهود المبذولة لتوحيد أنظمة الكائنات في لغة Lisp، والتي أدت في النهاية إلى نظام Common Lisp Object System . في ثمانينيات القرن العشرين، بُذلت بعض المحاولات لتصميم بنى معالجات تتضمن دعمًا ماديًا للكائنات في الذاكرة ، لكنها لم تُكلل بالنجاح. تتضمن الأمثلة Intel iAPX 432 و Linn Smart Rekursiv .
في منتصف ثمانينيات القرن العشرين، ظهرت لغات برمجة كائنية التوجه جديدة مثل أوبجكتيف-سي ، وسي++ ، ولغة إيفل . طُوِّرت أوبجكتيف-سي على يد براد كوكس ، الذي كان يستخدم لغة سمول توك في شركة آي تي تي. أما بيارن ستروستروب، فقد ابتكر لغة سي++ استنادًا إلى خبرته في استخدام لغة سيمولا في أطروحته للدكتوراه. [ 14 ] وفي عام 1985، وضع برتراند ماير التصميم الأول للغة إيفل، والذي ركز على جودة البرمجيات باستخدام منهجية التصميم التعاقدي . [ 20 ]
في تسعينيات القرن الماضي، أصبحت البرمجة الكائنية التوجه (OOP) الأسلوب الرئيسي للبرمجة، لا سيما مع ازدياد عدد اللغات التي تدعمها. ومن بين هذه اللغات: فيجوال فوكس برو 3.0، [ 21 ] [ 22 ] وسي++ ، [ 23 ] ودلفي . وازدادت شعبية البرمجة الكائنية التوجه مع ظهور واجهات المستخدم الرسومية ، التي استخدمت الكائنات للأزرار والقوائم وغيرها من العناصر. ومن الأمثلة المعروفة على ذلك إطار عمل كوكوا من آبل ، المستخدم في نظام ماك أو إس والمكتوب بلغة أوبجكتيف-سي . كما ساهمت أدوات البرمجة الكائنية التوجه في تعزيز شعبية البرمجة الموجهة بالأحداث .
في المعهد الفدرالي السويسري للتكنولوجيا في زيورخ ، ابتكر نيكلاوس ويرث وزملاؤه مناهج جديدة للبرمجة الكائنية التوجه. تضمنت منهجيتا Modula-2 (1978) و Oberon (1987) نهجًا مميزًا للبرمجة الكائنية التوجه، والفئات، والتحقق من الأنواع عبر حدود الوحدات. لا يُعدّ مفهوم الوراثة واضحًا في تصميم ويرث، إذ أن مصطلحاته تُشير إلى الاتجاه المعاكس: يُطلق عليه اسم "امتداد النوع"، وتكون وجهة النظر من الأصل إلى الوارث.
تم تعزيز العديد من لغات البرمجة التي تم تطويرها في البداية قبل أن تصبح البرمجة الكائنية شائعة بميزات كائنية التوجه، بما في ذلك Ada و BASIC و Fortran و Pascal و COBOL .
سمات
تختلف خصائص البرمجة الكائنية التي توفرها لغات البرمجة. فيما يلي بعض الخصائص الشائعة للغات البرمجة الكائنية. [ 24 ] [ 25 ] [ 26 ] [ 27 ] يصعب مقارنة البرمجة الكائنية بأنماط أخرى، مثل البرمجة العلائقية ، لعدم وجود تعريف واضح ومتفق عليه للبرمجة الكائنية. [ 28 ]
التغليف وإخفاء المعلومات
يمكن أن يشير إخفاء المعلومات وتغليفها إلى عدة مفاهيم ذات صلة:
- التماسك ، أي الحفاظ على الحقول والأساليب ذات الصلة معًا. يحتوي الحقل (أو السمة أو الخاصية) على معلومات (أو حالة) كمتغير . يحدد الأسلوب (أو الدالة أو الإجراء) السلوك من خلال التعليمات البرمجية المنطقية.
- الفصل ، وهو تنظيم الكود بحيث تستخدم الدوال ذات الصلة أجزاءً محددة فقط من البيانات. يُسهّل الفصل تغيير طريقة عمل الكائن داخليًا دون التأثير على أجزاء أخرى من قاعدة الكود ، كما هو الحال في إعادة هيكلة الكود . [ 29 ] تعمل الكائنات كحاجز بين عملياتها الداخلية والكود الخارجي المُستهلك لها.
- إخفاء البيانات ، أي إبقاء التفاصيل الداخلية للكائن مخفية عن التعليمات البرمجية الخارجية. لا يمكن للتعليمات البرمجية المستهلكة التفاعل مع الكائن إلا عبر أعضائه العامة، وذلك لأن اللغة توفر مُعدِّلات وصول تتحكم في مستوى الرؤية.
تُتيح بعض لغات البرمجة، مثل جافا، إمكانية إخفاء المعلومات باستخدام كلمات مفتاحية للتحكم في مستوى الوصول ( مثل `private` privateو` private` public). [ 30 ] بينما لا تُتيح لغات أخرى، مثل بايثون، هذه الميزة، إلا أن المطورين قد يتبعون اصطلاحًا معينًا، كبدء اسم العضو الخاص بشرطة سفلية. كما توجد مستويات وسيطة للوصول، مثل protectedالكلمة المفتاحية `private` في جافا (التي تسمح بالوصول من نفس الفئة وفئاتها الفرعية، ولكن ليس من كائنات فئة مختلفة)، والكلمة internalالمفتاحية `private` في لغات سي شارب وسويفت وكوتلن، التي تُقيّد الوصول إلى الملفات داخل نفس الوحدة. [ 31 ]
يقول مؤيدو إخفاء المعلومات وتجريد البيانات إن ذلك يُسهّل إعادة استخدام الشيفرة البرمجية ويُجسّد مواقف العالم الحقيقي بشكلٍ بديهي. [ 32 ] [ 33 ] مع ذلك، يرى آخرون أن البرمجة الكائنية التوجه لا تُحسّن من سهولة قراءة الشيفرة أو نمطيتها. [ 34 ] [ 35 ] وقد كتب إريك س. ريموند أن لغات البرمجة الكائنية التوجه تميل إلى تشجيع البرامج ذات الطبقات السميكة التي تُفقدها الشفافية. [ 36 ] ويُقارن ريموند هذا الأمر سلبًا بالنهج المُتبع مع نظام يونكس ولغة سي . [ 36 ]
تتضمن مبادئ SOLID مبدأ الانفتاح/الإغلاق ، الذي ينص على أن تكون الفئات والدوال "مفتوحة للتوسيع، ولكن مغلقة للتعديل". وقد صرّح لوكا كارديلي بأن لغات البرمجة الكائنية التوجه (OOP) تتميز "بخصائص نمطية ضعيفة للغاية فيما يتعلق بتوسيع الفئات وتعديلها"، وتميل إلى أن تكون معقدة للغاية. [ 34 ] وقد أكد جو أرمسترونغ ، المخترع الرئيسي للغة إرلانج ، هذه النقطة الأخيرة، حيث نُقل عنه قوله: [ 35 ]
تكمن مشكلة لغات البرمجة الكائنية في أنها تحمل معها بيئة ضمنية ضخمة. تخيل أنك تريد موزة، لكنك حصلت على غوريلا تحمل الموزة والغابة بأكملها.
يقول ليو برودي إن إخفاء المعلومات قد يؤدي إلى تكرار التعليمات البرمجية ، [ 37 ] وهو ما يتعارض مع قاعدة عدم تكرار نفسك في تطوير البرمجيات. [ 38 ]
الميراث
يمكن دعم الوراثة من خلال الفئة أو النموذج الأولي ، والتي تختلف عن بعضها ولكنها تستخدم مصطلحات متشابهة مثل الكائن والمثيل .
قائم على الفصول الدراسية
في البرمجة القائمة على الأصناف ، وهي النوع الأكثر شيوعًا من البرمجة الكائنية التوجه، يُعد الكائن نسخةً من صنف. يُعرّف الصنف البيانات (المتغيرات) والأساليب (المنطق). يُنشأ الكائن عبر الدالة البانية . لكل نسخة من الصنف نفس مجموعة المتغيرات والأساليب. قد تتضمن العناصر ما يلي:
- متغير الفئة – ينتمي إلى الفئة نفسها؛ جميع كائنات الفئة تشترك في نسخة واحدة
- متغير النسخة – ينتمي إلى كائن؛ كل كائن لديه نسخته الخاصة من هذه المتغيرات
- متغير العضو - يشير إلى كل من متغيرات الفئة ومتغيرات النسخة الخاصة بالفئة
- طريقة الفئة - لا يمكن استخدام سوى متغيرات الفئة
- طريقة الكائن - تنتمي إلى كائن؛ ويمكنها استخدام متغيرات الكائن ومتغيرات الفئة.
قد ترث الفئات من فئات أخرى، مما يُنشئ تسلسلًا هرميًا للفئات: حالة ترث فيها فئة فرعية من فئة أصلية. على سبيل المثال، Employeeقد ترث فئة من Personفئة أخرى تُزوّد كائن الموظف (Employee) بالمتغيرات من Personالفئة الأصلية. يمكن للفئة الفرعية إضافة متغيرات وأساليب لا تؤثر على الفئة الأصلية. تسمح معظم لغات البرمجة أيضًا للفئة الفرعية بتجاوز أساليب الفئة الأصلية. تدعم بعض اللغات الوراثة المتعددة ، حيث يمكن للفئة أن ترث من أكثر من فئة، وتدعم لغات أخرى بالمثل المزيجات أو السمات . على سبيل المثال، قد يُضيف مزيج يُسمى UnicodeConversionMixin الأسلوب unicode_to_ascii() إلى كل من فئة قارئ الملفات (FileReader) وفئة كاسر صفحات الويب (WebPageScraper).
لا يمكن إنشاء كائن من فئة مجردة بشكل مباشر. فهي تُستخدم فقط كفئة أساسية.
أما الفئات الأخرى فهي فئات مساعدة تحتوي فقط على متغيرات وأساليب خاصة بالفئة، ولا يُقصد بها أن يتم إنشاء مثيلات منها أو اشتقاق فئات فرعية منها. [ 39 ]
نموذج أولي
بدلاً من تقديم مفهوم الفئة، في البرمجة القائمة على النماذج الأولية ، يرتبط الكائن بكائن آخر يُسمى نموذجه الأولي أو أصله . في لغة Self، قد يكون للكائن عدة أصول أو لا أصول على الإطلاق، [ 40 ] ولكن في لغة جافا سكريبت ، وهي اللغة الأكثر شيوعًا في البرمجة القائمة على النماذج الأولية، يكون للكائن رابط نموذج أولي واحد فقط، يصل إلى الكائن الأساسي الذي يكون نموذجه الأولي فارغًا (null).
يعمل النموذج الأولي كنموذج للكائنات الجديدة. على سبيل المثال، إذا كان لديك كائن fruit، يمكنك إنشاء كائنين آخرين appleيشتركان orangeفي سمات fruitالنموذج الأولي. كما تسمح اللغات القائمة على النماذج الأولية للكائنات بامتلاك خصائصها الفريدة، لذا appleقد يمتلك الكائن سمة معينة sugar_content، بينما لا يمتلكها الكائنان orangeالآخران .fruit
لا يوجد ميراث
في جميع لغات البرمجة الكائنية، يمكن للكائن الواحد أن يحتوي على كائنات أخرى عبر خاصية تركيب الكائناتEmployee . على سبيل المثال، قد يحتوي كائن ما على Addressكائن آخر، بالإضافة إلى معلومات أخرى مثل العنوان nameوالعنوان position. التركيب هو علاقة "يحتوي على"، مثل "للموظف عنوان". بعض اللغات، مثل Go ، لا تدعم الوراثة. [ 41 ] بدلاً من ذلك، تشجع هذه اللغات " التركيب بدلاً من الوراثة "، حيث تُبنى الكائنات باستخدام أجزاء أصغر بدلاً من علاقات الأصل والفرع. على سبيل المثال، بدلاً من الوراثة من فئة Person، يمكن لفئة Employee أن تحتوي ببساطة على كائن Person. يتيح هذا لفئة Employee التحكم في مقدار معلومات Person التي تعرضها لأجزاء أخرى من البرنامج. التفويض ميزة لغوية أخرى يمكن استخدامها كبديل للوراثة.
تختلف آراء المبرمجين حول الوراثة. فقد صرّح بيارن ستروستروب، مؤلف لغة C++، بأنه من الممكن برمجة الكائنات دون استخدام الوراثة. [ 42 ] بينما انتقد روب بايك الوراثة لإنشائها هياكل معقدة بدلاً من حلول أبسط. [ 43 ]
الوراثة والتصنيف الفرعي السلوكي
يعتقد الكثيرون خطأً أن وراثة فئة ما من فئة أخرى تعني أن الفئة الفرعية هي نسخة أكثر تحديدًا من الفئة الأصلية. ويفترض هذا أن دلالات البرنامج تسمح دائمًا باستبدال كائنات الفئة الأصلية بكائنات من الفئة الفرعية دون أي مشاكل. يُعرف هذا المفهوم باسم التنميط الفرعي السلوكي ، وتحديدًا مبدأ استبدال ليسكوف .
مع ذلك، غالبًا ما يكون هذا غير صحيح، خاصةً في لغات البرمجة التي تسمح بالكائنات القابلة للتغيير ، أي الكائنات التي تتغير بعد إنشائها. في الواقع، لا يضمن تعدد الأشكال الفرعية، كما يفرضه مدقق الأنواع في لغات البرمجة الكائنية، التنميط الفرعي السلوكي في معظم السياقات، إن لم يكن جميعها. على سبيل المثال، تُعدّ مشكلة الدائرة والقطع الناقص من أصعب المشاكل التي يمكن حلها باستخدام مفهوم الوراثة في البرمجة الكائنية. التنميط الفرعي السلوكي غير قابل للتقرير بشكل عام، لذا لا يمكن تنفيذه بسهولة بواسطة المترجم. لهذا السبب، يجب على المبرمجين تصميم تسلسلات الفئات بعناية لتجنب الأخطاء التي لا تستطيع لغة البرمجة نفسها اكتشافها.
الإرسال الديناميكي
يمكن استدعاء دالة عبر الإرسال الديناميكي، بحيث يتم اختيارها أثناء التشغيل بدلاً من وقت الترجمة. إذا كان اختيار الدالة يعتمد على أكثر من نوع واحد من الكائنات (مثل الكائنات الأخرى التي يتم تمريرها كمعاملات)، يُسمى ذلك الإرسال المتعدد . في هذا السياق، يُعرف استدعاء الدالة أيضًا بتمرير الرسائل ، أي أن اسم الدالة ومدخلاتها بمثابة رسالة تُرسل إلى الكائن ليقوم بمعالجتها. [ 44 ]
يعمل الإرسال الديناميكي جنبًا إلى جنب مع الوراثة: إذا لم يكن لدى الكائن الطريقة المطلوبة، فإنه يبحث في فئته الأصلية ( التفويض )، ويستمر في الصعود في السلسلة للعثور على طريقة مطابقة.
تعدد الأشكال
يشير مصطلح تعدد الأشكال في البرمجة الكائنية التوجه إلى التنميط الفرعي أو تعدد الأشكال من النوع الفرعي، حيث يمكن للدالة أن تعمل مع واجهة محددة ، وبالتالي معالجة كيانات من فئات مختلفة بطريقة موحدة. [ 45 ]
على سبيل المثال، تخيل برنامجًا يحتوي على شكلين: دائرة ومربع. كلاهما ينتميان إلى فئة مشتركة تُسمى "الشكل". لكل شكل طريقة رسم خاصة به. مع تعدد الأشكال الفرعية، لا يحتاج البرنامج إلى معرفة نوع كل شكل، ويمكنه ببساطة استدعاء دالة "الرسم" لكل شكل. سيضمن وقت تشغيل لغة البرمجة تشغيل الإصدار الصحيح من دالة "الرسم" لكل شكل. ولأن تفاصيل كل شكل تُعالج داخل فئته الخاصة، فإن هذا يجعل الكود أبسط وأكثر تنظيمًا، مما يُتيح فصلًا قويًا للمهام .
التكرار المفتوح
يمكن لأساليب الكائن الوصول إلى بياناته. تستخدم العديد من لغات البرمجة كلمة خاصة، مثل `<اسم_الكائن>` thisأو `<اسم_الكائن self>`، للإشارة إلى الكائن الحالي. في اللغات التي تدعم الاستدعاء الذاتي المفتوح ، يمكن لأسلوب في كائن ما استدعاء أساليب أخرى في نفس الكائن، بما في ذلك الكائن نفسه، باستخدام هذه الكلمة الخاصة. يسمح هذا لأسلوب في فئة ما باستدعاء أسلوب آخر مُعرَّف لاحقًا في فئة فرعية، وهي ميزة تُعرف بالربط المتأخر .
أنماط التصميم
تُعدّ أنماط التصميم حلولاً شائعة لمشاكل تصميم البرمجيات. بعض أنماط التصميم مفيدة بشكل خاص للبرمجة الكائنية التوجه، وعادةً ما تُقدّم أنماط التصميم في سياق البرمجة الكائنية التوجه.
النمذجة والعلاقات في العالم الحقيقي
أحيانًا، تُمثّل الكائنات الأشياء والعمليات الواقعية في شكل رقمي. [ 46 ] على سبيل المثال، قد يحتوي برنامج رسومات على كائنات مثل circleو squareو و menu. وقد يحتوي نظام تسوق إلكتروني على كائنات مثل shopping cartو customerو و product. قال نيكلاوس ويرث : "يعكس هذا النموذج [البرمجة الكائنية] بنية الأنظمة في العالم الحقيقي بدقة، ولذلك فهو مناسب تمامًا لنمذجة الأنظمة المعقدة ذات السلوك المعقد". [ 47 ]
مع ذلك، في أغلب الأحيان، تمثل الكائنات كيانات مجردة، مثل ملف مفتوح أو محول وحدات. لا يتفق الجميع على أن البرمجة الكائنية التوجه تُسهّل نسخ العالم الحقيقي بدقة، أو حتى على ضرورة ذلك. يشير بوب مارتن إلى أنه نظرًا لأن الفئات عبارة عن برامج، فإن علاقاتها لا تتطابق مع علاقات العالم الحقيقي التي تمثلها. [ 48 ] يجادل برتراند ماير بأن البرنامج ليس نموذجًا للعالم، بل نموذجًا لجزء منه؛ "الواقع قريب بعيد". [ 49 ] لاحظ ستيف ييغي أن اللغات الطبيعية تفتقر إلى منهج البرمجة الكائنية التوجه المتمثل في تسمية الشيء (الكائن) قبل الفعل (الطريقة)، على عكس البرمجة الوظيفية التي تفعل العكس. [ 50 ] قد يجعل هذا حل البرمجة الكائنية التوجه أكثر تعقيدًا من الحل المكتوب باستخدام البرمجة الإجرائية . [ 51 ]
أنماط الكائنات
فيما يلي أنماط تصميم برمجية بارزة لكائنات البرمجة الكائنية التوجه. [ 52 ]
- كائن الدالة : فئة تحتوي على طريقة رئيسية واحدة تعمل كدالة مجهولة (في لغة C++، عامل الدالة
operator()) . - الكائن غير القابل للتغيير : لا تتغير حالته بعد إنشائه
- كائن من الدرجة الأولى : يمكن استخدامه دون قيود
- كائن الحاوية : يحتوي على كائنات أخرى
- كائن المصنع : يقوم بإنشاء كائنات أخرى
- الكائن الفوقي : يُستخدم لإنشاء كائنات أخرى (مشابهة للفئة ، ولكنها كائن)
- كائن النموذج الأولي : كائن وصفي متخصص يقوم بإنشاء كائنات جديدة عن طريق نسخ نفسه
- الكائن الأحادي : هو النسخة الوحيدة من فئته طوال فترة تشغيل البرنامج
- كائن التصفية : يستقبل دفقًا من البيانات كمدخل له ويحوله إلى مخرج الكائن
من الأنماط المضادة الشائعة هو الكائن الإلهي ، وهو كائن يعرف أو يفعل الكثير.
أنماط تصميم عصابة الأربعة
كتاب "أنماط التصميم: عناصر البرمجيات القابلة لإعادة الاستخدام والموجهة للكائنات" هو كتاب شهير نُشر عام ١٩٩٤ من تأليف أربعة مؤلفين: إريك غاما ، وريتشارد هيلم ، ورالف جونسون ، وجون فليسيدس . ويُطلق عليهم غالبًا اسم "عصابة الأربعة". يتناول الكتاب نقاط القوة والضعف في البرمجة الموجهة للكائنات، ويشرح ٢٣ طريقة شائعة لحل مشاكل البرمجة.
تُصنف هذه الحلول، التي تُسمى "أنماط التصميم"، إلى ثلاثة أنواع:
- أنماط الإنشاء (5): نمط طريقة المصنع ، نمط المصنع المجرد ، نمط المفرد ، نمط البناء ، نمط النموذج الأولي
- الأنماط الهيكلية (7): نمط المحول ، نمط الجسر ، النمط المركب ، نمط الزخرفة ، نمط الواجهة ، نمط الوزن الخفيف ، نمط الوكيل
- أنماط السلوك (11): نمط سلسلة المسؤولية ، نمط الأمر ، نمط المفسر ، نمط المكرر ، نمط الوسيط ، نمط التذكير ، نمط المراقب ، نمط الحالة ، نمط الاستراتيجية ، نمط أسلوب القالب ، نمط الزائر
البرمجة الكائنية وقواعد البيانات
تُستخدم كل من البرمجة الكائنية وأنظمة إدارة قواعد البيانات العلائقية على نطاق واسع في البرمجيات اليوم. مع ذلك، لا تخزن قواعد البيانات العلائقية الكائنات مباشرةً، مما يُشكل تحديًا عند استخدامها معًا. تُعرف هذه المشكلة باسم عدم توافق المعاوقة بين الكائنات والعلاقات .
لحل هذه المشكلة، يستخدم المطورون طرقًا مختلفة، لكن لا يوجد حل مثالي. [ 53 ] أحد الحلول الأكثر شيوعًا هو ربط الكائنات العلائقية (ORM)، الذي يساعد على ربط البرامج الموجهة للكائنات بقواعد البيانات العلائقية. من أمثلة أدوات ORM: Visual FoxPro و Java Data Objects و Ruby on Rails ActiveRecord.
بعض قواعد البيانات، التي تسمى قواعد بيانات الكائنات ، مصممة للعمل مع البرمجة الكائنية التوجه. ومع ذلك، لم تحظَ بشعبية أو نجاح قواعد البيانات العلائقية.
اقترح ديت وداروين أساسًا نظريًا يستخدم البرمجة الكائنية كنوع من نظام الأنواع القابل للتخصيص لدعم أنظمة إدارة قواعد البيانات العلائقية، ولكنه يمنع الكائنات التي تحتوي على مؤشرات إلى كائنات أخرى. [ 54 ]
التصميم القائم على المسؤولية مقابل التصميم القائم على البيانات
في التصميم القائم على المسؤولية ، تُبنى الفئات البرمجية بناءً على وظائفها والمعلومات التي تتشاركها، وذلك في شكل عقد. ويختلف هذا عن التصميم القائم على البيانات ، حيث تُبنى الفئات البرمجية بناءً على البيانات التي تحتاج إلى تخزينها. ووفقًا لـ Wirfs-Brock و Wilkerson، مؤسسي التصميم القائم على المسؤولية، فإن هذا النهج هو الأفضل. [ 55 ]
إرشادات SOLID و GRASP
SOLID هي مجموعة من خمس قواعد لتصميم برامج جيدة، وضعها مايكل فيذرز:
- مبدأ المسؤولية الواحدة : يجب أن يكون لدى الفصل سبب واحد فقط للتغيير.
- مبدأ الانفتاح/الانغلاق : يجب أن تكون كيانات البرمجيات مفتوحة للتوسيع، ولكنها مغلقة للتعديل.
- مبدأ استبدال ليسكوف : يجب أن تكون الدوال التي تستخدم المؤشرات أو المراجع إلى الفئات الأساسية قادرة على استخدام كائنات الفئات المشتقة دون أن تعرف ذلك.
- مبدأ فصل الواجهات : لا ينبغي إجبار العملاء على الاعتماد على واجهات لا يستخدمونها.
- مبدأ عكس التبعية : الاعتماد على المفاهيم المجردة، وليس على المفاهيم الملموسة.
GRASP (أنماط البرمجيات العامة لتعيين المسؤولية) هي مجموعة أخرى من قواعد تصميم البرمجيات، أنشأها كريج لارمان ، والتي تساعد المطورين على تعيين المسؤوليات لأجزاء مختلفة من البرنامج: [ 56 ]
- مبدأ المُنشئ: يسمح للفئات بإنشاء كائنات تستخدمها بشكل وثيق.
- مبدأ خبير المعلومات: يقوم بتعيين المهام للفئات التي تمتلك المعلومات المطلوبة.
- مبدأ الاقتران المنخفض: يقلل من تبعيات الفئات لتحسين المرونة وسهولة الصيانة.
- مبدأ التماسك العالي: تصميم فصول دراسية ذات مسؤولية واحدة ومركزة.
- مبدأ التحكم: يقوم بتعيين عمليات النظام إلى فئات منفصلة تدير التدفق والتفاعلات.
- تعدد الأشكال: يسمح باستخدام فئات مختلفة من خلال واجهة مشتركة، مما يعزز المرونة وإعادة الاستخدام.
- مبدأ التصنيع الخالص: إنشاء فئات مساعدة لتحسين التصميم، وتعزيز التماسك، وتقليل الترابط.
الدلالات الرسمية
حاول الباحثون تعريف دلالات البرمجة الكائنية التوجه تعريفًا رسميًا. يُشكّل التوريث تحديًا، لا سيما فيما يتعلق بالتفاعلات بين الاستدعاء الذاتي المفتوح والحالة المُغلّفة. استخدم الباحثون أنواعًا استدعائية وأنواع بيانات جبرية مشتركة لدمج السمات الأساسية للبرمجة الكائنية التوجه. [ 57 ] عرّف عبادي وكارديلي العديد من امتدادات النظام F <: التي تتعامل مع الكائنات القابلة للتغيير، مما يسمح بتعدد أشكال الأنواع الفرعية وتعدد الأشكال البارامتري (الأنواع العامة)، وتمكّنا من نمذجة العديد من مفاهيم وبنى البرمجة الكائنية التوجه تعريفًا رسميًا. [ 58 ] على الرغم من أن التحليل الثابت للغات البرمجة الكائنية التوجه مثل جافا ليس بالأمر البسيط، إلا أنه مجال ناضج، [ 59 ] مع وجود العديد من الأدوات التجارية. [ 60 ]
الشعبية والاستقبال

تستخدم العديد من لغات البرمجة الشائعة، مثل C++ وجافا وبايثون، البرمجة الكائنية التوجه. في الماضي، كانت البرمجة الكائنية التوجه مقبولة على نطاق واسع، [ 61 ] ولكن في الآونة الأخيرة، انتقدها بعض المبرمجين وفضلوا البرمجة الوظيفية بدلاً منها. [ 62 ] وجدت دراسة أجراها بوتوك وآخرون أنه لا يوجد فرق كبير في الإنتاجية بين البرمجة الكائنية التوجه والبرمجة الإجرائية. [ 63 ]
يعتقد البعض أن البرمجة الكائنية التوجه (OOP) تركز بشكل مفرط على استخدام الكائنات بدلاً من الخوارزميات وهياكل البيانات . [ 64 ] [ 65 ] على سبيل المثال، أشار المبرمج روب بايك إلى أن البرمجة الكائنية التوجه قد تجعل المبرمجين يفكرون في التسلسل الهرمي للأنواع أكثر من التركيب. [ 66 ] وقد وصفها بأنها " الأرقام الرومانية للحوسبة". [ 67 ] ووصف ريتش هيكي ، مبتكر لغة كلوجر ، البرمجة الكائنية التوجه بأنها مبسطة للغاية، خاصة عندما يتعلق الأمر بتمثيل الأشياء الواقعية التي تتغير بمرور الوقت. [ 65 ] وقال ألكسندر ستيبانوف إن البرمجة الكائنية التوجه تحاول حصر كل شيء في نوع واحد، وهو ما قد يكون مقيدًا. وجادل بأننا نحتاج أحيانًا إلى جبر متعدد الأنواع: عائلات من الواجهات التي تشمل أنواعًا متعددة، كما هو الحال في البرمجة العامة . وقال ستيبانوف أيضًا إن تسمية كل شيء "كائنًا" لا يضيف الكثير من الفهم. [ 64 ]
تم ابتكار البرمجة الكائنية التوجه (OOP) لتسهيل إعادة استخدام التعليمات البرمجية وصيانتها . [ 68 ] مع ذلك، لم تُصمم هذه البرمجة لعرض مسار تعليمات البرنامج بوضوح، بل تُرك ذلك للمُترجم. ومع ازدياد استخدام الحواسيب للمعالجة المتوازية والخيوط المتعددة ، ازدادت أهمية فهم كيفية تدفق التعليمات والتحكم بها، وهو أمر يصعب تحقيقه باستخدام البرمجة الكائنية التوجه. [ 69 ] [ 70 ] [ 71 ] [ 72 ]
يعتقد بول غراهام أن الشركات الكبرى تُفضل البرمجة الكائنية التوجه (OOP) لأنها تُساعد في إدارة فرق كبيرة من المبرمجين ذوي الخبرة المتوسطة. ويُجادل بأن البرمجة الكائنية التوجه تُضيف بنيةً، مما يُقلل من احتمالية ارتكاب أخطاء جسيمة من قِبل شخص واحد، ولكنها في الوقت نفسه تُقيّد المبرمجين الأذكياء. [ 73 ] بينما يُجادل إريك س. ريموند ، مُبرمج أنظمة يونكس ومُدافع عن البرمجيات مفتوحة المصدر ، بأن البرمجة الكائنية التوجه ليست أفضل طريقة لكتابة البرامج. [ 36 ]
يقول ريتشارد فيلدمان إنه على الرغم من أن خصائص البرمجة الكائنية التوجه ساعدت بعض اللغات على الحفاظ على تنظيمها، إلا أن شعبيتها تنبع من أسباب أخرى. [ 74 ] ويجادل لورانس كروبنر بأن البرمجة الكائنية التوجه لا تقدم مزايا خاصة مقارنة بالأنماط الأخرى، مثل البرمجة الوظيفية، بل قد تُعقّد عملية كتابة الكود. [ 75 ] ويقول لوكا كارديلي إن البرمجة الكائنية التوجه أبطأ وتستغرق وقتًا أطول في الترجمة من البرمجة الإجرائية. [ 34 ]
انظر أيضاً
- كاديس
- بنية وسيط طلب الكائنات المشتركة (CORBA)
- مقارنة لغات البرمجة (البرمجة الكائنية التوجه)
- هندسة البرمجيات القائمة على المكونات
- كائن موزع
- نموذج كائن المكون الموزع
- لغة وصف الواجهة
- IDEF4
- جيرو
- قائمة لغات البرمجة الكائنية التوجه
- ربط الكائنات
- التحليل والتصميم الموجه للكائنات
- النمذجة الموجهة للكائنات
- علم الوجود الموجه نحو الكائنات
- لغة النمذجة الموحدة (UML)
مراجع
- 1 2 3 4 كاي، د. آلان (23 يوليو 2003). "د. آلان كاي يتحدث عن معنى "البرمجة الكائنية التوجه"تمت أرشفة هذا النص من المصدر الأصلي في 4 مارس 2025. تم الاطلاع عليه في 11 فبراير 2010 .
- ↑ كيندلر، إي.؛ كريفي، آي. (2011). "محاكاة الأنظمة ذات التحكم المتطور باستخدام البرمجة الكائنية". المجلة الدولية للأنظمة العامة . 40 (3): 313-343 . doi : 10.1080/03081079.2010.539975 .
- ↑ لويس، جون؛ لوفوس، ويليام (2008). "1.6: البرمجة كائنية التوجه". حلول برمجيات جافا . أسس تصميم البرمجة ( الطبعة السادسة). بيرسون للتعليم. ISBN 978-0-321-53205-3.
- ↑ بلوخ 2018 ، الصفحات 11-12، مقدمة.
- ↑ مكارثي، ج .؛ برايتون، ر.؛ إدواردز، د.؛ فوكس، ب .؛ هودز، ل .؛ لوكهام، د .؛ مالينغ، ك.؛ بارك، د .؛ راسل، س. (مارس 1969). "دليل مبرمجي لغة ليسب 1" (ملف PDF) . مركز الحوسبة ومختبر أبحاث الإلكترونيات . بوسطن ، ماساتشوستس : مجموعة الذكاء الاصطناعي، مركز الحوسبة ومختبر الأبحاث التابع لمعهد ماساتشوستس للتكنولوجيا: 88 وما يليها. مؤرشف من النسخة الأصلية (ملف PDF) في 17 يوليو 2010.
في لغة معهد ماساتشوستس للتكنولوجيا المحلية، تُعرف قوائم الارتباط [للرموز الذرية] أيضًا باسم "قوائم الخصائص"، وتُسمى الرموز الذرية أحيانًا "كائنات".
- ↑ مكارثي، جون ؛ أبراهامز، بول دبليو؛ إدواردز، دانيال جيه؛ هارت، سوابنيل دي؛ ليفين، مايكل آي. (1962). دليل مبرمج لغة ليسب 1.5 . مطبعة معهد ماساتشوستس للتكنولوجيا . ص 105. ISBN 978-0-262-13011-0.
كائن – مرادف للرمز الذري
{{cite book}}عدم توافق رقم ISBN / التاريخ ( مساعدة ) - ↑ إيفان إي. ساذرلاند (مايو 1963). سكتش باد: نظام اتصال رسومي بين الإنسان والآلة . مؤتمر AFIPS '63 (الربيع): وقائع مؤتمر الحاسوب المشترك الربيعي المنعقد في الفترة من 21 إلى 23 مايو 1963. مطبعة AFIPS. الصفحات 329-346 . doi : 10.1145/1461551.1461591 .
- 1 2 نيغارد، كريستين ؛ دال، أولي-يوهان (1 أغسطس 1978). "تطوير لغات سيمولا" . إشعارات ACM SIGPLAN . 13 (8): 245-272 . doi : 10.1145/960118.808391 .
- ↑ روس، دوغ. "أول لغة لهندسة البرمجيات" . الجدول الزمني لمختبر علوم الحاسوب والذكاء الاصطناعي . مختبر علوم الحاسوب والذكاء الاصطناعي بمعهد ماساتشوستس للتكنولوجيا. مؤرشف من الأصل في 12 أبريل 2011. تم الاطلاع عليه في 13 مايو 2010 .
- 1 2 هولمفيك، جان رون (شتاء 1994). "تجميع المحاكاة: دراسة تاريخية للنشأة التكنولوجية" (ملف PDF) . حوليات IEEE لتاريخ الحوسبة . 16 (4): 25-37 . doi : 10.1109/85.329756 . S2CID 18148999. مؤرشف من الأصل (ملف PDF) في 30 أغسطس 2017. تم الاطلاع عليه في 3 مارس 2018 .
- ↑ مادسن، أولي ليرمان. "كريستين نيغارد" . الحائزون على جائزة تورينغ . مؤرشف من الأصل في 1 فبراير 2025. تم الاطلاع عليه في 4 فبراير 2025 .
- ↑ بوتشر، بول (30 يونيو 2014). سبعة نماذج للتزامن في سبعة أسابيع: عندما تتفكك الخيوط . مكتبة براغماتيك. ص 204. ISBN 978-1-68050-466-8.
- ↑ جونز، أنيتا ك.؛ ليسكوف، باربرا هـ. (أبريل 1976). مرفق للتحكم في الوصول للغات البرمجة (ملف PDF) (تقرير فني). معهد ماساتشوستس للتكنولوجيا. مذكرة CSG رقم 137. مؤرشف من الأصل (ملف PDF) في 26 فبراير 2026.
- 1 2 ماير، برتراند (2009). لمسة من الرقي: تعلم البرمجة الجيدة باستخدام الكائنات والعقود . سبرينغر ساينس آند بيزنس ميديا. ص 329. رمز Bibcode : 2009tclp.book.....M . ISBN 978-3-540-92144-8.
- ↑ كاي، آلان (مارس 1993). "التاريخ المبكر لسمول توك" . إشعارات ACM SIGPLAN . 28 (3): 69-95 . doi : 10.1145/155360.155364 .
- ↑ بورنينج، آلان هاميلتون (1979). مختبر الأشياء: مختبر محاكاة موجه نحو القيود (ملف PDF) (تقرير). جامعة ستانفورد.
- ↑ مون، ديفيد أ. (يونيو 1986). "البرمجة الكائنية التوجه مع نكهات" (ملف PDF) . وقائع مؤتمر أنظمة ولغات وتطبيقات البرمجة الكائنية التوجه . OOPSLA '86. الصفحات 1-8 . doi : 10.1145/28697.28698 . ISBN 978-0-89791-204-4. S2CID 17150741 . تم الاسترجاع في 17 مارس 2022 .
- ↑ هسو، هانسن (17 ديسمبر 2020). "تقديم حديقة حيوانات سمول توك" . CHM . تم الاسترجاع في 27 مايو 2021 .
{{cite news}}: CS1 maint: url-status ( link ) - ↑ بوبرو، دي جي؛ ستيفيك، إم جي (1982). حلقات: برمجة البيانات والبرمجة الموجهة للكائنات لـ Interlisp (ملف PDF) . المؤتمر الأوروبي للذكاء الاصطناعي.
- ↑ ماير 1997 .
- ↑ يونيو 1995: إصدار Visual FoxPro 3.0، حيث تطورت لغة FoxPro من لغة إجرائية إلى لغة كائنية التوجه. يُقدم Visual FoxPro 3.0 حاوية قاعدة بيانات، وإمكانيات سلسة للعميل/الخادم، ودعمًا لتقنيات ActiveX، وأتمتة OLE، ودعمًا للقيم الفارغة. ملخص إصدارات Fox
- ↑ دليل المراجعين لعام 1995 لبرنامج Visual FoxPro 3.0: DFpug.de
- ↑ خورانا، روهيت (1 نوفمبر 2009). البرمجة الكائنية باستخدام لغة C++، الطبعة الأولى . دار فيكاس للنشر المحدودة. رقم ISBN 978-81-259-2532-3.
- ↑ ديبورا ج. أرمسترونج. كواركات تطوير البرمجة الكائنية . حددت دراسة استقصائية لما يقرب من 40 عامًا من أدبيات الحوسبة العديد من المفاهيم الأساسية الموجودة في الغالبية العظمى من تعريفات البرمجة الكائنية، بترتيب تنازلي حسب شيوعها: الوراثة، الكائن، الفئة، التغليف، الأسلوب، تمرير الرسائل، تعدد الأشكال، والتجريد.
- ↑ جون سي. ميتشل ، مفاهيم في لغات البرمجة ، مطبعة جامعة كامبريدج، 2003، رقم ISBN 0-521-78098-5، ص 278. القوائم: الإرسال الديناميكي، والتجريد، وتعدد الأشكال الفرعية، والوراثة.
- ↑ مايكل لي سكوت، براغماتية لغات البرمجة ، الطبعة الثانية، مورغان كوفمان، 2006، رقم ISBN 0-12-633951-1، ص 470. تغليف القوائم، والوراثة، والإرسال الديناميكي.
- ↑ بيرس، بنجامين (2002). أنواع ولغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-16209-8.، القسم 18.1 "ما هي البرمجة كائنية التوجه؟" القوائم: الإرسال الديناميكي، والتغليف أو الأساليب المتعددة (الإرسال المتعدد)، وتعدد أشكال الأنواع الفرعية، والوراثة أو التفويض، والاستدعاء الذاتي المفتوح ("this"/"self").
- ↑ سي جيه ديت، مقدمة في أنظمة قواعد البيانات، الطبعة السادسة، الصفحة 650
- ↑ ماكدونو، جيمس إي. (2017). "التغليف". التصميم الموجه للكائنات باستخدام ABAP: منهج عملي . Apress . doi : 10.1007/978-1-4842-2838-8 . ISBN 978-1-4842-2837-1– عبر أورايلي .
- ↑ بلوخ 2018 ، ص 73-77، الفصل §4 البند 15 تقليل إمكانية الوصول إلى الفصول والأعضاء.
- ↑ "ما هي البرمجة الكائنية التوجه (OOP) بكلمات بسيطة؟ - مقالات تقنية من عالم البرمجيات" . 5 يناير 2023. مؤرشف من الأصل في 17 يناير 2023. تم الاطلاع عليه في 17 يناير 2023 .
- ↑ كارديلي، لوكا؛ ويغنر، بيتر (10 ديسمبر 1985). "حول فهم الأنواع، وتجريد البيانات، وتعدد الأشكال" . مجلة ACM Computing Surveys . 17 (4): 471–523 . doi : 10.1145/6041.6042 . ISSN 0360-0300 .
- ^ جاكوبسن، إيفار. ماغنوس كريسترسون؛ باتريك جونسون؛ غونار أوفرجارد (1992). هندسة البرمجيات الشيئية . مطبعة أديسون ويسلي ACM. ص 43-69 . رقم ISBN 978-0-201-54435-0.
- 1 2 3 كارديلي، لوكا (1996). "خصائص هندسية سيئة للغات البرمجة كائنية التوجه" . مجلة ACM للحوسبة ، 28 (4): 150–150. doi : 10.1145/242224.242415 . ISSN 0360-0300 . S2CID 12105785. مؤرشف من الأصل في 10 مايو 2010. تم الاطلاع عليه في 21 أبريل 2010 .
- 1 2 أرمسترونغ، جو . سيبل، بيتر (محرر). المبرمجون في العمل: تأملات في فن البرمجة . Codersatwork.com. مؤرشف من الأصل في 5 مارس 2010. تم الاطلاع عليه في 13 نوفمبر 2009 .
- 1 2 3 ريموند، إريك س. (2003). "فن برمجة يونكس: يونكس ولغات البرمجة كائنية التوجه" . مؤرشف من الأصل في 15 سبتمبر 2014. تم الاطلاع عليه في 6 أغسطس 2014 .
- ↑ برودي، ليو (1984). التفكير المستقبلي (ملف PDF) . الصفحات 92-93 . تم الاطلاع عليه بتاريخ 4 مايو 2018 .
- ↑ هانت، أندرو. "لا تكرر نفسك" . تصنيف: البرمجة المتطرفة . مؤرشف من الأصل في 5 مايو 2018. تم الاطلاع عليه في 4 مايو 2018 .
- ↑ بلوخ 2018 ، ص. 19، الفصل §2 البند 4 فرض عدم إمكانية الاستنساخ باستخدام منشئ خاص.
- ↑ دوني، سي؛ مالينفانت، جيه؛ باردون، دي (1999). "تصنيف لغات البرمجة القائمة على النماذج الأولية" (ملف PDF) . البرمجة القائمة على النماذج الأولية: المفاهيم واللغات والتطبيقات . سنغافورة - برلين - هايدلبرغ: سبرينغر. ISBN 9789814021258.
- ↑ "هل لغة Go لغة كائنية التوجه؟" . مؤرشف من الأصل في 13 أبريل 2019. تم الاسترجاع في 13 أبريل 2019.
على الرغم من أن لغة Go تحتوي على أنواع وأساليب وتسمح بأسلوب برمجة كائني التوجه، إلا أنه لا يوجد تسلسل هرمي للأنواع.
- ↑ ستروستروب، بيارن (2015). البرمجة الكائنية التوجه بدون وراثة (محاضرة مدعوة) . المؤتمر الأوروبي التاسع والعشرون للبرمجة الكائنية التوجه (ECOOP 2015). 1:34. doi : 10.4230/LIPIcs.ECOOP.2015.1 .
- ↑ بايك، روب (14 نوفمبر 2012). "قبل بضع سنوات رأيت هذه الصفحة" . مؤرشف من الأصل في 14 أغسطس 2018. تم الاطلاع عليه في 1 أكتوبر 2016 .
- ↑ نايك، مايور؛ كومار، راجيف (مارس 2000). "إرسال الرسائل بكفاءة في الأنظمة الموجهة للكائنات". إشعارات ACM SIGPLAN . 35 (3): 49-58 . doi : 10.1145/351159.351174 .
- ↑ ستروستروب، بيارن (19 فبراير 2007). "مسرد بيارن ستروستروب للغة C++" . www.stroustrup.com . مؤرشف من الأصل في 20 يوليو 2012. تم الاطلاع عليه في 9 يونيو 2011.
تعدد الأشكال - توفير واجهة واحدة لكيانات من أنواع مختلفة.
- ↑ بوتش، جرادي (1986). هندسة البرمجيات باستخدام لغة آدا . أديسون ويسلي. ص 220. ISBN 978-0-8053-0608-8لعل
أعظم ميزة لنهج التطوير الموجه نحو الكائنات هي أنه يوفر آلية لالتقاط نموذج للعالم الحقيقي.
- ↑ ويرث، نيكلاوس (23 يناير 2006). "أفكار جيدة، من خلال المرآة" (ملف PDF) . مجلة IEEE Computer . مقال الغلاف. 39 (1): 28-39 . Bibcode : 2006Compr..39a..28W . doi : 10.1109/MC.2006.20 . S2CID 6582369. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 12 أكتوبر 2016.
- ↑ "مبادئ العم بوب الصلبة" . يوتيوب . 2 أغسطس 2018.
- ↑ ماير 1997 ، ص 230.
- ↑ ييغي، ستيف (30 مارس 2006). "الإعدام في مملكة الأسماء" . steve-yegge.blogspot.com . تم الاطلاع عليه في 3 يوليو 2010 .
- ↑ بورونتشيك، تيموثي (11 يونيو 2009). "ما الخطأ في البرمجة الكائنية التوجه؟" . zaemis.blogspot.com . تم الاطلاع عليه في 3 يوليو 2010 .
- ↑ مارتن، روبرت سي. "مبادئ التصميم وأنماط التصميم" (ملف PDF) . مؤرشف من الأصل (ملف PDF) في 6 سبتمبر 2015. تم الاطلاع عليه في 28 أبريل 2017 .
- ↑ نيوارد، تيد (26 يونيو 2006). "فيتنام علوم الحاسوب" . قابلية التشغيل البيني تحدث. مؤرشف من الأصل في 4 يوليو 2006. تم الاسترجاع في 2 يونيو 2010 .
- ↑ سي جيه ديت، هيو داروين. مؤسسة أنظمة قواعد البيانات المستقبلية: البيان الثالث (الطبعة الثانية)
- ↑ ويرفس-بروك، ريبيكا؛ ويلكرسون، برايان (1989). "التصميم الموجه للكائنات: منهج قائم على المسؤولية" . إشعارات ACM SIGPLAN . 24 (10): 74. doi : 10.1145/74878.74885 .
- ↑ كارش، باتريك (19 يوليو 2023). "مبادئ GRASP: أنماط التصميم الموجهة للكائنات" . ميديوم . تم الاطلاع عليه في 30 مارس 2025 .
- ↑ بول، إريك. "التصنيف الفرعي والوراثة لأنواع البيانات الفئوية" (ملف PDF) . تم الاطلاع عليه في 5 يونيو 2011 .
- ^ العبادي، مارتن ؛ كارديلي، لوكا (1996). نظرية الكائنات . Springer-Verlag New York, Inc. ISBN 978-0-387-94775-4تم الاطلاع عليه بتاريخ 21 أبريل 2010 .
- ↑ تان، تيان؛ لي، يو (12 يوليو 2023). تاي-إي: إطار عمل تحليل ثابت سهل الاستخدام للمطورين للغة جافا، يستفيد من التصاميم الجيدة للأساليب الكلاسيكية . المؤتمر الدولي لتحليل البرامج الثابتة 2023. الصفحات 1093-1105 . doi : 10.1145/3597926.3598120 .
- ↑ بوتاني، فيكرام؛ توسي، فرشاد قاسمي؛ باكلي، جيم (1 يونيو 2024). "تحليل أدوات التحليل: دراسة لأدوات تحليل شفرة المصدر". أنظمة الحاسوب التطبيقية . 29 (1): 98-111 . doi : 10.2478/acss-2024-0013 .
- ↑ بروكر، آخيم د.؛ وولف، بوركهارت (2008). "أكوان قابلة للتوسيع لنماذج البيانات الموجهة للكائنات". ECOOP 2008 - البرمجة الموجهة للكائنات . سلسلة محاضرات في علوم الحاسوب. المجلد 5142. الصفحات 438-462 . doi : 10.1007/978-3-540-70592-5_19 . ISBN 978-3-540-70591-8
البرمجة الكائنية التوجه هي نموذج برمجة مقبول على نطاق واسع
. - ↑ كاسيل، ديفيد (21 أغسطس 2019). "لماذا يكره الكثير من المطورين البرمجة الكائنية التوجه؟" . ذا نيو ستاك .
- ↑ بوتوك، توماس؛ فوك، ملادن؛ ريندوس، آندي (1999). "تحليل إنتاجية البرمجيات الموجهة للكائنات المطورة في بيئة تجارية" (ملف PDF) . البرمجيات: الممارسة والخبرة . 29 (10): 833-847 . doi : 10.1002/(SICI)1097-024X(199908)29:10 < 833::AID-SPE258 > 3.0.CO ; 2-P . S2CID 57865731. تاريخ الاسترجاع: 21 أبريل 2010 .
- 1 2 ستيبانوف، ألكسندر (2001-2008). "STLport: مقابلة مع أ. ستيبانوف" . تم الاطلاع عليه بتاريخ 21 أبريل 2010 .
- 1 2 هيكي، ريتش (نوفمبر 2009). هل وصلنا بعد؟ (كلمة رئيسية) . قمة لغات JVM.
- ↑ بايك، روب (25 يونيو 2012). "الأقل هو أكثر بكثير" . تم الاطلاع عليه في 1 أكتوبر 2016 .
- ↑ بايك، روب (2 مارس 2004). " [ 9fans ] ردًا على: Threads: خياطة شارات الشرف على نواة النظام" . comp.os.plan9 (قائمة بريدية) . تم الاطلاع عليه في 17 نوفمبر 2016 .
- ↑ أمبلر، سكوت (1 يناير 1998). "نظرة واقعية على إعادة استخدام الكائنات" . drdobbs.com . تم الاطلاع عليه في 5 أغسطس 2025 .
- ↑ شيلي، آصف (22 أغسطس 2008). "عيوب نمذجة الكائنات" . شبكة برمجيات إنتل . تم الاسترجاع في 4 يوليو 2010 .
- ↑ جيمس، جاستن (1 أكتوبر 2007). "المعالجة المتعددة فعل وليست اسمًا" . techrepublic.com. مؤرشف من الأصل في 10 أكتوبر 2007. تم الاطلاع عليه في 4 يوليو 2010 .
- ↑ شيلي، آصف (22 أغسطس 2008). "كيفية: البرمجة متعددة النوى (المعالجة المتعددة) إرشادات تصميم فئات Visual C++، الدوال الأعضاء" . support.microsoft.com . تم الاطلاع عليه في 4 يوليو 2010 .
- ↑ هاربر، روبرت (17 أبريل 2011). "بعض الأفكار حول تدريس FP" . مدونة الأنماط الوجودية. مؤرشف من الأصل في 6 نوفمبر 2011. تم الاطلاع عليه في 5 ديسمبر 2011 .
- ↑ غراهام، بول . "لماذا لا تُعتبر ARC كائنية التوجه بشكل خاص" . PaulGraham.com. مؤرشف من الأصل في 24 نوفمبر 2009. تم الاطلاع عليه في 13 نوفمبر 2009 .
- ↑ فيلدمان، ريتشارد (30 سبتمبر 2019). "لماذا لا تُعتبر البرمجة الوظيفية هي المعيار؟" . يوتيوب . مؤرشف من الأصل في 22 أغسطس 2022.
- ↑ كروبنر، لورانس. "البرمجة الكائنية التوجه كارثة مكلفة يجب أن تنتهي" . smashcompany.com. مؤرشف من الأصل في 14 أكتوبر 2014. تم الاطلاع عليه في 14 أكتوبر 2014 .
للمزيد من القراءة
- العبادي, مارتن ; لوكا كارديلي (1998). نظرية الكائنات . سبرينغر فيرلاج . رقم ISBN 978-0-387-94775-4.
- أبيلسون، هارولد ؛ جيرالد جاي سوسمان (1997). بنية وتفسير برامج الحاسوب . مطبعة معهد ماساتشوستس للتكنولوجيا . ISBN 978-0-262-01153-2أُرشف من الأصل بتاريخ 26 ديسمبر 2017. تم الاطلاع عليه بتاريخ 22 يناير 2006 .
- أرمسترونغ، ديبورا ج. (فبراير 2006). "خصائص تطوير البرمجيات الموجهة للكائنات". مجلة اتصالات رابطة مكائن الحوسبة . 49 (2): 123-128 . doi : 10.1145/1113034.1113040 . ISSN 0001-0782 . S2CID 11485502 .
- بلوخ، جوشوا (2018). "جافا الفعّالة: دليل لغة البرمجة" ( الطبعة الثالثة). أديسون-ويسلي. ISBN 978-0134685991.
- بوش، جرادي (1997). التحليل والتصميم الموجه للكائنات مع التطبيقات . أديسون-ويسلي . ISBN 978-0-8053-5340-2.
- إيلز، بيتر؛ أوليفر سيمز (1998). بناء كائنات الأعمال . جون وايلي وأولاده . ISBN 978-0-471-19176-6.
- جاما، إريك ؛ ريتشارد هيلم ؛ رالف جونسون ؛ جون فليسيدس (1995). أنماط التصميم: عناصر البرمجيات القابلة لإعادة الاستخدام والموجهة للكائنات . أديسون-ويسلي. رمز Bibcode : 1995dper.book.....G . ISBN 978-0-201-63361-0.
- هارمون، بول ؛ ويليام موريسي (1996). كتاب دراسات حالة تقنية الكائنات - دروس مستفادة من تطبيقات الأعمال الحائزة على جوائز . جون وايلي وأولاده. ISBN 978-0-471-14717-6.
- جاكوبسون، إيفار (1992). هندسة البرمجيات الموجهة للكائنات: منهج قائم على حالات الاستخدام . أديسون-ويسلي. رمز Bibcode : 1992oose.book.....J . ISBN 978-0-201-54435-0.
- كاي، آلان . التاريخ المبكر للغة سمول توك . مؤرشف من الأصل في 4 أبريل 2005. تم الاطلاع عليه في 18 أبريل 2005 .
- ماير، برتراند (1997). بناء البرمجيات الموجهة للكائنات . برنتيس هول . ISBN 978-0-13-629155-8.
- بيسينوفسكي، رودولف (2013). البرمجة الكائنية التوجه - تعلم التفكير والبرمجة الكائنية التوجه . دار نشر بروكنر. رقم ISBN 978-80-904661-8-0.
- رامباو، جيمس ؛ بلاها، مايكل؛ بريميرلاني، ويليام؛ إيدي، فريدريك؛ لورنسن، ويليام (1991). نمذجة وتصميم الكائنات . برنتيس هول. ISBN 978-0-13-629841-0.
- شاتش، ستيفن (2006). هندسة البرمجيات الموجهة للكائنات والهندسة الكلاسيكية، الطبعة السابعة . ماكجرو هيل . ISBN 978-0-07-319126-3.
- شراينر، أكسل توبياس (1993). البرمجة الشيئية باستخدام ANSI-C . هانسر. اتش دي ال : 1850/8544 . رقم ISBN 978-3-446-17426-9.
- تايلور، ديفيد أ. (1992). نظم المعلومات الموجهة للكائنات - التخطيط والتنفيذ . جون وايلي وأولاده. ISBN 978-0-471-54364-0.
- وايسفيلد، مات (2009). عملية التفكير الموجهة نحو الكائنات، الطبعة الثالثة . أديسون-ويسلي . ISBN 978-0-672-33016-2.
- ويست، ديفيد (2004). التفكير الكائني (مرجع للمطورين) . مطبعة مايكروسوفت . ISBN 978-0-7356-1965-4.
روابط خارجية
- البرمجة الكائنية التوجه
- نماذج البرمجة
