Kodkonvention 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

Relevanta dokument
Arrayer. results

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Personal. Objektorienterad programmeringsmetodik 5DV133. Kursmål. Här sitter vi MIT-huset våning 4. Examination. Kursens uppläggning.

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Vad gör vi idag? F8 Uppsamling/Repetition. Tentamen. Detta har vi gått igenom. Detta kommer vi att gå igenom. Detta har vi gått igenom.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

Objekt och klasser - Introduktion

Klassdeklaration. Metoddeklaration. Parameteröverföring

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Parameteröverföring. Exempel. Exempel. Metodkropp

OOP Objekt-orienterad programmering

TENTAMEN OOP

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Typkonvertering. Java versus C

Kopiering av objekt i Java

Objektorienterad programmering i Java

Föreläsning 2, vecka 8: Repetition

Objektorienterad Programmering (TDDC77)

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

TENTAMEN OOP

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Objektorienterad Programmering (TDDC77)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

F4. programmeringsteknik och Matlab

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Tentamen OOP

Laboration A Objektsamlingar

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Att skriva till och läsa från terminalfönstret

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

DAT043 - föreläsning 8

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

DAT043 Objektorienterad Programmering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Objektorienterad Programmering (TDDC77)

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Föreläsning REPETITION & EXTENTA

Föreläsning 6: Metoder och fält (arrays)

Föreläsning 5-6 Innehåll

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Föreläsning 3-4 Innehåll

Sammansatta datatyper Generics: Parametrisk polymorfism

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Objektorienterad Programmering (TDDC77)

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Del A (obligatorisk för alla)

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Parallellism, återblick

TENTAMEN OOP

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Objektorienterad Programmering (TDDC77)

SMD 134 Objektorienterad programmering

Generisk klass med typparameter Inre klass - ListIterator

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Transkript:

Mer klasser och objekt Vi kikar in i klasserna, och tar en titt på några av vas inbyggda 67 Kodkonvention Klasser påbörs 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 Konstanter Bara stora bokstäver. Ord åtskiljs med _ PI Följer man dessa konventioner så kommer ens egna klasser att se ut som vas inbyggda. 68 Variabel eller metod private default protected public Nås i samma klass Visibility Nås i samma paket Nås i subklass Nås överallt 69 Överlagring 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() amethod(,) 7 Överlagrade konstruktorer 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(6,5); public Square(int xpositionp,int ypositionp){ size = ;! xposition = xpositionp;! yposition = ypositionp;! color = "red"; isvisible = false; 7 Mer this 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 = ;! this.xposition = xposition;! this.yposition = yposition;! color = "red"; isvisible = false; 7

String 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: + => Antal: charat(int) tar fram bokstaven på en given position (numrerat från ) length() tar fram antal bokstäver i strängen equals(string) kollar om två strängar innehåller samma tecken mm. (se API beskrivningen) Enkel output Kan tex göras mha klassen PrintStream Fördefinierade standardströmmar: ström System.out System.err syfte skriva vanlig text skriva felmeddelanden 7 74 PrintStream Kontrollstrukturer i Java 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 print och println finns för alla tänkbara datatyper 75 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) 76 switch (expression) { case value: sats; break; case value: sats; break; default: satsn; switch-satsen OPTIONAL Uttrycket måste vara heltal, tecken eller enum (från va 7 även String) Motsvarar nästade if-satser 77 static 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. 78

Statiska attribut Normalt har varje objekt eget minnesutrymme static gör variabeln gemensam för alla objekt i klassen (dvs den delas av alla) private static int count; Kallas ibland klass variabler 79 Statiska metoder Statiska metoder anropas via klassnamnet Man behöver inte skapa ett objekt först Därför kallas de också klass metoder Exempel: Klassen Math i paketet va.lang innehåller statiska matematiska operationer Math.abs (num)! -- absolutbeloppet Math.sqrt (num)!-- kvadratrot Math.random ()! -- slumptal i intervallet [..) 8 Statiska metoder Statiska metoder får inte referera till instansvariabler (eftersom de instansieras först när ett objekt skapas) 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) 8 Metoden main Metoden public static void main(string[] args)! Anropas automatiskt då man vill starta ett vaprogram 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 8 Konstanter Som variabler fast deras värde får inte ändras Markeras med reserverade ordet final Exempel: final double PI =.459; 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. Fel och felhantering 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å 8 84

Hur upptäcker man fel? 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? 85 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)... 86 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 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 try { catch ( ) { finally { Satser där ett undantag kan kastas Undantaget som fångas Koden där ett undantag hanteras Koden för slutåtgärder (valfri) Flera undantag kan fångas och hanteras i en try-sats (valfri) 87 88 Arrayer och intro till Generics och Autoboxing Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en med N element med indexen till N- Exempel: 4 5 6 7 8 9 results 79 87 94 8 67 98 87 8 74 9 89 9

Arrayer Alla värden har samma datatyp Får vara primitiva datatyper eller klasstyper I Java behandlas er som objekt Instansieras med new Namnet på fältet är en referens Index är av datatyp int OBS! Vid instansiering av ett fält med objekt instansieras ej objekten. Det skapas bara utrymmet för rätt antal referenser. Referenserna sätts till null vid skapandet. 9 Arrayer och hakparanteser Deklaration typename[] Name; (Observera att antalet värden ej ingår i typen vilket det delvis gör i C) Instansiering Name = new typename[numberofelements]; numberofelements godtyckligt uttryck av typ int Åtkomst av element Name[index] // index >= && index < numberofelements indexerar man sig utanför godkända index inträffar ett undantag (mer om dessa senare) 9 Exempel int[] results; results = new int[]; //..9 int i = ; char[] koder = new char[i]; Triangle triangles[]=new Triangle[i+]; Arrayer som datatyp Arrayer är en datatyp För varje datatyp finns en motsvarande datatyp Typen är typename[] Storleken ingår inte i datatypen Grundtypen bestämmer kompatibiliteten Även fält referenser är polymorfa 9 94 Fler exempel int[] results = new int[]; int[] results = new int[]; Primitiva datatyper Instansiera er Klasstyper int[] ; Triangle[] tarray; tarray results = results; results = results; OK, då samma datatyp = new int[]; tarray = new Triangle[]; tarray null null null [] = ; tarray[] = new Triangle(); tarray null 95 96 null

Instansiera er Glöm inte att instansiera en före användningen int[] results; results[] = 99; NullPointerException ett undantag, dessa kan bevakas och fångas upp för att hanteras, vilket vi kommer titta på på en senare föreläsning 97 Initialisera med listor Hela fältet kan initialiseras vid deklarationen int[] enheter = {47,, 89, 9, 54, 69, 97; char[] kursniva = {'A', 'B', 'C', 'D'; Längden bestäms av antalet element Endast vid deklarationen Observera: new används inte Ingen explicit storlek 98 Väl skapat är ens storlek fix Index måste referera till existerande element Index måste vara i intervallet storlek- Index kontrolleras dynamiskt (under körning) int[] = {,,, 4, 5; int i; i = [5]; Indexkontroll ArrayIndexOutOfBoundsException: 5 99 4 5 4 Arrayers storlek Varje Array objekt har ett publikt attribut length som anger antalet element, inte högsta index OBS! Leder ofta till off-by-one fel Används ofta i loopar Exempel: int[] = ; for (int i = ; i <=.length; i++) [i] ; for (int i = ; i <.length; i++) [i] ; Off-by-one fel, eftersom index löper från till.length- Objekt som element Elementen i en kan vara objektreferenser Circle[] cirkel = new Circle[5]; Fem referenser till objekt av typen Circle OBS! Inga objekt har skapats (referensen är null) cirkel[] = new Circle(); Objekten måste skapas separat t.ex. m.h.a. loop for (int i=;i < cirkel.length;i++) { cirkel[i] = new Circle(); cirkel[i].changesize((i+)*); Arrayer som parametrar Arrayreferensen överförs ( kopieras ) och den formella och aktuella parametern blir alias Ändringar påverkar båda Eftersom storleken inte är del av datatypen får den aktuella parametern ha godtycklig längd int[] = {,,, 4, 5;.aMethod (); public void amethod (int[] numbers) { numbers[] = 99; [] = ; numbers 99 4 5 4

Flerdimensionella er Görs i va i form av av av... En-dimensionella er motsvarar listor Två-dimensionella er motsvarar tabeller eller matriser med rader & kolumner Varje dimension har ett eget index Varje har har sin egen length dvs har vi en tvådimensionell så har kolumnen en lengt och varje rad sin Kan initialiseras med listor Ännu fler exempel int[][] matrix = new int[][]; int[][] matrix = {{, {,, {,,, {4, 44, 444, 4444 int[][][] matrix = new int[][][]; matrix[].length == ; matrix[].length == 4; matrix[][] = matrix[][]; matrix[] = matrix[]; matrix[] = matrix; Triangle[][][][][] fivedimensional; 4 Kopiera er Arrayvariabler är referenser Tilldelning gör ingen kopia på elementen i fältet int[] = {,,, 4, 5; int[] = new int[5]; = ; 4 5 4 4 5 Kopiera er System.copy gör kopia element för element Vid flerdimensionella er måste den anropas flera gånger Gör lämpligtvis i en (nästad) loop public static void copy ( Object source, int srcindex, Object dest, int destindex, int size) throws ArrayIndexOutOfBoundsException, ArrayStoreException Vi kan självklart göra det manuellt också 6 Klassen ArrayList (va.util) Ett objekt av klassen ArrayList liknar en Men Har dynamisk längd, dvs längden utökas efter behov Lagrar bara referenser till objekt Inte samma syntax för indexering Implementeras med er Generics I tidigare versioner av Java kan man göra generella klasser (tex ArrayList) med hjälp av Object. Fördel är att man behöver skriva koden till listan en enda gång och sen använda den oavsett vad som ska lagras. Nackdel är att man i en och samma lista kan lagra olika objekt huller om buller. (Först en bok, sen ett bibliotek följt av ett hus etc) En annan nackdel är att man behöver göra många explicita typkonverteringar i kod som använder sig av en klass som utnyttr Object. Mha generics så kan man istället specificera (vid konstruktion av objektet) vad som ska lagras 7 8

ArrayList<T> ArrayList<T> ( ) + add(t obj) + add (int index, T obj) + set (int index, T obj) + remove (int index) + T get (int index) + boolean contains (T obj) + boolean isempty ( ) + int indexof (T obj) + int size ( ) + clear ( )... 9 Effektiviteten av ArrayList När ett element sätts in flyttas (kopieras) alla efterfölnde element en position åt höger 4 5 6 7 8 9 79 87 94 8 67 98 87 8 74 9... sätt in på index 4 När ett element tas bort flyttas (kopieras) alla efterfölnde element en position åt vänster 4 5 6 7 8 9 79 87 94 8 67 98 87 8 74 9... Ej effektivt Autoboxing Utan generics och autoboxing Automatisk konvertering mellan primitiva typer och wrapperklasserna Integer, Float, Boolean etc Ex: Integer i = new Integer(9); Integer j = new Integer(); Integer k = i + j; //Typfel i va.4 I va sedan version 5 Kod kommer att infogas för att göra konverteringen så det kommer inte gå snabbare än om man gör det manuellt, men koden blir mindre plottrig import va.util.*; public class ArrayListTest { public static void main(string[] args){ ArrayList mylist = new ArrayList(); mylist.add(new Integer()); mylist.add("hejsan svejsan"); int testint=((integer)mylist.get()). intvalue(); System.out.println(testInt); Johan Eliasson Med generics och autoboxing import va.util.*; public class ArrayListTest{ public static void main(string[] args){ ArrayList<Integer> mylist = new ArrayList<Integer>(); mylist.add(); mylist.add("hejsan svejsan"); // Blir kompileringsfel ovan nu!! int testint = mylist.get(); // OBS! (Integer) och.intvalue borta System.out.println(testInt); Iteratorer Kan användas för att gå igenom samlingar av värden tex i Vector, ArrayList m.fl. Vector<Integer> v=new Vector<Integer>(); for(int i =;i<;i++) v.add(new Integer(i)); Iterator<Integer> it = v.iterator(); while(it.hasnext()) it.next() 4

For-each Ny variant på for-loopen. Tillkom i Java.5 (5) ArrayList<Integer> v=new ArrayList<Integer>(); for(int i =;i<;i++) v.add(new Integer(i)); for(integer value:v) value Funkar för er och alla klasser som implementerar interfacet Iterable 5