370 likes | 511 Views
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.
E N D
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 • Kända tillämpningar Ex: räknemaskinner, kompilatorer stack 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. • Algoritm analys, tids komplexitet- hur olika implementationer påverkar exekveringstiden för en algoritm T(n) Exekveringstiden representeras som funktioner n
Kurslitteratur och webbsida www2.hh.se/staff/nina
Java program består av objekt • Attributes • Color • Manufactured • Model • Horse powers • Methods • Start() • Stop() • Accelerate() • Break() • Turn() • Attributes • Age • Length • Hair • BMI (?) • Methods • OpenEyes() • Walk() • Run() • Sleep()
Object-Oriented Programming • Klasser är ”templates” som beskriver hur objekt ska designas in termer av egenskap, metoder och konstruktor. • Objekt är instances av objektet • Radius = 5 • Color = Green • Density = Soft • Attributes • Radius • Color • Density • 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 classesKlasser som innehåller tomma metoder och som måste implementeras vid arv.
Ett “point-objekt” • Attributes • x_pos • y_pos 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 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 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 Person p1=new Person(” Kale Svensson”); Student s1= new Student (0, ” Tina Nordlund”); Student Person p2= new Student ( 0, ” Tina Nordlund”); p2.toString() ?? p2.addCredits()??
Supertyp och subtyp Object Vad blir utskriften ? System.out.println(o1.toString()); System.out.println(o2.toString()); Person Object o1= new Person (”Kalle Svensson”); Student Object o2= new Student (0, ”Anders T” );
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 { protectedint xp, yp; protectedint xv, yv; public Particle(int start_xp, int start_yp) { xp = start_xp; yp = start_yp; xv = 0; yx = 0; } publicvoid 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 void paint(Graphics g) { g.fillOval(xp, yp, 20, 20); } } public abstract class Particle { protectedint xp, yp; protectedint xv, yv; public Particle(int start_xp, int start_yp) { xp = start_xp; yp = start_yp; xv = 0; yx = 0; } publicvoid setVelocity(int new_xv, int new_yv) { xv = new_xv; yv = new_yv; } public abstract void paint(Graphics g); } 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); } }
Datastrukturen array • Vi deklarerar arrayen och skapar array objekt int[] lista = new int[31]; length 0 0 0 0 0 0 0 0 [0] [1] [2] [3] ............. [27] [28] [29] [30] lista index
Datastrukturen array • Detta fungerar inte, vi får två referenser till samma aray array1 array1 1 4 6 -2 1 4 6 -2 array2 7 14 -6 0 array2 7 14 -6 0 int[] array1 = {1, 4, 6, -2}; int[] array2 = {7, 14, -6, 0}; Efter tilldelning: array2 = array1;
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 alltså hasNext och next 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 ++; } } Iterator-objektet 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); } }