問題タブ [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.
oop - 継承で構成を使用するにはどうすればよいですか?
簡単な例のコンテキストで質問をしようと思います...
抽象基本クラス Car があるとします。車には基本的なエンジン オブジェクトがあります。エンジンの始動を Engine オブジェクトに委譲する抽象 Car クラスに StartEngine() メソッドがあります。
Car のサブクラス (Ferrari など) が Engine オブジェクトを特定のタイプのエンジン (TurboEngine など) として宣言できるようにするにはどうすればよいですか? 別の Car クラス (TurboCar) が必要ですか?
単純な古い Engine オブジェクトを継承していますが、Car サブクラスでそれを TurboEngine として再宣言 (またはオーバーライド) することはできません。
編集: Engine の任意のサブクラスを Ferrari クラス内の myEngine 参照にプラグインできることは理解していますが、TurboEngine のみが公開するメソッドを呼び出すにはどうすればよいですか? myEngine はベース エンジンとして継承されるため、ターボ関連のものは含まれません。
ありがとう!
c++ - C++ コードで dynamic_cast を回避するにはどうすればよいですか?
次のクラス構造があるとします。
Car
その へのハンドルも与えましょうEngine
。はFooCar
で作成されFooEngine*
、BarCar
は で作成されBarEngine*
ます。オブジェクトがダウンキャストせずにFooCar
メンバー関数を呼び出せるように配置する方法はありますか?FooEngine
クラス構造が現在のようにレイアウトされている理由は次のとおりです。
- すべて
Car
の にはEngine
. さらに、 aFooCar
は a のみを使用しFooEngine
ます。 Engine
コピーして貼り付けたくない、すべてのユーザーが共有するデータとアルゴリズムがあります。Engine
がその について知る必要がある関数を書きたいと思うかもしれませんCar
。
dynamic_cast
このコードを書いているときに入力するとすぐに、何か間違ったことをしている可能性があることがわかりました。これを行うより良い方法はありますか?
アップデート:
これまでの回答に基づいて、私は次の 2 つの可能性に傾いています。
- 純粋
Car
な仮想getEngine()
関数を提供する必要があります。これにより、正しい種類の を返す実装が可能FooCar
になります。BarCar
Engine
Engine
すべての機能をCar
継承ツリー に吸収します。Engine
メンテナンス上の理由で(Engine
別の場所に保管するため)壊れていました。これは、小さなクラス (コード行が小さい) を増やすか、大きなクラスを減らすかのトレードオフです。
これらのソリューションのいずれかに対するコミュニティの強い好みはありますか? 私が考慮していない 3 番目のオプションはありますか?
collections - リンクされたリストの実用的で現実的な例は何ですか?
リンク リストの定義は理解していますが、それをどのように表現し、共通の概念や項目に関連付けることができますか?
たとえば、OOP の構成 (編集: もともと「継承」と呼ばれていました) は、自動車に関連している可能性があります。実生活のすべての (ほとんどの) 自動車は本質的に同じものです。自動車にはエンジンがあり、それを start() したり、車を go() や stop() にしたりできます。通常、自動車には最大乗車人数がありますが、どちらも自動車であるバスとスポーツカーでは異なります。
継承の場合のように、単純な ole の単一リンク リストの直感的な実例はありますか? 典型的な教科書の Linked List の例は、整数と次へのポインタを持つノードを示していますが、あまり役に立ちません。
ご意見をお待ちしております。
java - 配列リスト内のすべての要素を表示するにはどうすればよいですか?
make
属性と、を持つ車のクラスがありregistration
、それらを格納するためにArrayListを作成するとします。ArrayListのすべての要素を表示するにはどうすればよいですか?
私は今このコードを持っています:
正常にコンパイルされますが、次のコードを使用してテスタークラスで試してみると次のようになります。
互換性のないタイプのエラーが発生します。私のコーディングは正しいですか?できない場合は、誰かがそれがどうあるべきかを教えてください。
ありがとうございました
ruby - Ruby: @cars.each do |car| の違い @cars do の車の場合
(初心者の質問で申し訳ありません。) Ruby では、ループの違いは何ですか:
と
?
効率に違いはありますか、または同じことを表現するのに 2 つ (またはそれ以上) の方法が必要なのはなぜですか? 2 番目の方法は、私にはよりエレガントで自然に思えますが、最初の方法がより良い選択である理由について、いくつかの重要な観察を見落としている可能性があります。
c - あるオブジェクトが別のオブジェクトを変更する必要がある場合の OOP のベスト プラクティス
(これは C に似た環境です) car と bodyShop の 2 つのインスタンス オブジェクトがあるとします。車には、カラー iVar と対応するアクセサーがあります。bodyShop には、車のオブジェクトを取り込んでその色を変更する「paintCar」という名前のメソッドがあります。
実装に関しては、実際に bodyShop で車のオブジェクトの色を変更できるようにするには、2 つの方法があります。
「&」演算子を使用して、車へのポインターを渡します。次に、bodyShop は、色を変更する必要がある何らかのメソッドを実行するように車に指示するか、車のアクセサーを直接使用することができます。
car オブジェクトを値で渡し、同じようなことを行って色を変更し、メソッドが新しい色の car オブジェクトを返すようにします。次に、元の車のオブジェクトを新しい車のオブジェクトに割り当てます。
オプション 1 の方が簡単に思えますが、OOP のベスト プラクティスに沿っているかどうか疑問に思っています。一般的に「最大OOP」の場合、「&」演算子は良いですか、それとも悪いですか? または、このスーパー OOPer を作成するためのより良いオプションを完全に見逃しているのかもしれません。お知らせ下さい :)
oop - 車のオブジェクト (およびエンジンなどのパーツ) を has-a (構成) でモデル化するか、is-a (継承) でモデル化するか?
オブジェクト Car を含むクラス ライブラリを開発しています。
ジレンマは、車自体が登録番号などのフィールドを持つクラスになり、車に関するその他の一般的な情報になることです。
しかし、車にはエンジンやシャーシなどがあります。これらのオブジェクトもモデル化する必要があります。それらは車に埋め込まれたクラスであるべきですか? そうでない場合、埋め込みクラスの使用シナリオは何ですか?
コンポジションは「の一部」であることを学んだので、別のクラスをモデル化し、たとえば車のフィールド レベルでエンジン タイプを使用してこれを実現できます。ただし、ctor で渡されるタイプとの「has a」関係である「aggregation」も適用されます (車にはエンジン「has an」)。
どちらに行けばいいですか?
編集:私は現在宿題をしているので、私からの返信がありません。クラス ライブラリは、自動車に基づく Web アプリ用です。私はプロの開発者です (私は生計を立てるために .NET で開発していますが、ジュニアとして)、これは宿題の質問ではありません。
ありがとう
algorithm - 100 個の車の画像の 10 x 10 グリッドを価格と速度で 2 次元で並べ替えるにはどうすればよいですか?
これがシナリオです。
私は100台の車のオブジェクトを持っています。各車には速度のプロパティと価格のプロパティがあります。最速で最も高価な車が右上に、最も遅くて安い車が左下に、他のすべての車がグリッド内の適切な場所に配置されるように、車の画像をグリッドに配置したいと考えています。
これにはどのような並べ替えアルゴリズムを使用する必要がありますか?ヒントはありますか?
編集: 結果は正確である必要はありません。実際には、はるかに大きなグリッドを扱っているため、車が適切な場所に大まかにクラスター化されていれば十分です。
oop - それぞれ car.speed() と car.speed(55) ではなく、get-set に固執するのはなぜですか?
明確な明快さは別として、なぜ固執する必要があるのか:
car.getSpeed()
そしてcar.setSpeed(55)
、これがいつ使用できるのか:
car.speed()
そしてcar.speed(55)
get() と set() は、すべてを 1 か所にまとめることで、データ メンバーへの変更を管理しやすくするのに役立つことを知っています。
また、明らかに、私はcar.speed()
とcar.speed(55)
が同じ関数であることを理解していますが、これはこれを間違っていますが、PHP と Zend Framework でも同じアクションが GET、POST、ポストバックに使用されます。
VB と C# には「プロパティ」があり、私が聞いた純粋主義者の嫌悪感に満ちた多くの人によって使用されています。Ruby には and などがあり5.times
ます。また.each
、
演算子のオーバーロード、多重継承、仮想関数があります。 C++ の特定の組み合わせは、誰をも狂わせる可能性があります。.to_i
私が言っているのは、非常に多くのパラダイムと方法があり、私が言及した特定の組み合わせを誰も試していないのは奇妙に思えるということです.
私の理由は、コードを読むのが短くてきれいだからです。
私は非常に間違っているのでしょうか、少し間違っていますか?
それでも正しいままでいることにした場合は、car.speed()
andを使用できますcar.setSpeed(55)
。
それは何らかの形で間違っていますか(「get」を省略しただけです)?
説明をありがとう。
oop - OOP 設計の問題
この単純なケースでの優れた設計とは:
FillTank(Fuel fuel)
燃料も基本クラスであり、いくつかのリーフクラス、ディーゼル、エタノールなどを持つメソッドを持つ基本クラス Car があるとします。
私のリーフカークラスDieselCar.FillTank(Fuel fuel)
では、特定の種類の燃料のみが許可されています (驚くことではありません:))。私のインターフェイスによれば、すべての車に任意の燃料を入れることができますが、それは私には間違っているようFillTank()
です.
そのようなケースをより正確なものに再設計するにはどうすればよいですか? これらの「奇妙な結果」を得ることなく、入力に基本クラスを取る基本メソッドを設計する方法は?