قبل ما نبدأ تقنياً. علم الاحياء علم سابق للكمبيوتر بمئات السنين فالتصنيف لديهم مر بمراحل كثيرة. صحيح لديهم Class لكن ايضا لديهم Phylum و Order و Superoreder هذا غير الSubclass. بالعربي طائفة و شعبة و عويلم الخ .. المهم.
الكلاس في الكميبوتر ظهر في اخر الستينيات اي من وقت قريب جدا مقارنة بالأحياء و كان تطور للStruct بعدها ظهرت تصنيفات اخرى مثل interface و enum و record هذا يعني ان العلم يتطور و ينضج ( مع التحفظ على مسمى علم الكمبيوتر) وان الانواع التقليدية ماعادت كافية.
كمقارنة بين العلمين. إن قلنا ان الكائنات الحية في الاخير تتكون من خلايا , لدينا ايضا شيء شبيه و هي خلايا الذاكرة التي تخزن بها معلومات هذا النوع. و الذاكرة لا تعرف الانواع. فكيف اذا خرجت هذه التصنيفات من شيء بسيط كالبت و البايت.
بداية التصنيف تأتي من الCPU نفسه فهو يصنف بيانات الذاكرة حسب حجمها او عدد الbits مثل bitو byte و word وهكذا. لغة الاسمبلي لقربها من الCPU ورثت هذا التصنيف فلديها نفس الشيء بالاضافة لوعي مثل هل القيمة موجبة ام سالبة وهل هي قيمة صحيحة ام بفاصلة.
سنتخطى تاريخ اللغات التي بدأ فيها مسمى class و نقفز الى لغة C مباشرة. لغة سي لديها struct شيء يشبه الكلاس لكن لا يحتوي على Method لكن فيها Functions منفصلة و مستقلة.
الstruct عبارة عن مجموعة انواع محفوظة تراتبياً خلف بعضها في الذاكرة. مثلا لو لدينا struct اسمه student وبه حقلين من نوع int فسنجد ان اول 4 بايت للاول ثم 4 بايت للثاني. لكن بدون methods كما ذكرت سابقاً.
اتى مصمم لغة ++C ووضع حقول مخفية بها عناوين لfunctions بحيث تكون جزء من ذلك الstruct وهكذا ظهر الكلاس (بتبسيط شديد) لكن الكلاس يمكنه ان يرث Inheritance! لامشكلة خذ حقول الاب واضف عناوينها للابن.
ماذا عن الPolymorphism و الvirtual method؟
هنا استخدم جدول خارجي فيه مجموعة pointers تشير للmethods يسمى هذا الجدول vtable.
هنا استخدم جدول خارجي فيه مجموعة pointers تشير للmethods يسمى هذا الجدول vtable.
احتاج هنا للتنويه عن موضوع بسيط و هو انه لاتوجد لغة OOP او Procedural او Functional لكن توجد لغات تدعم هذه الParadigms اكثر من غيرها. بمعنى انك بلغة C يمكنك كتابة كود OOP و ايضا Functional وحتى بالAssembly يمكنك ذلك. لكن سيأخذ وقت وجهد وهذا ما اختصرته لنا اللغات.
طيب الInterfaces ؟ الجواب انها abstract class و الenums؟ هذي class. ماذكر بالاعلى كلام عام لكن بحكم اختلاف هيكلة المعالجات و بالتالي اختلاف الAssembly لها و كذلك اختلاف مترجمات اللغات كجافا و ++C قد تختلف طريقة الImplementation.
هذه الاشياء كالClass و الInterface و enums وجدت لسبب. مع انه يمكننا بناء كلاسات بلغة C لكن لماذا نعيد اختراع العجلة؟ استخدم لغة بها Classes. هذا الشيء ينطبق على لغتك التي تستخدمها الان.
فاغلب لغات البرمجة الان لديها مميزاتها و تضيف مميزات جديدة مع الوقت وهذه المميزات لم توجد عبث وانما لحل مشاكل ربما مازلت تعاني منها لانك لم تتطلع عليها فلا تكتفي بتعلم ماتراه كافياً بالنسبة لك.
تلك نقطة والنقطة الثانية هي ان اللغات او حتى التقنيات غالباً لا تحدك على شيء معين فهو ليس من صالح مصمميها. و كلما كانت نظرتك X-Ray بحيث تخترق الInterfaces التي وضعتها لك اللغة او التقنية كلما عرفت كيف تلتف و تتحرر من قيودها.
هذا التحرر ليس فقط لأجل ان اصنع Classes في لغة لا تدعمها مثل C. لكنه تحرر يمكنك حتى من ابتكار شيء جديد, نوع جديد قد يقلب الموازين مثلما قلب ظهور الOOP صناعة البرمجيات.
هذا النوع او الشيء الجديد لن تجده في كتب الLow Level Programming لكن قد تجده في الحياة امامك وعندها تستطيع تمثيله بخبرتك في الLow Level Programming.
اعتذر على الاطالة و دمتم.
اعتذر على الاطالة و دمتم.
جاري تحميل الاقتراحات...