Eラーニングプラットフォーム
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 84/87。
最終課題の章へようこそ!これらの課題は、このコースを通して学んだすべてのOOP概念の習得度を確認するために設計されています。
この課題では、継承、インターフェース、ポリモーフィズム、カプセル化、デザインパターンを一貫したアプリケーションに組み合わせたEラーニングプラットフォームシステムを構築します。
プラットフォームでは、コース、学生、講師の間の関係をモデル化する必要があります。User の基底クラスを Student クラスと Instructor クラスがどのように拡張できるか、コースにレッスンをどのように含めるか、そして学生とコースの間の登録追跡がどのように機能するかを考えてみましょう。
どのOOP原則が当てはまるかを考えてみましょう。ユーザーデータを保護するにはカプセル化を使用し、共通の動作を共有するには継承を使用し、Enrollable や Completable のような契約を定義するにはインターフェースを使用し、異なるユーザータイプを統一的に扱うにはポリモーフィズムを使用します。
これまで学んだことをすべて活用して、頑張ってください!
チャレンジ
簡単このコースを通して習得してきたすべてのOOPの概念を結集したE-Learning Platformを構築しましょう!継承、インターフェース、ポリモーフィズム、カプセル化を使用して、コース、学生、講師の関係をモデル化するシステムを作成します。
コードを6つのファイルに分けて整理します。
Enrollable.java: 登録操作の contract を定義するインターフェースをCreateします。booleanを返すメソッドenroll(Student student)と、intを返すgetEnrolledCount()メソッドをDeclareする必要があります。User.java: Platform上のあらゆるユーザーを表すabstract base classをCreateします。id(String)とname(String)のprivateフィールド、両方を初期化するconstructor、appropriateなgetter、およびユーザーのroleを表すStringを返すabstractメソッドgetRole()を含めます。Student.java:UserをextendsするclassをCreateします。登録されたcourse IDを追跡するprivateなArrayListを追加します。parent constructorをcallするconstructorを含め、getRole()が"Student"を返すように実装し、addCourse(String courseId)およびgetEnrolledCourseCount()メソッドを追加します。toString()をoverrideして、"Student: [name] ([enrolledCount] courses)"を返すようにします。Instructor.java:UserをextendsするclassをCreateします。specialty(String)のprivateフィールドを追加します。id、name、specialtyを受け取るconstructorを含め、getRole()が"Instructor"を返すように実装し、specialtyのgetterを追加して、toString()をoverrideし、"Instructor: [name] - [specialty]"を返すようにします。Course.java:EnrollableをimplementsするclassをCreateします。courseId(String)、title(String)、instructor(Instructor)、および登録されたStudentのArrayListのprivateフィールドを含めます。constructorはcourseId、title、instructorを受け取ります。enroll(Student student)を実装してstudentをリストに追加し、studentのaddCourse()メソッドをこのcourseのIDでcallし、trueを返すようにします。getEnrolledCount()を実装します。course IDをliteralの角括弧で囲み、その後にtitleとinstructorのnameを続けた値を返すgetDetails()メソッドを追加します。これは"[" + courseId + "] " + title + " by " + instructorNameとして構築します。Main.java: Platformを構築しましょう!comma区切りのcommandsを含む文字列を受け取ります。ADD_INSTRUCTOR:id:name:specialtyADD_STUDENT:id:nameADD_COURSE:courseId:title:instructorIdENROLL:studentId:courseIdINFO:userId
instructors、students、coursesのcollectionsを保持します。各commandを処理し、次の内容をprintします。
- ADD_INSTRUCTOR:
Instructor added: [name] - ADD_STUDENT:
Student added: [name] - ADD_COURSE:
Course added: [title] - ENROLL:
[studentName] enrolled in [courseTitle] - INFO: ユーザーの
toString()の出力をprintします
すべてのcommandsの後、
--- Platform Summary ---をprintし、続けて各courseのdetailsと登録数を[courseDetails] - [count] student(s)の形式でprintします。
入力として1つのcomma区切りのcommand stringを受け取ります。
たとえば、入力がADD_INSTRUCTOR:I001:Dr. Smith:Java,ADD_STUDENT:S001:Alice,ADD_STUDENT:S002:Bob,ADD_COURSE:C001:OOP Fundamentals:I001,ENROLL:S001:C001,ENROLL:S002:C001,INFO:S001,INFO:I001の場合、出力は次のようになります。
Instructor added: Dr. Smith
Student added: Alice
Student added: Bob
Course added: OOP Fundamentals
Alice enrolled in OOP Fundamentals
Bob enrolled in OOP Fundamentals
Student: Alice (1 courses)
Instructor: Dr. Smith - Java
--- Platform Summary ---
[C001] OOP Fundamentals by Dr. Smith - 2 student(s)このchallengeでは、継承(User hierarchy)、インターフェース(Enrollable)、ポリモーフィズム(それぞれ独自のtoString実装を持つ異なるuser types)、カプセル化(controlled accessを備えたprivate fields)をcohesiveなsystemに組み合わせます!
REQUIRED OUTPUT FORMAT:自分で試してみよう
import java.util.Scanner;
import java.util.HashMap;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
// TODO: 講師、学生、コースを格納するコレクションを作成する
// Hint: 簡単に検索できるよう id をキーとする HashMap を使用する
// TODO: 入力をカンマで分割して個々のコマンドを取得する
// TODO: 各コマンドを処理する:
// - ADD_INSTRUCTOR:id:name:specialty -> Create instructor, add to collection, print "Instructor added: [name]"
// - ADD_STUDENT:id:name -> Create student, add to collection, print "Student added: [name]"
// - ADD_COURSE:courseId:title:instructorId -> Create course with instructor, add to collection, print "Course added: [title]"
// - ENROLL:studentId:courseId -> 学生をコースに登録し、"[studentName] enrolled in [courseTitle]" を出力する
// - INFO:userId -> ユーザー(学生または講師)を見つけて toString() を出力する
// TODO: After processing all commands, print "--- Platform Summary ---"
// TODO: 各コースについて、"[courseDetails] - [count] student(s)" を出力する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造自分で練習してみよう: Javaオンラインコンパイラ