OOP: Introduction - Arabic


What is OOP?

انا هنا (وفي باقي المقالات) مش بتكلم عن ازاي الكود بيشتغل لكن التركيز على المفاهيم العامة للـ OOP فهتلاقي ان الكود بسيط لكن ده عشان الـ Concept يكون واضح بالتطبيق.

 

OOP اختصار لـ Object Orienten Programming ,هي عبارة عن نموذج برمجي ( Programming Paradigm) الهدف منه عدم تكرار  نفس الكود اكثر من مرة للتعامل مع نفس البيانات او كما يسمى باللغة الانكليزية DRY: Don't Repeat Yourself

 مثال انا حابب الكلاب, قررت وانا ماشي بالشارع قابلت كلب مع صاحبه اسئلة على عمرة, لكن صاحبه مش مش فاكر غير تاريخ الميلاد, فأنا كمبرمج كتبت الكود التالي:

* هاخد التاريخ

* احسب الفرق بين الوقت الحالي وتاريخ الميلاد

* اعرف العمر

 

from datetime import datetime

def dog_1():
    birthday = datetime(2017, 2, 1).date()

    # Get dog age in years
    current_time = datetime.now().date()
    days = current_time - birthday
    years = round(days.days / 360)

    context = {'age': years}

    return context

def dog_2():
    ....

def dog_3():
    ....

# Get dog 1 age
print(dog_1().get('age'))

# Get dog 2 age
print(dog_1().get('age'))

# Get dog 3 age
print(dog_1().get('age'))

 

النقط (...) تمثل تكرار نفس الكود الـ فـ dog_1

 

لاحظ

* استخدام نفس الكود تكرارا.

* طويل, وغير منظم.

* صعب التتبع (Tracking)و لو قررنا اننا نعمل 100 dog.

 

باستخدام الـ OOP:

* هاكتب نفس الكود مرة واحدة.

* استخدم نفس الكود اكثر من مرة لتخزين بيانات الـ dogs.

 

class Dog:
    def __init__(self, birthday):
        # yyyy, mm, d
        self.birthday = birthday

    def age(self):
        birthday = datetime(*self.birthday).date()

        # Get its age in years
        current_time = datetime.now().date()
        days = current_time - birthday
        age = round(days.days / 360)

        return age


dog_1 = Dog((2017, 2, 1))
print(dog_1.age())

dog_2 = Dog((2015, 12, 1))
print(dog_2.age())

dog_3 = Dog((1994, 2, 3))
print(dog_3.age())

 

لاحظ هنا اقل شئ وهو فرق عدد الـ Code Lines, وكذلك انت خلال قراة الـ Dog Class تقدر تعرف هو بيعمل ايه بسهولة من غير حتى توفر Comments, طبعا الـ Best Practise انك تكتب Comments لكن هنا للتوضيح فقط.

 

الـ OOP تعتمد على الـ Classes والـ Objects, حيث ان الـ Object واخد Instance من الـ Class

 

Classes

* هي مخطط للبيانات (Blueprint) ومخطط لكيفية التعامل معها, يعني لما كتبت Class Dog, الـ Class بيتكتب بواسطة المبرمج الـ بناءا على احتياجات الـ Task بيدا يحدد المدخلات (زي الـ Birthday داخل الـ __init__) والـ Methods المطلوبة الـ بتتعامل مع المدخلات دي(زي الـ age)

 

Objects

 

* هي النَسخ (instances) الـ بنعملها من الـ Class, زي الـ dog_1, dog_2, dog_3 مع الاحتفاظ بنفس خصائص الـ Class, بمعنى ان المبرمج صمم الـ Class حيث ان هو ياخد مدخل التاريخ (Birthday) ويت عملية حسابية ويرجع الـ age ... لو لسه مش فاهم, اكيد هتسمع او سمعت ان كل حاجة في الـ Python عبارة عن Object هنا يقصد بيها انك بتتعامل مع نسخة من Class (مخطط أو Blueprint) معين ... مثلآ انت لما تعمل Object اسمه name انت بتاخد Instance من Class اسمه Str

 

name = 'Mohamed'

print(type(name))

 

هنا الـ name ده اصبح String Object بعد ما عمل نسخة من الـ String Class الـ مصمم By Default داخل لغة الـ Python, وتقدر تعمل ولوج لكل الـ Methods الخاصة بالـ String Class زي:

* ()name.upper

* ()name.lower

 

كل الـ عاوزك تطلع بيه من المقال عن الـ OOP هو انه:

* بيعتمد على الـ DRY principle بحيث يتم استخدام نفس الكود أكثر من مرة بدون الحاجة للتكرار.

* الـ Class هو الـ Blueprint بتاع الـ Entity (زي الـ Dog او شئ اخر تقدر تجمع عنه بيانات في الحياة الواقعية Car, Bulding, Person).

* الـ Object عبارة عن نسخة (Instance) من الـ Class.

 

المقال التالي: Inheritance