Kitaplar ve Üyeler
Coddy'nin Ruby 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 nesnesi, satır başına bir komut alır ve her birine yanıt verir. Beş adım boyunca kitap ve üye eklemeyi, kitap ödünç vermeyi ve geri almayı, kataloğu aramayı ve bir 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, id ve title değerlerini salt okunur olarak, borrower değerini ise bir erişimci aracılığıyla dışa sunar ve available? yüklemine sahiptir. Member, ödünç aldığı kitapların kimliklerini bir dizide tutar. Her sınıf kendi dosyasında, book.rb, member.rb ve library.rb içinde yer alır ve kütüphane her iki tür nesneyi de yalnızca kendi yöntemlerinin eriştiği hash'lerde tutar:
class Book
attr_reader :id, :title
attr_accessor :borrower
def initialize(id, title)
@id = id
@title = title
@borrower = nil
end
def available?
borrower.nil?
end
end
books = { 1 => Book.new(1, "Dune") }
books[1].borrower = "ada"
puts books[1].available?Çıktı:
falsehandle(line) komutu böler ve case ile ilk kelimesine göre dallanır. Her dal, yanıtlarını bir dizi olarak döndürür; bu nedenle REPORT gibi bir komut birkaç satırla yanıt verebilir ve return bir hata yanıtıyla erken çıkar. Bir kitabın başlığı boşluk içerebilir; bu yüzden başlığa id'den sonraki her şey dahildir:
parts = "ADD_BOOK 7 The Hobbit".split
id = parts[1].to_i
title = parts[2..].join(" ")
puts "#{id}: #{title}"Çıktı:
7: The HobbitGörev
Kolayİlk iki komut için Library#handle yöntemini tamamla:
ADD_BOOK id title: kullanılabilir yeni bir kitap sakla veadded book 1: Duneyanıtını ver; id zaten kullanılıyorsabook 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) yöntemine gönderir ve döndürülen her yanıtı kendi satırında 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.
Kodun book.rb, member.rb ve library.rb dosyalarına yazılmalıdır. main.rb sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'book'
require_relative 'member'
require_relative 'library'
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
input = []
while (line = gets)
input << line.chomp
end
library = Library.new
input.each do |line|
library.handle(line).each { |reply| puts reply }
end
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ıf TanımlamaÖrnek DeğişkenleriMetotlar ve selfto_s ve inspectÖzet - Kütüphane Kartı7Çok Biçimlilik ve Ördek Tiplemesi
Çok BiçimlilikÖrdek TiplemesiSoyut Metotlarcase ve SınıflarTekrar - Ödeme Yöntemleri2Erişimciler ve self
Okuyucular ve YazıcılarÖzel Setter'larMetotlarda selfKimlik ve EşitlikTekrar - Kişi Listesi5Kalıtım
Alt sınıflarMetotları geçersiz kılmasuper çağrısıis_a? ve üst sınıflarTekrar - Personel Maaşları8Özel Metotlar
Eşitlik ve hashOperatör Metotlarıİndeksleme ve EklemeÖzel KoleksiyonlarTekrar - Kesirler11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Sınıf Metotları ve Değişkenleri
Sınıf MetotlarıSınıf Örnek DeğişkenleriSabitlerFabrika MetotlarıTekrar - Kupon KodlarıKendi başına pratik yap: Online Ruby derleyicisi