高内聚低耦合:
内聚:一个函数只具有单一功能
耦合:不同模块之间减少互相调用。就像完全图互相连线那样,叫高耦合。
接口:一组相互交互方法的集合。
交互方法定义的集合。
抽象类:介于类和接口之间,具有类的属性和方法,方法可以实现,但是不能实例化。
接口时特殊的抽象类。
区别:接口是相似方法声明的集合,抽象类包含抽象方法声明,也包含非抽象方法定义。
接口强调方法声明的相似性,并非定义。
抽象本质是类,包含方法和属性。
封装:
常常会有疑问,都是自己写的,为啥加保护?
虽然封装有很多好处,但实际过程中却有很多人觉得对属性进行封装很烦,因此看上去满屏都是基本一模 一样的 getXXX/setXXX,要写好多的相似代码,浪费时间。。。。。。 还不如干脆不用封装属性算了,反正程序都是我写的,我也不会乱来。 真的是这样的么? 首先,程序基本上都不会是你一个人写的,在一个实际的项目里面,肯定存在分工合作,你无法控制别人, 你也无法跟踪别人写的每一行代码,如果别人一不小心手一抖,多敲了一个 0(扣款),或者少敲了一个 0 (例如付款),那么怎么办呢? 其次,就算你能够控制所有人(例如你是一个老大,下面的兄弟都服服帖帖),还有一种东东你是控制不 了的:“客户需求”! 例如:同样是获取年龄,有很多种需求。 老实人:直接告诉别人 TA 多少岁; 漂亮 MM:在已有的年龄上减去 10 岁; 明星:永远 25(知道是谁么?); 隐私保护者:干嘛要告诉你;
1,保护隐私
2,隔离复杂度
继承
多态
单一原则:
一个类应该有且只有一个变化的原因(There should never be more than one reason for a class to change.)"
感到疑问的地方,如何鉴定一个类只做一件事情?
开闭原则:software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification
开闭原则 (The Open/Closed Principle, OCP) 规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”[1],这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。
对使用者修改封闭,对生产者修改开放,A调用B,A是消费者,B是生产者。
提供者增加新的功能,使用者不修改代码就能用上么?
比如说:你设计一款有关车游戏,需要设计一个“car”的类,这个类原来有“加速”、“刹车”、“转向”三个功能,现在你要加一个新功能“改装”,游戏中其它类例如player,不修改代码就可以用上“改装”这个功能么?
很显然这是不可能的,我都新加了一个函数,你都不调用就能用新的功能,这也太邪乎了吧?
答案在于所谓的增加新功能,并不是增加一个全新的功能,而是原有的功能有了替代实现,这也是英文的“extension”所隐含的深意!
继续以赛车car作为例子,假设现在你设计了“卡车”、“跑车”、“家用车”三种车,现在要增加一种车“卡丁车”,只要“卡丁车”也实现了“加速”、“刹车”、“转向”,那么player不需要修改代码,就可以玩“卡丁车”了;但如果你增加了一种“改装”的功能,那么player必须修改才能使用“改装”功能。