Personal • Lärare Objektorienterad programmeringsmetodik 5DV133 – Johan Eliasson ([email protected]) (kursansv) – Thomas Johansson ([email protected]) • Handledare – Marcus Karlsson ([email protected]) – Niclas Lockner ([email protected]) Java VT-12 1 2 Kursmål Här sitter vi Kunskap och förståelse MIT-huset våning 4 • förklara grundläggande koncept i en objektorienterad ansats, • visa kunskap om metoder, så som CRC, för objektorienterad modellering av system, • visa kunskap om UML-notation för klassdiagram. Färdighet och förmåga Support Johan • tillämpa grundläggande objektorienterade koncept i Java • analysera ett problem utifrån en objektorienterad ansats, • i grupp och enskilt designa ett objektorienterat program, dokumentera denna design, samt implementera den i Java, • använda ett versionshanteringssystem för källkod och annan dokumentation som skapas i grupp, • kunna utföra enhetstestning med hjälp av JUnit. Värderingar och förhållningssätt • 3 visa förmåga att utifrån en objektorienterad ansats, och andra för problemet relevanta aspekter göra bedömningar av en 4 modells lämplighet. Kursens uppläggning Examination • Föreläsningar! ! -F • Metodikövningar! -G - Under dessa kommer vi främst att jobba med CRC-metoden • Individuell handledning • Två moment – Moment 1: • 4 hp • Teoriprov (3 timmar) • Praktiskt prov i lab (4 timmar) – Moment 2: • 3,5hp • Examineras via obligatoriska uppgifter (varav en ska genomföras i grupp och redovisas vid två tillfällen) 5 6 Kursutvärderingen från vt11 •Se om det går att flytta fler föreläsningar tidigare så att man snabbare kan komma igång med lab1 och därmed undvika att arbetsbelastningen blir så hög i slutet av kursen. Förhoppningsvis ligger påsken också bättre till i förhållande till kursplaneringen nästa år. •Försök se till så att det blir lite mindre att göra på praktiska provet •Undersök om det går göra tex lab 2 frivillig för att minska antalet obligatoriska moment; jag tror dock att det behövs lika många övningstillfällen på CRC-metoden för att man ska behärska den nog bra så det är inte säkert att det är lämpligt •Gör en grundligare genomgång av Eclipse och SVN Kursmaterial • Cay S. Horstmann, Big Java, Wiley, 4 ed ISBN: 978-0-470-55309-1 – Även övriga upplagor från och med ed3 funkar – Boken finns även i en något mindre utförlig upplaga under namnet “Java Concepts” • Object-Oriented Analysis and Design Through Scenario Role-Play • OH bilderna från föreläsningarna http://www.cs.umu.se/kurser/5DV133/VT12 7 Kursverktyg 8 Java • Eclipse • Utformades av James Gossling (SUN) och släpptes 1995 • Konstruerat för att vara plattformsoberoende. Dvs ett program skrivet i java skall gå att köra på olika datorplattformar utan att man behöver göra några förändringar. – Finns att ladda hem för de flesta datorplatformar (PC, Mac, Linux m.fl.) 9 Objekt Programmering i Java programmering Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. exekvering exekvering – Reellt, gripbart, synligt ting (t ex en specifik person) – Abstrakt ting (t ex en tid eller en anställd) <fil>.class <fil>.java Java programkod … 10 översättning kompilator Java bytekod … Varje objekt har ett tillstånd, ett beteende och en identitet. exekvering 11 – Tillståndet beskriver objektets egenskaper (t ex adress och ålder hos en person) – Beteendet beskriver vad objektet kan göra (t ex flytta). OBS! Detta kan innebära att tillståndet ändras – Identiteten skiljer ett objekt från alla andra objekt 12 Klass Objekt och klasser En klass är en “byggplan” för objekt av samma sort. – Alla objekt av en klass (instanser) har samma sorts egenskaper och beteenden – En klass beskriver en mängd liknande objekt – Datatyp Person egenskaper (attribut) flytta ... beteende (metoder) – Modeller av “saker” i problemdomänen ( “den röda bilen i parkeringshuset Nanna”) • Klasser – Representerar alla objekt av ett visst slag ( “bil”) Namn på klassen namn ålder adress • Objekt 13 Lite annat 14 Två cirkel-objekt • Många instanser kan skapas av en klass • Ett objekt har attribut: värden som lagras i “fields”. • Klassen definierar vilka “fields” ett objekt har, men varje objekt har sin egen uppsättning värden (objektets tillstånd/ state) Circle diameter:int xPosition:int yPosition:int color:String isVisible:boolean är en instans av circle1:Circle diameter=50 xPosition=80 yPosition=30 color="blue" isVisible=true är en instans av circle2:Circle diameter=30 xPosition=230 yPosition=75 color="red" isVisible=true 15 Objekt vs klass Metoder och parametrar Triangle bigYellowTriangle 16 • Objekt har operationer som kan anropas ( I Java kallas de metoder) • Metoder kan ha parametrar så att information som är nödvändig för att att utföra operationen kan ges till objektet height width xPosition yPosition color changeColor changeSize move ... smallBlueTriangle 17 18 Abstraktion och modularisering Källkod • Abstraktion är förmågan att strunta i delarnas detaljer och istället fokusera på problemet på en högre nivå • Varje klass beskrivs med hjälp av källkod (Javakod). – Ett/en objekt/klass är abstrakt i den meningen att vi inte behöver känner till alla detaljer för att kunna använda den • Där definieras detaljerna (attribut och metoder) • Modularisering är arbetet att dela upp helheten i mindre, väldefinierade delar som kan byggas och utvärderas separat, och som interagerar på ett väldefinierat sätt. 19 20 Syntaxdiagram • • • • • Java Objekt, klasser, syntax Start på en icketerminal Terminal symbol Möjlig väg att följa En annan icketerminal Slut på beskrivning av icketerminal 21 Tilldelning av värden • Referenser som inte “refererar” till ett objekt har värdet null. Attribut sätts automatiskt till null/0 övriga variabler måste initieras manuellt. • Variabler måste initialiseras • En variabel tilldelas ett (nytt) värde genom = Basic assignment = Expression Identifier 22 Lokala variabler • En variabel innehåller antingen ett primitivt värde eller en referens till ett objekt Identifier = ; 23 • Attribut/fields är en sorts variabler • De lagrar värden hela objektets “liv” – De kan nås i hela klassen. • Metoder kan innehålla variabler med kortare livslängd – De existerar bara medan metoden exekveras – De kan bara nås inne i metoden (i det block där de är definierade) 24 Identifierare och variabler Variabler och datatyper • Identifierare är namn på olika storheter som definieras av programmeraren • Lite andra regler gäller i Java än i C • Identifierare får innehålla bokstäver, siffror, understrykningstecknet (_), och valuta tecknen (t ex dollar tecknet) • Identifierare får ej inledas med en siffra • Java är case sensitive, dvs Total är olika total • Identifierare för värden eller objekt kallas variabler • Variabler används för att spara data • Variabler måste deklareras med datatyp och namn innan de får användas Identifier Java Letter Java Letter Java Digit a-z Java Letter 0-9 A-Z $ Java Digit _ Basic Variable Declaration Primitive Type Identifier Class Type , ; • En primitiv datatyp kan vara heltal (byte, short, int, long), flyttal (float, double), tecken (char) eller boolean • En klasstyp är ett namn på en klass (t ex Triangle) • Primitiva datatyper kallas också inbyggda datatyper • Klasstyper kallas också användardefinierade datatyper 25 26 Other java letter Primitiva datatyper: Hel- och flyttal Primitiva datatyper: Tecken • De olika heltals och flyttals typerna har olika storlek. I Java är storlekarna def. enl. följande Typ Storlek Minimum Maximum byte short int long 8 bits 16 bits 32 bits 64 bits -128 -32,768 -2,147,483,648 < -9 x 1018 127 32,767 2,147,483,647 > 9 x 1018 float double 32 bits 64 bits +/- 3.4 x 1038 med 7 signifikanta siffror +/- 1.7 x 10308 med 15 signifikanta siffror • En variabel av datatypen char sparar ett Unicode tecken • Värdemängden är en ordnad uppräkning av tecken • Det finns 65,536 unika Unicode tecken (16 bit) med tecken och symboler från olika språk, t ex 'å' och 'ö' • Alla tecken är ordnade och varje tecken motsvarar en siffra (detta underlättar att kolla om ett tecken ligger t ex mellan 'a' och 'z') • Se t.ex. http://www.unicode.org/ för detaljer 27 Primitiva datatyper: boolean 28 Objekt • Datatypen boolean har bara 2 värden – true – false Triangle bigYellowTriangle, smallBlueTriangle; bigYellowTriangle = ??? • Används på alla ställen där sanningsvärden behövs (tex ger jämförelseoperatorerna tillbaka resultat tillhörande denna datatyp) 29 Hur får vi tillgång till objekt? 30 new Konstruktorer public TicketMachine(int ticketCost) { price = ticketCost; balance = 0; total = 0; } • Skapar nya objekt • Ex – new Triangle() • Konstruktorer ansvarar för att initialisera ett objekt. • De har samma namn som klassen. • De lägger in startvärden på attributen. • Startvärden till attributen kan fås utifrån via parametrar. 31 Referenser vs värden Alias och garbage collection Triangle t1 = new Triangle(); Triangle t2 = new Triangle(); • Tilldelning har lite olika effekt för primitiva datatyper och klasstyper! – Primitiva datatyper: Variabel ≈ själva värdet – Klasstyper: Variabel = referens till objektet (jämför med pekare i C) int i1 = 5, i2 = 10; i1: 5 Triangle t1 = new Triangle(); Triangle t2 = new Triangle(); i2: 10 i1: 5 t2 = t1; Objekt som inte längre kan nås; rensas bort automatiskt (garbage collection) t1 t2 “Båda” trianglar (t1 och t2) har blivit röda Var försiktig med aliasing t2 t2 = t1; 5 Ett objekt som refereras till mha flera referenser; referenserna kallas alias t2 t1 t2 i2: t1 t2.changeColor (”red”); t1 i2 = i1; 32 t1 34 t2 33 Klassdeklaration • Syntax: • Syntax: Metoddeklaration Basic Method Declaration Class Declaration class Identifier Class Associations Type Class Body Modifier Modifier Identifier Ej resultat Class Body { } Method Body Resultatets datatyp • Exempel: Class Member Basic Class Member Parameters void public void changeSize (int newHeight, int newWidth) { … } Parameter Motsvarar variabel deklaration Field Declaration Constructor Declaration public float getArea ( ) {…} Method Declaration 35 36 Instantiering och manipulation Triangle height width xPosition yPosition color Triangle aTriangle = new Triangle(); aTriangle.move(); Mer klasser och objekt aTriangle.changeColor(”blue”); aTriangle.move(); changeColor changeSize move ... aTriangle.changeSize(50, 100); Vi kikar in i klasserna, och tar en titt på några av javas inbyggda En vanlig metodanrop ser ut så här ! <objektnamn>.<metodnamn> (<parameterlista>); 37 38 Kodkonvention Visibility • Klasser påbörjas med stor bokstav (i övrigt små utom om flera ord då Inledande bokstav i övriga ord också görs stor) – AClass • Metoder/attribut inleds med liten bokstav (i övrigt små utom om flera ord då inledande bokstav i övriga ord också görs stor) – aMethod(), aVariable Nås i samma klass Nås i samma paket private ja nej nej nej default ja ja nej nej protected ja ja ja nej public ja ja ja Variabel eller metod ja Nås i subklass Nås överallt • Konstanter Bara stora bokstäver. Ord åtskiljs med _ – PI • Följer man dessa konventioner så kommer ens egna klasser att “se ut” som javas inbyggda. 39 40 Överlagring Överlagrade konstruktorer • Vi kan ha flera metoder/konstruktorer med samma namn bara dessa har olika signatur • signatur : metodens namn och parametrar (antal,typ och ordning) • Vilken version av metoden som används vid anrop beror på de aktuella parametrarna • Ex: – – – – public int aMethod(int x) {...} public int aMethod(int x, int y){...} aMethod(1) aMethod(1,2) • Vill man att en av konstruktorerna i en klass ska anropa en annan (för att få en och samma kod på bara ett ställe) så gör man detta mha this() • this() måste stå först i konstruktorn • Ex: public Square() { this(60,50); } ! ! ! 41 public Square(int xPositionP,int yPositionP){ size = 30; xPosition = xPositionP; yPosition = yPositionP; color = "red"; isVisible = false; } 42 Mer this String • I en metod refererar referensen this till det objekt vars metod för tillfället körs • this kan användas till att referera till godtyckligt attribut/metod för objektet • Används tex då parametrar har samma namn som attribut • Ex public Square(int xPosition,int yPosition){ size = 30; ! this.xPosition = xPosition; ! this.yPosition = yPosition; ! color = "red"; isVisible = false; 43 } • I Java en klass. • Svarar mot en sekvens av tecken. • String str=”abc”; //finns även andra sätt skapa strängar • Operationer på strängar • + Strängkonkatenering • Ex: “hej” + “då” => ”hejdå” • “Antal: ”+1 => “Antal: 1” • charAt(int) tar fram bokstaven på en given position (numrerat från 0) • length() tar fram antal bokstäver i strängen • equals(String) kollar om två strängar innehåller samma tecken 44 • mm. (se API beskrivningen) PrintStream Enkel output • Kan tex göras mha klassen PrintStream • Fördefinierade standardströmmar: ström System.out System.err • Huvudsakligen print och println metoder som skriver ut värden. • println gör radbrytning efter utskrift • print och println är överlagrade för alla primitiva datatyper, String och Object syfte skriva vanlig text skriva felmeddelanden print och println finns för alla tänkbara datatyper 45 switch-satsen Kontrollstrukturer i Java • Samma som de som finns i C med i princip ett undantag (en specialvariant på forloopen som vi kommer titta på då vi tittar på collection-klasserna) – – – – – if(villkor) if(villkor) ... else while(villkor) do ... while(villkor) for(init;villkor;förändring) 46 switch (expression) { case value1: sats1; break; Uttrycket måste vara heltal, tecken eller enum (från java 7 även String) Motsvarar nästade if-satser case value2: sats2; break; … } 47 default: satsN; OPTIONAL 48 static Statiska attribut • Normalt har varje objekt eget minnesutrymme • static gör variabeln gemensam för alla objekt i klassen (dvs den delas av alla) • Attribut och metoder kan deklareras static • Associerar attribut och metoder med klassen snarare än objektet • Avsteg ifrån objekts-tanken – Bör därför användas bara där det verkligen behövs • Undvik under denna kurs (utom för main) då ni ska lära er objektorientering. 49 Statiska metoder 1 private static int count; • Kallas ibland klass variabler 50 Statiska metoder 2 • Statiska metoder anropas via klassnamnet • Man behöver inte skapa ett objekt först • Därför kallas de också klass metoder • Statiska metoder får inte referera till instansvariabler (eftersom de instansieras först när ett objekt skapas) • Exempel: Klassen Math i paketet java.lang innehåller statiska matematiska operationer Math.abs (num) ! -- absolutbeloppet Math.sqrt (num) !-- kvadratrot Math.random () ! -- slumptal i intervallet [0.0…1.0) – Får bara referera statiska variabler eller lokala variabler (som existerar oberoende av objekt) • Även metoderna är specifika för objekt – Får bara anropa statiska metoder (om den inte gör det via en instans) 51 52 Konstanter Metoden main • Metoden public static void main(String[] args) ! Anropas automatiskt då man vill starta ett javaprogram • Metoden måste se ut just som ovan (utom args som är en godtycklig identifierare) • Denna metod får sedan se till så att de objekt som behövs av programmet skapas och exekverar metoderna som kör igång programmet 53 • Som variabler fast deras värde får inte ändras • Markeras med reserverade ordet final • Exempel: final double PI = 3.14159; final char NEWLINE = ’\n’; • Fördelar – Vettiga namn istället för konstiga siffror eller tecken. – Lättare att förstå koden. – Enklare att uppdatera. • Rätt ofta även deklarerade static så att bara en konstant finns för hela klassen. 54 Fel och felhantering Hur upptäcker man fel? • Ett program kan fungera korrekt i normalfallet men vara känsligt för störningar – Felaktiga indata (från användaren/andra program) – Yttre omständigheter • Bra program är förberedda på att fel kan uppstå • Partiella funktioner: Funktioner som inte är definierade för vissa inputvärden • Fel uppstår ofta då metoder får oväntade indata. – Kontrollera indata i metoden innan något görs – Kontrollera parametrarna innan metoden anropas • Vad passar bäst? 55 Felhantering • Vissa fel kan inte förebyggas med hjälp av if-satser – En fil kan t ex raderas under skrivningen/läsningen, fast man har kollat i förväg att allt är OK • Möjliga åtgärder: – – – – – – – – – Avbryt eller avsluta programmet Ignorera felet och fortsätt Skriv ut ett meddelande och fortsätt Ignorera anropet som ledde till felet Tolka anropet på ett meningsfullt sätt Kräver åtgärd från användaren interaktivt Producera ett felaktigt resultat Returnera en felkod (går ej alltid) ... Den anropade metoden överlåter åt anroparen att genomföra lämplig åtgärd Undantag • En exception är ett objekt som signalerar ett undantag • throw-satsen kastar ett undantag … som kan fångas m h a en try-sats Satser där ett undantag kan kastas Undantaget som fångas Koden där ett undantag hanteras Hur bör man hantera fel? • Det finns många alternativ • Det finns ingen åtgärd som är bäst i alla lägen • Beror på anroparens mål Låt anroparen bestämma Throw/ raise exception “Kasta”/ “flagga” ett undantag 57 try {…} catch (…) {…} finally {…} 56 Flera undantag kan fångas och hanteras i en try-sats (valfri) Koden för slutåtgärder (valfri) 59 58