39
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tomasz Głowacki Programowanie obiektowe i język Java Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii informatycznych i ich zastosowań w przemyśle" POKL.04.01.02-00-189/10

Programowanie obiektowe i język Java

Embed Size (px)

Citation preview

Page 1: Programowanie obiektowe i język Java

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Tomasz Głowacki

Programowanie obiektowe i język Java

Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na

Politechnice Poznańskiej w zakresie technologii informatycznych i ich

zastosowań w przemyśle" POKL.04.01.02-00-189/10

Page 2: Programowanie obiektowe i język Java

Programowanie strukturalne

Definiuje się dane oraz procedury (funkcje) operujące na tych danych

Dane i procedury (funkcje) nie są w żaden sposób ze sobą związane

2Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 3: Programowanie obiektowe i język Java

3Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Programowanie obiektowe

Definiuje się obiekty które łączą stan (pola) z zachowaniem (metody)

Program jest rozumiany jako zbiór obiektów, które komunikują się ze sobą w celu wykonania zadania

Page 4: Programowanie obiektowe i język Java

4Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Java jako język obiektowy

Prawie wszystkie byty w języku Java (z wyłączeniem typów prostych) to obiekty

Istnieją obiektowe „opakowania” dla typów prostych

Dostęp do obiektów istnieje przez referencje

Page 5: Programowanie obiektowe i język Java

Typy proste i ich opakowania

Typ prosty rozmiar „opakowanie” obiektowe

int 32 bity Integer

char 16 bitów Character

long 64 bity Long

short 16 bitów Short

float 32 bity Float

double 64 bity Double

byte 8 bitów Byte

boolean 8 bitów Boolean

5Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 6: Programowanie obiektowe i język Java

Operatory w języku Java

Matematyczne (+) (-) (/) (*) (%)

Porównania (==) (<=) (>=) (>) (<) (!=)

Auto inkrementacja (++) i dekrementacja (--)

Operatory logiczne

lub (||)

i (&&)

Zaprzeczenie (!)

Operatory bitowe

lub (|)

i (&)

albo (^)

6Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 7: Programowanie obiektowe i język Java

Przykrycie zmiennych

{

int zmienna = 5;

{

int zmienna = 10

}

}

Java nie pozwala na przykrywanie zmiennych. Zasięg zmiennej jest ograniczony nawiasami klarowymi.

7Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 8: Programowanie obiektowe i język Java

Podstawowe instrukcje sterujące w języku Java

if (wyrażenie) then instrukcja; else instrukcja;

if (wyrażenie) then instrukcja;

while (wyrażenie) isntrukcja;

for (inicjalizacja, wyrażenie, krok) instrukcja;

8Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 9: Programowanie obiektowe i język Java

Klasy i obiekty

Klasa definiuje typ - opisuje zachowanie się obiektów należących do tej klasy, zawiera:

Metody

Pola

Obiekt to konkretne wystąpienie danej klasy

9Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 10: Programowanie obiektowe i język Java

Klasy i obiekty w Javie

Definicja klasy odbywa się w następujący sposób

class NazwaKlasy {/*definicja pól i metod*/}

Tworzenie obiektu danej klasy

NazwaKlasy obiekt = new NazwaKlasy();

Dostęp do składowych obiektu odbywa się poprzez kropkę

obiekt.metoda()

obiekt.pole

10Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 11: Programowanie obiektowe i język Java

Słowo kluczowe „static”

Poprzedzenie metody lub pola danej klasy słowem kluczowym static wskazuje, że dana metoda (pole) odnosi się do KLASY a nie do OBIEKTU

Metoda statyczna nie jest związana z żadnym konkretnym obiektem klasy (np. metoda main)

Pole statyczne nie jest związane z żadnym konkretym obiektem klasy:

Może być wykorzystywane przed utworzeniem obiektów klasy

Może być współdzielone przez różne obiekty

11Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 12: Programowanie obiektowe i język Java

Zadanie 1

Utwórz program w języku Java wyświetlający 10 razy napis „Hello world”

12Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 13: Programowanie obiektowe i język Java

Przeciążanie funkcji

W ramach jednej klasy mogą istnieć metody o tej samej nazwie, jeśli różnią się parametrami wejściowymi

Decyzja dotycząca użycia odpowiedniej funkcji jest podejmowana na podstawie listy parametrów

void f1() {}

void f1(String s) {}

void f1(int i) {}

13Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 14: Programowanie obiektowe i język Java

Słowo kluczowe this

Może zostać wykorzystane tylko w niestatycznych metodach klasy

Oznacza referencję do obiektu, na którym wykonywana jet moetoda (referencja do bieżącego obiektu)

int a;

void mnozenie(int a)

{

this.a *= a;

}

14Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 15: Programowanie obiektowe i język Java

Konstruktory (1)

Konstruktor to metoda służąca do inicjalizacji obiektów danej klasy

Nazwa konstruktora jest taka sama jak nazwa klasy i jest wykonywany automatycznie, gdy tworzony jest dany obiekt

Automatycznie dodawany jest do każdej klasy bezparametrowy konstruktor domyślny

class Prostokat{

Prostokat() {}

}

15Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 16: Programowanie obiektowe i język Java

Konstruktory (2)

Istnieje możliwość wywołania konstruktora z innego konstruktora

class Prostokat{

int a,b;

Prostokat(int a) {this(a,a);}

Prostokat(int a,b) {this.a =a; this.b =b;}

}

16Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 17: Programowanie obiektowe i język Java

Zarządzanie pamięcią – garbage collector

Automatyczny mechanizm zarządzania pamięcią wykorzystywany w języku Java

Usuwanie obiektów nie należy do obowiązków programisty, GC sam podejmuje decyzję kiedy należy usunąć dany obiekt

17Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 18: Programowanie obiektowe i język Java

Paradygmaty programowania obiektowego

Dziedziczenie

Hermetyczność

Polimorfizm

18Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 19: Programowanie obiektowe i język Java

Poziomy dostępu do pól i obiektów

Java posiada 4 poziomy dostępu do pól i obiektów:

Pakietowy (domyślny)

Public

Private

Protected

19Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 20: Programowanie obiektowe i język Java

Enkapsulacja zmiennych

Ukrywanie metod i atrybutów danego obiektu dla obiektów zewnętrznych

Obiekt nie może dowolnie zmieniać stanu innego obiektu

private int i;

void setI(int i) {

this.i = i;

}

int getI() {

return i;

}

20Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 21: Programowanie obiektowe i język Java

Dziedziczenie w języku Java

Każda klasa potomna posiada tylko jedną klasę z której dziedziczy; Java nieumożliwia wielodziedziczenia

class kwadrat extends figura {}

Klasa potomna nie ma dostępu do składowych prywatnych swojej nadklasy

Możliwa jest wielopoziomowa hierarchia dziedziczenia –najpierw wywołują się konstruktory klasy nadrzędnej a następnie klasy podrzędnej

Jeśli metoda klasy podrzędnej ma taką samą nazwę i listę parametrów jak metoda klasy nadrzędnej następuje przesłonięcie metody klasy nadrzędnej

Nie można dziedziczyć po klasach zdefiniowanych ze słowem kluczowym final

21Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 22: Programowanie obiektowe i język Java

Interfejsy

class A {}

class B extends A {}

class C extends A implements X {}

interface X {void metoda();}

22Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 23: Programowanie obiektowe i język Java

Polimorfizm

Polimorfizm to możliwość dynamicznego wiązania nazwy metody z jej konkretną implementacją w różnych klasach pozostających w relacji dziedziczenia

class A { public void info()

{System.out.println(„metoda klasy A");}}

class B extends A{ public void info() {

System.out.println(„metoda klasy B");}}

A obiekt = new A();

obiekt.info();

obiekt = new B();

obiekt.info();

23Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 24: Programowanie obiektowe i język Java

Obsługa wyjątków

Wyjątki to sytuacje nietypowe podczas wykonywania programu, takie jak:

Brak pamięci

brak praw dostępu

Niepoprawny format danych wejściowych

Java umożliwia obsługę sytuacji wyjątkowych poprzez wykorzystanie bloku try.. catch

try {

// instrukcje programu mogące zgłaszać wyjątki

}

catch(arg1 e1) { /*obsługa wyjątku e1 typu arg1*/}

catch(arg2 e2) {/*obsługa wyjątku e2 typu arg2*/ }

finally { /*blok finally zawsze się wykona*/ }

24Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 25: Programowanie obiektowe i język Java

Debugowanie

Proces usuwania błędów z oprogramowania, przeprowadzany zwykle przy użyciu programu nazywanego debuggerem

Proces debuggowania można podzielić na następujące etapy:

Reprodukcja błędu

Wyizolowanie źródła błędu

Identyfikacja przyczyny (debugger)

Usunięcie błędu

25Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 26: Programowanie obiektowe i język Java

Zadanie

Napisać program, który do każdego z 10 elementów tablicy przypisuje indeks tego elementu (pętla for) a następnie każdemu elementowi przyporządkowuje sumę poprzednich elementów (pętla for)

Należy prześledzić wartości w tablicy podczas wykonywania programu wykorzystując debugger Eclipse

26Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 27: Programowanie obiektowe i język Java

Język UML

Zunifikowany język modelowania wykorzystywany do modelowania rzeczywistości

UML z powodzeniem wykorzystuje się do modelowania

Systemów informatycznych

Procesów biznesowych

UML jest bardzo rozbudowanym standardem (posiada 13 różnych rodzajów diagramów), przykładowe rodzaje diagramów:

Diagram klas

Diagram przypadków użycia

Diagram sekwencji

27Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 28: Programowanie obiektowe i język Java

Diagram klas

Diagram klas jest statycznym diagramem UML, który opisuje klasy systemu, metody, związki między klasami oraz liczności tych związków.

Wyróżnia się następujące rodzaje związków między klasami: Dziedziczenie: związek określający relację generalizacji-specjalizacji,

element modelu zwany specjalizacją jest rodzajem drugiego elementu modelu, zwanego generalizacją (np. Książka-Słownik)

Asocjacja: oznacza, że element modelu jest powiązany w pewien sposób w ramach dziedziny z innym elementem(np. Firma-Pracownik)

Agregracja: związek ten oznacza, że element modelu składa się z innych elementów tego modelu(np. Biblioteka-Książka)

Kompozycja: Związek ten oznacza, że element modelu składa się z innych elementów tego modelu, przy czym istnieje silne powiązanie między cyklem życia tego kontenera i elementów z których się składa; jeśli kontener zostanie zniszczony, elementy które on zawiera również powinny zostać zniszczone

Realizacja: oznacza, że jeden element modelu implementuje zachowanie drugiego elementu modelu

28Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 29: Programowanie obiektowe i język Java

Zadanie 2 – projektowanie obiektowe (OOD)

Zaprojektować program, który przechowuje listę klientów firmy: osób fizycznych jak i klientów instytucjonalnych. Istnieje możliwość wyszukania klienta po następujących cechach:

Imię, nazwisko, NIP lub PESEL dla osoby fizycznej

Nazwa firmy, REGON, NIP dla firmy

Istnieje możliwość wyświetlenia danych wyszukanego klienta (wraz z listą jego samochodów). Każdy samochód posiada dane o marce, roczniku, cenie, kolorze oraz informacje o płatnościach: rodzaj płatności (karta, gotówka, raty) oraz dacie zakupu. W przypadku rat przechowywane są informacje dotyczące terminu jej płatności, informacji o statusie raty (zapłacona, zapłacona z opóźnieniem, opóźniona, do zapłaty). W przypadku, gdy rodzaj płatności za samochód to „raty” istnieje możliwość przejrzenia listy wszystkich rat za samochód.

Dla każdego zakupionego samochodu zdefiniowana jest waluta płatności. W przypadku rat wszystkie raty za jeden samochód są opłacane w tej samej walucie. System utrzymuje tabelę kursu walut (dolar, euro, funt). Użytkownik może wybrać, w jakiej walucie są wyświetlane ceny samochodów. Po zmianie waluty ceny są przeliczane w zależności od kursu waluty na dzień zakupu samochodu. Dla danych o statusie „do zapłaty” (czyli przyszłych rat), w przypadku przeliczania płatności zostaje wzięte pod uwagę ostatni kurs danej waluty.

29Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 30: Programowanie obiektowe i język Java

Refaktoryzacja kodu

Refaktoryzacja to proces poprawy kodu tak aby stał się on bardziej czytelny:

Nie zmienia się funkcjonalności kodu

Nie dodaje się nowej funkcjonalności

30Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 31: Programowanie obiektowe i język Java

Brzydkie zapachy (bad smells)

„Brzydkie zapachy” w kodzie są symptomami problemów oprogramowania i wskazują, że kod powinien zostać zrefaktoryzowany. Brzydkie zapachy mogą wpływać negatywnie na czytelność kodu i wydajność programu.

31Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 32: Programowanie obiektowe i język Java

Przykłady „brzydkich zapachów” (1)

Powtórzony kod:

fragment kodu występuje więcej niż raz,

możliwość rozwiązania: wydzielenie metody

Długa metoda:

Preferowane są krótkie metody, zawierające najwyżej kilkadziesiąt linii kodu

Możliwość rozwiązania: wydzielenie metody, wydzielenie obiektu

Leniwa klasa

Zrozumienie każdej klasy w systemie wymaga czasu programistów, jeśli klasa nie posiada wystarczająco dużo funkcjonalności to czas poświęcony na jej zrozumienie nie jest współmierny do zysku jaki daje posiadanie tej klasy

Możliwe rozwiązania: dla kasy dziedziczącej z innej klasy usunięcie dziedziczenia; przerzucenie funkcjonalności do innej klasy

32Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 33: Programowanie obiektowe i język Java

Przykłady „brzydkich zapachów” (2)

Klasa danych

Klasa zawierająca tylko pola, getery i setery

Możliwe rozwiązania: przeniesienie metod do klasy danych, jeśli nie da się przenieść całej funkcjonalności wykorzystać wydzielenie metody

Duża klasa

Za duża funkcjonalność jednej klasy, która wywołuje potrzebę utrzymywania wielu obiektów tej klasy

Możliwe rozwiązania: w przypadku redundancji wydzielenie metod, wydzielenie klasy nadrzędnej, dziedziczenie

Odrzucony spadek

Klasa wykorzystuje tylko część funkcjonalności klasy nadrzędnej

Możliwe rozwiązania: przemieszczenie części funkcjonalności z klasy nadrzędnej na potomków

33Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 34: Programowanie obiektowe i język Java

Kontenery

Kontenery to specjalne obiekty pozwalające na przechowywanie innych obiektów w pewien określony sposób

Kontenery przechowują referencje do obiektów

34Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 35: Programowanie obiektowe i język Java

Kontenery w języku Java

Język Java zawiera 2 rodzaje kontenerów:

Kolekcje (interfejs Collection)

Mapy (interfejs Map)

35Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 36: Programowanie obiektowe i język Java

Metody interfejsu Collection

boolean add(Object)

boolean addAll(Collection)

void clear()

boolean contains(Object)

Iterator iterator

boolean remove(Object)

Boolean removeAll(Collection)

int size()

36Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 37: Programowanie obiektowe i język Java

ArrayList vs LinkedList

ArrayList

Dodawanie elementu O(n)

Wyszukiwanie elementu O(1)

LinkedList

Dodawanie elementu O(1)

Wyszukiwanie elementu O(n)

37Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 38: Programowanie obiektowe i język Java

HashSet vs TreeSet

HashSet

Dostęp do elementu w czasie stałym

TreeSet

Dostęp do elementu w czasie logarytmicznym

Uporządkowanie elementów

38Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Page 39: Programowanie obiektowe i język Java

Interfejs Map

put (Object key, Object value)

Object get(Obect key)

boolean containskey(Object key)

boolean containsValue(Object value)

39Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego