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

php - 如何在 PHP 中访问父对象的类变量?

A 类的一个实例实例化了几个其他对象,例如来自 B 类:

我想从 B 中的方法访问 A 的公共类变量。

除非我遗漏了什么,否则这样做的唯一方法是将当前对象传递给 B 的实例:

这是最佳做法还是有其他方法可以做到这一点?

0 投票
16 回答
83106 浏览

oop - 什么是依赖倒置原则,为什么它很重要?

什么是依赖倒置原则,为什么它很重要?

0 投票
2 回答
571 浏览

inheritance - 如何删除此并行层次结构

我正在尝试为以下场景找到最佳设计 - 一个存储舞蹈比赛结果的应用程序。

一个事件包含多轮,每轮包含许多表演(每支舞一个)。每场表演都由许多评委进行评判,评委会返回一张计分表。

有两种类型的轮次,最后一轮(包含 6 对或更少的舞蹈对)或正常轮(包含超过 6 个舞蹈对)。每个都需要稍微不同的行为和数据。

在最后一轮的情况下,每张计分表都包含决赛中 6 对夫妇的有序列表,显示法官将哪对夫妇排在第 1 名、第 2 名等。我称这些排名为“计分表包含 6 个排名”。一个位置包含一对夫妇的号码,这对夫妇是什么地方

在正常轮次的情况下,每个计分表包含一组无序的 M 对(M < 进入轮次的对数 - 由比赛组织者确定的确切值)。我将这些回忆称为:“M 回忆的记分表”。召回不包含分数或排名

例如在决赛中

  • 第一名:56对
  • 第二名:情侣234
  • 第三名:情侣198
  • 第四名:情侣98
  • 第五名:情侣3
  • 第六名:情侣125

为正常一轮以下夫妇被召回54,67,201,104,187,209,8,56,79,35,167,98

我的天真版本实现为

事件 - has_one final_round, has_many rounds

final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many 排名

回合 - has_many 表现 表现 has_many scoresheets scoresheet has_many 回忆

但是我不喜欢这需要的重复,而且我有几个并行的层次结构(用于回合、性能和计分表),这将是一个痛苦的维护。

0 投票
2 回答
11066 浏览

oop - 重用/发布等效原则 (REP)

什么是重用/发布等效原则,为什么它很重要?

0 投票
2 回答
17307 浏览

php - 使 PHP 对象表现得像一个数组?

我希望能够编写一个行为类似于数组并使用普通数组语法进行获取和设置的 PHP 类。

例如(其中 Foo 是我制作的 PHP 类):

我知道 PHP 有 _get 和 _set 魔术方法,但它们不允许您使用数组表示法来访问项目。Python 通过重载 __getitem__ 和 __setitem__ 来处理它。

有没有办法在 PHP 中做到这一点?如果它有所作为,我正在运行 PHP 5.2。

0 投票
3 回答
906 浏览

python - 装饰父类方法

我想创建一个具有父类方法的子类,其中该方法是子类中的“classmethod”,而不是父类中的“classmethod”。

本质上,我正在尝试完成以下任务:

0 投票
7 回答
4816 浏览

language-agnostic - 流畅的界面是否违反了得墨忒耳定律?

关于得墨忒耳法则的维基百科文章说:

该法可以简单地表述为“仅使用一个点”。

然而,流畅界面的简单示例可能如下所示:

那么这是否合二为一呢?

0 投票
6 回答
417 浏览

c# - 取消全局变量?

我有一组深度在 20 年代某处的树对象。这棵树中的每个节点都需要访问其树的根。

几个解决方案:

  1. 每个节点可以直接存储对根的引用(浪费内存)
    • 我可以通过“上升”(浪费周期)在运行时计算根
    • 我可以使用静态字段(但这相当于全局)

有人可以提供一种不使用全局(在任何变体中)但在内存或周期中分别比 #1 或 #2 更有效的设计吗?

编辑:由于我有一组树,我不能简单地将它存储在静态中,因为很难区分树。(感谢麦克库尔特)

0 投票
10 回答
100425 浏览

python - 为什么需要在 Python 方法中显式使用“self”参数?

在 Python 中为类定义方法时,它看起来像这样:

但在其他一些语言中,例如 C#,您可以使用“this”关键字引用该方法绑定到的对象,而无需在方法原型中将其声明为参数。

这是 Python 中有意的语言设计决定,还是有一些实现细节需要将“self”作为参数传递?

0 投票
9 回答
1683 浏览

oop - 具有 sysadmin/Perl/Linux 背景的“获胜”OO 编程工作面试?

我是蒙特利尔软件工程专业的学生。在过去的 3 年中,我进行了几次实习(每年一次)。前两个(在同一家公司)主要是系统管理员工作,但我确实做了一些 Perl 程序(主要是日志文件分析和统计生成)。

我的另一个实习是在 IT 安全领域。我做了一个巨大的 CGI Perl 脚本来分析用户在 Internet 上花费的时间。

问题是,我真正想做的是编程,但我的实习主要是一些编程的系统管理员工作(由于我以前在 Linux 和 UNIX 方面的经验)。

今年冬天我还有另一个实习,但是我希望它是在 OO 编程领域和 SW 工程领域。

我有系统管理方面的背景,但由于我的大学课程和项目(C++、Java、VB.NET、ASP.NET,但不幸的是不是 C# :( ),我非常了解 OO。

我的问题是:如何在面试中与其他有 OO 经验的学生竞争以前的实习?

我的“卖点”应该是什么?我认为自己是一个很好的程序员,但由于缺乏经验,我之前的面试结果并不好。事实上,我去年冬天在系统管理部门获得了实习机会,因为,嗯……那是我的背景!

尽管我缺乏专业经验(但有很多个人知识(和兴趣)),如何让潜在雇主相信我是完美的候选人,有什么技巧吗?

谢谢,

纪尧姆。

[编辑]

谢谢大家的支持!

我还没有离开学校;我还是个全日制学生!我的大学课程是合作课程:我必须获得 3 次实习才能获得文凭。

让我简单解释一下我的背景:今年冬天将是我的第四次实习。

我的前两个是在我在魁北克的高中后但大学预科学校 CÉGEP 学习的时候。

第一个是 CÉGEP 实际给我的:一位雇主来找我,寻找有 Linux 系统管理知识的人。我非常适合这份工作,因为我是唯一一个在校外了解 Linux 的学生。我的面试甚至不是真正的面试,因为所有细节都在我的学校和雇主之间讨论过:我知道在面试之前我就被录用了。

一年后,第二个在同一家公司,因为我非常喜欢我的第一个。

然后我到达了我的大学,每个学生都必须有 3 次实习才能获得他(或她)的文凭。在计算机科学面试方面没有真正的经验(因为我的第一次实习是“给予”我的),我在为 OO 工作进行面试时做了一些搞砸的事情。我终于在庞巴迪宇航公司获得了安全/系统管理员/Perl 编程工作的面试机会。

我的实习很顺利,但现在我想要一份真正的软件开发工作。我认识的所有人去年冬天都有过一次,这意味着我在经验方面处于不利地位。

但是,我确实有编程经验。我所有的实习都要求我进行大量的编程,尤其是在 Perl 方面。我的 Perl 技能非常好,我必须为我工作的两家公司开发一些不错的工具。我解决了在学校没有遇到的实际问题(比如如何有效地解析 5 GB 的日志文件,同时保持尽可能低的内存使用)。

显然,如果我申请 sysadmin 领域或 Linux 领域的工作,我可以在今年冬天轻松获得实习机会。每年都有一些可用的,我在该领域有很多经验,但如前所述,我希望我的下一个实习是在软件开发方面。

我目前正在开发一个 Java 个人项目,这是一个小型 UML 类编辑器。所以我开始处理 Swing 框架、侦听器、MVC 架构等。这并不像在“现实世界”中所做的那么大,但它是一个有趣的项目,我在做这件事时很开心,如果我能在下个月取得进展,我可能会加入 SourceForge。同时我也在学习JSP。

至于OO开源项目,这是我应该研究的。作为一名全日制学生,我现在可能没有时间,距离我的第一次面试还有一个月的时间,但我不会放弃这个选项。

无论如何,谢谢你!