Algoritmiek Software Development O-O Design Hoorcollege 11 - Ma. 13 nov. 2006 L.M. Bosveld-de Smet.

Slides:



Advertisements
Verwante presentaties
Update on EduStandard: public-private platform in Dutch education Henk Nijstad, Kennisnet / november 2013.
Advertisements

Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Project Software Engineering Universiteit AntwerpenPlanning 4.1 Hoe snel loopt iemand de 100 meter ?
Order placed Should be Nederland Netherlands can be removed here, just Scancorner Instead of ‘undefined’ -> ‘geen’ New logo should be displayed here. COUNTS.
Een alternatief voorstel Naar aanleiding van bestudering van de IAASB voorstellen denkt de NBA na over een alternatief. Dit alternatief zal 26 september.
SAP ABAP A short introduction. SAP ABAP • Selectie: – IF …… ENDIF. – IF …. ELSE … ENDIF. – IF …. ELSEIF …. ELSEIF …. ELSE …. ENDIF. – IF condition_1.
Niels Chavannes MD PhD Associate Professor
MASTERPROJECT M1 · Groep Equilibrium Marieke Steenbeeke Rick van Veghel Tim de Veen MASTERPROJECT M1 ZERO ENERGY BUILDING Previous weeks · Zero.
OOS Object geOrienteerd Software-ontwerp - 3
ETHOS PROJECT: PROGRESS Follow-up & feedback end of year 1.
Inleiding Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.1 Ontdek de 7 verschillen.
Programmeren in Java met BlueJ
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
Frédérique Harmsze - Macaw 22 juni Wie ben ik?  Frédérique Harmsze  Information Worker Consultant bij Macaw sinds 2004  Intranet-projecten met.
Van domeinklasse tot implementatie
MagentaPurpleTeal PinkOrangeBlue LimeBrown RedGreen Introductie C# /.NET
Nieuwe wegen in ontwerpen met CAD
Project Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.1 Ontdek de 7 verschillen.
Corporate Communications February 2011 Succesvol met Outsourcing Gerben Edelijn, CEO Thales Nederland.
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
Klassen en objecten.
AAHA (voor intern gebruik)
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
SCENARIO BASED PRODUCT DESIGN
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
1 Toegepaste Informatica Keuzevak C++ 3°jaar. 2 Studiefiche  Software  Boek (hfst 3-5)  Presentatie (website)
Software Engineering Sommerville, Ian (2001) Software Engineering, 6 th edition Ch.1-3
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
1 Voorwaarden hergebruik Modulair ontwerp Low coupling High cohesion.
IOP and Vrije Universiteit1 Example of bad interface  Windows: Use Start to Stop.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6.
1 Inleiding Programmeren in Java Ma 29 januari 2001.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Oefeningen Hoofdstuk 3.
Hibernate Object relational mapping
PLAYBOY Kalender 2006 Dit is wat mannen boeit!.
Vrije Universiteit amsterdamPostacademische Cursus Informatie Technologie Universal Modeling Language … why you need models? Models are necessary to communicate,
Algoritmiek Object-georiënteerd Programmeren
Algoritmiek Strings & Stringmanipulaties; Controle Structuren; Floating-point notation. Hoorcollege 4 - Ma. 25 sept L.M. Bosveld-de Smet.
Algoritmiek Java GUIs, AWT en Swing API Overzicht te bestuderen stof, voorbeeldtentamen Hoorcollege 15 - Ma. 11 dec L.M. Bosveld-de Smet.
Computer-Mediated Communication Master IK, CIW, MMI L.M. Bosveld-de Smet Hoorcollege 1; di. 7 sept. 2004;
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
6.1 Inleiding HOOFDSTUK 6 METHODEN
1 Hoofdstuk 11: Strings en karakters Inleiding In dit hoofdstuk bespreken we de mogelijkheden van de klassen : String StringBuffer Character StringTokenizer.
From computer power and human reason. Joseph Weizenbaum.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
Geheugen, distributie en netwerken Netwerken: de basis voor distributie van gegevens en taken (processen) –bestaan zo’n 40 jaar, zeer snelle ontwikkeling.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
Hoofdstuk 9 Objecten en klassen.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Deltion College Engels B1 Gesprekken voeren [Edu/005] thema: applying for a job can-do : kan een eenvoudig sollicitatiegesprek voeren © Anne Beeker Alle.
Deltion College Engels B1 Schrijven [Edu/004]/ subvaardigheid lezen thema: reporting a theft can-do : kan formulieren waarin meer informatie gevraagd wordt,
Rational Unified Process RUP Jef Bergsma. Iterations –Inception –Elaboration –Construction –Transition De kernbegrippen (Phases)
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
© Shopping 2020 TITLE Date Subtitle Logo Gastheer Logo Voorzitter.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Combining pattern-based and machine learning methods to detect definitions for eLearning purposes Eline Westerhout & Paola Monachesi.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Usability metrics Gebruiksvriendelijkheid ISO Effectiveness Efficiency Satisfaction Learnability Flexibility En nu? Inleiding Hoe gaan we de gebruiksvriendelijkheid.
Het geheim van Linked Data Marcel ReuversGeonovum CB-NL 20 november 2014.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Algoritmiek Class Hierarchies, Inheritance. Hoorcollege 12 - Ma. 20 nov L.M. Bosveld-de Smet.
WISKUNDIG MODELLEREN KUNST OF KUNDE? 11 november 2009 Jaap Praagman CQM.
EQUA Moeten we requirements serieus nemen?. Traditioneel Iteratief Agile Open Source Frank Peeters Petra Heck
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
OOS Object geOrienteerd Software-ontwerp - 5
Transcript van de presentatie:

Algoritmiek Software Development O-O Design Hoorcollege 11 - Ma. 13 nov L.M. Bosveld-de Smet

Software Ontwikkeling Programmeren = problemen oplossen Methoden voor software-ontwikkeling Procedureel ontwerp Waterval model (iteratief) O-O ontwerp: accent op Selecteren van bestaande klassen Aanpassen van bestaande klassen Schrijven van nieuwe klassen Moderne opvatting: accent op Soepele mens-machine interactie Prototype “Usability” testen

Vroeger: Watervalmodel Requirements Specification Architectural design Detailed Design Implementation and Unit testing Integration and Testing Operation and Maintenance

Realistischer: Iteratieve watervalmodel Requirements Specification Architectural design Detailed Design Implementation and Unit testing Integration and Testing Operation and Maintenance

Ontwerp Interactie Mens-Computer Hedendaagse Opvatting: Dix et al. (2004) What is wanted Analysis Design Implement and deploy Prototype Usability Evaluation

Rol van prototype Design Redesign PrototypeEvaluate Done! OK? Not OK?

Methodologie voor O-O ontwerp Specificatie eisen probleem Analyse probleem en identificatie klassen Ontwerp klassen Implementatie nieuwe en veranderde klassen Testen Onderhoud en update

Ontwerp klassen Ten minste 2 type klassen “worker classes” “user interface classes” of “application classes” Probleem opsplitsbaar in subproblemen: Data verkrijgen (evt. gebruiker vragen) Vereiste bewerkingen uitvoeren Resultaten laten zien

Case Study (1) ter illustratie Vertaler van Engels naar “pig Latin” Probleem: schrijf een programma dat een Engels woord inleest en de vorm in pig Latin laat zien Wikipedia: the usual rules for changing standard English into Pig Latin are: For words that begin with consonant sounds, move the initial consonant or consonant cluster to the end of the word and add "ay." Examples:consonantconsonant cluster button → utton-bay star → ar-stay three → ee-thray question → estion-quay For words that begin with vowel sounds (including silent consonants), simply add the syllable "ay" to the end of the word.vowelsilent consonants eagle → eagle-ay beperking

Ontwerp Klassen class PigLatinAPP data velden geen methodengedrag main (…) vraagt gebruiker om woord en toont vorm in pig Latin gebruikte bestaande classes String, JOptionPane application class worker classes

Algoritme voor main (…) Vraag aan de gebruiker een woord om te vertalen in pig Latin Stop het woord en de vertaling ervan in een “message string” Pig Latin vorm = substring van woord startend bij tweede letter + eerste letter van woord + “ay” Toon de “message string”

PigLatinApp class /* * PigLatinApp.java * Authors: Koffman and Wolz * Generates the pig Latin form of a word. */ import javax.swing.JOptionPane; public class PigLatinApp { public static void main(String[] args) { //Get a word to translate to pig Latin String word = JOptionPane.showInputDialog ("Enter a word starting with a consonant"); //Store word and its pig Latin form in a message string String message = word + " is " + word.substring(1) + word.charAt(0) + "ay" + " in pig Latin"; //Display message string JOptionPane.showMessageDialog (null, message); }

Dialoogvensters

Software Development Method Ter herinnering: Specify problem requirements Analyze problem and identify classes Design classes to solve problem Implement new and modified classes Test and verify program Maintain and update program

Case Study (2) Probleem: schrijf een programma dat de kalender van de huidige maand en het huidige jaar print

Eerste Opzet 1. Bepaal huidige maand en huidig jaar 2. Bepaal op welke dag van de week de huidige maand begint 3. Toon de kalender 1. Print de kalender “heading” 2. Print de inhoud van de kalender

class Calendar Lijst constanten: DATEdag vd. maand1-31 DAY_OF_WEEKdag vd. week1-7 HOURuur (12H klok)0-11 HOUR_OF_DAYuur (24H klok)0-23 MINUTEminuten0-59 MONTHmaanden0-11 SECONDseconden0-59 YEARjaar-

Ad 3. Toon de kalender 1. Print een kalender heading 1. Zet maandnummer om in maandnaam 2. Bepaal aantal spaties vòòr de maandnaam 3. Print maand, jaar en rij streepjes 2. Print de dagen in de huidige maand 1. Laat ruimte voor de ‘lege dagen’ 2. Print de dagen in de kalender

Ontwerp Klassen class PrintCalendar data velden geen methodengedrag main (…) Toont een kalender voor de huidige maand printHeading (…) Print de heading voor de kalender van 1 maand printDays(…) Print de dagen in de kalender van 1 maand daysInMonth (…) Berekent het aantal dagen van een maand gebruikte bestaande classes GregorianCalendar, Calendar helpers van main

PrintCalendar class import java.util.*; import jpb.*; public class PrintCalendar { public static void main(String[] args) { // Determine the current date GregorianCalendar date = new GregorianCalendar(); // Adjust to first day of month date.set(Calendar.DATE, 1); // Determine the current month and year int month = date.get(Calendar.MONTH); int year = date.get(Calendar.YEAR); // Determine the day of the week for the first day of the // current month int dayOfWeek = date.get(Calendar.DAY_OF_WEEK) - 1; // Print a heading for the calendar printHeading(month, year); // Print the body of the calendar printDays(dayOfWeek, daysInMonth(month, year)); }

daysInMonth methode ///////////////////////////////////////////////////////////////// // NAME:daysInMonth // BEHAVIOR:Computes the number of days in a month. // PARAMETERS:month - number representing a month (0-11) // year - the year // RETURNS:Number of days in the specified month in the // specified year /////////////////////////////////////////////////////////////////

daysInMonth methode private static int daysInMonth(int month, int year) { int numberOfDays = 31; // Add 1 to month; the result will be between 1 and 12 switch (month + 1) { case 2: // February numberOfDays = 28; if (year % 4 == 0) { numberOfDays = 29; if (year % 100 == 0 && year % 400 != 0) numberOfDays = 28; break; case 4: // April case 6: // June case 9: // September case 11: // November numberOfDays = 30; break; } return numberOfDays; }

Case Study (3) Probleem: verander het PrintCalendar-programma zodanig dat de kalender in een frame wordt geplaatst met als titel maand en jaar. Elk kalendervierkantje moet 30 bij 30 pixels groot zijn. Dagen worden gecentreerd geprint in elk vierkantje in plain, 15- point, sans serif font

Algoritme voor main (…) 1. Bepaal huidige datum 2. Pas datum aan aan de eerste van de maand 3. Bepaal huidige maand en huidig jaar 4. Bepaal de dag van de week voor de eerste dag van de maand 5. Maak een frame 6. Bereken grootte van frame 7. Verkrijg de context voor de kalender 8. Teken de kalender met de hokjes 9. Toon de de dagen in de hokjes van de kalender 10. Teken het frame drawGrid(weeks) displayDays(dayOfWeek, monthLength)

drawGrid methode ////////////////////////////////////////////////////////////// // NAME: drawGrid // BEHAVIOR: Draws a grid to divide the frame into days // PARAMETERS: weeks - number of weeks in month // RETURNS: Nothing ///////////////////////////////////////////////////////////// private static void drawGrid(int weeks) { // Draw horizontal lines in grid for (int row = 1; row < weeks; row++) g.drawLine(0, row * SQUARE_SIZE, 7 * SQUARE_SIZE - 1, row * SQUARE_SIZE); // Draw vertical lines in grid for (int col = 1; col < 7; col++) g.drawLine(col * SQUARE_SIZE, 0, col * SQUARE_SIZE, weeks * SQUARE_SIZE - 1); }

displayDays methode /////////////////////////////////////////////////////////// // NAME: displayDays // BEHAVIOR: Prints the days in a one-month calendar // PARAMETERS: dayOfWeek - day of week for first day in // month (0-6) // monthLength - number of days in month // RETURNS: Nothing /////////////////////////////////////////////////////////// private static void displayDays(int dayOfWeek,int monthLength) { // Create font and font metrics objects Font f = new Font("SansSerif", Font.PLAIN, 15); g.setFont(f); FontMetrics fm = g.getFontMetrics(f); // Display the days int yOffset = (SQUARE_SIZE + fm.getAscent()) / 2; for (int day = 1; day <= monthLength; day++) { int xOffset = (SQUARE_SIZE - fm.stringWidth(day + "")) / 2; g.drawString( day + "", xOffset + ((dayOfWeek + day - 1) % 7) * SQUARE_SIZE, yOffset + ((dayOfWeek + day - 1) / 7) * SQUARE_SIZE); }