24.01.2014 Views

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Programowanie</strong> <strong>obiektowe</strong><br />

Plan wykładu<br />

●<br />

Wprowadzenie do Javy<br />

●<br />

Model obiektowy<br />

●<br />

Wyjątki<br />

●<br />

Pakiety<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 1


Historia<br />

●<br />

●<br />

●<br />

Projekt OAK<br />

Sterowanie urządzeniami domowymi<br />

Dodanie ''życia'' do internetu<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 2


Duke<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 3


Środowisko<br />

plik.java<br />

javac plik.java<br />

plik.class<br />

Plik<br />

skompilowany<br />

Biblioteka<br />

Maszyna<br />

wirtualna<br />

java plik<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 4


Przykład programu<br />

import java.io.*;<br />

class Osoba {<br />

private String Nazwisko;<br />

private int wzrost;<br />

}<br />

Osoba (String Nazwisko, int wzrost) { ... }<br />

public void drukuj() { ... }<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 5


Implementacja konstruktora<br />

Osoba (String Nazwisko, int wzrost) {<br />

this.Nazwisko = Nazwisko;<br />

this.wzrost = wzrost;<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 6


Implementacja metody<br />

public void drukuj() {<br />

}<br />

System.out.println("Nazwisko: " +<br />

this.Nazwisko);<br />

System.out.println("Wzrost: " + this.wzrost);<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 7


Deklaracja podklasy<br />

public class Student extends Osoba {<br />

String kierunek;<br />

Student (String Nazwisko, int wzrost,<br />

String kierunek) { ... }<br />

}<br />

public void drukuj() { ... }<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 8


Deklaracja konstruktora<br />

Student (String Nazwisko, int wzrost,<br />

String kierunek) {<br />

super(Nazwisko, wzrost);<br />

this.kierunek = kierunek;<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 9


Deklaracja metody<br />

public void drukuj() {<br />

super.drukuj();<br />

System.out.println("Kierunek: " +<br />

this.kierunek);<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 10


Początek programu<br />

public static void main(String[] args) {<br />

Osoba obj =<br />

new Student("Oskar Miś", 35, "informatyka");<br />

obj.drukuj();<br />

}<br />

} // koniec klasy Student<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 11


Schemat programu<br />

Student.java:<br />

● class Osoba { ... }<br />

● public class Student extends Osoba {<br />

public static main () { ... }<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 12


Kompilacja<br />

●<br />

javac Student.java<br />

– Osoba.class<br />

– Student.class<br />

●<br />

●<br />

java Student<br />

java -cp . Student<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 13


Model obiektowy Javy<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

Klasy i obiekty<br />

Klasa Object<br />

Dziedziczenie pojedyncze<br />

Wszystkie metody są wirtualne<br />

Interfejsy<br />

Przestrzenie nazw<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 14


Wszystkie obiekty dziedziczą po<br />

klasie Object<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 15


Klasa Object<br />

●<br />

●<br />

●<br />

●<br />

Object Clone()<br />

bool equals(Object obj)<br />

String toString()<br />

Class getClass()<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 16


Dynamiczna kontrola typów<br />

if (obj instanceof Klasa)<br />

var = (Klasa)obj;<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 17


Typy proste i złożone<br />

●<br />

●<br />

Typy proste: int, float, boolean<br />

Typy złożone: Integer, Float, Boolean<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 18


Ciekawostka nazewnicza<br />

●<br />

●<br />

C#: Int32.MaxValue<br />

Java: Integer.MAX_VALUE<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 19


Klasy<br />

●<br />

Klasy to też obiekty, należące do klasy Class<br />

– String getName()<br />

– Constructor[] getConstructors()<br />

– Field[] getFields()<br />

– ...<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 20


Wyjątki<br />

Reakcja na błędy<br />

●<br />

●<br />

●<br />

Błąd dzielenia przez zero<br />

Błąd operacji I/O<br />

Błąd przepełnienia<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 21


Na przykład w Turbo Pascalu<br />

write(fh, ''abcdXYZ'');<br />

if IOResult 0 then<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 22


Inne systemy<br />

int podziel(int arg1, int arg2, ref int wynik);<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 23


Wyjątki<br />

●<br />

●<br />

Wyjątki to są obiekty klasy Exception;<br />

Z wyjątkami skojarzony jest mechanizm<br />

zgłaszania i obsługi wyjątków<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 24


Przykład<br />

public int podziel(int dzielna, int dzielnik) {<br />

if (dzielnik == 0)<br />

throw new Exception();<br />

}<br />

return dzielna/dzielnik;<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 25


Mechanizm przekazywania wyjątku<br />

throw new Exception()<br />

Stos<br />

wywołań<br />

try { ... }<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 26


Obsługa wyjątku<br />

try {<br />

// krytyczna instrukcja<br />

catch (Exception e) { ... }<br />

finally { ... }<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 27


Implementacja stosu<br />

●<br />

●<br />

Klasa Stos implementowana jako tablica o<br />

stałym rozmiarze<br />

Metody<br />

– void push(int elem)<br />

– int pop()<br />

●<br />

Spodziewane błędy<br />

– StackOverflowException<br />

– EmptyStackException<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 28


Deklaracja wyjątku przepełnienia<br />

class StackOverflowException extends Exception<br />

{<br />

StackOverflowException() {<br />

super();<br />

}<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 29


Deklaracja wyjątku pustego stosu<br />

class EmptyStackException extends Exception {<br />

EmptyStackException() {<br />

super();<br />

}<br />

public void info() {<br />

printStackTrace();<br />

}<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 30


Deklaracja klasy Stos<br />

class Stos {<br />

private int stos[];<br />

private int top;<br />

Stos(int rozm) {<br />

stos = new int[rozm];<br />

this.top = 0;<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 31


Implementacja metod<br />

public void push(int elem)<br />

throws StackOverflowException<br />

{<br />

if (top == stos.length)<br />

throw new StackOverflowException();<br />

stos[top] = elem;<br />

top++;<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 32


Implementacja, cd<br />

public int pop() throws EmptyStackException<br />

{<br />

if (top == 0)<br />

throw new EmptyStackException();<br />

top--;<br />

return stos[top];<br />

}<br />

} // class Stos<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 33


Użycie<br />

Stos s = new Stos(2);<br />

try { ... }<br />

catch (EmptyStackException e) { ... }<br />

catch (StackOverflowException e) { ... }<br />

finally {<br />

System.out.println("Zawsze się wykona");<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 34


Obsługa wyjątku<br />

try {<br />

s.push(4);<br />

s.push(2);<br />

s.push(7);<br />

System.out.println(s.pop());<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 35


Obsługa<br />

catch (EmptyStackException e) {<br />

}<br />

e.info();<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 36


Obsługa wyjątku<br />

catch (StackOverflowException e) {<br />

e.printStackTrace();<br />

throw e;<br />

}<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 37


finally<br />

finally {<br />

}<br />

System.out.println("Zawsze się wykona");<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 38


Przestrzenie nazw<br />

test.java:<br />

● public class test { ... }<br />

● class B { ... }<br />

test.class<br />

B.class<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 39


Pakiet<br />

package wyklad.java;<br />

public class test { ... }<br />

●<br />

●<br />

Plik .class powinien być w katalogu<br />

wyklad/java/<br />

wyklad\java\<br />

Odwołanie: wyklad.java.test<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 40


KONIEC<br />

<strong>Programowanie</strong> <strong>obiektowe</strong> 41

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!