كائن (حوسبة)

الكائن (بالإنجليزية: Object)  في علوم الكمبيوتر يطلق اسم كائن على أي شيء يمكن التعامل معه بواسطة أوامر لغات البرمجة، مثل القيمة value أو المتغير variable أو الدالة function أو هيكل البيانات data structure. معنى أن كلمة كائن تشير إلى أي كائن حي أو غير حي مثل الإنسان أو السيارة، وهذا الكائن في لغة البرمجة في الحواسيب يمكن إنشائه أو العمل به  بواسطة الأكواد البرمجية مثل عمل نافذة window مستكشف الملفات بخصائص جديدة كإضافة لون مختلف لها ووضع قائمة تحرير Edit إضافية في أعلاها. ولكي يتم التغير يجب أن يكون لدينا ما يسمى كلاس Class وهو القالب الرئيسي الذي يتم إستنساخ شكل الناقذه الجديده منه، وهذه النافذة الجديدة هي الكائن الجديد object. ومع طرح البرمجة الشيئية object-oriented programming، أصبحت نفس الكلمة object تشير لشكل معين من أشكال الفئات classes.

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

في مجال البرمجة الموجهة بالكائنات، يُنظر للكائن كمجموعة من الخصائص properties (عناصر الكائن) والسلوكيات behaviors (الدوال الفرعية subroutines) التي تغلف كيان معين. وعليه، بينما نرى أن أنواع البيانات البدائية primitive data أو البسيطة عبارة عن معلومات وحيدة، نجد الكائنات في البرمجة الموجهة بالكائنات عبارة عن أنواع معقدة تحمل معلومات متعددة، وخصائص معينة (أو بالإنجليزية: attributes). وبدلاً من الاكتفاء بتعيين قيمة لها (مثل int=10)، يتم بناءها وإنشاءها construction. وفي العالم الواقعي، إذا كان مسدس معين (لنفترض أنه من النوع Colt 45) يمثل كائنًا، لتم تحديد خصائصه المادية ووظيفته في (إطلاق النار) كُلُّ على حده. وبمجرد أن يتم تحديد خصائص هذا الكولت 45 "الكائن" إلى فئة معينة class (سنطلق على هذه الفئة اسم "مسدس") ، عندئذ من الممكن نسخ هذا المسدس إلى ما لا نهاية لإنشاء كائنات مطابقة له لها نفس الشكل والوظيفة. وفي مثال آخر، يُمثل الحيوان فئة أعلى superlcass من الفقاريات، والفقاريات تمثل فئة أعلى من الكائنات البشرية، سيكون أفراد مثل "أحمد كمال" أو "سمير رمضان" أمثلة أو ‘كائنات’ خاصة من الفئة البشرية، ومن ثم تحمل كافة خصائص الفئة البشرية (وبالتالي تحمل خصائص الفقاريات والحيوانات كذلك). 
وتعد "الكائنات" هي أساس البرمجة الموجهة بالكائنات، وهي تمثل أنواع رئيسية من البيانات في لغات البرمجة الموجهة بالكائنات. وهذه اللغات تقدم دعماً تركيبيًا syntactic ودلاليًا semantic لعملية مناولة الكائنات، ويشمل هذا الدعم النظام الهرمي hierarchical type system، والتنويت الخاص لإعلان واستدعاء المناهج methods، والوسائل لإخفاء حقول مُختارة من المبرمجين العملاء. ورغم ذلك، يمكن تطبيق الكائنات والبرمجة الموجهة بالكائنات في أي لغة من لغات البرمجة. 
وتُستخدم الكائنات في تطوير البرمجيات لتطبيق هياكل بيانات تجريدية، وذلك من خلال جمع مكوّنات البيانات مع الإجراءات الخاصة بالتعامل معها. وتمثل الكائنات في البرمجة الموجهة بالكائنات شيئاً رئيسيًا في مفهوم الوراثة inheritance؛ ومن ثم فهي تحسن من موثوقية البرنامج , وتبسّط عملية صيانة البرمجيات , وإدارة المكتبات libraries، وتقسيم العمل في فرق المبرمجين. وتُصمم لغات البرمجة الموجهة بالكائنات بصفة عامة لاستثمار وتعزيز هذه المزايا المحتملة لنموذج الكائنات. كما تستطيع الكائنات كذلك أن تجعل من الممكن مناولة كائنات شديدة التباين عن بعضها من خلال نفس النص (الكود) البرمجي، طالما أن كلها يملك الوسيلة المناسبة.

آلية الكائن

تم طرح المفهوم الحديث لـ "الكائنات" وأسلوب التوجيه بالكائنات في البرمجة بواسطة لغة Simula التي صدرت في عام 1967، والتي نُشر استخدامها Smalltalk بعدها بعامين في 1969، وأصبحت وسائل رئيسية في عالم البرمجة مع انتشار برنامج الـ سي++ والذي صدر في عام 1983.
وفي الأسلوب "البحت" للبرمجة الموجهة بالكائنات، يجب الدخول لحقول البيانات الخاصة بالكائن فقط من خلال المناهج (الدّوال الفرعية). وتجعل هذه القاعدة من السهل  ضمان بقاء البيانات دوماً في حالة صالحة. ومن الناحية التركيبية syntactic، وفي كافة لغات البرمجة الموجهة بالكائنات، يُستخدم مؤثر النقطة (dot operator) (والذي يوضع بين الكائن واسمه الرمزي) لاستدعاء دالة/منهج معين للكائن. فمثلاً، تأمل فئة حسابية تحمل اسم Arith_Class. هذه الفئة تتضمن دوال مثل add() و subtract() وmultiply() و divide()، تقوم بمعالجة رقمين يُعطيان لها. ويمكن استخدام هذه الفئة لإيجاد مجموع 78 و 69 وذلك في البداية عن طريق إنشاء كائن من الفئة ثم استدعاء طريقة الضرب، وذلك على النحو التالي:
 1  int result = 1 ;                        // Initialization
 2  arith_Obj1 = new Arith_Class();           // Creating a new object of Arith_Class
 3  result = arith_Obj1.multiply(78,69);      // returned value of multiply function, store in result variable.
وفي أي لغة يتم فيها إنشاء كائن من فئة معينة، يُطلق على هذا الكائن اسم تجسيد instance لهذه الفئة. فإذا كان لكل كائن نوع type، فإن أي كائنين من نفس الفئة سيكون لهما نفس نوع البيانات data type. ويشار لإنشاء أي نموذج من أي فئة عملية إنشاء تجسيد instantiating من الفئة.
ومن الأمثلة الواقعية على الكائنات عبارة "كلبي" my dog، والتي تعد تجسيدًا لنوع (فئة) تُسمى "كلب"، وهي فئة فرعية subclass للفئة "حيوان". وفي حالة الكائنات متنوعة الشكل polymorphic، يمكن تجاهل بعض تفاصيل نوعها بشكل انتقائي. فمثلاً يمكن أن يُستخدم الكائن "كلب" بواسطة دالة تبحث عن "حيوان ما". ونفس الأمر ممكن مع "قطة"، نظرًا لأنها تنتمي أيضًا إلى الفئة "حيوان". ورغم أن الدخول عليها يتم كـ "حيوان"، فإن بعض الخصائص المعينة الخاصة بـ "الكلب" أو "القطة" ستظل غير متوافرة، مثل خاصية "الذيل"، نظرًا لأنه ليس كل الحيوانات لها ذيول. 
و ‘الشبح’ هو كائن ليس له إشارة مرجعية unreferenced في أي برنامج، ومن ثم فهو لا يخدم أي غرض. وفي اللغات التي تحمل خاصية تجميع القمامة (التخلص من الملفات الزائدة)، يقوم جامعة القمامة garbage collector، بتعليم مكان الذاكرة المشغول بالكائن على أنه خال، رغم أنه يظل حاملاً للبيانات الخاصة بالكائن لحين أن يشغل المكان كائن أخرى يقوم بالكتابة الفوقية overwriting عليه.