本书大致分为两部分来讲解面向对象,前半部分介绍编程技术,后半部分介绍从编程技术派生出来的应用技术(图1-5)。

前半部分包括第 2 章到第 6 章的内容,这一部分将为大家介绍面向对象的编程技术的相关知识。首先在第 2 章指出现实世界和 OOP 结构是似是而非的,接着,在第 3 章回顾 OOP 之前的编程语言的历史之后,再介绍 OOP 的基本结构——类、多态和继承(第 4 章)。然后介绍 OOP 运行时的机制(第 5 章),以及 OOP 的发展所带来的可重用构件群和设计模式这两种可重用技术(第 6 章)。

{%}

图1-5 面向对象的全貌和本书的构成

后半部分包括第 7 章到第 11 章的内容,这一部分将为大家介绍面向对象的应用技术。我们将首先介绍 OOP 结构在应用于上游工程时化为表示集合论和职责分配的归纳整理法的现象(第 7 章)。接着介绍用图形表示软件功能的 UML(第 8 章)、支持业务分析和需求定义的建模(第 9 章)、面向对象设计(第 10 章),以及与面向对象的普及共同发展的敏捷开发方法(第 11 章)。

之所以这样安排章节,是因为考虑到了逐个理解面向对象所涉及的各项技术时的步骤,而这也基本上符合面向对象演化的过程。

附章将对函数式语言进行介绍。除了面向对象之外,最近许多编程语言还支持函数式语言的结构,因此,我们将介绍函数式语言的基本结构和思想。

对本书结构的介绍就到此为止,下面我们将进入具体内容的学习。

笔者将从重新考虑“面向对象是直接将现实世界表示为软件的技术”这一常见的说法开始讲起。接下来就让我们一起进入第 2 章吧!

专栏 当今的 OOP

易上手、有深度的 Python

如今,Python 深受人们的欢迎。在 21 世纪初的人工智能热潮中,Python 因包含丰富的机器学习库而开始受到广泛关注。另外,在编程教育得到重视这一背景下,Python 也因其语法对初学者来说非常容易理解而备受欢迎。

Python 的语法直观易懂,能够让每个人编写的程序看起来都大致一样。具体来说,Python 程序的控制结构不使用 Java 和 C 语言中的花括号({})和分号(;),而是使用缩进来体现。因为这一功能类似于足球比赛中的越位线,所以被称为越位规则。通过遵循越位规则,Python 程序实现了简洁、统一(代码清单 1.a)。

* * *

虽然 Python 对初学者来说非常容易上手,但是它也是一门面向对象编程语言。

Python 教程一般会从“Hello, world”的示例开始,依次讲解变量与类型、运算符、条件分支、循环、函数和容器,然后讲解类与实例、方法、超类与子类、重写等面向对象的结构。

代码清单 1.a 越位规则示例(FizzBuzz 问题)

for i in range(1, 101):
    if i % (3 * 5) == 0:
        print("FizzBuzz")
    elif i % 5 == 0:
        print("Fizz")
    elif i % 3 == 0:
        print("Buzz")
    else:
        print(i)
{%}

Python 与 Java 不同,也可以定义不属于类的函数和全局变量。不过,Python 中的数值、字符串和布尔值等数据类型都是类,各个数据值是实例。Python 提供的列表、元组、集合和字典等容器类型的数据结构实际上也都是类。Java 使用 ListSetMap 等集合类(及数组)来提供这些数据结构,而 Python 的设计则是让人们意识不到这些结构都是类。

使用 Python 编写的库大多采用了类库的形式,许多库还灵活运用了设计模式。

另外,Python 还支持函数式语言的结构。列表和元组操作中常用的 map 函数和 filter 函数的第一个参数就是函数式语言中的头等函数,通常写为 Lambda 表达式。

* * *

像这样,Python 的语法对初学者来说非常容易上手,同时它也是一门非常深奥的编程语言。因此,为了使用 Python 编写大型程序或熟练使用既有的库,我们必须充分理解面向对象编程语言,同时还要掌握函数式语言的基础知识3

3第4章将讲解面向对象编程语言的结构,附章将讲解函数式语言的结构。