Toon posts:

[JAVA] Variabelen veranderen in mainapplet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Howdoe !

Ik heb dus een soort interfaceje met een switch/case gedoetje in mijn 'mainapplet' genaamd Applet1.

Maar ik heb nu een klasse genaamd RapportOverzicht.

Ik wil vanuit RapportOverzicht de integer veranderen van de switch.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 switch (intTeller) { // TellerSwitchgedoe
    case 1: tfNaam.setVisible(false); // case 1: iemand is ingelogd.
          tfWachtwoord.setVisible(false);
          butLogin.setVisible(false);
          strBericht = " Welkom " + strNaam + " U bent ingelogt!";
          repaint();
          verbinding.closeConnection();
          overzicht1 = new RapportOverzicht();
          break;
    case 2: System.out.println("HOLLLAAAAAAAA CASE2");

          //intTeller = 0;
          break;

    }

Ik heb een methode gemaakt, genaamd verhoogTeller():
code:
1
2
3
 public void verhoogTeller(){
    intTeller++;
  }

Enig idee hoe ik die kan aanroepen vanuit mijn andere klasse ?

Applet1.verhoogTeller(); werkt niet :(

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik denk niet dat jij wil wat jij wil, want een switch waarde veranderen is niet echt standaard ;)

Verwijderd

Topicstarter
Naja, ik wil eigenlijk alleen vanuit die andere klasse bijvoorbeeld een methode kunnen aanroepen.
Ik heb mijn teller probleem nu wel opgeslost door de switch in een methode te stoppen, en mijn methode verhoogTeller start daarna die methode opnieuw.

Maar nu is mijn vraag; hoe kan ik mijn methode verhoogTeller() oproepen vanuit mijn klasse RapportOverzicht ?

TIA

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ook werkt een switch meestal over bekende constanten. Je gebruikt daar nu de 'magische nummer' 1 en 2 voor, waarvan de betekenis onduidelijk is als je de code bekijkt. Je moet het nummer daarom vervangen met een symbolische constante (dit is trouwens een Refactoring die beschreven staat in het boek "Refactoring" van Martin Fowler, zie blz 204).

Ook is de hele switch in feite evil. Zodra je switch gebruikt moet je nadenken of er geen polymorfie gebaseerde oplossing is.

Je wilt namelijk in een OO-taal als Java eigenlijk nooit werken met gevals-onderscheid. Bij gevalsonderscheid wil je dit onderscheid namelijk vaak op verschillende plaatsen maken. Zodra je een geval toevoegd is er al snel het gevaar dat je op 1 van deze plakken een geval vergeet.

Gevals-onderscheid kan je in een OO taal veel betere realiseren door de verschillende gevallen klassen te laten zijn die een generieke interface voor de situatie implementeren. Dit kan in bestaande klassen, maar eventueel kan je ook nieuwe klassen introduceren. Alle stukjes code die eerst switch gebruikten, gebruiken nu simpelweg de generieke interface en het toevoegen van gevallen vereist dus geen aanpassing van deze code. Dit is een typische situatie waarin polymorphisme (meer-vormigheid, het behandelen van meerdere vormen via hetzelfde stukje code)

Het gebruik van een switch-statement is daarom ook wel bekend als een 'bad smell'. Ook dit is te vinden in het boek van Martin Fowler: blz 82. De refactoring die je kunt toepassen (replace conditional with polymorphism) kan je vinden op pagina 255.

Het zal je niet ontgaan zijn dat dit boek dus een aanrader is ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
HovaCarlito: Maar nu is mijn vraag; hoe kan ik mijn methode verhoogTeller() oproepen vanuit mijn klasse RapportOverzicht ?
Je moet in een OO taal nooit denken in termen van 'hoe krijg ik het voor elkaar om daar die en die methode aan te roepen'. Je moet je applicatie opzetten uit klassen die logische concepten in je probleem vertegenwoordigen. Methoden maken onderdeel uit van deze klassen en klassen kunnen aan elkaar gerelateerd zijn. Via deze relaties kan je dan een methode uitvoeren op een ander object, maar dat zijn allemaal details van het grotere probleem waar jij zo te zien mee zit.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 06-09 19:42
Op woensdag 05 juni 2002 13:04 schreef HovaCarlito het volgende:
Howdoe !
Dat zeg je toch als je weggaat? ;)
Groeten is trouwens not-done hier, ook al is het vriendelijk bedoelt.
Enig idee hoe ik die kan aanroepen vanuit mijn andere klasse ?

Applet1.verhoogTeller(); werkt niet :(
Logisch; Applet1 is een klasse en je wil de methode aanroepen op een object. Als je niet begrijp wat ik nu zeg, wat het probleem is of in welke hoek je de oplossing moet zoeken, raad ik je aan om de eerste paar trails van Sun's Java tutorial (zie FAQ) door te nemen.
Pagina: 1