Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50
Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami domowymi Dodanie życia do internetu Marcin Młotkowski Programowanie obiektowe 3 / 50
Logo Marcin Młotkowski Programowanie obiektowe 4 / 50
Mały przykład import java.io.*; class Osoba private String Nazwisko; private int wzrost; Osoba (String Nazwisko, int wzrost)... public void drukuj()... Marcin Młotkowski Programowanie obiektowe 5 / 50
Implementacja konstruktora class Osoba Osoba (String Nazwisko, int wzrost) this.nazwisko = Nazwisko; this.wzrost = wzrost; Marcin Młotkowski Programowanie obiektowe 6 / 50
Implementacja metody class Osoba public void drukuj() System.out.println("Nazwisko: " + this.nazwisko); System.out.println("Wzrost: " + this.wzrost); Marcin Młotkowski Programowanie obiektowe 7 / 50
Deklaracja podklasy public class Student extends Osoba String kierunek; Student (String Nazwisko, int wzrost, String kierunek)... public void drukuj()... Marcin Młotkowski Programowanie obiektowe 8 / 50
Implementacja konstruktora Student (String Nazwisko, int wzrost, String kierunek) super(nazwisko, wzrost); this.kierunek = kierunek; Marcin Młotkowski Programowanie obiektowe 9 / 50
Implementacja metody public void drukuj() super.drukuj(); System.out.println("Kierunek: " + this.kierunek); Marcin Młotkowski Programowanie obiektowe 10 / 50
Początek programu public static void main(string [ ] args) Osoba obj = new Student("Kubuś Puchatek", 35, "inf"); obj.drukuj(); // koniec klasy Student Marcin Młotkowski Programowanie obiektowe 11 / 50
Schemat programu Student.java class Osoba... public class Student extends Osoba public static main ()... Marcin Młotkowski Programowanie obiektowe 12 / 50
Schemat programu Student.java class Osoba... public class Student extends Osoba public static main ()... Kompilacja i uruchomienie $ javac Student.java $ java Student $ java -cp. Student Marcin Młotkowski Programowanie obiektowe 12 / 50
Schemat Student.java Osoba.class javac Student.java class Osoba... Student.class class Student extends Osoba... java Student Maszyna wirtualna Marcin Młotkowski Programowanie obiektowe 13 / 50
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 14 / 50
Javy Elementy języka Klasy i obiekty Klasa Object, wszystkie klasy po niej dziedziczą Dziedziczenie pojedyncze Wszystkie metody są wirtualne Interfejsy Klasy i interfejsy generyczne Marcin Młotkowski Programowanie obiektowe 15 / 50
Klasa Object class Object Object Clone() bool equals(object obj) String tostring() Class getclass() Marcin Młotkowski Programowanie obiektowe 16 / 50
Dynamiczna kontrola typów if (obj instanceof Klasa) var = (Klasa)obj; Marcin Młotkowski Programowanie obiektowe 17 / 50
Typy proste i złożone Typy proste: int, float, boolean Typy referencyjne: Integer, Float, Boolean, interfejsy, tablice Marcin Młotkowski Programowanie obiektowe 18 / 50
Typy proste i złożone Typy proste: int, float, boolean Typy referencyjne: Integer, Float, Boolean, interfejsy, tablice Autoboxing: automatyczna konwersja między typami prostymi i referencyjnymi. Marcin Młotkowski Programowanie obiektowe 18 / 50
Różnice między językami C Int32.MaxValue Java Integer.MAX_VALUE Marcin Młotkowski Programowanie obiektowe 19 / 50
Interfejsy public class Application implements Runnable... Marcin Młotkowski Programowanie obiektowe 20 / 50
Programowanie rodzajowe public interface List<E> void add(e x); Iterator<E> iterator(); Marcin Młotkowski Programowanie obiektowe 21 / 50
Klasy Klasy to też obiekty, należące do klasy Class class Class String getname() Constructor[] getconstructors() Field[] getfields() Marcin Młotkowski Programowanie obiektowe 22 / 50
Refleksje (introspekcje) Mechanizm umożliwiający zbadanie obiektu: jego klasy, metod i pól. Marcin Młotkowski Programowanie obiektowe 23 / 50
Refleksje (introspekcje) Mechanizm umożliwiający zbadanie obiektu: jego klasy, metod i pól. Class cl = obj.getclass() Marcin Młotkowski Programowanie obiektowe 23 / 50
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 24 / 50
Motywacje Reakcja na błędy Błąd dzielenia przez zero Błąd operacji I/O Błąd przepełnienia Marcin Młotkowski Programowanie obiektowe 25 / 50
Obsługa wyjątków Turbo Pascalu write(fh, "abcdxyz"); if IOResult <> 0 then... Marcin Młotkowski Programowanie obiektowe 26 / 50
Obsługa wyjątków Turbo Pascalu write(fh, "abcdxyz"); if IOResult <> 0 then... int podziel(int arg1, int arg2, ref int wynik); Marcin Młotkowski Programowanie obiektowe 26 / 50
to są obiekty klasy Exception; z wyjątkami skojarzony jest mechanizm zgłaszania i obsługi wyjątków. Marcin Młotkowski Programowanie obiektowe 27 / 50
Przykład public int podziel(int dzielna, int dzielnik) if (dzielnik == 0) throw new Exception(); return dzielna/dzielnik; Marcin Młotkowski Programowanie obiektowe 28 / 50
throw return return try-catch return return System operacyjny Marcin Młotkowski Programowanie obiektowe 29 / 50
Instrukcja try try... // krytyczna instrukcja catch (Exception e)... finally... Marcin Młotkowski Programowanie obiektowe 30 / 50
Większy przykład Klasa implementująca stos Implementowane metody void push(int elem) może zgłosić wyjątek StackOverflowException int pop() może zgłosić wyjątek EmptyStackException Marcin Młotkowski Programowanie obiektowe 31 / 50
Deklaracja wyjątku przepełnienia class StackOverflowException extends Exception StackOverflowException() super(); Marcin Młotkowski Programowanie obiektowe 32 / 50
Wyjątek pustego stosu class EmptyStackException extends Exception EmptyStackException() super(); public void info() printstacktrace(); Marcin Młotkowski Programowanie obiektowe 33 / 50
Implementacja Stos class Stos private int stos[]; private int top; Stos(int rozm) stos = new int [rozm]; this.top = 0; Marcin Młotkowski Programowanie obiektowe 34 / 50
Implementacja metod public void push(int elem) throws StackOverflowException if (top == stos.length) throw new StackOverflowException(); stos[top] = elem; top++; Marcin Młotkowski Programowanie obiektowe 35 / 50
Implementacja, cd public int pop() throws EmptyStackException if (top == 0) throw new EmptyStackException(); top- -; return stos[top]; // class Stos Marcin Młotkowski Programowanie obiektowe 36 / 50
Jak korzystać Stos s = new Stos(2); try... catch (EmptyStackException e)... catch (StackOverflowException e)... finally... Marcin Młotkowski Programowanie obiektowe 37 / 50
Jak korzystać Stos s = new Stos(2); try s.push(4); s.push(2); s.push(7); System.out.println(s.pop()); catch (EmptyStackException e)... catch (StackOverflowException e)... finally... Marcin Młotkowski Programowanie obiektowe 37 / 50
Jak korzystać Stos s = new Stos(2); try... catch (EmptyStackException e) e.info(); catch (StackOverflowException e)... finally... Marcin Młotkowski Programowanie obiektowe 37 / 50
Jak korzystać Stos s = new Stos(2); try... catch (EmptyStackException e)... catch (StackOverflowException e) e.printstacktrace(); throw e; finally... Marcin Młotkowski Programowanie obiektowe 37 / 50
Jak korzystać Stos s = new Stos(2); try... catch (EmptyStackException e)... catch (StackOverflowException e)... finally System.out.println("Zawsze się wykona"); Marcin Młotkowski Programowanie obiektowe 37 / 50
Deklaracja wyjątków jest częścią specyfikacji! Specyfkacja metody public void push(int elem) throws StackOverflowException Marcin Młotkowski Programowanie obiektowe 38 / 50
Deklaracja wyjątków jest częścią specyfikacji! Specyfkacja metody public void push(int elem) throws StackOverflowException Interfejsy interface Serializable private void writeobject(java.io.objectoutputstream out) throws IOException private void readobject(java.io.objectinputstream in) throws IOException, ClassNotFoundException; Marcin Młotkowski Programowanie obiektowe 38 / 50
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 39 / 50
Przykładowy program test.java public class test... class B... Po kompilacji powstają dwa pliki: test.class B.class Marcin Młotkowski Programowanie obiektowe 40 / 50
Deklaracja pakietu pakiet.java package wyklad.java; public class test... Pakiet powinien znajdować się w katalogu wyklad/java/ wyklad\java\ Odwołanie do klasy w module wyklad.java.test Marcin Młotkowski Programowanie obiektowe 41 / 50
Widzialność pól i metod public protected (domyślny): widoczny w ramach pakietu private Marcin Młotkowski Programowanie obiektowe 42 / 50
Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 43 / 50
Klasy i metody powinne być otwarte na rozbudowę, ale zamknięte dla modyfikacji. Marcin Młotkowski Programowanie obiektowe 44 / 50
Przykład złamania reguły Figura narysuj() Punkt narysuj() Kwadrat narysuj() Marcin Młotkowski Programowanie obiektowe 45 / 50
Rysowanie obrazków Figura[ ] obrazek; for(figura f: obrazek) f.narysuj() Marcin Młotkowski Programowanie obiektowe 46 / 50
Komplikacja Najpierw należy narysować obiekty klasy Punkt, potem Prostokąt. Marcin Młotkowski Programowanie obiektowe 47 / 50
Definicja porządku public interface Comparable<T> int compareto(t o); Marcin Młotkowski Programowanie obiektowe 48 / 50
Implementacja interfejsu public class Figura implements Comparable<T> int compareto(t o)... public class Point extends Figura int compareto(t o) if (o instanceof Prostokąt) return 1; return -1; Marcin Młotkowski Programowanie obiektowe 49 / 50
Dalsza komplikacja Dodajemy klasę Okrąg Marcin Młotkowski Programowanie obiektowe 50 / 50
Dalsza komplikacja Dodajemy klasę Okrąg Konsekwencje Musimy zmienić implementację compareto() we wszystkich już zaimplementowanych klasach. Marcin Młotkowski Programowanie obiektowe 50 / 50