Kitaplar ve Üyeler
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 50 / 57.
Bu projede bir kütüphane sisteminin temelini oluşturacaksın. Bir Library sınıfı komutları satır satır alır ve her birine yanıt verir. Beş adımda kitap ve üye eklemeyi, kitap ödünç vermeyi ve geri almayı, kataloğu aramayı ve rapor yazdırmayı öğrenir:
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTVeri modeli, bu bölümde öğretilenleri kullanır. Book ve Member ayrı dosyalarda bulunur. Bir kitabın borrower değeri her yerden okunabilir, ancak yalnızca lendTo ve giveBack aracılığıyla değiştirilebilir; bir üye ise ödünç aldığı kitapların kimliklerini salt okunur bir List olarak sunar. Kütüphane her ikisini de özel eşlemelerde tutar, böylece bunları yalnızca kendi metotları değiştirebilir:
class Book(val id: Int, val title: String) {
var borrower: String? = null
private set
val isAvailable: Boolean
get() = borrower == null
fun lendTo(name: String) { borrower = name }
}main içinde:
val books = mutableMapOf<Int, Book>()
books[1] = Book(1, "Dune")
books.getValue(1).lendTo("ada")
println("${books.getValue(1).isAvailable} ${books.getValue(1).borrower}")Çıktı:
false adahandle(line) komutu parçalara ayırır ve ilk sözcüğü üzerinde bir when kullanır. Her dal, yanıtlarını bir List<String> olarak döndürür; böylece REPORT gibi bir komut birkaç satırla yanıt verebilir ve erken bir return ret yanıtını geri döndürür. Bir kitabın başlığı boşluk içerebilir, bu nedenle kimlikten sonraki her şey başlıktır:
main içinde:
val p = "ADD_BOOK 7 The Hobbit".split(" ")
val id = p[1].toInt()
val title = p.drop(2).joinToString(" ")
println("$id: $title")Çıktı:
7: The HobbitGörev
Kolayİlk iki komut için Library.handle(line) işlevini tamamla:
ADD_BOOK <id> <title>: kullanılabilir yeni bir kitap ekle veadded book 1: Duneyanıtını ver; id kullanımdaysabook 1 existsyanıtını ver.JOIN <name>: bir üye ekle vewelcome adayanıtını ver; ad zaten varsaada is already a memberyanıtını ver.
Sağlanan kod, her girdi satırını library.handle(line) işlevine gönderir ve döndürülen her yanıtı ayrı bir satıra yazdırır. Üye adları tek ve küçük harfli sözcüklerden, kitap kimlikleri tam sayılardan oluşur ve girdi yalnızca şimdiye kadar açıklanan komutları içerir. Diğer tüm komutlar unknown command yanıtını verir.
Kodunu Book.kt, Member.kt ve Library.kt dosyalarına yaz. Main.kt, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
val input = generateSequence(::readLine).toList()
val library = Library()
for (line in input) {
for (reply in library.handle(line)) println(reply)
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Kotlin playground