# Day17--那天....我学Wendy跪着读完的OOP

  • 什麽是物件导向?
  • 为什麽需要物件导向?
  • 物件导向重要在什麽地方?

要回答第一个问题前,必须先回答一件事:物件(Object)是什麽?

在Struct、Class的语法篇章中,都共通的使用了一个专有名词叫做「实体化」,这个名词代表的意义就是「产生了一个实体(instance)」,这个概念的重要性在於,我们在使用Struct、Class去写程序的时候,其实就是在写一个「蓝图」,兴许拿工程来比喻:

当我实体化一个东西,就是同等於我把我写出来的一个设计蓝图化为真正的存在

於是,我们实体化了一个东西,也就代表了一个物件的产生。同时,也意味着我们将设计蓝图的真正地创造成了一个「存在物」。

实体(instance)在现在我们所说的意义中代表的就是物件(Object)。

封装(Encapsulation)

封装的概念就有点像是一个包装的盒子,我们可以决定这个盒子里面装什麽,以及这个盒子的哪个部分是篓空的,可以让外界藉由它的篓空去拿取它篓空部分中裸露的东西。

就以封装的概念来说,Class的封装性,就很明显的诉说了一件事情:

我们必须透过接口,透过物件所提供的介面(interface),取得物件内部细节。如果没有透过这个接口,就没有办法取得这个物件的细节。

换个比较有趣的说法可以是这样:我们有一台跑车,但我们不用去理解跑车内的引擎、轮胎、把手、方向盘是怎麽做的,但我们知道这些东西是已经被做好的,我们只需要用我们已知的方法操作它就好(比如踩油门、拉手煞车之类的)。

继承(Inherit)

由於物件的完整概念来自类别,所以继承概念的描述,也是类别最重要的元素:

承继我先前在「继承」的相关篇章所描述的:

「父类别」与「子类别」的关系就像是爸爸与儿子一样,儿子可以可以继承爸爸的某些基因,但是他并不全然像爸爸,他仍然有他自己可以添加的特质。

这边就不多说所谓继承的概念。

多型(Polymorphism)

多型的概念,其实也是由继承的概念向下延伸的,多型其实描述的就是:当一个父亲的两个儿子,而这两个儿子都拥有父亲的一些特质,但同时又不会完全跟父亲相同。

比如两个儿子说话的声音都不会跟父亲一样。

这样的概念回到多型中,可以精确的描述成:「就算子类别都继承同样的方法,但他们的实际内容都不相同」

为什麽需要物件导向?

Well,没有物件导向的世界,在iOS开发里可能会是一个ViewController中,有着散落一地的属性、方法,它可能没有任何的系统被归纳,所以让大家在实际操作的时候,不知道要去哪些地方访问这些被归类的功能或概念。

也就是说,物件导向其实建构了一个程序开发的界门纲目科属种,我们可以很清楚地知道,在这个东西内部可能有哪些东西可以调出来用。也让开发者在执行开发的时候,不会在巨大的ViewController中大海捞针。

所以,充其量物件导向的概念就是在开发的过程中,所有被创建的逻辑都能被找到、应用,让开发的过程更加的顺利,这也是承继开头的三个问题中,最後一个问题的概念。

https://ithelp.ithome.com.tw/upload/images/20211002/20141127NxUPg825D8.png

tags: 铁人赛

<<:  [Day17] 系统保护策略

>>:  [Day17]ISO 27001 附录 A.5 资讯安全政策

D31 - 「来互相伤害啊!」:无聊我要见到血流成河

上竞技场就是要决斗阿,不然要干嘛。 来让人物发射武器!血流成河吧! 首先来回顾一下 D27 武器规划...

Day_21 DNS/DDNS/Port Forwards (二)

昨日DNS/DDNS/Port Forwards (一)中提到固定实体IP的设定,但如果你用的是浮动...

CMoney第八届菁英软件工程师战斗营_Week 2

安安 过了一周我又来了 首先需要先为自己与同学鼓掌撑过第一周✌️ 第二周开始就是介面地狱 每周第一天...

Day23-Kubernetes 那些事 - CronJob

前言 今天要介绍的内容不一定适用於每位读者,不一定每位读者都会用到这个功能,但因为 K8s 也有提供...

【24】如果把 Dropout 放在 CNN 之後会发生什麽事

Colab连结 不知道大家有没有发现,目前现在主流的网路结构中已经愈来愈少看到 Dropout 了,...