タグ付けされた質問 「polymorphism」

6
Haskell型システムをこれほどまでに尊敬する理由は何ですか(たとえば、Java)。
私はHaskellを学び始めています。私は非常に新しいので、基本的な構成を理解するために、オンラインブックを数冊読んでいます。 よく知っている「ミーム」の1つは、「コンパイルすれば機能します*」というもの全体です。これは型システムの強さに関係していると思います。 この点で、Haskellが他の静的に型付けされた言語より正確に優れている理由を理解しようとしています。 別の言い方をすれば、Javaでは、ArrayList<String>()実際にあるべきものを含めるために、埋めるような凶悪なことを行うことができると思い ますArrayList<Animal>()。ここでは凶悪な事はあなたがいることであるstring含まれているelephant, giraffeなどと、誰かが中に入れた場合Mercedes-あなたのコンパイラは、あなたを助けにはなりません。 私は場合はやったんArrayList<Animal>()私は私のプログラムは、それが車についてです、動物については本当にないことにした場合、時間内にいくつかの後の時点で、その後、私は、たとえば、生産機能に変更することができますArrayList<Animal>生成することをArrayList<Vehicle>、私のIDEがどこでも私に教えてくださいコンパイルの中断です。 私の推測では、これは人々が強力な型システムによって意味するものですが、Haskellの方が優れている理由は私には明らかではありません。別の言い方をすれば、良いJavaまたは悪いJavaを書くことができます。Haskellでも同じことができると思います(つまり、実際にファーストクラスのデータ型であるはずの文字列/ intに詰め込みます)。 重要/基本的なものが不足していると思われます。 私のやり方の間違いを見せていただければ幸いです!

17
オブジェクト指向プログラミングは、雇用会社が配置するのと同じくらい重要ですか?[閉まっている]
私はちょうど(コンピューティングの)修士号を取得し、仕事に応募しています。多くの企業がオブジェクト指向の理解を特に求めていることに気付きました。人気のあるインタビューの質問は、継承、ポリモーフィズム、アクセサーなどに関するものです。 オブジェクト指向は本当に重要ですか?私はCでのプログラミングの仕事の面接さえ受けましたが、面接の半分はオブジェクト指向でした。 現実の世界では、実際のアプリケーションの開発において、ほとんど常にオブジェクト指向が使用されていますか?ポリモーフィズムのような主要な機能はLOTを使用していますか? 私の質問は私の弱点の一つから来ていると思います。私はオブジェクト指向について知っていますが、私はそれを私のプログラムに大いに組み込むことができないようです。

12
メソッドは構文糖衣以上のものをオーバーロードしていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 メソッドは多型の型をオーバーロードしていますか?私には、同じ名前と異なるパラメーターを持つメソッドを単に区別しているように思えます。だから、stuff(Thing t)およびstuff(Thing t, int n)これまでのコンパイラとランタイムが懸念している限り全く異なる方法です。 呼び出し側では、異なる種類のオブジェクトで異なる動作をする同じメソッドであるという幻想を作成します-多態性。しかし、それは幻想に過ぎません。実際stuff(Thing t)とstuff(Thing t, int n)まったく異なる方法だからです。 メソッドは構文糖衣以上のものをオーバーロードしていますか?何か不足していますか? 構文糖の一般的な定義は、純粋にローカルであるということです。コードの一部をその「甘くされた」同等物に変更する、またはその逆の意味は、プログラムの全体的な構造に影響を与えないローカルな変更を伴います。そして、メソッドのオーバーロードはこの基準に正確に適合すると思います。例を見てみましょう: クラスを考えてみましょう: class Reader { public String read(Book b){ // .. translate the book to text } public String read(File b){ // .. translate the file to text } } 次に、このクラスを使用する別のクラスを考えます。 /* might not be the …

6
ポリモーフィッククラスのGUIはどのように作成しますか?
テストビルダーがあり、教師がテスト用の一連の質問を作成できるようにしたとします。 ただし、すべての質問が同じというわけではありません。複数の選択肢、テキストボックス、一致などがあります。これらの質問タイプはそれぞれ、異なるタイプのデータを保存する必要があり、作成者と受験者の両方に異なるGUIが必要です。 私は2つのことを避けたいです: 型チェックまたは型キャスト データコード内のGUIに関連するもの。 私の最初の試みでは、次のクラスになりました。 class Test{ List<Question> questions; } interface Question { } class MultipleChoice implements Question {} class TextBox implements Question {} ただし、テストを表示すると、必然的に次のようなコードになります。 for (Question question: questions){ if (question instanceof MultipleChoice){ display.add(new MultipleChoiceViewer()); } //etc } これは本当に一般的な問題のように感じます。上記の項目を避けながら、多態的な質問をすることができるデザインパターンはありますか?それとも、多型はそもそも間違った考えですか?

9
ポリモーフィズムは実際の世界でどのように使用されていますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 昨年は閉店しました。 私は実際のプロジェクトで多態性がどのように使用されているかを理解しようとしていますAnimalが、method を持つ親クラスと、speak()このメソッドをオーバーライドする多くの子クラスを持つ古典的な例(またはそれに似たもの)しか見つけることができません次のように、speak()任意の子オブジェクトでメソッドを呼び出すことができます。 Animal animal; animal = dog; animal.speak(); animal = cat; animal.speak();


6
アヒルは多型のサブセットを入力しています
WIkipediaの多態性から コンピュータサイエンスでは、ポリモーフィズムはプログラミング言語の機能であり、さまざまなデータ型の値を統一されたインターフェイスを使用して処理できます。 ウィキペディアのカモタイピングから オブジェクト指向プログラミング言語を使用したコンピュータープログラミングでは、ダックタイピングは、特定のクラスまたは特定のインターフェイスの実装からの継承ではなく、オブジェクトの現在のメソッドとプロパティのセットが有効なセマンティクスを決定する動的なタイピングのスタイルです。 私の解釈では、アヒルのタイピングに基づいて、オブジェクトのメソッド/プロパティが有効なセマンティクスを決定します。オブジェクトの現在の形状が、保持するインターフェースを決定することを意味します。 ポリモーフィズムから、インターフェイスを維持している限り、複数の異なるデータ型を受け入れる場合、関数はポリモーフィックであると言えます。 したがって、関数が型をダッキングできる場合、複数の異なるデータ型を受け入れ、それらのデータ型に正しいメソッド/プロパティがあり、インターフェースを維持している限り、それらを操作できます。 (インターフェースという用語の使用は、コード構成ではなく、記述的で文書化された構成としての意味です) ダックタイピングとポリモーフィズムの正しい関係は何ですか? 言語がタイプをダッキングできる場合、それは多態性を実行できることを意味しますか?

3
アップキャスト/ダウンキャストとは何ですか?
ポリモーフィズムについて学ぶとき、あなたは一般的にこのようなものを見ます class Base { int prv_member; virtual void fn(){} } class Derived : Base { int more_data; virtual void fn(){} } アップキャストまたはダウンキャストとは何ですか?ある(Derived*)base_ptr;アップキャストまたはダウンキャストは? あなたは基地から離れてより具体的な何かに行くので、私はそれをアップキャストと呼びます。他の人々は、あなたが階層を下って、トップがルートである特定のものに行くので、それはダウンキャストであると私に言った。しかし、他の人々は私がそれを呼ぶものと呼ぶようです。 ベースptrを派生ptrに変換するとき、アップキャストまたはダウンキャストと呼ばれますか?そして、誰かが公式の情報源にリンクできるか、それがなぜそれを素晴らしいと呼んだのかを説明できるなら。

4
多型のコンテキストでサブタイプに追加されたメソッドを処理する方法は?
ポリモーフィズムの概念を使用してクラス階層を作成し、親の参照を使用すると、オブジェクトを持っている特定の型を知らなくてもインターフェイス関数を呼び出します。これは素晴らしい。例: 動物のコレクションがあり、すべての動物の機能を呼び出しeatます。犬を食べるのか、猫を食べるのかは気にしません。継承と実装クラス以外から-しかし、同じクラス階層には、追加を持っている動物持ってAnimal、例えばmakeEggs、getBackFromTheFreezedStateようにしています。そのため、関数の一部のケースでは、追加の動作を呼び出す特定のタイプを知りたい場合があります。 たとえば、朝の時間で、動物だけの場合はを呼び出しますeat。それ以外の場合は、人間の場合は最初washHandsに呼び出し、次に呼び出しgetDressedますeat。この場合の対処方法は?多型が死ぬ。コードの匂いのように聞こえるオブジェクトのタイプを調べる必要があります。このケースを処理する一般的なアプローチはありますか?

4
手作業による依存性注入は、合成および多型のより良い代替手段ですか?
まず、私は初心者レベルのプログラマーです。実際、私は夏の最後の絶頂プロジェクトでASの学位を取得しています。私の新しい仕事では、私がやるべきプロジェクトがないとき(彼らはチームにさらに新しい採用をするのを待っています)、私は待っている間に読んで学ぶための本を与えられました-いくつかの教科書、他のそれほど多くはありません(コード完了など)。これらの本を読んだ後、できる限り多くのことを学ぶためにインターネットに目を向け、SOLIDとDIについて学び始めました(Liskovの代替原理についてはいくらか話しましたが、SOLIDのアイデアについてはあまり話しませんでした)。それで、私が学んだように、私はよりよく学ぶために座って、DIを手動で利用するためのコードを書き始めました(開発コンピューターにはDIフレームワークはありません)。 私がやっているように、それは馴染みのあることに気づきます...そして、ポリモーフィズムを使った抽象クラスの構成を使って過去にやった仕事に非常に似ているようです。ここに大きな画像がありませんか?DIについて(少なくとも手で)それを超える何かがありますか?再コンパイルすることなく物事を変更する限り、いくつかの大きな利点を持つDIフレームワークのコードに設定がない可能性を理解していますが、手動で行う場合、上記と異なるかどうかはわかりません...これに関するいくつかの洞察は非常に役立つでしょう!

2
スーパータイプが期待されるサブクラスオブジェクトを引数として渡すことによるメソッドのオーバーライド
私はJavaを学んでいるだけで、実践的なプログラマーではありません。 私がフォローしている本は、メソッドをオーバーライドするとき、引数の型は同じでなければならないが、戻り値の型は多相的に互換性があると言っています。 私の質問は、オーバーライドメソッドに渡される引数が期待されるスーパータイプのサブクラスタイプになれないのはなぜですか? オーバーロードメソッドでは、オブジェクトで呼び出すメソッドはすべて、オブジェクトで定義されることが保証されています。 推奨される重複に関するメモ: 最初の提案は、クラス階層、どこの機能を置くことを約あるように思われます。私の質問は、言語制限が存在する理由に焦点を当てています。 第二の提案は、私が尋ねるが、いないよ何をする方法を説明し、なぜそれがそのように行う必要があります。私の質問はその理由に焦点を合わせています。

4
モデルとビューを扱うときの切り替えとポリモーフィズム
私の問題に対するより良い解決策を見つけることができません。要素のリストを表示するView Controllerがあります。これらの要素は、B、C、Dなどのインスタンスになり、Aから継承できるモデルです。したがって、そのView Controllerでは、各項目はアプリケーションの異なる画面に移動し、ユーザーがそれらのいずれかを選択するとデータを渡す必要があります。私の頭に浮かぶ2つの選択肢は次のとおりです(構文を無視してください、それは特定の言語ではありません) 1)スイッチ(私はそれが悪いことを知っています) //inside the view controller void onClickItem(int index) { A a = items.get(index); switch(a.type) { case b: B b = (B)a; go to screen X; x.v1 = b.v1; // fill X with b data x.v2 = b.v2; case c: go to screen Y; etc... } } 2)多型 …

6
オブジェクト指向デザイン、トーナルハーモニーのモデリング方法
コード、音階、ハーモニーを分析するプログラムをC ++ 11で書き始めました。私が設計段階で抱えている最大の問題は、音「C」が音、コードのタイプ(Cmaj、Cmin、C7など)、およびキーのタイプ(Cmajor、Cminorのキー)であることです。間隔(マイナー3、メジャー3)でも同じ問題が発生します。 私は、プログラム内のすべての「シンボル」の基本クラスである基本クラスであるトークンを使用しています。例えば: class Token { public: typedef shared_ptr<Token> pointer_type; Token() {} virtual ~Token() {} }; class Command : public Token { public: Command() {} pointer_type execute(); } class Note : public Token; class Triad : public Token; class MajorTriad : public Triad; // CMajorTriad, etc class Key : …

3
プロパティとメソッドを常にチェックせずに、JavaScriptでダックタイピングを使用するにはどうすればよいですか?
私はjavascriptがダックタイピングを使用することを知っていて、最初はC#のような強く型付けされた言語と比較して多型が簡単になると思った。しかし、現在、引数を取る私の関数には次のようなものが散らばっています。 if(myObj.hasSomeProperty()) または if(myObj.hasSomeMethod()) または if(isNumber(myParam)) 等 これは本当にugいです。私はC#のバックグラウンドを持っていますが、定義済みのインターフェイスの方がはるかに優れていることがわかりました。 私は静的に型付けされた言語で効果的な戦略を誤って適用しようとしていて、javascriptでこれを行うためのいくつかのより良い方法がありますか? 私はただチェックできないことを知っていますが、javascriptランタイムエラーを追跡することは、コード内で実際にエラーが発生している場所で常に発生するとは限らないため、悪夢になります。

5
テスト可能なコードの作成と投機的一般性の回避
私は今朝いくつかのブログ投稿を読んでいて、これに出くわしました: Customerインターフェースを実装する唯一のクラスがCustomerImplである場合、実際には実行時に代用するものがないため、ポリモーフィズムと代替性はありません。それは偽の一般性です。 インターフェースを実装すると複雑さが増し、実装が1つしかない場合は、不必要な複雑さが加わると主張するかもしれません。必要以上に抽象的なコードを記述することは、「投機的一般性」と呼ばれるコードの匂いと見なされることがよくあります(投稿でも言及されています)。 しかし、TDDを使用している場合、インターフェイス実装または他のポリモーフィックオプションの形式であるかどうかにかかわらず、クラスを継承可能にし、そのメソッドを仮想にすることで、その投機的な一般性なしにテストダブルを作成することはできません。 それでは、このトレードオフをどのように調整するのでしょうか?テスト/ TDDを促進するために投機的に一般的であることは価値がありますか?テストdoubleを使用している場合、これらは2番目の実装としてカウントされ、一般性が推測されなくなりますか?具体的な協力者のモックを可能にする、よりヘビーなモックフレームワークを検討する必要があります(たとえば、C#の世界でのMolesとMoq)。または、具体的なクラスでテストし、デザインが自然にポリモーフィズムを必要とするときまで、「統合」テストと考えられるものを記述する必要がありますか? 私はこの問題に関する他の人々の見解を読んでみたいです-あなたの意見を事前に感謝します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.