Kitap ve Kullanıcı Sınıfları
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 78 / 87.
Görev
KolayÖnceki dersteki Book ve User sınıflarını genişleterek Kütüphane Yönetim Sistemini oluşturmaya devam edelim. Şimdi, kullanıcıların kitap ödünç alabilme özelliğini ekleyerek bu iki varlık arasında gerçek bir bağlantı oluşturacaksınız.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
Book.java: Önceki görevdeki Book sınıfınızı geliştirin. Mevcut tüm işlevleri (isbn, title, author, getter/setter metotlarıyla birlikte isAvailable vegetDetails()) koruyun. Şimdi, kitabı ödünç alan kullanıcının ID'sini (veya ödünç alınmamışsanull) saklayanStringtüründe özel (private) birborrowedByalanı ekleyin.borrowedByiçin bir getter ve aynı zamandaisAvailabledurumunu uygun şekilde güncelleyen bir setter ekleyin; bir kitap ödünç alındığında (borrowedBy null olmayan bir değere ayarlandığında), kitap kullanılamaz hale gelir; iade edildiğinde (null olarak ayarlandığında), tekrar kullanılabilir hale gelir.User.java: Ödünç alınan kitapları takip etmek için User sınıfınızı genişletin. Mevcut id, name, yapıcı metot (constructor), getter metotları vetoString()metodunu koruyun.borrowedBooksadında özel (private) birArrayList<Book>alanı ekleyin (bunu yapıcı metot içinde başlatın). Kitabı kullanıcının listesine ekleyen ve kitabınborrowedBydeğerini bu kullanıcının ID'sine ayarlayan birborrowBook(Book book)metodu oluşturun. Kitabı listeden çıkaran veborrowedBydeğerini null olarak ayarlayan birreturnBook(Book book)metodu oluşturun. Kullanıcının şu anda kaç kitaba sahip olduğunu döndüren birgetBorrowedCount()metodu ekleyin.Main.java: Ödünç alma sistemini iş başında gösterin. Beş girdi alacaksınız: Bir kitap için ISBN, başlık (title), yazar (author), ardından kullanıcı ID'si ve adı.Bu girdilerle bir Book ve bir User nesnesi oluşturun. Kitabın ayrıntılarını ve uygunluk durumunu yazdırın. Ardından kullanıcının kitabı ödünç almasını sağlayın. Kitabın uygunluk durumunu tekrar yazdırın, ardından
Borrowed by: [userId]formatında kimin ödünç aldığını yazdırın. Kullanıcının kaç kitabı olduğunu[name] has [count] book(s)formatında yazdırın. Son olarak, kullanıcının kitabı iade etmesini sağlayın ve uygunluk durumunu bir kez daha yazdırın.
Sırasıyla beş girdi alacaksınız: ISBN (String), title (String), author (String), user ID (String) ve user name (String).
Örneğin, 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 ve Alice girdileriyle çıktınız şöyle olacaktır:
[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: trueBu görev, doğrudan önceki çalışmanızın üzerine inşa edilerek, bir kütüphane sistemini işlevsel kılan kitaplar ve kullanıcılar arasındaki kritik ilişkiyi ekler. Kompozisyon (Kullanıcının Kitaplara "sahip olması") kullanacak ve bir nesnedeki değişikliklerin iyi tasarlanmış metotlar aracılığıyla diğerini nasıl etkileyebileceğini göreceksiniz!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Kitap bilgilerini oku
String isbn = scanner.nextLine();
String title = scanner.nextLine();
String author = scanner.nextLine();
// Kullanıcı bilgilerini oku
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// isbn, başlık ve yazar ile bir Book nesnesi oluştur
Book book = new Book(isbn, title, author);
// userId ve userName ile bir User nesnesi oluştur
User user = new User(userId, userName);
// getDetails() kullanarak kitabın ayrıntılarını yazdır
System.out.println(book.getDetails());
// Kitabın müsait olup olmadığını yazdır (format: "Available: true" veya "Available: false")
System.out.println("Available: " + book.isAvailable());
// Kullanıcının kitabı ödünç almasını sağla
user.borrowBook(book);
// Kitabın müsaitlik durumunu tekrar yazdır
System.out.println("Available: " + book.isAvailable());
// Kimin ödünç aldığını yazdır
System.out.println("Borrowed by: " + book.getBorrowedBy());
// Kullanıcının kaç kitabı olduğunu yazdır
System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
// Kullanıcının kitabı iade etmesini sağla
user.returnBook(book);
// Müsaitlik durumunu bir kez daha yazdır
System.out.println("Available: " + book.isAvailable());
}
}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ıralama10OOP'de İstisna Yönetimi
İstisna Sınıfı HiyerarşisiÖzel İstisnalarDenetimli ve Denetimsiz HatalarTry-With-Resources YapısıÖzet - Doğrulanmış Kullanıcı13Proje: Kütüphane Yönetimi
Proje Genel Bakış ve UML TasarımıKitap ve Kullanıcı Sınıfları2Eriş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ı