|
|
- ## 5 Luokan muuttujat
-
- **Tehtävä:**
-
- Luvun viimeisessä tehtävässä harjoitellaan luokkamuuttujien käyttämistä. Tehtävänäsi on luoda luokka Elain, johon tallennettaan jotain perustietoja eri eläimistä.
-
- Määrittele luokkaan kaksi luokkamuuttujaa edellinen ja maara, jotka alustetaan arvoon "" ja 0. Tämän jälkeen tee luokkaan rakentaja, joka ottaa argumentteina kaksi merkkijonoa, rotu ja nimi. Oliota luotaessa edellisen luodun olion rotu tallenetaan luokkamuuttujaan edellinen. Luonnin yhteydessä maara-muuttuja kasvaa yhdellä.
-
- Luokkaan tulee myös kolme metodia, tiedot, poista ja tilanne. Tiedot-metodi tulostaa "Olen [olion rotu] ja nimeni on [olion nimi]". Poista tulostaa "[olion nimi] poistettu!" ja vähentää luokkamuuttujaa maara yhdellä. Tilanne tulostaa "Eläimiä on tällä hetkellä [maara] kappaletta. Viimeisin rekisteröity eläin oli [viimeisimmän luodun olion rotu].".
-
- Tämän jälkeen kopioi seuraava ohjelmakoodi lähdekoodiisi; koodilla kokeillaan luokkamäärittelyn toimintaa:
-
- ```
- koira = Elain.new("koira","Rekku")
- kissa = Elain.new("kissa","Raatelija")
- lintu = Elain.new("kanarialintu","Tirppa")
- koira.tiedot()
- kissa.poista()
- lintu.tilanne()
- ```
-
- Toimiessaan oikein ohjelma tulostaa seuraavan tekstin ja tallentaa sen tiedostoon 9-4_tiedosto.txt
-
- Example output:
-
- ```
- Olen koira ja nimeni on Rekku!
- Raatelija poistettu!
- Eläimiä on tällä hetkellä 2 kappaletta.
- Viimeisin rekisteröity eläin oli kanarialintu.
- ```
-
- **Vastaus**
-
- ```
- #!/usr/bin/env ruby
- # coding: utf-8
-
- $_tiedosto = "9-4_tiedosto.txt"
-
- if (!File.exists?($_tiedosto))
- begin
- File.open($_tiedosto, File::RDWR|File::CREAT, 0644)
- rescue
- puts "Tiedostoon #{$_tiedosto} ei voida kirjoittaa"
- Process.exit(1)
- end
- else
- File.open($_tiedosto, "w+")
- end
-
- ##########
-
- class Elain
-
- @@edellinen = ""
- @@maara = 0
-
- def initialize(rotu, nimi)
-
- @nimi = nimi
- @rotu = rotu
- @@edellinen = rotu
- @@maara += 1
- end
-
- def tiedot
- lause = "Olen #{@rotu} ja nimeni on #{@nimi}!"
- puts lause; File.open($_tiedosto, "a").write(lause + "\n")
- end
-
- def poista
- lause = "#{@nimi} poistettu!"
- @@maara -= 1
- puts lause; File.open($_tiedosto, "a").write(lause + "\n")
-
- # Ei välttämättä tarpeellinen...
- ObjectSpace.define_finalizer(self, self.class.method(:finalize))
- end
-
- def tilanne
- lause = "Eläimiä on tällä hetkellä #{@@maara} kappaletta.\nViimeisin rekisteröity eläin oli #{@@edellinen}."
- puts lause; File.open($_tiedosto, "a").write(lause + "\n")
- end
-
- # Ei välttämättä tarpeellinen...
- def self.finalize(object_id)
- end
-
- end
-
- koira = Elain.new("koira","Rekku")
- kissa = Elain.new("kissa","Raatelija")
- lintu = Elain.new("kanarialintu","Tirppa")
- koira.tiedot()
- kissa.poista()
- lintu.tilanne()
- ```
|