77
Objektorienteeritud programmeerimine 11. loeng 22. aprill Eno Tõnisson 1

PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Objektorienteeritud programmeerimine

11. loeng

22. aprill

Eno Tõnisson

1

Page 2: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Kasutatud

• H. Heina loengumaterjalid

• J. Kiho Väike Java leksikon

• J. Kiho Java Programmeerimise aabits

• Y. D. Liang Introduction to Java Programming

• Java tutorial. Java kodulehel

2

Page 3: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Eelmisel nädalal

• loeng

– erindid, vood

• praktikum

– erindid

• kevad

3

Page 4: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Umbes mitu tundi tegelesite eelmisel nädalal selle ainega (loeng+praktikum+iseseisvalt)?

1. paariline

4

1. 2. 3. 4. 5. 6. 7. 8.

0% 0% 0% 0%0%0%0%0%

1. 0-2 tundi

2. 2-4 tundi

3. 4-6 tundi

4. 6-8 tundi

5. 8-10 tundi

6. 10-12 tundi

7. 12-14 tundi

8. üle 14 tunni

Page 5: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Kuivõrd olete selle ainega graafikus? 1. paariline

5

1. 2. 3. 4. 5.

0% 0% 0%0%0%

1. Isegi ees

2. Täiesti graafikus

3. Veidi maas, aga saan ise hakkama

4. Kõvasti maas, vajan abi

5. Ei oska öelda

Page 6: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Umbes mitu tundi tegelesite eelmisel nädalal selle ainega (loeng+praktikum+iseseisvalt)?

2. paariline

6

1. 2. 3. 4. 5. 6. 7. 8.

0% 0% 0% 0%0%0%0%0%

1. 0-2 tundi

2. 2-4 tundi

3. 4-6 tundi

4. 6-8 tundi

5. 8-10 tundi

6. 10-12 tundi

7. 12-14 tundi

8. üle 14 tunni

Page 7: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Kuivõrd olete selle ainega graafikus? 2. paariline

7

1. 2. 3. 4. 5.

0% 0% 0%0%0%

1. Isegi ees

2. Täiesti graafikus

3. Veidi maas, aga saan ise hakkama

4. Kõvasti maas, vajan abi

5. Ei oska öelda

Page 8: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Konsultatsioonid

• neljapäeviti 18.00

• Liivi 2-004

8

Page 9: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Täna

• Vood

• Dünaamilised andmestruktuurid

• Tunnikontroll

9

Page 10: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Sisend-väljund

• Sisend-väljund

• Failid

• Vood

10

Page 11: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Sisend/väljund

• ingl. k. input/output

• pakett java.io

• Javas voo abil

– klaviatuurilt, failist, sõnest, Internetist …

– ekraanile, faili …

11

Page 12: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Failid

• java.io.File

• Fail

– kataloog on ka fail

• Pigem faili (kataloogi) nime (ja tee) esitus

• Ei täpsustata, kuidas sinna kirjutatakse või sealt loetakse

12

Page 13: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Voog

• ingl. k. stream

• osa lihtsalt kannab andmeid, osa ka töötleb

• ühendatakse Java I/O süsteemi abil füüsilise seadmega

• ühel pool tootja (allikas), teisel pool tarbija

• voo andmetele juurdepääs järjestikune

13

Page 14: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Jaotus

• Java seisukohalt jagunevad vood: – sisendvoog (input stream) ja väljundvoog (output

stream) • vastavalt rollile "tootja-tarbija" suhtes

– baidivoog (byte stream) ja märgivoog (character stream) • vastavalt andmete tüübile

– puhverdatud (buffered) ja puhverdamata voog • efektiivsuse kaalutlustel puhverdada

– vastavalt voo kandjale • failivoog (file stream)

• massiivivoog (array stream)

• toruvoog (piped stream)

• …

14

Page 15: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Sisend- ja väljundvoog

• Programmi mõttes – sisendvoog (input stream) – väljundvoog (output stream)

• Väljundvoog võib viia infot suvalisele välisseadmele (fail, kõvaketas, konsool, …), mis toetab baidijadade vastuvõtmist.

• Sisendvoo allikaks on tüüpiliselt klaviatuur, fail, baidimassiiv, …

• Sisend- ja väljundvoo muudab efektiivsemaks puhverdamine

15

Page 16: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Baidivoog

• abstraktsed klassid – InputStream – OutputStream

• klassi InputStream alamklasse – FileInputStream

– ByteArrayInputStream

– SequenceInputStream

– …

• klassi OutputStream alamklasse – FileOutputStream

– DataOutputStream

– CipherOutputStream

– FilterOutputStream

• PrintStream

– …

16

Page 17: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

17

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class BaitideKopeerimine {

public static void main(String[] args) throws IOException {

FileInputStream in = null;

FileOutputStream out = null;

try {

in = new FileInputStream("minemine.txt");

out = new FileOutputStream("koopia.txt");

int c;

while ((c = in.read()) != -1) {

out.write(c);

}

} finally {

if (in != null) {

in.close();

}

if (out != null) {

out.close();

}

}

}

}

Page 18: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Märgivoog

• abstraktsed klassid – Reader – Writer

• klassi Reader alamklasse – BufferedReader

– InputStreamReader

• FileReader

– …

• klassi Writer alamklasse – FileWriter

– PrintWriter

– BufferedWriter

– …

18

Page 19: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

19

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class MärkideKopeerimine {

public static void main(String[] args) throws IOException {

FileReader in = null;

FileWriter out = null;

try {

in = new FileReader("minemine.txt");

out = new FileWriter("koopia.txt");

int c;

while ((c = in.read()) != -1) {

out.write(c);

}

} finally {

if (in != null) {

in.close();

}

if (out != null) {

out.close();

}

}

}

}

Page 20: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Märgivoog ridahaaval

• Võtame ridahaaval – BufferedReader

• readline

– PrintWriter • print

• println

• printf

• "\r\n"

• "\r"

• "\n"

20

Page 21: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

21

import java.io.*;

public class RidadeKopeerimine {

public static void main(String[] args) throws IOException {

BufferedReader sisendvoog = null;

PrintWriter väljundvoog = null;

try {

sisendvoog = new BufferedReader(new

FileReader("minemine.txt"));

väljundvoog = new PrintWriter(new

FileWriter("koopia3.txt"));

String l;

while ((l = sisendvoog.readLine()) != null) {

väljundvoog.println(l);

}

} finally {

if (sisendvoog != null) {

sisendvoog.close();

}

if (väljundvoog != null) {

väljundvoog.close();

}

}

}

}

Page 22: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Baidivoog, märgivoog

• “Sillaks” – InputStreamReader

– OutputStreamWriter

22

Page 23: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Puhverdamine

• Puhver – info ajutiseks salvestamiseks mäluosa – ülesandeks on säilitada andmeid enne nende saatmist

sihtkohta (nt. kõvakettale)

• Andmete lugemise ja kirjutamise protseduurid on aeglased – vahel võib ühe infoühiku saatmine olla praktiliselt sama

“hinnaga” kui komplekti

• Klasse – BufferedInputStream

– BufferedOutputStream

– BufferedReader

– BufferedWriter

23

Page 24: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Puhvrist teele

• kui täis

• meetod flush() – uhtuma

• teatud meetoditega – println()

• Klass PrintWriter – realiseerib liidese Flushable

– loomisel saab märkida, kas iseuhtumine (autoflush) toimib

– meetodid println , printf ja format

24

Page 25: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Faili lõppu juurde

25

Page 26: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Sisendmärgivoogu saab realiseerida järgmise klassi alamklassidega

26 1. 2. 3. 4. 5.

0% 0% 0%0%0%

1.InputStream

2.OutputStream

3.Reader

4.Writer

5. muu

Page 27: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Väljundbaidivoogu saab realiseerida järgmise klassi alamklassidega

27 1. 2. 3. 4. 5.

0% 0% 0%0%0%

1.InputStream

2.OutputStream

3.Reader

4.Writer

5. muu

Page 28: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Baidivoo lõputunnuseks on

28 1. 2. 3.

0% 0%0%

1.0

2.-1

3.null

Page 29: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Katse faililõpust kaugemalt lugeda annab erindi

29

1. 2. 3. 4.

0% 0%0%0%

1.BadLocationException

2.BrokenBarrierException

3.EOFException

4. muu

Page 30: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Klass System

30

• System.in – vaikimisi klaviatuurilt

• System.out, System.err – vaikimisi ekraanile

Page 31: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Muudame väljundit

31

OutputStream output = new

FileOutputStream("c:\\temp\\systemout.txt");

PrintStream printOut = new PrintStream(output);

System.setOut(printOut);

Page 32: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Erinevaid võimalusi

• Olid näited failist faili – baithaaval – märkhaaval – ridahaaval

• Veel – klaviatuurilt – baidimassiivi – andmed – objektid

• liides Serializable

– veebist

32

Page 33: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

33

import java.io.*;

public class Klaviatuurilt {

public static void main (String[] args){

try {

BufferedReader br = new BufferedReader (new

InputStreamReader (System.in));

System.out.print ("Sisesta tekst: ");

String s = br.readLine();

System.out.println ("Sisestasid: " + s);

} catch (IOException e) {

System.out.println ("Viga: " + e);

}

}

}

Page 34: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Miks erinevat tüüpi andmeid?

• baidid

• Kas ei võiks ainult baithaaval?

– Kas vedaja võiks teada, mis liiki kaupa ta veab?

– Midagi lisaks kasulikku

34

Page 35: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Andmete kirjutamine faili

35

DataOutputStream dos =

new DataOutputStream (new FileOutputStream

("c:/temp/andmed.bin"));

dos.writeInt (25);

dos.writeDouble (5.22);

dos.close();

Page 36: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Andmed (teadaoleva struktuuriga) failist

36

DataInputStream dis = new DataInputStream (new

FileInputStream ("C:/temp/andmed.bin"));

int n = dis.readInt();

double d = dis.readDouble();

dis.close();

System.out.println ("Loeti: " + n + " ja " + d);

Page 37: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Objektid

• Olid võimalused algtüüpide jaoks

– int, double, boolean …

• Objektid?

37

ObjectOutputStream oos = new ObjectOutputStream(

new FileOutputStream ("o.dat"));

oos.writeObject(new int[] { 1, 2, 3, 4, 5 });

oos.close();

ObjectInputStream ois = new ObjectInputStream(

new FileInputStream("o.dat"));

int[] a = (int[])(ois.readObject());

ois.close();

Page 38: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Teeme ise klassi

38

public class SKlass {

String s;

int i;

double d;

public SKlass(String s, int i, double d) {

this.s = s;

this.i = i;

this.d = d;

}

public String toString() {

return "s=" + s + "; i=" + i + "; d=" + d;

}

}

Page 39: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Proovime isendi faili saata

39

SKlass sk = new SKlass("A", 1, 1.5);

ObjectOutputStream oos = new ObjectOutputStream(new

FileOutputStream ("o.dat"));

oos.writeObject(sk);

oos.close();

java.io.NotSerializableException:

Page 40: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Liides Serializable

• Java väljundvoogu saab kirjutada vaid neid objekte, mis realiseerivad liidest Serializable. Neid objekte nimetatakse serialiseeritavateks.

• Liides Serializable – ei ole meetodeid ega muutujaid – kasutatakse vaid märkimiseks, et vastavat objekti on võimalik

saata voogu.

• Massiiv on serialiseeritav, kui tema kõik liikmed realiseerivad

liidest Serializable.

• Algtüüpidele vastavad mähisklassid realiseerivad liidest Serializable. 40

Page 41: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Realiseerime liidese

41

public class SKlass implements Serializable {

String s;

int i;

double d;

public SKlass(String s, int i, double d) {

this.s = s;

this.i = i;

this.d = d;

}

public String toString() {

return "s=" + s + "; i=" + i + "; d=" + d;

}

}

Page 42: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Liides Serializable

• Kui klass realiseerib liidest Serializable, siis kõik tema alamklassid on serialiseeritavad.

• Kui klass realiseerib liidest Serializable, kuid sisaldab liikmeid, mis ei realiseeri liidest Serializable, siis isendit ei saa kirjutada väljundvoogu.

• Mitteserialiseeritavate liikmete ignoreerimiseks tuleb kasutada piiritlejat transient. – Milleks? – Kuidas?

42

public class Klass implements Serializable {

private int v1;

private static double v2;

private transient A v3 = new A();

}

Page 43: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Veebist

String aadress = "http://www.ut.ee";

InputStream sisse =

new URL(aadress).openConnection().getInputStream();

OutputStream valja = new FileOutputStream("uus.html");

43

Page 44: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Otsejuurdepääsuga failid

44

• Osuti (ingl. k. pointer) näitab, millises kohas ollakse.

Page 45: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Otsejuurdepääsuga failid

45

import java.io.*;

public class Otsejuurde {

public static void main(String[] args)

throws IOException {

RandomAccessFile raf = new

RandomAccessFile("raf.dat", "rw");

raf.writeDouble(3.1415);

raf.writeInt(25);

raf.writeDouble(2.7182);

raf.seek(0);

System.out.println(raf.readDouble() + " " +

raf.readInt());

raf.seek(8);

System.out.println(raf.readInt());

}

}

3.1415 25 25

Page 46: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Mis ilmub ekraanile?

46 1. 2. 3. 4. 5.

0% 0% 0%0%0%

OutputStream output = new

FileOutputStream("a.txt");

PrintStream printOut = new

PrintStream(output);

System.setOut(printOut);

System.out.println("A");

System.out.println("B");

1.A

2.B

3.A

B

4. mitte midagi

5. muu

Page 47: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Mis ilmub ekraanile?

47 1. 2. 3. 4. 5.

0% 0% 0%0%0%

PrintStream vana = System.out;

OutputStream output = new

FileOutputStream("a.txt");

PrintStream printOut = new

PrintStream(output);

System.setOut(printOut);

System.out.println("A");

System.setOut(vana);

System.out.println("B");

1.A

2.B

3.A

B

4. mitte midagi

5. muu

Page 48: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Andmestruktuur

• Teatud viisil organiseeritud andmete hulk

• Andmetele juurdepääs, andmetega opereerimine

48

Page 49: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Massiiv

• Samatüübilised elemendid kindlas järjekorras int[]

• Massiivi korral on kaks olulist piirangut:

– kui massiiv on juba loodud, siis tema suurust enam muuta ei saa;

– massiiv ise ei toeta elemendi lisamist ja kustutamist.

• Massiiv on staatiline andmestruktuur – mälukasutus on staatiline: mälu eraldatakse vaid korra

(maksimaalne elementide arv on fikseeritud); • eraldatud mälu maht on kindel suurus;

– sisemine struktuur on fikseeritud ja ei muutu töö käigus;

49

Page 50: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Dünaamilised andmestruktuurid

• Muutuva suurusega • Võimaldavad elemente lisada ja eemaldada • Võimaldavad teha päringuid suuruse (elementide arvu), konkreetse

elemendi sisalduvuse kohta

• Põhitüübid: – list (list) – magasin (stack) – järjekord (queue) – kuhi (heap) – puu (tree) – graaf (graph)

• …

50

Page 51: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Ise teha või olemasolevat kasutada?

• Esialgu teeme ise

• Pärast vaatleme olemasolevaid

51

Page 52: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

List • list, loend, nimistu(, ahel)

• Listis on andmeelemendid kindlas järjekorras

• Võimalikud tegevused

– elemendi võtmine – elemendi lisamine – elemendi eemaldamine – leida, mitu elementi on listis – teha kindlaks, kas antud element on listis – teha kindlaks, kas list on tühi – …

• Saab realiseerida mitmel viisil – massiivi abil – lihtahela abil

52

Page 53: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Ahela abil

• Enne aga liides ja abstraktne klass, mis sobiksid nii massiivi kui ka ahela abil realiseerimiseks.

53

Page 54: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Liides

54

public interface MyList {

public void add(Object o); //lisamine lõppu public void add(int index, Object o); //lisamine antud kohale public void clear(); //tühjendamine public boolean contains(Object o); //kas sisaldab antud elementi public Object get(int index); //võtmine antud kohalt (element jääb alles) public int indexOf(Object o); //esimene asukoht public boolean isEmpty(); //kas tühi public int lastIndexOf(Object o); // viimane asukoht public boolean remove(Object o); //eemaldamine esimeselt asukohalt public Object remove(int index); //eemaldamine antud kohalt public Object set(int index, Object o); //panek public int size(); //elementide arv }

Page 55: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Abstraktne klass

55

public abstract class MyAbstractList implements MyList {

protected int size;

protected MyAbstractList() { } //vaikekonstruktor

//konstruktor struktuuri täitmisega

protected MyAbstractList(Object[] objects) {

for (int i = 0; i < objects.length; i++){

this.add(objects[i]);

}

}

public void add(Object o) {

add(size, o);

}

public boolean isEmpty() {

return size == 0;

}

Page 56: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Abstraktne klass (järg)

56

public int size() {

return size;

}

public boolean remove(Object o) {

if (indexOf(o) >= 0) {

remove(indexOf(o));

return true;

}

else return false;

}

}

Page 57: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

List lihtahelana

• Ahelloend

• ingl. k. Linked list

• Lihtahel koosneb üksteisega seotud tippudest

• Iga tipu juurest on viit järgmisele tipule

57

private class Node {

Object element;

Node next;

public Node(Object o) {

element = o;

}

}

element next

element next

element next

element next: null

… …

first last

Page 58: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Tipu vahelepanek

58

element next

element next

element next

o next

element next: null

… …

first last

Page 59: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Tipu vahelepanek

59

element next

element next

element next

o next

element next: null

… …

first last

Page 60: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Tipu eemaldamine

60

element next

element next

element next

element next

element next: null

… …

first last

eemaldatav tipp

Page 61: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Tipu eemaldamine

61

element next

element next

element next

element next: null

… …

first last

Page 62: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Algus

62

public class MyLinkedList extends MyAbstractList {

private Node first, last;

public MyLinkedList() {}

public MyLinkedList(Object[] objects) {

super(objects);

}

public Object getFirst() {

if (size == 0) return null;

else return first.element;

}

public Object getLast() {

if (size == 0) return null;

else return last.element;

}

Object, mitte Node

Object, mitte Node

Page 63: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp algusesse

63

public void addFirst(Object o) {

}

element next

element next

element next: null

first last

Page 64: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp algusesse

64

public void addFirst(Object o) {

Node newNode = new Node(o);

}

element next

element next

element next

element next: null

first last

newNode

Page 65: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp algusesse

65

public void addFirst(Object o) {

Node newNode = new Node(o);

newNode.next = first;

}

element next

element next

element next

element next: null

first last

newNode

Page 66: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp algusesse

66

public void addFirst(Object o) {

Node newNode = new Node(o);

newNode.next = first;

first = newNode;

}

element next

element next

element next

element next: null

last first

newNode

Page 67: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp algusesse

67

public void addFirst(Object o) {

Node newNode = new Node(o);

newNode.next = first;

first = newNode;

size++;

if (last == null) last = first;

}

element next

element next

element next

element next: null

last first

newNode

Page 68: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp lõppu

68

public void addLast(Object o) {

if (last == null) {

first = last = new Node(o);

}

else {

last.next = new Node(o);

last = last.next;

}

size++;

}

Page 69: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp

69

public void add(int index, Object o) {

if (index == 0) addFirst(o);

else if (index >= size) addLast(o);

else {…

Page 70: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp

70

else {

Node current = first;

for (int i = 1; i < index; i++)

current = current.next;

Node temp = current.next;

current.next = new Node(o);

current.next.next = temp;

size++;

}

element next

element next

element next

element next: null

last first

add(2, o)

element next

current temp current

Page 71: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Uus tipp

71

public void add(int index, Object o) {

if (index == 0) addFirst(o);

else if (index >= size) addLast(o);

else {

Node current = first;

for (int i = 1; i < index; i++)

current = current.next;

Node temp = current.next;

current.next = new Node(o);

current.next.next = temp;

size++;

}

}

Page 72: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Tunnikontroll

72

Page 73: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Loengu tempo oli 1. paariline

73 1. 2. 3.

0% 0%0%

1. liiga kiire

2. paras

3. liiga aeglane

Page 74: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Materjal tundus 1. paariline

74 1. 2. 3.

0% 0%0%

1. liiga lihtne

2. parajalt jõukohane

3. liiga keeruline

Page 75: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Loengu tempo oli 2. paariline

75 1. 2. 3.

0% 0%0%

1. liiga kiire

2. paras

3. liiga aeglane

Page 76: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Materjal tundus 2. paariline

76 1. 2. 3.

0% 0%0%

1. liiga lihtne

2. parajalt jõukohane

3. liiga keeruline

Page 77: PowerPointi esitluskodu.ut.ee/~eno/oop13/oop13loeng11.pdf · 2013. 4. 23. · Title: PowerPointi esitlus Author: eno Created Date: 4/23/2013 10:34:39 AM

Suur tänu osalemast! Kohtumiseni!

77