APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts
INHOUD COLLEGE 3 Software specificaties (DPU1) Object georiënteerd programmeren, methoden, parameters, scope van variabelen Opdracht 3 module4.io.utwente.nl/applicatiebouw Applicatiebouw, Industrieel Ontwerpen 8-5-2015 2
APPLICATIEBOUW BINNEN HET PROJECT TRAJECT VAN ONTWERP NAAR IMPLEMENTATIE (BOUW PROTOTYPE) Systeem architectuur PC Beschrijving gedrag PC Ontwerp UI ER+VM Ontwerp EL+VM Applicatiebouw Gebruikstest ER Test EL Functionele test PC Ontwerp Implementatie (programmeren) Debuggen Test PC = Project Colleges Ontwerpen ER = Ergonomie EL = Elektronica VM = Vormmethodiek Opsomming data Beschrijving algoritmes Pseudocode Module indeling Opzet: Software test Validatie Documentatie: Class diagram Flowchart Applicatiebouw, Industrieel Ontwerpen 8-5-2015 3
SOFTWARE SPECIFICATIES MEER INFO DPU1 DPU 1 DPU voorbeelden Presentatie vorig college Niet programmeren, maar specificaties schrijven Presenteren aan docent (op papier), max 2 A4 tekst + schetsen, feedback verwerken in logboek en specificaties inleveren op BlackBoard: onder Applicatiebouw > DPU's/opdrachten inleveren Deadlines DPU s aftekenen DPU 1: 12 mei (vandaag of dinsdag) DPU 2: 29 mei DPU 3: 19 juni Reserveer via module4.io.utwente.nl/reserveer een tijdstip voor bespreken en aftekenen Applicatiebouw, Industrieel Ontwerpen 8-5-2015 4 DPU met docent! Let op: slechts 1x inschrijven, er zijn enkele tijden verschoven
TOP-DOWN ONTWERP GROF-MIDDEN-FIJN DPU 1 Van grof (overzicht, omgeving, gebruikers) naar fijn (details, objecten, eigenschappen, acties) Beweegbaar licht Licht meten en instellen Verplaatsen licht Gebruiker (atelier) - vaststellen positie gebruiker - communicatie met gebruiker Applicatiebouw, Industrieel Ontwerpen 8-5-2015 5
TOP-DOWN ONTWERP GROF-MIDDEN-FIJN DPU 1 Gebruiker Algoritmes/gedrag? Detectie positie gebruiker Bewegen licht Feedback geven Communicatie gebruiker: ontvangen opdrachten (aan/uit/dim/aanpassen positie) In/uitvoer? Positie gebruiker (x,y?) Opdracht Feedback/status (geluid/licht?) Bedieningspaneel/remote LCD display Knoppen: Aan/uit/dim, positionering Applicatiebouw, Industrieel Ontwerpen 8-5-2015 6
Type van de actie TOP-DOWN ONTWERP GROF-MIDDEN-FIJN Communicatie: ontvangen opdrachten EventHandler: inkomende communicatie Vaststellen type (setup/instelling/opdracht) Opdrachtcode: leescode Sla code op in lijst Actie (methode?) Eigenschap (ArrayList?) DPU 1 Eigenschap (integer?) DPU 2: Eigenschappen en methodes kunnen we omzetten naar classes. Methodes kunnen we uitwerken mbv. pseudocode. Applicatiebouw, Industrieel Ontwerpen 8-5-2015 7
DPU2 : TESTVERSIE SOFTWARE DPU 2 Realiseer eerste testversies van: De Userinterface Het proefmodel (bouwen met Lego) Programma voor de systeembesturing (Java) DPU 1 Software specificaties Classontwerp & pseudocode Programma regels (code) { boek: 4.8-4.11, 6.1-6.4 } Resultaat: eerste versie softwareprogramma dat enkele basisfuncties van het proefmodel demonstreert. Deze hoeven dus nog niet volledig functioneel te zijn, maar tonen de werking/het plan aan. Applicatiebouw, Industrieel Ontwerpen 8-5-2015 8
THEORIE HOOFDSTUK 3, 4 VAN HET BOEK Scope van variabelen {3.9.1 tm. 3.9.4} Object georiënteerd programmeren {4.8 4.13} Methoden & parameters Formatteren van uitvoer {4.6} Applicatiebouw, Industrieel Ontwerpen 8-5-2015 9
SCOPE VAN VARIABELEN NEDERLANDS: HET BEREIK VAN VARIABELEN public class Rekenen extends javax.swing.jframe { double factor = 0.2; private void actionperformed() { factor is globale variabele in class Rekenen // Haal de ingevoerde waarde uit het tekstveld: String invoer = jtextfieldlengte.gettext(); } // Zet de ingevoerde waarde om naar een getal: double lengte = Double.parseDouble(invoer); double resultaat = lengte * factor; lengte is lokale variabele in methode actionperformed } factor kan door alle methodes worden gebruikt Boek: 3.9.1 tm. 3.9.4 Applicatiebouw, Industrieel Ontwerpen 8-5-2015 10
1) OBJECT ANALYSEREN PARAGRAAF 4.9 BOEK Eigenschappen (attributen) Gedrag (doen: methoden) Positie (x,y) Diameter Kleur Bewegen Stuiteren (van richting veranderen) Tekenen Eigenschappen: Variabelen Objecten Gedrag: Methoden Applicatiebouw, Industrieel Ontwerpen 8-5-2015 11
2) CLASS ONTWERPEN wat is... wat kan... een object en hoe? classvariabelen/attributen methodeheaders methodebodies Applicatiebouw, Industrieel Ontwerpen 8-5-2015 12
3) CLASS UITWERKEN Bepalen van: Typen attributen Parameters methoden Resultaat methoden public class Bal { // attributen (class-variabelen) int diameter; Color kleur; int x, y; // positie } // methoden public void bewegen() public void tekenen(graphics g) Applicatiebouw, Industrieel Ontwerpen 8-5-2015 13
4) METHODEN INVULLEN PSEUDOCODE SCHRIJVEN EN OMZETTEN IN JAVA body van methoden schrijven Hoe bepaal ik het resultaat? Voorbeeld pseudo-code opdracht: Waarden temperatuur vragen (4x) Gemiddelde berekenen Resultaat formatteren Resultaat tonen Applicatiebouw, Industrieel Ontwerpen 8-5-2015 14
OBJECTEN MAKEN: VEEL VERSCHILLENDE BALLEN PARAGRAAF 4.10 Constructor maken: bepaalt invulling attributen Bal b1 = new Bal(10, Color.orange, 10, 20 ); Bal b2 = new Bal(5, Color.red, 5, 30 ); Bal b3 = new Bal(20, Color.blue, 20, 25 ); Bal b4 = new Bal(8, Color.green, 30, 30 ); Attributen (eigenschappen) Applicatiebouw, Industrieel Ontwerpen 8-5-2015 15
VEEL VAN HETZELFDE METHODEN EFFECTIEF GEBRUIKEN public void paintcomponent(graphics g) { g.drawrect(20,60,40,40); g.drawline(20,60,40,40); g.drawline(40,40,60,60); g.drawrect(70,60,40,40); g.drawline(70,60,90,40); g.drawline(90,40,110,60); g.drawrect(120,40,60,60); g.drawline(120,40,150,10); g.drawline(150,10,180,40); een berg coördinaten! } Applicatiebouw, Industrieel Ontwerpen 8-5-2015 16
NIEUWE METHODEN Methode = groepje opdrachten met een naam private void tekenhuis( ) {. drawrect ( );. drawline ( );. drawline ( ); } Aanroep van een methode: voert opdrachten van de methode uit public void paintcomponent(graphics g) { tekenhuis ( ); tekenhuis ( ); tekenhuis ( ); } Applicatiebouw, Industrieel Ontwerpen 8-5-2015 17
PARAMETERS VAN METHODEN private void tekenhuis(graphics g, ) { g.drawrect( ); g.drawline( ); g.drawline( ); } extra parameter declareren public void paintcomponent(graphics g) { tekenhuis (g, ); tekenhuis (g, ); tekenhuis (g, ); } Graphics-object wordt doorgegeven naar methode tekenhuis Extra parameter meegeven Applicatiebouw, Industrieel Ontwerpen 8-5-2015 18
FLEXIBILITEIT... Hoe meer parameters, des te flexibeler de methode? private void tekenhuis(graphics g, int x, int y, int br, int h, int dakh, Color kl, Color dakkl, ) { dakh en des te lastiger aan te roepen... h (x,y) br Herhaling Applicatiebouw, Industrieel Ontwerpen 8-5-2015 19
METHODEN MET EEN RESULTAAT Type van het resultaat private double berekenoppervlak(double lengte, double breedte, double hoogte) { double oppervlak; oppervlak = 2 * (breedte*lengte+lengte*hoogte+hoogte*breedte); oppervlak = Math.round(oppervlak); return oppervlak; } Methode gebuiken (aanroepen): Waarde terug geven mbv. return-statement double resultaat = berekenoppervlak(10, 5, 7); De berekening Aanroep van de methode Applicatiebouw, Industrieel Ontwerpen 8-5-2015 20
METHODEN ZONDER RESULTAAT type van methode is void void betekend leeg of geen private void toonresultaat(double r) { // Formatteer het resultaat: 2 cijfers achter de komma String tekstuitkomst = String.format("%.2f", r); } // Geef het resultaat weer in het tekstveld: jtextfielduitkomst.settext( tekstuitkomst ); return-statement ontbreekt... toonresultaat(resulaat);... aanroep van de methode Applicatiebouw, Industrieel Ontwerpen 8-5-2015 21
HOE BOUW IK EEN METHODE? Duidelijke taak, duidelijke naam Komt er een waarde uit? Welke parameters Verzin structuur body Schrijf de Java regels Header Lokale variabelen Overige regels X0,Y0 Bijvoorbeeld afstand tussen twee punten X1,Y1 Applicatiebouw, Industrieel Ontwerpen 8-5-2015 22
STRUCTUUR VAN EEN METHODE Modifier Type Naam van de methode Parameters Header private double afstand(int x0, int y0, int x1, int y1) { double d; d = (x1 x0) * (x1 xo) + (y1 y0) * (y1 y0); } return Math.sqrt(d); Body {... } Applicatiebouw, Industrieel Ontwerpen 8-5-2015 23
SOORTEN METHODEN PARAGRAAF 4.9.4 BOEK Methoden die waarden van attributen afgeven (get) of instellen (set) Getter, Setter Automatisch maken in Eclipse Via menu: Source > Generate Getters and Setters Applicatiebouw, Industrieel Ontwerpen 8-5-2015 24
FORMATTEREN VAN UITVOER PARAGRAAF 4.6 BOEK double gemiddelde =... String uitvoer = String.format(Locale.US, "%.1f", gemiddelde); lblgemiddelde.settext(uitvoer); // gebruikersinterface System.out.println("gemiddelde=" + gemiddelde); // tekst-uitvoer Wat is de uitvoer? 11.1 Applicatiebouw, Industrieel Ontwerpen 8-5-2015 25
BIBLIOTHEKEN GEBRUIKEN: SWING Swing is een bibliotheek voor Gebruikersinterface componenten Voorbeeld: JPanel Toevoegen dmv. import-regel Automatisch: aanklikken waarschuwingslampje in kantlijn Applicatiebouw, Industrieel Ontwerpen 8-5-2015 26
BIBLIOTHEKEN GEBRUIKEN: INTERNET, XML WEERSTATION.JAVA org.w3c en javax.xml bibliotheken voor internet toepassingen en gebruik van XML XML: standaard voor uitwisseling gegevens (data) Voorbeeld: webpagina in textpane laten zien Webpagina s gebruiken in Java: Voorbeeld project Eclipse Wiki: XML Applicatiebouw, Industrieel Ontwerpen 8-5-2015 27
BOEK GEBRUIKEN ZOEKEN IN HET BOEK Opdrachten: steeds minder uitleg Opdracht: parsedouble() methode gebruiken om tekst om te zetten naar getal (double) Hoe?? Boek: index achterin, P, parsedouble, 63 Applicatiebouw, Industrieel Ontwerpen 8-5-2015 28
AAN DE SLAG OPDRACHT 3 Opdracht 3 maken Zelf methode maken Omzetten String naar getal (double): parsedouble() Formatteren uitvoer Vanaf deze opdracht telt een opdracht voor 0,33 punt mee in cijfer, mits gecheckt en voor deadline Volgende week: Opdracht 4 = met Lego Mindstorms Ga met projectgroep bij elkaar zitten Zorg voor een volle accu module4.io.utwente.nl/applicatiebouw > Opdrachten: Applicatiebouw, Industrieel Ontwerpen 8-5-2015 29
www.shakespeak.com We gaan stemmen Internet 1 2 SMS 1 Deze presentatie is geladen zonder de Shakespeak Add-In. Add-In gratis downloaden? Ga naar http://shakespeak.com/en/freedownload/ 2 Twitter 1 2 Stemmen is anoniem Applicatiebouw, Industrieel Ontwerpen 8-5-2015 30
Hoe ver ben je met opdracht 3? A. Is af B. Bijna klaar C. Moet nog veel doen D. Ik maak deze opdracht niet De vraag gaat open zodra u een sessie en diavoorstelling start. Stemmen: 40 Gesloten Internet SMS Twitter Dit tekstvak wordt gebruikt om de verschillende stemmethodes uit te leggen. Deze presentatie is geladen zonder de Shakespeak Add-In. De juiste uitleg wordt hier ingevuld nadat u een sessie heeft gestart. Het is mogelijk om dit tekstvak aan te passen en te verplaatsen. Add-In gratis downloaden? Ga naar http://shakespeak.com/en/free-download/ Applicatiebouw, Industrieel Ontwerpen 8-5-2015 31
Hoe ver ben je met opdracht 3? A. Is af 42,5% B. Bijna klaar 45,0% C. D. Moet nog veel doen Ik maak deze opdracht niet 2,5% 10,0% Gesloten Applicatiebouw, Industrieel Ontwerpen 8-5-2015 32
Wat is de uitvoer van onderstaand stukje programma? A. 27 B. e=26.0 C. e=27 D. e=26 double t = 13.44; int e = 2; e = ( (int) t ) * e; System.out.println("e="+e); De vraag gaat open zodra u een sessie en diavoorstelling start. Stemmen: 30 Gesloten Internet SMS Twitter Dit tekstvak wordt gebruikt om de verschillende stemmethodes uit te leggen. Deze presentatie is geladen zonder de Shakespeak Add-In. De juiste uitleg wordt hier ingevuld nadat u een sessie heeft gestart. Het is mogelijk om dit tekstvak aan te passen en te verplaatsen. Add-In gratis downloaden? Ga naar http://shakespeak.com/en/free-download/ Applicatiebouw, Industrieel Ontwerpen 8-5-2015 33
Wat is de uitvoer van onderstaand stukje programma? double t = 13.44; int e = 2; e = ( (int) t ) * e; System.out.println("e="+e); A. 27 0,0% B. e=26.0 13,3% C. e=27 13,3% D. e=26 73,3% Gesloten Applicatiebouw, Industrieel Ontwerpen 8-5-2015 34
Stel, je hebt een gebruikersinterface gemaakt waarin wordt getekend in een paneel (afgeleide van JPanel). Wat moet je toevoegen aan de class van het paneel om daarin te kunnen tekenen? A. een tekenmethode B. een paintcomponent class C. een Graphics object D. een constructor De vraag gaat open zodra u een sessie en diavoorstelling start. Stemmen: 32 Gesloten Internet SMS Twitter Dit tekstvak wordt gebruikt om de verschillende stemmethodes uit te leggen. Deze presentatie is geladen zonder de Shakespeak Add-In. De juiste uitleg wordt hier ingevuld nadat u een sessie heeft gestart. Het is mogelijk om dit tekstvak aan te passen en te verplaatsen. Add-In gratis downloaden? Ga naar http://shakespeak.com/en/free-download/ Applicatiebouw, Industrieel Ontwerpen 8-5-2015 35
Stel, je hebt een gebruikersinterface gemaakt waarin wordt getekend in een paneel (afgeleide van JPanel). Wat moet je toevoegen aan de class van het paneel om daarin te kunnen tekenen? A. een tekenmethode 46,9% B. een paintcomponent class 6,3% C. een Graphics object 34,4% D. een constructor 12,5% Gesloten Applicatiebouw, Industrieel Ontwerpen 8-5-2015 36
Voor opdracht 3 moet je zelf een methode definieeren die een getal als resultaat oplevert. Hoe zou deze methode er uit kunnen zien? A. public void mijnmethode B. public double mijnmethode() { return 1.0 } C. public void mijnmethode() { return 1.0 } D. public int mijnmethode() { } E. ik weet het niet... De vraag gaat open zodra u een sessie en diavoorstelling start. Stemmen: 34 Gesloten Internet SMS Twitter Dit tekstvak wordt gebruikt om de verschillende stemmethodes uit te leggen. Deze presentatie is geladen zonder de Shakespeak Add-In. De juiste uitleg wordt hier ingevuld nadat u een sessie heeft gestart. Het is mogelijk om dit tekstvak aan te passen en te verplaatsen. Add-In gratis downloaden? Ga naar http://shakespeak.com/en/free-download/ Applicatiebouw, Industrieel Ontwerpen 8-5-2015 37
Voor opdracht 3 moet je zelf een methode definieeren die een getal als resultaat oplevert. Hoe zou deze methode er uit kunnen zien? A. public void mijnmethode 0,0% B. public double mijnmethode() { return 1.0 } 97,1% C. D. E. public void mijnmethode() { return 1.0 } public int mijnmethode() { } ik weet het niet... 0,0% 2,9% 0,0% Gesloten Applicatiebouw, Industrieel Ontwerpen 8-5-2015 38