Dopo queste premesse iniziamo a scrivere qualche riga di codice. Dato che Ongaku catalogherà CD cominciamo con lo scrivere proprio la classe Cd
. Nella nostra applicazione useremo il modulo come namespace, quindi racchiuderemo tutte le nostre classi in
module Ongaku ... end
Per ogni Cd inseriremo solo le informazioni riguardanti il titolo, l'autore e l'anno di pubblicazione. Come abbiamo visto nel capitolo 8, creiamo gli attributi ai quali assegneremo i valori passati al momento della creazione di un nuovo oggetto Cd:
attr_accessor :titolo, :autore, :anno def initialize(titolo, autore, anno) @titolo = titolo @autore = autore @anno = anno end
Un oggetto di tipo Cd va creato quindi nel seguente modo:
cd = Cd.new ("Lepidoptera", "Fursaxa", 2006)
Poiché tra le funzionalità c'è anche la visualizzazione della nostra lista, che sarà un array ordinato di oggetti Cd, dobbiamo creare il metodo to_s che viene chiamato automaticamente da puts e il metodo <=> per permettere l'ordinamento dell'array. Il metodo per la stampa degli oggetti Cd è banalmente:
def to_s " #{self.autore} - #{self.titolo} (#{self.anno})" end
Non facciamo altro che produrre una stringa contenente i campi del Cd con un minimo di formattazione. In questo modo un semplice
puts cd
produrrà l'output
Fursaxa - Lepidoptera (2006)
Per quel che riguarda l'ordinamento dobbiamo solo includere il modulo Comparable (capitolo 11) e scrivere il metodo <=>. In pratica Comparable ci evita di scrivere tutti i metodi di comparazione basando il proprio funzionamento solo sull'operatore <=>. Avremo quindi:
include Comparable def <=>(altro) self.autore <=> altro.autore end
In conclusione avremo, nel file cd.rb, la classe Cd:
module Ongaku class Cd include Comparable attr_accessor :titolo, :autore, :anno def initialize(titolo, autore, anno) @titolo = titolo.capitalize @autore = autore.capitalize @anno = anno end def to_s " #{self.autore} - #{self.titolo} (#{self.anno})" end def <=>(altro) self.autore <=> altro.autore end end end