قال Tim Rentsch عام 82 : الOOP في الثمانيات ستكون مثل الStructured Programming في السبعينات, الكل سيهلل لها و الشركات ستسوق منتجاتها على انها تدعمها و المدراء سيتشدقون بها . و المبرمجين كلُ سيمارسها بطريقته لكن لا أحد يعرف في الحقيقة ماذا تكون !. (سلسلة)
مصطلح الObject Oriented صاغه Alan Kay خلال عمله على لغة Smalltalk و هي لغة في الاصل هدفها تعليم الاطفال البرمجة من خلال بيئة رسومية لكنها من خلال ذلك قدمت الكثير لعالم البرمجة و استخدمت في مشاريع حقيقية الى وقتنا الحالي.
ربما لانه إلى 2007 كان لدى IBM بيئة تطوير اسمها VisualAge صممت بلغة Smalltalk و كانت تدعم لغات مثل ++C و COBOL و جافا و فورتران و Smalltalk نفسها فطورت الشركات من خلالها تطبيقات مازالت تعمل.
نعود للOOP . اعتمد Alan على لغة Simula و هي اول لغة قدمت مفهوم الClass و الObject لكن لم تقدم مفهوم الObject Oriented الذي قصده Alan و الذي سنأتي عليه عند الحديث عن Smalltalk.
صرح Alan Key اكثر من مرة ان فكرته لا تتعلق بما يعرف الان بالOO Pillars و هي الAbstractions و الInheritance و الPolymorphism و Encapsulation و التي هي جزء تعليمي اساسي عند تعلم اغلب اللغات التي تعتبر نفسها "OO".
الان كاي قال ببساطة ان الOO تعتمد على الMessage Passing ان هناك اوبجكت يرسل رسالة يتلقاها اوبجكت اخر و يعالجها و قد يرسل رسالة اخرى بدوره الى Object ثالث او يعيدها للObject الأول! و هكذا.
اغلب اللغات ترجمت الMessage Passing إلى Method Invocation اي ان هناك كلاس يقوم باستدعاء method في كلاس اخر و قد يرسل له خلال هذا الاستدعاء بعض البيانات كparameters و بهذا اعتبرت تلك اللغات نفسها Object Oriented. لكن ليس هذا هو المراد بالMessage Passing.
لنرى هذا الكود البسيط بلغة Smalltalk
(3 * 2 + 10) sqrt
العدد 3 عبارة عن Object
ال* 2 عبارة عن Message ارسل الى الاوبجكت 3. عالجها وانتج اوبجكت جديد هو 6 ( علامة * تسمى هنا Selector ) .ثم تلقى رسالة 10 + واصبح 16 ثم تلقى رسالة اخرى هي sqrt ليصبح 4
(3 * 2 + 10) sqrt
العدد 3 عبارة عن Object
ال* 2 عبارة عن Message ارسل الى الاوبجكت 3. عالجها وانتج اوبجكت جديد هو 6 ( علامة * تسمى هنا Selector ) .ثم تلقى رسالة 10 + واصبح 16 ثم تلقى رسالة اخرى هي sqrt ليصبح 4
هناك اختلاف في الفكرة عن ماهو معمول به في لغات مثل جافا او ++C او بايثون , حيث اننا عندما نستدعي method من كلاس معين فيجب علينا معرفة اسم ذلك الميثود و ماذا يستقبل مما يضيف قيود على الكلاس الاول "الداعي". لانه يجب ان يتغير في حالة تغير اسم الميثود في الكلاس المدعو!.
فكرة الان كاي اخذها من طريقة عمل خلايا الجسم كل خلية تقوم بعملها من دون ان تعلم ماذا تفعل الخلية الاخرى و ذلك عبر الرسائل عصبية او كيميائية. اي بنظام team و ليس سيد و خادم. فالأوبجكت كينونة مستقلة او كماعرفها Bertrand Meyer بأنها Software Machine.
ما اكتبه هنا هو للاستفادة , وليس لأقول أن هذه الطريقة صحيحة و هذه خاطئة فالمبرمج عليه ان يكون براغماتياً اي ان ظروف البرمجة بالنسبة له اهم من مبادئها مادام انه في الاخير انتج برنامجاً يعمل. ( يتبع )
جاري تحميل الاقتراحات...