面向对象三大基本特征及五大基本原则介绍

目录

前言

一、面向过程和面向对象区别

二、面向对象的三大基本特征:封装、继承、多态

1、封装

2、继承

3、多态  

三、面向对象的五大基本原则

1、单一职责原则(SRP)

2、开放封闭原则(OCP)

3、里氏替换原则(LSP)

4、依赖倒置原则(DIP)

5、接口隔离原则(ISP)

总结


前言

       转载自:面向对象的三大基本特征,五大基本原则 - 风之之 - 博客园 (cnblogs.com)

       首先让我们引入面向过程与面向对象的概念,我们都常听到软件设计思想有面向过程和面向对象。那么什么是面向对象、什么是面向过程呢?

        面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

        面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

        本篇文章主要介绍面向过程与面向对象的区别与各自的优缺点,引入面向对象的三大特征与五大原则的基本概念


一、面向过程和面向对象区别

面向过程是具体化的,流程化的,解决一个问题,需要一步一步分析,一步一步实现。

面向对象是模型化/抽象化的,只要出现出一个类,密封好,等需要用的时候直接用就可以了,不需要要一步一步实现。

面向过程优点和缺点:

优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较浪费资源。

缺点:不易维护、不易复用、不易扩展

面向对象优点和缺点:

优点:易维护、易复用、易扩展、面向对象有封装、继承、多态的特征,可以设计出低耦合的系统,使系统更加灵活、易于维护。

缺点:性能比面向过程差

二、面向对象的三大基本特征:封装、继承、多态

1、封装

  封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

  封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

  面相对象的不就是使用程序处理事情时以对象为中心去分析吗,与面向过程不同,面向过程关心处理的逻辑、流程等问题,而不关心事件主体。而面向对象即面向主体,所以我们在解决问题时应该先进行对象的封装(对象是封装类的实例,比如张三是人,人是一个封装类,张三只是对象中的一个实例、一个对象)。比如我们日常生活中的小兔子、小绵羊都可以封装为一个类。比如兔子的属性有两只耳朵、四只腿、一双眼睛、三瓣嘴等;行为(功能)有跑、跳、吃素等。

2、继承

  继承是面向对象的基本特征之一,继承机制允许创建分等级层次的类。继承就是子类继承父类的属性(特征)和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

  我们在上面已经封装了兔子这个类,其他动物也一样可以进行封装。在封装过程中我们发现兔子、绵羊这两个类具有相似的功能或特性如吃草,所以我们可以抽取共有特征和方法形成高一层的类,如这里的食草动物、食肉动物。继承之间是子父类的关系。继承机制可以很好的描述一个类的生态,也提高了代码复用率,在Java中的Object类是所有类的超类,常称作上帝类。

3、多态  

  多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

三、面向对象的五大基本原则

1、单一职责原则(SRP)

  一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作。

       比如在职员类里,将前端程序员、后端程序员、销售经理、售后服务等多种情况都放在职员类里,会导致代码非常混乱,在这个假设中,职员类里的每个方法都要判断是哪种类别、什么情况,从类结构上来说将会十分臃肿且复杂。

2、开放封闭原则(OCP)

  对象或实体应该对扩展开放,对修改封闭。

       更改封闭即是在我们对模块进行扩展时,无需对源有程序代码和DLL进行修改或重新编译文件。这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术。

3、里氏替换原则(LSP)

  即对父类的调用同样适用于子类

       在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。

4、依赖倒置原则(DIP)

  高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现

        可以这样理解,上面我举例子的时候先说了兔子和绵羊,然后才推出食草动物。但如果我们继续认识了牛、马等食草动物,我们会发现我们需要不断调整食草动物的描述,这样程序会变得僵化,所以我们不应该让子类依赖于实体,不应该让父类模块依赖于子类模块。所以我们需要将食草动物设计为抽象类,即抽象类或接口。这样下层只需要实现相应的细节而不会影响父类。

5、接口隔离原则(ISP)

  不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!

        比如,为了减少接口的定义,将许多类似的方法都放在一个接口中,最后会发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!


总结

        认真思考理解面向对象与面向过程的思想,看清他们的区别,对于大家今后学习面向对象非常的与帮助。想要学好面向对象,把握面向对象的三大基本特征与五大基本原则是必不可少的。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值