مجتمع لينوكس المصري
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

مجتمع لينوكس المصري

موش هتقدر تطفي الكمبيوتر
 
الرئيسيةالبوابةأحدث الصورالتسجيلدخول

 

 [شرح] الــ Oop في لغة البايثون

اذهب الى الأسفل 
كاتب الموضوعرسالة
taaz30




المساهمات : 114
تاريخ التسجيل : 28/11/2008

[شرح]  الــ Oop في لغة البايثون Empty
مُساهمةموضوع: [شرح] الــ Oop في لغة البايثون   [شرح]  الــ Oop في لغة البايثون Icon_minitimeالأحد ديسمبر 28, 2008 12:10 pm


بسم الله الرحمن الرحيم
و الصلاة و السلام على اشرف المرسلين سيدنا محمد و صحبه اجمعين و تابعيه و تابعيهم بإحسان الى يوم الدين

اخوتي الكرام في هذا المنتدى الرائع اود ان اشارككم بدرس متواضع حول OOP في لغة البايثون و هذا الدرس مقتطف من دورة لهذه اللغة الرائعة و اردت ان اشارككم به لأن المصادر العربية قد ظلمت هذه اللغة خاصتا في مجال OOP و بهذا حرم الكثير من المسلمين من الإستفادة من قوة هذه اللغة و الكل يعلم اهمية OOP في عصرنا هذا


نبتدئ يا اخوة اليوم بحمد الله تعالى في البرمجة الكائنية الموجهة
أرجو منك اخي القارئ ان تكمل القراءة إلى آخر الدرس و تركز قليلا لأني اعتمدت اكثر من تعريف و في كل مرة اضيف شيئا جديدا في التعريفات و بإذن الله ستنهي الصفحة و انت فاهم للدرس
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 ثم نعطيها صفات خاصة بها
اقتباس :
class Bird:
pass
Bird.color='yellow'
Bird.poid='58gr'
Bird.name='coucou'

print Bird.color
print Bird.poid
print Bird.name
قمنا بإنشاء الكلاس و تركناها فارغة و نستطيع فعل هذا بواسطة الكلمة pass
المهم بعد الإنشاء اعطينا هذه الكلاس attributes او صفاة خاصة بها تميزها عن باقي الكلاس الأخرى في البرنامج و هذه الصفاة هي اللون و الوزن و الإسم

نعرف الكلاس مرة أخرى

الكلاس ماهي إلاّ وعاء يحوي داخله مجموعة من الصفاة و الوظائف
أو بعبارة اخرى الكلاس عبارة عن بويضة تظم داخلها مجموعة من الصفات و التي نستعملها في البرنامج كأساس لتعبئة البيانات بالإضافة للصفاة تضم الكلاس ايضا مجموعة من الوظائف methodes
تمثل هذه الـ methodes الوظائف و المهام التي تقوم بها الكلاس
فلو عدنا للمثال الذي ضربناه سابقا صنف الطيور له صفات تميزه عن باقي الأصناف و كذلك له مهام يقوم بها مثل الطيران الأكل النوم الصيد ,,,
كذلك الكلاس لها وظائف معينة تقوم بها في البرنامج و تنبني هذه الوظائف على الصفاة
و نستطيع ان نلخص تعريف الكلاس في السطر التالي

الكلاس= مجموعة من الصفات+ مجموعة من الوظائف

نتفق الآن ان الكلاس تحتوي على صفاة و وظائف رأينا مثال بسيط جدا عن الصفاة سندرس الآن الوظائف و الطريقة المعتمدة لإدراج الصفاة
لكن قبل هذا ندرس الحالات Instances فهي بسيطة جدا ننهيها و نمر للوظائف

Class Instances

معنى Instancesهي اسناد الكلاس إلى كائن -Instances- يرث هذا الأخير كل خصائص الكلاس و بواسطة هذا الـInstances نستطيع استغلال وظائف الكلاس و نقول ان هذه instance صارة عبارة عن حالة للكلاس
مثال

اقتباس :
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

كما نلاحظ قمنا بإسناد instances inst الى الكلاس My_class
و بهذا ورث inst كل خصائص الكلاس و استطعنا من خلاله استغلال بينات الكلاس
طيب الآن سنعرف أهمية استعمال instance
عندما ندخل الآن للوظائف


( Method (Functional attributes


ما هي الميثود ؟؟

قلنا قبل قليل أن الكلاس تحتوي على صفاة و وظائف الصفاة رأيناها تبقى لنا الوظائف سنضرب الآن مثال آخر
نفرض انه لدينا سيارة تمثلها كلاس
طبعا كل سيارة لها صفاة خاصة بها هي اللون و الحجم .........
هذه صفاة السيارة
و للسيارة أيضا وظائف تتمثل هذه الوظائف في
الإنطلاق التوقف الدوران ...................
سننشأ الآن كلاس نسميها Car و نعطيها الصفات اولا

اقتباس :
class Car:
def __init__(self, color, size):
self.color=color
self.size=size
نشرح خطوة خطوة

بعدما انشأنا الكلاس قمنا باعطائها صفاة معينة لها
__init__ هي عبارة عن كلمة محجوزة للغة البايثون و هي ميثود ايضا معنها initialisation أي التهيئة و اسمها يدل على وظيفتها تقوم هذه الميثود بتهيئة الصفاتو هي تبقى بلا عمل فإذا اسندنا حالة instance للكلاس
تنطلق الميثود __init__ في العمل و تقوم بتهيئة الصفاة و اسنادها للحالة التي انشأنها
سنفهم هذا عندما نكمل الكود
و كل ماكتبناه في هذا الكود يعتبر صفة للكلاس Car و هي ليست دالة فلا يجب الخلط حتى و لو ابتدئ السطر بـ def لا تسمى هنا دالة بتاتا و إنما تسمى method للكلاس Car
الآن قمنا بإنشاء الكلاس و اعطيناها صفاة كيف سنستفاد من هذه الصفاة
ممممممممممممممم

يجب اولا ان ننشئ حالة instance و من خلالها نستغل هذه الصفاة
مثال

اقتباس :
BMW=Car('red', '5 places')
print BMW.color
print BMW.size
قمنا بإنشاء حالة BMW و اسنادناها للكلاس في هذه اللحظة تنطلق الميثود __init__ و تقوم بتهيئة الكلاس و تهيئة الصفاة ثم تقوم بتعويض self
الخاص بالكلاس و نقله للكائن الجديد BMW
self هنا تلعب دور الوسيط بين الميثود التابعة للكلاس و ماأدخلناه من بيانات في الكائن الجديد او الحالة الجديدة BM
و لنا الخيار باستعمال self أو this
طبعا مستعملين الجافا و السي شارب سيفضلون this لأنها هي نفسها التي في لغة الجافا و السي شارب نعطي نفس المثال و لكن بعبارة this

اقتباس :
class Car:
def __init__(this, color, size):
this.color=color
this.size=size

BMW=Car('red', '5 places')
print BMW.color
print BMW.size

كما في self تماما تقوم this بربط صفاة الكلاس Car إلى الحالة او الكائن الجديد BMW
أظن يا اخوتي أن مفهوم البرمجة الكائنية بدئ يتضح نوعا ما

الآن رأينا صفاة الكلاس و رأينا كيفية استعمالها سنرى الآن الوظائف
في نفس المثال سنقوم بإضافة وظائف لهذه السيارة او بمعنى ادق نضيف ميثود وظيفية للكلاس Car

اقتباس :
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()

أظفنا للنفس الكلاس وظائف و هي الإنطلاق و التوقف و نلاحظ ان الميثود startو الميثود stopتشبه الدوال و لكن قلنا انها في هذه الحالة تسمى methodو السطر الأول -صفاة الكلاس- تسمى attributes

مثال آخر اكثر واقعي
لدينا كلاس اسمها student تحتوي على صفاة و هي الإسم و العمر و النقطة الأول و النقطة الثانية كما تحتوي هذه الكلاس على وظيفة واحدة و هي حساب معدل النفطتين

اقتباس :
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()
نلاحظ اننا اذا استعملنا احد صفاة الكلاس يجب كتابة كلمة self أو this
قبلها لأنه كما قلنا ان وظيفة هذه العبارة هي تعويض القيم عند اسناد الكلاس لكائن جديد و اسمه في الكود s
نلخص مرة اخرى معتمدين على هذا المثال
الكلاس عبارة عن صنف يظم داخلة قسمين اثنين
مجموعة من الصفاة و تسمى attributes
نقوم يادراجها من خلال الصيغة التالية
اقتباس :
def __init__(self or this, attributes)
بعد ذلك نقوم بربط الصفاة بواسطة الكلمة self أو this
self,صفة أ=صفة أ
this,صفة أ=صفة أ
بعد ذلك نقوم بإدراج الوظائف لهذه الكلاس و هي شبيهة بالدوال و لكن لا تسمى دوال بل تسمى method
هنا يصبح الأمر عادي نعتمد على الصفاة و البيانات المدرجة في attributes
لكي ننشئ وظائف method للكلاس


هذا يا اخواني يعتبر مدخل متواضع للبرمجة الكائنية الموجهة مازال ينتظرنا الكثير في هذا النمط في الدروس القادمة
سأحاول التركيز اكثر على الأمثلة التطبيقية



تم بحمد الله


********************************************

الرجوع الى أعلى الصفحة اذهب الى الأسفل
taaz30




المساهمات : 114
تاريخ التسجيل : 28/11/2008

[شرح]  الــ Oop في لغة البايثون Empty
مُساهمةموضوع: رد: [شرح] الــ Oop في لغة البايثون   [شرح]  الــ Oop في لغة البايثون Icon_minitimeالأحد ديسمبر 28, 2008 12:19 pm


اللدرس الثاني

بسم الله الرحمن الرحيم
و الصلاة و السلام على رسول الله
اخوتي في الله السلام عليكم و رحمة الله و بركاته
نتابع ما ابتدءناه في الدرس السابق و هذا الدرس يعتبر التعريف الصحيح و المعتمد لكل ما رأيناه في الدرس السابق فلم اتعمد في الدرس السابق استعمالا لكثير من التسميات و حاولت ان اشرح بعض المفاهيم بصورة تقريبية و في هذا الدرس سنعرف كل مارأيناه سابقا بصورة
رسمية و من فهم الدرس السابق سيمر على هذا الدرس بسهولة لأنه عبارة عن تثبيت المفاهيم السابق و لن نأتي بشيئ جديد
و نبتدء بحول الله بمثال نراجع فيه الدرس السابق
المثال عبارة عن كلاس اسمها Info تحتوي على صفاة و على وظائف

نتتبع المثال ثم نشرح

اقتباس :
import os
import sys
class Info :
def __init__(self, name, mpass, age, email):
self.name=str(name)
self.mpass=str(mpass)
self.age=int(age)
self.email=str(email)
def save_info(self, nfile):
self.nfile = nfile
try:
ff= open(self.nfile, 'a+')
ff.write('%s %s %d %s %s ' %(self.name, self.mpass, self.age, self.email, os.linesep))
ff.close()
except Exception, e:
print "Error",e
Chouaib=Info('chouaib', '00000', 22, 'lem_chouaib@hotmail.fr')
Chouaib.save_info('/home/chouaib/info_user')
الكلاس مجهزة بميثود __init__ و هذه الأخيرة تحتوي على أربعة بارامترات و هي الإسم و رقم السري و العمر و الإيميل
بعد تهيئة الميثود __init__ تقوم بربط الصفة self مع الصفاة المدرجة في البارمتر
و كل هذا يدخل تحت وظيفة __init__التي تهيئ الصفاة (attributs) و تقوم بعملية ربط هذه الصفات مع الأداة self
فــ self أو this تعملان كأداة ربط بين الصفات (attributs) و الوظائف التي تعتمد عليها داخل الكلاس نفسها من خلال الميثود
اقتباس :
ff.write('%s %s %d %s %s ' %(self.name, self.mpass, self.age, self.email, os.linesep))
كما في المثال قمنا باستعمال الـ attributs الخاصة بالـميثود__init__في ميثود اخرى هي save_info
هذا داخل الكلاس نفسها و مثال آخر عن الكائنات المشتقة كما في الكائن الجديد الذي اشتققناه
اقتباس :
Chouaib=Info('chouaib', '00000', 22, 'lem_chouaib@hotmail.fr')
ففي هذه الحالة تقوم self بربط الصفاة المدخلة الجديدة أو بتعبير آخر البيانات المدخلة
مع صفاة الكلاس الأصلية و Info
و كل هذا العمل يدخل تحت عمل الميثود__init__ التي سنعرف اسمها الحقيقي بعد قليل

الكلاس Info تحتوي على ميثود ثانية اسمها save_info تقوم هذه الميثود بحفظ البيانات المدخلة في ملف خاص و هذا طبعا بالإعتماد على الـ attributs في الميثود __init__
و هنا نلاحظ ان الميثود save_info تحتوي هي الأخرى على صفة attribut
فلا يمنع ان تضم الميثود صفات خاصة بها و في نفس الوقت تستعمل صفات خصاة بميثود اخرى و لكن قبل استعمال الصفة يجب دائما تهيئتها و ربطها بالأدات self
اقتباس :
def save_info(self, nfile):
self.nfile = nfile

اذا اخي القارئ بوصولك هنا تكون قد تكونت لديك صورة واضحة حول البرمجة الموجهة و سأحاول في الفقرة التالية اعطاء التعريف المعتمد عليه و تثبيت المفاهيم التي اكتسبتها من الدرس السابق
**
البرمجة الكائنية الموجهة هي نمط او اسلب جديد او طريقة برمجية لها قواعد خاصّة بها لكتابة الأكواد و سنلاحظ عند التعمق ان هذا الأسلوب صارم جداّ من ناحية اتباع قواعده
**
صرامة قواعد OOP تساعد المبرمج على تنظيم مشاريعه مهما كانت كبيرة و معقدة فهي كقوانين المرور فهذه الأخيرة تنظم طريقة السير و تمنع الحوادث حتى داخل المدن المعقدة كذلك قوانين –ووب اذا احترمها المبرمج سيتمكن من اكمال مشروعه و بطريقة منظمة و آمنة
**
فكرة OOP
الفكرة الأساسية لـ OOP تكمن في جمع مجموعة من البيانات و المعطيات attributs
و مجموعة من التعليمات او اللوغاريتميات التي تعالج هذه البيانات methods
و كل هذا يكون مضغوط encapsul او محتوى داخل كائن واحد object
و نستخلص من ما سبق المعادلة التالية

Object=attributes+Methodes

هذا الجمع لهذه البيانات و التعليمات داخل كائن واحد يتيح للمبرمج حرية كبيرة في استعمال مايشاء من المعلومات او مجموعة المعلومات data و بصورة منظمة اكثر
مثلا لدينا مشروع لتسير مستودع بضائع كبير
يقوم المبرمج بجمع البيانات و الوظائف الخاصة بالبضائع التي توجد داخل المستودع في كائن object واحد
و يقوم بجمع البيانات و الوظائف الخاصة بالبضائع التي خرجت من المستودع -بيعت- في
اوبجيكت آخر
و البضائع التي لم تسدد قيمتها و التي اتلفت في اوبجيكت آخر وهكذا .....
يكون المشروع متكون من العديد من الكائنات –object فيقوم بتوجيه هذه الكائنات لكي يحصل على النتائج المرجوة من المشروع ولهذا نسمي هذا النمط بـ البرمجة الكائنية الموجهة Object-oriented programming
**
__init__ Constructeur

قمنا في الدرس السابق بتعريف الميثود __init__ وقلنا ان مهمتها هي تهيئة الـattributs الخاصة بالكلاس و هذا التعريف صحيح لا غبار عليه و لكن الإسم الصحيح لهذه الميثود هو Constructeur و باللغة العربية تدعى الميثود __init__ بـ بناء الكلاس و الإسم يدل على مهمت Constructeur إذ انه يقوم بتهيئة الكلاس و بناء روابط بين الـ attributs و البيانات التي ستعوض بها
**
method
باختصار الميثود هي كل دالة كتبت داخل الكلاس او هي كل دالة تابعة للكائن فكل دالة كتبت داخل كلاس تسمى ميثود حتى Constructeur يسمى ميثود

هذه هي التعريف و المفاهيم الأساسية لكل ما رأيناه سابقا طبعا لا تنتهي OOP هنا فمازال هناك الوراثة inheritance و تعدد الأشكال Polyphormisme
**
الوراثة inheritance و تعدد الأشكال Polyphormisme

هما ثاني و ثالث مفاهيم الـ OOP الأساسية فركائز البرمجة الكائنية الموجهة هي

التغليف Encapsulation و رأينا هذا سابقا كيف ان الصنف الواحد او الكلاس يغلف داخلة مجموعة مختلفة من الصفاة و الوظائف كلها تحت نفس المسمى و تحت نفس الإسم
الوراثةinheritance و سنرى تعريفها الآن
تعدد الأشكالPolyphormisme سنعرفه بعد قليل ايضا
و تجدر الإشارة ان الوراثة و تعدد الأشكال مرتبطان ببعضهما البعض و سنفهم هذا بعد قليل
ماهي الوراثة : في حياتنا اليومية نفسر الوراثة على انها اكتساب لأشياء جديدة من طرف عنصر آخر فنقول مثلا ان الولد ورث صفاة ابيه فهذا يعني ان الولد قد اكتسب صفاة من طرف ابيه و صار بينهما شيئ مشترك و لا يعني ان الإبن صورة طبق الأصل عن ابيه و انما ورث بعض الصفاة فقط
نفس الشيئ بالنسبة لـ OOP
نفرض مثلا انه لدينا كلاس اسمها Etud هذه الكلاس مخصصة لصنف الطلاب
و نريد ان ننشئ كلاس اخرى اسمها Teach مخصصة لصنف الأساتذة
للطلاب صفاة معينة كالإسم و اللقب و القسم و النقطة ..........
و للأستاذ ايضا صفاة معينة
في هذه الحالة نستطيع ان ننشئ لكل صنف كلاس مخصصة و لكن منحتنا OOP
مفهوم جديد اسمه الوارثة يمكننا من استعمال عدة خصائص و صفاة لأصناف مختلفة
نعود لمثالنا
بدل ان ننشئ كلاس للأستاذ و نعيد ادراج كل الصفاة الخاصة به نستفيد من تقنية الوراثة و ننشئ هذه الكلاس و لكن لا ندرج كل الصفاة فيها بل ندرج الصفاة التي لا تحتويها كلاس الطلاب فقط لأنه بين الأستاذ و الطلاب توجد العديد من الصفاة المشتركة كالإسم و اللقب و القسم سنستغل هذه الصفاة المشتركة و في الكلاس الخاصة بالأستاذ ندرج الصفاة التي ينفرد بها صنفه فقط ثم نقوم بإنشاء علاقة وراثة بين كلاس الطلاب و كلاس الأستاذ
فنقول ان كلاس الأستاذ ترث خصائص كلاس الطلاب
و هنا تدعى كلاس الأستاذ بالولد و كلاس الطلاب بالأم
و البعض يسمي الكلاس الأم بـ Base class و الكلاس الولد بـ Subclass
الصيغة الكتابية للوراثة هي
اقتباس :
class Sub_class_Name (Base_class1, Base_class2....):
class_suit
...........
..........
مثال
اقتباس :
class My_Base_class():
def my_base_class_method(self):
print 'Base calss method'
class My_subclass(My_Base_class):
def my_subclass_method(self):
print 'subclass method'
لدينا في المثال الكلاس الثانية ترث الكلاس الأم My_Base_class
و هذا يعني انها تستطيع استعمال الميثود الخاصة بها
نتابع المثال
اقتباس :
ins=My_subclass()
ins.my_subclass_method()
ins.my_base_class_method()
فهنا الكلاس البنت او subclass تستطيع ان تستعمل كل خصائصها و كل خصائص الكلاس الأم base class لأنها ترث منها و لكن العكس غير صحيح
حاول مثلا ان تكتب السطر التالي
اقتباس :
s=My_Base_class()
s.my_subclass_method()
ستفشل في تنفيد الكود لوجود خطئ لأن الوارث هو فقط من يستطيع استعمال خصائص من ورث منه اما العكس فلا يصح
**
الوراثة الجماعية Multi inheritence
تستطيع اي كلاس ان ترث الخصائص عن عدة اصناف اخرى و هذا يسمى بالوراثة الجماعية
مثال
اقتباس :
class My_Base_class():
def my_base_class_method(self):
print 'Base calss method'
class My_subclass(My_Base_class):
def my_subclass_method(self):
print 'subclass method'
class My_third_class(My_Base_class, My_subclass):
def My_third_class_method(self):
print 'third class method'
ins=My_third_class()
ins.my_base_class_method()
ins.my_subclass_method()
ins.My_third_class_method()

كما نلاحظ الكلاس الأخيرة My_third_class ورثت من كل الكلاس الموجودة و هذا ي***ها بالإستفادة من كل خاصئصها كلها
**
Polyphormisme

يعتبر Polyphormisme خطوة واعدة في مجال البرمجة و نقلة نوعية مما يعد بالكثير في المستقبل
قلنا سابقا ان الوراثة و تعدد الأشكال مرتبطان ببعضهما البعض
نفرض ان كلاس A ورثت من كلاس B
طبعا لكل كلاس عدة ميثود خاصة بها يمنحنا Polyphormisme امكانية استعمال اسماء متشابهة للميثود فتكون الكلاس Base class وsubclass تحتوي على ميثود بنفس الإسم و هذا بعني ان الكلاس subclass تحتوى على 2 ميثود بنفس الإسم
مثال
اقتباس :
class My_class_A():
def class_a_method(self):
print ' classA method'

class My_class_B(My_class_A):
def class_b_method(self):
print 'classB method'

class My_class_C(My_class_A, My_class_B):
def class_a_method(self):
print 'classC method'
def class_b_method(self):
print 'classC 2 method'


ins=My_class_A()
s=My_class_B()
y=My_class_C()

ins.class_a_method()
s.class_b_method()
y.class_a_method()
y.class_b_method()
لدينا في المثال 3 كلاس
الكلاس الأخيرة My_class_C ترث من كلتى الكلاس الاخر و تحتوى بداخلها على 2 ميثود بنفس اسم ميثود الكلاس التي ورثت منهم
و مع التطابق في اسماء الميثود لم يفشل تنفيد الكود و استطاع المفسر ان يفرق بين الميثود
و هذا هو مفهوم تعدد الأشكال او Poly
هذا ما ينبغي علينا معرقته حول Poly حتى الآن كالعادة سنتوق بالشرح عند كل جديد في دروسنا القادمة فمن لم يفهم الـOOp جيدا فلا يخف لأن كل دروسنا القادمة بإذن الله مبنية على OOP
هذات كل شيئ في هذا الدرس ارجوا ان اكون قد وفقت في شرح OOP
الدرس القادم سيكون كالعادة مثال او مثالين شاملين نطبق فيهما كل ما رأيناه في هذا الدرس و الدرس الماضي
تم بحمد الله
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
[شرح] الــ Oop في لغة البايثون
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
مجتمع لينوكس المصري :: الأقسام التطويرية (البرمجية) في بيئة GNU/Linux :: .: المقالات والدورات البرمجية :.-
انتقل الى: