このプロジェクトは、人物(Person)を基底クラスとし、教師(Teacher)とエンジニア(Engineer)という2つの職業を表現する継承ベースの設計を実装しています。
基底となる抽象クラスで、人物の基本的な属性と振る舞いを定義します。
species: 静的プロパティ、値は "Homo sapiens"name: 読み取り専用の文字列age: protected修飾子で保護された数値
isAdult(): 年齢に基づいて成人か未成年かを判定incrementAge(): 年齢を1増加greeting(): 基本的な挨拶を表示job: 抽象ゲッター/セッター
教師を表現するクラスです。
_job: 担当科目(private)- 選択可能な科目:Mathematics, Science, History, Art
greeting(): 基本の挨拶に加えて担当科目を表示job: ゲッター/セッター(科目の取得/設定)
エンジニアを表現するクラスです。
_job: 専門スキル(private)- 選択可能なスキル:JavaScript, TypeScript, Python, Java
greeting(): 基本の挨拶に加えて専門スキルを表示job: ゲッター/セッター(スキルの取得/設定)
// 教師のインスタンス作成
const teacher = new Teacher("Alice", 35, "Art");
teacher.greeting();
// 出力:
// Hello, My name is Alice.
// I am 35(adult) years old.
// I teach Art.
// エンジニアのインスタンス作成
const engineer = new Engineer("Bob", 16, "JavaScript");
engineer.greeting();
// 出力:
// Hello, My name is Bob.
// I am 16(minor) years old.
// I work as an engineer in JavaScript.classDiagram
Person <|-- Teacher
Person <|-- Engineer
class Person {
<<abstract>>
+String name
#Number age
+static String species
+isAdult() string
+incrementAge() void
+greeting() void
+abstract job getter
+abstract job setter
}
class Teacher {
-Subject _job
+job getter Subject
+job setter Subject
+greeting() void
}
class Engineer {
-Skill _job
+job getter Skill
+job setter Skill
+greeting() void
}
class Subject {
<<enumeration>>
Mathematics
Science
History
Art
}
class Skill {
<<enumeration>>
JavaScript
TypeScript
Python
Java
}
Personクラスは抽象クラスのため、直接インスタンス化することはできませんjobプロパティは各子クラスで具体的な型(SubjectまたはSkill)を実装する必要があります- 年齢による成人判定は18歳以上で行われます