Objectgericht programmeren
Inleiding
Department of Computer Science Software Development Methodology
Objectgericht Programmeren Eric Steegmans
Overzicht
Objectgericht Programmeren
Cursusmateriaal
Lessen
Evaluatie
Cursustekst Referentiewerken Programmeeromgeving
Verloop van de cursus
Doelstellingen Extreme Programming Inhoud
Examen
Demonstratie Eclipse 2
Academiejaar 2006-2007
1
Objectgericht programmeren
Inleiding
Doelstellingen
Beredeneerde en gedisciplineerde ontwikkeling van middelgrote, sequentiële softwaresystemen
Methodiek: Objectgericht programmeren - Principes, regels en aanbevelingen - Balanceren van kwaliteitsvereisten zoals “correctness”, “simplicity”, “adaptability”, “re-usability” and “efficiency”
Programmeertaal: Java
Ontwerp: Unified Modeling Language (UML)
- Principes ook toepasbaar in andere talen (C++, C#, Eiffel, ...) - Enkel klasse-diagramma’s voor middelgrote systemen
Sequentiële systemen - Geen behandeling van parallelle uitvoering (threads), van distributie (Enterprise Beans), ...
Proces: Extreme Programming - Stappen in de ontwikkeling van softwaresystemen in teamverband 3
Extreme Programming
Simplicity is the key
Structure your software system such that it can handle all current issues - and only those - in an elegant way - Do not try to anticipate future elements - Example: do not partition a class of persons into subclasses of men and women, if such a separation is not needed right now - Never add functionality that you do not need yet - Do not add methods related to the marital state of persons, if that property is of no relevance right now
4
Academiejaar 2006-2007
2
Objectgericht programmeren
Inleiding
Extreme Programming
Refactor mercilessly
Restructure your software system as soon as it no longer handles all current issues in the most elegant way - Split a class into two or more classes if it turns out to define groups of different objects - Turn a class of persons into a hierarchy involving an abstract class of persons and concrete subclasses of men and women - Split a complex method into sub-methods - Extract parts of the body of a complex method into auxiliary methods - Move methods up and down a hierarchy of classes - …
5
Extreme Programming
Pair programming
All code is produced by pairs of two programmers working on the same machine - The best way to pair program is to just sit side by side in front of the monitor - Slide the key board and mouse back and forth - One person types and thinks tactically about the method being created - The other person thinks strategically about how that method fits into the class
Pair programming increases software quality without impacting time to deliver - 2 people working at a single computer add as much functionality as two working separately - A pair of programmers delivers software of superior quality
6
Academiejaar 2006-2007
3
Objectgericht programmeren
Inleiding
Extreme Programming
Test-driven development
Develop unit tests before you work out implementations - Start with the documentation describing what a method must do - Proceed with a series of tests to verify the correctness of the method - Finish with the implementation of the method
Each time something is added to the software, all the tests must run again - Use a testing framework (JUnit) to collect all the tests in a test suite - Do not proceed with another method, before all tests run again
Automated unit tests offer a pay back far greater than the cost of creation - The harder the test is to write the more you need it because the greater your savings will be
7
Inhoud
Deel 1: Ontwikkeling van alleenstaande klassen
Deel 2: Relaties
Documentatie in termen van precondities, postcondities en invarianten Behandelen van uitzonderlijke gevallen door totaal programmeren, nominaal programmeren en defensief programmeren Implementatie van uni-directionele en bi-directionele associaties tussen objecten van klassen Destructie van objecten
Deel 3: Overerving
Polymorfisme en dynamische binding als kernconcepten in de ontwikkeling van uitbreidbare en herbruikbare software Het substitutieprincipe van Liskov als leidraad in de ontwikkeling van hiërarchieën van klassen 8
Academiejaar 2006-2007
4
Objectgericht programmeren
Inleiding
Overzicht
Objectgericht Programmeren
Cursusmateriaal
Lessen
Evaluatie
Cursustekst Referentiewerken Programmeeromgeving
Verloop van de cursus
Doelstellingen Extreme Programming Inhoud
Examen
Demonstratie Eclipse 9
Toledo
Alle informatie over de cursus wordt beschikbaar gesteld op Toledo
Cursusmateriaal - Extra hoofdstukken in elektronisch formaat - Links naar software, aanvullende literatuur, ...
Opgaven en modeloplossingen van oefeningen - Opgave van project
Discussieforums voor diverse groepen studenten - Groep 1: 1e Bachelor Informatica - Groep 2: 2e Bachelor Ingenieur
...
10
Academiejaar 2006-2007
5
Objectgericht programmeren
Inleiding
Cursusmateriaal
Cursustekst
Handboek “Objectgericht Programmeren met Java”, E. Steegmans en J. Dockx, Acco Leuven, 2002 - Bijkomende hoofdstukken in elektronische vorm
Aanvullende literatuur
Referentiewerken voor de programmeertaal Java - Bruce Eckel, Thinking in Java - De “Java Tutorial” en de “Java Reference Manual”, beiden beschikbaar op de webstek van Sun
Referentiewerk omtrent objectgericht programmeren - Object-Oriented Software Construction, Bertrand Meyer - Maakt gebruik van Eiffel als programmeertaal
11
Java
Werktuigen voor het ontwikkelen van programma’s in Java
De SDK (Software Development Kit) van Sun - De SDK omvat o.a een compiler (javac), een virtuele machine (java) en een documentatie-generator (javadoc) - In de cursus gebruiken we versie 1.5 (of 1.6) van Java - Een link naar de SDK is beschikbaar op Toledo
Alle werktuigen zijn vrij beschikbaar op de webstek van Sun - Installeer de SDK vandaag nog op je machine! - De SDK (versie 1.5) is ook beschikbaar in de labo’s van Ludit
12
Academiejaar 2006-2007
6
Objectgericht programmeren
Inleiding
Eclipse
Geïntegreerde programmeeromgevingen (IDE’s) ondersteunen het ontwikkelen van programma's
Een IDE vergemakkelijkt onder andere het editeren, het compileren, het overlopen en het debuggen van programma’s - Softwaresystemen worden niet langer gebouwd met primitieve werktuigen
In de cursus gebruiken we de programmeeromgeving Eclipse
Eclipse is een open-source project met standaard ondersteuning voor Java - In de cursus wordt gebruik gemaakt van versie 3.2 - Versie 3.1 mag ook gebruikt worden - Plugins ondersteunen andere programmeertalen en ontwerpnotaties
Eclipse is vrij beschikbaar - Installeer Eclipse vandaag nog op je machine! - Eclipse (versie 3.1) is ook beschikbaar in the labo’s van Ludit 13
Overzicht
Objectgericht Programmeren
Cursusmateriaal
Lessen
Evaluatie
Cursustekst Referentiewerken Programmeeromgeving
Verloop van de cursus
Doelstellingen Extreme Programming Inhoud
Examen
Demonstratie Eclipse 14
Academiejaar 2006-2007
7
Objectgericht programmeren
Inleiding
Contacturen
De cursus wordt gedoceerd volgens de formule van begeleide zelfstudie
Van de studenten wordt verwacht dat ze het relevante deel van de cursustekst vooraf zelfstandig doornemen - Na een eerste lezing moeten de grote lijnen van de aangebrachte materie duidelijk zijn
In 13 contactsessies wordt ingegaan op de kernpunten uit de behandelde materie aan de hand van een typisch probleem - Tijdens de sessie wordt op geregelde tijdstippen een kort overzicht gegeven van belangrijke aandachtspunten - Kopies van de gebruikte slides zijn beschikbaar op Toledo - De oplossing voor het gestelde probleem wordt interactief uitgewerkt - Studenten suggereren correcte en minder correcte oplossingen - De docent fungeert als moderator - Iedere sessie behandelt typisch één hoofdstuk uit de cursustekst
15
Contacturen
Op het einde van iedere sessie wordt het probleem verder uitgebreid in de vorm van een huistaak - Problemen in het bijkomend deel kunnen in de volgende sessie kort worden aangekaart
Van iedere sessie wordt een modeloplossing elektronisch beschikbaar gesteld - De opgaven voor iedere sessie worden vooraf ter beschikking gesteld - Een uitwerking van een mogelijke oplossing voor het gestelde probleem vóór aanvang van de sessie mag, maar moet niet
De sessies worden afzonderlijk gegeven aan de verschillende studierichtingen die de cursus volgen - Er zijn afzonderlijke sessies voor 1e Bachelor Informatica en voor 2e Bachelor Ingenieur - Studenten uit andere studierichtingen sluiten vrij aan bij één van deze groepen
16
Academiejaar 2006-2007
8
Objectgericht programmeren
Inleiding
Schema Onderwerp Datum 13-feb-10 Inleiding Totaal programmeren 20-feb-10 Contractueel programmeren Defensief programmeren 27-feb-10 Enkelvoudige associaties 6-mrt-10 Meervoudige associaties (1) 13-mrt-10 Meervoudige associaties (2) 20-mrt-10 Polymorfisme 27-mrt-10 Dynamische binding 3-apr-10 Paasvakantie 10-apr-10 Paasvakantie 17-apr-10 Liskov 24-apr-10 Interfaces 1-mei-10 Iteratoren + Geneste klassen 8-mei-10 Generische klassen 15-mei-10 22-mei-10 29-mei-10 Lesvrije Week 5-jun-10 Lesvrije Week 12-jun-10 Tweede Examenperiode 19-jun-10 Tweede Examenperiode 26-jun-10 Tweede Examenperiode 3-jul-10
Week 1 2 3 4 5 6 7
8 9 10 11 12 13
Project 1 Project 2 Project 3
Opgave: 23 februari Opgave: 23 maart Opgave: 20 april
Oefeningen Digitale Klok Olietank Rationale getallen Huwelijk Aandelen Aandelen Honden/schilderijen Expressies
Practicum
Begeleiding
Project deel 1 (30 uur) 2 x 30 min
Project deel 2 2 x 30 min (30 uur)
Diefje Binaire bomen Iterator voor bomen Begrensde sequenties
Project deel 3
2 x 30 min
(30 uur)
2 x 30 min
Verdediging
Project Inleveren: 23 maart Inleveren: 20 april Inleveren: 23 mei Verdedigingen vanaf 25 mei
17
Overzicht
Objectgericht Programmeren
Cursusmateriaal
Lessen
Evaluatie
Cursustekst Referentiewerken Programmeeromgeving
Verloop van de cursus
Doelstellingen Extreme Programming Inhoud
Examen
Demonstratie Eclipse
18
Academiejaar 2006-2007
9
Objectgericht programmeren
Inleiding
Examen: Project
Evaluatie in de vorm van een project
Uitwerking van een stel opgegeven klassen - Vorig academiejaar: ontwikkeling van een een (klein) deel van een “adventure game”
Finale oplossingen moeten ingeleverd worden rond 23 mei (laatste week van 2e semester)
19
Poject: Verloop
De opgave voor het project wordt trapsgewijze verspreid
Deel 1: Ontwikkeling van één klasse - Opgave rond 23 februari [week 2]: duur 30u
Deel 2: Ontwikkeling van een stel gerelateerde klassen - Opgave rond 23 maart [week 6]: duur 30u
Deel 3: Ontwikkeling van een hiërarchie van klassen - Opgave rond 20 april [week 8]: duur 30u
Het project resulteert in één coherent softwaresysteem
Latere delen van de opgave zijn uitbreidingen van vorige delen - Bij uitwerking van volgende delen mogen (moeten) vorige delen worden aangepast, gecorrigeerd, ...
20
Academiejaar 2006-2007
10
Objectgericht programmeren
Inleiding
Project: Teamwerk
Het project wordt bij voorkeur uitgewerkt in groepjes van 2 studenten (“pair programming”)
Bespreken van mogelijke oplossingen met andere studenten mag, afschrijven niet! - Zowel afschrijver als diegene die laat afschrijven kunnen gesanctioneerd worden
Studenten die het project individueel willen maken, krijgen een lichtjes gereduceerde opgave
De samenstelling van een team kan niet willekeurig gewijzigd worden
Initiële samenstelling van teams voor 27 februari (12u) doorsturen naar
[email protected] - Bij conflicten werkt elke student individueel verder aan het project
Enkel na het eerste deel mag de samenstelling van teams veranderen - Nieuwe en finale samenstelling doorsturen voor 28 maart (12u) 21
Project: Begeleiding
Elk paar studenten krijgt een begeleider, die fungeert als “consultant”
Begeleiders zijn slechts een beperkt aantal uren beschikbaar - In totaal kunnen 8 sloten van telkens 30 minuten geboekt worden (8 sloten van 20 minuten voor studenten die individueel werken)
Niet alle voorziene sloten moeten opgebruikt worden - Ongebruikte sloten kunnen later niet opgebruikt worden - Voorziene sloten mogen wel vroeger opgebruikt worden
Veranderen van begeleider kan enkel in uitzonderlijke omstandigheden
22
Academiejaar 2006-2007
11
Objectgericht programmeren
Inleiding
Project: Begeleiding
Mogelijke onderwerpen voor overleg met begeleider
Toelichting bij inhoud van de cursus - Toelichting bij concepten van Java, principes van objectgericht programmeren, ...
Assistentie bij gebruik van werktuigen (in de mate van mogelijke)
Toelichting bij compilatie- en uitvoeringsfouten
Evaluatie van alternatieve oplossingen
- Toevoegen van externe JARs, aanmaken van templates, ... - Geen correctie van fouten - Indicatie van ontbrekende voor- en nadelen
Begeleiders geven geen beoordeling van code
Geen antwoord op vragen naar correctheid, volledigheid, ... van code - Hoe goed is mijn code? Hoeveel punten zou ik krijgen?
23
Project: Evaluatie
Tussentijdse verdediging in week 7(3/20)
Toelichting/evaluatie van het eerste deel van het project - Feedback over kwaliteit van het werk
Tussentijdse evaluatie door bepaalde begeleiders - Kwotatie in hoofdzaak voor geleverde inspanning
Mondelinge verdediging van finale project (17/20)
Toelichting kunnen geven bij de oplossing en eventuele correcties ter plekke kunnen schetsen - Kunnen antwoorden op inhoudelijke vragen omtrent de behandelde materie
Studenten die het project samen hebben uitgewerkt, komen het project ook samen verdedigen - Elke student moet het ganse project beheersen (en niet alleen de stukken die hij/zij zelf heeft uitgewerkt)
Mondelinge verdediging vanaf 25 mei (blok + 2e examenperiode) 24
Academiejaar 2006-2007
12
Objectgericht programmeren
Inleiding
Overzicht
Objectgericht Programmeren
Cursusmateriaal
Lessen
Evaluatie
Cursustekst Referentiewerken Programmeeromgeving
Verloop van de cursus
Doelstellingen Extreme Programming Inhoud
Examen
Demonstratie Eclipse 25
Academiejaar 2006-2007
13