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
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: