每个人都知道什么是对象(物体):我们可以感知、感觉和摆弄的具体东西。我们最早接触的对象通常是婴儿玩具。积木、塑料形状、各式拼图等通常是我们接触的第一批对象。婴儿很快就会知道不同对象可以做不同事情:闹铃会响,按钮可以被按下,杠杆可以被拉动等。
在软件开发中,对对象的定义并没有太大的不同。软件对象可能不是你可以拿起、感知或感觉的有形物件,但它们都是某些物件的模型。它们可以做某些事情,可以接受特定的操作方式。正规来说,对象是 数据 和相关 行为 的集合。
想想什么是对象,面向对象又是什么意思。在字典中,面向是正对着的意思。面向对象编程是指通过构建对象模型的方式来写代码,这是用于描述复杂系统行为的众多技术中的一个。面向对象就是指一系列对象通过数据和行为相互交互。
如果你看过相关的宣传材料,那么你可能看到过面向对象分析、面向对象设计、面向对象分析和设计、面向对象编程等术语,这些都是与面向对象相关的概念。
实际上,分析、设计和编程都是软件开发过程中的某个阶段。称它们为面向对象仅仅是为了表明软件开发的方法。
面向对象分析 ( Object-Oriented Analysis , OOA )是分析软件要解决的问题、系统或任务,找出其中的对象以及对象之间的各种交互的过程。分析阶段都是关于要做什么的。
分析阶段的产出是对系统的描述,也就是需求。如果我们把分析阶段一步做完,就会把一个用户任务分解成一套必需的功能,比如作为一个植物学家,我需要一个网站来帮助用户给植物分类,我可以帮助用户正确识别植物。比如,下面是一些网站访问者可能需要的功能。每个功能都是一个对象和一个关联的操作;操作用楷体,对象用 粗体 。
· 浏览 之前上传的东西。
· 上传新的 已知样例。
· 测试 质量。
· 浏览 产品。
· 查看 推荐
在某种意义上,分析这个词有点儿用词不当。我们之前讨论过的婴儿并不会分析积木或拼图。相反,婴儿会探索环境,摆弄各种形状,查看这些东西可能适合的位置。更好的术语可能是面向对象探索。在软件开发中,分析的初始阶段包括采访用户、研究他们的流程、消除不可能的情况等。
面向对象设计 ( Object-Oriented Design , OOD )是把需求转变成实现说明书的过程。设计师要命名对象、定义对象的行为,并明确定义哪些对象可以触发其他对象的特定行为。设计阶段都是关于把要做什么转变成如何做的。
设计阶段的产物是实现说明书。如果我们把设计阶段一步完成,就会把面向对象分析时定义的需求转变成类和接口的集合。如果设计得比较理想,就可以用任何一个面向对象的编程语言实现这些类和接口。
面向对象编程 ( Object-Oriented Programming , OOP )是把设计变成满足用户需求的可执行程序的过程。
如果我们处在一个理想的世界中,像很多教科书上教我们的那样,完美地按照这些阶段一步步执行,那就太好了!但通常现实世界要模糊得多,无论我们多么努力地分阶段执行,我们总会在设计时发现有些需要进一步分析的内容,在编程时发现有些需要在设计中进一步澄清的功能。
越来越多的团队都认识到,这种瀑布式的阶段划分效果并不好。迭代式的开发模型似乎更好。在迭代开发过程中,先对任务的一小部分进行建模、设计和编程,然后审查开发出的产品,并在一系列较短的开发周期中不断改进功能和引入新功能。
本书的其余部分是关于面向对象编程的,但本章将涵盖基本的面向对象设计原则,这让我们可以聚焦于理解概念,而无须关注Python的语法或调用栈。