## 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 ```