软件工程就是经过时间考验、实践证明的思想和方法论的集合,是一门经验学科。
1 例如软件的生命周期
问题定义与可行性分析、需求分析、设计、编码、测试、运维,。
2 面向对象编程的原则
2.1 “开放-封闭”原则(The Open-Closed),简称开闭原则
开闭原则我认为可以算是两个设计原则,不过它们两个是相关的罢了。
开放(面向扩展:开放):指的是模块行为必须是开放的、可扩展的。
封闭(面向修改:封闭):指的是尽量不要修改旧的代码(以免影响系统其它部分的运行)。
举个栗子,现在有这样一个需求,要设计一个“人吃饭”的系统,“人”,他拥有吃饭的这个方法,他还要依赖于“饭”这个类。我们一般会想着像下面这样写:
Public class CookedRice{}
public class peopl{
//...
public void eatCookedRice(CookedRice cookedRice){
//吃饭...
}
}
可是在软件的生命周期内,因为用户的需求的变化、或是对原有系统进行优化升级、维护时,例如我们人不仅是吃米饭,现在系统要求还得吃水果,则需要对软件原有代码进行修改,这是可能会给旧代码引入错误,也可能会使我们不得不对整个功能进行重构,并且需要对重构后的代码再重新进行测试,这是违反软件工程的主要矛盾软件复用的,因此,我们在进行“软件设计”生命周期阶段时一定要注意这个问题,一个健壮的系统离不开一个好的架构设计。于是我们上面的代码应该改成如下写法:
Public interface food {}
Public class CookedRice implements food{}
Public class Fruit implements food{}
public class peopl{
//...
public void eatFood(food food){
//吃食物
}
}
无论以后我们人是想吃什么都可以不用改变旧代码,只需要将吃的东西实现food接口就可以直接吃了。
因此我们在进行面向对象程序的软件设计时要以面向扩展开放、面向修改封闭的原则来进行软件设计。
如果有什么地方理解错误的,还请指出,共同进步,感谢。
2.2 单一职责原则
类的的职责必须是原子的、单一的。
2.3 接口隔离原则
将臃肿的一个接口拆分为多个独立的接口,从而使得实现接口的类不必实现冗余的方法。
2.4 依赖倒置原则
顶层设计不能依赖于底层实现,底层实现依赖于顶层设计;抽象不能依赖于具体,具体需依赖抽象;也就是我“人吃食物”不能依赖于“人吃米饭”。解决方案是,上下层共同依赖于接口,上层调用接口,下层实现接口。