プログラミング入門(2015年度夏学期)?
せっかくCircleとSquareをResizableインターフェースを実装して定義したの で,これらを使う側では (Resizableの機能で足るならば) それぞれの型を直 接指定する必要はありません.すなわち
Circle c = new Circle();
ではなく
Resizable c = new Circle();
としてよいのです.(どう嬉しいのか…CircleかSquareのどちらかを扱いたいと きを考えてみてください.まあ今回の問題ではそんなに嬉しくないかもしれま せんが.)
終端としてのBaseParsleyを定義している人といない人で分かれました.この 辺の利点は講義資料や教科書にも書いてあると思いますが,終端を表すクラス を定義してやって,nullチェックを極力避けるのが,NullPointerExceptionを 避けるためにも良いプログラムです.実際,(任意で)containsメソッドを実装 しているものの,nullチェックを怠ってヌルポを吐いてる人がいます.
また,Parsleyコンストラクタを再帰的に定義しているのに,branchの数を static変数に代入して計算している人が目立ちました.(以下のように)
private static int branches = 0; public Parsley{ // branchesの計算 } int getBranches(){ return branches; }
こういったコードには色々と問題があると思いますので,考えてみてください. (例えばParsleyクラスのインスタンスを2つ作っても,static変数は共通です.)
そもそも再帰構造なので,再帰的に計算するのが常套でしょう.
Parsley left,center,right; int getBranches(){ return 1 + left.getBranches() + center.getBranches() + right.getBranches(); }
4-3と同様に length を static 変数として定義して計算している例が見られました.
よくできていました
公開する必要のないインスタンス変数は,privateとして定義しておきましょう. 例えば,Parsleyの中の子Parsleyをpublicにする必要はあるでしょうか?