目录
面向对象设计原则概述
可维护性(Maintainability):指软件能够被理解、改正、适应及扩展的难易程度
可复用性(Reusability):指软件能够被重复使用的难易程度
指导性原则,非强制性原则
面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源代码的复用,另一方面要确保系统能够易于扩展和修改,具有良好的可维护性
单一职责原则
单一职责原则定义
单一职责原则是最简单的面向对象设计原则,用于控制类的粒度大小
单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
Single Responsibility Principle (SRP): Every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class.
单一职责原则分析
1.一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小
2.当一个职责变化时,可能会影响其他职责的运作
3.将这些职责进行分离,将不同的职责封装在不同的类中
4.单一职责原则是实现高内聚、低耦合的指导方针
以上要求,需要设计人员具有较强的分析设计能力和实践经验。
实例
实例说明
某软件公司开发人员针对CRM(Customer Relationship Management,客户关系管理)系统中的客户信息图表统计模块提出了如图2-1所示的初始设计方案。
图1 初始设计方案结构图
在图2-1中,GetConnection()方法用于连接数据库,FindCustomers()用于查询所有的客户信息,CreateChart()用于创建图表,DisplayChart()用于显示图表。
以上类的设计有无问题,为什么?
显然:职责太多,耦合程度高,不符合单一职责原则,需要改进。
实例解析
抽象出职责中可能会出现公共调用的部分,并将此封装成独立类
数据库连接方法会公用,所以独立一个类
查找客户信息会公用,所以独立一个类
开闭原则
开闭原则定义
开闭原则是面向对象的可复用设计的第一块基石,是最重要的面向对象设计原则
开闭原则:软件实体应当对扩展开放,对修改关闭。
Open-Closed Principle (OCP): Software entities should be open for extension, but closed for modification.
开闭原则分析
在开闭原则的定义中,软件实体可以是一个软件模块、一个由多个类组成的局部结构或一个独立的类
开闭原则是指软件实体应尽量在不修改原有代码的情况下进行扩展
抽象化是开闭原则的关键
相对稳定的抽象层 + 灵活的具体层:
对系统应该设计一个相对稳定的抽象层,通过具体的实现来达到功能的扩展,要修改系统的行为,只需要增加具体的抽象类类来实现业务,达到开闭原则。
方法:对可变性封装原则(Principle of Encapsulation of Variation, EVP):找到系统的可变因素并将其封装起来
实例
某公司员工的工资计算方式为:
(1)总经理:年薪50-100万
(2)部门经理:月工资,底薪10000加绩效工资
(3)技术员:月工资:底薪4000加绩效工资的一半
(4)行政人员:月工资,3000
(5)销售员,月工资,底薪0加销售总额的5%提成。
该公司每天都会调整每个岗位的底薪,还会根据业务发展的需要增加或减少岗位
根据以上要求,设计类或类图
代码: