一.软件工程三要素
1.方法
完成软件开发的各项任务的技术方法
2.工具
为运用方法而提供的自动的或半自动的软件工程支撑环境
3.过程
为了获得高质量的软件所需要的完成的一些列任务的框架,它规定了完成各项任务的工作步骤,如何将软件工程方法与软件工具相结合,合理,及时的进行软件开发。
二.软件生命周期
1.可行性分析阶段
分析项目是否值得去做,是否存在可行的解决办法。
2.需求分析阶段
通过和用户的交流,确定系统做什么,确定软件系统的功能需求和非功能需求。
3.系统设计阶段
根据需求分析阶段确定的功能性需求和非功能性需求,对整个系统进行整体框架设计、详细功能设计和数据库设计等。
4.系统实现阶段
根据详细设计说明书,用选定的程序设计语言把详细设计的结果转换为机器可执行的源代码。
5.测试阶段
通过各种软件测试方法和测试工具,使软件的Bug降到最低。
6.维护阶段
通过各种必要的维护活动使系统持久地满足用户的需求。
三.软件开发模型
1.瀑布模型
从上到下,按照软件生命周期进行开发。
2.喷泉模型
各个阶段之间没有严格的界限,其活动可以交叠和回溯。
四.统一建模语言UML
专门用来进行软件系统设计和架构建模的一门可视化建模语言。
五.设计原则
1.开闭原则
一个软件系统对于扩展是开放的,但是对修改是关闭的。在不修改软件实体的基础上扩展其功能
2.单一职责
所有的对象都应该有单一的职责,它所提供的所有服务都仅围绕着这个职责。职责不是具体功能,而是工作环境
3.里氏替换原则
判断两个类是否有继承关系。任何地方,子类应该能够完全替代父类。
4.依赖倒转原则
将两个模块之间的依赖关系倒置为抽象类或接口。针对接口编程,不要这对实现类编程。
5.组合/聚合复用原则
尽量使用组合/聚合而非继承来达到复用的目的。
6.接口隔离原则—-最小接口原则
同一个接口设计的方法最小化。
7.迪米特法则—-不要用陌生人说话
一个软件应当尽量少与其他实体发生相互作用。
六.创建型设计模式(套路)
1.架构模式
站在一个很高的角度,以宏观的概念来对程序中的组件进行组织。如三层架构。
2.设计模式
针对具体场景,具体问题的编码解决,它是一种思想,和具体语言无关。
3.重要的设计模式
- 单例模式(Singleton)之懒汉模式(线程绝对安全)
设计一个能且只能产生一个对象的类。
public class Singleton{
private static Singleton sin = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return sin;
}
}
它是一种预加载的实现。不管代码中有没有用到getInstance都会产生。
- 单例模式之饿汉模式(线程不安全)
public class Singleton{
private static Singleton sin;
private Singleton(){}
public static Singleton getInstance(){
if(this.sin == null){//当为空的时候再new对象
this.sin = new Singleton();
}
return sin;
}
}
延迟加载实现,只有在真正需要Singleton对象的时候才会产生。不加同步锁线程不安全,加同步锁效率低。
3.单例模式之双锁机制
public class Singleton{
private static Singleton sin;
private Singleton(){}
public static Singleton getInstance(){
if(sin == nulll){
sysnchronized(Singleton.class){
if(sin == null){
sin = new Singleton();
}
}
}
return sin;
}
}
既支持延迟加载,又支持线程安全的高并发。
工厂模式—-将产生对象和使用对象进行分离
原型模式(Prototype),创建一个跟已存在对象一模一样的新对象。
- 调用clone方法必须实现cloneable接口(浅克隆)。
- 克隆方法对属性的复制是值传递,因此不会克隆引用属性,只克隆了一层。
- 深克隆:实现序列化接口,ByteArrayOutPutStream。和文件没有任何关系。
6.外观(Fcade)模式
7.装饰器(Decorator)模式
星巴克咖啡,咖啡是主要的,配料是次要的。且配料没有单独存在的意义,配料是为了丰富主料而存在。
8.桥梁模式
和装饰器模式很相似,但是双方是平等的关系,聚合组合的方式。
9.适配器模式
10.代理(Proxy)模式
面向切面编程(面向方向编程)。