Herhaling
UML
attributen
Assosiatie
Aggregatie
Programmeren in Java 3 W. Oele
26 september 2007
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Deze les
korte herhaling vorige les Unified Modelling Language notatie van een class afleiding pointers abstracte classes polymorphisme dubieuze(?) constructies interfaces
W. Oele Programmeren in Java 3
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Meer over class deriving Classes kan men ook naast elkaar afleiden:
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Classes naast elkaar afleiden: polymorphisme
Polymorphisme: letterlijk vertaald: veelvormigheid gebruiken om meerdere varianten van dezelfde class op te bouwen voorbeelden: algemeen: auto, vormen: bmw, audi, etc. algemeen: roofdier, vormen: luipaard, tijger, panter, hond, etc.
W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
In de Java a.p.i.
algemeen: component, vormen: jbutton, jframe, jcombobox, etc. algemeen: database connectie, vormen: odbc, mysql, jdbc, etc. algemeen: netwerk connectie, vormen: tcp/ip, slip, cslip, ppp, ftp, etc. e.v.a.
W. Oele Programmeren in Java 3
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Gebruik
Gegeven de klasse auto: fields: private String kleur private int prijs
methodes: public void startmotor() public void spuitover(String kleur)
Methodes worden overridden in de van auto afgeleide classes (bmw, audi, etc.)
W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Gedeclareerd en actueel type
bmw b = new bmw(); b.startmotor();
Toegestaan?
W. Oele Programmeren in Java 3
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Gedeclareerd en actueel type
bmw b = new bmw(); b.startmotor();
Toegestaan? Ja! auto x = new opel(); x.startmotor(); Toegestaan?
W. Oele Programmeren in Java 3
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Gedeclareerd en actueel type
bmw b = new bmw(); b.startmotor();
Toegestaan? Ja! auto x = new opel(); x.startmotor(); Toegestaan? Ja!
W. Oele Programmeren in Java 3
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Gedeclareerd en actueel type
bmw b = new bmw(); b.startmotor();
Toegestaan? Ja! auto x = new opel(); x.startmotor(); Toegestaan? Ja! auto x vormt het gedeclareerde type opel() vormt het actuele type W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Welke methode?
auto x = new opel(); x.startmotor(); Welke methode wordt nu aangroepen? opel.startmotor(); auto.startmotor();
W. Oele Programmeren in Java 3
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Welke methode?
auto x = new opel(); x.startmotor(); Welke methode wordt nu aangroepen? opel.startmotor(); auto.startmotor(); Antwoord: de methode van het actuele type, opel.startmotor() dus. . .
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Gebruik
De constructie auto x = new opel(); x.startmotor(); is wat dubieus. . . Waarom zou men dit doen?
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Arrays van pointers naar objecten
auto[] a = new auto[20]; for(int i=0;i<20;i++) { a[i]= new opel()/bmw()/ferrari()/mazda(); } for int i=0;i<20;i++) { a[i].startmotor(); }
W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
Arrays van pointers naar objecten
Met de constructie for int i=0;i<20;i++) { a[i].startmotor(); } roept men in het algemeen de methode startmotor() aan, terwijl deze specifiek gedrag oplevert daar altijd de methode van het actuele wordt aangeroepen. . .
W. Oele Programmeren in Java 3
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Problemen In een programma: ........... bmw x = new bmw(); opel y = new opel(); auto z = new auto(); ........... in bovenstaand programma is een merkloos auto object aangemaakt. . . niet erg fraai! soms zelfs ronduit gevaarlijk
W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
het keyword abstract Met het keyword abstract kan men een klasse als abstract defini¨eren. public abstract class auto { //FIELDS ......... //CONSTRUCTORS ......... //METHODS ......... }
W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
De abstracte klasse De abstracte klasse: mag men niet tot een object instanti¨eren kan alle standaard onderdelen zoals fields, methods en constructors bevatten. Door de klasse auto als abstract te defini¨eren dwingt men af dat er nooit merkloze auto’ s in het programma voorkomen. Dit is dus een veilige situatie. Abstracte classes kan men als voorzorgsmaatregel inzetten om te bereiken dat alleen objecten van de afgeleide classes mogen worden gebruikt.
W. Oele Programmeren in Java 3
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
De abstracte methode Een abstracte klasse moet tenminste ´e´en abstracte methode hebben: public abstract class auto { //FIELDS ......... //CONSTRUCTORS ......... //METHODS public abstract void startmotor(); } Van deze abstracte methodes noteert men alleen hun signatuur W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
De abstracte methode
Door (de signatuur van) een abstracte methode op te nemen in de abstracte klasse, dwingt men de programmeur een implementatie te leveren van deze methode in elke klasse die van de base klasse wordt afgeleid.
W. Oele Programmeren in Java 3
Herhaling
UML
attributen
Assosiatie
Aggregatie
De interface De interface: kan men opvatten als een abstracte klasse echter: alleen signaturen van abstracte methodes alleen final variabelen
Syntax: public interface x { public final int i=75; ........... public void doe_iets(); .......... } W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Gebruik van interfaces
public class c implements x { public void doe_iets() { ........ weet_ik_veel_wat(); ........ } }
W. Oele Programmeren in Java 3
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Programmeren per contract
Waarom zou men een interface gebruiken? Wat is het nut van interfaces?
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Voorbeeld Gegeven de interface mp3speler public { public public public public public public public }
interface mp3_speler void void void void void void void
W. Oele Programmeren in Java 3
loadtrack(); playtrack(); next(); previous(); stop(); fastforward(); fastbackward();
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
De klasse mediaspeler public class audiospeler implements mp3speler { public void loadtrack() { bestand openen en laden(); } public void play() { geladen bestand afspelen(); } ................. } W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
De klasse winamp public class winamp implements mp3speler { public void loadtrack() { bestand openen en laden(); } public void play() { geladen bestand afspelen(); } ................. } W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
De runnable interface
Een applet: wordt afgeleid van de JApplet klasse implementeert de Runnable interface De methodes in de Runnable interface dienen dus ge¨ımplementeerd te worden. De Runnable interface wordt gebruikt bij zgn. threads. In de JApplet klasse wordt het starten en stoppen van een thread door de browser geregeld.
W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
Unified Modelling Language visuele taal eigen regels eigen syntax de facto standaard voor o.o.p. U.M.L. is niet: een programmeertaal (u.m.l. produceert een raamwerk, geen algoritmen) een modelerings tool een ontwikkel methode uitontwikkeld W. Oele Programmeren in Java 3
Herhaling
UML
attributen
Assosiatie
Aggregatie
De class
Een klasse representeert men met een rechthoek:
classnaam attributen operaties
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Voorbeeld (analyse)
autobedrijf -saldo:int -werkplaats:garage +koopauto() +verkoopauto() +naargarage()
W. Oele Programmeren in Java 3
Assosiatie
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Voorbeeld (ontwerp)
autobedrijf -saldo:int -werkplaats:garage +koopauto(auto x):boolean +verkoopauto(auto x):boolean +naargarage(auto x):boolean
W. Oele Programmeren in Java 3
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Attributen
attributen vormen de variabelen in een class kunnen van elk denkbaar type zijn: int float etc. andere classes
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Operaties
vormen de methodes/functies in een class kunnen parameters hebben kunnen parameters teruggeven
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Symbolen
- : private access + : public access # : protected access ~: beschikbaar in dezelfde package
W. Oele Programmeren in Java 3
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Voorbeeld (ontwerp) autobedrijf -saldo[1]:int -/dollars[1]:int -telnummer[1..3]{unique}:String -werkplaats[1]:garage +koopauto(auto x):boolean +verkoopauto(auto x):boolean +naargarage(auto x):boolean / variabele verkregen/opgebouwd uit andere variabelen [] aantal mogelijke waarden van attribuut {unique} geen dubbele waarden
W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
Meer eigenschapen
{unique}:geen dubbele waarden {union}:gemeenschappelijke waarden {subsets}:deelverzameling van waarden {redefines}:herdefinitie {ordered}:volgorde van belang {bag}:verzameling waarin dubbele waarden mogen voorkomen {sequence}:bag en ordered {composite}:samengesteld uit andere attributen
W. Oele Programmeren in Java 3
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
Associatie Twee objecten kunnen iets met elkaar te maken hebben. Dit wordt genoteerd middels een rechte lijn: Het soort associatie kan men er in tekst bijzetten Het minimum en maximum aantal objecten plaats men middels getallen aan beide einden.
W. Oele Programmeren in Java 3
Herhaling
UML
Ook toegestaan
W. Oele Programmeren in Java 3
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Aggregatie De ene klasse kan als attribuut een andere klasse hebben.
Deze andere klasse kan bestaan zonder de klasse, waarvan deze attribuut is. W. Oele Programmeren in Java 3
Generalisatie
Herhaling
UML
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie
Compositie
Een klasse a kan niet bestaan zonder de klasse b die klasse a als attribuut heeft dichte diamanten: het ene object kan niet bestaan zonder het andere: compositie open diamanten: het ene object kan bestaan zonder het andere: aggregatie
W. Oele Programmeren in Java 3
Herhaling
UML
attributen
Generalisatie In het algemeen:
W. Oele Programmeren in Java 3
Assosiatie
Aggregatie
Compositie
Generalisatie
Herhaling
UML
Voorbeeld
W. Oele Programmeren in Java 3
attributen
Assosiatie
Aggregatie
Compositie
Generalisatie