| English | 意味 |
|---|---|
| abstraction/əbˈstrækʃn/ | 抽象化 |
| procedural abstraction/prəˈsiːdʒərəl əbˈstrækʃn/ | 手続的抽象化 |
| method decomposition/ˈmeθəd ˌdiːkɒmpəˈzɪʃn/ | メソッド分解 |
詳細を隠す
- 抽象化とは、詳細を隠して主要な概念に集中することです。
- 自動車を運転する場合、エンジンの内部構造を知る必要はありません。ハンドルとペダルで操作します。
- コードにおいて、抽象化とは、* how *ではなく what it does に基づいて何かを使うことを可能にします。
- 大規模なプログラムを管理するための最も重要な概念です。
手続的抽象化
- 手続的抽象化とは、振る舞いをメソッドにパッケージ化し、名前で呼び出すことです。
- 一度書けば、
average(scores)は結果のために使われます — 内部のコードは隠されます。 - メソッド名とパラメータ(インターフェース)のみが、呼び出し側にとって必要です。
- これが、
Math.sqrtなどのライブラリメソッドを使用する際の正しい使い方です。
メソッド分解
- 大きな問題を小さな振る舞いに分割し、それぞれを独自のメソッドとする — メソッド分解です。
- 「注文を処理する」 →
checkStock()、chargeCard()、ship()。 - 名付けられた小さなメソッドは、書きやすく、テストしやすく、再利用しやすいです。
- メインメソッドは、高いレベルでの要約のように読めます。
クラスの設計
- クラスを設計するには、どのようなデータを保持し、どのような振る舞いを提供するかを決めます。
Studentはデータ(名前、得点)と振る舞い(addScore、average)を持っています。- 良い設計では、関連するデータと振る舞いをまとめます。
- 事前に計画することで、プログラムを構築・読解・再利用しやすくなります。
インターフェースか実装か?
抽象化は、単純なwhatの背後にあるhowを隠します。各アイテムをソートする。
抽象化は実装ではなく、インターフェースに関するものです。 average(scores) の呼び出し側には、名前、入力、結果のみが必要であり、内部のループは決して必要ありません。各メソッドは明確に一つのタスクを行うように設計します(メソッド分解)。5つの無関係なタスクを行うメソッドは、名付けにくく、テストしにくく、再利用しにくいです。コードを書く前に、クラスをデータ+振る舞いとして計画します。
Student クラスの設計:
- データ: 生徒の名前と得点のリスト。
- 振る舞い:
addScore(s)、average()、highest()。 - 呼び出し側は、計算が内部に隠されているため、
student.average()の結果のみを使います。
抽象化は詳細を隠して主要な概念に集中させ、手続的抽象化は how ではなく what it does に基づいてメソッドを使うことを可能にします。メソッド分解は、大きな問題を小さな名付けられた振る舞いに分割します。クラスを設計するには、データと振る舞いを決める — 良い設計は、コードを構築・読解・再利用しやすくします。
抽象化は以下のように最もよく説明できます...
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
抽象化は何かの動作方法(how)を隠すことで、それが何をするか(what)を使えるようにします。
プロシージャル抽象化により、メソッドを...によって使用できます
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
名前と入力で呼び出し、内部構造ではなく呼び出します。
大きな問題を小さな名前付きの振る舞い(メソッド)に分解することを、メソッド ___ (1語)と呼びます。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
メソッド分解は、業務を焦点を絞ったメソッドに分割します。
クラスを設計する際、何を決定すべきですか?
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
設計とは、データ+振る舞いを合理的にグループ化することであり、アドレスではありません。
良いプログラム設計は、プログラムの構築、読取、再利用を容易にします。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
これが抽象化と分解による報酬です。