OO Analyse in de praktijk
description
Transcript of OO Analyse in de praktijk
OO AnalyseOO Analysein de praktijkin de praktijk
IV OO basisregelsIV OO basisregels
2OO Analyse, IV OO basisprincipes
Boeken/tutorials:Boeken/tutorials:
Object Oriented Software Object Oriented Software Construction, Bertrand MeyerConstruction, Bertrand Meyer
3OO Analyse, IV OO basisprincipes
Waarom regels ?Waarom regels ?
ConsistentieConsistentie Als iedereen dezelfde regels gebruikt,Als iedereen dezelfde regels gebruikt,
dan zullen de verschillende onderdelen dan zullen de verschillende onderdelen goed samenwerken.goed samenwerken.
dan begijpt elk teamlid de code/het design dan begijpt elk teamlid de code/het design van een ander betervan een ander beter
Minder manieren om eenzelfde Minder manieren om eenzelfde probleem op te lossenprobleem op te lossen Minder tijdverlies bij het tobben over Minder tijdverlies bij het tobben over
welke oplossing het beste is. welke oplossing het beste is.
4OO Analyse, IV OO basisprincipes
Waarom regels ? Waarom regels ? (vervolg)(vervolg)
Betere Code:Betere Code: = Makkelijker/goedkoper/sneller te = Makkelijker/goedkoper/sneller te
wijzigen systemen, …wijzigen systemen, …
Opmerking hierover:Opmerking hierover:
Het belangrijkste blijft het respect Het belangrijkste blijft het respect voorvoor
het project, de code, de methode, enz.het project, de code, de methode, enz.
5OO Analyse, IV OO basisprincipes
Verschil object-klasseVerschil object-klasse
•• Een object is één instantie van een Een object is één instantie van een klasse.klasse.
•• Een klasse beschrijft Een klasse beschrijft algemeenheden over zijn objecten.algemeenheden over zijn objecten.
Voorbeeld :Voorbeeld :
Als Antwerpen een object is, dan zou Stad Als Antwerpen een object is, dan zou Stad zijn klasse kunnen zijn.zijn klasse kunnen zijn.
6OO Analyse, IV OO basisprincipes
Verschil object-klasse Verschil object-klasse
OefeningOefening
Vul de ontbrekende cellen in:Vul de ontbrekende cellen in:
ObjectObject KlasseKlasse
Andre AgassiAndre Agassi ……
AutoAuto
7OO Analyse, IV OO basisprincipes
Complete klasseComplete klasse•• Een klasse bevat i.h.a. zowel Een klasse bevat i.h.a. zowel
attributen als niet triviale attributen als niet triviale methoden. methoden.
Waarom: attributen en methoden Waarom: attributen en methoden van een klasse wijzigen vaak samen van een klasse wijzigen vaak samen en horen dus 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 klasseComplete klasse
OefeningOefening
Wat is er eigenaardig bij dit Wat is er eigenaardig bij dit voorbeeld:voorbeeld:
Verrichtingen
+haalAf(van :BR, bedrag)
+schrijfOver(bedrag, van: BR, naar: BR)
BankRekening
+getStand()
+setStand(stand)
-stand
9OO Analyse, IV OO basisprincipes
Veranderlijke Veranderlijke eigenschappeneigenschappen
•• Een veranderlijke eigenschap wordt Een veranderlijke eigenschap wordt voorgesteld door een attribuut. voorgesteld door een attribuut.
•• Een onveranderlijke eigenschap kan Een onveranderlijke eigenschap kan leiden tot een extra subklasse als het leiden tot een extra subklasse als het aantal waarden beperkt is.aantal waarden beperkt is.
Waarom?Waarom? attributen zijn wijzigbaar maar een attributen zijn wijzigbaar maar een
object kan niet van klasse veranderenobject kan niet van klasse veranderen Vb:Vb:
Persoon
GehuwdeAlleenstaande
Persoon
+getBurgStaat()…
-burgStaat
10OO Analyse, IV OO basisprincipes
Veranderlijke Veranderlijke eigenschappeneigenschappen
Oefening 1Oefening 1Stel we willen modelleren dat sommige Stel we willen modelleren dat sommige
vogels tot een soort behoren die kan vogels tot een soort behoren die kan zwemmen, en andere niet.zwemmen, en andere niet.
Is dit goed ?Is dit goed ?
Vogel
+fladder()…
-kanZwemmen: bool…
11OO Analyse, IV OO basisprincipes
Veranderlijke Veranderlijke eigenschappeneigenschappen
Oefening 2Oefening 2
Is dit goed ?Is dit goed ?
Persoon
+getLeeftijd()+trouwMet(Persoon partner)…
-gebDatum…
12OO Analyse, IV OO basisprincipes
Gemeenschappelijke codeGemeenschappelijke code
•• Gemeenschappelijke code binnen Gemeenschappelijke code binnen een klasse moet ondergebracht een klasse moet ondergebracht worden in een aparte methode die worden in een aparte methode die dan meermaals wordt opgeroepen.dan meermaals wordt opgeroepen.
Waarom ?Waarom ? Wijzigingen moeten dan nog maar op 1 Wijzigingen moeten dan nog maar op 1
plaats gebeuren. -> vermijden van bugs.plaats gebeuren. -> vermijden van bugs. Voorbeeld: zie volgende slideVoorbeeld: zie volgende slide
13OO Analyse, IV OO basisprincipes
// TWIJFELACHTIG:// TWIJFELACHTIG:
public Class BesteldProdukt{public Class BesteldProdukt{
… …
public double getBTW(){public double getBTW(){
return return ((aant*prijs-kortingaant*prijs-korting)*)* BTWPERCBTWPERC;;
}}
public double getTotaal(){public double getTotaal(){
return return ((aant*prijs-kortingaant*prijs-korting) +) +
((aant*prijs-kortingaant*prijs-korting)*)*BTWPERCBTWPERC
}}
}}
// Probleem: Stel ik wil extra korting// Probleem: Stel ik wil extra korting
// toekennen -> 3 keer wijzigen// toekennen -> 3 keer wijzigen
// BETER:// BETER:
public Class BesteldProdukt{public Class BesteldProdukt{
……
public double getNetto(){public double getNetto(){
return return aant*prijs-kortingaant*prijs-korting;;
}}
public double getBTW(){public double getBTW(){
return return getNetto()getNetto()**BTWPERCBTWPERC;;
}}
public double getTotaal(){public double getTotaal(){
return return getNetto()getNetto()
+ + getBTW();getBTW();
}}
}}
Gemeenschappelijke codeGemeenschappelijke code VoorbeeldVoorbeeld
14OO Analyse, IV OO basisprincipes
public Class GeldAutomaat{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:// BETER:
public Class GeldAutomaat{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(){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 codeGemeenschappelijke code Oefening: Verbeter de code:Oefening: Verbeter de code:
15OO Analyse, IV OO basisprincipes
Command-QueryCommand-Query
•• 1. Een methode die een resultaat 1. Een methode die een resultaat teruggeeft, mag NIETS wijzigen. (query)teruggeeft, mag NIETS wijzigen. (query)
•• 2. Een methode die iets wijzigt, mag 2. Een methode die iets wijzigt, mag GEEN resultaat teruggeven. (command)GEEN resultaat teruggeven. (command)
Waarom ?Waarom ? Alg.: Een methode moet 1 duidelijk omlijnde Alg.: Een methode moet 1 duidelijk omlijnde
opdracht hebben.opdracht hebben. Je verwacht niet dat een query iets wijzigt (side Je verwacht niet dat een query iets wijzigt (side
effect).effect). Voorbeeld. Volgende slide.Voorbeeld. Volgende slide.
16OO Analyse, IV OO basisprincipes
Command-QueryCommand-Query// TWIJFELACHTIG:// TWIJFELACHTIG:
public class mijnRij{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:// BETER:
public class mijnRij{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;}
}}