前言
在阅读下文时,先列举一下10个面向对象理论,看看自己掌握了多少。
避免重复,DRY(Don’t repeat yourself): 如果你准备在不同地方写同一段代码,那么只写一个方法。如果你不止一次硬编码某个值,那么将其声明成public final常量。这么做的好处就是容易维护。但是不要滥用这一条,重复不是指代码的重复,而是指功能的重复。
将变化封装起来:所以最好将你觉得将来会有改变的代码封装起来。这样做的好处就是更容易测试和维护正确的被封装的代码。
开放且封闭的设计理论(Open Closed Design Principle):类、方法以及功能应该对扩展开放(新的功能),而对更改封闭。软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
单一责任原理(Single Responsibility Principle (SRP)):每次一个类只有一个更改的原因,或者一个类只应该完成单一的功能。如果你将多过一个功能放在一个类中,它会将两个功能耦合在一起,如果你改变了其中的一个功能,可能会破坏另外一个功能,这样便需要更多的测试以确保上线时不出现什么岔子。
依赖注入或反转原理(DIP The Dependency Inversion Principle):高层模块不应该依赖于低层模块,二者都应该依赖于抽象 ; 抽象不应该依赖于细节,细节应该依赖于抽象 ;容器会提供依赖注入,Spring非常好的实现了依赖注入。
多用组合,少用继承:组合(接口继承,纯虚类)的灵活性高过继承。组合可以在运行时通过设置某个属性以及通过接口来组合某个类,我们可以使用多态,这样就能随时改变类的行为,大大提高了灵活性。
Liskov替代原理(Liskov Substitution Principle (LSP)):当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系
接口分离理论(Interface Segregation principle (ISP)):不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好;如果客户端没有使用一个接口(不使用的接口)的话,就不要实现它。当一个接口包含两个以上的功能,如果客户端仅仅需要其中某个功能,而不需要另外一个,那么就不要实现它(总接口)。
针对接口编程,而不是针对实现编程:尽量针对接口编程,这样如果要引入任何新的接口,也有足够的灵活性。在变量的类型、方法的返回类型以及参量类型中使用接口类型。
代理理论(Delegation principle):不要所有的事情都自己做,有时候要将任务代理给相应的类去做。运用代理模式最经典的例子就是equals()和hashCode()方法。为了比较两个对象的相等与否,我们没有用客户端代码去比较,而是让对象自己去比较。
将变化封装起来:所以最好将你觉得将来会有改变的代码封装起来。这样做的好处就是更容易测试和维护正确的被封装的代码。
开放且封闭的设计理论(Open Closed Design Principle):类、方法以及功能应该对扩展开放(新的功能),而对更改封闭。软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
单一责任原理(Single Responsibility Principle (SRP)):每次一个类只有一个更改的原因,或者一个类只应该完成单一的功能。如果你将多过一个功能放在一个类中,它会将两个功能耦合在一起,如果你改变了其中的一个功能,可能会破坏另外一个功能,这样便需要更多的测试以确保上线时不出现什么岔子。
依赖注入或反转原理(DIP The Dependency Inversion Principle):高层模块不应该依赖于低层模块,二者都应该依赖于抽象 ; 抽象不应该依赖于细节,细节应该依赖于抽象 ;容器会提供依赖注入,Spring非常好的实现了依赖注入。
多用组合,少用继承:组合(接口继承,纯虚类)的灵活性高过继承。组合可以在运行时通过设置某个属性以及通过接口来组合某个类,我们可以使用多态,这样就能随时改变类的行为,大大提高了灵活性。
Liskov替代原理(Liskov Substitution Principle (LSP)):当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系
接口分离理论(Interface Segregation principle (ISP)):不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好;如果客户端没有使用一个接口(不使用的接口)的话,就不要实现它。当一个接口包含两个以上的功能,如果客户端仅仅需要其中某个功能,而不需要另外一个,那么就不要实现它(总接口)。
针对接口编程,而不是针对实现编程:尽量针对接口编程,这样如果要引入任何新的接口,也有足够的灵活性。在变量的类型、方法的返回类型以及参量类型中使用接口类型。
代理理论(Delegation principle):不要所有的事情都自己做,有时候要将任务代理给相应的类去做。运用代理模式最经典的例子就是equals()和hashCode()方法。为了比较两个对象的相等与否,我们没有用客户端代码去比较,而是让对象自己去比较。
正文
1.面向对象(oo)a.什么是面向对象(Object):object是指一个具体的事物的实例
b.面向对象的概念:
Object oriented:指面向客观事物之间的关系(对象与对象)
面向对象的定义:根据用户需求抽象出业务对象,然后再根据需求进行合理划分;形成相对独立的业务功能,之后再设计业务逻辑。利用面向对象的特点(封装、抽象、继承、多态)的编程思想实现业务需求,最后通过每个业务之间功能的关系进行整合,从而满足客户的要求。
在分析项目业务关系的时候,应用一些UML(Unified Modeling Language)图,例如常用的用例图(use case diagram),类图(class diagram),时序图(sequence diagram)等等,会有很大的帮助,这样能尽快找出业务逻辑主要面对的对象,然后对每个对象进行行为划分,最后再实现对象之间的集成和通信。
2.面向对象分析设计(object oriented analysis design) 是现代软件企业广泛采用的一种有效技术。
a.方法:要求设计中要映射现实世界中指定的问题域中的对象和实体。
b.优点:能够构建于现实世界相对应的问题模型。并且能够保持它们的结构、关系和行为的一种编程思想。
c.面向对象中的概念:
a.类型(类):名词
b.引用(变量):用来指向具体东西的代词
c.对象:指具体概念的个体实例
d.行为:方法、动作。
e.多态:行为多态,通过相同的动作完成的,但是完成结果不同;引用多态,同一个代词指代对象不同。
f.封装:任何对象实例都是尽可能的保护其内部的具体实现,减少暴露。他的实现细节补血药其他对象关注。比如:汽车的发动机。
总结
1.就先从我今天使用Beyond Compare 3比对工具说起,今天,我对该工具有了更生层次的领悟:它用于是发现跟自己的cr无关的代码,让我们测试过的代码上生产。
2.第二点是,关于代码的特殊处理,针对临时代码,我们需要详细注释,尤其是uat测试的临时代码,应写在组件里面,以便uat写死的数据可以方便的在上生产时去掉;当然组件加些自我检测的代码更好。不要因为环境的问题而导致程序不一致,要将应用处理的逻辑分离出来。减少与环境的关联性
3.程序员看待开发:
心中要当作没有测试环节(uat测试),程序质量不要依赖后续的测试,即使测试通过,并不代表版本正确。要从设计保证质量
4谈谈关于程序的维护:
关联和独立性,第一,代码中经常动的和不经常动的要分离;第二业务经常变化和不变化的分离。
注:只测试变动的代码,并不是完整的测试,尤其是耦合度高的代码更是如此。
5.读代码也是测试的一种方法,大脑可以带数据的测试。
6.S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写:
SRP(The Single Responsibility Principle )单一责任原则;OCP(The Open Closed Principle )开放封闭原则;LSP(The Liskov Substitution Principle)里氏替换原则;DIP(The Dependency Inversion Principle)依赖倒置原则;SP
(The Interface Segregation Principle)接口分离原则