oop - 面向对象编程理论
问题描述
这个问题涉及建立对象层次结构的通用方法。我将用一个例子来解释我的问题。
假设我正在构建一个数字电路模拟器,并且我们使用面向对象的类结构来做到这一点。基类是逻辑门,我们从中派生出二元门和一元门,然后从二元门派生出与、或、异或等类,从一元门派生出非门类。这是有道理的,因为在每一层您都变得更加指定,并且您分支到具有该派生类唯一的数据的子集。
但是假设我们想从派生的逻辑门类中构建一些东西,例如,一个 8 位加法器电路。在这种情况下,8 位加法器不是原始层次结构的一部分——它不是逻辑门,但尽管如此,它可以由逻辑门对象构建。此外,8 位加法器可分解为 8 个全加器,每个加法器可分解为 2 个半加器。但与原始逻辑门层次结构相反,这些对象中的每一个(8 位加法器、全加器和半加法器)都作为单独的组件运行,而真正用作逻辑门层次结构中组件的唯一类是最终的派生类,AND、OR、XOR、NOT。从这个意义上说,我不明白为加法器电路创建基于继承的类结构是否合适。
对我来说,似乎半加器、全加器和 8 位加法器都应该由单独的逻辑门对象组成,但这将是低效的,因为它需要大量重复代码,所以这就乞求了问题,安排这些类结构的最佳方法是什么,以便最复杂的 8 位加法器可以从全加器构建,全加器可以从半加器构建,半加器可以从单独的逻辑构建大门。
非常感谢所有这些答案。
解决方案
推荐阅读
- perl - 从 perl 脚本调用系统命令打印输出并将其存储到变量中
- maven - 从 spring boot jar 中读取
- vue.js - 在 vuejs 中使用 eventBus 在哪里监听事件
- outlook - 以编程方式打开 Outlook 草稿消息以进行进一步编辑
- git - 如何通过“git apply”使 git 更改子模块提交 #
- azure - CosmosDB Sql 查询在 CosmosDB 模拟器和 Azure 门户 Cosmos DB 中返回的输出不同
- git - git:如果 git-fat 未处理它们,则保证不会将二进制文件添加到提交
- cordova - “BackgroundGeolocation”类型上不存在属性“on”
- javascript - 如何在 onmouseover 事件上影响 previousSibling 样式。CSS 或 JavaScript
- c# - C# - 无法根据文本文件数据在列表中添加元素(这是一个列表)