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!
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!
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.
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!
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.
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.
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);
"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.