Özet - Şekil Hesaplayıcı
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 33 / 87.
Görev
KolayBu bölümde öğrendiğiniz tüm polimorfizm kavramlarını bir araya getiren bir şekil hesaplayıcı oluşturalım. Somut alt sınıflara sahip soyut bir Shape sınıfı oluşturacak, ardından alanları tek tip bir şekilde hesaplamak ve görüntülemek için polimorfizmi kullanacaksınız.
Kodunuzu dört dosya halinde düzenleyeceksiniz:
Shape.java: Tüm şekiller için temel teşkil eden soyut bir sınıf oluşturun. Her şeklin birnamealanı (String) vardır. Bunu başlatmak için bir yapıcı (constructor), bir getter metodugetName()ve double döndüren soyut birgetArea()metodu ekleyin. Ayrıca şu formatı döndüren birdescribe()metodu ekleyin:[name]: [area](burada alan,String.format("%.2f", getArea())kullanılarak 2 ondalık basamağa biçimlendirilmelidir).Circle.java: Shape sınıfını genişleten somut bir sınıf oluşturun. Dairelerin birradiusalanı (double) vardır. İsim olarak "Circle" değerini iletmek içinsuperkullanın. AlanıMath.PI * radius * radiuskullanarak döndürmek içingetArea()metodunu uygulayın.Rectangle.java: Shape sınıfını genişleten başka bir somut sınıf oluşturun. Dikdörtgenlerinwidthveheightalanları (her ikisi de double) vardır. Üst sınıf yapıcısına isim olarak "Rectangle" değerini iletin. Genişlik ile yüksekliğin çarpımını döndürmek içingetArea()metodunu uygulayın.Main.java: Polimorfizmi iş başında gösteren bir şekil hesaplayıcı oluşturun. Üç girdi alacaksınız: daire için bir yarıçap, dikdörtgen için bir genişlik ve bir yükseklik.Bir Circle ve bir Rectangle oluşturun, ardından bunları bir
Shapereferans dizisinde saklayın. Diziyi döngüye alın ve her şekil içindescribe()metodunu kullanarak açıklamasını yazdırın.Döngüden sonra, tüm şekillerin toplam alanını şu formatta hesaplayın ve yazdırın:
Total area: [sum](bu da 2 ondalık basamağa biçimlendirilmelidir). Her bir şekil referansı üzerindegetArea()metodunu çağırarak alanları toplamak için ayrı bir döngü veya biriktirici (accumulator) kullanın.
Üç girdi alacaksınız: dairenin yarıçapı (double), dikdörtgenin genişliği (double) ve dikdörtgenin yüksekliği (double).
Çıktınız üç satır göstermelidir - her şekil için bir açıklama ve ardından toplam alan. Her şekil kendi alanını kendi yöntemiyle hesaplarken, soyut Shape türü aracılığıyla farklı şekillere nasıl tek tip davranabildiğinize dikkat edin!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Girdileri oku
double radius = scanner.nextDouble();
double width = scanner.nextDouble();
double height = scanner.nextDouble();
// TODO: Yarıçapı kullanarak bir Circle nesnesi oluşturun
// TODO: Genişlik ve yüksekliği kullanarak bir Rectangle nesnesi oluşturun
// TODO: Shape referanslarından oluşan bir dizi oluşturun ve her iki şekli de içinde saklayın
// TODO: Dizi üzerinde döngü kurun ve describe() kullanarak her şeklin açıklamasını yazdırın
// TODO: Tüm şekillerin toplam alanını hesaplayın
// Her şekil üzerinde getArea() metodunu çağırarak alanları toplamak için bir döngü veya biriktirici kullanın
// TODO: Toplam alanı şu formatta yazdırın: "Total area: [sum]"
// Biçimlendirme için String.format("%.2f", totalArea) kullanın
}
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici Kalıbı