0% found this document useful (0 votes)
7 views9 pages

ملحق oop

Uploaded by

anna amerr
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views9 pages

ملحق oop

Uploaded by

anna amerr
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

‫معهد دمشق المتوسط ‪DTC/AI‬‬

‫ملحق المحاضرة الثانية غرضية‬


‫تعريف المتغيرات داخل ‪class‬‬
‫عرف ُمتغيّرات في ال‪ class‬تماما كما نُ ّ‬
‫عرف ال ُمتغيّرات بشكل عادي‪.‬‬ ‫يُمكننا أن نُ ّ‬

‫‪class My_class:‬‬
‫'‪my_variable = 'This is my variable‬‬
‫للوصول إلى ال ُمتغيّر ننشئ أوال كائنا من ال‪ class‬وبعدها نكتب اسم الكائن ث ّم نقطة ث ّم اسم‬
‫ال ُمتغيّر‪:‬‬

‫)(‪my_object = My_class‬‬
‫‪print my_object.my_variable‬‬
‫ال ُمخرج‪:‬‬

‫‪This is my variable‬‬
‫يُمكن كذلك الحصول على النّتيجة ذاتها في سطر واحد‪:‬‬

‫‪print My_class().my_variable‬‬

‫‪1‬‬
‫إنشاء التوابع‬
‫صة بال‪ ،class‬ويُمكننا إنشاء التابع بنفس ّ‬
‫الطريقة التي نُنشئ بها الدالة‪،‬‬ ‫التوابع هي دوال خا ّ‬
‫عرف مع ُمعامل باسم ‪ self‬وذلك لإلشارة إلى ّ‬
‫أن‬ ‫أن جميع التوابع يجب أن ت ُ ّ‬
‫اإلختالف هنا هو ّ‬
‫الدالة‪/‬التابع تابع لل‪ ،class‬لننشئ تابعا داخل ‪ class‬اآلن‪.‬‬

‫‪class My_class:‬‬
‫'‪my_variable = 'This is my variable‬‬
‫‪def my_method(self):‬‬
‫)”‪print (“This is my method‬‬
‫اآلن إذا أنشأنا كائنا فإنّنا سنتم ّكن من الوصول إلى التابع‪ ،‬وتذ ّكر ّ‬
‫بأن التابع تلحقه األقواس‪:‬‬

‫)(‪my_object = My_class‬‬

‫)(‪my_object.my_method‬‬
‫ال ُمخرج‪:‬‬

‫‪This is my method‬‬
‫يُمكن كذلك الحصول على النّتيجة ذاتها في سطر واحد‪:‬‬

‫‪2‬‬
My_class().my_method()
‫ ويُمكننا كذلك أن نجعل‬my_method ‫كما تُالحظ فقد نُفّذت الشيفرة الموجودة داخل التّابع‬
.‫ ك ُمتغيّر أول‬self ‫ لكن تذ ّكر الحفاظ على الكلمة‬،‫التّابع يقبل ال ُمعامالت‬

class My_class:
my_variable = 'This is my variable'
def my_method(self, my_parameter):
print ('This is my method ; {} is my
parameter'.format(my_parameter))
:‫يُمكنك استدعاء التّابع كالتّالي‬

my_object = My_class()

my_object.my_method('Parameter1')

my_object.my_method('Parameter2')
:‫ال ُمخرج‬

This is my method ; Parameter1 is my parameter

This is my method ; Parameter2 is my parameter

3
‫سابق‪ ،‬أنشأنا أوال ‪class‬ا باسم ‪ My_class‬وقُمنا بتعريف ُمتغيّر‪ ،‬ث ّم بتعريف‬‫في البرنامج ال ّ‬
‫تابع باسم ‪ my_method‬يقبل ُمعاملين ‪ self‬و‪ ، my_parameter‬بالنّسبة الستدعاء التّابع‪،‬‬
‫فنحتاج فقط إلى تمرير ال ُمعامالت الموجودة بعد ال ُمعامل‪ self‬وال نحتاج إلى تعيين قيمة لهذا‬
‫ال ُمعامل‪.‬‬

‫أن البرنامج التّالي سيعمل دون‬


‫ُمالحظة‪ :‬يُمكنك إعادة تسميّة ال ُمعامل األول كما تشاء‪ ،‬أي ّ‬
‫مشاكل‪.‬‬

‫‪class My_class:‬‬
‫‪def my_method(this, my_parameter):‬‬
‫)‪print '{} is my parameter'.format(my_parameter‬‬
‫ولكن رغم ذلك فال ُمتعارف عليه بين ُمبرمجي لغة بايثون هو استعمال‪ ، self‬وفي كثير من‬
‫اللغات األخرى تُستعمل ‪ this‬عوضا عن‪ ، self‬أما في ِ‬
‫برامجك فمن ال ُمفضّل اإلبقاء على هذه‬
‫التّسميّة ال ُمتعارف عنها‪ ،‬وذلك لتكون شيفراته سهلة القراءة‪.‬‬

‫الوصول إلى متغيرات ال‪ class‬داخل التوابع‬


‫تأ ّمل ال‪ class‬التّالي‪:‬‬

‫‪class Person:‬‬
‫'‪lastname = 'Dyouri‬‬
‫'‪job = 'Writer, Developer‬‬
‫‪def say_hello(self):‬‬
‫'‪name = 'Abdelhadi‬‬
‫))‪print ('Hello, My name is {}'.format(name‬‬

‫‪4‬‬
‫نعرف ‪ class‬باسم ‪ Person‬وبعدها نقوم بتعيين قيمتين‬
‫البرنامج أعاله بسيط جدا‪ ،‬أوال ّ‬
‫عرفنا تابعا باسم ‪ say_hello‬يطبع جملة ‪Hello,‬‬
‫لل ُمتغيّرين ‪ name‬و‪ ، lastname‬وبعدها ّ‬
‫‪My name is Abdelhadi.‬‬
‫ك ّل شيء جيد‪ ،‬لكن ماذا لو أردنا أن نصل إلى ال ُمتغيّرات األخرى الموجودة خارج التّابع‪ ،‬فال‬
‫يُمكننا مثال أن نقوم باألمر كالتّالي‪:‬‬

‫‪class Person:‬‬
‫'‪lastname = 'Dyouri‬‬
‫'‪job = 'Writer, Developer‬‬
‫‪def say_hello(self):‬‬
‫'‪name = 'Abdelhadi‬‬
‫)‪print 'Hello, My name is {}'.format(name‬‬
‫‪print lastname‬‬
‫‪print job‬‬
‫ستحصل على الخطأ التّالي‪:‬‬

‫‪global name 'lastname' is not defined‬‬


‫لتفادي هذا الخطأ سنستعمل كلمة ‪ self‬قبل ال ُمتغيّر‪.‬‬

‫‪class Person:‬‬
‫'‪lastname = 'Dyouri‬‬

‫‪5‬‬
job = 'Writer, Developer'
def say_hello(self):
name = 'Abdelhadi'
print 'Hello, My name is {}'.format(name)
print 'My Last name is {} '.format(self.lastname)
print 'I am a {}'.format(self.job)
:‫استدعاء التّابع‬

me = Person()

me.say_hello()
:‫ال ُمخرج‬

Hello, My name is Abdelhadi


My Last name is Dyouri
I am a Writer, Developer
self.lastname ‫ عن طريق استدعائه بـ‬lastname ‫الحظ بأنّنا قُمنا بالوصول إلى ُمتغيّر‬
ّ ‫ الفرق هنا‬global ‫الطريقة ُمشابهة الستخدام كلمة‬
‫أن هذه‬ ّ ‫ وهذه‬، job‫وكذا الحال مع ال ُمتغيّر‬
‫ فتُشير إلى ال ُمتغيّر‬self ‫ أ ّما كلمة‬،‫األخيرة تُمكن من الوصول إلى ال ُمتغيّر في كامل البرنامج‬
.‫ الحاليّة فقط‬class‫عرف في ال‬
ّ ‫ال ُم‬

6
:‫ مثال‬،class‫ فقط تخيّل بأنّها تحمل نفس اسم ال‬self ‫لتفهم أكثر كيفيّة عمل الكلمة‬

class Person:
lastname = 'Dyouri'
job = 'Writer, Developer'
def say_hello(self):
name = 'Abdelhadi'
print 'Hello, My name is {}'.format(name)
print 'My Last name is {} '.format(Abd.lastname)
print 'I am a {}'.format(Abd.job)
.‫واستمر عمل البرنامج دون مشاكل‬
ّ class‫ إلى اسم ال‬self ‫الحظ بأنّنا غيّرنا كلمة‬

ّ ‫وبنفس ال‬
class:‫طريقة يُمكنك أن تستدعي تابعا داخل تابع آخر في نفس ال‬

class Person:
def say_name(self):

7
‫'‪print 'Abdelhadi‬‬
‫‪def say_hello(self):‬‬
‫'‪print 'Hello My name is:‬‬
‫)(‪self.say_name‬‬

‫ال ُمخرج‪:‬‬

‫‪Hello My name is:‬‬


‫‪Abdelhadi‬‬
‫أن التّابع ‪ say_hello‬قام بطباعة جملة ‪ :Hello My name is‬ث ّم قام باستدعاء‬
‫ما حدث هو ّ‬
‫التّابع ‪ say_name‬الذي قام بدوره بطباعة االسم‪Abdelhadi.‬‬

‫لماذا تستعمل البرمجة الكائنية‪ ،‬ومتى يجب علي استخدامها‬


‫قد تُالحظ ّ‬
‫بأن ما يُمكنك فعله بالبرمجة الكائنيّة يُمكن القيام به بالدوال وال ُمتغيّرات فقط‪ .‬هذا‬
‫صحيح‪ ،‬وهو أمر واضح‪ ،‬البرمجة الكائنيّة تُستعمل أساسا إذا كان البرنامج الذي تبنيه ُمعقّدا‬
‫طور برنامجا‬‫مع العديد من الوظائف ال ُمتعلّقة ببعضها (كمكتبة برمجيّة)‪ ،‬مثال لنقل بأنّك ت ُ ّ‬
‫مسؤوال عن جلب بيانات من موقع ُمعيّن‪ ،‬وبعدها التّعديل عليها‪ ،‬ث ّم إخراج مستند ‪ PDF‬يحتوي‬
‫على هذه البيانات بشكل يُس ّهل قراءتها‪ ،‬هنا ستحتاج إلى ‪ class‬لجلب البيانات والتّعديل عليها‪،‬‬
‫ملف ‪PDF.‬‬‫نص مقروء واضح ث ّم إلى ّ‬ ‫و‪ class‬أخرى لتحويل البيانات إلى ّ‬

‫إذا نشرت برنامجك مع صديقك وأراد أن يعمل على الجزء الثاني إلضافة وظيفة تُمكن‬
‫ال ُمستخدم من طباعة ال ُمستند فال يُعقل أن يضطر للمرور على كل ما يتعلّق بجلب البيانات فقط‬
‫ألنّه يريد أن يضيف خاصيّة ال عالقة لها بجلب البيانات‪ .‬استعمال البرمجة الكائنيّة في هذا‬
‫‪8‬‬
‫المشروع سيسمح لك بالتّركيز على الجزء األول‪ ،‬وسيسمح لصديقك بالتّركيز على تطوير‬
‫الجزء الثاني‪.‬‬

‫خالصة األمر هي أنّك لست مضطرا الستعمال البرمجة الكائنيّة إال إذا كان برنامجك طويال‬
‫يحتوي على وظائف تتعلّق ببعضها البعض (وظائف من نفس ال‪ ،)class‬ونسبة استخدام‬
‫اآلخرين لشيفرتك عالية‪.‬‬

‫تمارين‬
‫التمرين ‪1‬‬
‫أنشئ ‪class‬ا باسمك‪ ،‬وقم بتعريف ُمتغيّرين ‪ lastname‬االسم العائلي و‪ age‬العمر‪ ،‬ثم أنشئ‬
‫كائنا باسم ‪ me‬وقم بطباعة اسمك العائلي وعمرك‪.‬‬

‫التمرين ‪2‬‬
‫سيارة‪ ،‬مثال ‪ brand‬السم‬
‫أنشئ ‪class‬ا باسم‪ Car‬سيارة وقم بتعريف ُمتغيّرات لصفات ال ّ‬
‫سيارة‪.‬‬
‫شركة‪release_date ،‬لتاريخ اإلعالن عن ال ّ‬ ‫ال ّ‬

‫التمرين ‪3‬‬
‫أضف توابع إلى ال ‪class Car‬التي أنشأتها في التّمرين الثّاني‪ ،‬يُمكن أن تكون التوابع عبارة‬
‫سيارة مثال ‪ move‬للحركة‪stop ،‬للتوقّف‪slow_down ،‬لتخفيض‬ ‫عن عمليّات تقوم بها ال ّ‬
‫سرعة‪ ،‬وقم بطباعة جمل تفيد بأ ّن العمليّة قد نجحت‪ .‬المفروض أن يتم ّكن اآلخرون من إنشاء‬ ‫ال ّ‬
‫صة بهم بحيث تُستخدم بهذه ّ‬
‫الطريقة‪:‬‬ ‫كائنات خا ّ‬
‫)(‪bmw = Car‬‬
‫)(‪bmw.move‬‬
‫)(‪bmw.slow_down‬‬
‫)(‪bmw.stop‬‬
‫‪9‬‬

You might also like