私は最近、コードへの小さな変更が複数のクラスにわたって前提条件を変更するといういくつかのシナリオを経験しました。
public Goal getNextGoal() {
return goalStack.pop();
}
goalStack.pop()
スタックが空でないという前提条件がある場合getNextGoal()
、同じ前提条件を明示的に持つ必要がありますか? 前提条件を継承すると物事が脆弱になり、キューまたはその他の構造に変更すると、前提条件がgetNextGoal()
、呼び出し元、呼び出し元の呼び出し元に変更されるようです。しかし、前提条件を継承しないと、コントラクトと呼び出し元が隠され、呼び出し元の呼び出し元は前提条件についてわからないように思えます。
すべての呼び出し元が呼び出し元のコードの事前条件と事後条件を知って継承する脆弱なコードか、それともより深い事前条件と事後条件が何であるかを呼び出し元がまったく知らない不思議なコードですか?