Object Oriented Programming
البرمجة الكائنية التوجة
أنا الاسم باللغة العربية يمكن تقيل شوية بس ده أكيد مش لضعف في اللغة العربية ولكن أكيد لضعف في المتحدثين بيها وده طبعا علشان احنا بلاهوية؛ بلا معنى؛ مالناش أي لازمة في كوكب الأرض. مش ده موضوعنا وأنا مش هأوضح معنى الاسم ولكن أفضل أقول استخدامه وهو:
Real World Modeling
يعني ايه؟
معناه إننا بنعمل محاكاة للعالم الحقيقي في البرمجة. يعني ببساطة بأخلي البرنامج عبارة عن مجموعة كائنات متصلة ببعضها، كل كائن ليه مجموعة من الخصائص والوظائف إلي بيقوم بيها وأيضا مجموعة من الأحداث إلي بتـؤثر في الكائن ده.
الحقيقة في نوعين من البرمجة:
البرمجة الإجرائية Procedural Programming.
البرمجة الكائنية التوجة OOP .
البرمجة الإجرائية وإلي هي عبارة عن مجموعة أوامر مرصوصة تحت بعض ومرتبطين ببعض. ويمكن إحنا لما كنا في الكلية في قسم ميكانيكا، مكناش نعرف الفرق بين الاتنين وده طبعا لأننا مش متخصصين ومحتاجين البرمجة في بعض العمليات الحسابية المعقدة ولكن وإحنا في الفرقة التانية كنا بندرس لغة C ولكن كان مكتوب على الكتاب Programming Using C/C++ وفضلنا معتقدين إن لغة C++ نسخة متقدمة من C وإن الاختلاف في بعض الأوامر.
ولكن يمكن علشان أنا بأحب البرمجة وقرأت فيها شوية عرفت إن اللغتين مالهمش دعوة ببعض، ده روسي وده عبري وإن لغة C لغة تقليدية أو اجرائية ولغة C++ لغة كائنية التوجة؛ بل من أقوى اللغات كائنية التوجة.
اللغات الإجرائية أو التقليدية زي C وFORTRAN 77 وPascal وBasic واللغات الكائنية التوجة زي C++ وزي C# وVB.Net وايضا لغة FORTRAN 90 تدعم بعض خصائص البرمجة كائنية التوجة!
بالنسبة للبرمجة الكائنية التوجة فهي ليها بعض المعالم إلي بتدعمها وهي:
الوراثة Inheritance.
التغليف Encapsulation.
تعدد الواجهات Polymorphism.
وبالطبع كل المعالم والعمليات دي بتتم من خلال الكائنات
يعني أيه كائن؟
يعني أنا، يعني سيارة، يعني كتاب، يعني كرسي، يعني تليفون ... يعني أي شئ ليه خضائض معينة وبيقوم بوظائف محددة.
يعني ايه الكائنات مرتبطة ببعضها؟
يعني دلوقتي "أنا" أو أي حد عبارة عن "كائن" والسيارة والكرسي والكتاب كائن، علاقتي بيهم أيه؟
أنا باقود السيارة وعن طريق بعض الوظائف إلي بأقوم بيها اثناء القيادة؛ هي بالتالي بتقوم ببعض الوظائف الخاصة بيها.
وهكذا بالنسبة للكائنات الاخري
في حاجة تانية، لو أنا وأخويا وابن عني وبنت عمتي وشوية ناس تانين معرفهمش ... أي حاجة
أيه إلي احنا بنشترك فيه؟
بنشترك في اننا بني آدمين
لينا عنين بلون معين
شعر بلون وشكل معبن
والطول كذا
وهكذا
يعني دلوقتي أنا كائن من فئة البني آدمين وقيم خصائص الفئة دي بالنسبة لي مختلفة، ولابن عمي مختلفة، ولخطبيتي مختلفة وهكذا.
ازاي الشكل ده بيتم؟
فئة البني آدمين
بني آدم.الطول
بني آدم.لون العنين
بني آدم.لون الشعر
بني آدم.شكل الشعر
...
...
...
وبيقوم بوظائف معينة:
بني آدم. مشي
بني آدم.جري
بني آدم.ضحك
وهكذا
باختصار الخصائص عبارة عن صفات والوظائف عبارة عن أفعال
وطبعا ده بيطبق على كل الكائنات.
كدة إحنا وضحنا بالبلدي كدة معنى كائن وفئة.
يعني إيه وراثة؟
يعني وراثة ... مش محتاجة شرح!
لأ محتاجة شرح طبعا، وهي إن في لو عندي كائن ضمن فئة معينة وليه بعض بعض الخصائص والوظائف إلي موجودة في فئة تانية.
هل أقوم بتعريف الفئة مرة أخرى وأكبر حجم البرنامج؟
لأ ... خاصية الوراثة بتخليك تاخد الخصائص والوظائف إلي انت عايزها وتضيف إلي انت عايزه.
مثلا فئة البني آدمين
لو عملنا ليها وراثة لفئة جديدة للمواطن المصري مثلا:
أكيد هناخد خصائص ووظائف البني آدمين، مع إضافة خصائص خاصة بالمواطن المصري زي الكرش وخشونة المفاصل وضعف النظر والذاكرة من كتر الــ ...... غير فيروس سي والفشل الكلوي والسرطان والتشكيلة الحلوة إلي عندنا.
مع إضافة بعض الوظائف إلي مش بيعملها غير المواطن المصري ... زي شرب الحشيش، وبص الولاد على البنات ورسم البنات على الولاد.
والأحداث إلي بتتم على المواطن المصري ... زي النصب عليه وضربه على قفاه وتعذيبه في دنيته وفي مرضه وحتى في آخرته.
الخاصية التانية للبرمجة الكائنية التوجة وهي التغليف:
يعني إيه؟
أنا قلت إن البرمجة الإجرائية عبارة عن أوامر تحت بعضها ومرتبطة ببعضها ولكن البرمجة كائنية التوجة عبارة عن كائنات مستلقة، فلو قمت بتغيير خصائص أو وظائف كائن معين، مش هيأثر في الكائنات التانية.
ودي بيخلي عندنا ميزة اسمها امكانية إعادة الاستخدام للفئات أو الكائنات لأانها مش مرتبطة أو معتمدة على حاجاة تانية، ولو أي حاجة اتغيرت مش هتأثر في حاجة.
مثلا الفئة بتاعت المواطن المصري، كل الفئات بتاعت كل المواطنين التانين بتتغير في خصائصهم ووظائفهم وشكلهم بدون الـتأثير في الفئة بتاعت المواطن المصري ... إحنا زي ماحنا.
تالت خاصية، وهي تعدد الواجهات
وتعني استخدام حاجة واحدة بنفس الاسم في أكتر من حاجة، يعني على سبيل المثال لو مثلا عندي عنصر من عناصر برنامج وعايز اعمله محاذاه ... ممكن استخدم المحاذاة دي على كل العناصر مهما كانت رغم اختلافها.
في النهاية هنلاقي ... إن البرمجة كائنية التوجة معمولة علشان تسهيل البرمجة وإنها تكون محاكاة للعالم الحقيقي وأيضا لتصغير حجم البرنامج وامكانية الإضافة والتعديل دون تأثر البرنامج.