Skip to content

Code2Work/fullstack-backend-project-4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Şekil Alan Hesaplayıcı

Amaç

Bu projede soyutlama (abstraction), kalıtım (inheritance), polimorfizm ve interface konularını farklı geometrik şekiller üzerinden uygulayacaksın. abstract bir Shape sınıfı yazıp Circle, Rectangle ve Triangle'ı ondan türeteceksin; her şekil kendi alan/çevre formülünü uygular. Tahmini süre: 2–3 saat.

Öğrenme Hedefleri

  • abstract class ve abstract metod tanımlama
  • extends ile kalıtım, super(...) ile constructor zinciri
  • @Override ile metod ezme (overriding)
  • interface implement etme (Drawable)
  • Polimorfizm: alt sınıf nesnesini ata-tipte (Shape) tutmak
  • instanceof ve tip dönüşümü (casting)
  • StringBuilder ile metin oluşturma

Dosya Haritası

Dosya Ne yapar Dokunacak mısın?
Drawable.java draw() sözleşmesini tanımlayan interface Hayır (hazır)
Shape.java Soyut ata sınıf — area(), perimeter() abstract; toString burada Evet
Circle.java Daire Evet
Rectangle.java Dikdörtgen Evet
Triangle.java Üçgen (Heron formülü) Evet
Main.java Demo / giriş noktası Hayır (hazır)

Adım Adım Görevler

1. Shape Soyut Sınıfı (src/Shape.java)

Shape, Drawable interface'ini implement eden abstract bir sınıf. Doğrudan örneklenemez.

  1. Constructor (TODO 1): name parametresini this.name'e ata.
  2. toString (TODO 3): Ad, alan ve çevreyi içeren String döndür. İpucu: String.format("%s | alan=%.2f | çevre=%.2f", name, area(), perimeter()).

area() ve perimeter() burada abstract — her alt sınıf kendi formülünü yazar.

2. Circle (src/Circle.java)

  1. Constructor (TODO 4–6): super("Daire") (ilk satır), radius < 0 ise IllegalArgumentException, yarıçapı ata.
  2. area (TODO 7): Math.PI * radius * radius. perimeter (TODO 8): 2 * Math.PI * radius. draw (TODO 9): boş olmayan String.

3. Rectangle (src/Rectangle.java)

  1. Constructor (TODO 10–12): super("Dikdörtgen"), negatif kenar kontrolü, atama.
  2. area (TODO 13): genişlik * yükseklik. perimeter (TODO 14): 2 * (genişlik + yükseklik). draw (TODO 15): StringBuilder ile # kutusu.

4. Triangle (src/Triangle.java)

  1. Constructor (TODO 16–19): super("Üçgen"), pozitiflik + üçgen eşitsizliği kontrolü, atama.
  2. area (TODO 20): Herons = çevre/2; alan = √(s·(s-a)·(s-b)·(s-c)). perimeter (TODO 21): a+b+c. draw (TODO 22): boş olmayan String.

💡 Ata-metodu ezerken @Override yaz (imza yanlışsa derleyici uyarır). super(...) alt sınıf constructor'ının ilk ifadesi olmalı. π yerine Math.PI. Şekil boyutları kurulduktan sonra değişmez → alanları final yapabilirsin (bir kez atanır).

Örnek Çalışma

Main'i çalıştırınca (sınıflar tamamlandığında):

=== Şekiller ===
Daire | alan=78.54 | çevre=31.42
Dikdörtgen | alan=24.00 | çevre=20.00
Üçgen | alan=6.00 | çevre=12.00
Daire | alan=12.57 | çevre=12.57
Dikdörtgen | alan=10.00 | çevre=22.00

En küçük alan: Üçgen | alan=6.00 | çevre=12.00
En büyük alan: Daire | alan=78.54 | çevre=31.42

En küçük/büyük alanlı şekli demo döngüyle bulur (sıralama H15 konusu).

Testler ve Skor

Projede 13 JUnit testi var (tests/ShapeTest.java — alan/çevre formülleri, polimorfizm, validation). 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 (13/13) panelde yeşil tik gelir.

Test Senaryoları (kendini test et)

  1. new Circle(5).area()78.54 (π·25).
  2. new Triangle(3, 4, 5).area()6.0 (Heron).
  3. new Rectangle(4, 6).perimeter()20.0.
  4. new Circle(-1)IllegalArgumentException.
  5. new Triangle(1, 1, 10) → üçgen eşitsizliğini bozar, exception.

Bonus (Opsiyonel)

  • Square sınıfı: Rectangle'dan türeyen bir kare.
  • Daha iyi ASCII: Circle.draw() için gerçek bir daire ASCII'si.
  • En büyük alanlı şekil: Main'deki min/max bulma mantığını bir metoda taşı.

Çö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/ShapeTest.java beklenen davranışı anlamak için iyi bir rehber.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors