Hei!
Minulla on Java luokka pelikirjasto, se on kooste Java2D grafiikka käskyistä Java kontrolleista ja kaikenlaisista peli suunnittelua helpottavasta koodista.
Java tuntemukseni on kuitenkin kovin pinnallinen, yritin äsken selata Sun Java2D online tutoriaaleja koskien EXTENDS ja IMPLEMENTS.
Ongelmana on siis seuraava.
Minulla on Java luokka johonka yritän EXTENDS avulla liittää sekä APPLET että PELIKIRJASTO että ITSEPELILUOKAT luokat, kuitenkin EXTENDS mahdollistaa vain yhden liitännäisen ja loputtomia määriä ei luokkia voi ketjuttaa.
Kuinka kuuluu rakentaa koko Java ohjelman alustus, jotta sekä APPLET että PELIKIRJASTO että ITSEPELILUOKAT toimivat oikein.
Tarkoitus mieluusti että kaikki PELIKIRJASTON ja ITSEPELIEN metodit olisivat käytössä THIS. avulla, ilman että joutuisin rakentamaan erillistä THIS.PELIKIRJASTO. taikka THIS.PELINUMERO1. luokka rakennetta.
Mikä olisi oikea ja virallinen rakenne, olen ilman ATK alan koulutusta harrastamassa tässä.
//.....
Kiitos..
Hei,
Varmaan tiedätkin, että extends on luokan periyttämistä varten ja implements on rajapinnan periyttämistä varten.
Javassa et voi periyttää kahdesta eri luokasta. Jos teet applettia, tunge ohjelman "applettiominaisuudet" siihen Applet luokasta periytettyyn luokkaan ja varsinainen toiminnallisuus muihin luokkiin.
Niin, ja kannattaa sitten opetella olio-ohjelmoinnin perusteet ennen kuin tuohon periytystouhuun ryhtyy.
Extends!
Kuinka monta luokkaa voi ketjuttaa, varmaankin luokkien kokokin vaikuttaa, mitenkä on rajattu luokkien jatkuva extends.
Minulla on siis tarkoitus seuraava extends rakentaa ->
MainRoot johonka -> - Applet_1 - PeliKirjasto ( Applet_1 ) - Peli1 ( Applet_1 ) - PeliKirjasto ( Applet_1 ) - Peli2 ( Applet_1 ) - PeliKirjasto ( Applet_1 ) - Peli3 ( Applet_1 ) - PeliKirjasto ( Applet_1 ) - Peli4 ( Applet_1 ) - PeliKirjasto ( Applet_1 ) jne.. jne..
Onko rakenne virheellinen, taikka suoraan kysyttynä typerä ??
Tarkoitus useita kymmeniä pelejä yhteen Applettiin änkeä, ei toki ladata kaikkia kerrallaansa, mutta, en halua että asiakas joutuisi poistumaan appletista peliä vaihtaessa, jotenka kaikki on linkattava yhteen.
Kuinka olisi oikein rakentaa ketjutus ja toimivuus usealle samassa Appletissa toimivalle Java pelilleni ??
//.....
Kiitos..
Periytymissuhteita voi ketjuttaa niin monta kuin on tarvetta, mutta javassa et voi periä useampaa eri luokkaa.
Tee yksi appletista peritty (extends) pää apletti, joka hoitaa pelien valintatilan ja pakolliset ruudulle rendaukset. Sitten tee joukko eri Peliluokkia, joka perivät sun pelikirjaston ja jotka toteuttavat kyseisen pelin piirtämisen. Tee pääaplettiin systeemi, jossa kulloinkin valittu peli käytännössä hoitaa apletin piirtämisen (eli annat pelin piirtologiikalle apletin piirtoresurssit).
Toinen mahdollisuus on periyttää yksittäiset pelit esimerkiksi Panel- tai Canvas-luokasta ja lisätä tällainen peli aina appletin varsinaiseen pelitilaan. Myös tuo pelikirjasto sopisi silloin tähän väliin (esim. Canvas -> Lautapeli -> Shakki).
FooBat kirjoitti:
Periytymissuhteita voi ketjuttaa niin monta kuin on tarvetta, mutta javassa et voi periä useampaa eri luokkaa.
Extends!
En täysin tunne näitä Suomenkielisiä Java termejä, mutta, ilmeisesti sanoit että extends ketjua voi jatkaa niin paljon kuin Javalle on -Xmx muistia varattuna parametreissa.
Minulla jos ketjutan seuraavanlaisen ->
InitLuokka -Peli_1 -Peli_2 -Peli_3 .. -Peli_XX -PeliKirjasto -extends Applet
Minulle rakentuisi kaiken kaikkiaansa hieman vain arvioiden noin reippaasti yli 1000 luokkaa extends ketjuun,
Tämä on aika iso urakka näpertää, voiko joku vielä vahvistaa että tuo -Xmx sitten ratkaisee sen kuinka suuren extends ketjun voin huoletta ketjuttaa.
Minulla itselläni viime kerralla tuli heap virheilmoitus kun minulla oli 5 peliä ja pelikirjastoni ketjutettuna, mutta, ilmeisesti kyseessä oli sitten jokin toinen ohjelmointi virhe ajatus joka näpertelyni sitten katkaisi ja palasin perinteiseen yksi peli ja yksi luokka ketju ajatteluun.
Voiko joku vielä vahvistaa tämän että extends avulla voin ketjuttaa niin monta luokkaa kuin Java parametreissa on -Xmx muistia varattuna.
Tämä extendaaminen olisi minusta se helpoin ratkaisu, itse peli koodi kun ei muistia vie juurikaan, edelliset resurssit sitten täytyy nollata eri peleihin siirtyessä.
//.....
Kiitos..
Ei, ei noin.
Jokainen peli on yksi jalostettu lopputuote. Niinpä on loogista määrittää jokaista valmista peliluokkaa sanalla final. Yhden pelin ei kuulu periytyä toisesta pelistä, koska eihän esimerkiksi shakki ole millään tavalla tammen laajennos, vaan ne ovat kaksi erillistä peliä.
Koodin pitäisi siis mennä tähän tapaan:
public class Peli { // jos haluat, lisää extends Canvas tai extends Panel // Tänne pelien yhteiset asiat, esim. yhteiset piirtotoiminnot. } final public class Shakki extends Peli { // Tänne shakkipelin asiat. } final public class Tammi extends Peli { // Tänne tammipelin asiat. } public class Ohjelma extends Applet { // Tänne pelistä riippumattomat asiat, esim. pelin valinta ja aloitus. }
Extends!
Minulla on juuri noin tällä hetkellä tämä sivustoni kasattuna, lukuunottamati tuota final kohtaa.
public class MainLuokka extends Applet { //Täällä pelit alustetaan ja käynnistetään. Shakki__Main shakki = null; while ( onrun == true ) { if ( this.pelimoodi == this.shakki_init ) { shakki = new Shakki__Main ( this ); this.shakki.shakki_init ( this ); } if ( this.pelimoodi == this.shakki_running ) { this.shakki.shakki_run ( ); } // Samalla tavalla kaikki muutkin pelit. } } // Koodi rakenne esimerkki yhdestä pelistä public class Shakki__Main extends Shakki_100000_Alustus { public Shakki__Main ( Applet applet ) { GL = new PeliKirjasto ( applet ); } } public class Shakki_100000_Alustus extends Shakki_200000_PeliLogiikka { } public class Shakki_200000_PeliLogiikka extends Shakki_210000_PeliLogiikka_Kuningas { } // Tässä on vielä monta 210000 shakki luokkaa peli nappi logiikkoja varten, // joka johtaa extends Shakki_300000_ScreenUpdate public class Shakki_300000_ScreenUpdate extends Shakki_400000_Variables { } public class Shakki_400000_Variables { // Tänne muuttujat public PeliKirjasto__Main GL = null; Applet applet = null; } // Tämän kaltainen on pelikirjasto rakenne public class PeliKirjasto__Main extends PeliKirjasto_100000_JVG { } public class JVG extends public class Kontrollit extends public class Grafiikka2D extends public class Muuttujat
Tuosta sinun selkeämmästä esimerkistä tuo final, niin mitä se asettaa koodin kulkuun, vai onko se vain koristeena ??
Syy minkä takia minä lähdin rakentamaan tätä ketjutettua, koska yritän vähentää tuota valtavaa garbage collectia mikä minun sivustollani on kun Applet pyörii.
//.....
Kiitos..
kpzpt kirjoitti:
Extends!
Tuosta sinun selkeämmästä esimerkistä tuo final, niin mitä se asettaa koodin kulkuun, vai onko se vain koristeena ??
Syy minkä takia minä lähdin rakentamaan tätä ketjutettua, koska yritän vähentää tuota valtavaa garbage collectia mikä minun sivustollani on kun Applet pyörii.
Kiitos..
Olisi jo korkea aika tehdä niin kuin sinulle on jo aikoja sitten sanottu:
opettele vihdoinkin ne alkeet ohjelmoinnista, algoritmeistä ja oo-ohjelmoinnista.
ps. Millä työkalulla mittasit että garbage collection on niin suuri että juuri sitä pitää vähentää? Mitä lukemia työkalu antoi?
ps2. Edelleenkin katselmointi tarjous on voimassa, ilmeisestikkään ammattilaiskaverisi ei ole sitä tehnyt.
Koodin rakenne on yhä (useasta keskustelusta ja neuvosta huolimatta) niin pahasti pielessä, että en viitsi enää edes yrittää selittää. Kannattaisi tehdä ensin pienempiä ohjelmia ja miettiä jo niissä kunnolla, mikä olisi järkevä ja looginen luokkarakenne.
Koulutuksen puute ei ole syy olla opettelematta itse, ja on aivan naurettavaa tuoda esiin moinen tekosyy omalle osaamattomuudelle kerta toisensa jälkeen. Minullakaan ei ole alan koulutusta, enkä varmaan ole ainoa tapaus tällä sivustolla.
Jos ihan oikeasti tuntuu, ettet pysty oppimaan ilman virallista koulutusta, niin mene sitten kouluun äläkä valita. Muussa tapauksessa käy vaikka ostamassa kaupasta jokin Java-ohjelmointia käsittelevä kirja, jos et löydä netistä sopivaa opasta. Niin mukava kuin onkin auttaa yksittäisissä ongelmissa, ei tämä keskustelu mitenkään voi olla ikuista yhden henkilön yksityisopetusta (jopa yksityistukiopetusta) Java-ohjelmoinnin perusasioista – sitä varten ovat oppaat, kirjat ja oikeat oppilaitokset.
ok!
Öh, aika jyrkkää tekstiä osittain ??
Taisinkin aika väsyneenä aloittaa tämän ketjun, no, näinkin käy joskus..
//.....
Kiitos..
(Mod. huom: kpzpt poisti aika pitkän viestin.)
kpzpt kirjoitti:
En koe että olen millään tavalla alkeet tasolla ohjelmoinnissa enää
Kyllä tuo koodisi viestii aivan toista.
kpzpt kirjoitti:
Koodini rakenne ei ole pielessä, ohjelmoinnissa se mikä on mahdollista rakentaa toimivaksi, on jätetty yhdeksi ohjelmointi tavaksi kielen rakentajien puolelta.
Ei pidä paikkaansa. Se, että jokin on mahdollista, ei tarkoita, että se olisi järkevää. Javassa luokkia voi periyttää toisista, ja tälle onkin suuri määrä hyödyllisiä käyttötarkoituksia. Silti on aivan väärin väittää, että luokat pitäisi aina periyttää toisista.
Olet itse maininnut jo monta ongelmaa, joita koodissasi on. Tästä voi suoraan todeta, että koodisi rakenne on pielessä. Muutenhan mitään ongelmia ei olisi!
kpzpt kirjoitti:
Koulutuksen puute on iso asia eteenkin äidinkielen kohdalla
Tällä ei minusta ole mitään tekemistä ATK-alan koulutuksen kanssa. Muutenkin käsitykseni on, että suomen kieltä ja lukutaitoa opetetaan peruskoulussa – kai sentään sen olet käynyt? Ja jos ongelmasi todella on tekstin ymmärtämisessä, voisit yksinkertaisesti kysyä niitä epäselviä sanoja tai lauseita sen sijaan, että vain toistat samaa kysymystä uudestaan tai keksit lisää ihan muita kysymyksiä.
kpzpt kirjoitti:
Aika jyrkkää!
Niin varmasti on. Olet kysellyt täällä kai vuoden tai pari näitä Java-asioita, ja esimerkiksi tästä luokkien periyttämisestä on puhuttu ennenkin. On selitetty jo aikaisemmin, että tuollainen rakenne on aivan järjetön. Miksei koodisi silti kohennu? Mikä on vielä epäselvää? Kerro, niin selvitetään asia. Vastaukset käyvät yleensä sitä jyrkemmiksi, mitä pidempään samat virheet toistuvat neuvoista huolimatta.
Toistan vielä kerran: Esimerkiksi tuo shakki pitäisi toteuttaa yhden luokan (Shakki extends Peli) sisään. Tarvittavat apuluokat pitäisi tehdä erikseen vaikka Shakki-luokan sisään:
public final class Shakki extends Peli { private class Nappula { // yhden shakkinappulan tiedot, // ehkä nappulan piirto? } private class Lauta { // yhden shakkilaudan tiedot (pelitilanne) // ehkä piirtofunktiot? } // muut shakkiin liittyvät asiat (mm. pelivuorojen hallinta) }
kpzpt kirjoitti:
Tarkoitus mieluusti että kaikki PELIKIRJASTON ja ITSEPELIEN metodit olisivat käytössä THIS. avulla
Koodin tarpeeton lyhentäminen on huono tavoite, josta seuraa yleensä vain sotkua.
Extends!
Olen päätynyt rakentamaan sivustoni tuolla omalla tavallani jossa jokaiseen peli luokkaan rakennetaan vain yksi extends ketjutus, en koe että tämä olisi hidastava taikka muistia tuhlaava tapa, jotenka tämä on minulle sitten se oikea, kiitos kuitenkin kun tarjosit omaa, kenties virallisempaakin lähestymis tapaa.
public class PeliSivustoni extends Applet { Shakki__Main shakki = new Shakki__Main ( this ); Tammi__Main tammi = new Tammi__Main ( this ); Mylly__Main mylly = new Mylly__Main ( this ); } public class Shakki__Main extends Shakki_100000_Alustus { public Shakki__Main ( Applet applet ) { // Annetaan main applet peli luokkaan. } } public class Shakki_100000_Alustus extends Shakki_200000_Logiikka {} public class Shakki_200000_Logiikka extends Shakki_201000_Logiikka_Kuningas {} public class Shakki_201000_Logiikka_Kuningas extends Shakki_201XXX_Logiikka_LOPUTNAPITSAMOINKUINKUNINGAS public class Shakki_300000_RuudunPiirto extends Shakki_999000_Muuttujat {} public class Shakki_999000_Muuttujat { PeliKirjasto GL = new PeliKirjasto (); }
Minä koen että koodin seuraaminen on näin toteutettuna huomattavan helpompaa, kuin jos rakentaisin erillisiä luokkia jotka sitten olisivat missä lie sijoittuen, tämä ketjutus joka minulla on, on minusta todella hyvä ratkaisu.
En kysele enää extends asiaa, olen päätynyt tähän ratkaisuuni.
//.....
Kiitos..
kpzpt kirjoitti:
(viesti yllä)
Ei hyvää päivää. :D
Aih.. silmiin sattuu!!!
Nyt ihan oikeesti kannattais kpzpt:een ottaa käteen joku "java-ohjelmoinnin perusteet" kirja.
Ja lukasta tai vaihtoehtoisesti pyytää joku tulkkaamaan kohta jossa puhutaan periyttämisestä (väitän että lähes joka java-oppaassa tätä asiaa käsitellään).
Eikä varmasti pahaa tekisi lukea vähän rajapinnoistakin (interface).
Suunnittelumallejakin olisi syytä opetella.
http://en.wikipedia.org/wiki/Design_Patterns sivulla mainitaan teoksen nimi ja ISBN, suosittelen ostamaan tai lainaamaan kyseisen opuksen. Tulisi edes jotain järkeä noihin rakenteisiin.
Älkää olko noin lannistavia. Antaa kpzpt:n tehdä niinkuin haluaa, tuskin siitä on mitään haittaa muille kuin hänelle itselle.
Sitä paitsi, DailyWTF:ään tarvitaankin lisää hyvää materiaalia :D
Kyseisellä herralla tuntuu olevan sama metodi käytössä joka asiaan, ubuntu-foorumilla aina ensin itketään kun "olen vanha juntti" ja silti samaan tapaan kun täälläkin ei kuitenkaan ikinä ota vihjeistä vaariin. Parin vuoden jälkeen melkeen jo alkaa *ituttaa moinen idiotismi.
Koodissani vikaa ??
Mikä tuossa minun koodissani sitten olisi outoa taikka vialla, käsittääkseni se on ihan toimivaa Java koodia ??
Kirjoittakaa jotain lauseita jotta ymmärtäisin ??
Minun ohjelmointi kouluni kävin joskus MB julkaisujen kera 80 luvun keski ja loppu puolella, Spectrum ja MSX ja C64 koodin kera. myöhemmin on tuttuja ollut Turbo Pascal 5.5 ja Watcom 11 C++ sekä Visual 2003 C++ ja nyt viimein siis Sun Java.
-----
Lisänä sinulle Herra _Pete_ niin älä sinä enää ollenkaan vastaile minun viesteihini, sinä pyrit aina säännöllisin väliajoin olemaan loukkaava henkilökohtaiseen tasoon menevällä tavalla, minä ilmoitan tästä lähtein sivuston ylläpidolle joka kerta kun alat vääristelemään viestejäni taikka minun omaa persoonaani kirjoituksissasi, kiitän todella kun kerran tunnet minun muitakin aliaksiani myös Ubuntu foorumissakin, niin sovitaan että sinä et enää vastaile millään sivustolla minun aloittamiin ketjuihin, jos olet vain minua kohtaan tuollainen niin olet todella pelottava jos olet kaikkia kohtaan niin olet vastenmielinen, minä en enää käsittele sinun kirjoituksiasi.
Netissä ei pidä alentaa toisia, lisänä se että minä käytän tätä kiitos sanaa jokaisen viestini lopussa, niin, jo tämän tulisi olla sellainen tekijä joka estää alentavaan tapaan kirjoitetun vastailun sivistys sivustoilla.
Siispä unohda minut älä enää vastaile minun aloittamiin ketjuihin, taikka minun viesteihini, on inhoittavaa odottaa koska taas ilmaannut haukkumaan taikka alentamaan.
-----
Kiitos..
(Mod. huom: kooditagit ovat koodille, eivät leipätekstille.)
kpzpt kirjoitti:
lisänä se että minä käytän tätä kiitos sanaa jokaisen viestini lopussa
Turhaa sanahelinää jos se on jokaisen viestin lopussa ja silti viestien perusteella et vaikuta kiitolliselta...
Ole hyvä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.