Set ja Get aksessorimetodit

kyselijä22

Hei,

en oikein ymmärrä milloin kannattaa käyttää sekä Set että Get metodeja ja milloin vain Get metodia. Jos teen vaikkapa viinirekisterin johon tallennan viinin nimen, vuosikerran ja maun niin kannattaako minun käyttää sekä Set että Get metodeja. En oikein tajua miksei aina voisi käyttää sekä Settiä ja Gettiä, mutta meille on sanottu että siinä ei ole mitään järkeä.

Tätä asiaa en ole vielä tajunnut, toivottavasti joltakin löytyy tietoa asiaan. :)

5

882

    Vastaukset 5

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • teuro

      void set_arvo(tyyppi arvo);
      tyyppi get_arvo();

      ensimmäinen asettaa arvoksi arvo ja jälkimmäinen palauttaa annetun tyypin mukaisen arvon. Muutoin en tajua kysymystäsi. Mitä tarkoitat ettei kannata käyttää molempia. Kumpaakin aksessoria tarvitaan yleensä olio-ohjelmoinnissa. Toisaalta ohjelman kannalta on aivan sama mitä nimeä käytät asettamiseen ja palauttamiseen.

      • keksa

        Niin kuin edellinen jo kertoi setillä asetetaan muuttujan arvo ja getillä pyydetään muuttujan arvo.

        Miksi näitä yleensä sitten käytetään edes? Miksi ei vain käytetä suoraan muuttujaa?

        No niitä käytetään siksi, että niiden käyttämisellä voidaan estää ohjelmoijaa tekemästä tyhmiä virheitä. Kun tälle tielle on lähdetty, niin niitä on hyvä käyttää koko ajan vaikka jonkun muuttujan kanssa ei olisis tarvettakaan.

        Ei tarvi siis arpoa että pitääkö nyt käyttää suoraan muuttujaa vai ei, kun aina pitää käyttää niitä aksessoreja.

        Otetaan esimerkiksi vaikka lompakon saldo.

        private float saldo;

        public void setSaldo(float uusiSaldo);
        {
        if(uusiSalso > 0.0) this.saldo = uusiSaldo;
        else this.saldo = 0.0;
        }

        Nyt kun joku yrittää laittaa lompakon saldoksi miinusmerkkisen arvon, niin se ei onnistu, koska itse muuttuja on private ja setteri ei anna tehdä sitä. Jos muuttuja olisi public, niin siihen voisi syöttää suoraan roskaa ja "vääriä" arvoja. Setteristä voidaan heittää myös virhe, että yritit asettaa vääränlaisen arvon.

        Sitten varsinainen vastaus kysymykseen eli miksi joskus vain toinen. Siihen pätee oikeastaan sama logiikka. Estetään virheellisen tiedon syntyminen ja tyhmät virheet.

        public class Hemmo
        {

        private Date syntymapaiva;

        public Hemmo(Date pvm)
        {
        this.syntymapaiva = pvm;
        }

        public Date getSyntymapaiva()
        {
        return this.syntymapaiva;

        }
        }

        Nyt kun uusi Hemmo-olio luodaan, niin konstruktorissa annetaan Hemmon syntymapaiva. Hemmon syntymapaiva ei voi muuttua, joten miksi antaa mahdollisuus muokata sitä sen jälkeen kun Hemmo on luotu? Siksi annetaan vain metodi syntymapaivan pyytämiseen.

        Jos jotain ei saa muuttaa tai luokan käyttäjälle sitä ei tarvitse näyttää, niin piilota ne private-määreellä. Ei siis anneta mahdollisuutta käyttää luokkaa väärin.


      • knowledge$
        keksa kirjoitti:

        Niin kuin edellinen jo kertoi setillä asetetaan muuttujan arvo ja getillä pyydetään muuttujan arvo.

        Miksi näitä yleensä sitten käytetään edes? Miksi ei vain käytetä suoraan muuttujaa?

        No niitä käytetään siksi, että niiden käyttämisellä voidaan estää ohjelmoijaa tekemästä tyhmiä virheitä. Kun tälle tielle on lähdetty, niin niitä on hyvä käyttää koko ajan vaikka jonkun muuttujan kanssa ei olisis tarvettakaan.

        Ei tarvi siis arpoa että pitääkö nyt käyttää suoraan muuttujaa vai ei, kun aina pitää käyttää niitä aksessoreja.

        Otetaan esimerkiksi vaikka lompakon saldo.

        private float saldo;

        public void setSaldo(float uusiSaldo);
        {
        if(uusiSalso > 0.0) this.saldo = uusiSaldo;
        else this.saldo = 0.0;
        }

        Nyt kun joku yrittää laittaa lompakon saldoksi miinusmerkkisen arvon, niin se ei onnistu, koska itse muuttuja on private ja setteri ei anna tehdä sitä. Jos muuttuja olisi public, niin siihen voisi syöttää suoraan roskaa ja "vääriä" arvoja. Setteristä voidaan heittää myös virhe, että yritit asettaa vääränlaisen arvon.

        Sitten varsinainen vastaus kysymykseen eli miksi joskus vain toinen. Siihen pätee oikeastaan sama logiikka. Estetään virheellisen tiedon syntyminen ja tyhmät virheet.

        public class Hemmo
        {

        private Date syntymapaiva;

        public Hemmo(Date pvm)
        {
        this.syntymapaiva = pvm;
        }

        public Date getSyntymapaiva()
        {
        return this.syntymapaiva;

        }
        }

        Nyt kun uusi Hemmo-olio luodaan, niin konstruktorissa annetaan Hemmon syntymapaiva. Hemmon syntymapaiva ei voi muuttua, joten miksi antaa mahdollisuus muokata sitä sen jälkeen kun Hemmo on luotu? Siksi annetaan vain metodi syntymapaivan pyytämiseen.

        Jos jotain ei saa muuttaa tai luokan käyttäjälle sitä ei tarvitse näyttää, niin piilota ne private-määreellä. Ei siis anneta mahdollisuutta käyttää luokkaa väärin.

        else this.saldo = 0.0;

        Eikö tuossa pitäisi ennemmin heittää virhe...


      • keksa
        knowledge$ kirjoitti:

        else this.saldo = 0.0;

        Eikö tuossa pitäisi ennemmin heittää virhe...

        ei kannata varmaan "tuotantoon" tätä koodia heittää muutenkaan


      • nörttijussi
        keksa kirjoitti:

        ei kannata varmaan "tuotantoon" tätä koodia heittää muutenkaan

        Oli kyse mistä tahansa olio-ohjelmoinnin kielestä, niissä jokaisessa täytyy erikseen kysyä ja asettaa tietyilla metodeilla muuttujiin arvot. Tämä on kapseloinnin idea, eli olio peittää sisäisen toteutuksensa ja ainoastaan tarjotaan tietyt metodit joilla pääsee olion tietoihin käsiksi.

        Javassa käytetään gettereitä ja settereitä (metodeja), C#:ssa on taas näitä varten propertyt (ominaisuudet), jotka toimivat täysin javan ko. metodien kaltaisesti, siis eivät ole muuttujia. Tässä kohtaa toivoisi Sunin tekevän vastaavat javaan.

        gettereihin ja settereihin ei kannata tunkea logiikkaa, ne on vain tietojen asettamista ja hakemista varten. Logiikka kannattaa asettaa omaan metodiinsa. Getterien ja setterien osalta voidaan sanoa, että olio osaa kertoa tietonsa ja asettaa tiedot. Tämä on niiden ainoa tehtävä.

        Myös testauksen kannalta on järkevämpää, että logiikkaa on omissa metodeissaan joita testataan eikä getterissä ja settereissä.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nyt se syksy on sitten alkanut

      Esimerkiksi tänään sataa aamusta iltaan, ja nytkin.
      Maailman menoa
      55
      1022
    2. Minä en ole koskaan

      Rakastanut ketään toista yhtä paljon kuin sinua
      Ikävä
      98
      1004
    3. Tiesitkö? Jorma Uotisen EX-rakas on Helena Lindgren - Nämä ovat välit nyt: "Me ollaan..."

      Jorma Uotinen ja Helena Lindgren olivat avoliitossa v. 1982-1999. Pariskunta oli aikansa näyttävä julkkispari, missä i
      Kotimaiset julkkisjuorut
      21
      852
    4. Vähän pitää

      Kiusia ja näyttää
      Ikävä
      135
      802
    5. Anteeksi J-mies

      Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t
      Ikävä
      121
      786
    6. Olet nainen ollut vaikein rasti

      Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔
      Ikävä
      55
      774
    7. Kenen viisautta on ollut laittaa tie väärällä murskeella pilalle

      Kenen viisautta on ollut kun Siimeksen/Kylmänpurontie pantu pilalle kun on ajettu liian karkeaa mursketta. Rengasliikke
      Hyrynsalmi
      25
      659
    8. Taidat olla

      Luovuttanut jo minun suhteeni osalta?
      Ikävä
      45
      656
    9. Riittääkö mahkut

      Kaivattuusi 🤭.
      Ikävä
      50
      638
    10. Minä muistan

      Minä muistan sinut nauravana. Sellaisena, joka sai tavallisenkin hetken tuntumaan vähän kevyemmältä, kuin huoneeseen ol
      Ikävä
      45
      610
    11. Mä voisin rakastua noihin tähti silmiin

      Katseesi on niin lumoava nainen💚.
      Ikävä
      19
      607
    12. Jos tullaan toisiamme vastaan, niin

      pitäiskö pysähtyä ja onnitella?
      Ikävä
      46
      578
    13. Voisiko vielä välillemme jotain kehittyä

      Vai heihei ja ei nähdä enää.
      Ikävä
      35
      570
    14. Kuhmolainen opettaja tuomittu vainoamisesta

      https://yle.fi/a/74-20248184 ”Kuusikymppinen kuhmolaisnainen piinasi naapureitaan lähes kahdeksan vuoden ajan. Nainen
      Kuhmo
      13
      570
    15. Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille

      Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.
      Ikävä
      72
      558
    16. Koska Martina viettää aikaansa lapsiensa kanssa

      Äiti vaan juoksee miehen perässä Tallinnassa, Lontoossa, Turussa. Kyllä oli kätilö oikeassa, kun sanoi, että ei olisi ka
      Kotimaiset julkkisjuorut
      141
      555
    17. Ähtäri on taas TV: n ja radion ykkösuutinen

      Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast
      Ähtäri
      47
      548
    18. Mitä muuta on olemassa kuin lisääntyminen

      Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok
      Sinkut
      120
      536
    19. Tilanteenne

      Onko tilanteenne tällä hetkellä hyvä?
      Ikävä
      47
      515
    20. Pahkalassa tapahtuu

      Mitäs on tapahtunut yöllä pahkalan kerrostaloilla.oli poliisia ja ambulanssia taas vaihteeksi
      Parkano
      9
      513
    Aihe