问题标签 [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 投票
2 回答
773 浏览

php - 访问一系列类的 CONST 属性

这就是我想要在 PHP 5.3.0+ 中工作的方式

但我仅限于使用 PHP 5.2.6。谁能想到一个简单的方法来模拟这种行为而不实例化类?

0 投票
16 回答
16833 浏览

oop - OOP 什么时候更适合?

自从我开始学习面向对象编程以来,我经常阅读文章/博客说函数更好,或者不是所有问题都应该建模为对象。从您的个人编程经历来看,您认为 OOP 何时能更好地解决问题?

0 投票
14 回答
19576 浏览

ruby-on-rails - 为什么所有 Active Record 都讨厌?

随着我对 OOP 的了解越来越多,并开始实施各种设计模式,我不断回想起人们讨厌Active Record的案例。

通常,人们说它不能很好地扩展(以 Twitter 为例)——但没有人真正解释为什么它不能很好地扩展;和/或如何在没有缺点的情况下实现 AR 的优点(通过类似但不同的模式?)

希望这不会变成一场关于设计模式的圣战——我想知道的只是****具体**** Active Record 出了什么问题。

如果它不能很好地扩展,为什么不呢?

它还有什么其他问题?

0 投票
7 回答
5631 浏览

perl - 你如何在 Perl 中创建对象?

Perl 具有 OOP 特性,但它们很少使用。如何创建和使用带有方法和属性的 Perl 对象?

0 投票
15 回答
517610 浏览

c++ - 如何在 C++ 中创建静态类?

如何在 C++ 中创建静态类?我应该能够做类似的事情:

假设我创建了这个BitParser类。BitParser类定义会是什么样子?

0 投票
11 回答
1319 浏览

user-interface - 您是否使用与私有变量相同的约定来命名表单上的控件?

出于某种原因,我从来没有看到这样做过。有理由不这样做吗?例如,我喜欢 _blah 作为私有变量,并且至少在 Windows 窗体中,控件默认是私有成员变量,但我不记得曾经见过它们以这种方式命名。在我在成员函数的局部变量中创建/存储控制对象的情况下,有一些视觉区别特别有用。

0 投票
10 回答
1584 浏览

c++ - 继承和多态 - 易用性 vs 纯度

在一个项目中,我们的团队正在使用对象列表对应该以类似方式处理的数据集执行大规模操作。特别是,不同的对象在理想情况下会表现相同,这很容易通过多态性实现。我遇到的问题是继承意味着是一种关系,而不是有一种关系。例如,几个对象有一个伤害计数器,但是为了使它易于在对象列表中使用,可以使用多态性——除非这意味着一个不正确关系。(人不是伤害计数器。)

我能想到的唯一解决方案是让类的成员在隐式转换时返回正确的对象类型,而不是依赖于继承。放弃is a / has a Ideal 以换取易于编程会更好吗?

编辑:更具体地说,我使用的是 C++,因此使用多态性将允许不同的对象“行为相同”,因为派生类可以驻留在单个列表中并由基的虚函数操作班级。使用接口(或通过继承模仿它们)似乎是我愿意使用的解决方案。

0 投票
4 回答
654 浏览

language-agnostic - 访问全局应用程序设置

我目前正在开发的一个数据库应用程序将各种设置存储在数据库中。这些设置中的大多数用于自定义某些业务规则,但其中也有一些其他的东西。

该应用程序包含专门执行某项任务的对象,例如某项复杂的计算。这些非 UI 对象是经过单元测试的,但也需要访问许多全局设置。我们现在实现这一点的方式是提供由应用程序控制器在运行时填充的对象属性。测试时,我们在测试中创建对象并填写测试值(不是来自数据库)。

这比让所有这些对象都需要一些全局设置对象更好——这当然有效地使单元测试变得不可能:) 缺点可能是您有时需要设置十几个属性,或者您需要让这些属性“渗透”到子对象中。

所以一般的问题是:你如何在你的项目中提供对全局应用程序设置的访问,而不需要全局变量,同时仍然能够对你的代码进行单元测试?这一定是一个已经解决了 100 次的问题......

(注意:我不是一个经验丰富的程序员,你会注意到的;但我喜欢学习!当然,我已经对这个主题进行了研究,但我真的想先找一些-手经验)

0 投票
16 回答
6997 浏览

oop - 使用多态性的表达式评估和树行走?(阿拉史蒂夫耶格)

今天早上,我在阅读Steve Yegge 的《当多态性失败时》时,遇到了一个问题,他的一位同事曾经在潜在员工来亚马逊面试时问他们这个问题。

作为多态性的一个例子,让我们看一下经典的“eval”面试问题,(据我所知)是由 Ron Braunstein 带到亚马逊的。这个问题非常丰富,因为它设法探讨了各种各样的重要技能:OOP 设计、递归、二叉树、多态性和运行时类型、一般编码技能,以及(如果你想让它更难的话)解析理论.

在某些时候,候选人希望意识到您可以将算术表达式表示为二叉树,假设您只使用诸如“+”、“-”、“*”、“/”之类的二元运算符。叶节点都是数字,内部节点都是算子。评估表达式意味着遍历树。如果应聘者没有意识到这一点,你可以温和地引导他们,或者如果有必要,直接告诉他们。

即使你告诉他们,这仍然是一个有趣的问题。

问题的前半部分,有些人(我将保护他们的名字直到我垂死的呼吸,但他们的名字首字母是威利刘易斯)觉得如果你想称自己为开发人员并在亚马逊工作,这是一个工作要求,实际上有点难. 问题是:如何从诸如“2 + (2)”之类的算术表达式(例如在字符串中)到表达式树。在某个时候,我们可能会在这个问题上遇到 ADJ 挑战。

后半部分是:假设这是一个 2 人项目,你的搭档,我们称之为“Willie”,负责将字符串表达式转换为树。你得到了简单的部分:你需要决定 Willie 用什么类来构造树。你可以用任何一种语言来做,但一定要选择一种,否则威利会把汇编语言交给你。如果他感到不耐烦,那将是针对不再生产的处理器。

你会惊讶于有多少候选人喜欢这个。

我不会给出答案,但标准错误解决方案涉及使用 switch 或 case 语句(或只是好的老式级联 ifs)。稍微好一点的解决方案涉及使用函数指针表,而可能最好的解决方案涉及使用多态性。我鼓励你在某个时候完成它。好玩的东西!

所以,让我们尝试通过三种方式来解决这个问题。如何使用级联-if、函数指针表和/或多态性从算术表达式(例如在字符串中)如“2 + (2)”到表达式树?

随意解决一个,两个或所有三个。

[更新:修改标题以更好地匹配大多数答案。]

0 投票
6 回答
3635 浏览

oop - 单一职责原则是 OOP 的规则吗?

对 Stack Overflow 问题的回答指出,特定框架违反了简单明了的 OOP 规则:单一职责原则 (SRP)。

单一职责原则真的是 OOP 的规则吗?

我对面向对象编程定义的理解是“使用对象及其行为来创建软件的范例”。这包括以下技术:封装、多态性和继承。

现在不要误会我的意思——我相信 SRP 是大多数优秀 OO 设计的关键,但我觉得在某些情况下可以而且应该打破这个原则(就像数据库规范化规则一样)。我积极推动 SRP 的好处,我的大部分代码都遵循这个原则。

但是,这是一条规则,因此暗示它不应该被打破吗?