Ruby fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

2.5 KiB

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