Helper:n käyttö

helperit

"Kokemuksesta" tiedän että Helper:llä (Class Helper) voidaan "laajentaan" luokkaa.
Tehdä uusi, vaikkapa samanniminen metodi kuin luokassa jo on ja luokan tyyppi pysyy samana.

Onko näillä muita käyttötarkoituksia?

Mitä muita mielipiteitä sinulla on tästä ominaisuudesta.

15

108

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ainakin_näin

      Siinä pitää varoa, ettei toteuta kuitenkaan mitään ominaisuutta helperissä. Sen sijaan käyttöliittymä-kustomointi onnistuu tuossa: "ohjelmassa" on vain tuo perus-interface ja helper:llä tehdään sitten komentorivipohjainen, web-pohjainen ja GUI-liittymät päälle. Perinteisestihän on periytetty, mutta helper täyttää tässä tavallaan kentät kaavakkeesta..

    • periyttäjä

      Onko sitten periytyminen vanhanaikaista kun tälläinen helperi tuli käyttöön?

      • sotkun_välttämistä

        Ei. Periyttämällä vaan jää epäselväksi, saako periytettyyn luokkaan jatkaa ominaisuuksien toteuttamista. Helper:n kanssa sen voi aika helposti ajatella, että ei oikein sopisi.. tee miten tykkäät! :)


      • Periytyminen yleisesti on surkea rakenne ja lähes ainoa juttu missä se nyt on toiminut yhtään on lähinnä käyttöliittymäkomponentit.

        Eli jos haluaa kirjoittaa rakenteellisesti siistiä oliokoodia, periytymisen sijasta kannattaa kirjoitella interfaceja ja toinen asia sitten se, että pitää välttää gettereitä ja settereitä. Pitää ajatella asia niin, että käsketään oliota tekemään asioita ja ne pitäkööt datan omana tietonaan mahdollisimman paljon.

        Toki tuotakin pitää välttää, ja pyrkiä sitä ennen ratkomaan ongelmaa funktionaalisesti tai järjestelmällä työvaiheita kuin liukuhihnaa, eli vaikka dataflow patternia.

        Vasta kun nuo kaksi edellistä ratkontatapaa on tutkittu, ongelma ratkeaa viimeistään oliorakenteella kun vaan miettii huolella niitä olioiden välisiä kommunikaaio yhteyksiä. Yleisesti ottaen riippuvuudet niiden välillä pitäisi minimoida. Hyvä esimerkki riippuvuuksien minimoimisesta on esimerkiksi signals and slots malli.


      • keps

        Missä periytyminen on toiminut huonosti?

        Ite tykkään kyllä taas periyttää asioita aina mahdollisimman paljon, eli on kantaluokka jossa totetutetaan mahdollisimman paljon yhteisiä asioita, sitten perityissä luokissa on koodailtu vain ne eroavaisuudet ja peritty versio on koodimäärältään mahdollisimman pieni.

        Oma toteutus esim. käytännössä on raportointi missä tulostetaan kymmeniä erilaisia raportteja, perityissä versioissa on eroavaisuutena vain sql-haku ja mahdollisesti määritelty eri tyylitiedosto raportille.

        "Periyttämällä vaan jää epäselväksi, saako periytettyyn luokkaan jatkaa ominaisuuksien toteuttamista."

        No jättää sen metodin kokonaan kirjoittamatta perittyyn versioon jos se siellä ei saa toimia? Objektien tyypiä voi myös aina tarkistella if (x is TLuokkaX)


      • keps kirjoitti:

        Missä periytyminen on toiminut huonosti?

        Ite tykkään kyllä taas periyttää asioita aina mahdollisimman paljon, eli on kantaluokka jossa totetutetaan mahdollisimman paljon yhteisiä asioita, sitten perityissä luokissa on koodailtu vain ne eroavaisuudet ja peritty versio on koodimäärältään mahdollisimman pieni.

        Oma toteutus esim. käytännössä on raportointi missä tulostetaan kymmeniä erilaisia raportteja, perityissä versioissa on eroavaisuutena vain sql-haku ja mahdollisesti määritelty eri tyylitiedosto raportille.

        "Periyttämällä vaan jää epäselväksi, saako periytettyyn luokkaan jatkaa ominaisuuksien toteuttamista."

        No jättää sen metodin kokonaan kirjoittamatta perittyyn versioon jos se siellä ei saa toimia? Objektien tyypiä voi myös aina tarkistella if (x is TLuokkaX)

        "Missä periytyminen on toiminut huonosti?"

        Käytännössä joka paikassa. Siinä kun tulee tarpeeton kytkentä siihen kantaluokkaan ja näin ollen sen muokkaus menee vaikeammaksi.

        Että ehdottomasti tekee ennemmin niitä interfaceja jos oliokoodia kirjoittaa. Rakenne pysyy paljon parempana kun jättää perimisen, getterit ja setterit pois. Ja sitä oliorakennettakin tulisi välttää jos parempaakin löytyy.


      • kyssyy
        M-Kar kirjoitti:

        "Missä periytyminen on toiminut huonosti?"

        Käytännössä joka paikassa. Siinä kun tulee tarpeeton kytkentä siihen kantaluokkaan ja näin ollen sen muokkaus menee vaikeammaksi.

        Että ehdottomasti tekee ennemmin niitä interfaceja jos oliokoodia kirjoittaa. Rakenne pysyy paljon parempana kun jättää perimisen, getterit ja setterit pois. Ja sitä oliorakennettakin tulisi välttää jos parempaakin löytyy.

        Onko olio-ohjelmointi tätä nykyä vanhanaikaista?


      • kyssyy kirjoitti:

        Onko olio-ohjelmointi tätä nykyä vanhanaikaista?

        Ei. Se ei vaan ikinä ole ollut ensisijainen ratkaisumalli.

        Funktionaalisuus on ymmärretty varmaan 50-luvulta lähtien ideaaliseksi ratkaisumalliksi koska funktionaalisuus poistaa koodista kaikki sivuvaikutukset.

        Liukuhihna- ja oliorakenne tulivat molemmat samoihin aikoihin joskus 60-luvulla, ja unix arkkitehtuurissa juurkin ne pipet on olennainen juttu.

        oliorakenne alkoi oikeasti saada merkitystä ohjelmie laajentuessa ja erityisesti tapahtumapohjaisissa jutuissa mitä näkee esim. graafisissa käyttöliittymissä.

        Mutta, se ongelman ratkaisun järjestys mihin hyvässä koodissa on aina pyritty on funktionaalisuus->liukuhihna->oliorakenne. Ja tuossa järjestyksessä sivuvaikutukset muuhun koodiin kasvaa, eli hallittavuus kärsii, säikeistäminen vaikeutuu, on monimutkaisempi ja jne.

        Oliorakennekin tarvitsee asioiden huomioimista, että välttää niitä typeriä asioita kuten perimistä, getteriä ja setteriä mitkä lisää sivuvaikutuksia. Sitten jos ratkaisumalli menee oliorakennetta huonommaksi, koodi on jo kelvotonta spagettisotkua.

        --

        Nämä siis on matalan tason juttuja kuitenkin, korkeammalla tasolla palastellaan ongelmaa palveluihin ja käyttöliittymäkomponentteihin ja noita eritellään.

        On ihan hyvää harjoitusta yrittää optimoida koodin rakenne niin elegantiksi kuin mahdollista., mauttomuuksiin saakka.


      • keps

        Kuulostaa minun korvaan täydeltä pupulta tuo. Tai no kait se riippuu, että jos koodailee jotain käyttistä tai tosi matalantason juttuja C-kielellä, silloin oliot ei ole mahollisuus. Koodailun aloitin 1989 josta olio-ohjelmoitia vuodesta 1998. Oliomalli on vaan niin selkee, koska on helmpompi hahmottaa ongelman ratkaisut läehmmäksi tosielämän tilanteita. Olio-ohjelmointi ei periaatteessa eroa funktionaalisesta / proceduaalisesta lähestymistavasta muutoin kuin että otat instanssin luokasta jonka alaisuudessa nämä funktiot on, eli objekti on ikään kuin nimiavaruus näille funktioille, joita pystyt myös perimään ja kopioimaan, monipuolista, ihanaa ja mahtavaa :)

        Mutta meitä on moneen junaan, työpaikallakin yksi tykkää C-kielestä kuin hullu puurosta, vaikka olio-ohjelmointikin on hallussa, itsellä se on taas päinvastoin.


      • keps kirjoitti:

        Kuulostaa minun korvaan täydeltä pupulta tuo. Tai no kait se riippuu, että jos koodailee jotain käyttistä tai tosi matalantason juttuja C-kielellä, silloin oliot ei ole mahollisuus. Koodailun aloitin 1989 josta olio-ohjelmoitia vuodesta 1998. Oliomalli on vaan niin selkee, koska on helmpompi hahmottaa ongelman ratkaisut läehmmäksi tosielämän tilanteita. Olio-ohjelmointi ei periaatteessa eroa funktionaalisesta / proceduaalisesta lähestymistavasta muutoin kuin että otat instanssin luokasta jonka alaisuudessa nämä funktiot on, eli objekti on ikään kuin nimiavaruus näille funktioille, joita pystyt myös perimään ja kopioimaan, monipuolista, ihanaa ja mahtavaa :)

        Mutta meitä on moneen junaan, työpaikallakin yksi tykkää C-kielestä kuin hullu puurosta, vaikka olio-ohjelmointikin on hallussa, itsellä se on taas päinvastoin.

        "no kait se riippuu, että jos koodailee jotain käyttistä tai tosi matalantason juttuja C-kielellä, silloin oliot ei ole mahollisuus."

        Siis onhan se oliorakenne toki mahdollinen C-kielellä. Ohjelmointikieli ei vaan sitä suoraan tue mutta eihän se sitä estä.

        "Oliomalli on vaan niin selkee, koska on helmpompi hahmottaa ongelman ratkaisut läehmmäksi tosielämän tilanteita."

        Se vaan on edelleen heikompi tapa kuin funktionaalinen tai liukuhihnaratkaisu koska koodille tulee enemmän sivuvaikutuksia.

        Toki sillä on käyttötilanteita missä se toimii hyvin.


      • rekursio_kysymys
        M-Kar kirjoitti:

        Ei. Se ei vaan ikinä ole ollut ensisijainen ratkaisumalli.

        Funktionaalisuus on ymmärretty varmaan 50-luvulta lähtien ideaaliseksi ratkaisumalliksi koska funktionaalisuus poistaa koodista kaikki sivuvaikutukset.

        Liukuhihna- ja oliorakenne tulivat molemmat samoihin aikoihin joskus 60-luvulla, ja unix arkkitehtuurissa juurkin ne pipet on olennainen juttu.

        oliorakenne alkoi oikeasti saada merkitystä ohjelmie laajentuessa ja erityisesti tapahtumapohjaisissa jutuissa mitä näkee esim. graafisissa käyttöliittymissä.

        Mutta, se ongelman ratkaisun järjestys mihin hyvässä koodissa on aina pyritty on funktionaalisuus->liukuhihna->oliorakenne. Ja tuossa järjestyksessä sivuvaikutukset muuhun koodiin kasvaa, eli hallittavuus kärsii, säikeistäminen vaikeutuu, on monimutkaisempi ja jne.

        Oliorakennekin tarvitsee asioiden huomioimista, että välttää niitä typeriä asioita kuten perimistä, getteriä ja setteriä mitkä lisää sivuvaikutuksia. Sitten jos ratkaisumalli menee oliorakennetta huonommaksi, koodi on jo kelvotonta spagettisotkua.

        --

        Nämä siis on matalan tason juttuja kuitenkin, korkeammalla tasolla palastellaan ongelmaa palveluihin ja käyttöliittymäkomponentteihin ja noita eritellään.

        On ihan hyvää harjoitusta yrittää optimoida koodin rakenne niin elegantiksi kuin mahdollista., mauttomuuksiin saakka.

        Käsittääkseni tämä funktionallisuus käyttää aika paljon rekursiota?
        Eikö rekursio ole taas tapa hidastaa ohjelman suoritusta (ja kasvattaa suoritusaikaista kokoa)?


      • rekursio_kysymys kirjoitti:

        Käsittääkseni tämä funktionallisuus käyttää aika paljon rekursiota?
        Eikö rekursio ole taas tapa hidastaa ohjelman suoritusta (ja kasvattaa suoritusaikaista kokoa)?

        Ei tarvitse aina rekursiota mutta toki rekursio toimii funktionaalisesti.

        Hidastuminen sitten niin ja näin koska funktionaalinen koodi säikeistyy. Suorituskyky ei käytännössä ole mikään ongelma funktionaalisuudessa.


      • vielävähänymmällään
        M-Kar kirjoitti:

        Ei tarvitse aina rekursiota mutta toki rekursio toimii funktionaalisesti.

        Hidastuminen sitten niin ja näin koska funktionaalinen koodi säikeistyy. Suorituskyky ei käytännössä ole mikään ongelma funktionaalisuudessa.

        Esim. (while) silmukalla tehtynä tiedetään etukäteen paljonko silmukka vie muistia muttei tätä ei tiedetä rekursiolla.
        (Jossain vaiheessa silmukalla tehtyä koodia pidettiin parempana, suositeltavana)


      • vielävähänymmällään kirjoitti:

        Esim. (while) silmukalla tehtynä tiedetään etukäteen paljonko silmukka vie muistia muttei tätä ei tiedetä rekursiolla.
        (Jossain vaiheessa silmukalla tehtyä koodia pidettiin parempana, suositeltavana)

        Koodi vie ilman rajumpia kääntäjäoptimointeja ~suunnilleen sen verran paljon on kirjoittanut koodia. Käätäjäoptimoinnit voi sitten avata kirjoitetut whine silmukat auki jolloin ne vie enemmän.

        Rekursiolla näin ei taida käydä. Kaiken järjen mukaan paljon vaikeampaa kääntäjälle. Sen sijaan rekursio kuluttaa ajonaikaisesti muistia pinosta mitä enemmän niitä funktiota kutsutaan. Käytännössä kuitenkin vain tavuja, aina kun tulee funktiokutsu ja palaaminen sieltä vapauttaa sen muutaman tavun.

        Käytännössä käännetyn koodin viemää tilaa tai pinon viemää muistin kulutusta ei ole tarvinnut miettiä 80-luvun jälkeen.


    • vainOminaisuus

      Tämä taitaa olla vain syntaksin "kuorrutusta". Eli vain Pascalin "hieno" ominaisuus.

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

    Luetuimmat keskustelut

    1. Nurmossa kuoli 2 Lasta..

      Autokolarissa. Näin kertovat iltapäivälehdet juuri nyt. 22.11. Ja aina ennen Joulua näitä tulee. . .
      Seinäjoki
      79
      4468
    2. Vanhalle ukon rähjälle

      Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen
      Ikävä
      50
      3105
    3. Maisa on SALAKUVATTU huumepoliisinsa kanssa!

      https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663
      Kotimaiset julkkisjuorut
      135
      3091
    4. Mikko Koivu yrittää pestä mustan valkoiseksi

      Ilmeisesti huomannut, että Helenan tukijoukot kasvaa kasvamistaan. Riistakamera paljasti hiljattain kylmän totuuden Mi
      Kotimaiset julkkisjuorut
      400
      2179
    5. Purra hermostui A-studiossa

      Purra huusi ja tärisi A-studiossa 21.11.-24. Ei kykene asialliseen keskusteluun.
      Perussuomalaiset
      219
      1296
    6. Ensitreffit Hai rehellisenä - Tämä intiimiyden muoto puuttui suhteesta Annan kanssa: "Meillä ei..."

      Hai ja Anna eivät jatkaneet avioliittoaan Ensitreffit-sarjassa. Olisiko mielestäsi tällä parilla ollut mahdollisuus aito
      Ensitreffit alttarilla
      11
      1203
    7. Mitä sanoisit

      Ihastukselle, jos näkisitte?
      Tunteet
      76
      1197
    8. Joel Harkimo seuraa Martina Aitolehden jalanjälkiä!

      Oho, aikamoinen yllätys, että Joel Jolle Harkimo on lähtenyt Iholla-ohjelmaan. Tässähän hän seuraa mm. Martina Aitolehde
      Suomalaiset julkkikset
      30
      1064
    9. Miten meinasit

      Suhtautua minuun kun taas kohdataan?
      Ikävä
      63
      1056
    10. Miksi pankkitunnuksilla kaikkialle

      Miksi rahaliikenteen palveluiden tunnukset vaaditaan miltei kaikkeen yleiseen asiointiin Suomessa? Kenen etu on se, että
      Maailman menoa
      111
      983
    Aihe