• ベストアンサー

クラス設計について

UMLの本でクラス図の描き方を勉強しています。クラス図を描くためには実際にオブジェクト指向で開発する場合にどのようにクラスを設計するかがわからないのとかけないので、Javaのカテゴリで質問させて頂きます。(未だにクラスをどのように設計するのか、わかっていないので。。) 例えば、以下のような大学の授業登録システムがあったとします。 (1)共通のログイン画面に対して、生徒、先生、アドミニストレータが個々のID・パスワードでログイン出来る。それぞれ出来る操作は異なる。 (2)生徒は、授業の登録、削除が行える。また、自分の登録した授業のスケジュールを印刷することが出来る。 (3)先生は、生徒の評価が行える。自分の持っている授業のスケジュールを印刷出来る。 (4)アドミニストレータは、授業の登録、削除、ログインユーザの登録、削除を行える。 とあった場合、どのようなクラス(属性&操作)を定義しますか?勿論、答えはたくさんあると思いますし、「一般的な答え」というものも存在しないのかも知れませんが、もしご意見が聞けると幸いです。 ※「UMLがわかる」という本ではコントローラとエンティティでクラスを作っているようで参考になったのですが一例しかなかったので上記の場合だとどうなるのかが知りたくて質問致しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.2

クラスの抽出の第一歩は、要件定義(ご質問の(1)~(4))から名詞 を抽出し、それらがオブジェクトの候補になります。 オブジェクト指向で悩ましいのは、「物」がクラスの候補になるのではなく、 物の性質がクラスの候補になる、というのが正しい説明かどうかわかりませんが・・ たとえば、「先生」と「生徒」はふるまいが違うだけで同じ性質であれば 「ユーザ」でひとくくりのクラスにしてしまってかまわない、ということです。 上記の要件から、クラスの候補を探すと、 ・ログインユーザ(生徒、先生、アドミニストレータ) ・ID ・パスワード ・授業 ・スケジュール ユースケースをたくさん書いていくと、もっと候補が出てくると思います。 たとえば、生徒はどうやって授業の存在を知るの?とか。 たくさん候補を上げて、性質を考え、グルーピングして、 クラスにするか、まとめてしまってメソッドですましてしまうか悩みましょう。 ユースケースは大切です。 どこまでユースケースを書くのか?という悩みが浮かぶかもしれませんが、 僕は、「とことんユースケースを書く。ソースコードと一致するまで書く」 というスタンスです。 実際には、途中で飽きてそこまでしないことが多いですが。

rio_grande
質問者

お礼

ありがとうございます。参考になりました。

その他の回答 (1)

noname#94983
noname#94983
回答No.1

うーん、個人開発ばかりで他人と共同することがないから、あんまりきちんと設計しないで作っちまうなぁ。全然、UMLな発想じゃないんだが。せいぜい参考程度にってことで。 ・モデルクラス。データベースアクセスのORマッピングするクラス。以後の認証とアクセス制御でデータベース利用する土台となる。 ・認証クラス。ユーザをIDで認証管理するクラス。各ユーザが属するグループも、ここで管理するかもしれない。 ・アクセス制御リスト・クラス。各ビューとログインした人間の所属グループのアクセス制御を管理するクラス。 ・利用者クラス。アクセスする利用者の基本的なクラス。 ・生徒グループ・クラス。生徒が属するグループの情報管理をする。 ・先生グループ・クラス。同上。 ・管理者グループ・クラス。同上。 ・コントローラクラス。ログインして以後のクライアントからのリクエストを集中管理するクラス。 ・それぞれの表示を行うビュークラス。用意する画面ごとに用意。 普段、Web系システムばかり作ってるんで、どうもそういうイメージになっちまったが、雰囲気としてはこういう感じだろうか。イメージなんで、あんまりちゃんと考えてない。ユーザ関係のグループ・クラスと、ACLクラスの管理の切り分けがあいまいだが、まぁそのへんは実装にあわせて適当に、という感じだな。

rio_grande
質問者

お礼

ありがとうございます。参考になりました。