抽象与面向对象

相比于面向过程,面向对象可以更好的抽象

现实中的实体,抽象为概念,并且,将其应用于程序,使得所编写的代码可读性大大提高

为什么这样说呢? -------->>> 抽象的意义

概念的定义

对概念的清晰定义,能够更好的理解概念所具备的共有属性,并与原有知识进行关联(知识之间往往具有很强的关联性)

如果感觉自己的思路混乱,往往是因为对概念的理解只有一种大概的模糊性,尝试去提出问题,通过问题,将概念理清晰

好处?

面向对象的理解有何好处?
看源码的时候,可以站在一种全局的视角,不仅可以知道技术的实现,还可以意识到该技术为什么这样实现

新技术的诞生与流行,往往在于替代或弥补原有技术的不足
面向对象相对于面向过程有什么好处?或者说,面向对象,弥补了面向过程的哪些不足?

抽象

先来理解下抽象,抽象可分为 adj、n、v
abstract:

  • adj
    • based on general ideas and not on any particular real person, thing or situation
    • existing in thought or as an idea but not having a physical reality
  • n
    • a short piece of writing containing the main ideas in a document
  • v
    • to remove sth from somewhere
    • to make a written summary of a book, etc.

thought: something that you think of or remember
idea: a plan, thought or suggestion, especially about what to do in a particular situation

抽象:从对象中,抽取出共有的特性(可作为名词、动词)
抽象的过程,得到了抽象的结果
该过程为:根据实体 — 提取 >>> 概念(共性)

抽象的意义 —— 简化细节

假设我们身边的一切都是用制造材料加以描述的:空调不是“空调”,而是“由金属和塑料做成的物体”;书不是“书”,而是“由纤维和墨做成的物体”
沟通时我们也不用“空调”和“书”这样的词汇,而是“金属和塑料做成的物体”和“纤维和墨做成的物体”。这样的做法,十分影响效率

通过抽象,塑造“空调”和“书”这样的概念,能够极大的提高我们的沟通效率以及思维秩序

程序可以理解为是人们构建的一个虚拟世界

为了提高编程人员的工作效率,使得虚拟世界能够像现实世界那样,充满着像“空调”和“书”这样的概念

而面向对象,正是构建与现实世界相似的虚拟世界的工具

抽象 —— 能够对复杂进行封装

马车、自行车、汽车、飞机:效率越高,概念越抽象(内部隐藏更多细节)

对复杂事物的封装,伴随的抽象概念的提出;但复杂被封装后,使得绝大部分人只享受复杂带来的好处,却不必去关心所封装的复杂

函数和类之间,代码提取的区别

面向过程中,对于代码提取,依赖于函数
而在面向对象中,可以利用到

那么,的与函数区别是什么?

The term “class” is etymologically derived from the Latin classis, which was used by census takers to categorize citizens by wealth in order to determine military service obligations.

census: the process of officially counting sth, especially a country’s population, and recording various facts

术语 “class” 在词源上源于拉丁语,人口普查的时候,会根据公民所拥有的财富,对其进行分类,以确定其是否应该服兵役

class

  • a group of people, animals or things that have similar characteristics or qualities

类可以理解为分类,在面向对象中,具有相同属性概念,可以提取到一个类中,这是函数所不具备的

类中有字段和方法

类中的方法,类比于函数输入的参数 —> 执行相应的逻辑操作 —> 返回结果(不同参数 --> 不同结果)

对象与实例

  • object: a thing that can be seen and touched, but is not alive
  • instance: a particular example or case of sth 具体的例子
  • particular: used to emphasize that you are referring to one individual person, thing or type of thing and not others
    对象是一种泛称,而实例往往与类联系在一起
    对象具有唯一标识,包括属性和方法
    对象:面对的具象;实例:实在的例子

对象的引入,使得可以在软件中模拟显示世界;针对问题进行编程

函数和类的生命周期

函数的生命周期为:在函数执行完成之后,将会从栈中弹出
类具备函数中所没有的字段,使用类实例化之后的对象,会保留在堆中,而不是从栈中弹出

类中的字段

类中字段的存在,带给了类哪些功能,而这些功能是函数所不具备的?

对象能够得到保留,那么,可以利用字段,去⭐保存一些数据或状态值💾

字段可实现与函数中的参数相同的功能,于是,假设你将字段看成参数,那么,也就是说,一个类中,封装了参数和行为

那这样有什么好处呢?⭐实现了参数的复用,类似于全局变量的效果,但是通常来说,字段服务于当前类,其职责更明确

类的隔离 —— 功能的分类

类的隔离,相比于通用的函数,其逻辑更加清晰,便于维护

且更易扩展 —> 因为类有清晰的界定 (你可以将类看成功能的分类)

即便是工具函数,也可以定义一个工具类

类的自动提示

当在对象后面添加 “.” 之后,IDEA 或其他编译器会给出提示,而函数做不到这点

普通类与抽象类被继承的对比

抽象类一般是通过重构得来,是一种“自底而上”的设计

二者的区别主要在于:子类的重写,是否具有确定性

  • 普通类可将逻辑提取为一个函数,然后返回 null,之后子类可重写该函数的逻辑;但问题是,你无法保证子类是否会真的重写
  • 抽象类中子类的重写,暗含确定性,继承的子类一定要重写所定义的抽象方法

抽象类的本质就是提取不变的公共逻辑,将可变的抽象出来,定义为抽象方法,留给子类实现(并且子类一定要实现)

面向对象设计的优点

通过对象,使得能够能加关注业务功能

抽象获得的对象有助于隐藏复杂度,这在一定程度上简化了理解虚拟世界的难度

如果在现实中找不到对象的影子,仍可以利用对象的行为

类之间的隔离,维护了一种边界,构造出了软件中的“形”

通过抽象,构建对象,但如果抽象出的概念并不清晰,并不会获得比面向过程更好的结果

参考
软件设计的真谛
面向对象设计的优点
面向对象编程(OOP)的价值与优点是什么?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值