MTCTM

正方形の周長 #7

一つで全てをこなせるクラスができあがってよきかなよきかな。 というわけで今度は無駄にたくさんのクラスを作って混沌へと還元していく。 まずは正方形の諸元を表現するクラスを定義する。 public class SquareParameters { private double side = 0; publi…

無駄にたくさんのクラスを作るには

ここで言うクラスはモジュール等の機能のまとまりと言い換えてもいい。 手軽にできる方法がある。それは機能の抽象化で、 果たしている機能の本質を抽出し、別のまとまりとすることで、 抽象化されたまとまりとそれを具象化するまとまりの二つにできる。 こ…

簡単な入れ子構造を扱う #14

SchoolとGradeはSetContainerの拡張で済む。 school/School.java package school; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; public class School extends SetContainer<Grade> { public Grade add(String name) </grade>…

簡単な入れ子構造を扱う #13

Studentは同じであり、Groupもほとんど変わり映えしない。残念。 school/Student.java (reproduction) package school; public class Student { private String name; private int height; Student(String name, int height) { if (name == null) throw new …

簡単な入れ子構造を扱う #12

SchoolやGradeはLinkedHashMapを利用したコンテナ要素の管理をおこなっている。この機能を取り出す。 school/SetContainer.java package school; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; abstract class…

簡単な入れ子構造を扱う #11

次はSchoolやGrade、Groupのようにコンテナとしての機能を持つものから抜き出す。 ただ、考えてみるとIterableを実装すべきであること以外に共通性はない気がする。 そこで新たにクラスやインタフェイスを作ることなくIterableを実装することという制約を課…

簡単な入れ子構造を扱う #10

まずは名前で識別される性質を持っている側面からのGradeやGroupから抜き出す。 Studentも名前を持つが名前だけで識別されるわけではないので仲間ではないと考える。 school/Named.java package school; interface Named { String getName(); } school/Named…

簡単な入れ子構造を扱う #9

同じような意味を持つコードが並ぶとまとめてみたくなることもあるだろう。 意味をまとめるために無駄にたくさんのクラスを作るやり方は混沌を呼び寄せる楽しみになる。