Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe
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