问题标签 [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 回答
2462 浏览

uml - visio 中对象关系图的正确模具是什么?

我的所有 Visio 经验都与 LAN/WAN 文档有关。我最近想在Nagios配置中可视化对象之间的关系,但我意识到我不知道如何正确地做到这一点,并转向更重要的事情。我正在阅读对该线程的回复,并意识到这是软件开发人员必须做的很多事情。

所以这可能是一个小问题,但是在 Visio 中记录对象关系的正确方法是什么?有没有更好的模板可以使用?什么样的模板集合是正确的模板?

在我可能幼稚的观点中,我想象一个对象是一个带有单个“接收”连接器并包含多个较小框的大盒子,每个小盒子代表一个对象成员并具有自己的连接器。因此,每个对象成员字段都将连接到成员类型对象上的“接收”连接器。这些对象本身相当容易构建。我遇到的问题是连接线不尊重对象并越过它们的顶部,造成可怕的、无法使用的混乱。

感谢您的任何指示。

0 投票
10 回答
5086 浏览

java - 您如何开始设计大型系统?

有人向我提到,我将成为大型新系统背后的唯一开发人员。除其他事项外,我将设计 UI 和数据库模式。

我相信我会得到一些指导,但我希望能够让他们大吃一惊。在此期间我可以做些什么准备,当我坐在我的电脑前,我需要记住什么?

需要记住的几件事:我是一名大学生,正在从事我的第一份真正的编程工作。我将使用Java。我们已经设置了带有自动化测试的 SCM,等等……所以工具不是问题。

0 投票
2 回答
2379 浏览

php - 使一个接口覆盖它从 PHP 中的另一个接口继承的方法

PHP中有没有一种方法可以覆盖扩展该接口的接口中的一个接口声明的方法?

这个例子:

我可能做错了什么,但这是我所拥有的:

通常在 PHP 中,当您扩展某些内容时,您可以覆盖其中包含的任何方法(对吗?)。但是,当一个接口扩展另一个接口时,它不会让您这样做。除非我想错了……当我实现 iShipper 接口时,我不必让 Shipper 对象扩展 Vendor 对象(实现 iVendor 接口)。我只是说:

并使 FedEx 实现 iVendor 和 iShipper 的所有方法。但是,我需要__constructiVendor 和 iShipper 中的功能是独一无二的。我知道我可以取出$shipment = null,但是创建 Shippers 就不那么方便了(只需在实例化时传入 vendor_no 和货件)。

任何人都知道如何使这项工作?我的后备方案是在实例化后必须通过调用$shipper->setShipment($shipment);Shipper 来设置发货,但我希望有一种方法可以绕过必须这样做......

对好奇的人进行更多解释:
FedEx 对象具有访问 FedEx 站点(使用 cURL)并获取相关货件的估计值的方法。我有一个 UPS 对象、一个 BAXGlobal 对象、一个 Conway 对象等。每个对象都有完全不同的方法来实际获取运费估算,但系统需要知道的是它们是“托运人”,并且列出的方法接口可以在它们上调用(因此它可以完全一样地对待它们,并在“托运人”数组中循环遍历它们,调用getTransitX()以找到货物的最佳托运人)。

虽然每个“托运人”也是一个“供应商”,并且在系统的其他部分(获取和放入数据库等)中都被视为这样。我们的数据设计是一堆废话,所以联邦快递与像这样的公司一起存储“供应商”表中的 Dunder Mifflin,这意味着它可以拥有所有其他供应商的所有属性,但需要 iShipper 提供的额外属性和方法)。

0 投票
7 回答
1226 浏览

java - 覆盖equals方法与创建新方法

我一直认为应该重写 java 中的 .equals() 方法以使其特定于您创建的类。换句话说,要寻找两个不同实例的等价性,而不是对同一实例的两个引用。然而,我遇到过其他程序员,他们似乎认为应该不理会默认对象行为,并创建一个新方法来测试同一类的两个对象的等价性。

支持和反对重写 equals 方法的论据是什么?

0 投票
30 回答
177529 浏览

c++ - 什么时候应该在 C++ 中使用“朋友”?

我一直在阅读C++ FAQ并对声明感到好奇friend。我个人从未使用过它,但是我对探索这种语言很感兴趣。

什么是使用的好例子friend


再阅读一下FAQ,我喜欢<< >>运算符重载并添加为这些类的朋友的想法。但是我不确定这如何不破坏封装。这些异常何时可以保持在 OOP 的严格性范围内?

0 投票
4 回答
1512 浏览

oop - 如何跟踪对对象的引用?

在手动内存分配和指针仍然占主导地位的世界中(Borland Delphi),我需要一个通用的解决方案来解决我认为的普遍问题:

在给定时刻,可以从多个位置(列表、其他对象……)引用对象。有没有一种好方法可以跟踪所有这些引用,以便在对象被销毁时更新它们?

0 投票
3 回答
843 浏览

c# - 在命名空间结构中公开继承层次结构是一个坏主意吗?

我有一组相互关联的类,它们都被一起覆盖以创建特定的实现。我想知道将相互关联的子类包含在命名空间中是否是个好主意。

例如,考虑以下命名空间和类:

构建命名空间的最佳方式是什么?在命名空间中暴露继承似乎是不可避免的,因为基类并不真正属于 Protocol.Tcp 命名空间或 Protocol.Ftp 命名空间。

0 投票
9 回答
1349 浏览

c# - 有没有办法让构造函数只对 C# 中的父类可见?

我有一组继承自我创建的抽象类的类。我想将抽象类用作创建抽象类的具体实现实例的工厂。

有没有办法从除父类之外的所有代码中隐藏构造函数。

我想基本上这样做

但我想阻止任何人直接实例化 2 个具体类。我想确保只有 MakeAbstractClass() 方法可以实例化基类。有没有办法做到这一点?

更新
我不需要从 Abstract 类之外访问 ConcreteClassA 或 B 的任何特定方法。我只需要我的 Abstract 类提供的公共方法。我真的不需要阻止具体类被实例化,我只是想避免它,因为它们没有提供新的公共接口,只是抽象类内部一些非常具体的东西的不同实现。

对我来说,最简单的解决方案是像 samjudson 提到的那样创建子类。但是我想避免这种情况,因为它会使我的抽象类文件比我希望的要大得多。我宁愿将课程分成几个文件以进行组织。

我想这没有简单的解决方案......

0 投票
15 回答
99570 浏览

php - PHP中的接口有什么意义?

接口允许您创建定义实现它的类的方法的代码。但是,您不能向这些方法添加任何代码。

抽象类允许您做同样的事情,以及向方法添加代码。

现在如果你可以用抽象类实现同样的目标,为什么我们还需要接口的概念呢?

有人告诉我,它与从 C++ 到 Java 的 OO 理论有关,这是 PHP 的 OO 东西所基于的。这个概念在 Java 中有用但在 PHP 中没有用吗?这只是一种避免在抽象类中乱扔占位符的方法吗?我错过了什么吗?

0 投票
1 回答
409 浏览

oop - dbml 中的外部参照关系

所以我有一个这样的数据库模式:

用户用户
ID

RoleUserXRef
RoleUserId
RoleId
UserId

角色
RoleId
名称

在 User & RoleUserXRef 和 RoleUserXRef & Role 之间定义了外键。基本上,我在用户和角色之间有一对多的关系。

我将如何在 dbml 中对此进行建模,以便生成的 User 类具有用户分配给它们的角色列表?