Repetition EDAA10
Objekt-orientering Java är ett objekt-orienterat programmeringsspråk Program byggs upp av klasser och objekt Objekt instantieras från klasser Klasser och objekt innehåller attribut och metoder Klasser innehåller även konstruktorer Klasser kan dela med sig av attribut, konstruktorer och metoder till underliggande klasser genom arv
(Kap 1) Kompilering och exekvering
Kap 2 - objekt Objekt Referensvariabler, objekt och moln -bilder Punktnotation för access till (attribut) och metoder Deklaration och instantiering av objekt från klass med new null Referenstilldelning Specifikation av klasser Kommentarer Konstruktorer Metoder Metod Parametrar, argument, returvärde Funktion = metod som returnerar ett värde Huvudprogram
Fullständig specifikation Exempel: Text som beskriver implementationen /* Skapar en kvadrat med övre vänstra hörnet i x, y och med sidlängden side */ Square(int x, int y, int side); Konstruktor /* Ritar kvadraten i fönstret w */ void draw(simplewindow w); Metod /* Flyttar kvadraten avståndet dx i x-led, dy i y-led */ void move(int dx, int dy); Parameterlista
Ofullständig specifikation Exempel: Saknar konstruktor Saknar draw-metod Ska kunna skapa en kvadrat med övre vänstra hörnet i x, y och med sidlängden side. Ska kunna rita ut en kvadrat i fönstret w. Ska kunna flytta kvadraten avståndet dx i x- led, dy i y-led: void move(int dx, int dy); Saknar parameterlista för konstruktor och draw-metod Identifiera och komplettera med saknade delar. Leta efter ytterligare krav och delar bland uppgiftstext
Huvudprogram Exempel: public class Huvudprogram { public static void main(string[] args) { // Deklaration av lokala variabler int x = 2; Square s = new Square(1, 2); // Satser s.move(x, 2);
Kap 3 klass och metod Implementation av klass från specifikation av klass Bestämma attribut Implementera konstruktorer Implementera metoder Lokala variabler Parametrar (referenser till objekt och primitiver) Returvärde (referens till objekt eller primitiv) Statiska attribut och metoder Överlagring av metoder och konstruktorer this
Kap 3 klass Instantieras till ett eller flera objekt public class klassnamn { // Deklarationer av attribut // Deklarationer av konstruktorer // Deklarationer av metoder Exempel: public class Point {
Kap 3 attribut Variabler (tillstånd) som är tillgängliga i objekt av en klass Deklareras i klassen: modifierare typ attributnamn ; Exempel: public class Point { private int x; Modifierare kan vara public, protected eller private. Ofta är attribut privata Typ kan vara en primitiv typ (int, double, boolean,...) eller en klass (ArrayList<Point> eller Point)
Kap 3 konstruktor Anropas när ett objekt skapas av en klass Har till uppgift att initialisera attribut till kända värden Deklareras i klassen: modifierare klassnamn ( parameterlista ) { // satser som ger attribut kända värden public class Point { private int x; Exempel: public Point(int x) { this.x = x;
Kap 3 konstruktor Modifierare kan vara public, protected eller private. Ofta är konstruktorer publika Konstruktornamnet måste vara samma som klassnamnet Konstruktorer skiljer sig från metoder genom att de saknar typ mellan modifierare och namn En klass kan innehålla flera konstruktorer (överlagring), de måste då skilja sig i parameterlistan. Exempel: public class Point { private int x; public Point() { x = 0; public Point(int x) { this.x = x; Konstruktorn anropas då ett objekt skapas, dvs då new används. Exempel: public class Huvudprogram { public static void main(string[] args) { Point p1 = new Point(); Point p2 = new Point(1); Vilken konstruktor som används beror på parameterlistan. New point() skapar ett objekt och anropar den första konstruktorn. New point(1) skapar ett objekt och anropar den andra konstruktorn.
Metod Anropas med punktnotation från objekt av klassen Statiska metoder kan anropas med punktnotation från klassen Deklareras i klassen: modifierare typ metodnamn (parameterlista ) { // Lokala variabler // Satser // Eventuell retur public class Point { private int x; public Point(int x) { this.x = x; public int getx() { return x;
Metod Modifierare är public, protected eller private. Ofta används public. Private används ibland för hjälpmetoder, dvs metoder som bara används inom den egna klassen. Typ kan vara en primitiv typ eller en klass. Typen måste matchas mot en retur-sats med samma typ. Void är en speciell typ som betyder att inget värde returneras från metoden. Metoder kan överlagras (samma metodnamn används), då måste olika parameterlistor användas. public class Square{ private Point p; public Square(int x) { p = new Point(x); public int getx() { return p.getx(); public void dosomething() { public void dosomething(int x) {
Kap 4 - kodutseende Layout En sats per rad Indragningar Namngivning Klassnamn Inledande stor bokstav (Square) Metodnamn Inledande liten bokstav (mymethod) Variabelnamn Samma som metodnamn Konstantnamn Stora bokstäver (MY_CONSTANT) Kommentarer // Enradskommentar /* Flerraderskommentar */
Kap 5 typer Primitiva typer Heltal, flyttal, boolean (sanningsvärde), tecken, referens Deklaration av variabel / attribut typ namn = startvärde; Implicita startvärden Deklaration av konstanter byte b = 2; //Heltal -127 128 short s = 45; // -32767 32768 int i = 333; // -2*10^9 2*10^9 long l =555; // -9*10^18 9*10^18 float f = 10f; // Flyttal double = 10.0; boolean b = true; // true, false char c = \n ; // Tecken Square r = null; // Referens public class Square { private int x = 1; public int add(int y) { int z = 1; return x + y + z; Attribut Parameter Lokal variabel
Kap 6 - uttryck Tilldelningssats variabel = nytt värde; Tilldelningsregler Aritmetiska uttryck + - * / % Konvertering (casting) Logiska uttryck == && och eller! icke int num = 12; double div = 123 / (double)num; num = (long)math.round(div); int max = Integer.MAX_VALUE; int min = Integer.MIN_VALUE; for (int i=0; i<9; i++) if (i%2 == 0) ; boolean found = false; int i=32; while (! found && i>0) { i--; /*...*/ String[] str = { aa, ab, ba, cc ; int p=3; while (str[p].compareto( bb ) > 0 && p > 0) { p--;
Kap 6 Teckenuttryck Ordningsnummer Speciella tecken \n Stränguttryck Jämförelse Objektuttryck Jämförelse char ch = A ; if (ch >= A && ch <= Z ) ch = (char) (ch A + a ); ch = \n ; String s = Hej + san\n ; s = s + och hejsan\n ; if (s.compareto( Hej ) < 0) ; Point p1 = new Point(10, 20); Point p2 = new Point(10, 20); Point p3 = p1; p3 = null; if (p1!= null) ; if (p1 == p2) ; if (p1.equals(p2)) ;
Kap 6 Slumptalsklass (java.util.random) import java.util.random; public class Huvudprogram { public static void main(string[] args) { Random r = new Random(); for (int i=0; i<10; i++) { int a = r.nextint(); double b = r.nextdouble();
Kap 7 satser I metoder och konstruktorer Sekvens Tilldelning Metodanrop Retursats Tom sats Alternativ if switch break Repetition while do while for break, continue Utskrift Inläsning int a = 4; Point p = new Point(a); int x = p.getx(); return x; ; if (a < 5) { // Sats om sant else { // Sats om falskt switch (a) { case 1: ; break; case 2: ; break; while (a>0) { a--; do { a++; while (a<5); for (int i=0; i<4; i++) ;
Inläsning System.in Scanner import java.util.scanner; public class Inlasning { public static void main(string[] args) { Scanner scan = new Scanner(System.in); while (scan.hasnextint()) { int n = scan.nextint(); String s = scan.next();
Utskrift System.out public class Utskrift{ public static void main(string[] args) { StringBuilder sb = new StringBuilder(); sb.append( Hej ).append( san ).append( \n ); System.out.println( Hello ); System.out.print(sb.toString()); for (int i=0; i<5; i++) { double r = Math.sqrt(i); System.out.printf( %5d...%6.3f%n, i, r);
Kap 8 vektor och lista Vektor, matris Listalgoritmer för vektor Insättning i osorterad lista Insättning i sorterad lista Borttagning från osorterad lista Borttagning från sorterad lista Utöka storlek Linjärsökning Binärsökning Sortering Registrering
Kap 8 Anta att klass Fartyg finns public class Fartyg{ private String name; public Fartyg(String name) { this.name = name; public String getname() { return name; public String tostring() { return Fartyg + \t + name;
Kap 8 vektor Deklaration och startvärden import java.util.scanner; public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; public MinVektor() { Scanner s = new Scanner(System.in); n = 3; v[0] = new Fartyg( a, 1 ); for (int i = 1; i<3; i++) { v[i] = new Fartyg(s.next()); import java.util.scanner; public class MinVektor2 { private int[] a; public MinVektor2() { Scanner s = new Scanner(System.in); a = new int[25]; a[0] = 1; a[1] = a[0] + 1; for (int i = 0; i<n; i++) { a[i] = s.nextint();
Kap 8 matris Deklaration och startvärden import java.util.scanner; public class MinMatris { private int[][] a = new int[25][12]; public MinMatris() { Scanner s = new Scanner(System.in); a[0][0] = 1; a[1][0] = a[0][0] + 1; for (int i = 0; i<25; i++) { for (int j=0; j<12; j++) { a[i][j] = s.nextint();
Kap 8 Insättning i osorterad lista public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; public void insert(fartyg f) { v[n] = f; n++; Sätt in sist Öka listans storlek
Kap 8 Insättning i sorterad lista public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; public void insert(fartyg f) { int pos = 0; while (pos<n && f.getname().compareto(v[pos].getname())<0) { pos++; for (int i=n; i>pos; i--) { v[i] = v[i-1]; v[pos] = f; n++; Linjärsökning efter insättningsposition Skapa utrymme för att sätta in fartyg Öka listans storlek Sätt in
Kap 8 Borttagning ur osorterad och sorterad lista public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; public void remove(fartyg f) { int pos = 0; while (pos<n && f.getname().compareto(v[pos].getname())!=0) { pos++; if (pos<n) { for (int i=pos; i<n-1; i--) { v[i] = v[i+1]; n--; Minska listans storlek Linjärsökning efter borttagningsposition Om fartyget finns i listan, så ta bort
Kap 8 Utöka storlek Vektorns storlek public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; Saknar vektorn plats private int size = 25; för nästa listelement? public void insert(fartyg f) { if (n>=size) { Fartyg[] tmp = v; v = new Fartyg[2 * size]; for (int i=0; i<n; i++) { v[i] = tmp[i]; size = 2 * size; // Resten av insert-koden Skapa ny vektor av dubbla storleken Kopiera innehållet i den gamla vektorn till den nya
Kap 8 Linjärsökning public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; public int find(fartyg f) { int pos = 0; while (pos<n && f.getname().compareto(v[pos].getname())!=0) { pos++; if (pos<n) { return pos; else { return -1; Fartyget hittades inte Linjärsökning Om fartyget hittades, så returnera listindex
Kap 8 Binärsökning (kallas också mittpunktssökning eller intervallhalvering) Förutsätter sorterad vektor Leta medan det finns ett giltigt intervall och fartyget inte är funnet public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; public int find(fartyg f) { int low = 0; int high = n-1; int mid = -1; boolean found = false; while (low<=high &&! found) { mid = (low+high) / 2; if (f.getname().compareto(v[mid].getname()) == 0) { found = true; else if (f.getname().compareto(v[mid].getname()) > 0) { low = mid + 1; else { high = mid 1; if (found) { return mid; else { return -1; Returnera position för funnet fartyg eller -1 Det sökta namnet finns i intervallet [low,high] Titta på mittpunkten Fartyget är hittat Fartygsnamnet finns i intervallet [mid+1,high] Fartygsnamnet finns i intervallet [low,mid-1]
Kap 8 Urvalssortering public class MinVektor { private Fartyg[] v = new Fartyg[25]; private int n; public void sort() { for (int i=0; i<n-1; i++) { String min = v[i].getname(); // startsträng int minindex = i; for (int k=i+1; k<n; k++) { if (v[k].getname().compareto(min) < 0) { min = v[k].getname(); minindex = k; Fartyg tmp = v[minindex]; v[minindex] = v[i]; v[i] = tmp; Hitta minsta elementet i intervallet [i,n-1] Byt plats på element i och minsta elementet i [i,n-1]
Kap 8 Registrering Registreringsfack public class Registrering { private int[] v = new int[5]; // 0-9, 10-19,..., 40-50 public void registernumber0-50(int n) { int index = -1; if (n < 50) { index = n / 10; // Heltalsdivision else { index = 5; v[index]++; Räkna ut vilket fack (index) talet n tillhör Räkna upp antalet i rätt fack
Kap 9 arv Superklass och subklasser Subklass ärver attribut, konstruktorer och metoder Subklassen specialiserar, utvidgar superklassen Superklass Kan vara abstrakt Abstrakta metoder Subklass Anrop av superklass konstruktor från konstruktor super Anrop av metod i superklass Anrop av metod i superklass vid överlagring super.tostring() Typregler instanceof
Kap 9 Arv public class SuperKlass { private String s; protected int n; public SuperKlass(String s, int n) { this.s = s; this.n = n; public String tostring() { return s +, + n; public String gets() { return s; public void SubKlass extends SuperKlass { private double g; public SubKlass(String s, int n, double g) { super(s, n); this.g = g; public String tostring() { return super.tostring() +, + g; extends anger arv Attribut n, konstruktor, metod tostring och gets från SuperKlass tillgängliga i SubKlass super för att anropa konstruktor i SuperKlass super för att anropa överlagrad metod i SuperKlass
Abstrakta klasser kan ha abstrakta metoder Kap 9 Abstrakt public abstract class SuperKlass { private String s; protected int n; public SuperKlass(String s, int n) { this.s = s; this.n = n; public abstract String abstractmethod(); Ingen implementation av abstrakt metod ges i SuperKlass public void SubKlass extends SuperKlass { private double g; public SubKlass(String s, int n, double g) { super(s, n); this.g = g; public String abstractmethod() { g = 1.0; Implementation av abstrakt metod ges i SubKlass
Kap 11 String och StringBuilder String för konstant sträng length charat equals compareto indexof substring String s1 = Hello ; String s2 = Hej ; int len = s1.length(); if (s1.equals( Hello )) ; if (s1.compareto(s2) == 0) ; if (s1.compareto(s2) > 0) ; // s1 > s2 if (s1.compareto(s2) < 0) ; // s1 < s2 if (s1.indexof( He ) >= 0) ; String s3 = s1.substring(0, 2); // He
Kap 11 String och StringBuilder StringBuilder för förändringsbar sträng används för att bygga strängar tostring konvertering till konstant sträng append insert delete replace Metoden String tostring() StringBuilder sb = new StringBuilder(); sb.append( Hej ).append( san ); String s = sb.tostring(); Alla klasser kan deklarera en tostring-metod som har till uppgift att skapa en sträng som representerar objektet.
Kap 12 ArrayList ArrayList<typ> Enkla listoperationer finns Insättning Borttagning Utöka storlek ArrayList<Fartyg> v = new ArrayList<Fartyg>(); int n = v.size(); v.add(new Fartyg( a )); // Lägg till fartyg sist v.add(0, new Fartyg( b )); // Lägg till fartyg på pos 0 Fartyg f = v.remove(0); // Ta bort fartyg på pos 0 Mer avancerade måste fortfarande implementeras Insättning i sorterad lista Borttagning från sorterad lista Linjärsökning ~ (finns givet att equals finns överlagrad i lagrat objekt) Binärsökning Sortering Autoboxing
Kap 12 Insättning i sorterad lista public class MinVektor { Linjärsökning efter private ArrayList<Fartyg> v = new ArrayList<Fartyg>(); insättningsposition public void insert(fartyg f) { int pos = 0; while (pos<v.size() && f.getname().compareto(v.get(pos).getname())<0) { pos++; v.add(pos, f); Sätt in
Kap 12 Borttagning ur sorterad lista public class MinVektor { private ArrayList<Fartyg> v = new ArrayList<Fartyg>(); Linjärsökning efter public void insert(fartyg f) { borttagningsposition int pos = 0; while (pos<v.size() && f.getname().compareto(v.get(pos).getname())!=0) { pos++; if (f.getname().compareto(v.get(pos).getname())==0) { v.remove(pos); Ta bort
Kap 12 Urvalssortering public class MinVektor { public void sort(arraylist<fartyg> v) { for (int i=0; i<n-1; i++) { String min = v.get(i).getname(); // startsträng int minindex = i; for (int k=i+1; k<n; k++) { if (v.get(k).getname().compareto(min) < 0) { min = v.get(k).getname(); minindex = k; Fartyg tmp = v.get(minindex); v.set(minindex, v.get(i)); v.set(i, tmp); Hitta minsta elementet i intervallet [i,n-1] Byt plats på element i och minsta elementet i [i,n-1]