Programowanie obiektowe i język Java



Podobne dokumenty
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dziedziczenie. dr Jarosław Skaruz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Polimorfizm. dr Jarosław Skaruz

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Definiowanie własnych klas

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Programowanie obiektowe

Platformy Programistyczne Podstawy języka Java

Dokumentacja do API Javy.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Wykład 4: Klasy i Metody

Programowanie Obiektowe (Java)

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Klasy abstrakcyjne, interfejsy i polimorfizm

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Podstawy programowania obiektowego

Materiały do zajęć VII

Kompozycja i dziedziczenie klas

Technologie i usługi internetowe cz. 2

Podstawy Programowania Obiektowego

Programowanie obiektowe - 1.

Programowanie obiektowe

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Dawid Gierszewski Adam Hanasko

Kurs WWW. Paweł Rajba.

Programowanie 2. Język C++. Wykład 3.

Języki i techniki programowania Ćwiczenia 2

Programowanie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Enkapsulacja, dziedziczenie, polimorfizm

Java Język programowania

Wyjątki (exceptions)

Programowanie obiektowe

Programowanie obiektowe

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Klasy abstrakcyjne i interfejsy

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Dziedziczenie. Tomasz Borzyszkowski

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Podstawy otwartych języków programowania Przechowywanie danych

Definiowanie własnych klas

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wykład 8: klasy cz. 4

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Typy sparametryzowane

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

GUI - projektowanie interfejsów cz. II

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Aplikacje w środowisku Java

Interfejsy i klasy wewnętrzne

Programowanie w Internecie. Java

Definicje klas i obiektów. Tomasz Borzyszkowski

Programowanie obiektowe

Podstawy Języka Java

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Zaawansowane programowanie w języku C++ Klasy w C++

Programowanie w języku Java. Kolekcje

PHP 5 język obiektowy

Wykład 2: Podstawy Języka

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

1 Atrybuty i metody klasowe

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Wykład 6: Dziedziczenie

Aplikacje w środowisku Java

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe

Diagramy klas. dr Jarosław Skaruz

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

UML a kod. C++, Java i C#

Programowanie, algorytmy i struktury danych

Programowanie obiektowe

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Multimedia JAVA. Historia

PARADYGMATY PROGRAMOWANIA Wykład 2

Kolekcje. Na podstawie:

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Kolekcje - pakiet Java Collections Framework

Programowanie obiektowe

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Transkrypt:

Programowanie obiektowe i język Java Tomasz Głowacki 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 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 2

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 3

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 4

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 5

Operatory w języku Java Matematyczne (+) (-) (/) (*) (%) Porównania (==) (<=) (>=) (>) (<) (!=) Auto inkrementacja (++) i dekrementacja (--) Operatory logiczne lub ( ) i (&&) Zaprzeczenie (!) Operatory bitowe lub ( ) i (&) albo (^) 6

Przykrycie zmiennych { } int zmienna = 5; { int zmienna = 10 } Java nie pozwala na przykrywanie zmiennych. Zasięg zmiennej jest ograniczony nawiasami klarowymi. 7

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; 8

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 9

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 10

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 11

Zadanie 1 Utwórz program w języku Java wyświetlający 10 razy napis Hello world 12

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) {} 13

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; } 14

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() {} } 15

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;} } 16

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 17

Paradygmaty programowania obiektowego Dziedziczenie Hermetyczność Polimorfizm 18

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 19

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; } 20

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 21

Interfejsy class A {} class B extends A {} class C extends A implements X {} interface X {void metoda();} 22

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(); 23

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*/ } 24

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 25

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 26

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 27

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 28

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. 29

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 30

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. 31

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 32

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 33

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

Kontenery w języku Java Język Java zawiera 2 rodzaje kontenerów: Kolekcje (interfejs Collection) Mapy (interfejs Map) 35

Metody interfejsu Collection boolean add(object) boolean addall(collection) void clear() boolean contains(object) Iterator iterator boolean remove(object) Boolean removeall(collection) int size() 36

ArrayList vs LinkedList ArrayList Dodawanie elementu O(n) Wyszukiwanie elementu O(1) LinkedList Dodawanie elementu O(1) Wyszukiwanie elementu O(n) 37

HashSet vs TreeSet HashSet Dostęp do elementu w czasie stałym TreeSet Dostęp do elementu w czasie logarytmicznym Uporządkowanie elementów 38

Interfejs Map put (Object key, Object value) Object get(obect key) boolean containskey(object key) boolean containsvalue(object value) 39