面向对象的三个基本特征和五个设计原则

面向对象的精神:可维护、可扩展、可复用、灵活性好。


三个基本特征【封装、继承、多态】


封装:每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装。

因为对象不必依赖其他对象来完成自己的操作,这样方法和属性包装在类中,通过类的实例来实现。

封装的好处:1、良好的封装可以减少耦合;2、类内部的实现可以自由的修改;3、类具有清晰的对外接口。

 

继承:对象的继承代表了一种“is-a”的关系,B继承A,表示B is A(猫是哺乳动物)。继承者是被继承者的特殊化,除了具备被继承者的特性之外,还具备自己独立的特性。继承定义了类如何相互关联,共享特性。

继承的工作方式是,定义父类(基类)和子类(派生类),其中子类继承父类的所有特性(父类所有非private属性和功能),子类还可以定义新的特性(扩展父类没有的属性和功能 or 重写父类方法)。 protect就是子类可以对基类有访问权的修饰符。

子类从父类继承的成员有方法、属性、事件、索引指示器,但是不能继承父类的构造器。构造器不能被继承,只能被调用。调用父类的成员,用base关键字。

优点:使用继承使得所有子类公共的部分都放在父类,使得代码得到共享,避免了重复。继承使得修改或扩展继承而来的实现都比较容易。

缺点:父类改变,子类不得不变。 继承破坏了包装,父类实现细节暴露给了子类,增大两个类的耦合性。【继承是一种父子类间的强耦合关系】


多态:多态表示不同的对象可以执行相同的动作,但是要通过它们自己的实现代码来执行。

多态原理:当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用,也就是说,虚方法是按照其运行时的类型(而非编译时类型)进行动态绑定调用的。

多态特点:

1、子类以父类的身份出现。

2、子类在工作时以自己的方式来实现。

3、子类以父类身份出现时,子类特有的属性和方法不可以使用。

4、为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚的。这是通过在该成员的返回值类型之前加上vittual关键字实现的。

5、子类可以选择使用override(重写)将父类实现替换为自己的实现。

 

五个设计原则:

【单一职责、开放封闭、依赖倒转、里氏代换、合成聚合复用、迪米特法则】

单一职责原理(Single-ResposibilityPrinciple):对于一个类而言,应该仅有一个引起它变化的原因。

 

开放-封闭原则(Open-Closedprinciple)软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。

开放-封闭原则:对于扩展是开放的,对于更改是封闭的。设计人员必须预测最可能发生变化的种类,然后构造抽象来隔离变化。【但是拒绝不成熟的抽象】

开放-封闭原则精神:面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

开放-封闭原则是面向对象设计的核心所在,遵守这个原则可以带来的好处是:可维护、可扩展、可复用、灵活性好。

 

依赖倒转原则(Dependecy-Inversion Principle)高层模块不应该依赖底层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。

 

里式代换原则LSP(Liskov-SubstituionPrinciple)子类型必须能够替换掉它们的父类型。

只有当子类可以替换父类,父类才能真正被复用,而子类才能在父类的基础上增加新的行为。

 

迪米特法则LoD(Law ofDemeter)也叫最少知识原则。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

迪米特法则的根本思想是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。促进了软件的复用。

 

合成/聚合复用原则CARP (Composite Reuse Principle):尽量使用合成/聚合,不要使用类继承:

合成(composition)和聚合(aggregation)都是关联的特殊种类。聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。【人群是一种聚合关系,但是人的身体和四肢是一种合成关系】

合成/聚合复用原则的好处是,优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小的规模,并且不太可能增长为不可控制的庞然大物

 

(网上还有一个接口隔离原则,书上没写,这里也记录下来)

接口隔离原则ISP (InterfaceSegregation Principle):使用多个专门的接口,而不使用单一的总接口。


敏捷开发原则:不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般不着急去实现塔,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要撤销/恢复操作的时候,把原来代码重构为命令模式才有意义。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值