Menu
Coddy logo textTech

Eラーニングプラットフォーム

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 84/87。

最終課題の章へようこそ!これらの課題は、このコースを通して学んだすべてのOOP概念の習得度を確認するために設計されています。

この課題では、継承、インターフェース、ポリモーフィズム、カプセル化、デザインパターンを一貫したアプリケーションに組み合わせたEラーニングプラットフォームシステムを構築します。

プラットフォームでは、コース、学生、講師の間の関係をモデル化する必要があります。User の基底クラスを Student クラスと Instructor クラスがどのように拡張できるか、コースにレッスンをどのように含めるか、そして学生とコースの間の登録追跡がどのように機能するかを考えてみましょう。

どのOOP原則が当てはまるかを考えてみましょう。ユーザーデータを保護するにはカプセル化を使用し、共通の動作を共有するには継承を使用し、EnrollableCompletable のような契約を定義するにはインターフェースを使用し、異なるユーザータイプを統一的に扱うにはポリモーフィズムを使用します。

これまで学んだことをすべて活用して、頑張ってください!

challenge icon

チャレンジ

簡単

このコースを通して習得してきたすべての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:specialty
    • ADD_STUDENT:id:name
    • ADD_COURSE:courseId:title:instructorId
    • ENROLL:studentId:courseId
    • INFO: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: [Your translated content here]

自分で試してみよう

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)" を出力する
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Javaオンラインコンパイラ