从动漫《我的英雄学院》浅谈 OOP(一)

从动漫《我的英雄学院》浅谈 OOP(一)


我想先聊会儿

如若不明白思想,你的还是你的,我的将还是我的;思想要比方法更重要,在此告诉为什么。

他们说的 OOP

OOP 即面向对象的程序设计,区别于面向过程和在某篇文章中看到的面向数据的程序设计。OOP 的设计角度就是从对象出发的,那么对象是什么?抽象的一个类,一个问题所对应的类。他们以集合的概念抽象阐述了对象,那么对象具象是什么?当我在接触的不同事物中寻求回答时,下面的浅谈就是我所找的答案。

为什么我要选《我的英雄学院》?

对于没有看过这部番剧的各位大佬来说,看这个浅谈还不如去啃大佬的抽象教程(手动滑稽)。以放松的方式来写教程,是看到了微信公众号 "进击的 Coder" 里面的以 LOL 英雄来阐述程序这么一种模式启发的,原来写教程可以这么好玩。那么我为什么会选择动漫?

原来我可以说没啥爱好了 ~ 偶尔看看电影,然后玩玩乐器、听听音乐(真的要去学音乐,其实那真的不算是放松了!!!空余时间不是看新闻、也就算在学其他东西了吧)。

需求来了——得面向对象了(也就是正常的想追吧)!!在翻阅空间、b 站等等一切可以获取的资料和各种试探性的聊天之后,我终于开始追番了,被推荐的第一部就是《我的英雄学院》了吧。(官方吐槽:舔狗本质!!!〒▽〒)

在看完番和那篇文章之后,哎 ~ 有点意思吼,好像有点联系嘞,嘤嘤嘤 ~~

为什么要写教程?

写教程本身其实就是对于所学的总结,“好记性不如烂笔头”。在学了数门计算机语言基础之后,我开始有点迷了,也越来越催发我写这个教程的欲望了。。。

本篇教程主要是基于本校老师所编写的“大机基”教程的 C++ 部分做的体会,也算是对于期末考试的一个复习和总结;在此基础之上会适当涉及一些其他语言的体会。

这里是正题

《我的英雄学院》涉及的程序设计思想。

什么是对象和实例?

在《我的英雄学院》中有很多的英雄,拿到职业英雄的人的个性往往是不同的;但是,很多的普通人也是有与英雄相同的个性。每一个人,无论是否是英雄,他们本身是存在的。正因如此,他们的每一个人都是一个对象,他们有他们的个性、长相、身材、特长等等。在程序设计中对象往往是特定的——一类的,他们不局限于人。可以是其他的东西。

每个人应当都属于一个有相同研究性质的群体——类,比如轰焦冻和他的老爹可以属于咱们要研究的具有“火”这个个性的一个类。但是呢,又不完全相同,他们有各自的属性。

虽然他们可以同属于一个类,但是又有自己的属性和方法;他们就可以称为某一个类的实例,也就是实实在在的例子。

我们把个性作为他的一个属性,虽然部分相同,但是这个人和一个类的其他人还是不同的!!所以在 C++ 中也有 this 这个指针,this 这个指针可以理解为我的是这个!!不是其他人的!!!

怎么去建立类?

建立类是根据需求来的!我有某个研究的需求才会去考虑某一类人。举个现实的例子,比如我,一个价格敏感型消费者,我要研究同属于价格敏感的其他人,那么我们就是一个类——class 价格敏感性消费者(伪代码,手动滑稽)。有了研究的问题,这样一个类就建立好了呗。

在《我的英雄学院》中,我想研究某一个个性,我就可以把拥有这个个性的人划到一个类去!然后面对具体的问题,看下面。

私有和公有

在 OOP 里面的我的和你的,可不是一个个实例的我的和你的,不完全像函数里面的局部变量那样。类是一个群体是没错的,比如轰焦冻和他老爹这个群体中拥有同样一个个性——火。但是他们是人,就涉及到他们有身高、体重、长相、想法等等。你多高、多重、长啥样那是你的属性,轰焦冻长得跟他老爹差别还是很大的吧 233333

我们把类的特征称为类的属性。别人要是能轻轻松松获取你的属性,那多可怕!!要是这样虽然我跟姚明在身高不是一类人,要是我们这一类要是能随机调用他们的身高(我可能都开心的要哭了,眼中那可能就是基本上都是萌妹了嘤嘤嘤),所以他们也坏坏的把自己类的属性都不给别的类访问。嗯,这就是私有!相反,我能访问他的,那就是公有了。一般的公有都是以方法显现的嗯,可以通过 getter 和 setter 方法获取和改变属性。

对了,一般有关键字的语言,关键字都是 public 和 private;有的语言是在标识符前面加下划线声明私有的。(标识符也就是起的名字啦!)

友元函数

首先,什么是友元函数?友元函数其实就是为了解决上面的问题的。你是我这个类的好朋友,那我就允许你用我的属性!(至于其他类也可以使用的这个情况,将会在后面提到)

在 C中,类外函数允许被访问类私有属性这个情况,我们称为友元函数。比如举个不是特别恰当的例子,在英雄资质考试的时候,(我忘了叫啥英雄名)的能把人变成肉团的个性,咔酱在对战的时候不敌,就把自己的装备化为手雷给了同学(我又忘了叫啥了)。这里的装备就是使用咔酱属性的一个方法,这样就给他炸了!so??? 不是好朋友我给你用??在 C中在函数声明前面加上 friend 就可以声明友元函数了。

方法

可以这么理解!方法就是类里面的函数!在参考国外的教程的时候,方法和函数在英文来讲不是一个东西。方法是 method,而函数是 function!

构造函数

构造函数的英文是 constructor,其本身是实例化类的过程。比如我默认了火这个类,我研究他们使用个性的时候得用到火啊!不能把他们归成一类之后就不用个性了!因此我把个性也定义为一个属性,给它的默认值是火!但是,类是抽象的,我们不能在定义的时候给它赋默认值;每次实例化都得赋值也麻烦,因而有了构造函数这个东西。

C++ 里面的规范也是通过命名跟类的名称一样的某一种特殊的函数构建构造函数的。通过构造函数,就能够在编译时给类赋默认值!

析构函数

析构函数也是一类特殊的函数!用于在实例快要 over 的时候,执行相应的操作。举个例子,欧尔麦特在击败“那个男人”(All·For·One)之后,为了保持肌肉形态的硬撑的那一下,就可以认为是调用了析构函数 233333

C++ 里面的析构函数的定义是通过在命名跟类名称一样的某一种特殊的函数并在前面加 ~ 构建的!

更多阐述,请看下回分解!