-1

これは、プログラム概要の説明です。

大学で講師が教えたコースを追跡するソフトウェアを作成します。コースごとに、コースコードとタイトルを記録する必要があり、そのコースを受講している講師のリストも記録する必要があります。講座や講師をリストに追加・削除したり、講座を受講している講師や特定の講師に登録されている講座などの情報を表示できるようにする必要があります。


これまでのところ、Lecturer と Course の 2 つのクラスがあり、それぞれ name id、code および title などの 2 つの属性があります。次に、これらの両方のオブジェクトのデータを保持するクラスをさらに 2 つ作成し、Map を使用したので、Lecturer の ID と名前、コースのコードとタイトルをマップしました。これらは両方とも、LecturerList と CourseList という別のクラスにあります。

しかし、今は講師にコースを割り当てることができません。これで1週間立ち往生しています。何か案は?私はこれに間違った方法でアプローチしましたか?

4

7 に答える 7

2

次のようなマップを使用するのはどうですか。

   Map<Course, Lecturer>

また

   Map<Lecturer, List<Course>>
于 2009-04-15T23:46:09.037 に答える
2

問題がデータベースを必要とすることに同意しません。問題を抱えているのはオブジェクト指向の部分です。永続性が必要な場合は、データベースが続きます。

あなたがしたように、コースと講師から始めます。コースには、必要なコードとタイトルの属性に加えて、コースを教えている講師のリストが含まれます。同様に、講師は name 属性と教えられているコースのリストを持ちます。私には双方向の 1 対 1 の関係のように思えます。問題文の文言は少しわかりにくいですが、コースは複数の講師によって教えられ (おそらく、特定のコースにはいくつかのセクションがあるため)、講師は複数のコースを教えることができるように思えます。

これが正確に聞こえるなら、CourseList または LecturerList クラスは必要ないと思います。

于 2009-04-15T23:51:31.177 に答える
0

問題の説明は「データベース!」と叫んでいます。この問題は、関連する一連の情報を追跡することに関するものであり、まさにデータベース ソフトウェアが設計されたものです。この問題に対する私の解決策は、mySQL と mysql 用の Java データベース コネクタを使用することです。

于 2009-04-15T23:44:39.090 に答える
0

あなたが達成しようとしていることの機能的なスキーマ (私はほとんど UML を書きました) を作成してみてください。理想的には、1 枚の紙と鉛筆を使用して、機能エンティティ (講師、コースなど) ごとにボックスを描き、これらのエンティティ間の関係の種類ごとにラベル付きの方向性のある線を引きます。必要に応じて色を使用します。

引いた線をロープのように考えた場合、要求されたリストを取得するには、どのような関係を「引っ張る」必要がありますか?

そのときだけ、クラス構造を設計してみてください...

于 2009-04-15T23:46:42.767 に答える
0

基本的なオブジェクトとそれらが持つプロパティから始めます

学生 -> ID、名前、コースのリスト

講師→名前、コース一覧

コース -> コード、名前、学生のリスト、講師のリスト

あなたの要件から、コースは興味のある主要なコンポーネントのように見えるので、そこから始めましょう.

学生はコースを受講するため (その逆ではない)、キー関数はコース [course.addstudent] に対する操作である必要があります。ただし、特定の学生が受講しているすべてのコースを一覧表示できる必要もあるため、学生ごとのリストをどこかに保持する必要があり、学生オブジェクト [student.addCourse] は理にかなっています。学生をコースに追加し、学生が受講しているコースのリストを作成することは、単一の論理的な「アクション」であるため、すべてを処理する単一の関数を持つことは理にかなっています。それを行う場所として、それはあなたが本当に維持しているものです。

疑似コードは完璧ではありませんが、アイデアを得ることができます:

course.addStudent(student) {
   course.listOfStudents.add(student)
   student.addCourse(this)
}

student.addCourse(course) { student.listOfCourses.add(course) }

コースから学生を削除することと、講師を追加および削除することは似ています。

于 2009-04-16T18:21:13.723 に答える
0

マップを使用して講師 ID とコース ID を属性にマッピングしましたか? それはあまりオブジェクト指向に聞こえません。Java では、オブジェクト指向にならないようにしようとすると問題が発生します。

これは、Lecturer と Course の間の双方向リンクを維持したいアプリケーションのように思えます。つまり、各コースには 1 人の講師がいます --- 常にそうですか? --- つまり Course には get/setLecturer メソッドがあり、各 Lecturer には add/set/remove/getCourse(s) メソッドを持つ Courses のコンテナがあります。講師とコースの詳細、またはそれらのマッピングを保存するために外部テーブルを維持する必要はありません。Java では、すべてが実際には参照であるため、オブジェクト自体を直接保存できます。

これが実稼働環境に近づくもので使用される場合は、データベースが必要になります。データベースの取得、保存、カスケード削除の多くを自動化するために、Hibernate オブジェクト リレーショナル マッピング システム (特にアノテーション駆動型の永続化を使用) をお勧めします。クエリ プーリング戦略など。ああ、これを本番環境で使用している場合は、既存のコース管理/仮想学習環境ソフトウェアを参照してください。参照については、 http://en.wikipedia.org/wiki/Virtual_learning_environmentの下部を参照してください。

于 2009-04-16T20:00:49.053 に答える
0

Lecturer 内にコースのリストを保存し、Course 内に Lecturers のリストを保存することをお勧めします。次に、次のような「システム」をモデル化するサービスを作成します。

  Course {
    String code;
    String title;  
    List<Lecturer> lecturers = new ArrayList<Lecturer>();
    ... accessors & other business rules ...
    }

  Lecturer {
      int id;
      String name;
      List<Course> courses = new ArrayList<Course>();
    ... accessors & other business rules ...
    }

LectureServices {
 List<Course> coursesAvailable = new ArrayList<Course>(); 
 addCouse(Course course) {
  coursesAvailable.add(course);
 }
 addLecturerToCourse(Lecturer l, Course c) {
  ... lookup course ...
  c.addLecturer(l);
  l.addCourse(c);
 }

 ... etc ...
}
于 2009-04-16T14:10:35.520 に答える