软件工程概念
软件工程概念
面向对象之间的关系
泛化关系
- 即java中的继承关系
- 箭头表示

实现关系
- 即java中接口的实现关系(implement)
- 箭头表示

依赖关系
- b类作为a类的方法的参数传入,那么a就依赖b类
- 箭头表示

关联关系
- a类中的成员变量为b类,则a关联了b类,
- 关联关系仅仅表示两者有关系,而无需关心对方的生命周期
- 箭头表示

聚合关系
- 关联关系的进阶版,强调拥有,同样无需关系双方的生命周期
- 如班级和学生之间的关系,一个班级拥有一个学生,但是一个学生被移除出这个班级,他还是一个学生
- 箭头表示

组合关系
- 聚合关系的更进阶版,同样强调拥有,但是双方的生命周期高度绑定,两者之间的关系更加的紧密
- 如房子和房间之间的关系,房子拥有房间,但是房间不能脱离房子存在,没有房子就没有房间
- 箭头表示

怎么区分关联关系,聚合关系,组合关系
- 是否强调拥有,
- 否
- 即为关联管理
- 是
- 是否强调生命周期有关联
- 否
- 聚合关系
- 是
- 组合关系
- 否
- 是否强调生命周期有关联
- 否
面向对象的设计原则
单一职责原则
- 定义
- 即一个对象应该只有一个职责,而不应该承担过多的原则
- 例子
- 如一个商品列表的功能,不应该把商品的存储移除和商品的遍历混合在一起
- 正确的应该是利用迭代器模式,创建迭代器来对商品进行遍历
- 好处
- 可以避免一个对象承担过多的职责,使得系统的复杂度过高,可以降低系统的耦合度
开闭原则
- 定义
- 即对扩展开放,对修改封闭
- 即系统可以在不修改现有代码的情况下扩展功能
- 例子
- 装饰器模式
- 如java中的管道流操作,定义了一个顶级的抽象管道流,其他类都是他的子类,我可以通过装饰器对某一个管道进行装饰,详细请看设计模式解析中的装饰器模式
- 工厂模式
- 抽象工厂模式
- 装饰器模式
- 好处
- 可以避免修改系统源代码,保证系统原有功能可以正常运行,
- 可以更加简单的进行系统功能进行扩展
里氏替换原则
- 定义
- 子类可以完全替代父类,子类必须完全实现父类的所有操作,然后再在此基础上进行修改,
- 例子
- 同样的装饰器模式也符合里氏替换原则
- 如java中的管道流操作,定义了一个顶级的抽象管道流,其他类都是他的子类,我可以通过装饰器对某一个管道进行装饰,详细请看设计模式解析中的装饰器模式
- 好处
- 更侧重保护系统的原有功能,然后再去扩展系统功能
接口隔离原则
- 定义
- 注重的是对象和接口之间的解耦,即每个接口都不应该承担过多的职责,每个接口都被设计为较小的粒度的功能,
- 每个对象只需要实现对应小粒度的接口就行,而不需要一个全能的几口
- 和单一职责原则有点类似,只不过这个是对接口的
- 例子
- 抽象工厂模式
依赖倒置原则
- 定义
- 高层次的抽象接口不应该依赖低层次的具体接口,但是低层次的具体实现需要依赖高层次的抽象接口
- 参考依赖关系,即方法的参数中是别的对象即位依赖关系
- 即具体的实现方法需要的参数类型为高层次的抽象接口对象
- 例子
- 几乎所有设计模式都使用了依赖倒置原则
合成复用原则
- 定义
- 优先使用对象之间的组合(参考组合关系)来实现对功能的服用,而不是使用继承关系来使用某个功能
- 好处
- 这样可以避免一个类继承过多的功能,增加系统的耦合性,
- 使用合成复用原则可以只使用组合的对象的某个功能即可,而不用继承
最少知识原则(迪米特法则)
- 定义
- 每个类应该只与和自己有直接关系的类发生功能的交互,而不应该调用某个类的更底层的其他类的功能
- 即如果可以通过第三方间接的调用第三个类,那么就尽量使用间接的方式
- 例子
- 如果你想买房子,你不应该直接去找房东,而是找中介,让中介来帮你联系适合你的房东
- 好处
- 可以避免过度耦合
更新: 2025-04-14 19:48:05
原文: https://www.yuque.com/duifangzhengzaishuru-rqbua/axyc58/piyquc5agu2bn9qt