بسم الله الرحمن الرحيم
و الصلاة و السلام على اشرف المرسلين سيدنا محمد و صحبه اجمعين و تابعيه و تابعيهم بإحسان الى يوم الدين
هذه اول مشارك لى فى هذا المنتدى الرائع واردت ان اشارك فى بهذا الدرس البسيط
نبتدئ يا اخوة اليوم بحمد الله تعالى في البرمجة الكائنية الموجهة
أرجو منك اخي القارئ ان تكمل القراءة إلى آخر الدرس و تركز قليلا لأني اعتمدت اكثر من تعريف و في كل مرة اضيف شيئا جديدا في التعريفات و بإذن الله ستنهي الصفحة و انت فاهم للدرس
Object-Oriented Programming
مقدمة حول البرمجةالكائنية الموجهة ,
في جميع برامجنا وحتى الآن ، قمنا بتصميم برنامجنا حول دوال أو كتل من البيانات التي تتلاعب بالبيانات.فمعظم برامجنا الأخيرة كانت عبارة عن مجموعة من الدوال التي تحتوي بنفسها على مجموعة من التعليمات و في الكود الرئيسي قمنا بتوجيه هذه الدوال حتى تقوم بالعمل الذي نريده ويسمى هذا طريقة البرمجة الإجرائية الموجهة procedure-oriented.
وهناك طريقة أخرى لتنظيم برنامجك الذي هو الجمع بين الوظيفة والبيانات وتغليفها معا فيما يسمى بالكائن أي أننا نقوم بجمع الوظائف او التعليمات مع البيانات و نقوم بتغليفها و جمعها في كائن وهذا ما يسمى نموذج البرمجة الكائنية التوجه Object-Oriented Programming
للمبرمج الحرية في استعمال اي طريقة تناسبه و لكن في البرامج الكبيرة التي تحتوي على كم هائل من المعلومات و المهام لابد من استعمال البرمجة الكائنية الموجهة لأننها و كما قلنا سابقا تمكن المبرمج من جمع البيانات و الوظائف معا و تمكنه من تغليفها في كائن واحد و هذا ما يساعد في تنظيم البرنامج حتى و لو كان ضخما و يعطي هذا النمط من البرمجة الحرية للمبرمج بتوجيه الكائنات و الوظائف حتى تعطيه النتائج الماردة من خلال مشروعه
لن أستطيع ان اعرف البرمجة الكائنية الموجهة في مقدمة فهذا محال لأننا الآن أمام نمط برمجي جديد علينا كليتا لذا سأحاول في هذا الدرس تعريف أقسام هذا النمط و اعطاء العديد من الأمثلة و في كل مرة نتوقف بالشرح عند كل جزء و عندما تتكون لدينا صورة واضحة سندعم فهمنا بمجموعة من البرامج الكاملة
الكلاس Class
تعتبر الكلاس كوعاء يحوي العديد من الوظائف و المعرفات فالكلاس هي عبارة عن بيضة ان صحّ التعبير تحوي داخلها على بيانات و وظائف و نستطيع تشبيهها بالدوال التي رأيناها سابقا إذ ان الدالة تحوي بداخلها مجموعة من التعريفات و التعليمات ثم تطبق هذه التعليمات على المتغير الذي نسنده لهذه الدالة و ذلك عن طريق التعريفات
نفس الشيئ بالنسبة للكلاس و لكن مع توسع كبير هذه المرة
نقبل بهذا التعريف الأولي و سندعمه بتعريفات أخرى في باقي الدرس
إنشاء الكلاس
لإنشاء كلاس جديد نقوم بكتابة الكلمة المخصصة class ثم تليها اسم الكلاس
مثال
- class My_class:
- 'exemple of class data atributes'
- a=125
- b=8958
- print My_class.a
- print My_class.b
قمنا باختيار اسم للكلاس My_class
و هنا ملاحظة
يستحسن كتابة الحرف الأول من اسم الكلاس بالحجم الكبير فهذا يعتبر عرف عند كل المبرمجين و في كل لغاة البرمجة
طيب الآن ركزو معي قليلا
ماهي الكلاس ؟؟
تعتبر الكلاس صنف مثلا من الكائنات الحية نأخذ الطيور فالطيورصنف من الكائنات الحية
لو دققنا في هذا الصنف نجد ان لكل طائر صفاة خاصة به
اللون و الطول الوزن ,,,,,,,,,,
كذلك لكل كلاس صفات خاصة بها و تسمى الصفاة بـattributes
مثال
فلننشئ كلاس و نسميها Bird ثم نعطيها صفات خاصة بها
[GCode=Python]class Bird:
pass
Bird.color='yellow'
Bird.poid='58gr'
Bird.name='coucou'
print Bird.color
print Bird.poid
print Bird.name
[/GCode]
قمنا بإنشاء الكلاس و تركناها فارغة و نستطيع فعل هذا بواسطة الكلمة pass
المهم بعد الإنشاء اعطينا هذه الكلاس attributes او صفاة خاصة بها تميزها عن باقي الكلاس الأخرى في البرنامج و هذه الصفاة هي اللون و الوزن و الإسم
نعرف الكلاس مرة أخرى
الكلاس ماهي إلاّ وعاء يحوي داخله مجموعة من الصفاة و الوظائف
أو بعبارة اخرى الكلاس عبارة عن بويضة تظم داخلها مجموعة من الصفات و التي نستعملها في البرنامج كأساس لتعبئة البيانات بالإضافة للصفاة تضم الكلاس ايضا مجموعة من الوظائف methodes
تمثل هذه الـ methodes الوظائف و المهام التي تقوم بها الكلاس
فلو عدنا للمثال الذي ضربناه سابقا صنف الطيور له صفات تميزه عن باقي الأصناف و كذلك له مهام يقوم بها مثل الطيران الأكل النوم الصيد ,,,
كذلك الكلاس لها وظائف معينة تقوم بها في البرنامج و تنبني هذه الوظائف على الصفاة
و نستطيع ان نلخص تعريف الكلاس في السطر التالي
الكلاس= مجموعة من الصفات+ مجموعة من الوظائف
نتفق الآن ان الكلاس تحتوي على صفاة و وظائف رأينا مثال بسيط جدا عن الصفاة سندرس الآن الوظائف و الطريقة المعتمدة لإدراج الصفاة
لكن قبل هذا ندرس الحالات Instances فهي بسيطة جدا ننهيها و نمر للوظائف
Class Instances
معنى Instancesهي اسناد الكلاس إلى كائن -Instances- يرث هذا الأخير كل خصائص الكلاس و بواسطة هذا الـInstances نستطيع استغلال وظائف الكلاس و نقول ان هذه instance صارة عبارة عن حالة للكلاس
مثال
[GCode=Python]class My_class:
'exemple of class Instance'
a=125
b=8958
inst=My_class()
print inst.a
print inst.b
print inst.a+inst.b
[/GCode]
كما نلاحظ قمنا بإسناد instances inst الى الكلاس My_class
و بهذا ورث inst كل خصائص الكلاس و استطعنا من خلاله استغلال بينات الكلاس
طيب الآن سنعرف أهمية استعمال instance
عندما ندخل الآن للوظائف
( Method (Functional attributes
ما هي الميثود ؟؟
قلنا قبل قليل أن الكلاس تحتوي على صفاة و وظائف الصفاة رأيناها تبقى لنا الوظائف سنضرب الآن مثال آخر
نفرض انه لدينا سيارة تمثلها كلاس
طبعا كل سيارة لها صفاة خاصة بها هي اللون و الحجم .........
هذه صفاة السيارة
و للسيارة أيضا وظائف تتمثل هذه الوظائف في
الإنطلاق التوقف الدوران ...................
سننشأ الآن كلاس نسميها Car و نعطيها الصفات اولا
[GCode=Python]class Car:
def __init__(self, color, size):
self.color=color
self.size=size
[/GCode]
نشرح خطوة خطوة
بعدما انشأنا الكلاس قمنا باعطائها صفاة معينة لها
__init__ هي عبارة عن كلمة محجوزة للغة البايثون و هي ميثود ايضا معنها initialisation أي التهيئة و اسمها يدل على وظيفتها تقوم هذه الميثود بتهيئة الصفاتو هي تبقى بلا عمل فإذا اسندنا حالة instance للكلاس
تنطلق الميثود __init__ في العمل و تقوم بتهيئة الصفاة و اسنادها للحالة التي انشأنها
سنفهم هذا عندما نكمل الكود
و كل ماكتبناه في هذا الكود يعتبر صفة للكلاس Car و هي ليست دالة فلا يجب الخلط حتى و لو ابتدئ السطر بـ def لا تسمى هنا دالة بتاتا و إنما تسمى method للكلاس Car
الآن قمنا بإنشاء الكلاس و اعطيناها صفاة كيف سنستفاد من هذه الصفاة
ممممممممممممممم
يجب اولا ان ننشئ حالة instance و من خلالها نستغل هذه الصفاة
مثال
[GCode=Python]BMW=Car('red', '5 places')
print BMW.color
print BMW.size
[/GCode]
قمنا بإنشاء حالة BMW و اسنادناها للكلاس في هذه اللحظة تنطلق الميثود __init__ و تقوم بتهيئة الكلاس و تهيئة الصفاة ثم تقوم بتعويض self
الخاص بالكلاس و نقله للكائن الجديد BMW
self هنا تلعب دور الوسيط بين الميثود التابعة للكلاس و ماأدخلناه من بيانات في الكائن الجديد او الحالة الجديدة BM
و لنا الخيار باستعمال self أو this
طبعا مستعملين الجافا و السي شارب سيفضلون this لأنها هي نفسها التي في لغة الجافا و السي شارب نعطي نفس المثال و لكن بعبارة this
[GCode=Python]class Car:
def __init__(this, color, size):
this.color=color
this.size=size
BMW=Car('red', '5 places')
print BMW.color
print BMW.size
[/GCode]
كما في self تماما تقوم this بربط صفاة الكلاس Car إلى الحالة او الكائن الجديد BMW
أظن يا اخوتي أن مفهوم البرمجة الكائنية بدئ يتضح نوعا ما
الآن رأينا صفاة الكلاس و رأينا كيفية استعمالها سنرى الآن الوظائف
في نفس المثال سنقوم بإضافة وظائف لهذه السيارة او بمعنى ادق نضيف ميثود وظيفية للكلاس Car
[GCode=Python]class Car:
def __init__(this, color, size):
this.color=color
this.size=size
def start(self):
print "the car started"
def stop(self):
print "this car stoped"
BMW=Car('red', '5 places')
print BMW.color
print BMW.size
BMW.start()
BMW.stop()
[/GCode]
أظفنا للنفس الكلاس وظائف و هي الإنطلاق و التوقف و نلاحظ ان الميثود startو الميثود stopتشبه الدوال و لكن قلنا انها في هذه الحالة تسمى methodو السطر الأول -صفاة الكلاس- تسمى attributes
مثال آخر اكثر واقعي
لدينا كلاس اسمها student تحتوي على صفاة و هي الإسم و العمر و النقطة الأول و النقطة الثانية كما تحتوي هذه الكلاس على وظيفة واحدة و هي حساب معدل النفطتين
[GCode=Python]class Student:
def __init__(self, name, age, n1, n2):
self.name=str(name)
self.age=str(age)
self.n1=int(n1)
self.n2=int(n2)
def moy(self):
m=(self.n1+self.n2)/2
print m
s=Student('Ahmed', '18',15, 19)
s.moy()
[/GCode]
نلاحظ اننا اذا استعملنا احد صفاة الكلاس يجب كتابة كلمة self أو this
قبلها لأنه كما قلنا ان وظيفة هذه العبارة هي تعويض القيم عند اسناد الكلاس لكائن جديد و اسمه في الكود s
نلخص مرة اخرى معتمدين على هذا المثال
الكلاس عبارة عن صنف يظم داخلة قسمين اثنين
مجموعة من الصفاة و تسمى attributes
نقوم يادراجها من خلال الصيغة التالية
[GCode=Python]def __init__(self or this, attributes)[/GCode]
بعد ذلك نقوم بربط الصفاة بواسطة الكلمة self أو this
self,صفة أ=صفة أ
this,صفة أ=صفة أ
بعد ذلك نقوم بإدراج الوظائف لهذه الكلاس و هي شبيهة بالدوال و لكن لا تسمى دوال بل تسمى method
هنا يصبح الأمر عادي نعتمد على الصفاة و البيانات المدرجة في attributes
لكي ننشئ وظائف method للكلاس
هذا يا اخواني يعتبر مدخل متواضع للبرمجة الكائنية الموجهة مازال ينتظرنا الكثير في هذا النمط في الدروس القادمة
سأحاول التركيز اكثر على الأمثلة التطبيقية
تم بحمد الله
وانتظروا المزيد