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