• ベストアンサー

クラス設計について

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

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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
質問者

お礼

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

関連するQ&A

  • クラスについて。

    JAVAで、端末上からコマンドをうって予定を登録する簡易なプログラム(スケジュール管理のようなもの)を作るとします。 これが予定編集・予定削除・カレンダー表示等の機能を持っているとするとき、編集クラス・削除クラス・カレンダー表示クラスのように機能ごとにクラスで分けたほうがいいのでしょうか? UMLによるクラス図の勉強を最近始めたものです。

  • VBのシステムの設計書にUMLは適用できますか?

    現在、VBでシステム開発を行っている者(新人)です。 VBで開発するシステムの基本設計書、詳細設計書を作成する際、UMLは利用できますでしょうか。 UMLはJava(オブジェクト指向)向きのもので、VB向きではないのは分かっているのですが。 (上司に、VBの設計書にUMLはどう使えるかのレポートを書くように言われまして^^;) VBでクラスモジュールを作る場合には、クラス図やオブジェクト図が適用できるのかと思いますが、クラスを作らない場合など、他にはUMLのどのようなものが適用できるでしょうか? DBのER図などに適用できますでしょうか? また、VBで開発するシステムの設計書の特徴などがあったら教えていただきたいと思います。VBだったらこういう風に書くとか(画面設計にフォームの画像を貼るとか)、この項目はVBの場合いらないとか(上司は「VBはソースが分かりやすいから詳細設計はいらないんじゃないか?」と言っています)、どんなことでもいいので、アイデアを下さい。  ご指導の程、よろしくお願いいたします。

  • UMLによる分析・設計

    これからコンピュータシミュレーターの開発を行うのですが、 まずはUMLによる分析・設計を行わなければなりません。 でもいまいちどうUMLを書いていけばいいのかわかりません。 ユースケース、クラス、シーケンス図のどれを使っていいのか、 どこなで細かく書くのかなどです。 例えば、COMETIIの構造などでもかまいません、 なにかアドバイスをお願いいたします。 なにか参考になる書籍を紹介していただくだけでもかまいません。

  • C++ソースからUMLの設計書を作るには

    C++ソースからUMLを使った設計書を起こしたいです。 設計書等は一切ありません。 総ステップ数12万超です。複数のcppファイルに分かれています。 オブジェクト指向に基づいて開発されているので、クラスからクラスへと更には別のcppファイルへと呼び出されていくので、どこから見ていったら良いか悩んでいます。 まずはクラス図から作った方が良いのでしょうか? C++ソースから設計書を起こすには、どこから手を付けたら良いか、アドバイスお願いいたします。

  • クラス設計書

    いつもお世話になっております。 クラス設計書を作成する事になりました。 今までMVCモデルどころかクラス設計書を書いた事がないので、 イメージが沸かず困ってます。 ※会社のドキュメントは存在しない Googleで調べてもサンプルが・・・ イメージとしては ★Top controller top class 定義 名称 action    属性 説明 Top index public トップ画面 input_data public データ登録画面 update_data public データ変更画面 delete_data public データ削除画面 info_data public データ参照画面 因みに詳細設計に組み込もうと思っています。 ご教授願えないでしょうか。

  • UMLにおけるクラス図で困っています。

    javaでの統一モデリング言語 (UML)におけるクラス図の質問です。 既に「ラジオ」「カセットレコーダ」「CDプレーヤ」「テレビ」「MDレコーダ」の各クラスが定義してあるとする。 この後、「ラジカセ」(ラジオとカセットレコーダの機能を合わせ持つ)、「ラテカセ」(同じく、ラジオ、テレビ、カセットレコーダ)、「ラジオカセットMD CD」(同、ラジオ、カセットレコーダ、MDレコーダ、CDプレーヤ) を設計したいのですがどのように設計したらよいかクラス図を用いて説明をお願いします。

    • ベストアンサー
    • Java
  • [ソフトウェア設計]処理の流れは、アクティビティ図?フローチャート?どちらで書くべきか。

    VCですでに組まれているソフトの設計を設計書として文書にする作業をしています。 (現状あるソフト設計を別のソフトの設計に継承するため、このような作業が発生しました。すでに組まれているソフトには設計書がありませんので、参照はできません。) この場合、ソースコードに記載されている処理の流れは、UMLのアクティビティ図で書けるのでしょうか? 参考書でアクティブ図を勉強しましたが、プログラムの処理の流れ(基本情報技術者試験の擬似言語で記載されているような処理)をそのまま書いたような図は見つかりませんでした。一般的には、プログラムの処理の流れは、アクティブティ図では、書かないのでしょうか? そのような処理は、フローチャートで書くべきなのでしょうか? シーケンス図も一緒に書いていますので、できたらUMLで統一し、アクティブティ図で書きたいのです。 設計書は、今まで記載していなかったので、ノウハウがありません。 知識がおありの方がおられましたら、ご教授お願いいたします。

  • UML、クラス図について

    くだらない質問かもしれません。 列車に、 1:普通車・グリーン車・寝台 2:喫煙・禁煙 という種類がある場合、これはクラス図でどう表現すればいいのでしょう。列車というクラスの属性値に、種類1、種類2というものを入れるにしても、種類1(普通車・グリーン車・寝台)といった要素の限定はどうやって記述すればいいのでしょうか。 また、列車を継承したクラスとして、普通車クラス・グリーン車クラス・寝台クラスをつくる等も考えたのですが、こういう書き方もありでしょうか? うまく説明できないのですが、UML初心者です。

  • 僕の持ってるクラスの概念は正しいですか?

    僕の持ってる下記のクラスの概念は正しいですか? クラスとは、データ(「属性」または「フィールド」ともいう)とその操作手順であるメソッド(「振る舞い」、「動作」、「機能」ともいう)をまとめたオブジェクトの雛型(形式・様式を示す見本)を定義したもの。    クラスとは、いわば、何かを実行する物体(オブジェクト)の設計図のようなもの。何かを実行する物体というのは、例えば車をオブジェクトに例えると、「走る」,「車を止める」,「ライトをつける」ということを実行するが、クラスというのはその車(オブジェクト)の設計図。 また設計図だから、クラスの中には具体的に「何をさせたいのか」(車であれば、「走る」,「ライトをつける」等)を記述していくが、これがメソッドである。 また、車であれば、ナンバーや車種等の属性的情報があるが、このようにオブジェクトが保持する属性的情報がフィールドである。 また、この設計図を元に生み出された、実際に動作しているオブジェクトをインスタンスと呼ぶ。 車であれば、実際に走ったり止まったりライトをつけてるといったように、実際に動作しているオブジェクトがインスタンス。 これに関連し、オブジェクトとは、ソフトウェアが扱おうとしている現実世界に存在する物理的あるいは抽象的な実体を、属性(データ、フィールド)とメソッドの集合としてモデル化し、コンピュータ上に再現したもの。

    • ベストアンサー
    • Java
  • javaプログラミングについて

    javaプログラミングについて素朴な疑問なんですが javaが出来る人ってUMLを理解しているのでしょうか? プログラムを組むとき、クラス図とか理解していないと 組めないのですか?よく質問に「---がうまくいかない」 とかありますが、設計はできているのでしょうか? あまり説明がうまくないのですが教えてください。

専門家に質問してみよう