我们如何决定什么应该是一个对象
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 应该是
- 图书管理员
- 图书
- 杂志
- 光盘
- Reader
对象可以是 Programming C++ 书,Advance JAVA 书。哈迪克是reader等
因此,对象是现实世界实体的表示,具有一定的特定含义。
面向对象的应用程序由几个不同的对象组成。在工程师开始为参与对象编写代码之前:
如何决定什么应该是一个对象?
您的问题过于开放,无法给出具体答案,所以让我提供一些想法,帮助您入门。
假设我们将使用像 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 应该是
- 图书管理员
- 图书
- 杂志
- 光盘
- Reader
对象可以是 Programming C++ 书,Advance JAVA 书。哈迪克是reader等
因此,对象是现实世界实体的表示,具有一定的特定含义。