Programowanie w języku Java WYKŁAD

Podobne dokumenty
Programowanie obiektowe

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie obiektowe

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

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

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

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

WYKŁAD 11. Wzorce projektowe czynnociowe Iterator TemplateMethod

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java Język programowania

Dokumentacja do API Javy.

Platformy Programistyczne Podstawy języka Java

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

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

Podstawowe części projektu w Javie

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wzorce projektowe. dr inż. Marcin Pietroo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie RAD Delphi

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

Zaawansowane programowanie w C++ (PCP)

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

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

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

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

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Programowanie w Internecie. Java

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

2. Składnia, środowisko i konwencje w Javie

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

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Programowanie obiektowe

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

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

Builder (budowniczy) Cel: Przykład:

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie w języku Java WYKŁAD

Wzorce projektowe. dr inż. Marcin Pietroo

Java Podstawy. Michał Bereta

Podstawy i języki programowania

Programowanie i projektowanie obiektowe

Tworzenie aplikacji w języku Java

Podstawy programowania skrót z wykładów:

Java: interfejsy i klasy wewnętrzne

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

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

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

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie obiektowe

Dawid Gierszewski Adam Hanasko

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Klasy i obiekty cz II

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

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Wzorce projektowe cz. I. Wzorce projektowe cz. I 1/33

MATERIAŁY DO ZAJĘĆ II

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

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

Interfejsy i klasy wewnętrzne

Programowanie obiektowe

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

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

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

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

Podstawy Programowania Obiektowego

Polimorfizm. dr Jarosław Skaruz

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Projektowanie obiektowe Wzorce projektowe

Microsoft IT Academy kurs programowania

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Technologie obiektowe

Programowanie w języku Java WYKŁAD

Programowanie obiektowe

Język Java i technologie WEB

Wykład 2: Podstawy Języka

Systemy Rozproszone - Ćwiczenie 6

Programowanie obiektowe - 1.

Język C++ Programowanie obiektowe

Diagramy czynności Na podstawie UML 2.0 Tutorial

PHP: bloki kodu, tablice, obiekty i formularze

Kurs WWW. Paweł Rajba.

Aplikacje w środowisku Java

PARADYGMATY PROGRAMOWANIA Wykład 4

Wywoływanie metod zdalnych

Podstawy programowania w języku C

Wykład 5: Więcej o Klasach i Metodach

KOTLIN. Język programowania dla Androida

Zaawansowane programowanie obiektowe - wykład 5

Transkrypt:

Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: pzabawa@pk.edu.pl www: http://www.pk.edu.pl/~pzabawa 03.03.2014

WYKŁAD 2 Elementy leksykalne Java Elementy składniowe Java Wzorce projektowe c.d.

Elementy leksykalne Java Identyfikatory [$_a-za-z]+[$_a-za-z0-9]* Case-sensitive Unicode Wykluczone słowa kluczowe i literały true, false, null

Elementy leksykalne Java Słowa kluczowe abstract continue for new switch assert default goto package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while

Elementy leksykalne Java Literały Liczby całkowite (dziesiętne, szesnastkowe, ósemkowe) Liczby rzeczywiste (dziesiętne, szesnastkowe) Literały logiczne: true, false Literały znakowe, np. a, \x0 Literały napisowe, np. Literał napisowy (są to wartości klasy String) Literał null

Elementy leksykalne Java Operatory = > <! ~? : == <= >=!= && ++ -- + - * / & ^ % << >> >>> += -= *= /= &= = ^= %= <<= >>= >>>=

Elementy składniowe Java Typy Wyróżnia się dwa rodzaje typów: pierwotne typ wartości logicznych: boolean typy całkowitoliczbowe: byte, short, int, long, char typy zmiennopozycyjne: float, double referencyjne typ klas typ interfejsów typ tablic

Typy wbudowane w Java Typy te służą do reprezentowania danych. Dane mogą być przechowywane w następujących miejscach: Rejestry Stos tu są w Java umieszczane referencje do obiektów (konieczna znajomość rozmiaru danych przez kompilator i czas przechowywania) Sterta w Java tu są przechowywane obiekty (rozmiar danych ani czas przechowywania mogą być nieznane przez kompilator) Obszar stałych w kodzie lub osobno Obszar spoza RAM strumieniowanie obiektów (na inną maszynę) lub obiekty trwałe w Java trwałość lekka, a więcej w JDBC i Hibernate

Typy wbudowane w Java Typy wbudowane w Java: Typy podstawowe (proste, pierwotne) Zostały wbudowane w język Java przez jego twórców Jako jedyny typ Javy nie dziedziczą z klasy Object Typy klasowe (opakowania typów podstawowych) Zostały wbudowane jako klasy w standardowe pakiety biblioteczne Java przez ich twórców java.lang [np. Double] java.util [np. Date] java.math [np. BigDecimal] Dziedziczą z klasy Object dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Typy wbudowane w Java Typ prosty Rozmiar Minimum Maksimum Typ klasowy boolean Boolean char 16-bit Unicode 0 Unicode 2 16-1 Character byte 8-bit -128 +127 Byte short 16-bit -2 15 +2 15-1 Short int 32-bit -2 31 +2 31-1 Integer long 64-bit -2 63 +2 63-1 Long float 32-bit IEEE754 IEEE754 Float double 64-bit IEEE754 IEEE754 Double void Void

Typy wbudowane w Java Kwestia Java_x32 a Java_x64 jaki jest wpływ na rozmiar/zakres wartości danych? Standard języka Java gwarantuje ten sam rozmiar i ten sam zakres wartości dla typów prostych i ich opakowań Jak sprawdzić rozmiar danego typu w czasie wykonania? Dla typu prostego brak możliwości java.lang, java.util statyczny atrybut SIZE tej klasy java.math nie ma ograniczeń poza fizycznymi Jak sprawdzić zakres wartości danego typu? java.lang, java.util statyczny atrybut MAX_VALUE, MIN_VALUE java.math nie ma ograniczeń poza fizycznymi

Elementy składniowe Java Obiekty Są nimi instancje klas lub instancje tablic. Zmienne zmienne klasowe zmienne egzemplarzowe zmienne lokalne elementy tablic (te zmienne są anonimowe) parametry metod parametry konstruktorów parametry obsługi wyjątków

Elementy składniowe Java Konwencje nazewnicze Nazwy klas i interfejsów z wielkiej litery, nazwy zmiennych, metod, parametrów z malej litery. Nazwy wielowyrazowe kolejne słowa z wielkiej litery, a pierwsze wg wcześniejszej zasady (notacja CamelCase). Nazwy pakietów wyłącznie z małych liter. Nazwy stałych (static final) wyłącznie z wielkich liter.

Elementy składniowe Java Instrukcje Instrukcja pusta Instrukcja deklaracji zmiennej lokalnej Instrukcja etykietowana Instrukcja wyrażeniowa Instrukcja warunkowa Instrukcja asercji Instrukcja wyboru Pętle Dopóki Wykonuj Dla wersja podstawowa Dla wersja rozszerzona

Elementy składniowe Java Instrukcje (c.d.) Zaprzestania: break Kontynuacji: continue Instrukcja powrotu Wyjątku Zgłoszenia wyjątku: throw Przechwycenia wyjątku: try-catch Bloku Synchronizująca

Wzorzec czynnościowy Jako kolejny wzorzec projektowy wybrano Iterator. Pierwszym powodem jest możliwość poprawienia kodu ilustrującego polimorfizm w Java z poprzedniego wykładu, w którym iterowaliśmy po polimorficznej liście w sposób nieelegancki zakładaliśmy, że: wiemy ile jest elementów listy [i<3] lista oferuje dostęp po indeksie elementu [get(i)] kolejne elementy listy sąsiadują ze sobą [for(i=0;i<3;i++)] Drugim powodem jest przemilczane wykorzystanie Iteratora w przykładzie z laboratorium zaparzanie herbaty z użyciem dekoratora wg. przykładu z Fluffycat.

Wzorzec czynnościowy Wzorzec ten jest powszechnie i na porządku dziennym stosowany przez programistów Java SE przy dostępie do elementów biblioteki kontenerów znajdujących się w standardowym pakiecie bibliotecznym: java.util Przykład użycia wzorca: private List<String> chaiingredients = new ArrayList<String>(); ListIterator listiterator = chaiingredients.listiterator(); while (listiterator.hasnext()) { } System.out.println(((String)(listIterator.next())) + " is steeping");

Wzorzec czynnościowy W nawiązaniu do powyższego przykładu użycia można wskazać na fakt, że zastosowanie tego wzorca uzależnia kod źródłowy klienta wzorca od interfejsu konkretnego iteratora, którego implementacja jest zależna od kontenera, do nawigacji po którym jest on przeznaczony. Właśnie ta zależność jest ukryta przed klientem. Wprowadzenie tego wzorca otwiera drogę do omówienia biblioteki kontenerów opartej o typy generyczne Java.

Wzorzec czynnościowy: Iterator Zapewnia sekwencyjny dostęp do elementów agregatu bez ujawniania jego reprezentacji wewnętrznej.

Wzorzec czynnościowy: Iterator Uzasadnienie: Obiekt zagregowany np. lista powinien zapewniać klientowi dostęp do swoich elementów bez ujawniania swojej wewnętrznej reprezentacji. Sposoby przechodzenia elementów agregatu też mogą być różne i nie powinny zaśmiecać agregatu. Może być też potrzeba przechodzenia w danej chwili elementów agregatu na kilka różnych sposobów.

Wzorzec czynnościowy: Iterator

Wzorzec czynnościowy: Iterator Dzięki oddzieleniu mechanizmu przechodzenia po obiekcie klasy Lista od samej Listy można zaimplementować w obiekcie Iterator różne strategie jej przechodzenia np. FiltrującyIteratorPoLiście. Przy takim rozwiązaniu jak na powyższym diagramie klient musi wiedzieć, że będzie działał właśnie na liście. Ideałem byłoby zapewnienie możliwości zmiany klasy-agregatu bez zmiany klienta. Da się to zrobić wprowadzając iterację polimorficzną.

Wzorzec czynnościowy: Iterator Dodajemy nową klasę ListaZPrzeskokami (probabilistyka). Wprowadzamy dla obu list nadklasę abstrakcyjną ListaAbstrakcyjna zapewniającą wspólny interfejs do działania na listach. Potrzebna będzie też klasa abstrakcyjna Iterator określająca wspólny interfejs do przechodzenia po listach. Teraz dla nadklasy Iterator definiujemy podklasy konkretne po jednej dla każdego rodzaju listy.

Wzorzec czynnościowy: Iterator Klient nie powinien jednak tworzyć konkretnych typów iteratorów. Lepiej aby konkretne klasy list były odpowiedzialne za utworzenie właściwego dla nich iteratora operacja StworzIterator() udostępniająca klientowi konkretny obiekt iteratora. Operacja ta, to przykład wzorca projektowego FactoryMethod.

Wzorzec czynnościowy: Iterator Stosowalność: uzyskanie dostępu do zawartości obiektu-agregatu bez ujawniania jego struktury wewnętrznej umożliwienie wielokrotnego przechodzenia obiektów-agregatów zapewnienie jednakowego interfejsu przechodzenia różnych struktur zagregowanych (iteracja polimorficzna) Struktura:

Wzorzec czynnościowy: Iterator

Wzorzec czynnościowy: Iterator Uczestnicy: Iterator definiuje interfejs dostępu do elementów agragatu i przechodzenia ich IteratorKonkretny implementuje interfejs Iteratora pamięta bieżącą pozycję osiągniętą przy przechodzeniu agregatu

Wzorzec czynnościowy: Iterator Agregat definiuje interfejs tworzenia obiketów-iteratorów AgregatKonkretny implementuje interfejs tworzenia Iteratora tak, aby przekazywał egzemplarz odpowiedniego IteratoraKonkretnego

Wzorzec czynnościowy: Iterator Współpraca: Klasa IteratorKonkretny śledzi, który obiekt w agregacie jest bieżący i potrafi wskazać następny obiekt

Wzorzec czynnościowy: Iterator Konsekwencje: możliwość rozmaitego przechodzenia agregatów iteratory upraszczają interfejs Agregatu w danej chwili może się odbywać więcej niż jedno przechodzenie agregatu

Wzorzec czynnościowy: Iterator Implementacja: który z uczestników steruje procesem iteracyjnym? iterator zewnętrzny (aktywny) albo iterator wewnętrzny (pasywny) który z uczestników definiuje algorytm przechodzenia? na ile iterator jest odporny? dodatkowe operacje Iteratora

Wzorzec czynnościowy: Iterator stosowanie iteratorów polimorficznych w C++ iteratory mogą mieć uprzywilejowany dostęp iteratory dla kompozytów iteratory puste

Wzorzec konstrukcyjny Jako kolejny wzorzec projektowy wybrano Metodę Wytwórczą. Wzorzec ten pozwala poprawić jakość kodu źródłowego poprzez przejęcie odpowiedzialności za tworzenie obiektów. W efekcie zostają z kodu źródłowego usunięte rozproszone wywołania operatora new i skoncentrowane wewnątrz klas wzorca. Dzięki temu łatwiej jest wprowadzać zmiany do kodu zarówno po stronie klienta wzorca jak i po stronie wzorca. Wzorzec ten znajdzie zastosowania przy okazji omawiania mechanizmu osłabiania zależności stanowiącego wprowadzenie do wstrzykiwania zależności w Spring.

Wzorzec konstrukcyjny: Metoda Przeznaczenie: Wytwórcza Zakład Inżynierii Oprogramowania Określa interfejs do tworzenia obiektów, lecz umożliwia podklasom decydowanie o tym, której klasy ma to być obiekt. Dzięki temu klasy mogą zdać się na podklasy w kwestii tworzenia egzemplarzy.

Wzorzec konstrukcyjny: Metoda Uzasadnienie: Wytwórcza Zakład Inżynierii Oprogramowania Aplikacja i Dokument dwie abstrakcje. Klienci muszą tworzyć ich podklasy konkretne. Aby stworzyć aplikację do rysowania potrzebujemy np. klas AplikacjaRysujaca i DokumentZRysunkami.

Wzorzec konstrukcyjny: Metoda Wytwórcza Zakład Inżynierii Oprogramowania

Wzorzec konstrukcyjny: Metoda Wytwórcza Klasa Aplikacja nie wie jakiego typu dokumenty ma stworzyć wie tylko kiedy. Stosowalność: Zakład Inżynierii Oprogramowania klasa nie może przewidzieć jakich klas obiekty musi tworzyć klasa chce aby to jej podklasy specyfikowały tworzone przez nią obiekty Struktura:

Wzorzec konstrukcyjny: Metoda Wytwórcza Zakład Inżynierii Oprogramowania

Wzorzec konstrukcyjny: Metoda Wytwórcza Zakład Inżynierii Oprogramowania Uczestnicy: Produkt (Dokument) definiuje interfejs obiektów tworzonych przez metodę wytwórczą ProduktKonkretny implementuje interfejs z klasy Produkt

Wzorzec konstrukcyjny: Metoda Wytwórcza Zakład Inżynierii Oprogramowania Twórca (Aplikacja) deklaruje metodę wytwórczą, która przekazuje obiekt typu Produkt; Twórca może także definiować domyślną implementację metody wytwórczej, która przekazuje pewien domyślny obiekt klasy ProduktKonkretny może wywoływać metodę wytwórczą, aby utworzyć obiekt klasy Produkt

Wzorzec konstrukcyjny: Metoda TwórcaKonkretny Wytwórcza przedefiniowuje metodę wytwórczą, żeby przekazywała obiekt klasy ProduktKonkretny Współpraca: Zakład Inżynierii Oprogramowania Twórca poelga na swoich podklasach w kwestii takiego definiowania metody wytwórczej, by przekazywała egzemplarz odpowiedniej klasy ProduktKonkretny

Wzorzec konstrukcyjny: Metoda Wytwórcza Zakład Inżynierii Oprogramowania Implementacja: dwie główne odmiany wzorca: klasa Twórca jest abstrakcyjna klasa Twórca jest konkretna sparametryzowane metody wytwórcze możliwe tworzenie wielu rodzajów produktów

Wzorzec konstrukcyjny: Metoda Wytwórcza Zakład Inżynierii Oprogramowania class Tworca { public: virtual Produkt* Stworz(IdProduktu); } Produkt* Tworca::Stworz(IdProduktu id){ if (MÓJ==id) return new MojProdukt; if (TWÓJ==id) return new Twojrodukt; return 0; }

Wzorzec konstrukcyjny: Budowniczy Oddziela konstrukcję obiektów złożonych od ich reprezentacji umożliwiając tym samym powstawanie w jednym procesie konstrukcyjnym różnych reprezentacji.

Wzorzec konstrukcyjny: Budowniczy Uzasadnienie stosowania: Problem przekształcania formatu RTF do innych formatów. Ze względu na dużą ilość możliwych konwersji powinno dać się łatwo dodawać nowe bez modyfikowania klienta.

Wzorzec konstrukcyjny: Budowniczy

Wzorzec konstrukcyjny: Budowniczy Stosowalność: algorytm tworzenia obiektu złożonego niezależny od części składowych tego obiektu i sposobu ich zestawiania proces konstruowania musi uwzględniać różne reprezentacje konstruowanego obiektu Struktura:

Wzorzec konstrukcyjny: Budowniczy

Wzorzec konstrukcyjny: Budowniczy Uczestnicy: Budowniczy (KonwerterTekstowy) określa interfejs abstrakcyjny do tworzenia części składowych obiektu Produkt

Wzorzec konstrukcyjny: Budowniczy BudowniczyKonkretny (KonwerterNaASCII, KonwerterNaTeX) konstruuje i zestawia część produktu poprzez implementowanie interfejsu Budowniczego definiuje i kontroluje tworzoną przez siebie reprezentację zapewnia interfejs do wyszukiwania produktu (np.. PodajTekstASCII)

Wzorzec konstrukcyjny: Budowniczy Kierownik (CzytnikRTF) konstruuje obiekt używając interfejsu Budowniczego Produkt (TekstASCII, TekstTeX) reprezentuje konstruowany obiekt złożony; klasa BudowniczyKonkretny buduje wewnętrzną reprezentację produktu i definiuje proces składania go; zawiera klasy definiujące części składowe, włączając w to interfejsy zestawiania części w końcowy wynik

Wzorzec konstrukcyjny: Budowniczy Współpraca: Klient tworzy obiekt Kierownik i konfiguruje go za pomocą pożądanego obiektu Budowniczy Kierownik informuje budowniczego o potrzebie zbudowania części produktu Budowniczy przetwarza żądania klienta i dodaje części do produktu Klient odbiera produkt od Budowniczego

Wzorzec konstrukcyjny: Budowniczy Konsekwencje: Umożliwienie zmiany wewnętrznej reprezentacji produktu Oddzielenie kodu służącego do konstruowania od reprezentacji różni Kierownicy mogą ponownie używać kodu do budowania różnych wariantów Produktu z tego samego zestawu części Lepsza kontrola procesu konstruowania nie za jednym podejściem ale krok po kroku, na zakończenie kierownik pobiera produkt od budowniczego

Wzorzec konstrukcyjny: Budowniczy Pokrewne wzorce: AbstractFactory też może konstruować obiekty złożone, ale nie krok po kroku lecz raczej całe rodziny produktów. Budowniczy przekazuje produkt w ostatnim kroku, a Fabryka Abstrakcyjna natychmiast. Budowniczych często używa się do budowania obiektów Composite.

Wzorzec konstrukcyjny: Budowniczy Znane zastosowania: konwerter RTF Parser w Smalltalk BudowniczyKlas StrumieńKodówBajtowych

Poziomy umiejętności Poziomy umiejętności korzystania z wzorców projektowych: Korzystanie jako klient z gotowych wzorców Implementacja znanego wzorca do rozwiązania własnego problemu Implementacja złożenia kilku znanych wzorców do rozwiązania problemu Opracowanie własnego wzorca projektowego

Koniec