中场回顾

过去一周我们提到了物件导向程序设计的重要概念,像是类别、抽象类别、介面,以及四大特徵:抽象、封装、继承、多型。

这里让我尝试用一段话来整理这些内容之间的关系:

「物件导向程序设计」是程序设计典范当中的其中一种,透过「物件」来模拟真实世界的事物,其中包含了事物本身的属性与操作方式,以及和其他事物之间的互动关系。

为了有效率的模拟真实世界的事物,我们开始将事物分门别类,建立各种「类别」,并在从不同类别当中抽取共同特质,建立 parent 类别或是「抽象类别」,持续建立类别之间的关系与阶层结构(继承关系)。就像是生物学当中的「界门纲目科属种」的分类与阶层关系。另一方面,我们也透过「介面」,来描述物件类别在继承关系之外,能够获得(或展现)的特质与能力。

上面提到的「抽取共同特质」的过程,就是一个「抽象」的过程,让我们能够专注在事物真正重要的特质或概念上,隐藏其他实际的细节。而另一方面,我们可以透过「继承」来取得并实作 parent 类别中的抽象概念或方法,以及避免撰写重复的程序码。

「封装」限制了物件之间的互动权限,隐藏了实作细节,提高程序的安全性、稳定性、易用性,并降低错误的发生。「多型」的概念和实现能力,则让程序码本身具备拓展性和重复使用性,让我们能够更有能力的去模拟这个复杂的世界

物件导向程序设计 & 物件导向程序语言

「物件导向程序设计」是一种程序设计典范,当中包含了许多的特徵,而能够支援(部分支援)这些特徵的程序语言,就可以广义的称作「物件导向程序语言」。

然而使用物件导向程序语言,不代表自己写的程序就是依循物件导向程序设计。语言是一种工具,设计是一种思考方式。

下一步?

当我们能够模拟真实世界的事物之後,便能够透过程序码、建立应用程序来处理真实世界的问题。然而,真实世界其实不断的在变动,我们今天写的程序码,也许就无法面对明天的状况。或者是,我们需要花费大量的心力来调整程序码,才能应付这个变动的世界。

为了让程序码本身有更好的维护性、更容易拓展以面对各种变化,因此前辈们整理出了程序码的设计原则 (Design Principles)。其中一个(一组)着名的设计原则就是 SOLID:

  • Single Responsibility Principle
  • Open-Closed Principle
  • Liskov's Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle

在後续的章节当中,会开始介绍 SOLID。同样的,SOLID 不是万能,但至少提供了一个思考框架,让我们开始思考如何好好的架构我们的程序码。


<<:  鬼故事 - 勒索软件骇客都在干嘛

>>:  Day10-流量限制(五)

Day [2] — this:作用域 — JS之浸猪笼系列

如果你不知道这个系列为什麽叫这种激烈的名字可以看这篇: Day [0] — JS之浸猪笼系列 如果你...

Exchange 会议室可以分不同厂区吗?

各位前辈好 有一问题想请教各位 目前我面临一个问题,公司使用Exchange 2016主机,此EXC...

[13th][Day8] Pointer

Pointer 到底是个什麽东东呢?指标?指引?位址?指针? 目前为止提到的变数都很单纯 int f...

Windows 10 环境 MINGW64 找不到 PGP Keys 的问题 (Gpg4win)

How to reproduction 在 Windows 10 环境安装 Gpg4win 使用 K...

Kotlin Android 第22天,从 0 到 ML - Canvas

前言: 今天来介绍使用Canvas 的绘图方法来创建 2D 绘图,并画出触控手势的轨迹。 大纲 : ...