Ammattimaista java-koodausta

Terve!

Javaa on tullut pyöritettyä muutama vuosi, servlettejä, appletteja ja swing-applikaatioita on tullut tehtyä. Silti en ole ammattimainen koodari, sillä olen puurtanut yksikseni "sivuhommina" pieniä projekteja.

Haluaisin kuitenkin oppia koodaamaan ammattimaisemmin. En esimerkiksi vieläkään oikein ymmärrä, miten toisessa luokassa olevia metodeita/muuttujia tulisi käyttää. Luodako luokka tyyliin Luokka luokka = new Luokka (this), jolloin luokasta Luokka pääsee käsiksi Luokkaa kutsuneen luokan metodeihin/muuttujiin. Vai tehdäkö kutsuvan luokan metodit public-tyyppisiksi ja tehdä sitten import-lause Luokka-luokkaan.

Kumpi tapa on parempi ja kumpaa on syytä johdonmukaisesti käyttää? Jos käytän ensimmäistä tapaa, en saa hommaa pysymään kasassa, vaan jossain vaiheessa katoaa käsitys siitä, mistä mitäkin luokkaa on kutsuttu. Jälkimmäinen tapa on helpompi, mutta siinä joudutaan käyttämään static-tyyppisiä muuttujia/metodeita, mikä ei sovi joka paikkaan.

Osaisiko joku antaa linkin, mistä nämä asiat selviäisivät? Yritin googlata varmaan puoli päivää, mutta löysin vain irrallisia koodinpätkiä, en sitä miten isoja kokonaisuuksia hallitusti tehdään.

Osasinkohan selittää asiani oikein? Kiitos, jos viitsitte avittaa! Tuo edellä mainittu asia on tällä hetkellä päällimmäisenä, mutta kaikki vinkit hyvään ohjelmointitapaan kelpaavat!
71156
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

Sanotaan heti etten Javaa osaa yhtikäs yhtään, mutta PHP jonkin verran mut samalla tavalla siinäkin asiat tehdään joskin syntaksi hieman toinen.

Vilkaiseppas http://en.wikipedia.org/wiki/Singleton_pattern ja http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf noita yleensä käytetään jos halutaan käyttää toisesta luokasta toista luokkaa. Tietenkin on olemassa myös muita design pattern/suunnittelu malleja.

Tosin on syytä muistaa, että oikeanlaisella suunnittelulla ja pelkällä periytymisellä pärjää pitkälle ja sitä ei sovi unohtaa vaikka käyttäisi mitä design patterneja. Kun toinen luokka perii toisen niin silloin voit käyttää sen metodeja ja muuttujia.

Äänestä
  • Tsekkaanpa mitä tuolta löytyy. Kyllä mä sinänsä ne mekanismit tunnen, mutta miten homma pysyy hanskassa ja on helppo dokumentoida, se onkin toinen juttu. Mut kiitos, katsotaan mitä vinkkisi tuo tullessaan!

    Äänestä

Sillä ei ole mitään väliä miten tekee kunhan toimii. Voit käyttää sitä tapaa mikä toimii sulle parhaiten. Suunnittelupatternit ja muut hömpötykset on vain yliopisto-älyköille jotka ei ole ikinä mitään kaupallista ohjelmaa vääntäneetkään ja jotka saa rahaa siitä että pyörittelee hienoja termejä ja käsitteitä mahdollisimman hankalalla tavalla.

Summa summarum: älä mieti vaan tee.

Äänestä
  • Ei se noin mene. Homma katoaa lapasesta melko pian ja itsekään ei enää ymmärrä pari vuotta sitten tekemäänsä koodia - muista puhumattakaan.

    Tosin taisit vaan heittää pikku provon kehiin, eikö vain? No joo, hassua, mutta mä kyllä kaipaisin ihan oikeita ohjeita.

    Äänestä

hieman ihmetyttää tuo tapa, että luodaan luokan Luokka-olio ja sitten sen sisällä pitäis päästä kiinni kutsuneen luokan muuttujiin ja metodeihin?!?

Milloin sellaiseen tulee tarvetta?

Minusta homma pitäis mennä näin:

//Ollaan luokassa Nyt. Luodaan luokan Luokka-olio

Luokka luokka = new Luokka();

//Olioon luokka tarvitaan Nyt-luokan tietoja
//Tiedot haetaan/asetetaan luokkien julkisilla metodeilla

luokka.setAika(this.getAika());
luokka.teeJotain();
luokka.tulostaVastaus();

Luokka-olion ei tarvi päästä käsiksi "takaisinpäin" kutsuneeseen luokkaan, koska tiedot annetaan sille julkisilla metodeilla. Se sitten asettaa metodeille parametreina annetut arvot Luokka-olion luokkamuuttujien arvoiksi

Lisäksi se voi tarkistaa arvon oikeellisuuden ennen asetusta

public void setAika(int aika)
{
____if(aika >= 0)
____{
______this.aika = aika;
____}
____else this.aika = 0;
}

Teen aina luokan metodit publiciksi, jos ne tekevät jotain oliolle itselleen tai liittyvät siihen jotenkin.

esim. Auto kaara = new Auto();

kaara.kaasuta();

Jos metodi tekee jotain yleishyödyllistä (vaikka hakee tietokannasta), niin sitten teen sen staticiksi.

SqlResult result = Utilities.haeKannasta(String sqllause);

tai

float karvo = Utilities.laskeKeskiarvo(int[] luvut);

Äänestä
  • "Jos metodi tekee jotain yleishyödyllistä (vaikka hakee tietokannasta), niin sitten teen sen staticiksi."

    Mutta eikös tuossa tule ongelmia?
    Jos haluat hakea A-tietokannata jotain ja sitten B-tietokannasta myöskin. jne..

    Äänestä

  • E232 kirjoitti:

    "Jos metodi tekee jotain yleishyödyllistä (vaikka hakee tietokannasta), niin sitten teen sen staticiksi."

    Mutta eikös tuossa tule ongelmia?
    Jos haluat hakea A-tietokannata jotain ja sitten B-tietokannasta myöskin. jne..

    parempi esimerkki olis vaikka erikoismerkit stringistä poistava metodi tai vaikka metodi, joka laskee md5 hashin ja tekee tuloksesta base64-enkoodatun.

    Äänestä

Kommentoi aloitusta


Koo Dari kirjoitti:

Terve!

Javaa on tullut pyöritettyä muutama vuosi, servlettejä, appletteja ja swing-applikaatioita on tullut tehtyä. Silti en ole ammattimainen koodari, sillä olen puurtanut yksikseni "sivuhommina" pieniä projekteja.

Haluaisin kuitenkin oppia koodaamaan ammattimaisemmin. En esimerkiksi vieläkään oikein ymmärrä, miten toisessa luokassa olevia metodeita/muuttujia tulisi käyttää. Luodako luokka tyyliin Luokka luokka = new Luokka (this), jolloin luokasta Luokka pääsee käsiksi Luokkaa kutsuneen luokan metodeihin/muuttujiin. Vai tehdäkö kutsuvan luokan metodit public-tyyppisiksi ja tehdä sitten import-lause Luokka-luokkaan.

Kumpi tapa on parempi ja kumpaa on syytä johdonmukaisesti käyttää? Jos käytän ensimmäistä tapaa, en saa hommaa pysymään kasassa, vaan jossain vaiheessa katoaa käsitys siitä, mistä mitäkin luokkaa on kutsuttu. Jälkimmäinen tapa on helpompi, mutta siinä joudutaan käyttämään static-tyyppisiä muuttujia/metodeita, mikä ei sovi joka paikkaan.

Osaisiko joku antaa linkin, mistä nämä asiat selviäisivät? Yritin googlata varmaan puoli päivää, mutta löysin vain irrallisia koodinpätkiä, en sitä miten isoja kokonaisuuksia hallitusti tehdään.

Osasinkohan selittää asiani oikein? Kiitos, jos viitsitte avittaa! Tuo edellä mainittu asia on tällä hetkellä päällimmäisenä, mutta kaikki vinkit hyvään ohjelmointitapaan kelpaavat!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu