私は面接の準備をしており、OOP の概念をブラッシュ アップすることにしました。利用可能な記事は何百もありますが、それぞれが異なる方法で説明しているようです。 ある人は言います
抽象化とは、「体系的なバリエーションを持つ一般的なパターンを特定するプロセスです。抽象化は、一般的なパターンを表し、使用するバリエーションを指定する手段を提供します」(Richard Gabriel)。
抽象クラスによって実現されます。
他の誰かが言う
抽象化とは、オブジェクトのクライアントに必要な詳細のみを表示することを意味します
と
Employee クラスに "CalculateSalary" メソッドがあるとします。このメソッドは EmployeeId をパラメーターとして取り、当月の従業員の給与を整数値として返します。誰かがその方法を使用したい場合。彼は従業員オブジェクトが給与を計算する方法を気にする必要はありませんか? 彼が気にする必要があるのは、メソッドの名前、その入力パラメーター、および結果のメンバーの形式だけです。
私は何度も何度もグーグルで検索しましたが、適切な答えが得られる結果はありませんでした。 では、カプセル化はこれらすべてのどこに当てはまりますか? スタックオーバーフローの質問 を検索して見つけました。その質問への答えでさえ混乱 していた
カプセル化は、抽象化の一部として使用される戦略です。カプセル化とは、オブジェクトの状態を指します。オブジェクトはその状態をカプセル化し、外部から隠します。クラスの外部ユーザーは、そのメソッドを介してクラスと対話しますが、クラスの状態に直接アクセスすることはできません。そのため、クラスはその状態に関連する実装の詳細を抽象化します。
そして、ここで別の有名なメンバーは言います、
それらは異なる概念です。
抽象化とは、オブジェクトのすべての不要/重要でない属性を絞り込み、ドメインに最適な特性のみを保持するプロセスです。
今、私は全体の概念を台無しにしています。抽象クラス、継承、アクセス指定子などすべてについて知っています。インタビューで抽象化やカプセル化について尋ねられたとき、どう答えたらよいか知りたいだけです。
重複としてマークしないでください。私はいくつかの同様の質問があることを知っています。しかし、私は相反する説明の間の混乱を避けたいと思っています. 誰でも信頼できるリンクを提案できますか? 再び混乱が生じない限り、stackoverflow の質問へのリンクも歓迎します。:)
編集:私は答えが必要です。少しC#指向です