软件工程三要素
方法:完成软件开发的各项任务的技术方法,为软件开发提供 “如何做” 的技术
工具:为运用方法而提供的自动的或半自动的软件工程的支撑环境
过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤,
如何将软件工程方法与软件工具相结合,合理、及时地进行软件开发
Unified Modeling Language UML语言 一般我们用UML中的类图
类图关系如下:
![](data:image/png;base64,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)
实现关系是指接口及其实现类之间的关系
泛化关系(Generalization)是指对象与对象之间的继承关系
关联关系(Association)是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。
在Java中,关联关系的代码表现形式为一个对象含有另一个对象的引用(关联关系有单向关联和双向关联。 )
依赖 (Dependency) 关系是一种弱关联关系。依赖关系在Java中的具体代码表现形式为B为A的构造器或方法中的局部变量、
方法或构造器的参数、方法的返回值,或者A调用B的静态方法。
聚合(Aggregation)是关联关系的一种特例,它体现的是整体与部分的拥有关系,即“has a”的关系。
此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,
也可以为多个整体对象共享,所以聚合关系也常称为共享关系。
组合(Composition)也是关联关系的一种特例,它同样体现整体与部分间的包含关系,
即“contains a”的关系。但此时整体与部分是不可分的,部分也不能给其它整体共享,
作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也称为强聚合。
若要出去吹牛的话,第一个要记住这个:共23种设计模式
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、
责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。
如何衡量软件设计质量
首要的标准
满足软件的功能需求
满足软件功能需求的设计并不一定就是好的设计。
好的设计
可读性:软件的设计文档是否轻易被其他程序员理解。可读性差的设计会给大型软件的开发和维护过程带来严重的危害。
可复用性:软件系统的架构、类、组件等单元能否很容易被本项目的其它部分或者其它项目复用。
可扩展性:软件面对需求变化时,功能或性能扩展的难易程度。
可维护性:软件维护(主要是指软件错误的修改、遗漏功能的添加等)的难易程度。
内聚度、耦合度:高内聚,低耦合。
内聚度定义:表示一个应用程序的单个单元所负责的任务数量和多样性。
内聚与单个类或者单个方法单元相关。
好的软件设计应该做到高内聚。
理想状态下,一个代码单元应该负责一个内聚的任务,
也就是说一个任务可以看作是一个逻辑单元。一个方法应该实现一个逻辑操作,一个类应该代表一种类型的实体。
内聚原则背后的主要原因是重用。遵循该规则的另一个优点是,
当一个应用程序的某些方面需要做出改变时,我们能够在相同单元中找到所有相关的部分。
如果一个系统单元只负责一件事情,就说明这个系统单元有很高的内聚度;
如果一个系统单元负责了很多不相关的事情,则说明这个系统单元是内聚度很低。
内聚度的简单判断方法
如果一个方法可以用简单的“动词+名词”的形式来命名,或者如果一个类可以用准确的名词来命名,
那么这样的类或者方法就是内聚度较高的系统单元;反之,如果类或者方法的名字必须包含“和”、
“或”等字样才能准确反映其功能特性的话,这些类或方法的内聚度就一定不高。
耦合度表示类之间关系的紧密程度。
耦合度决定了变更一个应用程序的容易程度。在紧密耦合的类结构中,
更改一个类会导致其它的类也随之需要做出修改。显然,这是我们在类设计时应该避免的,
因为微小的修改会迅速波动影响到整个应用程序。此外,找到需要修改的所有的地方是必须的,
实际上就使得修改变得困难并且耗费时间。而在松散耦合的系统中,我们可以更改一个类,
不需要修改其它类,而应用程序仍然能够正常工作。
设计原则名称
|
设计原则简介
|
重要性
|
单一职责原则
|
类的职责要单一,不能将太多的职责放在一个类中。
|
★★★★☆
|
开闭原则
|
软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能。
|
★★★★★
|
里氏替换原则
|
在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象。
|
★★★★☆
|
依赖倒转原则
|
要针对抽象层编程,而不要针对具体类编程。
|
★★★★★
|
接口隔离原则
|
使用多个专门的接口来取代一个统一的接口。
|
★★☆☆☆
|
组合/聚合复用原则
|
在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系。
|
★★★★☆
|
迪米特法则
|
一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互。
|
★★★☆☆
|