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