Metodik för problemlösning Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar.

Slides:



Advertisements
Liknande presentationer
För att göra avklippta hörn på en bild använder man sig av verktyget Picture Shape. Detta verktyg hittar du under fliken Picture Tools (som du får upp.
Advertisements

Next previous Björn Eiderbäck NADA, KTH Innehåll Klassdiagram i mer detalj Visibility och modifierare (vilka.
Utveckla en applikation Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Föreläsning 7, Kapitel 7 Designa klasser Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
ZHEJIANG UNIVERSITY iMDE: international Market- Driven Engineering Lecture 0: Introduction (2013)
7 Det är= there is/are, it is
ASP.NET MVC MVC historik ● Traditionellt arkitekturmönster som ansetts särskilt lämpligt i webbapplikationer ● Separation of concerns & loose.
Algoritmer och data strukturer -Länkade listor
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 6
Objektorienterad utveckling
Datatyper C# C/C++ Java VB Fortran Pascal bool boolean Boolean
Klassarv och inkapsling
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
TNSL04 – IT grundkurs. VT2008. Föreläsning nr 4, torsdag 28 feb. kl Klasser, objekt, metoder, parametrar, konstruktorer, samlingar och tillstånd.
2D1311 Programmeringsteknik med PBL Föreläsning 5 Skolan för Datavetenskap och kommunikation.
Arv.
Guide för SA Benefits Calculator
Java Nätverks API URL sockets.
TNSL04 – IT grundkurs. VT2008. Föreläsning nr 3, torsdag 7 feb. kl Del 1. Klasser, objekt, metoder, konstruktorer, samlingar och tillstånd. Hur.
Exception Handling Kapitel 9. Agenda Exceptions try, throw and catch Skapa en egen exception-klass Multipla throw / catch Slänga vidare en exception Olika.
i olika programmeringsspråk
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Objektorienterad programmering i Java
Variabler: Datatyp - grundläggande : int, double, char, boolean eller
Programmering i C# 3. Klasser.
Föreläsning 2, Kapitel 2 Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Föreläsning 6, kapitel 6 Objekt som uppför sig som de skall Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Next previous Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Arv.
ITK:P1 Lektion 4 Att implementera en spelidé i Java DSV Peter Mozelius.
1 MSPEL Lektion 2 DSV Peter Mozelius Spel i Java applets.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Introduktion till klasser, objekt och BlueJ Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
TILLÄMPAD DATALOGI (TILDA) Övning 3
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Föreläsning 10, kapitel 10 Abstrahera mera! Abstrakta klasser och interface Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”,
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Välkommen till kursen objektorienterad programmering med Java Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
TILLÄMPAD DATALOGI (TILDA) Övning 2
TILLÄMPAD DATALOGI (TILDA) Övning 2
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Gruppövning Applikationsprogramering Klassuppdelning Loose Coupling Model View Controller Inversion of Control Layout med Swing JSplitPane Mouse-over Events.
Föreläsning 3: Booleans, if, switch
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Föreläsning 5: Att använda klasser & objekt
Algoritmer och datastrukturer, förel. 1
Presentationens avskrift:

Metodik för problemlösning Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar Telefon Andreas Hedrén Telefon Föreläsning Mañana

2 Idag S.T.R.E.A.M. & ”The Manãna Principle” Idéer om utveckling från Kölling & Caspersen (OOPSLA’06 October 22–26, 2006, Portland, Oregon, USA. ACM X/06/0010)

Ett recept för systemutveckling - S.T.R.E.A.M. Stubs Tests Representation Evaluation Attributes Methods

Stubs - Skelettkod Börja med att skapa skeletten för klasserna. Detta steg har föregåtts av analys och design. Fyll klassen med standard-konstruktor Lägg in metod-signaturer, men ingen implementation

Tests – Tester Koda tester för att testa klasserna som har definierats i kodskelett

Representation Finns det alternativa lösningar för algoritmer Finns det alternativa sätt att visa datat

Evaluation Utvärdera de olika varianterna av lösningar och välj den som ger minst implementations-arbete eller komplexitet

Attributes Lägg till fält (medlemsvariabler) i klasserna

Methods Fyll kodskelettet med implementationer

Exempel – Klassen Date Specifikation: Interfacet DateInterface Tänk på interface som bilnyckel och ratt när man kör bil. Hur sedan motorn fungerar och förbränning av bensin är något dolt under motorhuven och själva implementationen. Vi kommer att prata mer om interface längre fram ;) Interface DateInterface { /** * Advance the date to the next day */ public void setToNextDate(); /** * Return a string representation of this date in * the format yyyy-mm-dd */ public String toString(); }

Stubs – Skelettkod till klassen Date public class Date1 implements DateInterface { /** * Advance the date to the next day */ public void setToNextDate() { } /** * Return a string representation of this date in * the format yyyy-mm-dd */ public String toString() { return ””; }

Tests – Testa den nya klassen... /** * Test method for se.hgo.oopmj2.Date1#setToNextDate()}. */ public void testSetToNextDate() { fail("Not yet implemented"); // TODO } /** * Test method for se.hgo.oopmj2.Date1#toString()}. */ public void testToString() { fail("Not yet implemented"); // TODO }...

Representation – Alternativa lösningar Datum kan uttryckas på olika sätt. R1: Uttrycka datum med tre heltal för dag, månad och år R2: Uttrycka datum med utgångspunkt från ett start-datum, exempelvis

Evaluation – Utvärdering av alternativa lösningar Utifrån de alternativa lösningarna görs en utvärdering hur mycket implementations-arbete de olika lösningarna medför Skala: ”Trivial” – ”Challenging” – ”Hard” IMPL. EFFORTR1R2 setToNextDate()ChallengingTrivial toString()TrivialHard

Attributes – Fält (Medlemsvariabler)... // Member variables private int mDay;// 1 <= day <= daysInMonth private int mMonth;// 1 <= month <= 12 private int mYear; // Constructor public Date1() { mDay = 1; mMonth = 1; mYear = 2001; }...

Methods – Implementera metoder Fylla klassen med beteende Nyttja ”The Mañana Principle”

”The Mañana Principle” ”When – during implementation of a method – you wish you had a certain support method, write your code as if you had it. Implement it later.” En variation av stegvis förbättring av kod. När man stöter på ett ställe i koden där man önskar man hade en metod – anropa den metoden. När man implementerat den aktuella metoden går man till Mañana-metoden och fortsätter med den. Fast man väntar inte till nästa dag ;)

När behöver man använda Mañana-principen? Specialfall: Om man behöver hantera ett specialfall i koden så hanteras detta i en separat metod Nästlade loopar: Om har man en nästlad loop så flyttar man ut den inre loopen i en separat metod Kod-duplicering: Om samma kod-segment dyker upp på flera ställen så läggs den i en separat metod Svårlöst problem: Om ett komplext problem dyker upp som behöver lösning, men som det inte finns en omedelbar lösning till flytta ut den i en separat metod Omständiga problem: Om en sats blir lång eller komplicerad så flyttas den in i en separat metod

Methods – Implementera metoder - Startpunkt... /* (non-Javadoc) se.hgo.oopmj2.DateInterface#setToNextDate() */ public void setToNextDate() { mDay = mDay + 1; } /** * Return a string representation of this date in * the format yyyy-mm-dd */ public String toString() { return mYear + "-" + mMonth + "-" + mDay; }...

Methods – Kontroll av antalet dagar /* (non-Javadoc) se.hgo.oopmj2.DateInterface#setToNextDate() */ public void setToNextDate() { mDay = mDay + 1; checkDayOverflow(); // Mañana }

Methods – Ny månad /** * Check for special case where day > daysInMonth; * in that case, set day to 1 and add 1 to the month */ private void checkDayOverflow() { if(mDay > 30) { mDay = 1; mMonth = mMonth + 1; }

Methods – Nytt år /** * Check for special case where day > daysInMonth; * in that case, set day to 1 and add 1 to the month */ private void checkDayOverflow() { if(mDay > 30) { mDay = 1; mMonth = mMonth + 1; checkMonthOverflow(); // Mañana }

Methods - Månadskontrollen /** * Check for special case where day > daysInMonth; * in that case, set day to 1 and add 1 to the month */ private void checkDayOverflow() { if(mDay > daysInMonth()) { mDay = 1; mMonth = mMonth + 1; checkMonthOverflow(); }

Methods – Dagar i månaden /** * Return the number of days in the current month */ private int daysInMonth() { int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int result = daysInMonth[mMonth -1]; return result; }

Methods - Skottår /** * Return the number of days in the current month */ private int daysInMonth() { int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30}; int result = daysInMonth[mMonth -1]; // Special case: February in a leap year if( mMonth == 2 && isLeapYear()) { result = result + 1; } return result; }

Methods – De sista Mañana-metoderna /** * Return true if the current year is a leap year */ private boolean isLeapYear() { return (divides(4, mYear) && !divides(100, mYear)) || divides(400, mYear); } /** * Return true if a divides b */ private boolean divides(int a, int b) { return b % a == 0; }

Summering Det är viktigt att fundera över alternativa lösningar Testa funktionaliteten Identifiera svåra delar i koden och tänk att du har en metod som löser den Bryt ner stora problem i flera mindre delar