Skip to content

Code2Work/fullstack-backend-project-3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Şirket Çalışan Sistemi

Amaç

Java OOP'nin ileri konularını — inheritance, abstract class, interface, polymorphism, composition, enum — gerçekçi bir şirket bordro modelinde uygulayacaksın. Üç farklı çalışan tipinin maaşı, aynı calculateSalary() metodu ile ama tamamen farklı formüllerle hesaplanır. Süre: ~5-7 saat.

Öğrenme Hedefleri

  • abstract sınıf ve abstract metod tanımlama (Person, Employee)
  • Inheritance + super(...) ile constructor chaining
  • Runtime polymorphism: calculateSalary() gerçek tipe göre çalışır
  • interface (Payable) ve interface segregation
  • Composition over inheritance (Department "has-a" Employee[])
  • enum + davranış (Rank maaş çarpanı taşır)
  • equals/hashCode business key tabanlı override
  • StringBuilder ile metin oluşturma

Sınıf Hiyerarşisi

Person (abstract)
  └── Employee (abstract, implements Payable)
        ├── Developer   → maaş = (baz + deneyim*1000) * kıdem çarpanı
        ├── Manager     → maaş = (baz + ekip*500) * kıdem çarpanı
        └── Intern      → maaş = 8000 (sabit, çarpan yok)

Department  →  Employee[] içerir (composition)
Rank (enum) →  JUNIOR(1.0) MID(1.3) SENIOR(1.7) LEAD(2.2)
Payable (interface) → calculateSalary()

Başlamadan Önce

  • Java 17+ kurulu olmalı (java -version).
  • IDE: IntelliJ IDEA Community veya VS Code + Java Extension Pack.
  • Payable.java ve Rank.java hazır verildi — onlara dokunma. Diğer dosyalardaki // TODO N: yorumlarını sırayla çöz.

Adım Adım Görevler

  1. Person.java (TODO 1-2): Constructor validation — boş ad ve geçersiz yaş için IllegalArgumentException. (Alan atamaları zaten yazılı.)
  2. Employee.java (TODO 3-7): Constructor validation (baz maaş, rank), describe(), equals()/hashCode() (ad + rol).
  3. Developer.java (TODO 8-10): Deneyim validation, getRole(), calculateSalary() formülü.
  4. Manager.java (TODO 11-13): Ekip validation, getRole(), calculateSalary() formülü.
  5. Intern.java (TODO 14-15): getRole(), sabit calculateSalary().
  6. Department.java (TODO 16-22): Constructor validation, addMember(), getTotalPayroll(), getMembers() (kopya), toString() (StringBuilder).

💡 Liskov Substitution: Her Employee alt tipi, Employee beklenen her yerde sorunsuz çalışmalı. Composition over inheritance: Department bir Employee DEĞİLDİR; çalışanlara sahiptir. @Override annotation'ını eksiksiz yaz. enum'a metod/veri ekleyebilirsin (Rank.getMultiplier()). getMembers() iç diziyi doğrudan döndürme — kopya döndür.

Örnek Çalışma

Main'i çalıştırınca (sınıflar tamamlandığında) şuna benzer çıktı görürsün:

=== Şirket Çalışan Sistemi (Demo) ===
Developer Ada (SENIOR), maaş=13600.00
Manager Bora (LEAD), maaş=17600.00
Intern Cem (JUNIOR), maaş=8000.00

Departman: Engineering (3 çalışan)
Toplam bordro: 39200.00

Testler ve Skor

Projede 20 JUnit testi var (tests/). Testleri çalıştırınca skorun otomatik Kaizu paneline işlenir.

1. Öğrenci numaranı gir. student_id.txt dosyasına Kaizu öğrenci numaranı yaz. (Bir kez.)

2. Testleri çalıştır.

  • macOS / Linux: ./run-tests.sh • Windows: .\run-tests.ps1

İlk çalıştırmada JUnit kütüphanesi (~6 MB) lib/'e iner. Başlangıçta testler kırmızı; TODO'ları çözdükçe yeşile döner.

3. Skor otomatik gider. Tüm testler geçince (20/20) panelde yeşil tik gelir.

Skor için testleri run-tests.sh ile çalıştır.

Bonus (Opsiyonel)

  • Contractor (sözleşmeli) sınıfı ekle — Employee'den türemeden sadece Payable implement etsin (interface segregation).
  • Department.highestPaidMember() — çalışanları döngüyle gezip en yüksek maaşlıyı döndür.
  • Rank'e getDisplayName() ekle (örn. LEAD → "Takım Lideri").

Çözüm

Takılırsan proje sayfasındaki "Çözümü Göster" butonunu kullan (proje verildikten 3 gün sonra açılır). Önce en az 1 saat kendin uğraş — tests/ hata mesajları iyi bir rehber.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors