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

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 


22
抽象化VS情報隠蔽VSカプセル化
ソフトウェア開発における抽象化と情報隠蔽の違いは何ですか? 私は混乱しています。抽象化は詳細な実装を隠し、情報を隠すことは何かの詳細全体を抽象化します。 更新:これらの3つの概念に対する良い答えを見つけました。そこから引用されたいくつかの引用については、以下の個別の回答を参照してください。

16
インターフェイスとクラスの違いは何ですか?また、クラスにメソッドを直接実装できるときにインターフェイスを使用する必要があるのはなぜですか?
これは非常に基本的な質問であることは承知していますが、面接官が非常に巧妙な方法で私に尋ねたので、私は無力でした:( 私はインターフェースの重要なまたは理論的な定義のみを知っており、私が取り組んだ多くのプロジェクトにそれを実装しました。しかし、これがなぜ、どのように役立つのか、本当にわかりません。 インターフェースについても理解できません。つまり、たとえば、 conn.Dispose();ついにブロック。しかし、そのクラスがIDisposableインターフェイス(SqlConnection)クラスを実装または継承していることはわかりません。どうすればメソッド名を呼び出すことができるのでしょうか。また、同じことですが、Disposeメソッドがどのように機能するのか理解していません。すべてのインターフェイスメソッドに対して、独自の実装で関数本体を実装する必要があるためです。それでは、インターフェースはどのように受け入れられ、契約として命名されますか?これらの質問は今まで心の中にあり続けていましたが、率直に言って、自分の質問を理解できる形で説明する良いスレッドは見たことがありません。 MSDNはいつものように非常に恐ろしく見え、1行も明確ではありません(ハイレベルの開発に携わっている皆さん、親切に言い訳をしてください。コードや記事は、それを見る人の心に届くはずなので、他の多くの人が言うように、MSDN使用されません)。 インタビュアーは言った: 彼には5つのメソッドがあり、クラスに直接実装して喜んでいますが、抽象クラスまたは抽象インターフェースを使用する必要がある場合、どちらを選択するのか、そしてその理由は何ですか。抽象クラスとインターフェースの両方の長所と短所についてさまざまなブログで読んだすべてのものに彼は答えましたが、彼は確信していません、彼は一般的に「なぜインターフェース」を理解しようとしています。「なぜ抽象クラス」は、同じメソッドを1回だけ実装でき、それを変更しない場合でも、一般に。 ネットのどこにも、インターフェースとその機能について明確に説明してくれる記事はありませんでした。私はそれらの多くのプログラマーの1人ですが、まだインターフェースについては知りませんが(私は使用した理論と方法を知っています)、明確に理解していることに満足していません。
117 c#  class  oop  interface  abstraction 

6
「abstract over」とはどういう意味ですか?
Scalaの文献では、「抽象化」というフレーズに出くわすことがよくありますが、意図がわかりません。 たとえば、Martin Oderskyは次のように書いています メソッド(または「関数」)をパラメーターとして渡すことも、それらを抽象化することもできます。タイプをパラメーターとして指定することも、それらを抽象化することもできます。 別の例として、「Deprecating the Observer Pattern」ペーパーでは、 イベントストリームが一流の値であることの結果は、それらを抽象化できることです。 モナドは「型コンストラクターを抽象化」しているのに対して、私は最初のジェネリックが「型を抽象化する」ことを読みました。また、Cake Patternペーパーにもこのようなフレーズが表示されます。多くのそのような例の1つを引用するには: 抽象型メンバーは、具象型のコンポーネントを抽象化する柔軟な方法を提供します。 関連するスタックオーバーフローの質問でさえ、この用語を使用します。 「パラメータ化された型を存在的に抽象化することはできません...」 では、「抽象化」とは実際にはどういう意味ですか?

4
コンパイルとトランスパイル
違いを探しているときに、私はこれらの定義に出くわしました: コンパイルとは、ある言語で書かれたソースコードを別の言語に変換するための一般的な用語です。 トランスパイルとは、ある言語で記述されたソースコードを取得し、同様の抽象化レベルを持つ別の言語に変換するための特定の用語です。 抽象化とは何かを理解しています。 しかし、上記の定義で「同様のレベルの抽象化」とはどういう意味ですか?そして、どのようにして言語の抽象化レベルを見つけるのでしょうか?


15
カプセル化と抽象化の違い
今日は面接をしました。カプセル化と抽象化の違いについて、OOPから質問がありましたか? カプセル化は基本的にデータメンバーとメンバー関数をクラスと呼ばれる単一のユニットにバインドすることであるという私の知識に彼女に返信しました。一方、抽象化は基本的に実装の複雑さを隠し、ユーザーに簡単にアクセスできるようにすることです。彼女は私の答えで大丈夫だろうと思った。しかし、彼女は、両方の目的が情報を隠すことである場合、これら2つの実際の違いは何であるかを尋ねました。私は彼女に答えることができなかった。 この質問をする前に、これら2つのOOPの概念の違いについてStackOverFlowの他のスレッドを読みました。しかし、私は面接官を説得する立場に自分自身を見つけていません。 誰かが最も簡単な例でそれを正当化できますか?

5
IList <T>を返すことは、T []またはList <T>を返すことよりも悪いですか?
次のような質問への回答:List &lt;T&gt;またはIList &lt;T&gt;は、コレクションの具体的な実装を返すよりも、インターフェイスを返す方が優れていることに常に同意しているようです。しかし、私はこれに苦労しています。インターフェイスをインスタンス化することは不可能であるため、メソッドがインターフェイスを返している場合でも、実際には特定の実装を返しています。私は2つの小さなメソッドを書くことによってこれを少し実験していました: public static IList&lt;int&gt; ExposeArrayIList() { return new[] { 1, 2, 3 }; } public static IList&lt;int&gt; ExposeListIList() { return new List&lt;int&gt; { 1, 2, 3 }; } そして、私のテストプログラムでそれらを使用してください: static void Main(string[] args) { IList&lt;int&gt; arrayIList = ExposeArrayIList(); IList&lt;int&gt; listIList = ExposeListIList(); //Will give a runtime error arrayIList.Add(10); …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.