|
|
- ## 4 Luokan perintä
-
- **Tehtävä:**
-
- Tässä tehtävässä harjoitellaan olemassaolevan luokan hyödyntämistä ohjelman tekemisessä ja luokan perinnässä.
-
- Ohjelmaa varten on määritelty tiedostoon "9-4b.rb" seuraava tiedonhallintaluokka:
-
- ```
- class Tietopankki
-
- def initialize(aseta = "ei tietoja")
- @tiedot = aseta
- end
-
- def muutatietoja(uusi)
- if uusi.length > 5
- @tiedot = uusi
- else
- puts "Virheellinen syöte"
- end
- end
-
- def kerrotiedot
- print @tiedot
- end
-
- def poistatiedot
- @tiedot = "poistettu"
- end
- end
- ```
-
- Tehtävänäsi on tätä luokkaa apunakäyttäen luoda uusi luokka, jossa on metodi "tallennatiedot", joka kirjoittaa luokan tiedot-jäsenmuuttujan arvon tiedostoon 9-4_tiedosto.txt sekä metodi lataatiedot, joka lukee samannimisen tiedoston sisällön ja tallentaa sen muuttujaan.
-
- Anna luokalle nimeksi "LataavaTietopankki", ja toteuta metodit siten, että esimerkiksi tietojen lataamisyritys ilman tiedostoa ei aiheuta virhetilannetta, ja jos luettu tieto on alle 5 merkkiä, niin muuttujan arvoa ei vaihdeta.
-
- Tämän jälkeen kopioi seuraava ohjelmakoodi lähdekoodiisi; koodilla kokeillaan luokkamäärittelyn toimintaa:
-
- testi = LataavaTietopankki.new()
- testi.muutatietoja("Tietopankki on paras pankki.\nJa Lataava vielä parempi.\n")
- testi.kerrotiedot
- testi.lataatiedot
- testi.tallennatiedot
-
- Toimiessaan oikein ohjelma tulostaa seuraavan tekstin ja tallentaa sen tiedostoon 9-4_tiedosto.txt:
-
- Example output:
-
- ```
- Tietopankki on paras pankki.
- Ja Lataava vielä parempi.
- ```
-
- **Vastaus**
-
- ```
- #!/usr/bin/env ruby
- # coding: utf-8
-
- require "./9-4b.rb"
-
- $_tiedosto = "9-4_tiedosto.txt"
-
- class LataavaTietopankki < Tietopankki
-
- def initialize(tiedosto = $_tiedosto)
- @tiedosto = tiedosto
- end
-
- def tallennatiedot
-
- if (!File.exists?(@tiedosto))
- begin
- File.open(@tiedosto, File::RDWR|File::CREAT, 0644)
- rescue
- puts "Tiedostoon #{@tiedosto} ei voida kirjoittaa"
- Process.exit(1)
- end
- end
-
- if File.writable?(@tiedosto)
- File.write(@tiedosto, @tiedot)
- end
- end
-
- def lataatiedot
- if File.readable?(@tiedosto)
- @tiedot = File.read(@tiedosto)
- end
- end
-
- end
-
-
- testi = LataavaTietopankki.new()
- testi.muutatietoja("Tietopankki on paras pankki.\nJa Lataava vielä parempi.\n")
- testi.kerrotiedot
- testi.lataatiedot
- testi.tallennatiedot
- ```
|