-
07-10-2007, 11:08 #16Member
- Registered
- 10/02/07
- Location
- ?
- Posts
- 1,655
- iTrader
- 24 (96%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/6
Je ziet iets over het hoofd. De instance bedrag is een ANDERE klasse, niet de klasse die een add doet. Bedrag komt binnen en is dus een parameter variable. Dus het is wel degelijke een beter idee om bedrag.getEuroCent() te gebruiken.
no votes
-
-
07-10-2007, 12:56 #17Crew Member
- Registered
- 01/09/02
- Location
- Peutie
- Posts
- 7,664
- iTrader
- 0
- Mentioned
- 4 Post(s)
- Reputation
- 13/105
Het werkt hoor. Zijn code is niet fout. Het blijkt namelijk ook te werken in C# (zelf getest).
Of het beter of slechter is hangt vooral af van wat er met die private variabele gebeurt voor die met de get() functie wordt teruggegeven. Indien het een eenvoudige get() is die alleen de waarde teruggeeft zoals in dit voorbeeld is het qua tijd misschien aangeraden om rechtstreeks de private variabele aan te spreken.no votes
-
07-10-2007, 13:02 #18Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
neen, de instantie bedrag is een ander OBJECT. En in de meeste talen speelt encapsulatie zich af op klasse-niveau, niet op object-niveau.
Moest bedrag niet van de klasse Euro zijn, dan heb je gelijk.
En zelfs als het reference-variabelen zijn kan je beter rechtstreeks werken tyfius
. Je kan er toch vanuit gaan dat je binnen 1 klasse je je klassenvariabelen "goed" behandelt he, anders zit je zelfs met accessors in de problemen :/.
Het enige waar ik nut zie van binnen de klasse met die methoden te werken is bv. als je set echt "ingewikkeld" is en je die code anders toch maar zou herhalen, maar 2 lijntjes of zo zou ik direct inlinen ipv aan te roepen.no votes
-
07-10-2007, 19:31 #19
dit is wat ik heb voor alles:
maar mijn subtract klopt nog niet voor alle gevallenCode:public class Euro { private int euro ; private int eurocent ; //constructors public Euro () { euro=0; eurocent=0 ; } public Euro (int euro) { this.setEuro(euro) ; eurocent=0 ; } public Euro (int euro, int eurocent) { this.setEuro(euro) ; this.setEurocent(eurocent) ; } //getters public int getEuro () { return euro ; } public int getEurocent () { return eurocent ; } //setters public void setEuro (int euro) { this.euro=euro ; } public void setEurocent (int eurocent) { while (eurocent > 99) { eurocent = eurocent-100 ; euro ++ ; } this.eurocent=eurocent ; } //rekenen met 2 objecten public void addEuro (Euro bedrag) { int hulpv ; euro = euro + bedrag.getEuro() ; eurocent= eurocent + bedrag.getEurocent () ; if (eurocent > 99) { hulpv = eurocent/100 ; euro=euro+hulpv ; eurocent=eurocent % 100 ; } } public void subtractEuro (Euro bedrag) { euro = euro-bedrag.getEuro() ; eurocent = eurocent-bedrag.getEurocent () ; if (eurocent < 0 && euro>=0) { eurocent = eurocent + 100 ; euro -- ; } } //vergelijken van 2 objecten public boolean equals (Euro euro) { if(euro.getEuro() == this.getEuro() && euro.getEurocent() == this.getEurocent()) { return true; } else return false ; } //print aantal euro's en eurocenten in dit object public void print () { System.out.println("Aantal euro's: " +euro) ; System.out.println("Aantal eurocent: " +eurocent) ; } }
zo krijg ik ipv -2 cent -1 euro en 99 cent, of -109 cent ipv -1 euro en -9cent
zal er morgen wel eens naar zoeken als ik wat helderder ben van geest dan nu
(ook de plus klopt niet als je + een negatief getal doet zoals 5 euro + -90 cent ><)no votes
-
08-10-2007, 13:00 #20Member
- Registered
- 18/05/04
- Location
- antwerpen
- Posts
- 174
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/1
Raar dat het werkt volgens de private definitie zou het niet mogen, want private mag niet rechtreeks uitgelezen worden dit zijn OO encapsulation voorwaarden. Private is enkel gekend door de klasse zelf en kan door niemand aan de klasse gevraagd worden hiervoor dienen de getter en setters.
ook al is het op klasse en niet op object niveau, het is ook duidelijker als je getters gebruikt.no votes
-
08-10-2007, 17:40 #21Member
- Registered
- 31/07/02
- Location
- Kontich
- Posts
- 602
- iTrader
- 16 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
@daigon Dit werkt omdat je binnen de klasse Euro dingen vraagt aan een ander instantie van klasse Euro
@pieke
Lees hierboven nog eens het verschil tussen % en / (resp. rest bij gehele deling en gehele deling). Dit kan wel met een lusstructuur maar is zeker NIET aan te raden.Code:public void setEurocent (int eurocent) { while (eurocent > 99) { eurocent = eurocent-100 ; euro ++ ; } this.eurocent=eurocent ; }
1) vinD ik
2) Programmeren is voor een groot deel zelfstudie, zelf dingen uitzoeken is hier dus echt wel doodnormaal.
3) Ik vinD het wel straf dat je kan oordelen over de kwaliteit van de lessen terwijl je het basisconcept van een method nog niet doorhebt.When you're slapped, you'll take it and like it - Sam Spade
Make way for the bad guy! - Tony Montana
When a girl has a heart of stone, there's only one way to melt it. Just add Ice.
no votes
-
08-10-2007, 17:43 #22Member
- Registered
- 17/07/02
- Location
- Hasselt
- Posts
- 2,970
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Het werkt omdat die variable in dezelfde klasse is gedefinieerd. At compile time allesinds
. Maar ik zou ook met setters werken. Is alles behalve duidelijk.
Als ge die instance gaat gebruiken in een andere klasse gaat em klagen over visibility.If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilizationno votes
-
08-10-2007, 19:34 #23Member
- Registered
- 23/11/03
- Location
- Landeurp
- Posts
- 1,791
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 10/17
Hier moet ik Killgore bijtreden hoor. Als een getter/setter nog iets anders doet dan simpelweg een member teruggeven/wijzigen, dan gebruik je de getter/setter ook in de klasse zelf. Doet hij dat niet, dan spreek je de member rechtstreeks aan. Wat maakt het uit dat de ene instance zomaar in een andere instance van dezelfde klasse zijn members mag zitten rommelen? Het gaat tenslotte om dezelfde code.
no votes
-
08-10-2007, 20:00 #24
mja daarin heb je wel gelijk + we hebben nog geen while gezien
int hulpv ;
if (eurocent > 99) {
hulpv = eurocent/100 ;
eurocent = eurocent%(hulpv*100) ;
euro = euro + hulpv ; }
this.eurocent = eurocent ;
}
ik denk dat je zoiets bedoelt dus. die hulpv was voor het mezelf wat simpeler te maken.
heb ook ineens invoer beperkt tot enkel positieve getallen
no votes
-
08-10-2007, 20:33 #25Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
this.eurocent = eurocent % 100;
euro = euro + eurocent/100;
Die twee regels zijn in feite voldoende.
'a = a + b;' kan men trouwens verkort schrijven als 'a += b;'
Tweede regel wordt dan: euro += eurocent/100;no votes
-
08-10-2007, 22:45 #26Member
- Registered
- 17/07/02
- Location
- Sol System
- Posts
- 10,064
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/78
Nog nooit moeten refactoren zeker? Dan zal je merken dat werken via getters en setters doorgaans (de uitzonderingen bevestigen de regel) echt wel beter is dan rechtstreeks aanspreken van de variabelen
.
Voor het simplistische voorbeeld dat hier wordt gegeven maakt het inderdaad niet uit, voor complexere code zou ik echter steeds met getters en setters werken.PSN: dJeezBE - Delicious bookmarks
Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alienoPastafarian by choiceno votes

