标签: object-oriented-analysis

实现不应调用的派生方法的最佳实践

我有一个JAVA类A,它有一个方法foo

abstract class A {
  abstract void foo();
}
Run Code Online (Sandbox Code Playgroud)

我还有一个派生类A - MutableA.MutableA是一个单例对象,表示不需要更新,这对重用代码流很有用.永远不应该在MutableA上调用foo().实现这一目标的最佳方法是什么:

  1. 抛出不支持的异常
  2. 什么都不做(空实现)
  3. 这是一个糟糕的设计.

有人可以推荐我这种情况下的最佳做法是什么?

java inheritance object-oriented-analysis

8
推荐指数
1
解决办法
340
查看次数

'Adapter'和'Mediator'模式之间的确切区别是什么?

我知道适配器是一种结构模式,而Mediator是一种行为模式.但据我所知,他们两人正在做的是连接两个(或更多)其他类,这些类可能与直接通信不兼容(不可维护).

有人可以对这两者进行比较,并指出确切的区别吗?

这些是TutorialsPoint中AdapterMediator解释的链接.

这些都是来源制作的解释.适配器,调解器.

oop design-patterns adapter mediator object-oriented-analysis

8
推荐指数
3
解决办法
2304
查看次数

没有行为的对象

我正在考虑一种情况,我有一个对象"交易",它具有相当多的属性,如帐户,金额,日期,货币,类型等.

我从不计划改变这些数据点,计算逻辑将存在于其他类中.我的问题是,为了保存数据,实例化成千上万个对象的Python设计是否糟糕?我发现数据嵌入在类中更容易,而不是试图将其嵌入到某些数据结构组合中.

python object-oriented-analysis

7
推荐指数
1
解决办法
136
查看次数

Java接口继承和扩展

想象一下,您正在研究成熟的产品,并且要求50%的产品需要新的搜索功能.现在假设你有一个与SomeDao建立的接口继承关系,你不想破坏...

public interface MoneyDao 
    extends SomeDao<MoneyEntity>
{
    //Operation common in much of the application
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria);     
}
Run Code Online (Sandbox Code Playgroud)

...有没有办法公开方法'findByCriteria(..)'而不是在所有其他类似于MoneyDao的地方重复它,以更清洁的方式需要它?

请记住,我希望避免使用其中使用和修改SomeDao的新类型,如果可能的话.

问候,詹姆斯

java oop object-oriented-analysis

6
推荐指数
1
解决办法
186
查看次数

UML类图:如何建模关于调用方法或启动活动或服务的关系

我正在创建我的第一个Android应用.我已经避免将关联标记为用户或系统交互(例如,我标记了开始而不是开始点击 ;我标记了开始而不是startsWhenDetection).然而,看完这个,我正在考虑改变开始由协会<< >>创建的依赖.我糊涂了!

该应用程序如下工作.当应用程序启动时,LauncherActivity将调用BaseActivity的方法来启动SettingsActivity中标记的活动(它也可能是SettingsActivity).LauncherActivity也将推出这两项服务.这是图:

全班图

注意:这个问题是延续这个问题.

android uml class-design class-diagram object-oriented-analysis

6
推荐指数
1
解决办法
8827
查看次数

面向对象设计与领域驱动设计

面向对象的设计已经有 20 年的历史了。领域特定语言和领域驱动设计已经在 Ruby 或 Python 等动态语言中流行起来。如果您的领域主要由对象组成,例如授予徽章或成就的子系统(如 Stackoverflow 上的徽章),那么您可以同时使用面向对象的设计和领域驱动的设计,因为徽章当然是一个对象。例如对于 Ruby,有两个 gems 来实现这个功能,BadgeablePaths of Glory. Badgeable 使用 DSL,Paths of Glory 基于面向对象的设计。在哪些情况下使用面向对象的分析和设计建模更好,哪些情况下使用特定领域语言(即领域驱动设计)建模更可取?

dsl object-oriented-analysis

5
推荐指数
1
解决办法
6791
查看次数

Python面向对象的设计概念

隔了20年之后,我才回到编程领域。我认为Python看上去相当简单和强大,因此我完成了在线课程和阅读。

我现在正在看一些简单的项目来熟悉这种语言。挑战之一是使我的注意力转向面向对象的编程,而上次编写程序时并没有。

我的第一个项目是读取一个数据文件,其中包含有关股票投资组合的信息,对每个投资组合进行一些计算,然后打印报告。我有这个工作。

因此,现在我正在研究更高级的内容,读取并存储数据,然后使用数据提供交互式问题的答案。我的问题是如何存储数据以便可以轻松访问。

我首先想到的是列出清单,例如

companies = [ ['AMP', 1000, 2.50], ['ANZ', 2000, 17.00], ['BHP', 500, 54.30] ]
Run Code Online (Sandbox Code Playgroud)

可以很容易地在循环中进行访问,但是访问方法并不完全友好-数字作为索引而不是名称:

companyqty = companies[1][1]
Run Code Online (Sandbox Code Playgroud)

或循环:

for company in companies:
    if company[0] == 'BHP':
        companyqty = company[1]
Run Code Online (Sandbox Code Playgroud)

然后我想到了一个字典,其值是一个列表:

companies = {'AMP':[1000, 2.50], 'ANZ':[2000, 17.00], 'BHP':[500, 54.30] }
companyqty = companies['BHP'][0]
Run Code Online (Sandbox Code Playgroud)

这样可以立即访问任何给定的公司,但是仍然停留在数字索引上。

因此,我想知道如何以一种面向对象的方式来构造它,以便能够保存公司列表和所有相关数据,并能够方便地访问这些值。到目前为止,我所有的想法都像上面的清单或字典一样。

还是这种问题真的不适合面向对象的方法?

谢谢

python object-oriented-analysis

5
推荐指数
1
解决办法
2898
查看次数

将私人职能改写为公众的潜在危险是什么?

我发现在C++中允许将基本对象的私有函数覆盖为公共函数,因为Visual Studio会产生0警告.这样做有潜在的危险吗?

如果没有,在基础对象中声明私有,受保护和公共虚函数之间有什么区别?

c++ object-oriented-analysis

5
推荐指数
1
解决办法
1057
查看次数

Haskell程序是否可以类似于传递消息的对象?

Haskell是一种纯功能性语言,与传统的面向对象语言不同。但是,请考虑以下Alan Kay对OOP的“真实”含义的引用:

对我而言,OOP意味着仅消息传递,本地保留和保护以及状态过程的隐藏以及所有事物的极端后期绑定。可以在Smalltalk和LISP中完成。可能还有其他系统可以做到这一点,但我不知道它们。-艾伦·凯

后来:

我想到的对象就像是生物细胞和/或网络上的个人计算机,只能与消息进行通信(因此消息传递从一开始就出现了,花了一段时间才能看到如何以编程语言足够有效地进行消息传递,有用)。

我很好奇Haskell可以在多大程度上实现这种编程风格。尤其是,是否可以将Haskell程序构造为一系列(类似)封装对象的序列,这些对象彼此之间来回传递消息

注意:我正在寻找特定于Haskell的示例,而不是一般的功能语言(冲突时)。

haskell smalltalk object-oriented-analysis

5
推荐指数
1
解决办法
313
查看次数

面向对象的设计来建模通用设备

在一次采访中,我被问到以下面向对象的系统设计问题。

有多种设备,如 Echo show、Echo dot、Echo tab、智能微波炉、Fire 电视棒等。

  • 回声秀 - 它有显示屏和扬声器。它在电力供应下工作。
  • 回声点 - 它有扬声器。它依靠电力供应工作。
  • 回声选项卡 - 它有扬声器。它依靠电池供电工作。电池可以充电。
  • 智能微波炉 - 有屏幕显示。它依靠电力供应工作。
  • 消防电视棒 - 它有扬声器。它依靠电力供应工作。

所以基本上有 3 个类别,例如 - 扬声器/屏幕显示/扬声器和屏幕显示。还有两个类别,例如 - 电源/电池供电。可以对任何这些设备进行查询,例如打印状态。以下是每个设备的可能输出 -

  • Echo 显示 - “正在充电”或“未充电”,具体取决于是否连接到电源。该输出应该出现在屏幕和扬声器上。
  • 回声点 - “正在充电”或“未充电”,具体取决于它是否连接到电源。该输出应该来自扬声器。
  • Echo 选项卡 - “电池正在充电”或“电池未充电且电池电量为 70%”,具体取决于电池是否正在充电。该输出应该来自扬声器。
  • 智能微波炉 - “正在充电”或“未充电”取决于它是否连接到电源。该输出应该出现在屏幕上。
  • Fire 电视棒 - “正在充电”或“未充电”,具体取决于它是否连接到电源。该输出应该来自扬声器。

假设有用于在屏幕上说话和打印的内置类。如果我们将字符串传递给这些类对象,它们将执行各自的工作。

现在编写 4-5 个类来模拟此场景。

设计应该是可扩展的,这意味着如果明天任何新设备带有新的组合,那么它可以在不创建任何新类的情况下实现。所以你不应该为每个设备创建类。

这是我的面向对象的解决方案,但面试官对此并不满意,尤其是vector<Output*> outputs. 他建议使用一些设计模式而不是矢量。你能想出更好的解决方案吗?

class Output {
   public:
    virtual void print(string);
};
class Display : public Output {
    DisplayScreen obj;
   public:
      void print(string str) { …
Run Code Online (Sandbox Code Playgroud)

c++ oop design-patterns system-design object-oriented-analysis

5
推荐指数
1
解决办法
343
查看次数