テーマとして演習を行います。機能を粗く速く実装することよりも、テストを書いて動かすことによるフィードバックを受けながら、リファクタリングを忘れずに着実に進めていくことの方が、本演習では重要です。コードやテストコードのリファクタリングが置き去りになっていないか、確認してください。不十分な場合は、ここで整理しましょう。フィールドはゼロ、または正の整数です。今回発生させるべき適切な例外型は何でしょうか。言語毎の標準を調べてみてください。おけるバージョンアップにはルールがあります。(メジャーバージョンアップ)以上の仕様を踏まえて、上記三種類のバージョンアップ機能を設計/実装してみてください。ここからは設計の自由度が高くなります。ライセンスの下に提供されています。