泛化:子类与父类的关系,概念的复用,耦合度最高
B类泛化A类,意味着B类是A类的一种
做法B类继承A类
关联:(聚合/组合)部分与整体的关系,功能的复用影响一个类的成员
A与B关系,意味着B是A的一部分
做法:在A类中包含B类成员
依懒:合作关系,一种相对松散的协作,影响一个方法。
A类依赖B类,意味着A类中的某些功能是B类中实现
做法:B类作为A类的方法参数,并不是A类成员。
.组合复用原则(复用的最佳实现)
Compsite Reyse Principle
如果单单为了代码复用优先组合复用,而非继承复用
组合的耦合性相对继承低。
员工管理器
1、管理所有员工
2、计算所有员工的工资
员工:
程序员:底薪+项目分红
消售:底薪+锁售额*0.05
测试师……
……
'''
class Calculate:
def calcu(self):
raise NotImplementedError
class Personne:
def __init__(self,name):
self.name=name
self.dict_salary={}
def basecalc(self,target):
if isinstance(target, Calculate):
self.dict_salary[self.name]=target.calcu()
def printpro(self):
for ik,jk in self.dict_salary.items():
print(ik,jk)
class Programme(Calculate):
def __init__(self, base_pay,project_dividend):
self.base_pay=base_pay
self.project_dividend=project_dividend
def calcu(self):
return self.base_pay+self.project_dividend
class Test(Calculate):
def __init__(self, test_pay, sales_dividend):
self.test_pay=test_pay
self.sales_dividend=sales_dividend
def calcu(self):
return self.test_pay+self.sales_dividend*0.05
per=Personne('张三')
pro=Programme(12000,5000)
per.basecalc(pro)
pero=Personne('李四')
tes=Test(1200,3000)
pero.basecalc(tes)
per.printpro()
pero.printpro()
print(per.dict_salary)
联系客服