问题标签 [car-analogy]

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 投票
10 回答
1069 浏览

oop - 如何将组合与继承结合使用?

我将尝试在一个简单的例子中提出我的问题......

假设我有一个抽象基类 Car。汽车有一个基本的引擎对象。我在抽象 Car 类中有一个方法 StartEngine() ,它将引擎的启动委托给 Engine 对象。

如何允许 Car 的子类(例如 Ferrari)将 Engine 对象声明为特定类型的引擎(例如 TurboEngine)?我需要另一个汽车类(TurboCar)吗?

我继承了一个普通的旧 Engine 对象,我无法在我的 Car 子类中将它重新声明(或覆盖)为 TurboEngine。

编辑: 我知道我可以将 Engine 的任何子类插入到我的 Ferrari 类中的 myEngine 引用中......但是我怎样才能调用只有 TurboEngine 公开的方法?因为 myEngine 是作为基础引擎继承的,所以不包括任何涡轮增压的东西。

谢谢!

0 投票
10 回答
7375 浏览

c++ - 如何在我的 C++ 代码中避免 dynamic_cast?

假设我有以下类结构:

让我们也给它Car一个句柄Engine。AFooCar将由 a 创建,FooEngine*aBarCar将由 a 创建BarEngine*。有没有办法安排事情,以便FooCar对象可以调用成员函数而FooEngine无需向下转换?

这就是为什么类结构按现在的方式布局的原因:

  1. 所有Cars 都有一个Engine. 此外, aFooCar只会使用 a FooEngine
  2. 所有Engines 共享的数据和算法我宁愿不复制和粘贴。
  3. 我可能想编写一个需要Engine知道它的函数Car

在编写这段代码时,我一打字dynamic_cast就知道我可能做错了什么。有一个更好的方法吗?

更新:

根据目前给出的答案,我倾向于两种可能性:

  1. 已经Car提供了一个纯虚getEngine()函数。这将允许FooCarBarCar拥有返回正确类型的Engine.
  2. Engine将所有功能吸收到Car继承树中。 Engine出于维护原因(将这些Engine东西保存在一个单独的地方)。这是拥有更多小类(小代码行)与拥有更少大类之间的权衡。

社区是否对其中一种解决方案有强烈的偏好?有没有我没有考虑过的第三种选择?

0 投票
32 回答
146614 浏览

collections - 什么是链表的一个实际的、真实的例子?

我了解链表的定义,但它如何表示并与一个共同的概念或项目相关联?

例如,OOP 中的组合(编辑:最初说“继承”)可能与汽车有关。现实生活中的所有(大多数)汽车本质上都是一样的。汽车有一个引擎,你可以启动()它,你可以让汽车去(),停止()等等。汽车通常具有最大载客量,但在公共汽车和跑车之间会有所不同,这两种汽车都是汽车。

是否有一些真实的、直观的简单的 ole' 单链表示例,就像我们在继承中所拥有的那样?典型的教科书链接列表示例显示了一个带有整数的节点和指向下一个的指针,它似乎并不是很有用。

感谢您的意见。

0 投票
10 回答
224989 浏览

java - 如何显示数组列表中的所有元素?

假设我有一个带有属性的汽车类makeregistration并且我创建了一个 ArrayList 来存储它们。如何显示 ArrayList 中的所有元素?

我现在有这个代码:

它编译得很好,但是当我使用以下代码在我的测试器类中尝试它时:

我收到不兼容类型的错误。我的编码正确吗?如果没有,有人可以告诉我应该怎么做吗?

谢谢你

0 投票
2 回答
722 浏览

ruby - Ruby:@cars.each do |car| 之间的区别 和@cars中的汽车做

(对不起新手问题。)在Ruby中,循环之间有什么区别:

?

效率上是否存在差异,或者为什么我们需要两种(或更多)方式来表达同一件事?第二种方式对我来说似乎更优雅/自然,但我可能错过了一些重要的观察,为什么第一种可能是更好的选择。

0 投票
8 回答
477 浏览

c - 一个对象需要修改另一个对象时的 OOP 最佳实践

(这是一个类似 C 的环境)假设我有两个实例对象,一个汽车和一个 bodyShop。该车具有颜色 iVar 和相应的附件。bodyShop 有一个名为“paintCar”的方法,它将接收一个汽车对象并改变它的颜色。

至于实现,为了让 bodyShop 实际上能够改变汽车对象的颜色,我看到了两种方法。

  1. 使用“&”运算符传递一个指向汽车的指针。然后 bodyShop 可以告诉汽车执行某种方法,它必须改变颜色,或者它可以直接使用汽车的访问器。

  2. 按值传入汽车对象,做同样的事情来改变颜色,然后让该方法返回一个具有新颜色的汽车对象。然后将原始汽车对象分配给新汽车对象。

选项 1 对我来说似乎更直接,但我想知道它是否符合 OOP 最佳实践。一般来说,对于“最大 OOP”,“&”运算符是好还是坏?或者,也许我完全错过了一个更好的选择来制作这个超级 OOPer。请指教 :)

0 投票
7 回答
5473 浏览

oop - 是否使用 has-a(组合)或 is-a(继承)对汽车对象(及其部件,如引擎)进行建模?

我正在开发一个包含对象 Car 的类库。

困境是,汽车本身将是一个具有诸如注册号等字段的类,以及汽车的其他一般信息。

但是汽车有引擎、底盘等。这些对象也需要建模。它们应该是嵌入在 Car 中的类吗?如果不是,嵌入式类的使用场景是什么?

我了解到组合是“一部分”,因此您可以对单独的类进行建模并使用引擎类型,例如,在汽车的字段级别来实现这一点。但是,“聚合”是与在 ctor 中传递的类型“有”的关系,也适用(汽车“有”引擎)。

我该走哪条路?

编辑:我目前正在做作业,因此我没有回复。类库用于基于汽车的 Web 应用程序。我是一名专业开发人员(我以 .NET 为生,但作为一名初级开发人员),所以这不是一个家庭作业问题。

谢谢

0 投票
8 回答
695 浏览

algorithm - How can I sort a 10 x 10 grid of 100 car images in two dimensions, by price and speed?

Here's the scenario.

I have one hundred car objects. Each car has a property for speed, and a property for price. I want to arrange images of the cars in a grid so that the fastest and most expensive car is at the top right, and the slowest and cheapest car is at the bottom left, and all other cars are in an appropriate spot in the grid.

What kind of sorting algorithm do I need to use for this, and do you have any tips?

EDIT: the results don't need to be exact - in reality I'm dealing with a much bigger grid, so it would be sufficient if the cars were clustered roughly in the right place.

0 投票
12 回答
756 浏览

oop - 为什么坚持 get-set 而不是 car.speed() 和 car.speed(55) 分别?

除了明确的明确性之外,我们为什么要坚持:
car.getSpeed()以及car.setSpeed(55)
何时也可以使用: car.speed()car.speed(55)

我知道 get() 和 set() 有助于通过将所有内容保存在一个位置来管理对数据成员的任何更改。

另外,很明显,我理解car.speed()car.speed(55)相同的函数,这使得这个错误,但是在 PHP 和 Zend Framework 中,相同的操作用于 GET、POST、回发。
在 VB 和 C# 中有“属性”,并且被许多人使用,这让我听说过的纯粹主义者感到厌恶,并且在 Ruby 中有一些东西,比如5.timesand.each等等.to_i
你有运算符重载、多重继承、虚函数C++,某些组合可能会让任何人发疯。

我的意思是说,有太多的范式和做事的方式,以至于没有人尝试过我提到的特定组合,这似乎很奇怪。

至于我,我的理由是阅读代码更简洁。
我是不是很不对,有点不对,这只是奇怪的,所以没有使用,还是别的什么?

如果我仍然决定保持正确,我可以使用car.speed()and car.setSpeed(55)
这有什么问题吗(只是省略了“get”)?

感谢您的任何解释。

0 投票
9 回答
1275 浏览

oop - OOP设计问题

在这个简单的案例中什么是好的设计:

假设我有一个基类 Car 的方法FillTank(Fuel fuel),其中燃料也是一个基类,它有几个叶类、柴油、乙醇等。

在我的叶子车类DieselCar.FillTank(Fuel fuel)上,只允许使用某种类型的燃料(这并不奇怪:))。现在这是我关心的问题,根据我的界面,每辆车都可以加满任何燃料,但这对我来说似乎是错误的,在每个FillTank()实现中检查输入燃料的类型是否正确,如果没有抛出错误或其他东西。

我怎样才能将这种情况重新设计为更准确的情况,甚至可能吗?如何设计一个基类作为输入而不得到这些“奇怪结果”的基本方法?