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

オブジェクト指向プログラミングは、「オブジェクト」を使用したプログラミングパラダイムです。つまり、データフィールドとメソッド、およびそれらの相互作用で構成されるデータ構造です。










30
ゲッターとセッター/アクセサーを使用する理由
単にそれらの変数にパブリックフィールドを使用する代わりに、取得と設定のみを行うゲッターとセッターを使用する利点は何ですか? getterとsetterが単純なget / setだけではない場合、これをすぐに理解できますが、その方法は100%明確ではありません。 public String foo; より悪い: private String foo; public void setFoo(String foo) { this.foo = foo; } public String getFoo() { return foo; } 一方、前者は必要なコードが大幅に少なくなります。
1543 java  oop  setter  getter  abstraction 

30
インターフェイスと抽象クラス(一般的なOO)
最近、電話インタビューを2回行ったところ、インターフェースと抽象クラスの違いについて尋ねられました。私は考えられるすべての側面について説明しましたが、彼らは私が特定のことを述べるのを待っているようで、それが何であるかわかりません。 私の経験から、次のことが正しいと思います。重要な点が足りない場合はお知らせください。 インターフェース: インターフェースで宣言されたすべてのメソッドは、サブクラスで実装する必要があります。インターフェイスに存在できるのは、イベント、デリゲート、プロパティ(C#)、およびメソッドのみです。クラスは複数のインターフェースを実装できます。 抽象クラス: サブクラスでは、抽象メソッドのみを実装する必要があります。Abstractクラスは、実装を伴う通常のメソッドを持つことができます。抽象クラスは、イベント、デリゲート、プロパティ、メソッドの横にクラス変数を持つこともできます。C#にはマルチ継承が存在しないため、クラスは1つの抽象クラスしか実装できません。 結局のところ、インタビュアーは「抽象メソッドのみを持つ抽象クラスがあるとしたらどうでしょうか?それはインターフェースとどう違うのですか?」私は答えを知りませんでしたが、それは上記のように継承だと思いますか? 別のインタビュアーから、インターフェイス内にパブリック変数がある場合、抽象クラスとどう違うのかと尋ねられました。インターフェイス内にパブリック変数を含めることはできないと私は主張しました。私は彼が何を聞きたいのか知りませんでしたが、彼も満足していませんでした。 以下も参照してください。 抽象クラスの代わりにインターフェースを使用する場合、およびその逆の場合 インターフェースと抽象クラス 抽象クラスとインターフェースのどちらを使用するかをどのように決定しますか? インターフェイスと抽象クラスの違いは何ですか?

27
List <T>を継承しないのはなぜですか?
私のプログラムを計画するとき、私はしばしば次のような一連の思考から始めます。 サッカーチームは、サッカー選手のリストにすぎません。したがって、私はそれを次のように表現する必要があります: var football_team = new List&lt;FootballPlayer&gt;(); このリストの順序は、プレーヤーが名簿にリストされている順序を表しています。 しかし、後でチームが記録する必要があるのは、単なるプレーヤーのリストに加えて、他のプロパティもあることに気づきました。たとえば、今シーズンのスコアの累計、現在の予算、均一な色、stringチームの名前を表すなど。 だから私は思う: さて、サッカーチームは選手のリストのようなものですが、それに加えて、名前(a string)と現在の合計スコア(an int)があります。.NETはサッカーチームを格納するためのクラスを提供していないため、自分でクラスを作成します。最も類似し、関連する既存の構造はList&lt;FootballPlayer&gt;なので、それを継承します。 class FootballTeam : List&lt;FootballPlayer&gt; { public string TeamName; public int RunningTotal } しかし、ガイドラインでは、から継承してはならないList&lt;T&gt;ことがわかっています。このガイドラインは2つの点で完全に混乱しています。 何故なの? どうやらList、何らかの形でパフォーマンスが最適化されています。どうして?拡張すると、どのようなパフォーマンスの問題が発生しListますか?正確には何が壊れますか? 私が見たもう1つの理由Listは、Microsoftから提供されたものであり、私はそれを制御できないため、「パブリックAPI」を公開した後で後で変更することはできません。しかし、私はこれを理解するのに苦労しています。パブリックAPIとは何ですか。なぜ気にする必要があるのですか。現在のプロジェクトにこのパブリックAPIが含まれていない可能性がある場合、このガイドラインを無視しても安全ですか?私は、継承を行う場合List と、、それは私が公共のAPIを必要と判明し、どのような困難私が持っているのだろうか? なぜそれが重要なのですか?リストはリストです。何が変わる可能性がありますか?何を変更したいですか? そして最後に、Microsoftがからの継承を望まないのであればList、なぜ彼らはクラスを作らなかったのでしょうか。sealedですか? 他に何を使うべきですか? どうやら、カスタムコレクションの場合、Microsoft Collectionはの代わりに拡張する必要のあるクラスを提供していListます。しかし、このクラスは非常に裸であり、たとえばなどAddRange、多くの有用なものはありません。jvitor83の答えは、その特定のメソッドのパフォーマンスの根拠を提供しますが、遅いのAddRangeは遅いよりも良いですAddRangeどうしてですか からのCollection継承はList、からの継承よりもはるかに多くの作業であり、私には利点がないと思います。確かにMicrosoftは理由もなく余分な作業をするように言わないので、何かを誤解しているように感じずにはいられず、継承Collectionは私の問題の正しい解決策ではありません。 実装などの提案を見てきました IList。いいえ。これは何十行ものボイラープレートコードで、何も得られません。 最後に、List何かを何かにラップすることを提案する人もいます: class FootballTeam { public List&lt;FootballPlayer&gt; Players; } これには2つの問題があります。 それは私のコードを不必要に冗長にします。my_team.Players.Countただ電話をする代わりに今すぐ電話しなければなりませんmy_team.Count。ありがたいことに、C#を使用すると、インデックス作成を透過的にするようにインデクサーを定義し、内部のすべてのメソッドを転送できますList...しかし、これは大量のコードです。すべての作業で何が得られますか? それだけでは意味がありません。サッカーチームは、選手のリストを「持っていません」。これは、ある選手のリスト。「John McFootballerがSomeTeamのプレーヤーに参加した」とは言わないでください。あなたは「ジョンがSomeTeamに参加した」と言います。「文字列の文字」に文字を追加するのではなく、文字列に文字を追加します。図書館の本に本を追加するのではなく、本を図書館に追加します。 …
1400 c#  .net  list  oop  inheritance 


7
type()とisinstance()の違いは何ですか?
これら2つのコードフラグメントの違いは何ですか? 使用type(): import types if type(a) is types.DictType: do_something() if type(b) in types.StringTypes: do_something_else() 使用isinstance(): if isinstance(a, dict): do_something() if isinstance(b, str) or isinstance(b, unicode): do_something_else()
1248 python  oop  inheritance  types 


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