面向过程和面向对象

类和对象由来

1、这个世界是有什么组成的?

不同的人有不同的回答。

  1. 化学家认为世界是由原子、分子等化学物质组成;
  2. 画家认为世界是由不同颜色组成的;
  3. 重点来了,分类学家认为世界是由不同类型的事物(对象)组成的。
  4. 面向对象就是站在分类学家的角度分析问题的。世界是由动物,植物等组成的,动物又分为单细胞动物、多细胞动物、哺乳动物等,哺乳动物又分为人,狗,猪…

2、什么是类和对象?

可见世间万物都可分类。

  1. 比如什么是人类?每个人都有身高、体重、血型等属性,具有直立行走,思考等行为。之所以人类可以区别于其他类型的动物,是因为每个人都具有人这个群体的属性和方法。
  2. “人类” 仅仅是一个抽象的概念,是不存在的实体。具备 “人类”这个群体的属性和方法的对象叫做 人。这个对象 人 是实际存在的实体。每个人都是人这个群体(人类)的一个对象。
  3. 为什么狗不是人?因为狗不具备人这个群体的属性和行为,不会直立行走,不会思考创造。

由上述可见,

1. 什么是类?

类就是描述了一组有相同特征(属性)和相同行为(方法)的对象。在程序中,类实际上就是一种数据类型。例如整型、浮点型等。

2. 什么是对象?

对象是人们要研究的任何事物,所以万物皆对象。对象具有类所描述的属性和方法,即对象=属性(特征)+方法(行为)

3. 类和对象的关系?

  • 类是抽象的,对象是具体的。所以说对象的抽象是类,类的具体化是对象

  • 类的对象的模板/蓝图。在程序中,创建一个对象,就是使用一个类作为构建该对象的基础。

面向过程

  1. 面向过程思想是站在过程的角度思考问题,就是把任务分成一个个步骤,然后用函数来实现各个步骤的功能,再在主函数中依次调用这些函数,以此来完成任务。(把每个函数看作一个个过程)
  2. 符合计算机解决问题的方式,强调的是功能行为。
  3. 面向过程是自顶向下、逐步求精,采用模块化技术、分而治之的方法,将系统按功能分解成若干模块。

面向对象

  1. 面向对象是站在对象的角度思考问题,就是把任务抽象成多个对象,在赋予对象一些属性和方法,然后拥有不同功能的对象相互配合,以此来完成任务。
  2. 符合人类解决问题的思维方式,强调的是具备某些功能的对象

面向对象的三大特性

什么是抽象?

从特定的角度出发,从已经存在的一些事物中抽取我们所关注的特性、行为,从而形成一个新的事物的思维过程。

比如进程是对一个正在运行的程序的抽象、虚拟机是对整个计算机的抽象、指令集是对CPU的抽象,文件是对输入、输出设备的抽象。

1、封装

封装就是将对象的实现细节隐藏起来,通过公共的方法来对外暴露该对象的功能。提高数据的安全性。

比如一般会把类的属性声明为私有的,而把类的方法声明为公共的。这样,对象能够直接调用类中定义的所有方法,当对象想要修改或得到自己的属性的时候就必须要调用以定义好的专用的方法才能够实现。你想想,你会把你的信用卡密码公布出来嘛?呵呵!所以,我们提倡的是: “对象调方法,方法改属性”;

2、继承

  1. 继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。
  2. 继承是多态的基础,没有继承就没有多态。

3、多态

多态是可以把子类对象赋给父类变量,但运行时表现出子类的行为特征。这说明,同一类型的对象在运行时可以表现出不同的行为特征。

多态的好处——>说“空话”做实事: 谈谈多态

面向过程和面向对象的优缺点

用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。

蛋炒饭最后一道工序肯定是把米饭和鸡蛋混在一起炒均匀。盖浇饭则是把米饭和菜分别做好,如果你要宫爆鸡丁盖饭,就给你浇一份鸡丁;如果你要红烧肉盖饭,就给你浇一份红烧肉。

蛋炒饭的好处就是入味均匀,味道香。如果你不爱吃鸡蛋,只爱吃老干妈,那么唯一的办法就是全部倒掉,重新炒一份老干妈炒饭。盖浇饭就十分简单了,只需要将米饭上面的菜更换一份就好了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

你觉得哪个更好吃呢?显然不同的人有不同的口味。盖浇饭的好处就是"菜" “饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。蛋炒饭将"蛋”“饭"搅和在一起,想换"蛋”"饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。

面向过程

优点:性能高,因为类需要实例化,开销大,消耗资源。比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:设计不够直观,与人类习惯思维不同。可扩展性差,可维护性低。

面向对象

优点:易维护、易复用、易扩展。符合人类解决问题的思维方式。还有封装、继承、多态的特性可以设计出低耦合的系统。
缺点:性能比面向过程低

面向过程的语言与面相对象的语言的区别还在于,面向过程的语言不允许程序员自己定义数据类型,而只能使用程序中内置的数据类型!而为了模 拟真实世界,为了更好的解决问题,往往我们需要创建解决问题所必需的数据类型!面向对象编程为我们提供了解决方案

千万不要认为面向对象一定是优于面向过程的,它们只是在某一特定领域或特殊场景下有着独到的优势。

参考文章:

面向对象思想

面向对象与面向过程的本质的区别

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值