问题标签 [ooad]
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.
encapsulation - 抽象 VS 信息隐藏 VS 封装
你能告诉我软件开发中的抽象和信息隐藏有什么区别吗?
我很困惑。抽象隐藏了细节实现,而信息隐藏抽象了某物的全部细节。
更新:我为这三个概念找到了一个很好的答案。请参阅下面的单独答案以获取从那里获取的几个引文。
javascript - 在应用程序中使用 jQuery 表单绑定代码的最佳实践
我们有一个对服务器端代码进行大量 jQuery JSON 调用的应用程序。正因为如此,我们有大量的绑定代码来解析响应并将适当的值绑定到表单。这是一个两部分的问题。
处理具有不同数据的大量表单的推荐方法是什么。现在正在尝试采用结构化方法为每个页面设置一个 js“类”,包括一个 init、wireClickEvents 等。试图让一切都符合要求。
除了在 js 文件中抛出一堆函数之外,是否有任何“最佳实践”来创建重复的 jQuery 代码或任何类型的推荐结构?
c++ - 什么时候应该在 C++ 中使用类和结构?
在什么情况下在 C++中使用 a struct
vs a更好?class
language-agnostic - OO 设计,开放/封闭原则问题
我一直在考虑这个面向对象的设计问题,但无法提出令人满意的解决方案,所以我想在这里向人群开放以征求意见。
我有一个代表回合制棋盘游戏的Game类,出于这个问题的目的,我们可以假设它类似于 Monopoly。在我的设计中,我有一个包含方法TakeTurn的Player类。
Game循环遍历所有Player并调用 TakeTurn 方法来完成所有必要的事情以完成转弯。我希望能够拥有 n 个玩家,并且能够将任意数量的玩家设置为电脑玩家。所以,我的想法是有一个 HumanPlayer 类和一个ComputerPlayer类,它们都派生自 Player。
Game只知道Player类,并简单地依次调用每个Player的TakeTurn方法。我的问题在于,ComputerPlayer对象可以完全自动化,即与 Monopoly 示例保持一致,可以使用某种逻辑决定购买房产。现在,对于HumanPlayer对象,它需要从实际用户那里获得输入才能购买房产,例如,这似乎暗示了不同的界面,并且可能意味着它们不应该派生
如果不让Game类明确知道各种Player类的实际实现,我就无法为这个问题提出一个好的解决方案。我总是可以在Game类中假设永远只有人类和计算机玩家并有效地关闭它以进行扩展,但这似乎不是好的 OO 编程。
对此的任何意见将不胜感激。
oop - 如何使用 CRC 卡进行精心设计?
我一直想知道人们如何使用 CRC(类责任协作)卡。我在书中读到过它们,在互联网上找到了模糊的信息,但从未真正掌握。我认为应该有人制作一个 youtube 视频来展示与 CRC 卡的会话,因为我的一本书将其描述为很难用文字表述,它应该“由已经掌握它的人教”。可悲的是,我知道附近没有人使用 CRC 卡,我想了解更多信息。
更新
任何显示人们使用此技术详细说明的视频的链接将不胜感激。
oop - 同时拥有抽象类和接口有什么好处吗?
我从一个名为 ILogin 的通用接口开始。这些接口要求您实现两个属性:UserID 和 Password。我有许多实现此接口的登录类型类。随着我的项目越来越大,我发现许多类都重复了 UserID 和 Password 代码。现在我决定我需要一个基本的登录类。
创建一个实现 ILogin 接口的抽象基本登录类并让我的所有具体类只从抽象类继承并在必要时覆盖是否合适?本来我以为这样不会有问题的。然后我开始认为 ILogin 可能是不需要的,因为它可能只会由我的抽象类实现。
保留抽象类和接口是否有好处?
谢谢!
oop - 继承和接口
这在某种程度上是这个问题的后续问题。
假设我有一个继承树如下:
为这些类中的每一个定义接口是否有好处?例子:
我可以看到也许其他类(如Chevy
)想要实现Icar
orIFord
甚至IMustang
可能,但可能不是IMustangGT
因为它是如此具体。在这种情况下,接口是多余的吗?
另外,我认为任何想要实现的类IFord
都肯定希望通过继承来使用它的一个继承,Ford
以免重复代码。如果这是给定的,那么实施的好处是什么IFord
?
oop - 如何发展*现实生活* oop 技能?
我已经研究 OOP 很长一段时间了,我对这个理论有了很好的掌握。我阅读了关于 OOP 的Head First 一书,虽然它强化了很多理论,但我发现案例研究有些琐碎。
我发现我每天都在将 OOP 原则应用到我的代码中,但我不确定我是否正确应用了它们。我需要达到能够查看我的代码并知道我是否正确使用继承,我的对象是否足够内聚等等的地步。
有没有人有任何好的建议(书籍、在线指南、博客、演练等),以帮助您在下一步发展扎实的 OOP 技能?
我主要在 .NET(Visual Basic)中工作,但我欢迎包含各种平台的建议。
oop - 如何将组合与继承结合使用?
我将尝试在一个简单的例子中提出我的问题......
假设我有一个抽象基类 Car。汽车有一个基本的引擎对象。我在抽象 Car 类中有一个方法 StartEngine() ,它将引擎的启动委托给 Engine 对象。
如何允许 Car 的子类(例如 Ferrari)将 Engine 对象声明为特定类型的引擎(例如 TurboEngine)?我需要另一个汽车类(TurboCar)吗?
我继承了一个普通的旧 Engine 对象,我无法在我的 Car 子类中将它重新声明(或覆盖)为 TurboEngine。
编辑: 我知道我可以将 Engine 的任何子类插入到我的 Ferrari 类中的 myEngine 引用中......但是我怎样才能调用只有 TurboEngine 公开的方法?因为 myEngine 是作为基础引擎继承的,所以不包括任何涡轮增压的东西。
谢谢!