Rangkuman: Penggajian Staf
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 26 dari 57.
Tantangan
SedangBuat sistem penggajian dengan inheritance. Employee.new(name, rate) memiliki pay(hours) (rate dikalikan jam kerja, dengan jam kerja di atas 40 dibayar sebesar 1.5 kali rate) dan line(hours) yang mengembalikan Ada (employee): 800.00, yang dibuat dari pay(hours) dan role, dengan role mengembalikan employee. Manager.new(name, rate, bonus) meneruskan name dan rate ke super, menambahkan bonus ke bayaran dari super, dan memiliki role manager. Contractor < Employee dibayar sebesar rate dikalikan jam kerja tanpa lembur dan memiliki role contractor.
Kode yang disediakan membaca baris employee Ada 20 40, manager Bo 30 45 500 atau contractor Cy 50 50 (nama, rate, jam kerja, dan bonus untuk manager), lalu mencetak line(hours) untuk setiap baris, kemudian staff: 3, managers: 1, employees: 3 (keduanya dihitung dengan is_a?, jadi manager dan contractor juga merupakan employee), serta total bayaran.
Kodemu ditulis di employee.rb, manager.rb, dan contractor.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'employee'
require_relative 'manager'
require_relative 'contractor'
# Kode input/output yang disediakan: biarkan tetap seperti ini
input = []
while (line = gets)
input << line.chomp
end
staff = input.map do |line|
kind, name, rate, hours, bonus = line.split
worker = case kind
when "manager" then Manager.new(name, rate.to_f, bonus.to_f)
when "contractor" then Contractor.new(name, rate.to_f)
else Employee.new(name, rate.to_f)
end
[worker, hours.to_i]
end
staff.each { |worker, hours| puts worker.line(hours) }
managers = staff.count { |w, _| w.is_a?(Manager) }
employees = staff.count { |w, _| w.is_a?(Employee) }
puts "staff: #{staff.size}, managers: #{managers}, employees: #{employees}"
puts format("total: %.2f", staff.sum { |w, h| w.pay(h) })
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classVariabel instansmethod dan selfto_s dan inspectRingkasan: Kartu Perpustakaan4Enkapsulasi
private methodprotected methodprivate setterMelindungi StatusUlasan, Mesin Penjual Otomatis7Polimorfisme dan Duck Typing
PolimorfismeDuck TypingMethod Abstrakcase dan classRingkasan: Method Pembayaran2Accessor dan self
Pembaca dan PenulisSetter Kustomself dalam methodIdentitas dan KesetaraanRangkuman: Daftar Kontak8Special method
Kesetaraan dan hashOperator methodPengindeksan dan penambahanKoleksi kustomRingkasan: Pecahan11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Method dan Variabel class
Method classVariabel instance classKonstantaMethod pabrikRangkuman: Kode KuponLatihan sendiri: Compiler Ruby online