OOP
On 2月 10, 2021 by adminでの'抽象化'の定義について混乱していますOOPでの「抽象化」の定義を理解しようとしています。
いくつかの主要な定義に出くわしました。それらはすべて有効ですか?それらの1つは間違っていますか?混乱しています(自分の言葉で定義を書き直しました)。
定義1:
抽象化とは、実世界からオブジェクトを取得し、それをプログラミング用語に変換するという概念です。たとえば、Human
クラスを作成してint health
、int age
、String name
などのプロパティ、およびeat()
などのメソッド。
定義2:
より一般的な定義。抽象化は、ソフトウェアシステムのどこでも発生する概念です。 「物事をより一般的/単純/抽象的にする」 が含まれます。いくつかの例:
-
継承階層。上位クラスはより単純またはより一般的であり、より一般的で抽象的な実装を定義します。Wh階層の下位クラスはより具体的で、より詳細な実装を定義します。
-
カプセル化を使用して、クラスの実装の詳細を他のクラスから隠し、クラスをより詳細にします。外部のソフトウェアの世界に「抽象化」(より単純)します。
定義3
別の一般的な定義:抽象化とは、物事の詳細と具体的な実装から物事の種類(つまり、クラス)、利用可能な操作(つまり、メソッド)など。したがって、プログラミングがより単純で、より一般的で、より抽象的なものになります。 (これは、ソフトウェアシステムのどこでも、どのような状況でも発生する可能性があります)。カプセル化とは、実装の詳細を非表示にし、物事の種類とそれらのより一般的で抽象的な定義のみを表示することを意味するため、たとえばカプセル化するときに行われます。 Anotehrの例では、JavaでList
オブジェクトを使用します。このオブジェクトは、実際にはArrayList
またはLinkedList
の実装の詳細を使用しますが、この情報は、より一般的な名前List
。
これらの定義のいずれかが正しいですか? (私は最も一般的で受け入れられているの定義を参照しています。
コメント
- 抽象化とは、"もの"を特定の種類のもの(動物= > Dog)をさらに絞り込むために(Dog = > Poodle)。
回答
抽象化は、オブジェクト指向プログラミング(OOP)の3つの柱の1つです。それは文字通り、特定の視点からシステムまたはコンテキスト内のエンティティを認識することを意味します。私たちは不必要な詳細を取り除き、検討中のそのコンテキストまたはシステムに必要な側面のみに焦点を当てます。
ここにいくつかの良い説明があります:
人としてのあなたは、異なる関係で異なる関係を持っています役割。学校にいるときは、「学生」です。あなたが仕事をしているとき、あなたは「従業員」です。政府機関にいるときは、「市民」と見なすことができます。つまり、エンティティ/オブジェクトをどのようなコンテキストで見ているのかということです。したがって、 給与計算システム をモデル化している場合は、あなたを
従業員(PRN、フルタイム/パートタイム、指定) 。 コース登録システム をモデル化している場合、私はあなたの側面と特徴を Student(Roll Number、Age、Gender、Course Enrolled) 。また、 社会保障情報システム をモデル化している場合は、詳細を次のように確認します。 市民(DOB、性別、出生地など)
抽象化(必要な詳細に焦点を当てる)はカプセル化(外界から詳細を隠す)とは異なることに注意してください。カプセル化とは、オブジェクトの詳細を非表示にし、外界のエンティティがそのオブジェクトまたはエンティティと対話するための適切なインターフェイスを提供することを意味します。たとえば、誰かが私の名前を知りたい場合、彼は私の脳細胞に直接アクセスして私の名前を知ることはできません。代わりに、その人は私の名前を尋ねます。ドライバーが車両の速度を上げたい場合は、その目的のためのインターフェース(アクセルペダル、ギアなど)があります。
1番目の定義はあまり明確ではありません。 Def 2は優れていますが、抽象化とカプセル化および継承をリンクしようとするため、初心者を混乱させる傾向があります。 Def 3は、抽象化とは何かを正確に定義しているため、3つの定義の中で最も優れたものです。
コメント
- つまり、'は、仕様ではなく一般化のようなものだと思いますか?
- @samyismyheroその通りです!抽象化のためにオブジェクトの一般的な属性と動作を探します。
- [Animal = > Dog]は抽象化です。 "動物"が"犬を作成するために必要なパーツを定義します。 "(尻尾、脚、毛皮など)。次に、" Dog "クラスを使用して、プードル、ピットブルなどを定義できます。つまり、'犬の品種をivid =” 49bebd88b6 “ではなく"犬"クラスに基づいて宣言します>
動物。"
回答
定義1は間違いなく抽象化ではありません。これは、モデリングをより厳密に説明しています。
定義2と3は同じことを説明しています。そして、どちらも抽象化のかなり良い説明です。
コメント
- それは'私が思ったことです!!
abstract class Shape
lol!
回答
これらの定義はそれぞれ次のとおりです。
抽象化とは、目的にとって重要な詳細のみに焦点を当てる場所です。
最初のケースでは、(現在)コードに実際の人を含めることはできません。あなたはあなたの目的を果たす人の特定の詳細に焦点を合わせます。別のプログラムでは、さまざまな詳細に焦点を当てる必要があるかもしれません。これらは人のさまざまな抽象化であり、それぞれがコンテキスト内で等しく有効である可能性があります。
2番目と3番目の定義はこのアイデアを継続し、ソフトウェアエンティティに適用します。
コメントを残す