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

java - 查询Java中的接口

假设我有两个接口接口 A 和接口 B:

接口 A 有一个方法public int data(),接口 B 有一个方法public char data()

当我在某个类 C 中同时实现接口 A 和 B 时,编译器会给我一个错误。这是java中的缺陷吗?我认为这是不允许我们扩展多个类的主要原因之一,那么当这个问题仍然存在时,为什么我们允许实现多个接口?

0 投票
2 回答
1184 浏览

java - 线程安全类与具有所有静态方法的实用程序类

当我看到一个记录为线程安全的类时,我想知道为什么它没有被设计成一个具有所有静态方法(如 java.lang.Math 等)的实用程序类。

每当我在没有状态但在单个类中链接方法的场景中设计一个类时,我都缺少有效的驱动力。

示例 1:具有“线程安全字段”S 的类 A 怎么样?我的意思是,对象“S”本身是线程安全的。我们可以将类 A 中的所有方法和字段(如 S)声明为静态的吗?

我希望我的解释足够清楚。请澄清。

注意:排除 javabean、属性持有类等。我的问题是关于基于输入参数执行某些操作的类,它们可能还需要使用其他类。

我很抱歉我编辑了这个问题。初稿完全模棱两可。

0 投票
1 回答
510 浏览

oop - 业务实体中的继承:从数据访问层请求基类类型时访问和显示子类属性

(请记住,我是一个相对缺乏经验的程序员。我知道这个问题可以被视为过于开放,因为在 OOP 中有很多关于继承的哲学。这个问题更多地针对我的思考过程,即,我是否以经验丰富的程序员认为正确的方式处理这种情况?我的想法显然是准确还是不准确?)

我正在设计一个库存系统来跟踪有关 IT 硬件的信息,包括计算机、打印机、交换机、路由器、移动电话、硬盘驱动器和其他设备。我设计了一个数据库,现在正在规划一个前端应用程序。我打算让应用程序使用数据访问层、业务逻辑层和业务实体。我仍处于概念规划阶段,我意识到此时我不应该考虑实施细节,但我的思想倾向于向前推进。搜索功能的工作方式应该是:用户输入搜索条件并执行搜索。返回匹配设备(或唯一匹配设备)的列表。设备列表显示在某种类型的列表视图中,当设备被选中时会显示设备的详细信息视图。

我一直想知道在我的最终业务实体中使用继承是否会使我的应用程序受益,或者它是否会增加不必要的复杂性......或者它是否完全错误。我最初的想法是如图所示的设置:

(这不是实际设计,只是本文的简化概念)除了每个设备具有特定于类型的属性外,任何设备在任何给定时间都可以处于两种状态之一,活动或存档。我根本不知道如何建模。

概念类图

我开始考虑使用此设置时查询可能如何工作。从数据访问层查询设备的任何特定子类似乎很简单,例如

伪代码:

导致我写这个问题的问题是如何处理诸如“从特定位置获取所有设备”之类的查询。

如果我有基类对象引用,我将如何显示基本设备详细信息和特定设备详细信息?(尽量避免疯狂的投射或使用反射)。该位置的每个设备都将缺少其子类型的特定属性。如果我想显示有关特定设备的所有数据,我将不得不再次查询数据库以获取剩余字段。必须执行另一个查询是设计不佳的标志吗?此外,我将如何确定正确的设备类型?可能有一个大的 switch/case 语句测试每个Device.Type属性,执行正确的查询,返回完整的子类型并向用户显示详细信息?或者......返回包含完整子类型对象的单独列表然后遍历所有列表以在列表视图中显示公共属性然后在详细信息视图中轻松显示子类型详细信息是否更好?

这是一个有用的继承案例还是我滥用它?我目前正遭受信息过多的问题。我阅读了有关 OOD 的所有可能内容,并且我脑子里有很多规则和指导方针,我不知道我做的是否正确。我觉得我的大脑正在寻找应用我一直在吸收的信息,所以我在想象一个不正确的实现。我一直在考虑所有这些关于从编程到抽象的业务以保持代码的灵活性,但在某些时候你需要处理具体的类,对吧?从我的角度来看,继承是关于行为而不是属性。由于我实际上并没有对任何行为进行建模(或者我和我只是看不到它?)并且只是收集有关设备的数据,因此我很难解释它们的关系。由于这些类本质上是属性的愚蠢集合,我觉得它们都应该是单独的类。再说一次,我将在所有类中都有重复的字段,但在这种情况下真的很重要吗?

我知道有很多关于 OOD、继承、组合等方面的书。我读过其中的一些书;我目前正在阅读更多内容,并且我花了几天时间在线研究。每个人都方便地使用明显的继承示例。我正在做关于水果、动物和形状示例的噩梦。

感谢您花时间阅读我的问题,并感谢您提供的任何信息或见解。请随时提供任何其他提示、见解、商业秘密、埋藏宝藏地图、适合航海的船和六分仪,或任何您认为可能有帮助的东西。

0 投票
1 回答
101 浏览

c# - 访问抽象类的成员

我有以下类层次结构:

现在,为了访问 DerivedClassB-Object(继承自 BaseClass)的 PropertyA,我必须将对象强制转换为 BaseClassA 的祖先,如下所示:

有没有办法可以重组这些类以取消演员表?这段代码是图书馆的一部分,我的同事希望我摆脱演员阵容。

目标是简单地编写containingObject.BaseInterfaceObjectD.PropertyA = 42.

0 投票
3 回答
533 浏览

python - 建议 OOP 分析/设计 - 打破我的程序习惯

我想使用 OOP/OOD 作为一个小项目的练习,但我经常发现自己在编码时使用了一种过程方法。我将 Python 与 Flask(Web 框架)结合使用

本质上,我的应用程序是一种蜘蛛,可以读取新电影发布的 rss 提要。对于每个新电影发行,它使用 imdb 链接从两个不同的 Web 服务(imdbapi 和 TMDb)收集有关情节、年份、类型、海报和类似信息的信息。如果首选服务无法提供信息,则使用其他服务。最后将所有信息保存在数据库中。然后我使用 Flask 在网站上展示信息

我现在已经创建了一个 Spider 类。它包含以下方法(为清楚起见已删除代码):

“问题”是我使用run_update()方法以程序方式执行所有步骤。我也发现设计不灵活。例如,如果我无法获得一项服务的电影信息,我想尝试另一项服务,但这在当前格式中实现起来并不容易。

我想到的是创建一个 Movie 类,代表在 rssfeed 中找到的每部电影。也许还为我用于收集有关每部电影、imdbapi 和 TMDb 的信息的每个服务创建类?

那么,您将如何以 OOP/OOD 方式设计和设计这样的应用程序?当我们超出教科书中使用的简单示例(如汽车、书籍、水果等)时,我发现识别类有点困难。

0 投票
1 回答
101 浏览

php - 在加载器视图方法中获取控制器变量?

我正在构建一个脚本,它有一个静态类,用于加载一些东西,包括文件和视图。

在控制器中我调用视图方法来获取视图:

显然,我无法使用这种做法从视图文件中的控制器访问变量,因此我对视图类进行了小修改以捕获变量:

并添加以下代码行以将键放入 vars:

但是我再次无法访问变量,因为我使用一种方法来加载文件。

我有一种加载文件的方法,因为我想测试并记录每个文件包含尝试,而不是每次需要包含文件时都重复代码。而且我在加载器类中有加载器视图,因此我将所有此类方法放在一起。我应该放弃使用类来加载文件吗?我应该在控制器的可扩展类上使用加载器视图方法吗?

我不想继续修改我的整个脚本,我想听听一些意见……最好的做法是什么?或者有没有办法解决我的问题?也许使用 __set 和 __get 魔术方法?

谢谢,

0 投票
3 回答
819 浏览

java - 在面向对象设计中保持数据和格式分离

我正在创建一个程序,其中有一个名为“层次结构”的对象,它只不过是一个带有字符串(ArrayList<ArrayList<String>>)和适当吸气剂的列表的列表。

用户应该能够选择这些层次结构的表示/格式 - 例如,层次结构 [1,2,3,4] 是否应该表示为 {1,2,3,4} 或 (1-4) 或其他,在写入文件之前。

有没有一种聪明/标准的方法来进行这种数据和格式的分离?我正在考虑创建一个“FormattedHierarchy”对象,它仅由一个层次结构对象和一个格式化对象组成,但我不知道这是否是一个好的设计选择。

感谢任何指针/提示/答案。

0 投票
1 回答
385 浏览

matlab - 从单个“种子”文件开始生成多个输出文件

大家早上好,

有时我想知道是否有可能通过 Matlab 做一些接近我将要描述的事情:

  1. 使用外部工具(即 Ansys、Abaqus 或其他软件),我生成了一个列出的“种子”文件(文件扩展名为 .inp、.db 或其他),该文件将用作后续步骤的参考;

  2. 从这个种子列出的文件开始,我想得到,比如说,200 个类似的项目文件,与种子相比包​​含一些细微的变化:我的意思是,例如,模拟时间或任何其他特征。

我将举一个简短的例子:我目前正在研究 Bladed,该软件为风能应用执行气动弹性模拟;例如,Blade 让我有机会产生湍流风场。种子代码如下所示:

通过matlab,我希望能够为不同的风速和随机种子(UBAR,SEED)生成类似的项目文件,并将这些文件保存在预定的子文件夹中。

最后,我很高兴知道你们是否有任何线索/建议可以给我。然后,我的任务就是找到一个合适的编码架构。

我提前感谢大家的支持。

最好的问候,弗朗切斯科

0 投票
2 回答
803 浏览

java - 检查对象是否已更改(保持良好的类设计)

我有称为“层次结构”的对象,基本上只是一个字符串列表,例如。[1 2 3 4]。我还有一个名为 FormattedHierarchies 的对象,它应该始终以用户希望它们表示的方式保持层次结构的格式化版本,例如 (1-4) 或 {1,2,3,4}。

我的问题是这样的:

我想在层次结构发生更改时立即更新 FormattedHierarchy(例如,如果层次结构从 [1 2 3 4] 更改为 [1 2 3],则 FormattedHierarchy 应从 (1-4) 更改为 (1-3))。

谷歌搜索出现了http://docs.oracle.com/javase/tutorial/uiswing/events/changelistener.html 但我的问题是:如果我想让 Hierarchy 实现 ChangeListener,它必须实现方法“stateChanged” .

类型 Hierarchy 必须实现继承的抽象方法 ChangeListener.stateChanged(ChangeEvent)

让 Hierarchy 创建一个新的 FormattedHierarchy 是不可行的,我也认为这不是好的类设计。这是因为层次结构随后将实现处理其格式的东西(尽管是以间接方式)。

这个问题有没有标准或聪明的解决方案?

0 投票
3 回答
116 浏览

php - 这个 OOP 代码基本上正确吗?

我目前正在尝试将我们的页面模板转换为 OOP,并且我感觉我为导航类提出的内容从根本上来说并不完全正确。

  • 这些方法中的一些真的属于扩展类drawNav吗?
  • getMenuBar-> generateMenuBar->结构是否generateMenuItems过多分解?它应该只是getMenuBar,并把所有的内容从generateMenuBar()generateMenuItems()getMenuBar()

我调用类和方法的方式:

编码: