こんにちは、habravchane!
次の投稿は、クラスとADTの性質に関する私の考えのプレゼンテーションです。 これらの考えは、ソフトウェア開発の達人による本からの興味深い引用によって補完されます。
はじめに
まず、ADTの定義に徐々に近づきます。 ATDは、そもそもデータ型であり、次のことを意味します。
このタイプの要素で利用可能な特定の操作の存在。
これらの操作が実行されるデータ(値の範囲)も含まれます。
「抽象」という言葉はどういう意味ですか? まず、「抽象性」の概念は、重要な何かに焦点を当てることを意味し、同時に、現時点では重要ではない詳細から注意をそらす必要があります。 抽象化の定義は、Grady Boochの本に詳しく開示されています。 このように聞こえます:
抽象化とは、概念的な境界を定義し、他のすべてのタイプのオブジェクトと区別する共通プロパティのオブジェクトのセットの割り当てと付与です。
言い換えれば、抽象化により、必要なオブジェクトのデータを「照らす」ことができ、同時に重要ではないデータを「隠す」ことができます。
それでは、「データ型」と「抽象化」の概念が統合されるとどうなりますか? このデータ型のオブジェクトの動作を保証する特定の操作セットを提供するデータ型を取得し、このデータ型はこの動作が実装されているデータを非表示にします。 ここから、ADTの概念に到達します。
ADTは、クライアントから内部実装を隠すデータ型です。
驚くべきことに、抽象化を使用することで、ADTは低レベルの実装の詳細について考えるのではなく、現実世界の高レベルの本質(Steve McConnell)を扱うことができます。
インターフェイスはADTのデータの内部表現に依存してはならないため、ADTを開発するときは、最初にインターフェイスを決定する必要があると思います。 インターフェイスを構成する操作を定義したら、ADTの指定された動作を実装するデータに焦点を合わせる必要があります。 その結果、特定のデータ構造、つまりデータを保存および処理できるメカニズムを取得します。 同時に、ADTの魅力は、データの内部表現を変更したい場合、プログラムをさまようことなく、変更するデータに依存するコードのすべての行を変更する必要がないことです。 ADTはこのデータをカプセル化します。これにより、プログラム全体ではなく、このタイプのオブジェクトの操作を変更できます。
ADTの利点
ADTの使用には多くの利点があります(説明されている利点はすべて、Steve McConnellの著書「Perfect Code」に記載されています)。
- 実装の詳細のカプセル化。
これは、ADTの実装の詳細をカプセル化すると、クライアントにADTと対話できるインターフェイスを提供することを意味します。 実装の詳細を変更しても、ADTの作業に対する顧客の認識は変わりません。
- 難易度を減らしました。
実装の詳細から抽象化することで、インターフェイス、つまりADTができることではなく、その方法に焦点を当てます。 さらに、ADTにより、現実世界の本質を扱うことができます。
- データの使用を制限します。
ADTを使用すると、ADTの内部構造を表すデータがコードの他のセクションに依存しないことを確認できます。 同時に、ADTの「独立性」が実現します。
- 高度な情報インターフェース。
ADTを使用すると、サブジェクトエリアのエンティティに関してインターフェイス全体を表すことができます。これにより、インターフェイスの可読性と情報コンテンツが向上します。
Steve McConnellは、スタックやリストなどの低レベルのデータ型をADTとして表すことをお勧めします。 このリストが何であるか自問してください。 彼が銀行員のリストを提示する場合、ADTを銀行員のリストと見なします。
そこで、ADTとは何かを理解し、その使用の利点を挙げました。 OOPでクラスを開発するときは、まず、ADTについて考える必要があることに注意してください。 同時に、Steve McConnellが言ったように、あなたは言語ではなく、言語の助けを借りてプログラミングします。 つまり、配列や単純なデータ型に関する考えに限定されず、言語を超えてプログラムを作成します。 代わりに、高度な抽象化を考えます(たとえば、スプレッドシートや従業員リストの観点から)。 クラスは、ADTの概念を実装するための追加および方法にすぎません。 クラスを式として想像することもできます。
クラス= ATD +継承+ポリモーフィズム。
それで、クラスを開発するとき、なぜADTについて考える必要があります。 なぜなら、最初に、将来のクラスのインターフェースを構成する操作、非表示にするデータ、およびオープンアクセスを提供する操作を決定する必要があるからです。 低レベルの実装の詳細についてではなく、現実世界のエンティティについて考えることができるように、非常に有益なインターフェイス、最適化とコード検証の容易さ、および正しい抽象化を提供する方法を提供することを検討する必要があります。 ADTを決定した後、継承とポリモーフィズムの問題について考える必要があると思います。
AOPの概念がOOPで広く使用されていることは注目に値します。この概念はOOPを補完し、急速に変化するソフトウェア要件の世界でプログラムの複雑さを軽減できるためです。
この記事は、作業の質とソフトウェア開発を改善するために開発者の注意をADTに向けるために書いたものです。
使用されるソース:
スティーブマッコネル-「完璧なコード」。
Robert Sedgwick-Javaアルゴリズム。