Ducati: making mechanics out of riders since 1946
Verwijderd
Je kunt dus methoden die in de klasse spel staan ook gebruiken bij instanties van de klasse kaarten.
Wil je de methode setWaarden kunnen gebruiken op een instantie van de klasse spel, dan moet je die methode in de klasse spel zetten. Door middel van overerving kun je setWaarden dan ook in de klasse kaarten gebruiken.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Ducati: making mechanics out of riders since 1946
-------------------------Op vrijdag 12 oktober 2001 19:28 schreef minne het volgende:
Werkt dit niet
code:
1 2 Kaarten kaarten = new Kaarten(); kaarten.setWaarden();
Maar waarom wil je hem eigelijk vanuit Kaarten aanroepen, en niet vanuit een andere class? Je kan natuurlijk de method setWaarden() ook aan de class Spel toevoegen.
Suc6
Nee, dan krijg ik een stackOverFlow error
Ducati: making mechanics out of riders since 1946
Verwijderd
Je moet een aantal get- (en set-) methoden plaatsen in de klasse spel. Op deze manier kun je in alle andere klassen beschikken over waarden die staan in de klasse spel, zonder dat je het subklassen hoeft te maken.Op vrijdag 12 oktober 2001 20:15 schreef MayaFreak het volgende:
Dan kan ik alle int's etc. gebruiken in de klasse Kaarten
1
2
3
4
| public int getAantalSlagen() (voorbeeldje)
{
return aantalSlagen;
} |
Want een subklasse moet een uitbreiding zijn van zijn superklasse. Is dat niet zo, dan ben je fout bezig.
Dus kaart > harten > hartenaas =
en spel > kaart =
Verwijderd
umm.... de kaart hartenaas als object geinherit van harten?Op zaterdag 13 oktober 2001 12:30 schreef ptaverne het volgende:
[..]
Want een subklasse moet een uitbreiding zijn van zijn superklasse. Is dat niet zo, dan ben je fout bezig.
Dus kaart > harten > hartenaas =
en spel > kaart =
nee toch? zeg dat het niet waar is.
Inheritance is niet bedoeld om 'methoden te kunnen gebruiken', maar heeft primair als doel om objecten te verdelen in categorien en de gemeenschappelijke eigenschappen van zo'n categorie op 1 plek te kunnen implementeren en zo dus her te gebruiken.
De mogelijkheid om een methode aan te roepen heeft sowieso helemaal niets te maken het return-type.
Als je de klasse Kaarten hebt die een uitbreiding is van de klasse Spel en de klasse kaarten bevat een methode setWaarden(..) dan is het logisch dat deze methode niet bekend is in de klasse Spel. Het kan namelijk heel goed zo zijn dat je nog een uitbreiding van de klasse Spel schrijft die die methode niet heeft. De methode setWaarden is dus niet een methode van een Spel object, maar van het Kaarten Object.
Als je de methode setWaarden in Spel wilt kunnen gebruiken kan je twee dingen doen:
1. Maak een abstracte methode in Spel en implementeer deze in Kaarten. Merk op dat nu ook alle andere subklassen deze methode moeten implementeren.
2. Gebruik Push-Up Method om deze methode te verplaatsen vanuit Kaarten naar Spel. Uiteraard moet dat wel mogelijk zijn. Als setWaarden Kaarten specifieke functies gebruikt gaat dit feest niet door.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Kan je me vertellen hoe je dit doet?Op zaterdag 13 oktober 2001 12:47 schreef mbravenboer het volgende:
Als je de methode setWaarden in Spel wilt kunnen gebruiken kan je twee dingen doen:
1. Maak een abstracte methode in Spel en implementeer deze in Kaarten. Merk op dat nu ook alle andere subklassen deze methode moeten implementeren.
2. Gebruik Push-Up Method om deze methode te verplaatsen vanuit Kaarten naar Spel. Uiteraard moet dat wel mogelijk zijn. Als setWaarden Kaarten specifieke functies gebruikt gaat dit feest niet door.
Ducati: making mechanics out of riders since 1946
Ja, maar dat is niet erg zinvol. Lees gewoon de documentatie goed door. Een OO-taal (en elke taal in het algemeen) leer je niet door trial-and-error: oh als ik dat nu daar neerzet werkt het wel... Bekijk de inheritance principes, abstracte klassen, interfaces en dergelijke goed. Weet wanneer en op welke manier je inheritance toe past en waarom...MayaFreak: Kan je me vertellen hoe je dit doet?
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
----------------------Op maandag 15 oktober 2001 12:13 schreef mbravenboer het volgende:
[..]
Ja, maar dat is niet erg zinvol. Lees gewoon de documentatie goed door. Een OO-taal (en elke taal in het algemeen) leer je niet door trial-and-error: oh als ik dat nu daar neerzet werkt het wel... Bekijk de inheritance principes, abstracte klassen, interfaces en dergelijke goed. Weet wanneer en op welke manier je inheritance toe past en waarom...
k maar ik moet het morgen af hebben voor school dus.....
Ducati: making mechanics out of riders since 1946
Dus niks. Dan heeft hij alleen nog maar meer gelijk. Voor een schoolopdracht moet je weten waar je mee bezig bent, dat is het hele doel van die opdracht.Op maandag 15 oktober 2001 12:16 schreef MayaFreak het volgende:
k maar ik moet het morgen af hebben voor school dus.....
Het boeit niet DAT het werkt, het gaat erom dat JIJ begrijpt WAAROM 'ie werkt.
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!
ik denk dat het hier niet om de kaarten VAN een spel gaat, maar om een class VOOR kaartspelen (klaverjassen, hartenjagen, u know janozzOp vrijdag 12 oktober 2001 20:08 schreef Janoz het volgende:
hmm .. Kaarten een subclass van spel?? Dat mag je me ff uitleggen eigenlijk... Waarom zou een kaart een subclass van spel zijn... Het is wel een onderdeel van een spel, maar geen subclass...
AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!
Het is niet zo dat het mij niet boeit hoe die het doet, als ie het maar doet. Ik wil het zeker weten hoe het werkt, ik heb alleen heel erg weinig tijd nog. En het programma deed het zoiezoOp maandag 15 oktober 2001 12:17 schreef Gerco het volgende:
[..]
Dus niks. Dan heeft hij alleen nog maar meer gelijk. Voor een schoolopdracht moet je weten waar je mee bezig bent, dat is het hele doel van die opdracht.
Het boeit niet DAT het werkt, het gaat erom dat JIJ begrijpt WAAROM 'ie werkt.
Ducati: making mechanics out of riders since 1946
1. Als elk spel een methode setWaarden zou moeten hebben, maar de implementatie verschillend is: maak Spel abstract en voeg een abstracte methode setWaarden toe:
1
2
3
4
| abstract class Spel
{
public abstract void setWaarden(...);
} |
Deze methode implementeer je in de klasse Kaarten.
2. Als setWaarden generiek is voor alle spellen: verplaats de methode gewoon uit Kaarten naar Spel.
Denk goed na bij het gebruik van inheritance. Inheritance is niet bedoeld om 'bij methoden te kunnen', maar om bestaande klassen (blauwdrukken voor objecten) te kunnen uitbreiden.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Says it all, d8 ik zoOp maandag 15 oktober 2001 12:24 schreef mbravenboer het volgende:
Denk goed na bij het gebruik van inheritance. Inheritance is niet bedoeld om 'bij methoden te kunnen', maar om bestaande klassen (blauwdrukken voor objecten) te kunnen uitbreiden.
AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!
oke maar hoe doe je dit nu, dat heb ik nog nie gehad op schoolOp maandag 15 oktober 2001 12:24 schreef mbravenboer het volgende:
....
[b]Deze methode implementeer je in de klasse Kaarten.[b]
......
Ducati: making mechanics out of riders since 1946
Simpel zoals je nu al deed:MayaFreak: oke maar hoe doe je dit nu, dat heb ik nog nie gehad op school
1
2
3
4
5
6
7
8
9
| public abstract class Spel
{
public abstract void setWaarden(...)
}
public class Kaarten extends Spel
{
public void setWaarden(...)
} |
De methode in kaarten implementeert nu de abstracte methode in de klasse Spel. Je kunt nu geen instanties meer maken van Spel en alle sub-klassen van Spel zullen de methode setWaarden moeten implementeren.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
want ik moet in de Applet1 klasse (die Applet extends) een nieuwe Spel declareeren (Spel s = new Spel();)
Hoe werkt die push-up methode?
Ducati: making mechanics out of riders since 1946