OOP 面向对象的三大特征和六大原则

OOP:Object Oriented Programming,面向对象的程序设计。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建 而对象即是对类封装后的实例化,可以调用类对象和方法。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的集合。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面对对象主要具有继承,封装,和多态性三大特征:
1.继承:继承是从已有类得到继承信息创建新类的过程。
2.封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。我们编写一个类就是对数据和数据操作的封装;我们在类中编写的方法就是对实现细节的一种封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
3.多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是对同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:方法重写和对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
基于以上这些特征,面向对象的程序设计具有六大编写原则:

单一职责原则:

单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情。

比如:我们在写一个简单画图板时,一般把画图板界面与画图板上的监听器分成两个类去完成。这样的好处比如我们只想改变画图板界面时,监听器类就可以直接调用,不必重新编写。可以降低类的复杂性,提高类的可读性和系统的维护性。

开闭原则:

开闭原则的定义是软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是对于修改是关闭的。

比如对person父类中有很多方法,但想在增加study的方法时,不要直接在父类中修改,可以在student子类中扩展study方法。这样可以提高方法的复用性和系统的维护性。

里氏替换原则:

里氏替换原则定义是如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都替换成o2的时候,程序P的行为都没有发生变化,那么类型T2是类型T1的子类型。

简单来说就是子类可以扩展父类功能,但是不能改变其原有的功能。可以有以下这些理解:

  1. 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。
  2. 子类可以增加自己独有的方法。
  3. 当子类的方法重载父类的方法时候,方法的形参要比父类的方法的输入参数更加宽松。
  4. 当子类的方法实现父类的抽象方法时,方法的返回值要比父类更严格。

依赖倒置原则:

依赖倒置原则(Dependence Inversion Principle,DIP),原始定义包含三层含义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 

比如:有一个奔驰类,在person类中调用其方法可以实现驾驶奔驰,但却无法驾驶宝马,所以最好的办法是写一个汽车接口,这样可以让不同品牌的汽车来实现它,person类中就可以通过调用实现好的类来驾驶不同汽车。

接口隔离原则:

接口隔离原则的定义是客户端不应该依赖他不需要的接口。

比如:一个work接口中有teach和study两个抽象方法,而对于teacher来说只用teach方法,却也要把study方法实现一遍,这样代码就会冗余,并增加程序运行负担,因此应该把teach和study方法分别写成两个接口。这样可以提高代码的灵活性。

迪米特原则:

迪米特原则也被称为最小知识原则,他的定义一个对象应该对其他对象保持最小的了解。简单的理解就是高内聚,低耦合,一个类尽量减少对其他对象的依赖,并且这个类的方法和属性能用私有的就尽量私有化.


        以上原则要根据实际情况而具体把握,比如方向接口不能因为某个程序可能只使用一个程序而为每一个方向都写一个接口,那样反而会更加麻烦。












  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值