オブジェクト指向プログラミングを成功させた理由は何ですか? [閉まっている
https://softwareengineering.stackexchange.com/questions/16189
-
22-10-2019 - |
質問
オブジェクト指向プログラミングを非常に成功させたあなたによると、その機能は何ですか?
- メッセージの合格
- 継承
- 多型
- カプセル化
または、紹介したい他の機能。
また、抽象データ型とオブジェクト指向プログラミングの間の接続は何ですか?
解決
オブジェクト指向プログラミングの最も重要な特性はのものであることをお勧めします 複雑さの管理.
人間の脳は、一度に非常に多くの概念しか保持できません。
職場で600klocシステムに取り組んでいるとき、私は一度にすべてを頭の中に保持することはできません。私がそれをしなければならなかったなら、私は取り組むことに限定されます 多くの 小さいシステム。
幸いなことに、私はそうする必要はありません。そのプロジェクトで使用したさまざまなデザインパターンやその他の構造は、システム全体を一度に処理する必要がないことを意味します。個々のピースを拾って作業することができます。明確に定義された方法で。
重要なOO概念はすべて、複雑さを管理する方法を提供します。
カプセル化 - これらのサービスがどのように実装されるかを心配することなく、さまざまなサービスを提供する外部APIに対処しましょう。
抽象化 - 本質的な特性に集中して、関連していないものを無視させてください。
構成 - すでに新しい組み合わせで構築されているコンポーネントを再利用させてください
多型 - 異なるオブジェクトがさまざまな方法でそれを提供する方法を心配することなく、サービスを尋ねましょう。
継承 - インターフェイスまたは実装を再利用させて、以前に行ったものとは異なるピースのみを提供します。
単一の責任の原則 - 各オブジェクトの目的を明確かつ簡潔に保つことができるので、簡単に推論できます
リスコフ代替プリニックプリニック - 奇妙な依存関係を導入することによって、お互いのためにトラップを置かないようにしましょう
オープン/クローズド原理 - 既存のコードを破るリスクがあることを要求しない方法で拡張と変更を許可しましょう
依存関係インジェクション - 構成を次のレベルに引き上げ、後でコンポーネントを一緒に組み立てましょう。
インターフェイス指向開発 - 抽象化を次のレベルに引き上げて、抽象化にのみ依存します。具体的な実装にはありません。
他のヒント
グラフィカルユーザーインターフェイス。 80年代後半、90年代前半、Mac、Amigas、Atari STS、Windows、GEMがキャラクターベースのユーザーインターフェイスに取って代わり始めたとき、Cのような言語がGUIプログラムを作成するのに適していないことが明らかになりました。従来のデータ処理は「入力データ - >処理 - >出力データ」スキーマと見なされますが、これは手続き言語でも実行できますが、OOS機能はGUIの固有の複雑さを処理するのに便利です。
カプセル化によって提供されるデータの隠蔽。
他の回答のいずれもまだ言及されていない機能: ドメインモデリング. 。人々は、オブジェクトを使用したり、オブジェクトを行うことを考えたり、本質的なプロパティを持っているオブジェクトについて考える傾向があるため、オブジェクト指向ソフトウェアを使用して問題やワークフローをモデル化するのは非常に簡単です。基本的に、既存の能力を使用して、コード内の名詞、動詞、形容詞を処理することができます。
継承はOOPの最も重要なポイントだと思います。
ゲーム開発から]レンダリング方法と属性を備えた描画可能なクラスのようなものを作成し、描画可能から継承する宇宙船と惑星クラスを作成できます。 [および他のスプライトチャイルド]からすべてのオブジェクトを取り、描画可能なbjarrayを投げて、すべてのオブジェクトの描画方法を呼び出します。あなたはそれが描画可能であることを知る必要があります。
抽象化
不必要なものを隠す必要なサービスを提供します。ここで私の説明を参照してください -抽象化とは何ですか?
それは、人間の心の物事の組織のオブジェクトへの使用を促進するので、やや成功しています。人々は一般的に物事の関係を見るのが得意です - 違い、類似性、行動など。 OOは、世界の人間の概念化を模倣するソフトウェアの開発を奨励しています。
ソフトウェア開発を世界の見方と同様にすることで、心が複雑さを処理しやすくなります。
"ADT対オブジェクト「ここで何度も尋ねられました。一つの答えは「ADTSとオブジェクトは互いに逆です - 一方が他のものをきちんと抽象的に抽象化するものです。それぞれが異なる方法で柔軟性を可能にします。」
より長い答えについては、ウィリアム・クックを参照してください データの抽象化を理解することで、再訪しました. 。簡単に言えば、オブジェクトを使用すると、いくつかのデータムの複数の実装/表現を簡単に使用できます(リストのように見えるものは、配列、または自己バランスの木、または...)が、新しい操作を追加するのを難しくすることができます(あなたはあなたがそれぞれの表現にその新しい操作を追加する必要があります)が、ADTはデータ型に新しい操作を簡単に追加できますが、複数の実装を持つことは難しくなります。
編集:メッセージの渡されたものがOOを成功させたと言った。 Jonasのコメントに基づいて、それは正しくありません。なぜなら、人々がOOを考慮しているほとんどの言語はメッセージの合格を使用しないと考えているからです。それは正しくないので、私は私の答えからそれをculしました。
私のトップ3の機能。オブジェクト構成 - オブジェクトがコラボレーションできるようにします。多型 - 実行時に動的な動作をサポートします。継承 - コードを再利用し、オーバーライドする方法を介して動作を変更することにより。
ADT- Pascalのようなオブジェクト指向のない言語でもそれを持つことができます。スタックまたはキューはADTの例です。
簡単に言えば、OOPは再利用可能性とカプセル化の鍵であり、この時代のプログラマーがAPIを呼び出し、最も頻繁に必要な日を実行できるように、この時代の生活を容易にする大きなフレームワークの生産をもたらします。
あなたの質問はOOPの4つの機能についてであるので、あなたは言うことができます
- 継承と4.カプセル化は最も重要な機能であり、他の2つは最初の2つを達成するために非常に必要です
1.メッセージの合格と3.多型が実際にサポートしています2.継承と4.カプセル化。
- 継承と4.カプセル化はOOPの成功の鍵です
私の意見では、最後の3つの機能は、OOPの広範なスプレッドの使用に影響を与えたかつて最も重要です。
2. Inheritance
3. Polymorphism
4. Encapsulation
編集: 別のポイントはでしょう IDE Visual StudioやEclipseなどのグラフィカルインターフェイス開発環境。彼らがOOP言語を受け入れると、ますます多くのデザインがOOPに向かう傾向がありました。
そしてもちろん 確固たる原則 ソフトウェア製品を堅実な成果物にするかつては:)