问题标签 [oop]

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 投票
29 回答
11245 浏览

oop - 你如何在大海捞针中找到一根针?

当以面向对象的方式实现大海捞针搜索时,您基本上有三种选择:

你更喜欢哪个?为什么?

我知道有些人更喜欢第二种选择,因为它避免引入第三个对象。但是,我不禁觉得第三种方法在概念上更“正确”,至少如果您的目标是模拟“现实世界”。

您认为在哪些情况下引入辅助对象是合理的,例如本例中的搜索器,什么时候应该避免它们?

0 投票
45 回答
29190 浏览

language-agnostic - OOP 的意义何在?

据我所知,尽管在 OOP 教育、语言和工具上花费了数百万或数十亿美元,但 OOP 并没有提高开发人员的生产力或软件可靠性,也没有降低开发成本。很少有人在任何严格意义上使用 OOP(很少有人遵守或理解 LSP 等原则);人们对问题域建模所采用的方法似乎几乎没有统一性或一致性。很多时候,这个类只是为了它的语法糖而使用。它将记录类型的函数放入它们自己的小命名空间中。

我为各种各样的应用程序编写了大量代码。尽管在某些地方,真正的可替代子类型在应用程序中发挥了重要作用,但这些地方非常特殊。总的来说,尽管很多人都在谈论“重用”,但现实情况是,除非一段代码完全按照您的意愿去做,否则几乎没有成本效益的“重用”。以正确的方式设计可扩展的类是极其困难的,因此扩展的成本通常非常高,以至于“重用”根本不值得。

在许多方面,这并不让我感到惊讶。现实世界不是“OO”,OO 中隐含的想法——我们可以用一些类分类法对事物进行建模——在我看来是非常有缺陷的(我可以坐在桌子、树桩、汽车引擎盖上) ,某人的膝盖——但其中没有一个是——椅子)。即使我们转向更抽象的领域,OO 建模通常也很困难、违反直觉,并且最终无济于事(考虑圆形/椭圆或正方形/矩形的经典示例)。

那么我在这里错过了什么?OOP 的价值在哪里,为什么所有的时间和金钱都未能让软件变得更好?

0 投票
14 回答
1637 浏览

oop - 为什么要阻止一个类被子类化?

阻止类被继承的原因是什么?(例如在ac# 类上使用sealed) 现在我想不出任何东西。

0 投票
19 回答
96725 浏览

c++ - C++ 中的 i++ 和 ++i 之间是否存在性能差异?

我们的问题是 CC之间是否存在性能差异?i++++i

C++ 的答案是什么?

0 投票
1 回答
26341 浏览

php - 在 PHP5 类中,何时调用私有构造函数?

假设我正在编写一个旨在成为单例的 PHP (>= 5.0) 类。我读过的所有文档都说要使类构造函数私有,因此不能直接实例化该类。

所以,如果我有这样的事情:

除了我在做一个

在类本身内部调用?

为什么我完全可以从内部实例化 SillyDB?

0 投票
10 回答
4055 浏览

c# - 对于实现接口的类型,你怎么能要求一个没有参数的构造函数呢?

有办法吗?

我需要所有实现特定接口的类型都有一个无参数的构造函数,可以做到吗?

我正在为我公司的其他开发人员开发基本代码,以便在特定项目中使用。

有一个过程将创建执行某些任务的类型实例(在不同的线程中),我需要这些类型遵循特定的合同(ergo,接口)。

该接口将在程序集内部

如果您对这种没有接口的场景有建议,我很乐意考虑...

0 投票
2 回答
453 浏览

oop - 单一职责原则:变更原因的粒度

在应用单一职责原则并查看类更改的原因时,您如何确定该更改的原因是过于细化,还是不够细化?

0 投票
7 回答
1281 浏览

c++ - 如何在 C++ 中转换类型?

我在我的项目中使用了两个不同的库,它们都提供了一个基本的 rectangle struct。这样做的问题是似乎没有办法在类型之间插入转换,所以我不能用另一个库中的函数的结果调用一个库中的函数。如果我是其中任何一个的作者,我可以从外部创建转换,但我不能。

图书馆一:

图书馆 b:

现在,我无法制作转换器class,因为 C++ 只会一步一步地寻找转换。这可能是一件好事,因为有很多可能性涉及创建各种类型的新对象。

我不能制作一个接受structfroma并提供 from 对象的class运算符b

那么,有没有一种明智的方法来解决这个问题?

编辑:

我或许还应该指出,我真的很想要一些可以无缝处理结果的解决方案,因为我不希望成为那个编码员。(虽然我同意,老式的、明确的、转换会是一个不错的选择。另一个分支reinterpret_cast也有同样的问题..)

编辑2:

实际上,这些建议都没有真正回答我的实际问题,康拉德鲁道夫似乎是正确的。C++ 实际上不能做到这一点。糟透了,但确实如此。(如果有什么不同,我将尝试按照CodingTheWheel的建议进行子类化。

0 投票
16 回答
23394 浏览

language-agnostic - 是什么让语言面向对象?

由于没有有意义的术语的辩论是没有意义的,我想我会指着房间里的大象问:究竟是什么让一种语言“面向对象”?我在这里寻找的不是教科书答案,而是基于您对在您的领域中运行良好的 OO 语言的经验,无论它可能是什么。

一个可能有助于首先回答的相关问题是:面向对象语言的原型是什么,为什么?

0 投票
5 回答
1328 浏览

architecture - 将数据访问类拆分为读取器和写入器或将它们组合起来?

这可能是在“讨论”方面,但我真的很想听听您对此的看法。

以前我经常编写同时处理读写的数据访问类,这经常导致命名不佳,如 FooIoHandler 等。难以命名的类可能设计不佳的经验法则表明这不是一个好的解决方案。

因此,我最近开始将数据访问拆分为 FooWriter 和 FooReader,这会产生更好的名称并提供一些额外的灵活性,但同时我喜欢将它们放在一起,如果类不是很大的话。

读者/作者分离是更好的设计,还是应该将它们结合起来?如果我应该将它们结合起来,我到底应该给这个类起什么名字?

谢谢/埃里克