Programowanie w Javie 1
Transkrypt
Programowanie w Javie 1
Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów — elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, w tym wypadku nazywane: metodami). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów. dr Robert Kowalczyk, PWSZ Płock 2 Główne cechy programowania obiektowego • • • • Abstrakcja Enkapsulacja Dziedziczenie Polimorfizm dr Robert Kowalczyk, PWSZ Płock 3 Abstrakcja Każdy obiekt w programie (definiowany za pomocą abstrakcyjnego typu jakim jest klasa) służy jako model abstrakcyjnego "wykonawcy", który może wykonywać pracę, opisywać i zmieniać swój stan oraz komunikować się z innymi obiektami w systemie bez ujawniania, w jaki sposób zaimplementowane są jego cechy. dr Robert Kowalczyk, PWSZ Płock 4 Klasa Punkt2D class Punkt2D { int x,y; Punkt2D(int x, int y) { this.x = x; this.y = y; } } dr Robert Kowalczyk, PWSZ Płock 5 Ćwiczenie 1 1. Dopisz metody, które będą pobierać współrzędne x i y punktu. 2. Dopisz metody, które ustawią współrzędne x i y punktu na określoną wartość. 3. Dopisz metodę liczbaWspolrzednych(), która pobierze liczbę współrzędnych punktu. 4. Przedefiniuj metodę toString() tak aby wypisywała reprezentację punktu. dr Robert Kowalczyk, PWSZ Płock 6 Enkapsulacja (hermetyzacja) Enkapsulacja (hermetyzacja) to ukrywanie implementacji. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko własne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój interfejs, który określa dopuszczalne metody współpracy. W Javie klasycznie mamy cztery modyfikatory dostępu: • private - do danych można się dostać tylko z wnętrza danej klasy • public – dane są ogólnie dostępne • protected – do danych można się dostać z wnętrza danej klasy, klas pochodnych i z klas tego samego pakietu • package – do danych można się dostać w obrębie tego samego pakietu dr Robert Kowalczyk, PWSZ Płock 7 Ćwiczenie 2 1. Przerób klasę Punkt2D zachowując koncepcję enkapsulacji pól i metod. 2. Utwórz w klasie Punkt2D pole statyczne liczbaPunktow które będzie zliczać liczbę utworzonych punktów w programie. 3. Utwórz w klasie Punkt2D metodę odlegloscOdZera(), która wyznaczy odległość punktu od zera. dr Robert Kowalczyk, PWSZ Płock 8 Dziedziczenie Dziedziczeniem (z ang. inheritance) w programowaniu obiektowym nazywamy mechanizm współdzielenia funkcjonalności pomiędzy klasami. Klasa może dziedziczyć po innej klasie, co oznacza, że oprócz swoich własnych atrybutów oraz zachowań, uzyskuje także te pochodzące z klasy, z której dziedziczy. Klasa dziedzicząca jest nazywana klasą pochodną lub potomną (z ang. subclass), klasa, z której następuje dziedziczenie jest nazywana klasą bazową (z ang. superclass). dr Robert Kowalczyk, PWSZ Płock 9 Klasa Punkt3D (klasa rozszerzająca Punkt2D) public class Punkt3D extends Punkt2D{ private int z; public Punkt3D(int x, int y, int z) { super(x,y); this.z=z; } public int getZ() { return z; } public void setZ(int z) { this.z = z; } dr Robert Kowalczyk, PWSZ Płock 10 Ćwiczenie 3 1. Przerób w klasie Punkt3D metodę liczbaWspolrzednych() tak aby działała prawidłowo. 2. Przerób w klasie Punkt3D metodę toString() aby prawidłowo zwracała reprezentację obiektu. 3. Przerób w klasie Punkt3D metodę odlegloscOdZera(), która poprawnie wyznaczy odległość punktu od zera. dr Robert Kowalczyk, PWSZ Płock 11 Polimorfizm Polimorfizm w programowaniu obiektowym to cecha dzięki której jedna metoda (o tej samej nazwie) może być stosowana do wykonania różnych zadań w zależności od tego na rzecz którego obiektu została wywołana. dr Robert Kowalczyk, PWSZ Płock 12 Ćwiczenie 4 Tworzymy tablicę 10 elementową do przechowywania obiektów typu Punkt2D. Punkt2D[] tabPunktow = new Punkt2D[10]; W pętli dla i=1..10 losujemy liczbę p z przedziału [0,1]. Jeśli liczba p jest mniejsza od ½ to tworzymy obiekt typu Punkt2D(x,y), gdzie x – pierwsza cyfra po przecinku liczby p, y – druga cyfra po przecinku liczby p, jeśli z kolei liczba p jest większa równa od ½ to wówczas tworzymy obiekt typu Punkt3D(x,y,z), gdzie x – pierwsza cyfra po przecinku liczby p, y – druga cyfra po przecinku liczby p, z – trzecia cyfra po przecinku liczby p. Wyświetl w pętli od 1..10 informację o liczbie współrzędnych każdego z utworzonych obiektów. Zauważ, że nie wiedząc czy na przykład pod tabPunktów[4] znajduje się obiekt typu Punkt2D czy Punkt3D program poprawnie wyświetla 2 lub 3 (to jest zaleta polimorfizmu właśnie.) dr Robert Kowalczyk, PWSZ Płock 13 Praca domowa Dopisz w klasie Punkt2D metodę public double odl(Punkt a){ … } która obliczy odległość dwóch punktów: Punkt2D p1 = new Point2D(2,1); Punkt2D p2 = new Point2D(1,2); p1.odl(p2); Napisz teraz metodę boolean czyTrojkat(p1,p2,p3) która sprawdzi, czy punkty p1, p2 i p3 są wierzchołkami trójkąta. dr Robert Kowalczyk, PWSZ Płock 14