APPLICATIEBOUW
6E COLLEGE: HET ONTWERPEN VAN EEN KLASSE, LEJOS DEEL 3
Onderdeel van SmartProducts
INHOUD COLLEGE 6
Het ontwerpen van een klasse {6}
Lijsten met ArrayList {7.3, 7.4}
LeJOS: Communicatie, SuperPro en
LcdDisplay
Opdracht 6
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
2
HERKANSERS: INSCHRIJVEN TENTAMEN
Inschrijven Osiris 28/5 tot 18/6 (sinds vorige week)
Is dit gelukt? Graag snel proberen!
Bij problemen kan ik (nu) nog actie ondernemen
1e jaars en ingeschreven voor Module 4?
Dan hoef je je niet in te schrijven voor toets
Oefenen voor toets?
Academicx: toetsen bij boek
Oefentoetsen+antwoorden Applicatiebouw
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
3
BESPREKING OPDRACHT 5
Gedrag 'FindWay‘… wanneer actief?
Wordt bepaald door takeControl() methode
Als de robot niet beweegt: return !pilot.isMoving()
Doen: om zich heen kijken…
Pseudo code gegeven!:
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
4
OBJECTEN AANMAKEN EN DOORGEVEN
Object pilot aanmaken
Object s aanmaken
DifferentialPilot pilot = new DifferentialPilot(5.6f, 12.3f,
Motor.A, Motor.C);
// declareer de sensoren die we gaan gebruiken
UltrasonicSensor s = new UltrasonicSensor(SensorPort.S3);
Behavior gedrag3 = new DetectObstacle(pilot, s);
Objecten pilot en s
doorgeven als parameter
aan constructor
'object' en 'variabele' worden vaak door
elkaar gebruikt.
Een object is een instantie van een class.
Een variabele
is een instantie van
een 5
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
basis-type.
BEHAVIOR CLASS
public class DetectObstacle implements Behavior {
Object aangemaakt
in hoofdprogramma,
wordt doorgegeven
aan dit object
UltrasonicSensor u;
DifferentialPilot pilot;
public DetectObstacle(DifferentialPilot p, UltrasonicSensor s) {
u = s;
pilot = p;
}
public boolean takeControl() {
// is de gemeten afstand 'dichtbij'?
return u.getDistance() < 45;
}
public void suppress() {
}
public void action() {
// Wat is de actie als we een obstakel waarnemen? We stoppen.
pilot.stop();
}
}
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
6
HET ONTWERPEN VAN EEN KLASSE
HOOFDSTUK 6 BOEK
Stappen (College 3):
Vergelijking:
Class = recept voor object
Boek: bouwtekening
1. Object analyseren
2. Klasse ontwerpen (wat is… wat kan… hoe?)
3. Klasse uitwerken (types attributen, parameters &
resultaat methoden)
4. Methoden invullen (body)
wat is ...
wat kan ...
een object
Boek: wat zijn de
verantwoordelijkheden?
en hoe ?
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
7
ONTWERPMETHODEN VOOR SOFTWARE
HST 5, 6 EN 7
Klasse diagram, mbv UML
Andere:
Functie decompositie
Data flows
State diagram (toestands
overgang diagram)
Flow chart (stroomschema) {5}
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
8
UML DIAGRAMMEN
HOOFDSTUK 6.2 BOEK
Datum
- dag:int
- maand:int
- jaar:int
Naam class
+ public
- private
Type achter de :
class-variabelen
(eigenschappen)
+ getDag():int
+ getMaand():int
Methoden
+ setDag( dag:int )
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
9
UML: UNIFIED MODELING LANGUAGE
VOORBEELDEN VAN UML DIAGRAMMEN
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
10
OBJECTEN MAKEN: VEEL VERSCHILLENDE BALLEN
BASIS: PARAGRAAF 2.5.3, MEER: 6.6
Constructor: bepaalt invulling
eigenschappen (class-variabelen)
Bal
Bal
Bal
Bal
b1
b2
b3
b4
=
=
=
=
new
new
new
new
Bal(10, Color.orange, 10, 20 );
Bal(20, Color.blue, 20, 25 );
Bal(8, Color.green, 30, 30 );
Bal(5, Color.red, 5, 30 );
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
11
EEN CONSTRUCTOR
BOEK: BASIS: PARAGRAAF 2.5.3, MEER: 6.6
Speciale methode die waarden attributen
invult
Bal {
int x, y;
Color kleur;
Bal(int w, int h) { … }
paintComponent();
beweeg();
int getX();
int getY();
}
Class definitie
(recept)
4x
1x
2x
3x
new
Bal {
Balint{ x, y; [20,25]
x, y; [10,20]
kleur; [blue]
Balint{Color
Color
kleur;
Bal(int
w, [orange]
int h) { … }
Bal int
{ x, y; [5, 30]
Bal(int
w,
int
h) { … }
paintComponent();
Color
kleur;
int x,
y; [30,
30] [red]
paintComponent();
beweeg();
Bal(int
w,[green]
int h) { … }
Color
kleur;
beweeg();
int
getX();
paintComponent();
Bal(int
w, int h) { … }
intint
getX();
getY();
beweeg();
paintComponent();
int
getY();
}
int getX();
beweeg();
}getY();
int
int getX();
}
int getY();
}
In geheugen zijn 4 stukken
gereserveerd, waarden class-variabelen
zijn allemaal verschillend
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
12
Opdracht 4b:
stuiterende
ballen
MEERDERE CONSTRUCTORS
BOEK: 6.6.2
Bal met vaste waarden attributen
Bal met ingestelde waarden attributen
public class Bal {
int x, y;
Color kleur;
public Bal() { // constructor 1
x = 0; y = 0;
kleur = Color.blue;
}
public Bal(int x, int y, Color kleur) { // constructor 2
this.x = x;
this.y = y;
this.kleur = kleur;
}
}
Aanroep:
Bal b1 = new Bal();
Bal b2 = new Bal(20, 25, Color.blue );
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
13
THEORIE:
VAN DOMEINKLASSE TOT IMPLEMENTATIE
HOOFDSTUK 7 BOEK
Boek: voorbeelden van ontwerp tot
uiteindelijk resultaat (programma)
Domeinmodel: relaties tussen set klassen
Relaties kan je weergeven in UML mbv.
klassendiagram
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
14
LIJSTEN: ARRAY
Lijst van primitive typen
Bijv. int, double
Altijd initialiseren met new
Class voor het bijhouden van ‘universele’
lijsten: ArrayList
// declaratie lijst van 4 integers:
int[] dout = new int[4];
// eerste element in lijst krijgt een waarde:
dout[0] = 0;
// Test de LED's door ze 1 voor 1 aan te doen:
for (int i = 0; i < 4; i++) {
dout[i] = 1;
superPro.write(dout);
Tools.delay(1_000); // wacht 1 sec.
}
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
15
ARRAYLIST
PARAGRAAF 7.3, 7.4 BOEK
Opdracht 4b:
stuiterende
ballen
Lijsten van objecten bijhouden
Opdracht 6: zie Controller
In deze lijst
mogen alleen objecten
van type Bal
Methoden:
add(Object)
get(int)
size()
// Lijst met alle ballen in het Panel:
ArrayList<Bal> ballen;
// Maak een nieuwe bal:
Bal b = new Bal();
// Voeg de Bal toe aan de lijst met ballen:
ballen.add(b);
// Haal bal nummer 5 uit de lijst:
Bal b = ballen.get(5);
// Hoeveel ballen zitten
er inIndustrieel
de lijst?:
Applicatiebouw,
Ontwerpen
5-6-2014
System.out.println("Aantal ballen: "+ballen.size() );
16
ARRAYLIST
VOORRAADBEHEER: CONTROLLER OPDRACHT 6
ArrayList<Product> producten; // lijst van producten
// voeg nieuw Product toe aan de lijst:
producten.add(new Product(name, prijs));
private boolean controleerBetaling() {
// Haal het product uit de lijst:
Product p = producten.get(gekozenItem);
// Als het saldo hoger of gelijk aan de prijs van het gekozen items is,
// geven we accoord voor de betaling:
if (saldo >= p.getPrijs()) {
return true;
}
gui.displayMessage("Onvoldoende saldo");
In opdracht: check methoden van
return false;
de class Product
om de naam en de prijs van een
product op te vragen
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
17
Opdracht 4b:
stuiterende
ballen
ARRAYLIST
Lijst doorlopen mbv for-each lus:
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Teken alle ballen door van elke bal
// de paintComponent() aan te roepen:
for (Bal b : ballen) { // for-each
b.paintComponent(g); // teken de bal
}
}
for-each lus: paragraaf 7.3.8 boek
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
18
/** … */
DOCUMENTATIE
PARAGRAAF 7.7 BOEK
Commentaar
toevoegen
/* … */ of
//
Javadoc
Speciale opmaak
commentaar
Voor documentatie &
publicatie: /** … */
Block tags: @author,
@param …
/**
* Uitleg over het doel van MijnClass
* @author F. van Slooten
*
*/
public class MijnClass {
/**
* Uitleg over mijnMethode
* @param parameter is een getal voor de methode
*/
public void mijnMethode(int parameter) {
}
}
Erg belangrijk als je met een team software
ontwikkelt! Maar ook voor jezelf (later)
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
19
JAVADOC IN ECLIPSE
Beweeg je muis
boven een methode
Commentaar toevoegen in Javadoc-formaat:
Javadoc
verschijnt
Type boven methode:
/** [ENTER]
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
20
COMMUNICEREN MET NXT
1 APP: OP LAPTOP, GEBRUIK NXT
Maak een LeJOS PC
Project
LeJOS PC Project heeft
‘ingebakken’ communicatie
Voorbeeld project
LeJOS_PC_ShowColor
Gaan we gebruiken bij
opdracht 7
Voorwaarde: er moet een
communicatiekanaal zijn
(werkende Bluetooth
verbinding of USB)
// Lees de sensor uit:
int kleur = colorsensor.getColorID();
// Zet kleurnummer om naar een Color:
Color bg = getColorFromIndex(kleur);
// Stel achtergrond van het panel in met de kleur:
if (bg!=null) panel.setBackground(bg);
LeJOS PC Project: programma draait
op PC en bestuurt/gebruikt NXT
LeJOS_PC_ShowColor in ZIP-file
Communicatie.ZIP
(Colleges/voorbeelden)
COMMUNICATIE PROGRAMMA
2 APPS OP LAPTOP <> NXT
Voorbeelden LeJOS:
PC
LeJOS NXT Project: programma draait
op NXT en communiceert met PC
Java Project: programma draait op PC
en communiceert met NXT
NXT
In ZIP-file Communicatie.ZIP
(Colleges/voorbeelden)
LEJOS: SUPERPRO-BOARD
AANSLUITINGEN
Aansluiting NXT
4x analoge ingang
a0…a3
8x digitale poort
(in/uit) b0…b7
Voedings uitgangen
3, 5, 9V
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
23
SUPERPRO-BOARD
DIGITALE IN/UITGANGEN EN ANALOGE INGANGEN
HiTechnic SuperPro Experimenters Handbook
Voorbeelden handbook in Java
NxtJLibA bibliotheek, API
Deel1: declaratie+instellen
// Declaratie van variabelen en objecten voor het SuperPro-board:
NxtRobot robot = new NxtRobot();
SuperProSensor superPro = new SuperProSensor(ch.aplu.nxt.SensorPort.S1);
// ch.aplu.nxt.SensorPort.S1 is de NxtLib variant van de SensorPort
robot.addPart(superPro);
int[] din = new int[8];
int[] dout = new int[8];
int[] ain = new int[4];
int level;
// stel poort 0-3 in als uitgangen, poort 4-7 ingangen:
int[] ioControl = { out, out, out, out, in, in, in, in };
superPro.setDIO(ioControl);
Meer uitleg in opdracht 6
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
24
SUPERPRO-BOARD
DIGITALE IN/UITGANGEN EN ANALOGE INGANGEN
Uitvoer: bijv. LEDs aanzetten
Uitlezen digitale en analoge poorten
Deel2: lezen waarden en aansturen uitgangen
// lees analoge en digitale waarden:
superPro.read(ain, din);
level = ain[0]; // waarde potmeter aangesloten op poort a0
// als knop 4 ingedrukt
if (din[4] == 1) {
if (dout[0] == 0) //
dout[0] = 1;
else
dout[0] = 0;
}
is:
als LED op a0 uit is:
// gaat ie aan
// anders uit
// schrijf waarden naar SuperPro (aansturen uitgangen):
superPro.write(dout);
Opdracht 6: instellen muntgeld
met draaiknop (potmeter):
geld = 0;
if (level<300) {
geld = 10;
} else if (level<600) {
geld = 20;
} else {
geld = 50;
}
Voorbeeld: opdracht 6
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
25
EXTERN LCD DISPLAY
Class LcdDisplay
Meegeleverd met opdracht 6
// Initialiseer het externe display aangesloten op
// poort 2 van de NXT :
LcdDisplay externDisplay = new LcdDisplay(lejos.nxt.SensorPort.S2);
// Tekst die we op het externe display gaan laten zien:
String displayText = "Hallo Wereld!";
NxtJLibA bibliotheek heeft ook een
SensorPort class,
dus zo maken we onderscheid
// Stuur de tekst naar regel 1 van het externe display:
externDisplay.sendLine(1, displayText);
// 2e variant van sendLine() methode, met x,y positie van tekst:
externDisplay.sendLine(2, 6, displayText);
Meer weten over methoden?
Gebruik JavaDoc!
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
26
OPDRACHT 6
Prototype gebruikersinterface voor een
frisdrankautomaat bouwen mbv. SuperPro
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
27
MONITOREN VAN DE KNOPPEN
OPDRACHT 6
Methode maken voor uitlezen knoppen
Taak voortdurend blijven doen, dus
herhalings-lus
Als knoppen niet goed reageren: korte
pauze inlassen
while (!Button.ENTER.isDown()) {
// controleren knoppen...
// als knop 4 ingedrukt is:
if (din[4] == 1) {
// ...
}
// Programma 200ms (=0,2 sec) laten wachten:
Delay.msDelay(200);
}
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
28
MODEL, VIEW, CONTROLLER
Model
Controller
Opdracht a/b
Verschillend:
a: Hardware UI
b: Windows/Java UI
Product
Controller
View
SuperPro
Sensor
(ch.aplu.nxt)
Opdracht a/b
hetzelfde
AutomaatUI
LcdDisplay
NXT
Boek: 4.10, 4.11 en 10.9
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
29
OPDRACHT: KLASSE ONTWERPEN
GOED LEZEN!, ZIE OOK PARAGRAAF 7.2.1, TEKST-ANALYSE
Naam van de class
Wat is het type van een naam??
tekst… dus: String
Eigenschap = class variabele
Type van de class variabele
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
30
SOORTEN METHODEN
PARAGRAAF 4.9.4 BOEK
Opdacht: “Voeg methoden toe waarmee de
eigenschappen opgevraagd kunnen
worden”
Methoden die attributen
afgeven (get) of instellen (set)
Getter, Setter
Handig: automatisch maken
Klik binnen class
Kies Source > Generate
Getters and Setters
Applicatiebouw, Industrieel Ontwerpen
class variabele
subtotaal
is attribuut
of eigenschap
5-6-2014
31
AAN DE SLAG
OPDRACHT 6
Opdracht 6 maken
Ga met projectgroep bij elkaar zitten
Doe opdracht met 1 of 2 personen
Doe je geen SmartProducts:
Maak opdracht 6b
Herkansers: inschrijven toets tot 18/6!
Applicatiebouw, Industrieel Ontwerpen
5-6-2014
32
© Copyright 2026 ExpyDoc