gpt4 book ai didi

oop - 怀疑只有一个实例的类

转载 作者:行者123 更新时间:2023-12-04 22:34:16 26 4
gpt4 key购买 nike

tl;dr——下面引用的段落是什么意思?

Be suspicious of classes of which there is only one instance. A single instance might indicate that the design confuses objects with classes. Consider whether you could just create an object instead of a new class. Can the variation of the derived class be represented in data rather than as a distinct class? The Singleton pattern is one notable exception to this guideline.

McConnell, Steve (2004-06-09). Code Complete (2nd Edition)



扩大的视野:

我正在阅读 Code Complete ,我在理解上面提到的段落时遇到了麻烦。对于上下文,它来自第 6 章的继承指南。起初我认为这是反对使用单例的建议,但当我到达段落末尾时,我显然被证明是错误的。

我根本无法理解作者试图通过我厚厚的头骨来表达什么。例如,我不知道他将对象与类混淆是什么意思,也不知道在只有一个实例的类的上下文中这意味着什么。帮助!

最佳答案

那里的措辞非常困惑,但我相信这意味着有时新手程序员可能会创建一个全新的类型来实例化它的一个对象。作为一个特别明显的例子:

struct Player1Name
{
string data;
};

在那里我们可以使用 string player1_name; (甚至是多个玩家的聚合)而没有创建一个全新的类型,因此尝试使用类来建模新对象(现有类型的新实例)已经可以做的事情会造成混淆。

在这种情况下,开发人员可能会向代码库发送数百个新的用户定义的数据类型和可能的大量继承层次结构,而对于他想要创建的每个新事物,除了单个实例之外,单个类不可能被重用。现有的类通常就足够了。

The real problem is not that the classes are being instantiated once, but that their design is so narrowly applicable as to only be worth instantiating once.



类通常用于建模与其实例(对象)的一对多关系。它们应该至少在某种程度上更普遍适用于该类的单个实例之外。粗略地说,一个类应该建模一个 Dog ,不是您邻居的特定宠物狗, Spark .它应该模拟一个 Rectangle ,不是精确的 Rectangle42x87即 4.2 米乘 8.7 米。如果您将事物设计为一次性实例化,那么您可能将它们设计得过于狭隘,并且可能有您可以使用的现有事物。

可以这么说,一种新的数据类型通常旨在解决一类(类别)问题,而不是一种仅需要该类的一个实例的非常精确的问题。否则,您的类设计将是一次性交易,只是表面上到处创建类来解决非常个别的问题,而没有任何更广泛应用的潜力。

单例是规则的一个异常(exception),因为它没有以这种普通的面向对象的方式使用类。在那里它故意创建一个单一的实例,懒惰的构造,并具有全局访问点。因此,开发人员创建了一个旨在一次性实例化的类,这并非偶然和对面向对象设计的误解。可以这么说,这是一个非常深思熟虑的设计决定,而不是对如何使用工具的误解。

关于oop - 怀疑只有一个实例的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com