Page 2 of 2 First 12
  1. #16
    Twilkie's Avatar
    Registered
    10/02/07
    Location
    ?
    Posts
    1,655
    iTrader
    24 (96%)
    Mentioned
    0 Post(s)
    Reputation
    0/6
    Quote Originally Posted by killgore View Post
    This quote is hidden because you are ignoring this member. Show
    i
    toch wel zou schrijven als
    Code:
    addEuro(Euro bedrag)
    {
      eurocent += bedrag.eurocent;
      euro += bedrag.euro + eurocent/100;
      eurcent %=100;
    }
    Acessor methoden zijn voor buiten uw klasse. Binnen uw klasse die gebruiken is nogal lomp, traag & meestal useless.
    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  

  2. #17
    Tyfius's Avatar
    Registered
    01/09/02
    Location
    Peutie
    Posts
    7,664
    iTrader
    0
    Mentioned
    4 Post(s)
    Reputation
    13/105
    Quote Originally Posted by Twilkie View Post
    This quote is hidden because you are ignoring this member. Show
    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.
    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  

  3. #18

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by Twilkie View Post
    This quote is hidden because you are ignoring this member. Show
    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.
    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  

  4. #19

    Registered
    08/12/03
    Location
    Linden
    Posts
    4,560
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    dit is wat ik heb voor alles:

    Code:
    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) ;
          }
    }
    maar mijn subtract klopt nog niet voor alle gevallen
    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  

  5. #20

    Registered
    18/05/04
    Location
    antwerpen
    Posts
    174
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/1
    Quote Originally Posted by killgore View Post
    This quote is hidden because you are ignoring this member. Show
    ben er vrij zeker van dat dit in elke deftige oo-taal zo kan hoor .

    edit:
    Code:
    class Euro {
    
    	private int eurocent;
    	private int euro;
    	
    	public Euro(int euro, int eurocent)
    	{
    		this.eurocent = eurocent%100;
    		this.euro = euro+eurocent/100;
    	}
    	
    	public Euro addEuro(Euro bedrag)
    	{
    		this.eurocent += bedrag.eurocent;
    		this.euro += bedrag.euro + this.eurocent/100;
    		this.eurocent %= 100;
    		return this;
    	}
    	
    	public void printBedrag()
    	{
    		System.out.println("Bedrag: "+euro+" euro " +eurocent+ "eurocent");
    	}
    	
    	public static void main(String[] args) {
    		Euro a = new Euro(5,35);
    		Euro b = new Euro(5,99);
    		a.printBedrag();
    		b.printBedrag();
    		a.addEuro(b).printBedrag();
    		return;
    	}
    }
    werkt perfect .
    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  

  6. #21
    Ice's Avatar
    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
    Code:
         public void setEurocent (int eurocent) {
             while (eurocent > 99) {
                 eurocent = eurocent-100 ;
                 euro ++ ; }
             this.eurocent=eurocent ;
         }
    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.

    Quote Originally Posted by Pieke
    This quote is hidden because you are ignoring this member. Show
    Heb sinds dit jaar programmeerlessen maar de uitleg laat te wensen over tijdens de lessen. Er wordt amper iets van uitleg gezegd vindt ik, enkel als je vragen stelt bij oefeningen dan leggen ze het wel uit
    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  

  7. #22
    Emerxill's Avatar
    Registered
    17/07/02
    Location
    Hasselt
    Posts
    2,970
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/18
    Quote Originally Posted by daigon View Post
    This quote is hidden because you are ignoring this member. Show
    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.
    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 civilization
    no votes  

  8. #23
    forloRn_'s Avatar
    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  

  9. #24

    Registered
    08/12/03
    Location
    Linden
    Posts
    4,560
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by Ice View Post
    This quote is hidden because you are ignoring this member. Show
    @daigon Dit werkt omdat je binnen de klasse Euro dingen vraagt aan een ander instantie van klasse Euro

    @pieke
    Code:
         public void setEurocent (int eurocent) {
             while (eurocent > 99) {
                 eurocent = eurocent-100 ;
                 euro ++ ; }
             this.eurocent=eurocent ;
         }
    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.
    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  

  10. #25

    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  

  11. #26
    dJeez's Avatar
    Registered
    17/07/02
    Location
    Sol System
    Posts
    10,064
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/78
    Quote Originally Posted by killgore View Post
    This quote is hidden because you are ignoring this member. Show
    Daarnaast, gezien dit echt geen slechtere of onduidelijkere code geeft pas ik altijd het zo toe, vond het gewoon raar dat iedereen hier met accessors werkte :/.
    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 alieno
    Pastafarian by choice
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in