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 derste oluşturduğun Book ve User sınıflarını genişleterek Kütüphane Yönetim Sistemi'ni oluşturmaya devam edelim. Şimdi kullanıcıların kitap ödünç alabilmesini ekleyecek ve bu iki varlık arasında gerçek bir bağlantı oluşturacaksın.
Kodunu üç dosya arasında düzenleyeceksin:
Book.java: Önceki görevdeki Book sınıfını geliştir. Mevcut tüm işlevleri (isbn, title, author, getter/setter'lara sahip isAvailable vegetDetails()) koru. Şimdi, kitabı ödünç alan kullanıcının kimliğini (veya kitap ödünç alınmamışsaborrowedBy) saklayanStringtüründe özel birnullalanı ekle.borrowedByiçin bir getter ve ödünç alındığında (borrowedBy null olmayan bir değere ayarlandığında)isAvailabledeğerini de uygun şekilde güncelleyen bir setter ekle; kitap iade edildiğinde (null olarak ayarlandığında) yeniden kullanılabilir hâle gelir.User.java: Ödünç alınan kitapları takip etmek için User sınıfını genişlet. Mevcut id, name, constructor, getter'lar vetoString()işlevlerini koru.ArrayList<Book>adında özel birborrowedBooksalanı ekle (constructor içinde başlat). Kitabı kullanıcının listesine ekleyen ve kitabınborrowBook(Book book)değerini bu kullanıcının ID'sine ayarlayan birborrowedBymetodu oluştur. Kitabı listeden kaldıran vereturnBook(Book book)değerini null olarak ayarlayan birborrowedBymetodu oluştur. Kullanıcının o anda sahip olduğu kitap sayısını döndüren birgetBorrowedCount()metodu ekle.Main.java: Ödünç alma sisteminin çalışırken nasıl göründüğünü göster. Beş girdi alacaksın: bir kitap için ISBN, title, author; ardından kullanıcı ID'si ve adı.Bu girdilerle bir Book ve bir User oluştur. Kitabın ayrıntılarını ve kullanılabilirlik durumunu yazdır. Ardından kullanıcı kitabı ödünç alsın. Kitabın kullanılabilirlik durumunu tekrar yazdır; sonrasında kitabı kimin ödünç aldığını
Borrowed by: [userId]biçiminde yazdır. Kullanıcının kaç kitabı olduğunu[name] has [count] book(s)biçiminde yazdır. Son olarak kullanıcı kitabı iade etsin ve kullanılabilirlik durumunu bir kez daha yazdır.
Sırasıyla beş girdi alacaksın: ISBN (String), title (String), author (String), kullanıcı ID'si (String) ve kullanıcı adı (String).
Örneğin, girdiler 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 ve Alice olduğunda çıktın şöyle olur:
[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, önceki çalışmanın üzerine doğrudan inşa edilir ve bir kütüphane sistemini işlevsel hâle getiren kitaplar ile kullanıcılar arasındaki önemli ilişkiyi ekler. Composition kullanacak (User "has" Books) ve iyi tasarlanmış metotlar aracılığıyla bir nesnedeki değişikliklerin başka bir nesneyi nasıl etkileyebileceğini göreceksin!
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, title ve author 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 detaylarını yazdır
System.out.println(book.getDetails());
// Print whether the book is available (format: "Available: true" or "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üsaitliğini tekrar yazdır
System.out.println("Available: " + book.isAvailable());
// Kim tarafından ödünç alındığı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üsaitliği 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ıÖdünç Alma SistemiArama İşlevselliğiYönetici ArayüzüException Handling EntegrasyonuTest ve Entegrasyon2Eriş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ıKendi başına pratik yap: Online Java derleyicisi