问题标签 [object-oriented-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
973 浏览

c# - 面向对象设计:使用方法参数与属性

在面向对象设计中,以下哪个更好?

使用以下方法发送参数:

或使用以下属性:

0 投票
2 回答
86 浏览

oop - 需要面向对象的设计建议

我需要一些关于 OOD 的建议。下面是我的情况。

我有一个触发异步操作的类,在异步操作返回后,我需要检查异步操作返回的时间是否小于 MinTimeToWait,如果是,则等待 MinTimeToWait 完成,然后继续其他操作。

现在,通过在 SomeOperationCallback 中包含检查时间和等待的逻辑来做正确的事情,或者我应该创建一个封装逻辑和 StopWatch 的新类并使用该类进行检查和等待?

提前感谢您的回复。

0 投票
3 回答
90 浏览

java - Java OO 概念在扁平化或包含不必要的过程以简化使用时更好?

说,我有 DataObject 类型的 Json 解析器类,如下所示:

现在我必须连接到服务器才能获取 Json,所以我有这个:

问题是,在主类中编写如下代码更好吗(方法-A)

或者修改 DataRetriever 以在内部包含 Json 解析(方法-B),如下所示:

结果在这两种情况下都是相同的,但从概念上讲,使用 Method-A 还是 Method-B 编码更好?

我通常会创建一个控制器类来遵循 Method-A,但我不确定这是否有效。

编辑:
事实上,我正在考虑在解析 Json 时使用 GenericType 和 Interface。所以我准备了以下内容:

然后将其添加到 DataRetriever 的构造函数中,如下所示:

最终,我正在考虑允许多种类型的解析器,这样每次我们都可以提供自己的解析器来增加它的灵活性。这被认为是某种渎职行为吗?

0 投票
1 回答
81 浏览

python - 如何在 Python 中封装类时访问上下文标签?

我正在尝试从封装类中获取封装的类抓取上下文,例如标签。一种方法是传递标签,就像我在下面显示的实例化期间一样。

我已经看到日志模块如何允许您使用 get_logger 函数订阅子日志,并且我想要一个 get_context() 函数。有没有办法做到这一点?

如果这个标签的传递达到一个级别,就像下面的 YetAnotherClass,它似乎可以容忍......但是如果你必须将它传递到 3 或 4 个级别 --- 这就是我真正想要另一个解决方案来传递这个标签的地方。

我应该以不同的方式思考这个问题吗?这是一些示例代码:

0 投票
2 回答
152 浏览

oop - 如果 Address 继承自 PhoneNumber,它违反了哪些 OOP 原则?

有一本书说有一个PhoneNumber类,然后我们会定义一个Address继承自的类,PhoneNumber我曾经说过,我们不能这样做,因为地址不是电话号码,并且要继承,它必须是“是”关系。如:狗是一种动物,我们可以Dog继承自Animal.

但是既然我们必须遵循LSP -- Liskov Substitution Principle,那么“是一个”规则实际上并不是这里的决定因素,因为一个正方形“是一个”矩形(宽度 == 高度),但是 LSP 说我们可以' t 定义一个Square类并从该类继承Rectangle。简单的英文解释,我想,就是对象aRect可以响应消息setWidthAndHeight(w, h),但aSquare不能正确响应,让整个程序正常运行。

如此令人惊讶的是,Address继承类的PhoneNumber类违反了“is a”关系,但并不违反 LSP。那么正式地,它违反了哪些 OOP 原则?

0 投票
1 回答
194 浏览

oop - OO 设计决策:类从数据库构建自身或具有构建器类/工厂

我正在构建一个新应用程序,但无法决定解决这个问题的方式。

面向数据库数据的类是否应该使用以下方法从数据库构建自己:

或者我应该构建一个数据库管理类/工厂来处理所有 SQL 并为我构建对象,例如:

我以前曾参与过两种方式的项目,但无法真正决定在这个新项目中采用哪种方式,并想知道今天的普遍共识是什么?

我的意思是它们是两种方式的优点和缺点,但是在这方面更普遍采用的方法是什么?您可以指出他们的任何既定模式吗?

0 投票
1 回答
83 浏览

c++ - 在抽象类之间传递数据

我正在寻找关于完成我将要描述的最佳 OO 方式的意见。我正在编写将成为游戏等事件系统的东西,我希望它尽可能地可扩展,因为有很多抽象类。其中两个是监视器,它们被分配用于监视一个事件,以及回调,它们包装了事件发生时要调用的函数指针。当我想发送回调需要的数据时,就会出现问题。将发送的数据将是子类特定的(取决于函数签名)并存储在子类监视器中。我希望能够在调用执行之前将此数据传递给回调,但由于从监视器的角度来看一切都是抽象的,这很困难。我' 我正在寻找有关如何以可能的最佳 OO 方式执行此操作的建议,到目前为止,我还没有想出任何我太喜欢的东西。由于回调被发送到另一个类以实际被分派,因此数据需要在某个时候最终到达它们内部。

供参考,监视器抽象类

以及回调抽象类

任何和所有意见/建议表示赞赏。谢谢!

0 投票
1 回答
96 浏览

java - 接口的代码是否应该包含注释?

Java 接口是否应该在其源代码中包含任何注释,或者只是实现该接口的类(或两者都有)?

例子:

谢谢。

0 投票
5 回答
188 浏览

c# - 在 C# 中实现具有“bars”子集的“foos”集

我正在编写一个服务器来处理从客户端到主机的不同类型的消息。消息具有不同的内容和长度,并且将在前面有一个标识符,以标识消息的类型。一些消息(例如类型 A、B 和 C)应该只在机器之间转发。其他(例如 D、E 和 F 类型)需要来自服务器的特定操作:即。他们不只是转发。

(注意:两端的客户端需要区分 A、B 和 C,但服务器只需要知道转发这些消息。服务器和客户端都需要能够区分 D、E 和 F。 )

我试图找到的是一个很好的面向对象范式,用于表示消息是什么“类型”的概念。因此,为了澄清,假设服务器接收到标记为“B 型”的消息,它需要简单地将其转发给适当的客户端。但是,如果它收到标记为“F 型”的消息,它将采取不同的、具体的行动。那么我怎么能在我的代码中表示“类型”呢?

我想要实现的理想解决方案是这样的;和枚举“类型”,其中命令的某个子集属于“可转发”类型。显然这是不可能的,所以我想到了一个静态类 Forwardable,它继承自静态基类 Type。再次,不可能。接口是可能的,但我真的宁愿不必为了解释类型而实例化实例。

让服务器解析消息的最直接的方式是这样的:

最后,什么是表示一组类型的正确 OO 方式,其中这些类型的子集是子类型?

编辑:在某种程度上,我觉得这应该通过定义一个“类型”的静态类并定义另一个从“类型”继承的名为“Forwardable”的静态类来完成。然后我可以将我的服务器接收到的内容转换为“类型”并说 if(header is Forwardable)。但不幸的是,您不能从静态类继承。. .

0 投票
3 回答
70 浏览

c# - 如何指定子类以使用它们的类型?

假设我有这样的课程:

因此,该方法Access采用自身的类型,根据定义,它将是一个实现,我们并不真正关心它是什么,只要它继承自Foo......但我希望这个方法检查传入的对象是否是与其实现相同的类型。

像这样:

目前,我有一个Name字段指示传入的foo.Name值是否与当前值相同。Name此外,我考虑过使用泛型,但再次认为这不是解决此问题的正确方法。

编辑:

关于我正在使用的实际结构的一些背景知识。

上面定义的Foo类代表了创建一组对象的工厂,List<X> objs这些对象由实现Foo对象的属性生成。现在我有一些其他类比较这些工厂,但我不希望工厂因为生成它们而变得臃​​肿。因此,我不是*使工厂膨胀,而是检查它们是否具有相同的实现,如果是,则比较抽象比较器定义的属性,否则 *blowout。以后有时间我会补充的。

如果有人有更好的标题,请推荐一个。