الكمبيوتر ليس مجرد آلة ولكنه يميل أكثر إلى أن يكون أداة تحاكي العقل. والكمبيوتر هو أداة للتعبير مثل الكتابة والرسم وفن النحت وصناعة الأفلام، وال Object Oriented Programming هي خطوة كبيرة لرؤية الكمبيوتر كوسيلة للتعبير أكثر منه كمجرد آلة.
كل لغات البرمجة هي تجريد أو تبسيط لشيء ماولكن كيف نستطيع أن نتواصل مع الكميبوتر؟ إن مجموعة الأوامر أو الشفرات التي يستطيع أن يفهمها الكمبيوتر مباشرة وبدون ترجمة تسمى ال
machine code أي شفرة الآلة. أي أن
الmachine code هي اللغة الأساسية للكمبيوتر وهي مجموعة من الأوامر التي يفهما الكمبيوتر مباشرة بدون مترجم وينفذها مباشرة. ولكل نوع من الكمبيوتر أو بدقة أكثر لكل CPU ال
machine code الخاصة به. ولكن ما هي الحروف التي تتكون منها كلمات هذه اللغة؟ إنها تتكون فقط من حرفين وهما ال 0 و 1 . فمثلا قد يكوا هناك أمر في الصورة 01101 وأمر آخر مثل 01110.
بالطبع من الصعب جداً كتابة برنامج بال machine code ولهذا جاءت لغة ال
Assembly كتجريدabstraction أو لنقول لغة أسهل فهما من ال machine code ، فلغة ال
Assembly تتكون من أوامر مثل الmachine code ولكن بدلا من أن تكون الأوامر في صورة 0 و 1 فأنها في صورة حروف سهلة الفهم و التذكر مثل الأمر ADD مثلاً.
ومع الحاجة لبرامج أكثر تعقيداً ظهرت لغات أخرى كثيرة فيما بسمى بلغات الأوامر Imperative ********s مثل السي Cو البيسك BASIC , و الفورتران ، فكل هذه اللغات هي تجريد للغة ال
Assembly أي جيل جديد من اللغات الأسهل فهما و إستخدام .
ولكن لاحظ معي هنا أن كل هذه التحسينات لازالت تجعلك تفكر في الكمبيوتر كمجرد آلة لها مجموعة من أذرار التشغيل مثل التلفاز و غسالة الأطباق أكثر من تفكيرك في المشكلة أو النظام الذي تريد أن تحاكيه.
فالمبرمج هنا يحتاج أكثر إلى أن يربط مشكلة أو نظام ما بأوامر الكمبيوتر وهذا يحتاج إلى مجهود كبير جدا كما إن هذه البرامج ستكون صعبة ومكلفة في صيانتها.
فالمطلوب هو أن نكتب أشياء تمثل وتعبر عن المشكلة التي نريد حلها أكثر من أن نكتب مجموعة من الأوامر الخاصة بالآلة. ولهذا ظهرت لغات مثل
LISP و ال
APL و هي لغات إختارت رؤية محددة لمجموعة من المشاكل ، ثم ظهرت لغة
الPROLOG و التي كانت ترى أن البرنامج هو مجموعة من القرارات المنطقية. و هذه اللغات كانت تقدم حلول جيدة جداً في نطاق المشاكل التي صممت لحلها ولكنها ضعيفة لحل مشكلات خارج هذا النطاق.
ثم ظهر لغات ال
Object Oriented Programming أي البرمجة التي تميل لمحكاة
الشيء مثل السي بلس بلس و الجافا والسي شارب ، بالطبع المصطلح يحتاج إلى تفسير أكثر لنفهم المراد منه.
ما هو الObject ؟ال Object أي
الشيء هو المفتاح لفهم ال
OOP أي ال
Object Oriented Programming ، فعندما تنظر حولك فإنك تستطيع أن ترى أشياء كثيرة (أي Objects كثيرة) في العالم الحقيقي مثل مكتبك و شاشة كمبيوترك و دراجتك و قلمك و كرتك إذا كنت تحب كرة القدم مثلي. الأشياء الموجودة في العالم الحقيقي تشترك كلها في صفتان: كل الأشياء لها حال
state (أو لنقول صفات حالية) و لها سلوك
behavior فمثلا الكلب له حالة مثل الإسم (إسمه هرقل) و اللون (لونه بني) و جائع ، وله سلوك مثل يهز ذيله و يشمشم في الأرض . و الدراجة مثلا لها حالة مثل الترس الحالي و نوع البدالات و لها عجلتان و لها عدد من التروس يساوي 20 ، وللعجلة سلوك أيضاً فإنها تفرمل وتسُرع و تبطيء.
تمثيل الأشياء (
Objects) في البرمجة يشترك مثل الأشياء في العالم الحقيقي في إنه لها أيضاً
حالة (صفات حالية)
وسلوك.
ال
Object في البرمجة يعبر عن الحالة عن طريق متغير أو أكثر. المتغير
Variable هو معلومة لها إسم نعرفها به و المتغير له نوع (
type) مثل أن يكون رقما صحيحاً Integer أو حرف char
و
الObject في البرمجة يعبر عن السلوك عن طريق ال
Function أي الوظيفة أو الخدمة التي يستطيع أن يقدمها.
أي أن
الObject هو مجموعة من المتغيرات و الوظائف المرتبطة.
فبإستخدام ال Objectsفي البرنامج نستطيع أن نحاكي ونمثل الأشياء في العالم الحقيقي ،من الممكن أن نعبر عن اللاعبين في صورة Objects في لعبة كمبيوتر مثل الFifa.
كل شيء يستطيع أن يعرفه الObject هو حالة
state يمثلها عن طرق المتغيرات
Variables و أي شيء يستطيع أن يفعله هو وظيفة
Function (سنستخدم كلمة
method بدلاً من كلمة Function )
فمثلا نستطيع أن نعبر عن الدراجة بمجموعة من المتغيرات مثل أن سرعتها 30 كيلومتر في الساعة و سرعة دوران العجلة هي 90 لفة في الدقيقة و لها خمسة تروس. هذه المتغيرات تعرف بInstance variables أي المتغيرات التي تعبر عن Object محدد ، فمثلا أنا وأنت بشر ولكن أنا لي أنا أسمي هاني و أنت إسمك محمد (مثلا) فلكل منا المتغير (
إسم) ولكن القيمة التي يحملها هذا الإسم مختلفة. أتمنى أن يكون المفهوم بstate أي الحالة قد إتضح.
والدراجة أيضا لها
methods لتفرمل وتسرع و.... هذه ال methods تسمى ب
instance methods وذلك لأن هذه ال methods تغير في الحالة
state أي قيم المتغيرات الخاصة ب object محدد. فمثلا عندما نطلب ال method التي إسمها
أسرعي في دراجتي فإن سرعتها قد تغيرت وأصبحت 40 كيلومتر بدلا من 30 كيلومترا وبالطبع هذه التغير غير قيمة السرعة أي هو تغير أثر في دراجتي ولم يؤثر في دراجات أخرى.
الآن نستطيع أن نقول أن ال
Object Oriented Programming هو البرمجة التي بها نستطيع أن نحاكي الأشياء الموجودة في العالم الحقيقي في صورة
Objects لها حالة
state و سلوك
behavior، و نستطيع أن نقول أن حالة = instant variables و السلوك = instance methods
أي أن ال Object Oriented Programming هي البرمجة التي تميل ناحية كتابة البرنامج عن طريق وصف الأشياء أكثر من كتابة أوامر ومصطلحات خاصة بالآلة.
مع ال OOP المبرمج ليس مقيد بأنواع ثابتة من المتغيرات مثل integer , char, WORD بل إنه يستطيع أن يُعرف أنواع جديدة و يُخلّق متغيرات من هذه الأنواع الجديدة.
كما قلنا فإننا نستطيع أن نعرف Objects كل منها له حالته فأنا لي إسمي و وظيفتي وهوايتي و لكن هناك الكثيرون أيضا بشر مثلي لنا صفات وسلوك مشترك فنحن ننتمي إلى عائلة البشر وهناك عائلات أخرى من الأشياء الأخرى فهناك عائلة الكلاب وعائلة الأسماك وعائلة السيارات وهكذا.
فالobjects التي تنتمي لنفس العائلة لها صفات مشتركة و أيضا لها سلوك مشترك.
كلمة عائلة تعني أيضاً نوع وفي الOOP نكتبها
class ،وقد كان أول ظهور لهذا المصطلح كان في لغة ال Simula-67 .
فمثلاً إذا كتبنا برنامج عن المدارس ستكون ال
classes هي : المدرسون والطلبة و المواد الدراسية، أما الأستاذ أحمد والأستاذة أمل فهم objects من النوع (
class) المدرسون ،و أما الفيزياء و الرياضيات فأنها Objects من ال class مواد دراسية . قد تسألني وأين ال objects من ال class الطلبة ؟يبدو إنهم في أجازة الآن
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة] .
بالطبع كل الobjects التي تنتمي لنفس ال class صفات مشتركة فالمدرسون صفاتهم تكون : المادة التي يدرسها، وأرقام الفصول التي يدرس لها و إسم المدرس ، أما ال objects التي تنتمي إلى ال class المدرسون فلكل منهم المادة التي يدرسها فأستاذ أحمد يدرس الرياضيات والفصول التي يدرسها فهي الفصول 1 و 2 من السنة الدراسية أولى ثانوي، أما الأستاذة أمل فإنها تدرس مادة الفيزياء وتدرس لكل فصول الصف الثاني الثانوي.
بالطبع المدرسون لهم سلوك أو خدمات يقدمونها methods مثل يدرس و يصحح ، والobjects هنا تقدم هذه الخدمات ولكن حسب المادة التي يدرسها.
لذا ففي ال
OOP فأننا نُعرف أنواع جديدة
classes مثلما و نُخلِّق منها
objects مثلما نُخلِّق متغيرات
variables من الأنواع الأساسية التي تكون جزء من اللغة و التي تسمى
built in types مثل ال integer و char .
لذا ال
class هي أيضاً
types ولكنك أنت الذي يعُرّفها.
لنفترض أنه عندنا
class إسمها مصباح Light من
والmethods التي تقدمها هي ينير on و يغلق off
فكيف نعبر عن هذا في الجافا