| English | 意味 |
|---|---|
| modular/ˈmɒdjʊlə/ | モジュール化 |
2つの整理された設計が異なる平均値を報告する場合があります
- 架空の記録には、得点80、欠席、および得点100が含まれています。欠席をゼロとみなすと
(80 + 0 + 100) / 3 = 60になり、欠席の結果を除外すると(80 + 100) / 2 = 90になります。 - 別々のメソッドにより、どちらの結果も正しく計算できます。組織構造は報告方針を選択しません:欠席の意味、決定者、および報告に示すべき分母を、結果を使用する前に明確に定めてください。
得点は 80、欠席、そして 100 です。利用可能な得点のポリシーに基づき、平均値はいくらになりますか?
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
存在する得点の合計は 180 で、存在する人数は 2 なので、180 / 2 = 90 となります。
要件を契約に変換する
- 欠席が「未実施の評価課題」、「割り当てされていない課題」、あるいは「まだ入力されていないデータ」を意味するかを指定してください。これらのケースは同一のルールを共有する必要はなく、架空の例は影響を示すものであり、学校の格付け方針を規定するものではありません。
- 受け入れられる入力、欠失値の扱い、および結果を明記してください。「利用可能な得点の平均」というルールがある場合、全欠失の記録には平均がありません。ゼロを推測したり、ゼロで割ったりするのではなく、そのケースを明示的に報告してください。
チェック responsibilities を分離する
- モジュール化された設計では、
readScores、averageAvailable、printReportが分離されています。平均メソッドは、ファイルを読み込んだり、フォーマット出力をキャプチャしたりせずに既知の値を用いてチェックできます。 - インターフェースが明確なままである場合、この分離は役立ちます。欠席の意味の変更は、計算、報告、およびチェックの変化を依然として必要とする可能性があります。小さなメソッドと良い名前だけでは、これらの依存関係を完全に防げません。
通常のケースと境界条件をチェックする
- 利用可能な得点のポリシーに対して、[80, 欠席, 100]が90になること、単一の80が80になること、そして[欠席, 欠席]が合意された「結果なし」のOutcomeになることを確認してください。単にプログラムが正常に動作することだけを確認してはいけません。
- 以下の計算では、欠失値に
nullを使用します。これはダブル型の平均を返し、全欠失のケースを拒否します。通常の得点の非null配列を前提としています。入力検証と報告は別の責任です。
public class AverageAvailable {
public static double averageAvailable(Integer[] scores) {
double total = 0;
int present = 0;
for (Integer score : scores) {
if (score != null) {
total += score;
present++;
}
}
if (present == 0) {
throw new IllegalArgumentException("No available scores");
}
return total / present;
}
}
モジュール化された設計(独立しており、名前が適切で明確な部分)は主に...
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
モジュール性は変更を安全にし、部品を再利用可能にします。
複数の呼び出し手が一つのメソッドを共有する場合、そのメソッドを修正すれば重複したコピーを編集することなくすべての呼び出し手に利益をもたらす。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
正しい:呼び出し手は実装を再利用する。ただし、その契約と変更の影響については再確認が必要である。
データやロジックにおけるバイアスは、スケールアップした際に不公正な結果を生むことがあります。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
設計選択は実際の人々に影響を与えます — 誰が影響を受けるかを考慮してください。
入力と出力の印刷を無視して平均計算の検証を行う場合、どの設計がその責任を最も適切に分離しますか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
計算を入力・出力から分離することで、他の操作を介さずに既知の得点による検証が可能です。単にメソッドを小さくするだけでは正しさを保証できません。
プログラム設計は純粋に外見上のものであり、コードの変更安全性に影響しません。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
設計はプログラムがどのように安全に変更されるかを決定します。
提示された averageAvailable メソッドは、すべての要素が欠席している配列に対して 0 を返します。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
誤り:このケースは IllegalArgumentException で除外されます。利用可能な得点が存在しないため、平均値を定義できないからです。
影響を受けるユーザーに后果を報告する
- 90の報告では、3通の記録のうち2通の利用可能な得点を平均しており、1通の欠席結果は除外されていることを明記してください。90のみを報告すると、読者が結果を比較するために必要な情報が隠されてしまいます。
- データと方針の影響を受けうる誰かをレビューしてください。一貫した計算であっても、異なる種類の欠席を不適切に扱うことがあります。合意された要件をテストし、ユーザーにとって結果が理解できるよう努めてください。
モジュール性は、方針の inspected と testing を容易にしますが、その方針が公平または適切であることを保証するものではありません。平均60と90は異なる分母を使用しています。より良さそうな結果を無言で選択するのではなく、ルールを選び、開示してください。
良い設計か悪い設計か?
設計選択には現実的な影響があります。各結果を分類してください。
デザイン全体にポリシー変更を適用する
- 有効な要件が未実行のタスクをゼロとして数えるように変更された場合、分母、関連する例、チェック、およびレポートの文章を更新します。方法の再利用は、その契約が新しいタスクと一致する場合のみ有益です。
- テスト可能性、正しさ、およびユーザーの理解を別々に確認します。明確な境界は一部の変更リスクを低減しますが、メソッドの契約が変化した場合は、呼び出し元や共有される前提条件も依然として確認する必要があります。
プログラムの設計は保守性と人々に影響を与えます。責任を分離して動作を確認できるようにし、欠損データのポリシーを定義し、その境界ケースをテストし、分母を明記します。正しい計算と整然とした構造だけでは、適切なポリシーを確立できません。
Match the change to the issue it addresses.
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
A modular structure enables checking but cannot choose the right policy by itself.