Alle info aangeduid met is niet noodzakelijk en enkel voor de super-geďnteresseerden
Java-experten
Cristina Boca: cboca@etro.vub.ac.be KE.2.23 tel: (02/629) 3951
Jan Lemeire: jan.lemeire@vub.ac.be 4K226 tel: (02/629) 2997
Algemene presentatie, Tower Configuration & Gebruiksaanwijziging (nog niet up-to-date)
Java documentatie (op deze website onder documentation)
Interessant voor project: Java spelregels (1 pagina), Java Summary (6 pagina's)
Gebruik Subversion om uw code the managen!! Vermijd kopieren van files en opgezadeld geraken met verschillende versies!
Indien nodig, installeer the Eclipse plugin zodat je kan updaten en committen via het Team submenu...
Printen van bytes in hexadecimaal stelsel:
System.out.format("%02x", 255); (met %x geef je aan dat er een argument volgt dat hexadecimaal geprint moet worden, de 02 zorgt ervoor dat je een nullen schrijft, bvb 0f ipv gewoon f)
De java Formatter klasse heeft uitgebreide mogelijkheden om waarden af te drukken.
Je kan zo ook formatteren naar string, bvb:
StringBuilder sb = new
StringBuilder();
Formatter
formatter = new Formatter(sb, Locale.US);
formatter.format("
%02x %02x %02x", 15, 91, 100);
String
string = sb.toString().toUpperCase(); // omzetten naar je string
System.out.println(string);
Hardware
manual of processor on interfaces (niet echt nodig)
WindMill tool voor het aanspreken van seriele poort
Modula-2 (lekker
old-school): also shows how to
communicate with the external world through the serial port of your PC
Java zelf installeren:
Installeer Eclipse, hiervoor moet je enkel de files downloaden en extracten in een folder (niets installeren dus). Er wordt een eclipse folder aangemaakt waarin je het programma vind.
Kies "Eclipse IDE version for Java Developers" of "Eclipse Classic" in de download sectie.
Installeer de niet-standaard RXTX library. Info hier. (voor Vista/Windows 7)
Installeer de niet-standaard javax.comm library onder de JRE folder van uw java (het pad naar je JRE zie je in Eclipse bij de JRE System Library van je projekt ):
zet win32comm.dll onder <JRE folder>/bin
zet javax.comm.properties onder <JRE folder>/lib
zet comm.jar onder <JRE folder>/lib/ext
refresh je Java project met F5, je ziet nu de library in je JRE
Installeer de Visual Editor tool om je GUIs grafisch aan te maken.
Assembler programma's (nog niet up-to-date)
Dit zijn de evaluatiecriteria:
Correctheid
Begrijpbaarheid: gebruik logische namen, indenteer correct (!!) en kuis je code op (!!).
Flexibiliteit: aanpasbaarheid & uitbreidbaarheid
Herbruikbaarheid: delen van je code kunnen gebruikt worden om andere problemen op te lossen.
Om dit te bereiken heb je ten eerste de principes van gestructureerd programmeren (zie Modula-2 project)
Duidelijke naamgeving (dan is niet veel documentatie nodig). Tip: gebruik Refactor => Rename in Eclipse om namen in 1x aan te passen over het gehele project.
Documenteer niet-triviale code. Er is wel gevraagd een handleiding te schrijven. Die moet sowieso de structuur van je programma uitleggen, voor bepaalde details kan je naar de code verwijzen. Er moet zeker een schema met de codestructuur gedocumenteerd worden!!
Geen redundantie, geen dubbele code.
Ten tweede heb je de mogelijkheden die Object-geöriënteerd programmeren biedt:
Encapsulatie: een object vormt een logisch geheel die een bepaald aspect van je probleem oplost. Je steekt niet alles in 1 object, maar verdeelt de verschillende verantwoordelijkheden over verschillende objecten (zo bekom je duidelijke en herbruikbare code). Je zorgt ervoor dat niet alle objecten met elkaar praten, want dan krijg je spagetticode.
Overerving (inheritance): gemeenschappelijke onderdelen worden in hoofdklasses gestoken, specificiteiten in subklasses. Zo bekom je herbruikbaarheid en flexibiliteit.
Polymorfisme & abstractie: een abstracte klasse of een interface definieren een abstract concept. Dit concept kan dan gebruikt worden in delen van je programma, die onafhankelijk van de concrete invulling van het concept worden! Dit zorgt voor de uitbreidbaarheid van je programma. Een interface definieert wat een bepaald deel van je programma moet kennen van een ander.
Tracht flexibiliteit en herbruikbaarheid te bereiken voor de volgende aspecten (vanaf aspect 6 gaat het om uitdagingen en om het behalen van onderscheidingen of zelfs felicitaties van de java-jury):
Scheiden toren - regelaar: Hoe je de torenelementen aanspreekt staat los van het regelsysteem. Die kunnen gemakkelijk en op 1 plaats aangepast worden. Die kunnen herbruikt worden in andere programma's. Ook het aanspreken van de seriele poort gebeurt in een aparte klasse (SerialPortCommunications).
Scheiden regelaar - GUI: Je regelprogramma bevat dus enkel de intelligentie van het regelen. Ze staat los van de details om torenelementen aan te spreken en ook los van de GUI. Je regelprogramma staat best los van de GUI, zodat ze zonder de GUI kan werken. De GUI moet natuurlijk wel het regelprogramma kennen.
Regelaar voor echte en simulatie: Je kan je regelprogramma gebruiken voor de echte toren of de simulatie of beide samen.
GUI voor echte en simulatie: De GUI van de simulatie kan ook gebruikt worden voor het tekenen van de toestand van de echte toren.
Meerdere regelaars: Je maakt het mogelijk dat meerdere regelprogramma's gemaakt kunnen worden waartussen je kan kiezen.
Herbruik regelaars: Je regelprogramma kan gebruikt worden voor een ander regelprobleem, bvb als termostaat van de verwarming.
Toevoegen devices: Nieuwe hydrodevices kunnen gemakkelijk toegevoegd worden. In de mate van het mogelijke. Dit is niet altijd 100% te bereiken. Je regelprogramma bvb is afhankelijk van de devices, of niet soms? Flexibiliteit is niet altijd mogelijk.
Voorbeeld 'Vrienden': wat is object-geöriënteerd programmeren?
Download de klasse Persoon en de klasse OefeningVrienden op je pc.
Start Eclipse , hij zal je vragen waar je je workspace wilt hebben. Maak een folder bij jou files (bvb 'java'). Vink 'Remember my decision' aan. Eclipse bied je dan een welkom-pagina met een introductie aan, je kan die skippen met (rechtsboven).
Maak een nieuw java projekt in Eclipse en geef het een naam. Eclipse maakt een folder met die naam aan. Download de files onder de map src in de map gemaakt door Eclipse.
Selecteer het projekt en druk F5 om te refreshen, jou files verschijnen nu onder Default Package. Open hem.
Run de file OefeningVrienden door ergens in de file te staan, rechtermuisknop te drukken en kies Run As ... Java Application.
Als hij naar de klasse met de main vraagt, kies OefeningVrienden.
Na de eerste keer, kan je het laatst gebruikt programma opnieuw runnen met de run button .
Uitbreiding vrienden-voorbeeld: Leugenaars en Ontkenners
Oefeningen:
Voeg de klasse Leugenaar toe aan je code van het eerste voorbeeld en maak van Piet een leugenaar.
Maak een subklasse Ontkenner voor een persoon die steeds ontkent iemand te kennen. Maak van bvb Elke een Ontkenner.
Print de vrienden-keten af: "Jan heeft als vriend Piet heeft als vriend xxx"
Aanspreken watertoren via de seriele poort
Installatie instructies:
Download de zip-file.
Start Eclipse , hij zal je vragen waar je je workspace wilt hebben. Maak een folder bij jou files (bvb 'java'). Vink 'Remember my decision' aan. Eclipse bied je dan een welkom-pagina met een introductie aan, je kan die skippen met (rechtsboven).
Extract de zip-file in je workspace folder. Dit zet drie java files in een nieuwe folder SerialPortCommunication.
Maak een nieuw java projekt in Eclipse en geeft het exact de naam SerialPortCommunication. Klik op OK en hij zal de java code automatisch laden.
Oefeningen:
Maak een nieuwe klasse waarbinnen je je seriele poort gaat testen. Doe dit met , geef je klasse een naam en vink "public void main(String[] args)" aan.
In de main van je klasse maak je een SerialPortCommunications object aan (geef een SerialParameters object mee), je opent een connectie en stuurt een commando. Probeer ook iets te lezen.
Om te runnen zet je cursor in de file, klik rechtermuisknop en kies Run As ... Java Application. Na de eerste keer, kan je het laatst gebruikt programma opnieuw runnen met de run button .
Voor een GUI-applicatie gaan we gebruik maken van Visual Classes van de Visual Editor (hier wat documentatie).
Maak een nieuwe klasse, maar kies Visual Class (via zwart pijltje naast ). Kies een Frame (is een applicatie met window) en selecteer "public void main(String[] args)".
Nu zie je je window grafisch en ook de gegenereerde code van de JFrame klasse.
Zet in de Properties tab (beneden) de Layout op null!
Voeg componenten toe via de Palette (zie je rechts van je scherm): knoppen, sliders, ...
Voeg akties toe aan de knoppen door met rechtermuis op het component te klikken en Events -> actionPerformed (of een andere actie) te kiezen. Je krijgt dan de mogelijkheid om eigen code toe te voegen.
Om de watertoren aan te spreken zal je weer een SerialPortCommunications object moeten aanmaken (in de constructor van de frame) en als attribuut van de frame zetten.
Zelf tekenen doe je door de void paint(Graphics g) van je JFrame te overschrijven. Deze methode wordt door Windows opgeroepen.
Een voorbeeld zie je in TowerSimulation hieronder.
Vergeet niet super.paint(g); op te roepen zodat je buttons en andere componenten getekend worden.
Installatie instructies:
Maak een nieuw java projekt in Eclipse.
Download de zip-file en extract de files in de src folder van de project folder (= naam van project) van je workspace folder.
Doen een Refresh (F5 wanneer je op het project staat, of via rechtermuismenu) in eclipse.
Onder default package van src van het projekt vind je de java code. Het hoofdprogramma om de code te runnen moet je zelf nog maken.
Oefeningen:
Start de simulator door een Tower object aan te maken, geef 1 of 2 HydroDevices mee, bvb BinPump en BinValve.
Maak een nieuwe klasse via met een main (vink aan bij het aanmaken van de nieuwe klasse). In de main zet je je code.
Je programma kan je dan runnen met de run button .
Maak ook een TowerGUI aan, deze zal de toren tonen. Aan de constructor zal je het Tower object moeten meegeven.
Start de simulatie met start() op te roepen.
De toren zal dan vol beginnen te lopen... De berekening van het waterverloop gebeurt nog niet goed.
Bereken de waterflow die de HydroDevice's genereren (in TowerSimulation.computeVolume()).
Let op: er is blijkbaar ook nog een fout met de tekens van de flows in de hydrodevices...
Maak een automisch regelprogramma die het peil van de watertoren op een gewenst peil houdt.
In je main zet je na het starten van de simulatie een lus waarin je het waterniveau opvraagt en je eigen hydrodevices bestuurt.
Een oneindige lus: while(true){ ... }
Opgelet: je programma zit in een oneindige lus en blijft dus voor altijd draaien. Stop het met de rode stopknop, rechts beneden: . Het kan zijn dat je nog oude programma's lopen hebt! Dit verifieer je met op de twee kruisjes van te drukken.
Opvragen van waterniveau is met de getWaterLevel() methode van het simulatie-object.
Het besturen van je hydrodevices is via hun setState(float state) methode
Eventueel kan je een nieuwe thread aanmaken, maar dit is niet echt nodig.
Maak een Thread object aan en geef een Runnable object mee. Een Runnable is een klasse met een run() methode, die methode wordt opgeroepen als je de thread start (met de start() methode).
Maak een random proportionele klep (gebruik de Random klasse) en hang ze aan de simulatie
Eventueel: zet die aan of af met een JToggleButton.
Maak een Proportionele pomp (zie PropValve).
Teken op de ChartPanel van je controle-applicatie in
functie van de tijd de waterflow en de toestanden van de hydrodevices.
Gebruik een teller voor de tijd of vraag de tijd op met de Calender
()
klasse.
Voeg een JTextField toe aan je GUI om het gewenst peil in te stellen. Implementeer het actionPerformed event, die geaktiveerd wordt telkens de user iets intikt en ENTER drukt.
Vraag de tekst op met getText(). Omzetten van een String naar een float doe je met Float.valueOf(String s)
Je moet wel een NumberFormatException opvangen met een try ... catch statement, voor als de gebruiker een ongeldig getal ingeeft. Je kan dan een error bericht aan de user geven met JOptionPane.showMessageDialog(null, "Geef geldig getal");.
Een leuk alternatief om de gewenste hoogte in te stellen is met een JScrollBar.
Test-oefening: hoe
goed is uw basiskennis van java? Voorspel de output van het
programma.
Tip: analyseer eerst hoe
de klasses met elkaar relateren.
Hier is nog eentje: Three Classes
Wie een iets grotere uitdaging wilt, kan dit programma bekijken (klasse-schema).
Meer over java:
GUI layout (zie onze Java doc)
plaatsen van componenten mbv. absolute posities
groeperen van componenten in een box
scheiden data - view
event listeners
Vector
inner classes
packages, class & jar files, import
applets
- Back to the top -