OOP kompositsioon Pythonis¶
Mis on OOP kompositsioon?¶
Lühidalt OOP kompositsioon on objekti, ehk Pythoni puhul klassi (või enum-i) kasutamine muutujana teises objektis. See võimaldab meil luua keerulisi objekte, mis hoiavad enda sees omakorda veel teisi klasse ja nii saame erinevaid objekte kombineerida. Vahepeal seda nimetatakse ka Has-A Relation. Kompositsioon pole pärimine (inheritance), ehk me ei saa kasutatavat klassi kuidagi muuta, antud klass on nagu muutuja.
Näited:
# 1)
# ------------------------------------------------------------
class Component:
# composite class constructor
def __init__(self):
print('Component class object created!')
# composite class instance method
def method_one(self):
print('Component class method_one() method executed!')
class Composite:
# composite class constructor
def __init__(self):
# creating object of component class
self.obj1 = Component()
print('Composite class object also created!')
# composite class instance method
def method_two(self):
print('Composite class method_two() method executed!')
# calling method_one() method of component class
self.obj1.method_one()
# creating object of composite class
obj2 = Composite()
# calling m2() method of composite class
obj2.method_two()
# ------------------------------------------------------------
# 2)
class Salary:
def __init__(self, pay, bonus):
self.pay = pay
self.bonus = bonus
def annual_salary(self):
return (self.pay * 12) + self.bonus
class Employee:
def __init__(self, name, age, pay, bonus):
self.name = name
self.age = age
self.obj_salary = Salary(pay, bonus)
def total_salary(self):
return self.obj_salary.annual_salary()
emp = Employee('John', 25, 15000, 10000)
print(emp.total_salary())
# 190000
Milleks ja kuidas kasutatakse OOP kompositsiooni?¶
Ülevalolevatelt näidetelt on näha, et OOP kompositsiooni kasutatakse kui tahetakse luua keerulisi objekte, mis on kombinatsioon mitmest teisest klassist. OOP kompositsioon koos OOP pärimisega (inheritance) on viisid kuidas teha koodi puhtamaks ja taaskasutatavamaks ning see aitab kokku hoida arendaja aega tulevase funktsionaalsuse lisamisel.