Introduktion Om kursen Repetition -Klasser, metoder, objekt och referensvariabler, -Arv och generics types -Arrayer och arrayer av objekt . -Collection ramverket -Iteratorer -Exceptions (undantag) Kap 1-4 och 6.1-6.3 Vad handlar kursen om Datastruktur- ett sätt att organisera data så att exekveringstiden för dina program blir bäst möjligt Ex: arrayer, listor, stack, träd stack Kända tillämpningar Ex: räknemaskinner, kompilatorer träd Vad handlar kursen om? Algoritm - metod för att stegvis lösa ett problem Ex. Algoritm för effektiv sökning och sortering av data. T(n) Algoritm analys, tids komplexitet- hur olika implementationer påverkar exekveringstiden för en algoritm Exekveringstiden representeras som funktioner n Kurslitteratur och webbsida www2.hh.se/staff/nina Java program består av objekt Attributes - Age - Length - Hair - BMI (?) Methods - OpenEyes() - Walk() - Run() - Sleep() Attributes - Color - Manufactured - Model - Horse powers Methods -Start() -Stop() -Accelerate() -Break() -Turn() Object-Oriented Programming Klasser är ”templates” som beskriver hur objekt ska designas in termer av egenskap, metoder och konstruktor. Objekt är instances av objektet Attributes - Radius - Color - Density Radius = 5 Color = Green Density = Soft Radius = 10 Color = Blue Density = Hard Objektorienterad mekanismen Som OO språk har java stöd för följande Inheritance(Arv) En klass kan ärva från en annan och utvidga dennes funktionalitet Overloading Subklasser kan överskriva metoder från superklaser och ge dessa ny mening. Interfaces En eller flera tomma metoder som måste inplementeras av klasserna som implementerar interfacen. Abstract classes Klasser som innehåller tomma metoder och som måste implementeras vid arv. Attributes - x_pos - y_pos Ett “point-objekt” En klass är en beskrivning av ett objekt public class Point { private int x; private int y; public Point(int ix,int iy) { x=ix; y=iy; } public int getX() { return x; } public int getY() { return y; } ............... } class Program { public static void main(String[] args) { Point p1=new Point (3,4); Point p2=new Point(7,9); System.out.println(p1.getX()); } } Objekt och referenser x:3 y:4 x:7 y:8 p2 p1 adress ”innehåll” 1000 3,4 1024 7,8 3200 p1=1000 3600 p2=1024 1000 Vad händer om man gör : p2=p1 ? Att jämföra objekt eller referenser x:3 y:4 x:3 y:4 p1 p2 adress ”innehåll” 1000 3,4 1024 3,4 3200 p1=1000 3600 p2=1024 Vad blir uttrycket ? if(p1==p2) Att jämföra objekt Om två objekt ska kunna jämföras måste de ha en metod som ”gör detta”. class Point{ private int x; private int y; public boolean equals (Point p) { if( p.getX()==x && p.getY()==y) return true; else return false; } // andra metoder } class Program { public static void main(String[] args) { Point p1=new Point (3,4); Point p2=new Point(7,8); System.out.println(p1.equals(p2)); } } Arv och polymorphism class Person { private String name; ................................ public Person( String n){ name=n; } public String toString(){ return ”The name is ”+ name; } } Super klass och subklass, this och super class Student extends Person{ private int credits; public Student (int c, String n){ super(n); credits=c; } public String toString( ){ return super.toString()+ ” ” + credits } } public void addCredits(int x) { this.credits+=x;} Polymorphiska typer och metod bindning Person p1=new Person(” Kale Svensson”); Person Student s1= new Student (0, ” Tina Nordlund”); Student Person p2= new Student ( 0, ” Tina Nordlund”); p2.toString() ?? p2.addCredits()?? Supertyp och subtyp Object Person Vad blir utskriften ? System.out.println(o1.toString()); System.out.println(o2.toString()); Object o1= new Person (”Kalle Svensson”); Object o2= new Student (0, ”Anders T” ); Student Interface public interface Movable { public void movHorisontal(int x); public void movVertical(int y); } En interface innehåller ofullständiga (abstracta) metoder. Interface Comparable I java biblioteket finns interfacen Comparable som används för att definiera objekt som kan jämföras och rangordnas public interface Comparable { public int compareTo( Object other); } Interface och datatyp import java.util.*; class Point implements Comparable { private int x; private int y; // andra metoder public int compareTo(Object o) { Point p= (Point) o; // o måste omkastas till Point if(x>p.x) return 1; else if(x<p.x ) return -1; else return 0; } } Interfacen namn blir datatyp Comparable class Point impelements Comparable class Car implements Comparable Comparable obj1=new Point(3,4); Comparable obj2=new Car(”Volvo”,”Btj-835”); Klassen Object och Interface – är javas sätt att implementera ”generella” typer men.... class MyMethods { public void förvirra1( Object obj) { System.out.println(obj); } public void förvira2( Comparable obj1, Comparable obj2) { System.out.println(obj1.compareTo(obj2)); } } En abstrakt partikel… public abstract class Particle { protected int xp, yp; protected int xv, yv; public Particle(int start_xp, int start_yp) { xp = start_xp; yp = start_yp; xv = 0; yx = 0; } public void setVelocity(int new_xv, int new_yv) { xv = new_xv; yv = new_yv; } public abstract void paint(Graphics g); } Och några konkreta partiklar… public class RoundParticle extends Particle { public RoundParticle(int start_xp, int start_yp) { super(start_xp, start_yp); } public abstract class Particle { protected int xp, yp; protected int xv, yv; public Particle(int start_xp, int start_yp) { xp = start_xp; yp = start_yp; xv = 0; yx = 0; } public void paint(Graphics g) { g.fillOval(xp, yp, 20, 20); } } public class SquareParticle extends Particle { public SquareParticle(int start_xp, int start_yp) { super(start_xp, start_yp); } public void paint(Graphics g) { g.fillRect(xp, yp, 20, 20); } } public void setVelocity(int new_xv, int new_yv) { xv = new_xv; yv = new_yv; } public abstract void paint(Graphics g); } Datastrukturen array Vi deklarerar arrayen och skapar array objekt length int[] lista = new int[31]; 0 0 0 0 0 0 0 0 [0] [1] [2] [3] ............. [27] [28] [29] [30] lista index Datastrukturen array array1 array2 1 7 4 14 6 -6 int[] array1 = {1, 4, 6, -2}; int[] array2 = {7, 14, -6, 0}; -2 0 array1 array2 Efter tilldelning: array2 = array1; 1 4 6 -2 7 14 -6 0 Arrayer som argument till metod class A { public static void förvirra( int [] a) { a[3]=7; a[4]=10; for(int i=0;i<a.length;i++) System.out.println(a[i]); } class Program { public static void main(String[] args) { int [] array1={5,6,7,8,3,8,5}; A.förvirra(array1); for(int i=0;i<array1.length;i++) System.out.println(array[i]); } } } Array av datatypen Object kan innehålla alla typer av objekt Object [] array=new Object [7] array[1]=new Person(..) array[2]=new Student(...) Generella typer i java 5.0 ArrayList lista <Item>=new ArrayList<Item>(5); Stack <Person> st=new Stack <Person>(10); Collections och iteratorer En datastruktur är: data (representerad på olika sätt) Metoder Finns i java.util ..\..\..\..\jdk1.5.0\ docs\index.html Collection- generell samling data List- ordnad samlig av data Set- ordnad samlig av data som inte får innehålla dubbleter Map- Samling av data i par ( objekt+ nyckel) Queue- samlig data som accesar efter en Bästämd ordning Iterator interface Ett Iterator-objekt har följande metoder public interface Iterator { public boolean hasNext(); public Object next(); public void remove(); } Vad är en iterator ? public class MyContainer{ Object [ ] items; int size; public void add( Object obj) { items[size]=obj; size++; } public Iterator iterator(){ return new MyIterator (this); } // andra metoder } Och MyIterator klassen class MyIterator implements Iterator { private int current=0; private MyContainer container; public MyIterator( MyContainer c){ container=c; } public boolean hasNext(){ return curent<container.size; } public Object next(){ return container.items[current ]; current ++; } } alltså hasNext och next Iteratorobjektet innehåller den datastrukturen som skall itereras igenom Och så används ett Iterator- objekt ...main(...) { MyContainer v=new MyContainer(); v.add(”2”); v.add(”3”); Iterator itr= v.iterator(); while( itr.hasNext() ) System.out.println( itr.next() ); } Varför ”2” och inte 2 ?? Run time fel hantering – Exception Fel kan uppträdda under exekveringen av ett program när till exempel: öppnar en fil som inte existerar plocka det tjogonde elementet i en array med tio element skriva till en fil som är skrivskyddad De fel kan inte upptäkas av kompilatorn, då måste programmet hantera de typen av fel. Exceptions == Undantag När man anropar en metod som kan generera undantag ska metodens anrop läggas i en try-catch block. ...main(..){ BufferedReader in=new BufferedReader( new InputStreamReader(System.in)) String text; try{ text=in.readLine(); // gör något med text } catch( IOException e ) { System.out.println(e); } } Implementera metoder som kastar undantag - throws static void printFile( String fName) throws IOException { // metoden låter ”anroparen” hantera undantaget } ..main(..) { try{ printFile( args[0]); } catch (IOException e){ System.out.println(e);} } Implementera metoder som genererar undantag- throw public static void divide( int tal1, int tal2) { if(tal2 ==0) throw new AritmeticExeption(” Divide by zero”); else tal1/tal2; } Skapa egna undantag klasser class MyException extends Exception { public MyException(String s) { super(s); } }