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);
}
}