在开始Python编程语言的学习之时,学记就曾提到过Python是一个面向对象编程语言。
面向对象在程序开发中,存在着一些设计原则,了解这些设计原则,可以使我们在今后的程序开发当中,易于与他人交流,减少交流成本。
![da94530c36213dd586603d2d544058d8.png](https://i-blog.csdnimg.cn/blog_migrate/d7d21eef8693878b8ed8a9d0a3f03893.jpeg)
因此,今天就来了解一下这些原则。
单一职责原则 一个类只做该做的事情
在现实世界当中,具备很多功能的瑞士军刀往往在单一功能,不如专职于此功能的工具。比如在切割方面,昂贵的瑞士军刀是不如一把廉价的菜刀的。
对应到程序当中,就是一个功能只让一个类来负责。
里氏替换原则 - 任何时候可以用子类对象替换掉父类对象
里氏替换原则是由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次会议上名为“数据的抽象与层次”的演说中首先提出。
里氏替换原则的内容可以描述为,子类对象可以在程式中代替其父类对象。
合成聚合复用原则 - 优先使用强关联关系而不是继承关系复用代码
最少知识原则 - 不要给没有必然联系的对象发消息
在了解这些原则之后,可以来看一个实例,这个实例将面向对象的三大支柱:封装、继承、多态。
"""
月薪结算系统 - 部门经理每月20000 程序员每小时150 销售员3000底薪加销售额5%提成
"""
from abc import ABCMeta, abstractmethod
class Employee(metaclass=ABCMeta):
"""员工(抽象类)"""
def __init__(self, name):
self.name = name
@abstractmethod
def get_salary(self):
"""结算月薪(抽象方法)"""
pass
class Manager(Employee):
"""部门经理"""
def get_salary(self):
return 20000.0
class Programmer(Employee): 封装 多态
"""程序员"""
def __init__(self, name, working_hour=0):
self.working_hour = working_hour
super().__init__(name)
def get_salary(self):
return 150.0 * self.working_hour
class Salesman(Employee): 封装 多态
"""销售员"""
def __init__(self, name, sales=0.0):
self.sales = sales
super().__init__(name)
def get_salary(self):
return 3000.0 + self.sales * 0.05
class EmployeeFactory(): 继承
"""创建员工的工厂(工厂模式 - 通过工厂实现对象使用者和对象之间的解耦合)"""
@staticmethod
def create(emp_type, *args, **kwargs):
"""创建员工"""
emp_type = emp_type.upper()
emp = None
if emp_type == 'M':
emp = Manager(*args, **kwargs)
elif emp_type == 'P':
emp = Programmer(*args, **kwargs)
elif emp_type == 'S':
emp = Salesman(*args, **kwargs)
return emp
def main():
"""主函数"""
emps = [
EmployeeFactory.create('M', '赵本山'),
EmployeeFactory.create('P', '赵四', 120),
EmployeeFactory.create('P', '刘能', 85),
EmployeeFactory.create('S', '谢广鲲', 110000),
]
for emp in emps:
print('%s: %.2f元' % (emp.name, emp.get_salary()))
if __name__ == '__main__':
main()
在上面的代码里,经理,程序员和销售员这三个类很好的体现了,封装,继承这两点。
这些原则和特性并不是一两篇文章就可以说的清的。如何具体的应用,学记将在之后的学习当中慢慢展开。
如果想学习更多科技知识,可以点击关注。
如果对文章中的内容有什么困惑的地方,可以在评论区提出自己的问题,学记同大家一起交流,解决各种问题,一起进步。
青年学记 陪伴着各位青年
![21ef3a953e79ac0c8b0f4e34ad2708d2.png](https://i-blog.csdnimg.cn/blog_migrate/e291be0b5e0998e0df68cf1274719789.jpeg)
作者:青年学记 一名不断进步的程序猿
一起学习 一起进步
走向自立