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.

101 lines
2.5 KiB

4 years ago
  1. ## 4 Luokan perintä
  2. **Tehtävä:**
  3. Tässä tehtävässä harjoitellaan olemassaolevan luokan hyödyntämistä ohjelman tekemisessä ja luokan perinnässä.
  4. Ohjelmaa varten on määritelty tiedostoon "9-4b.rb" seuraava tiedonhallintaluokka:
  5. ```
  6. class Tietopankki
  7. def initialize(aseta = "ei tietoja")
  8. @tiedot = aseta
  9. end
  10. def muutatietoja(uusi)
  11. if uusi.length > 5
  12. @tiedot = uusi
  13. else
  14. puts "Virheellinen syöte"
  15. end
  16. end
  17. def kerrotiedot
  18. print @tiedot
  19. end
  20. def poistatiedot
  21. @tiedot = "poistettu"
  22. end
  23. end
  24. ```
  25. 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.
  26. 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.
  27. Tämän jälkeen kopioi seuraava ohjelmakoodi lähdekoodiisi; koodilla kokeillaan luokkamäärittelyn toimintaa:
  28. testi = LataavaTietopankki.new()
  29. testi.muutatietoja("Tietopankki on paras pankki.\nJa Lataava vielä parempi.\n")
  30. testi.kerrotiedot
  31. testi.lataatiedot
  32. testi.tallennatiedot
  33. Toimiessaan oikein ohjelma tulostaa seuraavan tekstin ja tallentaa sen tiedostoon 9-4_tiedosto.txt:
  34. Example output:
  35. ```
  36. Tietopankki on paras pankki.
  37. Ja Lataava vielä parempi.
  38. ```
  39. **Vastaus**
  40. ```
  41. #!/usr/bin/env ruby
  42. # coding: utf-8
  43. require "./9-4b.rb"
  44. $_tiedosto = "9-4_tiedosto.txt"
  45. class LataavaTietopankki < Tietopankki
  46. def initialize(tiedosto = $_tiedosto)
  47. @tiedosto = tiedosto
  48. end
  49. def tallennatiedot
  50. if (!File.exists?(@tiedosto))
  51. begin
  52. File.open(@tiedosto, File::RDWR|File::CREAT, 0644)
  53. rescue
  54. puts "Tiedostoon #{@tiedosto} ei voida kirjoittaa"
  55. Process.exit(1)
  56. end
  57. end
  58. if File.writable?(@tiedosto)
  59. File.write(@tiedosto, @tiedot)
  60. end
  61. end
  62. def lataatiedot
  63. if File.readable?(@tiedosto)
  64. @tiedot = File.read(@tiedosto)
  65. end
  66. end
  67. end
  68. testi = LataavaTietopankki.new()
  69. testi.muutatietoja("Tietopankki on paras pankki.\nJa Lataava vielä parempi.\n")
  70. testi.kerrotiedot
  71. testi.lataatiedot
  72. testi.tallennatiedot
  73. ```