Domanda sulle classi


#1

Salve a tutti!
Vi scrivo il codice che ho preso dal libro Programming Ruby - The
Pragmatic Programmers guide - 2nd,studiando il capitolo OBJECTS AND
ATTRIBUTES.

… Inizio codice
class Song

Inizializzazione

def initialize (name,artist,duration)
@name = name
@artist = artist
@duration = duration

@name si chiama VARIABILE DI ISTANZA

end

Fine inizializzazione

Inizio blocco definizione dei metodi

def mostra
“Song: #@name – #@artist – (#@duration)”
end

end

Costruzione dell’oggetto

Definiamo una nuova classe figlia della precedente

class KaraokeSong < Song
def initialize (name,artist,duration,lyrics)
@lyrics = lyrics
end
def mostra
super + " [#@lyrics]"
end
end
song = Song.new(“Non c’e’”,“Pausini”,“180”)
puts song.mostra
puts “…”
kara = KaraokeSong.new(“pippo”,“pluto”,“100”,“1234567”)
puts kara.mostra
kara1 = KaraokeSong.new(“Azzurro”,“Celentano”,“200”,“Azzurro…il cielo
e’…”)
puts kara1.mostra
…Fine codice
Contrariamente a quello che mostra il libro,mandando in esecuzione il
programmino ottengo questo:

Song: Non c’e’ – Pausini – (180)

Song: – – () [1234567]
Song: – – () [Azzurro…il cielo e’…]

Domandona… :slight_smile:
Perche’ stampa solamente la parte finale e non stampa i campi name
,artist e duration?
Grazie per le eventuali risposte!!!


#2

Ciao

class KaraokeSong < Song
def initialize (name,artist,duration,lyrics)
super (name,artist,duration)
@lyrics = lyrics
end

devi chiamare super nel costruttore di KaraokeSong altrimenti non ti
inizializza gli attributi ereditati da Song.


#3

Pierpaolo S. wrote:

Ciao

class KaraokeSong < Song
def initialize (name,artist,duration,lyrics)
super (name,artist,duration)
@lyrics = lyrics
end

devi chiamare super nel costruttore di KaraokeSong altrimenti non ti
inizializza gli attributi ereditati da Song.

Adesso con il pezzo di codice cosi’ modificato:
---------------------- INIZIO
class KaraokeSong < Song
def initialize (name,artist,duration,lyrics)
super(name,artist,duration)
@lyrics = lyrics
end
def mostra
super + " [#@lyrics]"
end
end
--------------------------- FINE
funziona tutto.
Grazie per l’aiuto e la spiegazione!!!