设计模式:
我们不难发现世间万物的发展基本都有一个起决定性作用的起始点。比如,基因会决定一个人的某些特质;本质决定现象;领导决定一个组织的发展。其实,就是本质。而编程思想的本质是什么呢?换句话说,对于我们提交的程序怎样来判断她的好坏优良呢?我们可能得到很多答案,但只从软件生命周期的角度来看,我想就是“可支持维护性的复用”。参考《Java与模式》
维护性:易扩展性,用于功能完善加强。Open对内。
复用性:说白了是通用性,在这能用,在别的地方也能用,因为接口已经定义好了,看接口你就会明白具备什么功能。Close对外开放接口。
高内聚低偶合,
工厂模式:
分离不变的和可变的
分离抽象的和具体的
分离引用和实现
适配器模式:
实现弱偶合
桥接模式:
将多继承的高偶合转为聚合,以解偶。
建造者模式:
分离引用和实现(结构复杂的实现)
责任链模式:
分离请求(相对不变,抽象)和接收(相对可变,具体):(同一对象动态接受多处理)
我们在学校还学过一个好的程序还需要稳定性、易读性。不过你能充分理解维护性和复用性即可做到稳定性和易读性,这也是本文为什么要说“可支持维护性的复用”是程序设计的本质。
某个模块当需要被修改时,其他的调用者同时都会受到牵连。这个模块需要被修改是出于维护性的需要,保证其他调用的地方不受牵连是出于复用性的的需要。也称之为解偶,高内聚地耦合。这个问题就是面向对象编程思想的一个出发点,起始点,本质。一个好的软件系统设计应该充分注意这个问题的处理。简单说就是,一个好的模块设计可以很好的完成自身的功能而被多次复用,同时自身功能的完善又不影响其复用。再从面向对象角度看就是,一个对象既可以通过暴露接口被任意调用,而同时对象内部的加强和完善又不影响其调用。
矛盾是事物发展的源头,从这个问题出发,我们就可以很好的理解面向对象编程思想和设计模式。设计模式是针对不同情形,对此问题的具体处理方法。
最起码我们可以了解到接口设计远比代码实现重要的多。
软件工程:
老生常谈,需求分析、设计实现、测试、部署、运维
这里只从需求分析、设计的角度来看,本质是什么呢?
我个人认为就是,对象识别和业务流程(逻辑)的识别,这样说还是模糊。两个字概括就是 - 分类。有Java设计开发经验的应该明白,除非你做的不是面向对象编程。
项目管理:
本质是计划和分工。
设计人员只做接口设计,业务流程设计。这些人的经验一定要丰富,不是说考个架构师证就可以的,也不是说没有架构师证就不可以做。关键不在于证,而在于经验(技术经验、行业经验)和面向对象思想的理解。
程序员只是实现这些接口和调用这些接口实现类。