بهزاد دبیری
بهزاد دبیری
خواندن ۳ دقیقه·۱ سال پیش

composition and aggregation in python

:Concept of Inheritance

وراثت مکانیزمی است که به ما امکان می دهد تمام ویژگی های یک کلاس دیگر را بگیریم و آنها را در کلاس خود اعمال کنیم. کلاس والد کلاسی است که ویژگی ها و توابع از آن مشتق می شوند (به عنوان کلاس پایه نیز نامیده می شود). کلاس فرزند به کلاسی اطلاق می شود که از ویژگی های کلاس دیگری (که به عنوان کلاس مشتق نیز شناخته می شود) استفاده می کند. یک رابطه Is-A نام دیگری برای وراثت است.

Syntax:


#Parent class

class Parent:

# Constructor

# Variables of Parent class

#Methods

...


#Child class inheriting Parent class

class Child(Parent):

#constructor of child class

# variables of child class

#methods of child class

...

:Concept of Composition

ترکیب نوعی تجمع است که در آن دو موجودیت به شدت به یکدیگر وابسته هستند.

1- این یک جزء رابطه را نشان می دهد.

2- هر دو موجودیت در ترکیب به یکدیگر وابسته هستند.

3- هنگامی که ترکیبی بین دو نهاد وجود دارد، شیء تشکیل‌شده نمی‌تواند بدون موجودیت دیگر وجود داشته باشد.

#Code to demonstrate Composition

#Class Salary in which we are

#declaring a public method annual salary

class Salary:

def __init__(self, pay, bonus):

self.pay = pay

self.bonus = bonus

def annual_salary(self):

return (self.pay*12)+self.bonus

#Class EmployeeOne which does not

# inherit the class Salary yet we will

# use the method annual salary using

# Composition

class EmployeeOne:

def __init__(self, name, age, pay, bonus):

self.name = name

self.age = age

#Making an object in which we are

#calling the Salary class

#with proper arguments

self.obj_salary = Salary(pay, bonus) # composition

#Method which calculates the total salary

# with the help of annual_salary() method

# declared in the Salary class

def total_sal(self):

return self.obj_salary.annual_salary()

#Making an object of the class EmployeeOne

#and providing necessary arguments

emp = EmployeeOne('Geek', 25, 10000, 1500)

#calling the total_sal method using

#the emp object

print(emp.total_sal())

Output:

121500

اکنون همانطور که در کد بالا می بینیم، با موفقیت متد یک کلاس کاملاً متفاوت را در کلاس دیگری که کلاس را به ارث نمی برد با استفاده از مفهوم Composition فراخوانی کرده ایم.


:Concept of Aggregation

تجمیع مفهومی است که در آن یک شیء از یک کلاس می تواند شیء مستقل دیگری از کلاس دیگر را داشته باشد یا به آن دسترسی داشته باشد.

- نشان دهنده رابطه Has-A است.

- این یک ارتباط یک طرفه است، یعنی یک رابطه یک طرفه. به عنوان مثال، یک بخش می تواند دانشجو داشته باشد، اما برعکس امکان پذیر نیست و در نتیجه ماهیت یک طرفه دارد.

- در تجمیع، هر دو ورودی می توانند به صورت جداگانه باقی بمانند، به این معنی که پایان دادن به یک موجودیت بر موجودیت دیگر تأثیری نخواهد داشت.

#Code to demonstrate Aggregation

#Salary class with the public method

#annual_salary()

class Salary:

def __init__(self, pay, bonus):

self.pay = pay

self.bonus = bonus

def annual_salary(self):

return (self.pay*12)+self.bonus

# EmployeeOne class with public method

# total_sal()

class EmployeeOne:

# Here the salary parameter reflects

#upon the object of Salary class we

# will pass as parameter later

def __init__(self, name, age, sal):

self.name = name

self.age = age

# initializing the sal parameter

self.agg_salary = sal # Aggregation

def total_sal(self):

return self.agg_salary.annual_salary()

#Here we are creating an object

#of the Salary class

#in which we are passing the

#required parameters

salary = Salary(10000, 1500)

#Now we are passing the same

#salary object we created

#earlier as a parameter to

#EmployeeOne class

emp = EmployeeOne('Geek', 25, salary)

print(emp.total_sal())

Output:


121500


از کد بالا، همان خروجی را خواهیم داشت که در قسمت Composition دریافت کرده بودیم. اما تفاوت این است که در اینجا ما یک شی از کلاس Salary در کلاس EmployeeOne ایجاد نمی کنیم.به جای اینکه یک شی از کلاس Salary در خارج ایجاد کنیم و آن را به عنوان پارامتری از کلاس EmployeeOne ارسال کنیم که همان نتیجه را به همراه دارد.





















































































inheritancecomposition
شاید از این پست‌ها خوشتان بیاید