Kısa açıklama
- Bu proje bir üniversite içindeki fakülteler, fakültelere bağlı departmanlar, departmanların dersleri ve eğitmenler arasındaki ilişkileri modellemeyi amaçlar.
- Amaç: Nesne yönelimli tasarım, arayüz kullanımı ve ilişkilerin (bir-çok, çok-çok) doğru gösterilmesi.
Faculty- Alanlar:
id(Long),name(String),createdDate(LocalDateTime),address(String),dean(String) - İlişki: bir
Facultybirden fazlaDepartmentiçerir (composition veya aggregation).
- Alanlar:
Department(üst sınıf)- Alanlar:
id(Long),name(String),departmentHead(String) - İlişki: her
Departmenttek birFaculty'ye aittir. - Metod:
lessonToLearn()soyut/metod olarak tanımlanmalıdır; alt sınıflarda@Overrideedilecektir.
- Alanlar:
- Departman spesifik alt sınıflar
- Örnek:
ComputerEngineeringextendsDepartment - Örnek alan:
programmingLanguagesShouldBeTaught: List<String> - Birkaç farklı departman ekleyin ve her birine özgü alanlar tanımlayın.
- Örnek:
entity.concrete.Course- Alanlar:
id(Long),name(String),gpa(double) - İlişki: her
Coursetek birDepartment'a aittir. lessonToLearn()metodları artıkentity.concrete.Coursetipinde objeleri tutacak şekilde güncellenecek.
- Alanlar:
entity.Instructor- Alanlar:
id(Long),firstName(String),lastName(String),salary(BigDecimal veya double),hasMsc(boolean),hasPhd(boolean) - İlişki:
InstructorveCoursearasında çok-çok (many-to-many). Bir eğitmen birden fazla ders verebilir; bir ders birden fazla eğitmen tarafından verilebilir.
- Alanlar:
- Program seviyeleri için arayüzler (
entity.interfaces)Bsc-> metodlar:presentLesson(),takeExam()Msc-> metodlar:presentLesson(),takeExam(),makeALab(),teachToWriteAcademicPaper()Phd-> metodlar:presentLesson(),takeExam(),makeALab(),teachToWriteAcademicPaper(),teachAcademicResearch(),introduceStudentToAcademicStaff()Instructorsınıfı bu arayüzlerin herhangi bir kombinasyonunu uygulayabilir; gereksinime göre birden fazlasını implement edin.
- Tekrarı azaltmak için ortak davranışları üst sınıflarda veya arayüzlerde toplayın.
- Koleksiyonlar için
ListveyaSetkullanın; ilişkilerdeSettercih ederek yinelenenleri önleyebilirsiniz. equalsvehashCodemetodlarını kimlik alanlarına göre override edin.- Paketleme önerisi:
entityentity.concreteentity.interfacesservice(opsiyonel, iş mantığı için)repository(opsiyonel, veri saklama için)
lessonToLearn()tasarımı:- İlk adımda
Departmentiçinde ders isimlerini döndürecek şekilde string listesi olabilir. - Sonrasında
Coursesınıfı eklendiğinde aynı metodList<entity.concrete.Course>döndürür şekilde güncellenmelidir.
- İlk adımda
Faculty1..*DepartmentDepartment1..*CourseCourse..Instructor
entitypaketini ve alt paketleri oluşturun.- Önce temel sınıfları (
Faculty,Department,Course,Instructor) tanımlayın. - Departman alt sınıflarını ekleyin ve
lessonToLearn()metodlarını override edin. - Arayüzleri (
Bsc,Msc,Phd) oluşturun veInstructorüzerinde gerekli implementasyonları yapın. - Unit testlerle ilişkileri doğrulayın.
- Proje Java ile geliştirilecek ve IntelliJ IDEA kullanılıyor.
- Kodlama standartları: temiz kod, anlamlı isimlendirme, immutable/encapsulation prensipleri uygulanmalı.