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.

98 lines
2.8 KiB

4 years ago
  1. ## 5 Luokan muuttujat
  2. **Tehtävä:**
  3. Luvun viimeisessä tehtävässä harjoitellaan luokkamuuttujien käyttämistä. Tehtävänäsi on luoda luokka Elain, johon tallennettaan jotain perustietoja eri eläimistä.
  4. Määrittele luokkaan kaksi luokkamuuttujaa edellinen ja maara, jotka alustetaan arvoon "" ja 0. Tämän jälkeen tee luokkaan rakentaja, joka ottaa argumentteina kaksi merkkijonoa, rotu ja nimi. Oliota luotaessa edellisen luodun olion rotu tallenetaan luokkamuuttujaan edellinen. Luonnin yhteydessä maara-muuttuja kasvaa yhdellä.
  5. Luokkaan tulee myös kolme metodia, tiedot, poista ja tilanne. Tiedot-metodi tulostaa "Olen [olion rotu] ja nimeni on [olion nimi]". Poista tulostaa "[olion nimi] poistettu!" ja vähentää luokkamuuttujaa maara yhdellä. Tilanne tulostaa "Eläimiä on tällä hetkellä [maara] kappaletta. Viimeisin rekisteröity eläin oli [viimeisimmän luodun olion rotu].".
  6. Tämän jälkeen kopioi seuraava ohjelmakoodi lähdekoodiisi; koodilla kokeillaan luokkamäärittelyn toimintaa:
  7. ```
  8. koira = Elain.new("koira","Rekku")
  9. kissa = Elain.new("kissa","Raatelija")
  10. lintu = Elain.new("kanarialintu","Tirppa")
  11. koira.tiedot()
  12. kissa.poista()
  13. lintu.tilanne()
  14. ```
  15. Toimiessaan oikein ohjelma tulostaa seuraavan tekstin ja tallentaa sen tiedostoon 9-4_tiedosto.txt
  16. Example output:
  17. ```
  18. Olen koira ja nimeni on Rekku!
  19. Raatelija poistettu!
  20. Eläimiä on tällä hetkellä 2 kappaletta.
  21. Viimeisin rekisteröity eläin oli kanarialintu.
  22. ```
  23. **Vastaus**
  24. ```
  25. #!/usr/bin/env ruby
  26. # coding: utf-8
  27. $_tiedosto = "9-4_tiedosto.txt"
  28. if (!File.exists?($_tiedosto))
  29. begin
  30. File.open($_tiedosto, File::RDWR|File::CREAT, 0644)
  31. rescue
  32. puts "Tiedostoon #{$_tiedosto} ei voida kirjoittaa"
  33. Process.exit(1)
  34. end
  35. else
  36. File.open($_tiedosto, "w+")
  37. end
  38. ##########
  39. class Elain
  40. @@edellinen = ""
  41. @@maara = 0
  42. def initialize(rotu, nimi)
  43. @nimi = nimi
  44. @rotu = rotu
  45. @@edellinen = rotu
  46. @@maara += 1
  47. end
  48. def tiedot
  49. lause = "Olen #{@rotu} ja nimeni on #{@nimi}!"
  50. puts lause; File.open($_tiedosto, "a").write(lause + "\n")
  51. end
  52. def poista
  53. lause = "#{@nimi} poistettu!"
  54. @@maara -= 1
  55. puts lause; File.open($_tiedosto, "a").write(lause + "\n")
  56. # Ei välttämättä tarpeellinen...
  57. ObjectSpace.define_finalizer(self, self.class.method(:finalize))
  58. end
  59. def tilanne
  60. lause = "Eläimiä on tällä hetkellä #{@@maara} kappaletta.\nViimeisin rekisteröity eläin oli #{@@edellinen}."
  61. puts lause; File.open($_tiedosto, "a").write(lause + "\n")
  62. end
  63. # Ei välttämättä tarpeellinen...
  64. def self.finalize(object_id)
  65. end
  66. end
  67. koira = Elain.new("koira","Rekku")
  68. kissa = Elain.new("kissa","Raatelija")
  69. lintu = Elain.new("kanarialintu","Tirppa")
  70. koira.tiedot()
  71. kissa.poista()
  72. lintu.tilanne()
  73. ```