Day 20 Ruby 封装 vs 继承

封装

先请 wiki 大大出来讲个话:

在物件导向程序设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式介面的实作细节部份包装、隐藏起来的方法。同时,它也是一种防止外界呼叫端,去存取物件内部实作细节的手段,这个手段是由程序语言本身来提供的。封装被视为是物件导向的四项原则之一。
适当的封装,可以将物件使用介面的程序实作部份隐藏起来,不让使用者看到,同时确保使用者无法任意更改物件内部的重要资料,若想接触资料只能通过公开接入方法(Publicly accessible methods)的方式( 如:"getters" 和"setters")。它可以让程序码更容易理解与维护,也加强了程序码的安全性。

阿修说文解字

封装就是要让使用者可以使用这个物件,但不让使用者知道内部的逻辑。
在 Ruby 可以对变数及方法做封装:

  • 封装变数
    像是实体变数(@开头)及类别变数(@@开头)就是封装在类别内部的,类别外部无法存取。
  • 封装方法
    像是 private 或是 protected 可以把方法关起来,变成私有方法。

继承

依旧请 wiki 大大出来讲个话:

继承(英语:inheritance)是物件导向软件技术当中的一个概念。如果一个类别B「继承自」另一个类别A,就把这个B称为「A的子类」,而把A称为「B的父类别别」也可以称「A是B的超类」。继承可以使得子类具有父类别别的各种属性和方法,而不需要再次编写相同的代码。
有些程序语言支援多重继承,即一个子类可以同时有多个父类别,比如C++程序语言;而在有些程序语言中,一个子类只能继承自一个父类别,比如Java程序语言,这时可以透过实作介面来实现与多重继承相似的效果。

阿修说文解字

继承就是把对方的方法复制一份到我这边用。
像是如果爸爸会打桌球,小孩继承爸爸,那小孩也会打桌球。
在 Ruby 内要使用继承是用 < 这个符号。
假设父层跟子层都有同样的方法时,如果想要使用子层的方法可以在子层的方法内加上 super,
如此便可以覆盖掉父层的方法。

参考:
[1]Ruby 程序语言入门
[2]封装 (物件导向程序设计)
[3]继承 (电脑科学)
[4]什麽是物件导向中的封装、继承和多型特性?


<<:  策略回测分析

>>:  Day 21:GitLab Container Registry

【Day 19】深度学习(Deep Learning)--- Tip(四)--- Momentum

昨天说在做深度学习的时候,我们可能会卡在Local minimum、saddle point、甚至是...

Day27 ( 游戏设计 ) 老鼠走迷宫

老鼠走迷宫 教学原文参考:老鼠走迷宫 这篇文章会介绍如何使用「创建角色」、「角色是否碰到其他角色」、...

Day 5 | 游戏流程与关卡设定

今天要为各位介绍我们的游戏流程与关卡设定 游戏流程 上图是游戏的流程图,我们的游戏采单一故事线的剧情...

[Android Studio 30天自我挑战] ScrollView元件介绍

在很多时候页面的文字过多或是需要显示的功能过多,导致下半部分无法显示, 这时候就可以使用Scroll...

day26 : k8s backup/restore/migrate with velero(上)

花了将近一个月的时间在k8s上建置各种服务,虽然大部分都是无状态的服务可以随时重建也不影响运行,不过...