Unified Modeling Language UML Unified Modeling Language
Waarom modelleren? Eenduidigheid: versie 3 Waarom modelleren? Eenduidigheid: Afbeelding zegt meer dan 1000 woorden
Agenda <- zie linker kantlijn
Verkrijgbaar in elke boekhandel Naslagwerk Verkrijgbaar in elke boekhandel
Programma van Eisen Beschrijft: Doel Bereik Eisen Use Cases
Doel Voorbeeld: Doel van een webshop is om klanten via internet producten te laten bestellen
beschrijft kort en bondig wat applicatie wel en niet doet. Bereik beschrijft kort en bondig wat applicatie wel en niet doet.
Eisen Wat Niet hoe
product aan winkelwagen toevoegen Use Cases product aan winkelwagen toevoegen verkoper klant bestelling plaatsen betalen via iDeal magazijnbediende bestelling verzenden
Alomtegenwoordige taal Consequente, voor zich sprekende, naamgeving
Onduidelijkheden Taak van ontwerper om onduidelijkheden weg te nemen Logboek t.b.v. traceerbaarheid, bijvoorbeeld voor als later dieper graven
Vragen?
Oefening Programma van Eisen Beschrijf voor maatwerksoftware die uw organisatie wil (laten) bouwen: Doel Bereik Maak bereik klein, om kosten en doorlooptijd van realiseren laag te maken Eisen Use cases Dit is de basis voor uw functioneel ontwerp
Klassendiagram Doel: aangeven welke gegevens rol spelen
Klasse klant bestelling product
Object klant bestelling product
Attribuut Kleine letters, tenzij taalkundig altijd met hoofdletter voornaam tussenvoegsel achternaam straat huisnummer huisnummertoevoeging postcode plaats klant bestelling nummer status besteld op product naam merk prijs incl. btw Kleine letters, tenzij taalkundig altijd met hoofdletter
Attribuuttypen voornaam : string tussenvoegsel : string achternaam : string straat : string huisnummer : integer huisnummertoevoeging : string postcode : string plaats : string klant bestelling nummer : integer status : process besteld op : datetime product naam : string merk : string prijs incl. btw : amount in €
Optionele attributen klant bestelling voornaam : string [0..1] tussenvoegsel : string [0..1] achternaam : string straat : string huisnummer : integer huisnummertoevoeging : string [0..1] postcode : string plaats : string klant bestelling nummer : integer status : process besteld op : datetime [0..1] product naam : string merk : string prijs incl. btw : amount in €
Enumeratie klant bestelling voornaam : string [0..1] nummer : integer tussenvoegsel : string [0..1] achternaam : string geslacht : geslacht [0..1] straat : string huisnummer : integer huisnummertoevoeging : string [0..1] postcode : string plaats : string privilegeniveau : privilegeniveau nummer : integer status : process besteld op : datetime [0..1] product naam : string merk : string prijs incl. btw : amount in € «enumeration» geslacht man vrouw «enumeration» privilegeniveau brons zilver goud
Associatie klant bestelling product
Multipliciteit 1 * * * multipliciteit: Aantal geassocieerde objecten: klant bestelling product 1 * * * multipliciteit: Aantal geassocieerde objecten: 1 precies 1 (afkorting van 1..1) 0..1 0 of 1 * 0 of meer (is afkorting van 0..*) 1..* 1 of meer
Voorkom kip ei probleem klant bestelling 1 1..* klant bestelling 1 *
Tussenklasse klant bestelling 1 * bestelregel aantal : integer 1 * product 1 *
Composiet = Cascading Delete klant bestelling 1 * * product bestelregel 1 *
Aggregatie klant bestelling * * product bestelregel 1 * Klant met zijn bestellingen verwijderen? Wilt u deze klant inclusief zijn 5 bestellingen verwijderen? Verwijderen Annuleren
Navigeerbaarheid klant bestelling 1 * * product bestelregel 1 *
Naam van associatie einde vanaf transportboeking * 1 plaats naam : string * 1 naar
Referentieklasse Enumeratie: Referentieklasse: klant «enumeratie» privilegeniveau privilegeniveau : privilegeniveau brons zilver goud Referentieklasse: klant 1 * privilegeniveau naam : string
Afgeleide attributen klant bestelling /totaalbedrag bestelling incl. btw : amount in € 1 * * product bestelregel 1 aantal : integer prijs per stuk incl. btw : amount in € /totaalbedrag bestelregel incl. btw: amount in € *
Overerving hotelboeking «enumeration» bedgrootte king size queen size budget size bedgrootte : bedgrootte ontbijt : boolean boeking aantal personen : integer totaalprijs incl. btw: amount in € plaats naam : string 1 * van naar transportboeking vliegreis klasse : vliegklasse «enumeration» vliegklasse business economy busreis
Gebruikers en rollen gebruiker gebruikersnaam : string wachtwoord : password is klant : boolean is magazijnmedewerker : boolean is verkoper : boolean is produktbeheerder : boolean
Telefoonnummer type string
Layout van diagram Maak de layout van diagrammen zo, dat de letters voldoende groot zijn als je ze op een beamer of in een ontwerpdocument toont.
Object Relational Mapping
ORM: klasse voornaam : string tussenvoegsel : string [0..1] achternaam : string klant product naam : string prijs incl. btw : amount in € klassendiagram: id (PK, int, not null) voornaam (varchar, not null) tussenvoegsel (varchar, null) achternaam (varchar, not null) klant product naam (varchar, not null) prijsInclBtw (decimal, not null) database-ontwerp:
ORM: 1 op veel associatie klant bestelling id (PK, int, not null) klantid (FK, int, not null) database-ontwerp: klassendiagram: klant 1 * bestelling
ORM: veel op veel associatie klassendiagram: database-ontwerp: student les studentid (PK, FK, int, not null) lesid (PK, FK, int, not null) student_les id (PK, int, not null) student les * *
ORM: 1 op 1 associatie klassendiagram: database-ontwerp: factuur id (PK, FK, int, not null) id (PK, int, not null) bestelling bestelling 1 0..1 factuur
ORM: overerving Delegate klassendiagram: database-ontwerp: id (PK, FK) bedgrootte overnachting reis afstand boeking id (PK) prijs boeking prijs overnachting reis bedgrootte afstand
ORM: overerving roll down klassendiagram: database-ontwerp: id (PK) prijs bedgrootte overnachting reis afstand boeking prijs overnachting reis bedgrootte afstand
ORM: overerving roll up klassendiagram: database-ontwerp: boeking id (PK) soort prijs bedgrootte afstand boeking prijs overnachting reis bedgrootte afstand
Vragen?
Oefening Klassendiagram Maak klassendiagram met: Klassen Associaties Multipliciteiten Attributen Indien nodig: Overerving
Processen d.m.v. Activity Diagram Doel: Laten zien welke processen de objecten van een klasse doorlopen
Voorbeeld van bedrijfsproces proces van bestelling: klant magazijnmedewerker winkelwagen bestellen te betalen betaald betalen versturen verstuurd bestelling nummer : integer status : process besteld op : datetime [0..1]
[aantal bestelregels > 0] Voorwaarde proces van bestelling: klant magazijnmedewerker winkelwagen [aantal bestelregels > 0] bestellen te betalen betaald betalen versturen verstuurd bestelling nummer : integer status : process besteld op : datetime [0..1]
Automatische Keuze proces van aanvraagregel: medewerker garagebedrijf goedkeuring medewerker leasemaatschappij afkeuren nieuw afgekeurd [automatisch afgewezen] handmatig te beoordelen aangevraagd aanvragen [anders] [automatisch akkoord] gereed melden goedgekeurd goedkeuren gereed gemeld
Handmatige Keuze proces van aanvraagregel: medewerker garagebedrijf automatische goedkeuring medewerker leasemaatschappij afkeuren nieuw afgekeurd [automatisch afgewezen] handmatig te beoordelen aangevraagd aanvragen [anders] [automatisch akkoord] gereed melden goedgekeurd goedkeuren gereed gemeld
Handmatige Keuze proces van aanvraagregel: medewerker garagebedrijf automatische goedkeuring medewerker leasemaatschappij nieuw afgekeurd [automatisch afgewezen] handmatig te beoordelen aangevraagd aanvragen [anders] beoordelen [automatisch akkoord] gereed melden goedgekeurd gereed gemeld
Impliciete Merge proces van aanvraagregel: medewerker garagebedrijf automatische goedkeuring medewerker leasemaatschappij nieuw afgekeurd [automatisch afgewezen] handmatig te beoordelen aangevraagd aanvragen [anders] beoordelen [automatisch akkoord] gereed melden goedgekeurd gereed gemeld
Verwijderen afh v status proces van aanvraagregel: medewerker garagebedrijf automatische goedkeuring medewerker leasemaatschappij verwijderd verwijderen nieuw afgekeurd [automatisch afgewezen] handmatig te beoordelen aangevraagd aanvragen [anders] beoordelen [automatisch akkoord] gereed melden goedgekeurd gereed gemeld
betalings-herinnering incassobureau inschakelen Timer proces van factuur: systeem boekhouder te versturen betaald versturen naar klant te betalen betaling koppelen na 1 week betalingsherinnering te versturen betalings-herinnering versturen betalingsherinnering verstuurd na 10 werkdagen incassobureau in te schakelen incassobureau ingeschakeld incassobureau inschakelen
Veel Ingangsstatussen proces van factuur: systeem boekhouder te versturen betaald versturen naar klant te betalen betaling koppelen na 1 week betalingsherinnering te versturen betalings-herinnering versturen betalingsherinnering verstuurd na 10 werkdagen incassobureau in te schakelen incassobureau ingeschakeld incassobureau inschakelen
betalings-herinnering incassobureau inschakelen Geen Ingangsstatus proces van factuur: systeem boekhouder te versturen betaald versturen naar klant te betalen betaling koppelen na 1 week betalingsherinnering te versturen betalings-herinnering versturen betalingsherinnering verstuurd na 10 werkdagen incassobureau in te schakelen incassobureau ingeschakeld incassobureau inschakelen
Parallelle activiteiten proces van bestelling: klant systeem boekhouder magazijn- medewerker winkelwagen verstuurd te versturen bestelling versturen afgehandeld bestellen factuur versturen betaling koppelen betaald te factureren te betalen
Eenvoudig subproces afgehandeld proces van bestelling: klant systeem boekhouder magazijn- medewerker winkelwagen verstuurd te versturen bestelling versturen afgehandeld bestellen proces van factuur: factuur versturen betaling koppelen betaald te factureren te betalen
Apart subproces afgehandeld proces van bestelling: klant systeem magazijn- medewerker winkelwagen verstuurd te versturen bestelling versturen afgehandeld bestellen proces van factuur proces van factuur: systeem boekhouder factuur versturen betaling koppelen betaald te factureren te betalen
Signaal proces van bestelling: afgehandeld klant systeem magazijn- medewerker factuur is betaald winkelwagen besteld te versturen bestellen factuur creëren bestelling versturen verstuurd proces van factuur: afgehandeld systeem boekhouder factuur is betaald te factureren factuur versturen te betalen betaling koppelen betaald
Layout van diagram Maak de layout van diagrammen zo, dat de letters voldoende groot zijn als je ze op een beamer of in een ontwerpdocument toont.
Schermstroom komt later Inlogscherm [anders] Inloggen Toon modusloos bericht “gebruikersnaam en/of wachtwoord incorrect”. Overzicht belacties [gebruikersnaam en wachtwoord zijn correct] Volgende belactie Toon debiteur van volgende belactie. Belactie Debiteurdetails Uitloggen Uitloggen
Create, Read, Update, Delete komt later
Vragen?
Oefening voor Processen Inventariseer van welke klassen in uw applicatie de objecten een bedrijfsproces doorlopen Teken voor elk van deze klassen: voor elke gebruikersrol die in het proces iets doet een zwembaan de activiteiten tussen deze activiteiten de statussen in de vorm van pijlen Indien dit weinig processen zijn: vraag docent om extra oefeningen In StarUML teken je een guard d.m.v. Annotation > Text
Rollen & Autorisaties Doel: Aangeven welke rollen gebruikers kunnen hebben, en wat deze gebruikers kunnen (mogen) doen.
Zwembanen magazijnmedewerker klant winkelwagen bestellen te betalen betaald versturen verstuurd proces van bestelling: bestelling nummer : integer status : process besteld op : datetime [0..1]
CRUD matrix Create Read Update Delete klant product- beheerder C R U D magazijn- medewerker R klant eigen C R U D bestelling C R U1D1 eigen bestelregel C R U1D1 eigen product R indien de status van de bestelling ‘winkelwagen’ is 1
Attributen in CRUD matrix klant product- beheerder magazijn- medewerker klant C R U D R eigen R bestelling C R U1D1 R eigen R bestelregel C R U1D1 eigen R R prijs incl. btw R eigen R R product R C R U D R indien de status van de bestelling ‘winkelwagen’ is 1
Associaties in CRUD matrix klant plaats transportboeking van verkoper planner eigen C R U D C R D1 R R U indien de status van de reis ‘nog niet definitief’ is 1 naar plaats naam : string 1 * van naar transportboeking
Verwijderen afhankelijk van status proces van reparatie- of onderhoudsactiviteit: medewerker garagebedrijf automatische goedkeuring medewerker leasemaatschappij verwijderd verwijderen nieuw afgewezen [automatisch afgewezen] aangevraagd handmatig te beoordelen aanvragen [anders] beoordelen [automatisch akkoord] gereed melden akkoord gereed gemeld
Vragen?
Oefening Rollen & Autorisaties Maak CRUD matrix voor uw applicatie Waar nodig, aparte rijen voor attributen en associaties Wanneer alleen op eigen objecten, geef dit dan aan met het woord ‘eigen’ Als andere beperkingen, voetnoten
Navigatie: Schermstroomdiagram Doel: Aangeven hoe gebruiker tussen de schermen van de applicatie navigeert
wachtwoord zijn correct] Voorbeeld Schermstroom van debiteurenbeheerder: Inlogscherm [anders] Inloggen Toon modusloos bericht “gebruikersnaam en/of wachtwoord incorrect”. Overzicht belacties [gebruikersnaam en wachtwoord zijn correct] Volgende belactie Toon debiteur van volgende belactie. Belactie Debiteurdetails Uitloggen Uitloggen
wachtwoord zijn correct] «pseudostate» menubalk Hoofdmenu Schermstroom van productbeheerder: Inlogscherm Inloggen toon modusloos bericht “gebruikersnaam en/of wachtwoord incorrect” [anders] [gebruikersnaam en wachtwoord zijn correct] Uitloggen «pseudostate» menubalk Producten Klanten Bestellingen Creëren Annuleren Sluiten Sluiten «popup» Nieuw product «popup» Klant «popup» Bestelling Opslaan Annuleren «popup» Product
Navigeren via hoofdvenster... Product naam Kaas, jong, 1 kilogram prijs incl. btw € 12 Opslaan Annuleren
...of via popup Product naam Kaas, jong, 1 kilogram prijs incl. btw € 12 Opslaan Sluiten
Layout van diagram Maak de layout van je diagrammen zo, dat ze grote letters hebben als je ze op een beamer wilt laten zien.
Vragen?
Oefening voor Schermnavigatie Teken het hoofdmenu van uw applicatie Teken de schermstroomdiagrammen voor uw applicatie StarUML toont een choice als een cirkel i.p.v. een diamant
Schermen Doel: Aangeven wat je ziet op de schermen, en hoe ze werken Mooie vormgeving valt buiten bereik van deze cursus, dus besteed daar nu geen tijd aan!
Toevoegen aan winkelwagen Voorbeeld Startscherm van een klant: Gebruikersaccount aanmaken Inloggen Apple In winkelwagen: Zoek producten 1 x iPad 3G 3 x Magic Mouse € 398 € 195 Prijs inc. btw Product Merk Aantal Totaal inc. btw € 593 iPad Apple € 320 Bestellen iPad 3G Apple € 398 iPhone 4GS Apple € 495 MacBook Air 11 inch 64 GB Apple € 869 MacBook Air 13 inch 128 GB Apple € 999 Magic Mouse Apple € 65 Magic Trackpad Apple € 85 Toevoegen aan winkelwagen
Moet kloppen met schermstroom Schermstroom van een klant: toevoegen aan winkelwagen startscherm bestellen aangegeven aantallen toevoegen aan winkelwagen en aantallen weer leeg maken winkelwagen betalen gebruikersaccount aanmaken [anders] aanmelden gebruikersaccount aanmaken sluiten [ingelogd] inloggen toon modusloos bericht “gebruikersnaam en/of wachtwoord incorrect” betalen «modal» bevestiging betaling [anders] [gebruikersnaam en wachtwoord zijn correct] «modal» betalen via iDeal bevestigen
Attributen van klassendiagram Type van het attribuut: Schermelement: amount textbox met valutateken € boolean checkbox date date picker vrijdag 6 april 2012 ::: datetime of timestamp date picker met tijdbox vrijdag 6 april 2012 ::: 9:15 enumeratie radiogroep of dropdown keuze 1 keuze 2 keuze 3 of keuze 1 keuze 2 integer, float textbox string textbox time tijdbox 9:15
Associatie enkelvoudige multipliciteit klant verkoper * 0..1 Situatie: Schermelement: Weinig elementen om uit te kiezen en genoeg ruimte beschikbaar radio groep keuze 1 keuze 2 keuze 3 Weinig elementen om uit te kiezen en weinig ruimte beschikbaar dropdown keuze 1 keuze 2 keuze 3 Veel elementen om uit te kiezen veld met selecteerknop keuze 1 …
Associatie meervoudige multipliciteit klant verkoper * 0..1 Klanten Klant toevoegen… + Abel de Eerste x Benny van Beverwijk x Dirk Smets x Karel de Grote x Nico de Haas x Peter Pippeling x Stefan Klein Zwaaftink x
Duidelijke namen van knoppen Opslaan? Wilt u de wijzigingen opslaan? Opslaan Niet opslaan Annuleren Opslaan? Wilt u de wijzigingen opslaan? Ja Nee Annuleren
Knop uitgrijzen Persoon voornaam tussenvoegsel achternaam * straat & huisnummer * postcode & plaats * email telefoon thuis telefoon mobiel Opslaan Annuleren Velden met een * zijn verplicht Opslaan is niet mogelijk omdat er geen achternaam, straat, huisnummer, postcode en plaats is ingevuld.
Helpteksten Nieuwe persoon voornaam tussenvoegsel achternaam ? achternaam straat & huisnummer ? postcode & woonplaats Het huisnummer is inclusief de eventuele toevoeging (bis, III hoog, a, etc.). email telefoon thuis telefoon mobiel Creëren Annuleren
Defaultwaarden... Nieuw leasecontract Kenteken Ingangsdatum ::: Looptijd 36 maanden Winterbanden Brandstof Benzine Diesel Elektriciteit LPG Opslaan Annuleren
... of zekerheid dat bewust invullen Nieuw leasecontract Kenteken * Ingangsdatum * ::: Looptijd * maanden Winterbanden * Brandstof * Benzine Diesel Elektriciteit LPG Opslaan Annuleren Velden met een * zijn verplicht
Niet-modale mededeling De wijzigingen in klant Nico de Haas zijn opgeslagen. Klanten Klant toevoegen… + Abel de Eerste x Benny van Beverwijk x Dirk Smets x Karel de Grote x Nico de Haas x Peter Pippeling x Stefan Klein Zwaaftink x
Bevestigen of ongedaan maken De klant Jan Jansen is verwijderd. ongedaan maken Klanten + Klant toevoegen… Abel de Eerste x Benny van Beverwijk x Dirk Smets x Karel de Grote x Nico de Haas x Peter Pippeling x Stefan Klein Zwaaftink x
Het CRUD patroon... + x x x x x x x Producten Nieuw product… Kaas, belegen, 1 kilogram € 14,- x Kaas, jong, 1 kilogram € 12,- x Kaas, oud, 1 kilogram € 16,- x Kwark, halfvol, 500 gram € 3,- x Kwark, vol, 500 gram € 4,- x Melk, vol, 1 liter € 1,50 x Yoghurt, vol, 1 liter € 2,- x hoofdmenu Producten Creëren Annuleren Opslaan Annuleren Nieuw product Product
... CRUD patroon Nieuw product naam Slagroom, vol, 250 gram prijs incl. btw € 3 Creëren Annuleren Product naam Kaas, jong, 1 kilogram prijs incl. btw € 12 Opslaan Sluiten
Layout van diagram Maak de layout van schermen zo, dat de letters voldoende groot zijn als je ze op een beamer of in een ontwerpdocument toont.
Vragen?
Oefening voor schermen Teken de schermen van uw applicatie Maak schermstroomdiagram consistent ermee Maak alles consistent met eerder getekende diagrammen
Bedrijfslogicaregels
Meestal onderdeel van model proces van bestelling: klant magazijnmedewerker bestelling * bestelregel winkelwagen bestellen te betalen betaald betalen versturen verstuurd
Soms in tekst beschrijven Voorbeeld Als een klant voor € 1000 (excl. btw) of meer tegelijk bestelt, krijgt hij 2% korting. Altijd kort en duidelijk beschrijven!
Voorwaarde in bedrijfsproces backorderen te backorderen [anders] betaald [voldoende in voorraad] versturen te versturen
Voorwaarde in schermstroom Inlogscherm Inloggen [anders] [gebruikersnaam en wachtwoord zijn correct] Overzicht belacties
Automatische gebeurtenis Inlogscherm Inloggen Toon modusloos bericht “gebruikersnaam en/of wachtwoord incorrect”. [anders] [gebruikersnaam en wachtwoord zijn correct] Overzicht belacties
Vragen?
Oefening voor Bedrijfslogicaregels Beschrijf de bedrijfslogicaregels van uw applicatie
Rapporten & Koppelingen
Rapporten Specification by Example Representatieve gegevens Bijvoorbeeld meerdere exemplaren waar dat mogelijk moet zijn Tonen via schermstroom hoe gebruikers rapport kunnen opvragen
Koppelingen tussen systemen webshop iDeal
Afhankelijkheden tussen systemen controller model view
Afhankelijkheden tussen packages user interface business logic entities
Vragen over de hele stof?
Oefening Maak uw functioneel ontwerp volledig en correct Maak voorbeelden van de te genereren rapporten Geef aan welke systemen een rol spelen Geef de afhankelijkheden tussen deze systemen weer In StarUML teken je een interface als interface + association, en wordt een dependency op een interface op een andere manier getoond.
Van ontwerp naar realisatie
Scrum sprint 1 sprint 2 etc. sprint planning daily standup sprint demo retrospective sprint 2 sprint planning sprint demo daily standup retrospective etc. tijd etc.
Product Backlog Debiteuren zien Openstaand bedrag van debiteur zien Facturen zien Betalingen zien Betalingsherinneringen aanmaken Betalingsherinneringen zien Betalingsherinneringen versturen Contactmomenten loggen Contactmomenten zien
Rollen in een Scrum proces product owner scrum master teamlid Het proces Ontwikkelaar Tester Grafisch ontwerper etc. Functioneel ontwerp
Iteratieplan sprint 1: Openstaande bedragen inzien tijd sprint 2: Facturen en betalingen inzien etc. sprint 3: Herinneringen versturen sprint 4: Contactmomenten loggen
Modelgedreven Ontwikkeling Modellen Sjablonen Code generatie Source code van werkende applicatie Modellen Engine Werkende applicatie Runtime interpretatie
Oefening Maak een product backlog op basis waarvan uw functioneel ontwerp gebouwd kan worden.
Veel modelleerplezier!