De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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

Verwante presentaties


Presentatie over: "Algoritmiek Software Development O-O Design Hoorcollege 11 - Ma. 13 nov. 2006 L.M. Bosveld-de Smet."— Transcript van de presentatie:

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

2 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

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

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

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

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

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

8 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

9 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

10 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

11 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”

12 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); }

13 Dialoogvensters

14 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

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

16 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

17 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-

18 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

19 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

20 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)); }

21 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 /////////////////////////////////////////////////////////////////

22 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; }

23 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

24 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)

25 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); }

26 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); }


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

Verwante presentaties


Ads door Google