我们如何决定什么应该是一个对象

How do we decide what should be an object

面向对象的应用程序由几个不同的对象组成。在工程师开始为参与对象编写代码之前:

如何决定什么应该是一个对象?

您的问题过于开放,无法给出具体答案,所以让我提供一些想法,帮助您入门。

假设我们将使用像 Smalltalk 这样的纯 OO 语言,其中一切都是对象。

当使用对象来代表某些现实(或幻想)时,您通常不会在开始之前尝试识别所有对象。相反,您将首先想到的少数人确定为您所在领域的优秀代表。例如,如果您正在编写用于对化学的某些方面进行建模的应用程序,您可能希望从原子和分子开始。

一般来说,您应该尝试专注于您所在领域的具体重要实体。暂时不要考虑他们的互动。

一旦您确定了前几个对象,您应该关注每个对象的内在行为。例如,如果您正在为一群蚂蚁建模,那么您的 Ant 对象将必须知道如何四处移动、如何回到巢穴、如何剪下或携带一片叶子等。

一旦您向对象添加了越来越多的方法,您就会发现需要新对象来增强您已识别的对象的行为。例如,如果您正在为国际象棋游戏建模,并且您已经确定了 Pawn 对象,您很快就会意识到您需要为 CheckBoard、CheckGame 等建模。

因此,对象的识别不是您在开始之前尝试解决的问题。相反,它是您会通过模型的演变自然发现的东西。随着您的对象的成熟,即随着它们学习更多的东西,它们将 "reveal" 哪些其他对象仍然缺失。

在建模过程中,您可能会遇到一些您缺乏的知识。在这种情况下,您需要咨询领域专家、阅读或研究相关 material、在 Stack Overflow 等论坛中提问。在这方面,您会发现自己对领域有了更多了解,因此您可以 "explain" 你新获得的知识给你的对象。在某些方面,您会觉得您的对象正在问您自己从未想过的问题,并且所有这些活动都会以越来越多的 类(或原型)和方法富有成效地填充您的模型。

我必须说这是一个非常有趣的问题,有人如何识别对象。根据我的知识,我想说程序员不应该担心对象,因为它是某种事物的表示。将面向对象编程与现实世界联系起来是件好事。所以程序员应该首先识别可以是真实世界实体的class,然后描述我们需要对象的那个真实世界实体。

假设您正在为图书管理员开发一个项目,图书管理员告诉您以下问题

"As a librarian, I want library management system where there are different types of reader for books, magazines, CDs and DVDs"(类似这样)

因此开发人员可以根据其在真实世界中的表现形式轻松识别 class classes 应该是

  1. 图书管理员
  2. 图书
  3. 杂志
  4. 光盘
  5. Reader

对象可以是 Programming C++ 书,Advance JAVA 书。哈迪克是reader等

因此,对象是现实世界实体的表示,具有一定的特定含义。