编程开发

“致命方块”:多重继承与协议

上节课我们提到了协议,但是只讲了它的一种应用方式,这节课我们就来深入地了解一下这个用起来和 class 差不多的协议究竟有什么高深奥义。

现在,我们要再一次回顾那个可耻的继承树:

这里我们写了武器……是用来进行攻击和防守的。那么,作为一个游戏,武器的模型不能够单单只用在这一个地方[……]

点击跳转以继续阅读

协议:不允许实例化的类以及必须被重写的方法

说了方法的重写,我们再回过头来看看那个继承树:

这个看起来应该还行,我们可以创建大刀的实例,创建手枪的实例……

但是如果我要这样写呢?

那么问题来了:挖掘机……

不,我们的问题是“武器”到底是个什么东西?[……]

点击跳转以继续阅读

自定义:override!

说了那么多次的重写,这次我们就来认真的对待一下方法的重写。

合约

我们说了,继承就相当于是签订合约,我们继承出来的子类一定要遵守这个合约,那么就算你想要做一些合约里没有的事情,也要遵守合约的规范,所以,你重写方法,也一定要符合方法的类型。

我们讲过方法的类型,它以 ()->() 这样[……]

点击跳转以继续阅读

多肽?多态!

上一节课我们说完了继承,那这节课我们就继续深入,来看看继承树的大招是什么。

可能我和你说起多态这个发音,你最先想到的应该是高中生物里讲的“多肽”;好吧,这两者之间唯一相同的可能就是发音了。

继承的意义

我们说继承实现的意义非凡,它大大降低了我们代码中的冗余行数,降低了代码的维护难度……[……]

点击跳转以继续阅读

到底怎么办:“是一个”与“有一个”

上节课我们具体地讲述了继承的机制,并且也设计了一个继承树,那么问题来了:我不是要问挖掘机技术哪家强?我是要问如何来确定一个类是另一个类的子类呢?我们又如何设计一个类而不是某个类中的属性呢?

“是一个”与“有一个”

这里我们就要用这么一个方法来检验它们二者之间的关系了:

我们说,手枪是枪械——O[……]

点击跳转以继续阅读

再次回顾:继承

我们这次一起来回顾一下之前几节课里提到的继承,我们曾在初见 OOP 里用了一个开发手机(系统)的栗子来描述继承这个东西,相信大家还有印象。

继承

那么这节课我们就深入的来了解了解继承这个概念。

这个其实也不难理解,你看,当[……]

点击跳转以继续阅读

不是你想的那样:一个攻击网站的程序

这节课我们来试试开发一个简单的命令行小游戏,来完整的体验一次所谓的“开发过程”。

游戏设定是这样的:

这是一种棋盘类游戏,我们来猜测敌人战舰的位置,只要命中数发就可以击沉它们。

我们给这些战舰贴点标签……比如各种网站吧?所以,这就成了一个攻击网站的程序……捂脸。

游戏目标

我们要玩家以[……]

点击跳转以继续阅读

计算属性与封装

我们在上课之前,一起来回顾一下以前曾提过的“SoC”的概念,我们说这个叫做“Separation of Concerns”,我把它翻译为责任分离——即不同的部分专注于自己的那一部分。或者说一个对象完成一个目标。

这样做的目标既让代码更加模块化易于维护,也让系统运行效率更高。所以说,我们要让对象[……]

点击跳转以继续阅读

储存器的值与引用

声明一个变量

我们使用 var 来声明一个变量,就好像从柜子里拿出了一个试管放在了实验台上;

我们给变量规定了一个类型,就好像在试管上贴上了标签;

那么放入的试剂就必须是标签上标记了的——否则可能导致中毒或者爆炸。

同样的,如果我们试图给一个储存器放入一个错误的数据类型,那么编译[……]

点击跳转以继续阅读