OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.

Slides:



Advertisements
Verwante presentaties
Les 2 klassediagrammen II
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
OOS Object geOrienteerd Software-ontwerp - 3
Hoofdstuk 8: Recursie.
Van domeinklasse tot implementatie
Base: bewerkingen 2 soorten - Oplopend- Aflopend.
Het ontwerpen van een klasse
Het type int Tekenen met Java operatoren
Greenfoot Workshop Bobby - Snake.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Hoofdstuk 2 Hallo, C# !.
Frank Stalpers en Ad Baars
Laatste toets Vrijdag 8 november van 8.30 – uur Locatie: EDUC-BETA Stof: Alles! Slides Boek Werkcollegeopgaven Practicumopgaven.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Grafieken, organigrammen
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
OO Analyse in de praktijk
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Encapsulatie: Every man is an island upon himself.
Polymorphisme en Interfaces: inleiding
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
Studiehouding Ergens verstand van krijgen kost tijd… Uren die je alleen in je boeken doorbrengt maken het verschil. Er is niets mis met onafhankelijkheid.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Bespreking testpracticum.  Javaconventies! ◦ KlasseNamen beginnen met Hoofdletter ◦ objectNamen/methodeNamen met kleine letter  Aanspreken GUI ◦ Zie.
Objectgeoriënteerd Programmeren (2)
Gameprogrammeren: Objecten en geheugen
Hoofdstuk 9.2 Strings.
Object georiënteerd programmeren
Gameprogrammeren: Methoden
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Afsluiting
Gameprogrammeren: Properties
Tinpro015b-les6 Templates.
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Gameprogrammeren: Abstracte klassen
Gameprogrammeren: Tiles en File I/O in Tick Tick
Unified Modeling Language
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
Implementatie Zoekboom
Object Communication (Jewel Jam)
Software Development fundamentals
Software Development fundamentals
Gameprogrammeren: Sprite sheets
Gameprogrammeren: Arrays
Transcript van de presentatie:

OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels

2OO Analyse, IV OO basisprincipes Boeken/tutorials: Object Oriented Software Construction, Bertrand Meyer Object Oriented Software Construction, Bertrand Meyer

3OO Analyse, IV OO basisprincipes Waarom regels ? Consistentie Consistentie Als iedereen dezelfde regels gebruikt, Als iedereen dezelfde regels gebruikt, dan zullen de verschillende onderdelen goed samenwerken. dan zullen de verschillende onderdelen goed samenwerken. dan begijpt elk teamlid de code/het design van een ander beter dan begijpt elk teamlid de code/het design van een ander beter Minder manieren om eenzelfde probleem op te lossen Minder manieren om eenzelfde probleem op te lossen Minder tijdverlies bij het tobben over welke oplossing het beste is. Minder tijdverlies bij het tobben over welke oplossing het beste is.

4OO Analyse, IV OO basisprincipes Waarom regels ? (vervolg) Betere Code: Betere Code: = Makkelijker/goedkoper/sneller te wijzigen systemen, … = Makkelijker/goedkoper/sneller te wijzigen systemen, … Opmerking hierover: Het belangrijkste blijft het respect voor het project, de code, de methode, enz.

5OO Analyse, IV OO basisprincipes Verschil object-klasse Een object is één instantie van een klasse.Een object is één instantie van een klasse. Een klasse beschrijft algemeenheden over zijn objecten.Een klasse beschrijft algemeenheden over zijn objecten. Voorbeeld : Voorbeeld : Als Antwerpen een object is, dan zou Stad zijn klasse kunnen zijn.

6OO Analyse, IV OO basisprincipes Verschil object-klasse Oefening Oefening Vul de ontbrekende cellen in: ObjectKlasse Andre Agassi … Auto

7OO Analyse, IV OO basisprincipes Complete klasse Een klasse bevat i.h.a. zowel attributen als niet triviale methoden.Een klasse bevat i.h.a. zowel attributen als niet triviale methoden. Waarom: attributen en methoden van een klasse wijzigen vaak samen en horen dus samen. Waarom: attributen en methoden van een klasse wijzigen vaak samen en horen dus samen. Voorbeeld : Voorbeeld : Bankrekening +haalAf(bedrag: double) -stand: double +schrijfOver(bedrag: double, naar: Bankrekening) +double getStand() +setStand(stand: double)

8OO Analyse, IV OO basisprincipes Complete klasse Oefening Oefening Wat is er eigenaardig bij dit voorbeeld: Verrichtingen +haalAf(van :BR, bedrag) +schrijfOver(bedrag, van: BR, naar: BR) BankRekening +getStand() +setStand(stand) -stand

9OO Analyse, IV OO basisprincipes Veranderlijke eigenschappen Een veranderlijke eigenschap wordt voorgesteld door een attribuut.Een veranderlijke eigenschap wordt voorgesteld door een attribuut. Een onveranderlijke eigenschap kan leiden tot een extra subklasse als het aantal waarden beperkt is.Een onveranderlijke eigenschap kan leiden tot een extra subklasse als het aantal waarden beperkt is. Waarom? Waarom? attributen zijn wijzigbaar maar een object kan niet van klasse veranderen attributen zijn wijzigbaar maar een object kan niet van klasse veranderen Vb: Vb: Persoon Gehuwde Alleenstaande Persoon +getBurgStaat() … -burgStaat

10OO Analyse, IV OO basisprincipes Veranderlijke eigenschappen Oefening 1 Oefening 1 Stel we willen modelleren dat sommige vogels tot een soort behoren die kan zwemmen, en andere niet. Is dit goed ? Vogel +fladder() … -kanZwemmen: bool …

11OO Analyse, IV OO basisprincipes Veranderlijke eigenschappen Oefening 2 Oefening 2 Is dit goed ? Persoon +getLeeftijd() +trouwMet(Persoon partner) … -gebDatum …

12OO Analyse, IV OO basisprincipes Gemeenschappelijke code Gemeenschappelijke code binnen een klasse moet ondergebracht worden in een aparte methode die dan meermaals wordt opgeroepen.Gemeenschappelijke code binnen een klasse moet ondergebracht worden in een aparte methode die dan meermaals wordt opgeroepen. Waarom ? Waarom ? Wijzigingen moeten dan nog maar op 1 plaats gebeuren. -> vermijden van bugs. Wijzigingen moeten dan nog maar op 1 plaats gebeuren. -> vermijden van bugs. Voorbeeld: zie volgende slide Voorbeeld: zie volgende slide

13OO Analyse, IV OO basisprincipes // TWIJFELACHTIG: public Class BesteldProdukt{ … public double getBTW(){ public double getBTW(){ return (aant*prijs-korting)* BTWPERC; return (aant*prijs-korting)* BTWPERC; } public double getTotaal(){ public double getTotaal(){ return (aant*prijs-korting) + return (aant*prijs-korting) + (aant*prijs-korting)*BTWPERC (aant*prijs-korting)*BTWPERC }} // Probleem: Stel ik wil extra korting // toekennen -> 3 keer wijzigen // BETER: public Class BesteldProdukt{ … public double getNetto(){ return aant*prijs-korting; return aant*prijs-korting; } public double getBTW(){ return getNetto()*BTWPERC; return getNetto()*BTWPERC; } public double getTotaal(){ public double getTotaal(){ return getNetto() return getNetto() + getBTW(); + getBTW(); }} Gemeenschappelijke code Voorbeeld Voorbeeld

14OO Analyse, IV OO basisprincipes public Class GeldAutomaat{ public void vraagRekeningStand(){ public void vraagRekeningStand(){ drukAfOpScherm(“Geef pin”); drukAfOpScherm(“Geef pin”); setPin(getLaatstIngelezenString()); setPin(getLaatstIngelezenString()); if ( curPin().equals(curRek().getPin()) ) if ( curPin().equals(curRek().getPin()) ) drukAfOpScherm(getRek().getStand()); drukAfOpScherm(getRek().getStand()); } public void haalGeldAf(){ public void haalGeldAf(){ double bedrag; double bedrag; drukAfOpScherm(“Geef pin”); drukAfOpScherm(“Geef pin”); setPin(getLaatstIngelezenString()); setPin(getLaatstIngelezenString()); if ( curPin().equals(curRek().getPin()) ) { if ( curPin().equals(curRek().getPin()) ) {... // af te halen geld opvragen... // af te halen geld opvragen bedrag = … bedrag = … getRek().haalAf(bedrag); getRek().haalAf(bedrag); } }} // BETER: public Class GeldAutomaat{ private String curPin; private String curPin; private String curRek; private String curRek; public haalPin(){ public haalPin(){ drukAfOpScherm(“Geef pin”); drukAfOpScherm(“Geef pin”); setPin(getLaatstIngelezenString()); setPin(getLaatstIngelezenString()); } public booleana pinOk(){ public booleana pinOk(){ return curPin().equals(curRek().getPin()) return curPin().equals(curRek().getPin()) } public void vraagRekeningStand(){ haalPin(); haalPin(); if ( pinOk()) { if ( pinOk()) { drukAfOpScherm(getRek().getStand()) drukAfOpScherm(getRek().getStand()) } } public void haalGeldAf(){ public void haalGeldAf(){ double bedrag; double bedrag; haalPin(); haalPin(); if ( pinOk() ) { if ( pinOk() ) { …... // af te halen geld opvragen …... // af te halen geld opvragen bedrag = … bedrag = … getRek().haalAf(bedrag); getRek().haalAf(bedrag); }} Gemeenschappelijke code Oefening: Verbeter de code: Oefening: Verbeter de code:

15OO Analyse, IV OO basisprincipes Command-Query 1. Een methode die een resultaat teruggeeft, mag NIETS wijzigen. (query)1. Een methode die een resultaat teruggeeft, mag NIETS wijzigen. (query) 2. Een methode die iets wijzigt, mag GEEN resultaat teruggeven. (command)2. Een methode die iets wijzigt, mag GEEN resultaat teruggeven. (command) Waarom ? Waarom ? Alg.: Een methode moet 1 duidelijk omlijnde opdracht hebben. Alg.: Een methode moet 1 duidelijk omlijnde opdracht hebben. Je verwacht niet dat een query iets wijzigt (side effect). Je verwacht niet dat een query iets wijzigt (side effect). Voorbeeld. Volgende slide. Voorbeeld. Volgende slide.

16OO Analyse, IV OO basisprincipes Command-Query // TWIJFELACHTIG: public class mijnRij{ private Object[20] rij; private Object[20] rij; private int tel = -1; private int tel = -1; public Object getNext(){ public Object getNext(){ tel++; tel++; if ( tel < rij.length ) if ( tel < rij.length ) return rij[tel]; return rij[tel]; else{ else{ tel--; tel--; return null; return null; } } public boolean hasNext(){ public boolean hasNext(){ return tel < rij.length-1; return tel < rij.length-1; } public void reset(){ tel=-1;} public void reset(){ tel=-1;}} // BETER: public class mijnRij{ private Object[20] rij; private Object[20] rij; private int tel = 0; private int tel = 0; public Object getElement(){ public Object getElement(){ if (tel < rij.length) if (tel < rij.length) return rij[tel]; return rij[tel]; } public void next(){ public void next(){ if (tel < rij.length) if (tel < rij.length) tel++; tel++; } public boolean eof(){ public boolean eof(){ return tel == rij.length; return tel == rij.length; } public void reset(){ tel=0;} public void reset(){ tel=0;}}