问题标签 [class-hierarchy]

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 投票
5 回答
5947 浏览

delphi - Delphi 7:如何生成类层次结构?

我正在寻求理解其他人在 Delphi 7 中的代码(我怀疑较新的版本内置了这个,但我不想为最新版本增加 > 1k 美元)。

他们是否有任何(最好是 FOSS)工具可以帮助我生成类层次结构图?


实际上,GExperts中的类浏览器是可以的。也许不如公认的答案好,但只是众多工具中的一个

0 投票
1 回答
5737 浏览

oop - 类与对象层次结构

你如何解释类​​层次结构。

我认为我的谷歌能力已经下降,因为当我搜索“类层次结构”作为术语时,我得到了一些关于类如何组织以及它们之间的继承关系的示例。这都是关于类层次结构的吗?您如何向 C 开发人员解释类层次结构?

类层次结构和对象层次结构之间还有什么区别?

实际上,我应该在周六向我的办公室同事做一次演讲,并遇到很多理论话题:(

任何帮助,将不胜感激。

非常感谢

0 投票
2 回答
1114 浏览

python - 有用的发布-订阅语义

我正在寻找有关实际工作的轻量级发布-订阅机制的设计和实现的维基百科风格的参考。我将根据答案和评论以及我自己的研究来更新问题。

我研究了我的书籍和网络,以查找使用 Python 和 Delphi 完成的发布/订阅工作,但对结果不满意。这些设计依赖于函数签名或位图或插槽来过滤消息或决定应该将什么传递给谁,并且要么过于严格(绑定到消息服务器),要么过于混乱(每个人都可以订阅任何东西)。

我不想自己写。我想找到一些已经经过精心设计、辩论和现场验证的东西。

今天我用 Delphi Pascal 实现了一个设计(因为 Delphi 是我首先需要的)。正如这个 API 所做的那样,在参数类型上分派并不是一个原始想法(它被解释为设计模式 Visitor模式),我想我以前见过类似的东西(但我不记得在哪里;Taligent?)。它的核心是订阅、过滤和分派在类型系统之上。

上面的“回调”就像 Python 中的绑定方法。

Delphi 实现的完整源代码在这里

这是 Python 中的实现。我更改了键名,因为信号消息已经太重了。与 Delphi 实现不同,结果(包括异常)被收集并以列表的形式返回给信号器。

这些是我搜索的原因:

  1. 我已经经历了几千行我必须维护的 Delphi 代码。他们使用观察者模式进行 MVC 解耦,但由于观察者和主体之间的依赖关系过于明确,所以一切仍然非常耦合。
  2. 我一直在学习 PyQt4,如果我必须在 Qt4Designer 中为我想要到达一个有意义的目的地的每个事件单击单击单击,那会杀了我。
  3. 然而在另一个个人数据应用程序上,我需要抽象事件传递和处理,因为持久性和 UI 会因平台而异,并且必须完全独立。

参考

自己和别人找到的应该去这里

  • PybubSub使用字符串作为主题和方法签名(第一个信号定义了签名)。
  • FinalBuilder博客中的一篇文章报告说,他们已成功使用整数结构作为有效负载、消息和整数掩码进行过滤的系统。
  • PyDispatcher的文档最少。
  • D-Bus已被 Gnome 和 KDE 项目等采用。可以使用Python 绑定
0 投票
4 回答
1034 浏览

objective-c - 类簇层次结构的 Objective-C 组织

这是Objective-C的类设计问题。这是一个例子:

文件系统有文件和目录。两者都是“节点”。例如,遍历一个目录会产生一个节点列表,其中一些是 [子] 目录,另一些是文件。

这指向类层次结构的以下客户端抽象视图:

到目前为止,一切都很好。此时,所有三个类都是抽象的。现在开始实施,您意识到有两种主要途径:使用 URL(Apple 推荐用于 Mac OS X ≥ 10.6)或路径(仅适用于 Mac OS X ≤ 10.5 或Cocotron的可能方式)。

所以现在,你需要为上面的三个抽象类分别开发两个具体的实现:

现在考虑,比如说FileWithURL

  • 它是一个文件,所以它应该继承自File.
  • 它是一个用 URL 实现的节点,所以它应该继承自NodeWithURL

但是FileNodeWithURL不在同一类层次结构行内。如果没有多重继承,就无法在 Objective-C 中表达。

那么你会如何设计这种情况呢?我可以看到两个想法:

  • 使用协议,这是一种有限的多重继承形式。
  • 使用成员(has-a 而不是 is-a 关系)。

我倾向于支持协议的想法。在这种情况下,DirectoryandFile将是协议,并且六个具体类将从一个公共Node超类继承并符合它们的对应协议。Node将有两个子类层次结构:一个使用 URL,一个使用路径。

现在存在对客户端代码隐藏实现的问题。为此,可以使用Node公共超类设置类集群。客户端代码将获取类型化的对象Node<File>Node<Directory>视情况而定。

任何其他/其他/类似/不同的想法?

0 投票
5 回答
6684 浏览

java - Java:超类和子类

  1. 子类变量可以转换为它的任何超类吗?
  2. 可以为超类变量分配任何子类变量吗?
  3. 可以为超类分配任何变量吗?
  4. 如果是这样,可以为接口变量分配来自任何实现类的变量吗?
0 投票
4 回答
3090 浏览

java - 类层次结构对 Java 性能的影响有多大?

我有扩展另一个类的类,扩展另一个类..等等。

具有 100 级层次结构级别的类将工作多慢(以百分比计),然后具有 10 级层次结构级别的类?

0 投票
1 回答
809 浏览

objective-c - 访问 CCLayer 头疼!

我在访问我的图层时遇到了一些麻烦,这让我发疯了。基本上,我的图层场景层次结构如下:

Compiler.m - CCLayer - 持有 +(CCScene) 方法并加载所有其他 CCLayer。
Construct.m - CCLayer - 保存 box2d 引擎及其组件
Background.m - CCLayer - 保存背景。
Hud.m - CCLayer - 持有 HUD。

在 Compiler 实现类中,我将 Scene 和所有相关节点添加到 Compiler CCLayer:

这一切都很好,我的层被添加到编译器中,并且编译器的场景被委托访问,如预期的那样。

我的问题是我试图在 Construct 层内访问我的背景 CCLayers - CCsprite *background,以便我可以根据我的 Construct 游戏英雄的位置移动它。

我尝试了许多不同的方法,但我目前决定使用类方法而不是实例方法来定义 CCSprite *background,以便我可以在我的构造层中访问它。
我还尝试使用@properties 访问并初始化该类的实例变量。

这是我的背景CCLayer:

这有效,它将图像加载到背景层。

最后,我尝试从构造层访问背景图像。

这不起作用,我在某些方面收到一个“nil”指针,tempBack 没有正确访问背景,或者根本没有。

如何访问和修改后台 CCLayers 类变量 +(CCSprite) bk?

0 投票
5 回答
724 浏览

c# - 使用类层次结构重载 - 大多数派生不使用

问题

我试图避免如下所示的代码:

我以为我可以通过方法重载来做到这一点,但它总是选择派生最少的类型,我认为这是因为重载是在编译时确定的(与覆盖不同),因此只能在以下代码中假设基类:

代码结构:

代码实现(关键类):

我的场景: 本质上,我正在创建一个游戏,并且想要将现实世界的类(例如一个人)与屏幕上的类(一个人的图像)分离。真实世界的对象不应该知道它在屏幕上的表现,表现需要知道真实的对象(知道这个人的年龄,因此画了多少皱纹)。如果 RealObject 是未知类型,我想要回退,它仍然显示一些东西(比如一个大红十字)。

请注意,此代码不是我使用的,它是一个简化版本,以保持问题清晰。如果适用,我可能需要稍后添加详细信息,我希望此代码的解决方案也能在应用程序中工作。

解决这个问题的最优雅的方法是什么?- 没有 RealObject 本身持​​有关于它应该如何表示的信息。XNA 游戏是一个概念验证,非常重 AI,如果证明可行,将从 2D 更改为 3D(可能同时支持低端计算机)。

0 投票
1 回答
931 浏览

delphi - 什么是显示现有对象层次结构的树视图的最佳 Delphi 算法

这听起来很简单,但它就像一个洋葱——剥皮时有很多层。我有自己的对象类的层次结构 - 有点像表单上的组件,因为它们中的任何一个都可以有子级和父级。在顶部有一个根对象。其他代码管理此层次结构,并且可以随时创建、删除或重命名分支或叶子。我希望有一个树视图(某种,可能是虚拟的),它以这样一种方式提供这个层次结构的视图,以便可以有多个这些树视图,每个视图都根据需要从对象层次结构中绘制自己。

我已经有了一个使用 Delphi 的 TTreeView 的解决方案,但它依赖于在引发“已更改”标志并重建已更改的树视图分支时遍历层次结构。这很慢(我可以有超过 1000 个对象),我想要一种算法,它可以设法为单个对象插入或删除进行单个树视图更改。

这可能吗?

0 投票
4 回答
4304 浏览

objective-c - Objective-C 继承;从父类向下转换/复制到派生类

在我的程序中,我有一堂课,比如说ClassA。我想创建一个派生类,比如说ClassB. 我的程序具有返回实例的函数ClassA,在某些情况下,我想使用这些返回来创建ClassB. 进行天真的向下转换不会导致任何编译器错误,但运行时错误会蔓延。这似乎与关于转换指针与对象的问题有关——无论如何,从我读过的内容来看,这是错误的在这种情况下要做。

然后我尝试模仿 C++ 的复制构造函数,但是被复制的变量超出范围或被释放,再次导致运行时错误。

我也考虑过使用类别,但这似乎不正确,原因有两个:

  1. 首先,我不能添加带有类别的新班级成员,如果我不能这样做,事情会变得有点复杂。
  2. 据我所知,通过类别添加的方法可用于类的所有实例。虽然严格来说这不是一个问题,但它并不适合我,因为我想添加的方法的某些方面会在一般环境中中断;即它们在某种程度上特定于我需要对这些类型的对象做什么。

我还在学习Objective-C。我知道论坛中有一些类似的问题,但答案要么导致类别和死胡同,要么在没有太多帮助的情况下死胡同,所以我觉得我应该简单地重新发布。