Refactoring. Introductie Verschillende refactoringstappen
|
|
- Cornelis Aalderink
- 7 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Refactoring Introductie Verschillende refactoringstappen
2 Behoort tot de basisvocab van sw. ontwikkelaars. Fowler, Met bijdrage van o.a. Erich Gamma (GOF) en Kent Beck (JUnit) 2
3 Suboptimaal software Complexiteit en flexibiliteit van de componenten van de software niet optimaal. Leidt tot hoger onderhoud (bug fixing, feature aanpassen, feature toevoegen) kosten Onderschat onderhoud niet vaak grote kostenpost! 3
4 Refactoring Refactoring is transformatie op (de code van) een software om de software makkelijker te begrijpen en te onderhouden; de transformatie mag de observeerbaar gedraag van de software niet veranderen. Dus bijvoorbeeld performance is niet de hoofddoel van refactoring. 4
5 Bad smells in software Indicatoren dat refactoring nodig is: Code duplicatie Lange methode, grote klasse Methode met veel parameters Divergent fix, shotgun fix Feature envy Switch Temporary field (tijdelijk attribuut) Commentaar 5
6 Hoe doen we dat? 6 Formele theorie van refactoring? Klassen zijn echter complex (attributen, methoden, toegangmodifiers, statics, inheritence ), zulke theorie wordt snel onpraktisch. We doen refactoring als een serie van kleine stappen. Zoals: Geef een betere naam aan een methode Extractie van een block code tot een methode We leunen op testing om te garanderen dat elke stap de software consistent houdt. (retest na elke stap!) Maar deze zijn toch slechts cosmetische modificaties? niet erg belangrijk? De doel van refactoring is pragmatische onderhoud Refactoring doen we structureel
7 Refactoring doen we structureel Regelmatig In principe kun je je eigen refactoringstappen bedenken. Fowler s cataloog (~50) nuttig als je basis vocabulaire. Je hebt een goede test suite nodig Dekkend Autonoom 7
8 Voorbeeld LeenInfo - aantaldagen * leent Klant - naam - KlantPunten + leen(uitleen) + terug(uitleen) + mkfactuur() film * Film - titel -prijscode : int +$ KINDER +$ STANDAARD +$ NIEUW Hypothetisch nemen we aan dat dit een onderdeel van een groot software getter en setter impliciet bron: Fowler 8
9 Flattening associatieklasse leent * leeninfos LeenInfo - aantaldagen Klant - naam - KlantPunten + leen(uitleen) + terug(uitleen) + mkfactuur() film 1 Film - titel -prijscode : int +$ KINDER +$ STANDAARD +$ NIEUW Omdat Java geen 1 e klass associatieklasse niet heeft Alleen voor uitleg laat ik de assoc. klasse omgezet naar gewone klassen en relaties 9
10 10 mkfactuur() { double totprijs = 0 int punten = 0 println( Factuur voor + naam) for (LeenInfo v : leeninfos) { // bereken de huurprijs van v double v_prijs = 0 switch (v.getfilm().getprijscode()) { case Film.GEWOON : v_prijs = ; break case Film.NIEUW : v_prijs = ; break case Film.KINDER : v_prijs = ; break totprijs += v_prijs // bereken verkregen klantpunten uit v punten++ if (v.getfilm().getprijscode()==film.nieuw) punten++ println( Film + v.getnaam() +, prijs + v_prijs) println( Tot prijs + totprijs) println( Punten verdiend + punten)
11 11 mkfactuur() { double totprijs = 0 int punten = 0 println( Factuur voor + naam) for (LeenInfo v : leeninfos) { // bereken de huurprijs van v double v_prijs = 0 switch (v.getfilm().getprijscode()) { case Film.GEWOON : v_prijs = ; break case Film.NIEUW : v_prijs = ; break case Film.KINDER : v_prijs = ; break totprijs += v_prijs // bereken verkregen klantpunten uit v punten++ if (v.getfilm().getprijscode()==film.nieuw) punten++ println( Film + v.getnaam() +, prijs + v_prijs) println( Tot prijs + totprijs) println( Punten verdiend + punten) extract method : promoveer een groep statement tot een methode commentaar geeft hint neem de context ook mee!
12 Is dit nu makkelijker om te begrijpen of niet?? mkfactuur() { double totprijs = 0 int punten = 0 println( Factuur voor + naam) for (LeenInfo v : leeninfos) { double v_prijs = berekenprijs(v) totprijs += v_prijs punten += berekenpunten(v) println( Film + v.getnaam() +, prijs + v_prijs) println( Tot prijs + totprijs) println( Punten verdiend + punten) Discussiepunt: de tijdelijke lokale variabele 12
13 Maar dit gaat toch ten koste van performance 13 mkfactuur() { double totprijs = 0 int punten = 0 println( Factuur voor + naam) for (LeenInfo v : leeninfos) { berekenprijs(v) double v_prijs = berekenprijs(v) totprijs += v_prijs punten += berekenpunten(v) println( Film + v.getnaam() +, prijs + v_prijs) println( Tot prijs + totprijs) println( Punten verdiend + punten) replace temp with query Fowler s stelling: 90% van de tijd is je software bezig met 10% van je code. Performance optimalisatie is makkelijker na refactoring. (gebruik profiler!)
14 class Klant { berekenprijs(leeninfo v) { double v_prijs = 0 switch (v.getfilm().getprijscode()) { case Film.GEWOON : v_prijs = ; break case Film.NIEUW : v_prijs = ; break case Film.KINDER return v_prijs : v_prijs = ; break Film Film Switch over type vluchtig replace type-code with Strategy GewoneFilm NieuweFilm KinderFilm 14 Werkt helaas niet we willen de prijscode van een film ook dynamisch te kunnen veranderen.
15 Switch switch (expressie) { case 0 : doe iets ; break case 1 : doe iets ; break case 9 : doe iets ; 15
16 Na replace type-code with Strategy LeenInfo aantaldagen 1 Film berekenprijs(v) 1 PrijsStrategie prijs(n) * GewonePrijs 16 Klant mkfactuur () mkfactuur() { double totprijs = 0 v.getfilm().berekenprijs(v) int punten = 0 println( Factuur voor + naam) for (LeenInfo v : leeninfos) { totprijs += berekenprijs(v) punten += berekenpunten(v) println( Film + v.getnaam() +, prijs + berekenprijs(v)) println( Tot prijs + totprijs) println( Punten verdiend + punten) NieuwePrijs KinderPrijs
17 LeenInfo aantaldagen 1 Film berekenprijs() prijs 1 PrijsStrategie prijs(n) * KinderPrijs Klant mkfactuur () NieuwePrijs GewonePrijs berekenprijs(leeninfo v) { double v_prijs = 0 switch (getprijscode()) { case Film.GEWOON : v_prijs = ; break case Film.NIEUW : v_prijs = ; break case Film.KINDER : v_prijs = ; break prijs(n) { if (n<=2) return 2.0 else (n 2)* 1.5 return v_prijs this.prijs.prijs(v.getaantaldagen()) 17 replace conditional with polymorphism
18 LeenInfo aantaldagen 1 Film berekenprijs() prijs 1 PrijsStrategie prijs(n) * KinderPrijs Klant mkfactuur () NieuwePrijs GewonePrijs berekenprijs(leeninfo v) { double v_prijs = 0 switch (getprijscode()) { case Film.GEWOON : v_prijs = ; break case Film.NIEUW : v_prijs = ; break case Film.KINDER : v_prijs = ; break return v_prijs berekenprijs(leeninfo v) { return prijs.prijs(v.getaantaldagen()) 18 replace conditional with polymorphism
19 Fowler s refactoringset Stroomlijnen van methodes (9) Verplaatsen van features (8) Organisatie van data (16) Vereenvoudiging van conditionele statements (8) Vereenvoudiging van methodeaanroep (15) Generalisatie (12) 19
20 Stroomlijnen van methode Fowler s stelling: lange methodes zijn vaak bronnen van problemen. (Fowler geeft voorkeur aan (veel) korte methodes) hoofdwapen: extract method inverse: inline method als de body net zo duidelijk als de methodenaam. elimineren en introduceren van temp als je een blok B tot een methode uittrekt, moet je ook de context van B mee nemen temp maakt dit lastiger. 20
21 Temp inline temp en introduce explaining variable double verkoopprijs = product.getprijs() * 1.5 return verkoopprijs > 10.0 expressie is te complex return product.getprijs() * 1.5 > 10.0 replace temp with query return verkoopprijs() > 10.0 je kunt niet alle temp elimineren loopteller, accumulatie var. 21
22 Als je parameterlijst te lang is Introduce parameter object datumprofiel datum opendag prijs(datum, leeftijd, islid, actiekaart, isopendag) persoonsprofiel leeftijd lidmaatschap actiekaart prijs(persoonsprofiel, datumprofiel) 22
23 Features verplaatsen Verdeel het werk (welke klasse doet wat). Een klasse die te veel doet is ook moeilijker om te begrijpen. hoofdwapen: move method/field (heb je al gezien) splitsen en samenvoegen van klassen introduceren en elimineren van delegatie 23
24 Splitsen en samenvoegen Extract class: een klasse C doet te veel. Herken een deel van C die je tot een eigen klasse D kan groeperen. Persoon naam leeftijd straat huisnr postcode printadres() Persoon naam leeftijd 1 1 Adres straat huisnr postcode printadres() De inverse is inline class. 24
25 Delegatie Hide delegate Persoon adres.getpostcode().getstad() Persoon adres. getstad() Adres Postcode getstad() Adres getstad() Postcode getstad() getstad() { return postcode.getstad() 25 remove middle man als Adres te veel delegatie doet ipv echt werk
26 Stroomlijnen van conditionele stmt Complexe domeinlogics vertalen zich naar complexe conditionele statements, die vaak moeilijk te begrijpen en dus foutgevoelig is. 26 Hoofdwapen: extract methode op condities decompose conditional, consolidate conditional, Vereenvoudiging op de structuur remove control flag replace conditional with polymorphism (heb je al gezien) replace nested conditional with guard clauses
27 Extract methode op conditionele stmt Decompose conditional if (datum.voor(zomer_begin) datum.na(zomer_eind) ) prijs = 0.8 * prijs if if (???... (nietzommer(datum (datum ) ) prijs ) ) prijs = 0.8 = 0.8 * prijs * prijs Consolidate conditional expression 27 prijs(persoon) { if (leeftijd 10) if (persoon.islid if (persoon.isjarig()) return 0 ; return normaleprijs(persoon) prijs(persoon) { if (isgratis(persoon)) return 0 return normaleprijs(persoon)
28 Vereenvoudiging van structuur remove control flag gevonden = false product = null for (iter = V.iterator() ; iter.hasnext() &&!gevonden ; ) { product = iter.next() gevonden = product.prijs() <= 10.0 for (Product p : V) { product = p if (product.prijs() <= 10.0) break 28
29 Vereenvoudiging van structuur Soms kun je replace nested conditional with guarded clauses doen. If-else voor normale flow met meerdere varianten prijs() { if (dag.isweekend()) return 40.0 else return 30.0 Soms heb je normale flow met alternatieven die je liever ziet als afwijkende flows minder expliciet in if-else 29 prijs (persoon) { normaleprijs = 30 ; if (persoon.leeftijd 4) return 0 else if (!dag.isweekend ()) return normaleprijs+10 ; else return normaleprijs ;
30 30 Vereenvoudiging van structuur Soms heb je normale flow met een of meer afwijkende flows minder expliciet in if-else prijs (persoon) { normaleprijs = 30 ; if (persoon.leeftijd 4) return 0 else if (!dag.isweekend ()) return normaleprijs+10 ; else return normaleprijs ; prijs (persoon) { normaleprijs = 30 if (persoon.leeftijd 4) return 0 if (datum.isopendag()) normaleprijs += 10 return normaleprijs
31 Generalisatie Optimaliseer je inheritence structuur. Verplaatsen van features binnen een hiërarchie. Splitsen en samenvoegen Vervangen van inheritence met delegatie, of andersom 31
32 Pull up / pull down Product naam pull up Product naam korting() Appel korting() Koffie korting() Appel Koffie Product naam pull down Product naam korting() Appel korting() Koffie Appel Koffie 32 als korting() eigenlijk alleen relevant is voor appel
33 Extract sub/super class Product naam korting() extract subclass Product naam korting wordt alleen door sommige instanties gebruikt KortingProduct korting() 33 Product naam prijs geticoon () seticoon(i) reseticoon() Persoon naam geticoon () seticoon(i) reseticoon() Klassen met een subset van dezelfde features extract superclass Product naam prijs Persoon naam ItemMetIcoon geticoon () seticoon(i) reseticoon()
34 Extract interface WebShop Factuur meerdere klantklassen die dezelfde subset van methodes van Product gebruiken Product naam getprijs() getactie() getkorting() PrijsItem getprijs() getactie() getkorting() Product naam 34
35 Collapse hierarchy Appel Appel GroenAppel ze blijken niet veel van elkaar verschillen. 35
36 replace delegation with inheritence, en omgekeerd Product naam prijs ItemMetIcoon geticoon () seticoon(i) reseticoon() als Product blijkt slechts een relatief klein deel van ItemMetIcoon gebruikt als Product blijkt veel werk naar ItemMetIcoon delegeert Product naam prijs ItemMetIcoon geticoon () seticoon(i) reseticoon() 36
37 Tools Liever laat je refactoringstappen geautomatiseerd door een tool veel sneller dan handmatig kans om fout te maken is veel kleiner. maar sommige refactoringstappen zijn moeilijk te automatiseren (zoals replace cond with polymorhpism) Ondersteunt door IDEs, maar ondersteuning varieert Eclipse, Netbeans, IntelliJ Elimineer de noodzaak van testing niet. 37
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,
Nadere informatieDatatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
Nadere informatieProgrammeren in Java les 3
4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een
Nadere informatieH9: Klasse Ontwerp. Richtlijnen Specificaties Multiple inheritence
H9: Klasse Ontwerp Richtlijnen Specificaties Multiple inheritence SchetsPlus... doe ik het goed? 2 Hoe maak ik goede klassen? We gaan kijken naar: algemene ontwerp-richtlijnen software metric Complement:
Nadere informatieTentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale
Nadere informatieJava Programma structuur
Java Programma structuur public class Bla // div. statements public static void main(string argv[]) // meer spul Voortgezet Prog. voor KI, week 4:11 november 2002 1 Lijsten Voorbeelden 2, 3, 5, 7, 13 Jan,
Nadere informatieVereiste kennis. 1 Java-editor. 2 Het compileren van een programma
3 Vereiste kennis Dit boek richt zich op het leren programmeren door het oefenen met programmeercodes. Veel theorie komt in het begin niet aan de orde. Dat is een grote uitdaging want het is niet makkelijk
Nadere informatieIMP Uitwerking week 13
IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het
Nadere informatieOvererving & Polymorfisme
Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit
Nadere informatieNaam:... INFO / WIS-INF / ASIB / IAJ. Theorie
Theorie Beantwoord onderstaande vragen (elke vraag staat op 3 punten) door de antwoordzinnen KORT aan te vullen. 1. Wat doe je wanneer je de risico's projecteert (afschat)? Welke categorieën van risico's
Nadere informatieTentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.
Nadere informatieSoftware Test Documentation
FACULTEIT INGENIEURSWETENSCHAPPEN & WE- TENSCHAPPEN DEPARTMENT OF COMPUTER SCIENCE AND APPLIED COMPUTER SCIENCE Software Test Documentation Software Engineering Nicolas Carraggi, Youri Coppens, Christophe
Nadere informatieTurn legacy code into clean code! Jeroen Mengerink David Baak
Turn legacy code into clean code! Jeroen Mengerink David Baak Agenda Introductie Legacy code voorbeeld Unittests maken Wat is refactoren Legacy code refactoren Wat zijn SOLID principes SOLID principes
Nadere informatieScala. Korte introductie. Sylvia Stuurman
Korte introductie Sylvia Stuurman Wat is er zo bijzonder aan? Schaalbaar Objectgeoriënteerd (handiger dan Java!) Functioneel Scripts schrijven Gecompileerd: Java bytecode Pagina 2 voor scripts Pagina 3
Nadere informatieJava. Basissyllabus. Egon Pas
Java Basissyllabus Egon Pas 2011 BeanPole bvba Gasmeterlaan 92-9000 Gent BTW BE 472.902.516 Tel: + 32 9 224 42 17 Fax: + 32 9 223 62 88 www.beanpole.be info@beanpole.be 1 Programmeren 1.1 Hoe werkt een
Nadere informatieInleiding C++ Coding Conventions
Inleiding C++ Coding Conventions Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2012-2013. Ruben Van den Bossche,
Nadere informatiePagina 1/6. Joris Van Geet! :59 Comment: 1pt voor iteratief 1pt voor incrementeel niets voor een voorbeeldje
Nota: Schrijf je antwoorden kort en bondig in de daartoe voorziene velden. Elke theorie-vraag staat op 2 punten, elke oefening op 8 punten. Het geheel staat op 40 punten. Vraag 1...[.../2] Definieer de
Nadere informatieDie inputs worden op een gecontroleerde manier aangeboden door (test) stubs. De test driver zorgt voor de uiteindelijke uitvoering ervan.
Nota: Schrijf je antwoorden kort en bondig in de daartoe voorziene velden. De puntenverdeling is 2 punten per theorie-vraag en 8 punten per oefening. Het totaal is 40. Vraag 1. Er bestaan verschillende
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
Nadere informatieVakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be
Nadere informatieProgrammeermethoden NA. Week 5: Functies (vervolg)
Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def
Nadere informatieIntroductie. NAV performance. Derk Jan Oelemans. Manager Development, BI en E-Business Qurius Business Solutions
Introductie Microsoft Global Partner of the Year 2007 NAV performance Manager, BI en E-Business Qurius Business Solutions Performance domeinen Functionele alternatieven Datamodel wijzigingen standaard
Nadere informatieEen topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:
Java Les 2 Theorie Beslissingen Algemeen Net als in het dagelijks leven worden in software programma s beslissingen genomen, naast het toekennen van waarden aan variabelen zijn beslissingen één van de
Nadere informatieAbstraheren van modellen
Abstraheren van modellen Geert Delanote 7 maart 2005 Geert.Delanote@cs.kuleuven.ac.be Software Development Methodology 1 Inhoudstafel Motivatie Denkpistes Software Development Methodology 2 Motivatie Verslag
Nadere informatieObjectgeoriënteerd programmeren in Java 1
Objectgeoriënteerd programmeren in Java 1 CPP Javaprogrammeur Bijeenkomst 3 Leereenheden 7, 8, 9 De Java API Java bevat een grote bibliotheek standaardklassen: de Java API Voorbeelden java.lang basisklassen
Nadere informatieUitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf
Nadere informatieVraag 1... Ieder risico in een risico analyse moet geschat worden voor wat betreft zijn impact... en zijn kans/propabiliteit...
Nota: Schrijf je antwoorden kort en bondig in de daartoe voorziene velden. Elke theorie-vraag staat op 2 en elke oefening op 8 punten. Het geheel staat op 40. Vraag 1... Ieder risico in een risico analyse
Nadere informatieModulewijzer Tirdat01
Modulewijzer Tirdat01 W. Oele 25 augustus 2008 1 Inhoudsopgave 1 Inleiding en leerdoelen 3 2 Voorkennis 3 2.1 tirprg01 en tirprg02........................ 3 2.2 tirprg03.............................. 4
Nadere informatieRecursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40
Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N
Nadere informatieComputervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?
Inhoud Computervaardigheden Hoofdstuk 4 Scripting (Let op: dit is enkel voor studenten Biologie.) Dit hoofdstuk bekijkt heel kort de basis van scripting. - Opstellen van functies. - Conditionele code.
Nadere informatieTentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag u gebruik maken van: Barnes, Object-Oriented Programming with Java en de Notitie Algoritmiek
Nadere informatieObjectgericht programmeren 1.
Objectgericht programmeren 1 joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie
Nadere informatieUitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur
Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan
Nadere informatieCorrespondentie inzake overnemen of reproductie kunt u richten aan:
5 - Mockito Vrijwel alle namen van software- en hardwareproducten die in deze cursus worden genoemd, zijn tegelijkertijd ook handelsmerken en dienen dienovereenkomstig te worden behandeld. Alle rechten
Nadere informatierecursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie
Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk
Nadere informatieOntwerp van Informatiesystemen
1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents
Nadere informatieStacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49
Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen
Nadere informatieJavascript oefenblad 1
Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de
Nadere informatieTentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Nadere informatieJava Les 3 Theorie Herhaal structuren
Java Les 3 Theorie Herhaal structuren Algemeen Een herhaal structuur een is programmeertechniek waarbij bepaalde Java instructies worden herhaald net zo lang tot een bepaalde voorwaarde is bereikt. Een
Nadere informatieUniversiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren
Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int
Nadere informatieChris de Kok 223548 TDI 3. Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren
Chris de Kok 223548 TDI 3 Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren Inhoud Inleiding... 3 Black box / White box... 3 XP... 3 SimpleTest... 3 Eclipse plugin... 4 GroupTest...
Nadere informatieLessen Java: Reeks pag. 1
Lessen Java: Reeks 2 1-3-2016 pag. 1 Primitieve types type grootte waardes byte 8 bits 128, 127 short 16 bits 32768, 32767 int 32 bits 2 31, 2 31 1 long 64 bits 2 63, 2 63 1 type grootte waardes float
Nadere informatieKnowledgeable Referenceable Personable Accountable Scalable
Knowledgeable Referenceable Personable Accountable Scalable 1 WebForms en JavaBeans bij Essent Energie OGH presentatie 3 juli 2003 2 Agenda Inleiding Eenvoudige Java Bean in Web Forms Demo Meer complexe
Nadere informatieUnit testen van EJB's. Koert Zeilstra - iprofs
Unit testen van EJB's Koert Zeilstra - iprofs Inleiding We weten tegenwoordig allemaal dat we ons product moeten testen om de kwaliteit te verhogen en behouden Software-ontwikkelaars zijn over het algemeen
Nadere informatieAanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur
Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, 13.30-15.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Opgaven 1 levert 8 punten op, opgave 2 levert 12 punten
Nadere informatieInleiding programmeren
Inleiding programmeren Docent: José Lagerberg Assistenten: Robin de Vries, Jordy Perlee, Dimitri Belfor, Stephen Swatman, Erik Kooistra, Daan Kruis, Daniel Louwrink Cursusinformatie: https://staff.fnwi.uva.nl/j.m.lagerberg
Nadere informatieDeeltentamen Grammatica s en ontleden 22 december 2005
Tentamen Grammatica s en ontleden 22 december 2005 1 Deeltentamen Grammatica s en ontleden 22 december 2005 Let op: opgave 1 t/m 4 tellen voor (slechts) 5 punten mee, opgave 5 voor maar liefst 50 punten,
Nadere informatieContentSearch. Deep dive
ContentSearch Deep dive 2 Waarvoor in te zetten? Alternatief voor database queries Waar performance een issue kan zijn Daadwerkelijk frontend Site Search Mogelijk niet de beste optie maar wel goedkoop
Nadere informatieInhoudstafel. UML (Unified Modeling Language)
UML (Unified Modeling Language) Inhoudstafel Inleiding...2 Waarvoor dient UML...2 Wat is UML... 2 Use-cases... 2 Inleiding...2 Voorbeeld...3 Eigenschappen van een goede use-case...3 Wat is een actor...4
Nadere informatiecolleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser
colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp
Nadere informatieTentamen Formele Methoden voor Software Engineering (213520)
Tentamen Formele Methoden voor Software Engineering (213520) 2 juli 2009, 13:30-17:00 uur. BELANGRIJK: geef op je tentamen duidelijk aan: je studierichting of je beide huiswerkopgaven gemaakt hebt, en
Nadere informatieDesign principes.
Design principes joost.vennekens@kuleuven.be Motivatie Software projecten mislukken vaker Vaker dan bouwkunde Vaker dan EM Vaker dan Oorzaak? Omgaan met verandering Vereisten Technologie Externe systemen
Nadere informatieGeen webservice? Geen probleem!
Geen webservice? Geen probleem! Webservice mocking met WireMock Bas Dijkstra www.ontestautomation.com bas@ontestautomation.com @_basdijkstra WiFi Wat gaan we doen? _Stubbing, mocking en servicevirtualisatie
Nadere informatieOpdracht 7a. Applicatiebouw 2014/2015
Applicatiebouw 2014/2015 Opdracht 7a Inhoud Applicatiebouw op dag 7 College In het college wordt oa. overerving behandeld, waarmee je uit een bestaande klasse een nieuwe andere klasse kan maken. Ook zijn
Nadere informatieProgrammeermethoden NA. Week 5: Functies (vervolg)
Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x
Nadere informatieObjective-C Basis. 23 april 2005, Eindhoven Patrick Machielse
Objective-C Basis 23 april 2005, Eindhoven Patrick Machielse patrick@hieper.nl Algemeen // extensies Objective-C code in bestanden met.m extensie // commentaar moet! /* Alles hiertussen wordt genegeerd
Nadere informatieAbstracte klassen & Interfaces
Abstracte klassen & Interfaces Overerving public class Vierhoek {... Vierhoek public class Rechthoek extends Vierhoek {... public class Ruit extends Vierhoek {... Rechthoek Ruit Elke rechthoek is een vierhoek.
Nadere informatieTentamen Imperatief Programmeren
Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven
Nadere informatieSoftware Test Documentation
FACULTEIT INGENIEURSWETENSCHAPPEN & WE- TENSCHAPPEN DEPARTMENT OF COMPUTER SCIENCE AND APPLIED COMPUTER SCIENCE Software Test Documentation Software Engineering Nicolas Carraggi, Youri Coppens, Christophe
Nadere informatieAPPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts
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,
Nadere informatieObject Oriented Programming
Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming
Nadere informatieNoties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst
s Informatica Hoofdstuk 1 Object Klasse Methode Parameters Type Velden Toestand Compiler Resultaten (returnwaarde) In java fungeren objecten als een model voor de elementen waarin een probleem kan worden
Nadere informatieDataconversie met Oracle Spatial
Realworld klantendag 19 september 2013 Voorstellen 1 2 Computer Science & Engineering (TU/e) 3 Realworld Systems 4 Datamigraties Alliander Stedin Agenda 1 Architectuur Inleiding Ontwerp migratie 2 Rapportage
Nadere informatieSoftware Test Plan. PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015
Software Test Plan PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie 1 Versie
Nadere informatieAchtste college algoritmiek. 8 april Dynamisch Programmeren
Achtste college algoritmiek 8 april 2016 Dynamisch Programmeren 1 Werkcollege-opgave Dutch Flag Problem Gegeven een array gevuld met R, W, en B. Reorganiseer dit array zo dat van links naar rechts eerst
Nadere informatieTentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft
I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Nadere informatieDesign patterns Startbijeenkomst
Design patterns Startbijeenkomst Harrie Passier Docenten Sylvia Stuurman (1 e examinator) Sylvia.Stuurman@ou.nl Harrie Passier (2 e examinator) Harrie.Passier@ou.nl Aarzel niet vragen te stellen! Rooster
Nadere informatieAutomatische Testen van Java Klassen
Automatische Testen van Java Klassen Wishnu Prasetya (wishnu@cs.uu.nl) Dit artikel bespreekt de problemen van tradioneel handmatig testen en hoe men tegenwoordig Java klassen automatisch kan testen. Niemand
Nadere informatieVariabelen en statements in ActionScript
Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer
Nadere informatieBeginselen van programmeren Practicum 1 (Doolhof) : Oplossing
Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,
Nadere informatieAgenda. Introductie Aan het werk Conclusie / restrospective
Agenda Introductie 13.45 14.30 Aan het werk 14.30 16.30 Conclusie / restrospective 16.30 17.00 Introductie High performance Testing Voorstellen Waar ben je echt goed in (3 minuten) Teams vormen op basis
Nadere informatieTentamen Programmeren in C (EE1400)
TU Delft Faculteit EWI Tentamen Programmeren in C (EE1400) 28 jan 2011, 9.00 12.00 - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));
Nadere informatieZelftest OOAD/UML. Document: N0767Test.fm 30/08/2010. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium
Zelftest OOAD/UML Document: N0767Test.fm 30/08/2010 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTIE Deze test is gebaseerd op de inhoud van onze cursus OO
Nadere informatieCorrespondentie inzake overnemen of reproductie kunt u richten aan:
Vrijwel alle namen van software- en hardwareproducten die in deze cursus worden genoemd, zijn tegelijkertijd ook handelsmerken en dienen dienovereenkomstig te worden behandeld. Alle rechten voorbehouden.
Nadere informatieEnterprise Connectivity. Marnix van Bo. TU Delft Elek Software Architect 20 jaar ervarin ontwikkeling
Fir rst Base Enterprise Connectivity Marnix van Bo chove First Base: opgericht in 2001 TU Delft Elek ktrotechniek - 1998 Software Architect 20 jaar ervarin g met software ontwikkeling Presentatie Ideeën
Nadere informatiehttp://www.liacs.nl/home/kosters/java/
sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/
Nadere informatieDesign principes.
Design principes joost.vennekens@kuleuven.be Doelstelling Code die werkt doet wat klant wil betrouwbaar is gemakkelijk te veranderen is En dit ook blijft doen Software rot Rottende software geeft geurtjes
Nadere informatieReleasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken
Releasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken De business organisatie heeft altijd stijgende verwachtingen van uw IT organisatie. Meer dan ooit is het van
Nadere informatieKwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();
Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static
Nadere informatieDeel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,
Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt
Nadere informatieIngebouwde klassen & methodes
Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private
Nadere informatieVerder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.
Objectgeoriënteerd PHP (versie 5) Kennisvereisten: Ervaring met programmeren in PHP met MySQL Je weet wat een class of klasse is Je weet wat een instantie van een klasse (een object) is Je weet wat een
Nadere informatieArcGIS Mobile ADF. Smart Client Applicaties voor ArcGIS Server Eva Dienske, Wim Ligtendag
ArcGIS Mobile ADF Smart Client Applicaties voor ArcGIS Server Eva Dienske, Wim Ligtendag Agenda Wat is de Mobile ADF? Architectuur Demo Wat is de mobile ADF? Ontwikkeltoolkit voor mobiele (Smart Client)
Nadere informatieVeel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.
Derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur Naam: Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 14 punten op, opgave 2 levert 12 punten op, en opgave
Nadere informatieUitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)
Nadere informatieProgrammeermethoden. Controle-structuren. Walter Kosters. week 3: september kosterswa/pm/
Programmeermethoden Controle-structuren Walter Kosters week 3: 17 21 september 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleveren opgave 1 Inleveren: digitaal clintonobama1.cc en print van mooi.pdf.
Nadere informatieEen korte samenvatting van enkele FORTRAN opdrachten
Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is
Nadere informatieKostencalculator 2.0. Renovaties productielocaties beter begroten. R.M. (Rob) Schotsman 04 maart 2014
Kostencalculator 2.0 Renovaties productielocaties beter begroten R.M. (Rob) Schotsman 04 maart 2014 Hartelijk welkom in onze iroom 2 Introductie 21 november 2014 jaarlijkse kostenmiddag Kostencalculator
Nadere informatieEen expressie zoals leeftijd>=65 wordt een boolean expressie genoemd. Een boolean expressie kan dus de waarde true of de waarde false geven
2. Selectiestatements 2.1 Het if-statement Selectiestatements heb je in de module WO.PHP.basis al geleerd. Het zijn de coderegels met if( ) en swich( ). De syntax (schrijfwijze) van deze code wijkt niet
Nadere informatieN&O: Objectgericht Programmeren. (in Python)
N&O: Objectgericht Programmeren (in Python) N&O Twee aparte onderwerpen Internet en websites (50%) Programmeren in Python (50%) Komen samen in dynamische websites Webpagina als user interface voor Python
Nadere informatieInhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89.
Inhoud leereenheid 7c JavaScript: Objecten en functies Introductie 59 Leerkern 60 1 Functies 60 1.1 Syntax - samenvatting 60 1.2 Functies definiëren 61 1.3 Functie als parameter (facultatief) 64 1.4 Functie
Nadere informatieInformatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele
Informatica Objectgeörienteerd leren programmeren Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode Objectgeörienteerd
Nadere informatieSYNTRA-WEST. Cursus OOP. Deel
SYNTRA-WEST Cursus OOP Deel Syntra-West voorheen VORMINGSINSTITUUT VOOR KMO Syntra-West Doorniksesteenweg 220 8500 Kortrijk Tel. 056/26.02.00 Fax 056/22.81.07 i Inhoudsopgave SYNTRA-WEST... 0 CURSUS OOP...
Nadere informatieInleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!
Inleiding Software Engineering Unit Testing, Contracten, Debugger 13 Februari 2014 Beknopte info over Unit Testing en Contracten kan je vinden op het einde van dit document. Eclipse beschikt over een handige
Nadere informatieVaak wil je een code schrijven, waar je verschillende acties uitvoeren voor verschillende beslissingen. Je kan daarbij keuzestructuren gebruiken.
PHP Les 5 : Interessante links: o http://www.dbzweb.be/moermant/ o http://www.ivobrugge.be/cursusweb/html4/formulieren.asp Vaak wil je een code schrijven, waar je verschillende acties uitvoeren voor verschillende
Nadere informatieVoorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten
Nadere informatie