1 / 38 JAVA - OOP. Programowanie w środowisku rozproszonym. Wykład -01[SUM]



Podobne dokumenty
Programowanie obiektowe

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

Programowanie obiektowe

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

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

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

Ćwiczenie 1. Przygotowanie środowiska JAVA

Programowanie obiektowe

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Podstawy i języki programowania

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Dokumentacja do API Javy.

Programowanie obiektowe zastosowanie języka Java SE

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

Języki skryptowe w programie Plans

1 Podstawy c++ w pigułce.

Programowanie w Internecie. Java

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Wprowadzenie do języka Java

Podstawy Języka Java

Java jako język programowania

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

Programowanie obiektowe - 1.

Powtórka algorytmów. Wprowadzenie do języka Java.

Technologie i usługi internetowe cz. 2

Podstawy Programowania C++

Multimedia JAVA. Historia

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

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

Microsoft IT Academy kurs programowania

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

Java Język programowania

Podstawy Programowania Obiektowego

Programowanie obiektowe

Programowania w Javie

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

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

Powtórka algorytmów. Wprowadzenie do języka Java.

Platformy Programistyczne Podstawy języka Java

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

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

Wykład 4: Klasy i Metody

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Podstawy programowania w języku C

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

Programowanie obiektowe

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

Podstawy i języki programowania

Podstawowe części projektu w Javie

Wykład 2: Podstawy Języka

JAVA?? to proste!! Autor: wojtekb111111

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

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

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

1 Podstawy c++ w pigułce.

Tworzenie aplikacji w języku Java

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

Dziedziczenie. dr Jarosław Skaruz

Język ludzki kod maszynowy

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

Definiowanie własnych klas

Podstawy Programowania Podstawowa składnia języka C++

Programowanie obiektowe. Wprowadzenie

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Język programowania. Andrzej Bobyk

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

Spis treści. 1 Java T M

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

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

KOTLIN. Język programowania dla Androida

MATERIAŁY DO ZAJĘĆ II

Dziedziczenie. Tomasz Borzyszkowski

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

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

Powtórka algorytmów. Wprowadzenie do języka Java.

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

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

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

Java EE produkcja oprogramowania

Wykład 8: klasy cz. 4

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Wykład 7: Pakiety i Interfejsy

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

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wykład 3 Składnia języka C# (cz. 2)

PARADYGMATY PROGRAMOWANIA Wykład 4

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

WPROWADZENIE DO JĘZYKA JAVA

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Programowanie obiektowe

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Rozdział 4 KLASY, OBIEKTY, METODY

Transkrypt:

1 / 38 JAVA - OOP Programowanie w środowisku rozproszonym. Wykład -01[SUM]

Plan wykładu 2 / 38 Obiektowa analiza i projektowanie - wstęp do programowania obiektowego w Javie Paradygmaty programowania obiektowego Enkapsulacja (hermetyzacja) Dziedziczenie (rozszerzanie) klas a przyrostowa rozbudowa systemu informatycznego Rzutowanie Polimorfizm Proste przykłady analizy i projektowania obiektowego Diagramy UML

Programowanie obiektowe - wstęp 3 / 38 Programowanie obiektowe (orientowane na obiekt lub obiektowo-orientowane) określony sposób tworzenia programów, wspierany przez róŝne języki programowania obiektowego; metodologia, której główne paradygmaty to: Obiekt Klasa Abstrakcja Enkapsulacja (hermetyzacja, ukrywanie) Dziedziczenie (rozszerzanie, generalizacja) Rzutowanie Polimorfizm

Programowanie obiektowe wstęp (2) 4 / 38 Programowanie proceduralne: Program jako zbiór funkcji (procedur) realizujących określone zadanie Czasem brakuje wyraźnego (na pierwszy rzut oka) powiązania między funkcjami a danymi, z których korzysta program Programowanie obiektowe: Głównym elementem konstrukcji programów jest obiekt, który łączy w sobie (w logiczny i naturalny sposób) dane i metody na nich operujące Obiektowy program to zbiór dynamicznie tworzonych obiektów, które wzajemnie ze sobą współpracują

Programowanie obiektowe wstęp (3) 5 / 38 Historia programowania obiektowego w skrócie: Simula I (1962) oraz Simula 67 (1967) pierwsze języki programowania obiektowego, wprowadzały pojęcie klasy, obiektu, dziedziczenia Smalltalk (od 1971) bazujący na Simuli, wprowadzał GUI C++ (początek lat 80 tych u.w.) przeniesienie koncepcji programowania obiektowego z Simuli do C W latach 80-tych powstawały równieŝ obiektowe odmiany innych języków np. Pascal a, Lisp a, Basic a, Ady Java - zapoczątkowana w 1991 roku, pierwsza publiczna wersja w 1995, zdobywa popularność jako język do zastosowań sieciowych (okres szybkiego rozwoju Internetu)

Programowanie obiektowe wstęp (4) 6 / 38 Obiektowa analiza, projektowanie i programowanie opierają się na naturalnych dla człowieka mechanizmach: Mózg ludzki postrzega otaczający nas świat jako zbiór obiektów (człowiek, zwierzę, roślina, przedmiot ) Mózg nieustannie dokonuje klasyfikacji obiektów - łączy obiekty w grupy/klasy (często w sposób hierarchiczny), na podstawie występujących między nimi podobieństw Klasyfikacja ta odbywa się na róŝne sposoby, zaleŝnie od przyjętych w danej chwili kryteriów - przykładowo, dany zbiór artykułów gospodarstwa domowego, moŝna podzielić w róŝny sposób na klasy, raz biorąc pod uwagę np. wagę przedmiotu, a innym razem np. zastosowanie, wymiary, materiał z jakiego zostały zrobiony, kolorystykę itp.

Pojęcie obiektu i klasy 7 / 38 Obiekt (w rzeczywistości) zwykle jest rozumiany jako coś materialnego np. drzewo, kamień, kałuŝa, pies, koń, ręka... Obiekt (obiektowa analiza, projektowanie, programowanie): Element mający logiczne uzasadnienie i znaczenie w rozpatrywanym (na pewnym poziomie abstrakcji) modelu Obiektem moŝe być wszystko co tylko daje się opisać, przedstawić w postaci zbioru określonych cech (dane) i/lub zachowań (metody) np. ksiąŝka, praca, człowiek MoŜe lecz nie musi posiadać swego rzeczywistego, tzn. materialnego odpowiednika; np. w programie pocztowym obiektem moŝe być adres osoby (dane: ulica, miasto, kod, e-mail), czy teŝ załącznik do e-mail a (nazwa, typ, dane)

Pojęcie obiektu i klasy (2) 8 / 38 Obiekt posiada następujące cechy: Strukturę (budowę) która określa ilość i rodzaj informacji, danych przechowywanych w obiekcie (atrybuty obiektu) Stan czyli aktualną zawartość atrybutów obiektu ToŜsamość kaŝdy obiekt daje się jednoznacznie zidentyfikować oraz rozróŝnić od innych obiektów UWAGA: jeśli dwa obiekty naleŝą do tej samej klasy i przechowują (w danej chwili) dokładnie te same dane, to róŝnią się przynajmniej lokalizacją w pamięci komputera i choćby na tej tylko podstawie są rozróŝnialne Zachowanie czyli zbiór metod operujących na obiekcie, jednakowy dla wszystkich obiektów w ramach danej klasy

Pojęcie obiektu i klasy (3) 9 / 38 Klasa jest to wzorzec dla obiektów, szablon z którego tworzone są nowe obiekty. Klasa określa zbiór danych oraz metod jakie posiadać będą powstałe z niej obiekty. Intuicja: KaŜdą klasę moŝna przyrównać do foremki, przy pomocy której robi się ciastka. Jedna foremka, czyli klasa = wiele podobnych (bądź jednakowych) ciastek, czyli obiektów Inne porównanie gdyby ktoś napisał na tablicy, czym wg niego jest np. ksiąŝka (dokument posiadający treść, tytuł, autora, określoną ilość stron), a następnie wziął do ręki dwie ksiąŝki, to ksiąŝki te byłyby obiektami, a definicja na tablicy klasą, czyli opisem ich najwaŝniejszych cech.

Paradygmaty obiektowości 10 / 38 Programowanie obiektowe to oprócz wykorzystania klas i obiektów do budowy aplikacji, takŝe umiejętne stosowanie pozostałych cech obiektowości: Abstrakcji Enkapsulacji (hermetyzacji) Dziedziczenia Rzutowania Polimorfizmu

Paradygmaty obiektowości - abstrakcja 11 / 38 Abstrakcja klasa nie musi uwzględniać wszystkich szczegółów obiektów, powinna skupiać się na cechach istotnych z punktu widzenia tworzonej aplikacji. Tworząc np. bazę danych studentów na potrzeby uczelni, prawdopodobnie nie trzeba w obiektach klasy Student przechowywać wszystkich moŝliwych informacji o danej osobie, jak np. obwód w pasie, waga, kolor skóry, płeć, itp. Być moŝe wystarczy tylko imię, nazwisko i numer indeksu.. Tak więc gdy osobie, której dokładny opis zajął by zapewne wiele stron, przypisujemy obiekt posiadający zaledwie kilka wybranych cech - jest to pewna umowność, abstrakcja.

Abstrakcja (2) 12 / 38 Abstrakcja jako cecha obiektowości moŝe być rozpatrywana równieŝ na innych poziomach np. w kontekście zachowań przypisanych do danych klas (obiektów). KaŜdy obiekt pełni w systemie informatycznym określoną rolę. Aby spełniać swoją rolę obiekt posiada pola i metody realizujące stosowne obliczenia, operacje. Korzystanie z obiektu nie wymaga pełnej wiedzy na temat sposobu, w jaki zostały zaimplementowane jego metody zatem abstrahujemy od szczegółów implementacyjnych a skupiamy się na przeznaczeniu obiektu, na sposobie w jaki moŝna uŝyć obiekt w programie.

Paradygmaty obiektowości - enkapsulacja 13 / 38 Enkapsulacja (hermetyzacja) jest to ukrywanie pewnych szczegółów implementacyjnych, danych i/lub metod obiektu. Ukrywanie pól i metod w Javie realizowane jest za pomocą tzw. modyfikatorów dostępu (public, protected, private..). Enkapsulacja ułatwia m.in. podział pracy (pracę zespołową), gdyŝ np. osoby odpowiedzialne za opracowanie interfejsu uŝytkownika aplikacji nie muszą wiedzieć jakich algorytmów program uŝywa np. do obliczania rabatu - interesuje ich tylko to, w jaki sposób naleŝy odczytać wartość rabatu dla konkretnego produktu (gdyŝ ich zadaniem jest umieszczenie tej wartości w odpowiednim miejscu okna aplikacji).

Enkapsulacja (2) 14 / 38 Intuicja: Jesteśmy przyzwyczajeni do tego, iŝ (czasem) do obsługi skomplikowanych urządzeń (jak np. magnetowid, telewizor) wystarczy krótka instrukcja lub tzw. pilot. Nie musimy np. znać dokładnej budowy i zasad działania telewizora waŝne, Ŝe przy pomocy pilota potrafimy włączać i wyłączać telewizor, a takŝe zmieniać na nim kanały. Uproszczenie obsługi, ograniczenie ilości dostępnych funkcji do niezbędnego minimum ułatwiają wykorzystanie i zmniejszają ryzyko nieumyślnego zepsucia urządzenia to samo tyczy się tworzonego przez nas oprogramowania.

Enkapsulacja (3) 15 / 38 Brak enkapsulacji : Po zastosowaniu enkapsulacji :

Enkapsulacja (4) 16 / 38 Enkapsulacja ma sens równieŝ w przypadku gdy aplikację tworzy jeden programista, gdyŝ: Ułatwia późniejsze wykorzystanie gotowych i przetestowanych elementów w innych programach Zmniejsza ryzyko popełnienia błędu przy aktualizacji danych przechowywanych w obiekcie. Przykład: Proszę wyobrazić sobie obiekt klasy KontoBankowe, który ma pola: stankonta oraz dostępneśrodki, gdzie dostępneśrodki = stankonta + limit kredytu. Zmiana wartości pól stankonta i dostępneśrodki powinna odbywać się równocześnie! Co więcej, dostępneśrodki nie mogą być wartością ujemną, przed czym równieŝ zabezpieczy nas enkapsulacja.

Programowanie obiektowe - dziedziczenie 17 / 38 Dziedziczenie (rozszerzanie, generalizacja, ang.inheritance) - to tworzenie nowej klasy na bazie juŝ istniejącej: Klasa nadrzędna zwana jest takŝe bazową, podstawową, nadklasą Klasa dziedzicząca zwana jest równieŝ klasą podrzędną, pochodną, rozszerzającą, podklasą: - dziedziczy pola i metody klasy bazowej (z wyjątkiem pól i metod oznaczonych jako prywatne) - moŝe posiadać dodatkowe pola i metody w stosunku do klasy bazowej (rozszerzać listę atrybutów i metod) - przedefiniowywać metody z klasy bazowej, jest to tzw. przesłanianie

Dziedziczenie (2) 18 / 38 Przykład 1: Weźmy jako przykład klasę Osoba oraz jej dwie klasy pochodne: Student i Nauczyciel. Osoba + imię : String + nazwisko : String Student Nauczyciel + numerindeksu : int + tytułnaukowy : String Klasy Student i Nauczyciel dziedziczą pola imię i nazwisko z klasy Osoba. Wnoszą teŝ własne atrybuty czyli rozszerzają naszą wiedzę o klasie Osoba.

Dziedziczenie (3) 19 / 38 Dziedziczenie w Javie jest realizowane za pomocą poleceń extends i implements, umieszczanych w deklaracji tuŝ po nazwie klasy. Dziedziczenie zwane jest takŝe rozszerzaniem od słowa extends (rozszerza). public class Osoba { } public String imie, nazwisko; public class Student extends Osoba { } public int numerindeksu; public class Nauczyciel extends Osoba { } public String tytulnaukowy;

Dziedziczenie (4) 20 / 38 Przykład 2: Stwórzmy klasę Prostokat, z metodą obliczpole(), a następnie klasę pochodną Kwadrat. Prostokat + wysokosc : float + szerokosc : float + obliczpole() : float Kwadrat + Kwadrat( dłboku : float ) Proszę zauwaŝyć, iŝ klasa Kwadrat dziedziczy z klasy bazowej Prostokat metodę obliczpole().

Rozszerzanie klas w Javie (2) 21 / 38 Przykład 2: public class Prostokat { public float wysokosc, szerokosc; } public float obliczpole() { } return wysokosc * szerokosc; public class Kwadrat extends Prostokat { public Kwadrat( float dlugoscboku ) { wysokosc = dlugoscboku; szerokosc = dlugoscboku; } }

Dziedziczenie (5) 22 / 38 MoŜna teraz utworzyć obiekty obu tych klas i wypisać na ekranie pola tych figur korzystając z metody obliczpole(): Prostokat p = new Prostokat(); p.wysokosc = 15; p.szerokosc = 15; System.out.println( Pole prostokąta = + p.obliczpole() ); Kwadrat kwadrat = new Kwadrat( 10 ); System.out.println( Pole kwadratu = + kwadrat.obliczpole() ); Istotny jest równieŝ fakt, iŝ kwadrat jest szczególnym przypadkiem prostokąta. W ten sposób dochodzimy do kolejnej istotnej cechy obiektowości - do rzutowania.

Programowanie obiektowe - rzutowanie 23 / 38 Rzutowanie jest to zamiana typu zmiennej. int i = 100; long l = i; i = (int) l; //rzutowanie zmiennej typu int na typ long //przykład rzutowania zmiennej long na int Rzutowanie dotyczy nie tylko typów prostych, lecz równieŝ zmiennych obiektowych, co ilustruje poniŝszy przykład: Kwadrat kwadrat = new Kwadrat( 10 ); Prostokat p = kwadrat; //poprawne rzutowanie zmiennej //obiektowej typu Kwadrat na //zmienną typu Prostokat Prostokat p2 = new Kwadrat( 10 ); //teŝ poprawne

Programowanie obiektowe - polimorfizm 24 / 38 Z rzutowaniem wiąŝe się kolejna bardzo waŝna cecha obiektowości polimorfizm. Polimorfizm to wywołanie metody odpowiedniej dla rzeczywistego typu obiektu, niezaleŝnie od typu zmiennej obiektowej wskazującej na ten obiekt. Przesłanianie - tworzenie metody w klasie pochodnej, o tej samej nazwie, z tym samym zestawem argumentów i takim samym typem zwracanej wartości jak w klasie nadrzędnej.

Przesłanianie metod a polimorfizm (2) 25 / 38 Przykład 1 - przesłanianie metody class Osoba { public String imię, nazwisko; } public void wyswietlinfo() { System.out.println( nazwisko + + imię ); } class Student extends Osoba { public int nrindeksu; } public void wyswietlinfo() { //przesłanianie metody System.out.println( imię.charat(0) +. + nazwisko + ( + nrindeksu + ) ); }

Przesłanianie metod a polimorfizm (3) 26 / 38 Przykład 1 (c.d.) public class Test { public static void main( String[] args ) { Osoba o = new Osoba(); o.imię = "Jan"; o.nazwisko = "Kowalski"; Student student = new Student(); student.imię = "Jan"; student.nazwisko = "Kowalski"; student.nrindeksu = 190; } } o.wyswietlinfo(); //Kowalski Jan o = student; //o wskazuje teraz na //obiekt klasy Student o.wyswietlinfo(); //J. Kowalski (190)

Rozszerzanie klas w Javie (3) 27 / 38 Wszystkie klasy w Javie (za wyjątkiem klasy Object) posiadają dokładnie jedną(!) nadklasę. MoŜe to być klasa określona przez programistę za pomocą słowa kluczowego extends bądź teŝ klasa java.lang.object, z której dziedziczą wszystkie inne klasy w Javie (pośrednio lub bezpośrednio). Przykłady: class Osoba {} - klasa Osoba dziedziczy tylko z klasy java.lang.object (w sposób niejawny) class Student extends Osoba {} - tak zadeklarowana klasa Student rozszerza klasę Osoba, zatem dziedziczy równieŝ z java.lang.object

Klasa bazowa java.lang.object 28 / 38 Klasa java.lang.object posiada m.in. metodę tostring(), która słuŝy do wypisania zawartości obiektu na ekran (inaczej mówiąc metoda ta zwraca tekstową reprezentację obiektu w postaci String a). Metoda ta jest uŝywana (niejawnie, przez kompilator) np. w momencie gdy w programie dokonuje się połączenia dowolnego obiektu z obiektem typu String za pomocą operatora +, bądź gdy obiekt zostaje uŝyty w miejscu, gdzie kompilator spodziewa się obiektu typu String (np. metoda System.out.println).

Przesłanianie a klasa java.lang.object (2) 29 / 38 Przesłanianie metody tostring moŝe okazać się przydatne, jeśli chcemy wyświetlać informacje o zawartości obiektów utworzonej wcześniej klasy. Przykład - przesłanianie metody tostring() class Osoba { String imie, nazwisko; Osoba(String imie, String nazwisko) { this.imie = imie; this.nazwisko = nazwisko; } } public String tostring() { return nazwisko + " " + imie; }

Przesłanianie a klasa java.lang.object (3) 30 / 38 Przykład (c.d.) public class Test { public static void main( String[] args ) { Osoba o = new Osoba( "Jan", "Kowalski" ); //o.tostring() wywoływana niejawnie: System.out.println( "Osoba: " + o ); //wyświetli napis Osoba: Kowalski Jan System.out.println( o ); //wyświetli napis Kowalski Jan String tekst = o + to ktoś! ; } } //moŝna teŝ wywoływać tostring() w sposób jawny System.out.println( o.tostring() );

PrzeciąŜanie (overloading) 31 / 38 PrzeciąŜanie (dociąŝanie, ang. overloading) tworzenie kilku wersji tej samej metody, z róŝnym zestawem (liczba, typ) argumentów i ewentualnie róŝnymi typami danych zwracanymi przez nie. Odnosi się równieŝ do konstruktorów. Przykład przeciąŝania metod: class BazaDanychStudentow { public void wyswietl(); public int wyswietl( int numerindeksu ); //OK public int wyswietl( String nazwisko ); //OK } void usun( String nazwisko ); int usun( String nazwisko ); //ŹLE! Metoda //usundane z jednym argumentem typu String //jest juŝ zdefiniowana w tej klasie

Projektowanie obiektowe - przykład 32 / 38 Aplikacja Sklep komputerowy Tworzone jest oprogramowanie dla sklepu. W sklepie tym sprzedawane są komputery (stacjonarne i przenośne) oraz monitory. KaŜdy towar (wszystko co sprzedajemy w sklepie jest towarem) posiada swój numer katalogowy oraz cenę (cena towaru zaleŝy od aktualnego kursu Euro). W przypadku monitorów, waŝną informacją jest przekątna ekranu.

Projektowanie obiektowe przykład (2) 33 / 38 Przykład aplikacja Sklep komputerowy (c.d.) Komputery są towarem, którego najwaŝniejsze cechy to: typ procesora, rozmiar pamięci oraz dysku twardego. Komputery przenośne podzbiór komputerów, z których kaŝdy posiada dodatkowy atrybut w postaci wagi (istotna ze względu na to, iŝ jest to sprzęt przenośny). Pozostałą część komputerów sprzedawanych w sklepie stanowią komputery stacjonarne.

Projektowanie obiektowe przykład (3) 34 / 38 Przykład aplikacja Sklep komputerowy (c.d.) Z tak przygotowanego opisu aplikacji dość naturalnie wyłaniają się klasy obiektów i ich wzajemna hierarchia. Przykładowe klasy: Towar, Komputer, KomputerPrzenośny, KomputerStacjonarny, Monitor. Towar jest klasą nadrzędną do klas Monitor i Komputer Komputer zaś jest klasą nadrzędną w stosunku do klas KomputerPrzenośny i KomputerStacjonarny

Projektowanie obiektowe przykład (4) 35 / 38 Przykładowy diagram klas (w notacji UML) dla aplikacji Sklep komputerowy : Towar Atrybut ukryty + numerkatalogowy : int - cenaeur : float + podajcenępln() : float Komputer + procesor : String + pamięćmb : int + dyskgb : int Monitor - przekątnaekranu : float KomputerPrzenośny + wagakg : float KomputerStacjonarny

Rozbudowa systemu informatycznego 36 / 38 Istotną zaletą podejścia obiektowego jest łatwość rozbudowy i modyfikacji tak przygotowanego systemu informatycznego (oprogramowania). W omawianym przykładzie Sklep internetowy moŝna w dowolnym momencie i co najwaŝniejsze - niskim kosztem: Dodać nowe atrybuty/metody do wszystkich towarów (dokonując modyfikacji jedynie w klasie Towar), np.: int ilosclatgwarancji, float podajcenęusd() Dodać nowe atrybuty do wybranej grupy towarów, np. w klasie Komputer atrybut o nazwie typkartygraficznej Zmienić sposób obliczania cen wszystkich towarów np. tak aby uwzględniał on pewien rabat

Co jeszcze warto wiedzieć? 37 / 38 W projektowaniu (faza przygotowań do tworzenia aplikacji, planowanie klas, metod, interfejsów) i programowaniu (implementacja, realizacja przygotowanej wcześniej koncepcji) obiektowym bardzo waŝna jest logika, porządek, odpowiednie rozplanowanie hierarchii klas i obiektów, stosowanie odpowiedniego nazewnictwa. Nazwy klas, obiektów, ich pól oraz metod powinny w jakiś sposób odzwierciedlać rzeczywiste przeznaczenie danej klasy, bądź przekazywać sens działania danej metody (np. dla klasy KontoBankowe metody: podajaktualnystan(), wpłata(double kwota), wypłata(double kwota) itp.).

Co jeszcze warto wiedzieć? (2) 38 / 38 Główne zalety programowania obiektowego: Większa przejrzystość kodów źródłowych - dzięki naturalnemu podejściu do rozwiązywanego problemu (obiektowość wzoruje się na rzeczywistości), kody źródłowe są zwykle bardziej czytelne Ułatwia i przyspiesza proces tworzenia aplikacji większa szansa powtórnego uŝycia (ang. reuse) gotowych (sprawdzonych) komponentów, niŝ w przypadku programowania proceduralnego UWAGA: pisanie programu w języku obiektowym (C++, Java ) nie jest jeszcze równoznaczne z programowaniem obiektowym (w sposób obiektowy)!

Operator instanceof 39 / 38 Operator instanceof słuŝy do sprawdzania, czy obiekt jest: Instancją wskazanej klasy Instancją klasy pochodnej do wskazanej klasy Instancją klasy, która implementuje wskazany interfejs class Student extends Osoba {} public static void main( String[] args ) { Student st = new Student(); Osoba o = new Student(); System.out.println( o instanceof Osoba ); } } //true System.out.println( o instanceof Student ); //true System.out.println( st instanceof Osoba ); //true System.out.println( st instanceof Student ); //true

40 / 38 Java. Charakterystyka języka Programowanie w środowisku rozproszonym. Wykład -02[SUM]

Szkic problematyki 41 / 38 Wprowadzenie do programowania w Javie Czym jest Java? Java Development Kit tworzenie i kompilacja programów napisanych w Javie Maszyna Wirtualna Javy i uruchamianie programów Podstawy programowania w Javie Dokumentacja do API, komentowanie kodów źródłowych, narzędzie Javadoc Literatura, serwisy WWW poświęcone Javie

Szkic cd. 42 / 38 Java jako język programowania obiektowego Obiekt i klasa obiektów Enkapsulacja (hermetyzacja) Dziedziczenie (rozszerzanie) klas i przyrostowa rozbudowa systemu informacyjnego Polimorfizm jako zaleta dziedziczenia Problem z dziedziczeniem z wielu klas Interfejs jako remedium tego problemu Klasa abstrakcyjna, metody wirtualne Diagramy UML

Cele opanowania umiejętności programowania w Javie 43 / 38 Zrozumienie idei programowania obiektowego, pojęć takich jak np.: obiekt, klasa, interfejs, polimorfizm, dziedziczenie(rozszerzanie), enkapsulacja Opanowanie podstawowych zasad programowania obiektowego w języku Java Poznanie szerokiego spektrum moŝliwości, technologii jakie oferuje Java, począwszy od programów, apletów, GUI, poprzez aplikacje wielowątkowe, sieciowe

Celem nie jest 44 / 38 Nauka profesjonalnego programowania w Javie to wymaga przynajmniej kilku lat praktyki Powielanie ogólno-dostępnej dokumentacji do Javy Przekonanie Państwa, iŝ Java jest najlepszym ze wszystkich istniejących języków programowania Pytanie: lepiej nauczyć się Javy czy C/C++? Odpowiedź: warto znać oba języki i stosować je zaleŝnie od rodzaju tworzonych aplikacji. MoŜna teŝ łączyć obie technologie w obrębie jednej aplikacji, jeśli zajdzie taka potrzeba.

Czym jest Java? 45 / 38 Obiektowy język programowania opracowany i rozwijany przez firmę Sun Microsystems Język stworzony do obsługi urządzeń elektronicznych, na PC wykorzystywany głównie do tworzenia aplikacji sieciowych ze względu na: - bezpieczeństwo (aplety) - niewielki rozmiar plików wynikowych - bogate biblioteki funkcji do obsługi sieci (w standardzie) DuŜą część składni zaczerpnięto z C++, jednak wprowadzono zmiany poprawiające takie aspekty jak: - obiektowość, - bezpieczeństwo, - stabilność, - przenośność kodu

Czym jest Java? (2) 46 / 38 W stosunku do C++, w Javie zrezygnowano m. in. z: Dyrektyw i całego preprocesora Plików nagłówkowych Wskaźników MoŜliwości definiowania i przeciąŝania operatorów Wielodziedziczenia Szablonów (templates) Struktur, unii ZłoŜonych konwersji oraz konwersji niejawnych List inicjacyjnych Destruktorów Argumentów domniemanych Przestrzeni nazw Wyliczeń

Czym jest java? (3) 47 / 38 MoŜna doszukać się podobieństw z kilkoma innymi językami programowania (C/C++, Pascal, Visual Basic, ), np. na poziomie: Nazw instukcji: while, do/while, for, break, continue, switch, return, (jako ciekawostka: Java w zasadzie rozpoznaje instrukcję goto, jednak nie posiada ona implementacji i nie moŝna jej uŝywać, jest jedynie słowem zastrzeŝonym) RóŜnego typu operatorów (+, -, /, *, %, <, >,!=, &&,,!, ) Typów danych (int, short, long, byte, char, float, double, ) - tu (niestety) podobieństwa bywają mylące, np. liczba bajtów na których reprezentowany jest typ char w Javie i C/C++ jest inna (2 bajty w Javie, natomiast 1 bajt w C)

Czym jest java? (4) 48 / 38 Java ma zastosowanie przy tworzeniu: Serwisów WWW technologie: servlety Javy, Java Server Pages (oprogramowanie działające po stronie serwera) Animowanych bądź interaktywnych elementów stron WWW, czyli tzw. apletów (programy działające pod kontrolą przeglądarki internetowej) NiezaleŜnych aplikacji, szczególnie zaś sieciowych GUI do róŝnych systemów bazodanowych, bądź systemów typu ERP UWAGA: nie naleŝy mylić Javy z Java Script em wbrew pozorom, technologie te nie mają ze sobą nic wspólnego.

Java Development Kit 49 / 38 Java Development Kit (JDK) podstawowy zestaw narzędzi dla programistów, przygotowany przez firmę Sun. W jego skład wchodzą m.in.: javac.exe kompilator java.exe - Maszyna Wirtualna (interpreter kodu bajtowego Javy) javadoc.exe narzędzie do generowania dokumentacji w formie plików HTML Java Run-time Environment (JRE) wyłącznie środowisko uruchomieniowe, nie jest ono wystarczające do tworzenia nowych programów. Dystrybucja JDK zawiera w sobie JRE.

Java Development Kit (2) 50 / 38 JDK, JRE oraz dokumentację do API moŝna pobrać ze strony http://java.sun.com/j2se/1.5.0/download.jsp Instalacja JDK: instalator pakietu: jdk-1_5_0_01-windows-i586-p.exe w zmiennej środowiskowej PATH powinna znajdować się ścieŝka do katalogu bin zainstalowanego pakietu (np. PATH= ;c:\j2sdk5.0\bin), pozwalająca na uŝywanie plików javac.exe oraz java.exe w linii poleceń

Kompilacja programów w Javie 51 / 38 Przykładowy program w Javie Plik: Test.java public class Test { } public static void main( String[] args ) { } Kompilacja: >javac Test.java Uruchomienie: >java Test System.out.println( "Java nie jest trudna" );

Kompilacja programów w Javie (2) 52 / 38 Programy w Javie wymagają kompilacji (przy pomocy programu javac.exe). Jednak w przeciwieństwie do innych języków, wynikiem kompilacji programu napisanego w Javie nie jest jak by się moŝna było spodziewać gotowy do uruchomienia program. W wyniku kompilacji pliku źródłowego *.java powstaje zwykle jeden plik z rozszerzeniem *.class (o nazwie takiej samej jak plik źródłowy), zawierający tzw. kod bajtowy Javy (Java bytecode). Inne określenia kodu bajtowego: kod pośredni, bajtkod, B-kod.

Kompilacja programów w Javie (3) 53 / 38 Jeśli kod źródłowy programu zawiera błędy, kompilator sygnalizuje je podając: nazwę pliku w którym błąd wystąpił, numer linii, krótki opis błędu; wyświetla równieŝ wiersz programu zawierający błąd. W powyŝszym przykładzie nazwa metody powinna brzmieć println (zabrakło litery n na końcu tego wyrazu).

Uruchamianie programów w Javie 54 / 38 Pliki wynikowe (*.class), zawierające kod bajtowy Javy, są interpretowane (wykonywane) przez Maszynę Wirtualną Javy (Java Virtual Machine, w skrócie JVM). Maszyna Wirtualna Javy: MoŜe być oddzielną aplikacją (np. java.exe z pakietów JDK/JRE firmy Sun, IBM lub Microsoft) lub wbudowana w przeglądarkę internetową (do uruchamiania apletów) W formie aplikacji jest dostępna dla róŝnych systemów operacyjnych (Windows, Linux, Solaris) i procesorów MoŜe być realizowana sprzętowo, lub np. wykorzystywać kompilację typu Just-In-Time w celu zwiększenia wydajności

Uruchamianie programów w Javie (2) 55 / 38 Specyfikacja Maszyny Wirtualnej oraz kodu bajtowego Javy jest kompletna i bardzo szczegółowa. W przypadku C++ pozostawiono pewną swobodę interpretacji specyfikacji i tak np. typ integer (int) moŝe być 32 bądź 64 bitowy, zaleŝnie od procesora bądź kompilatora. W Javie taka sytuacja nie ma miejsca. Dzięki tak dobrze określonemu środowisku pracy programu, a takŝe interpretacji kodu przez Maszynę Wirtualną Javy programy w Javie są całkowicie przenaszalne. Skompilowany program (w Javie) moŝna uruchamiać na róŝnych systemach operacyjnych i procesorach.

Uruchamianie programów w Javie (3) 56 / 38 Dzięki interpretacji kodu przez Maszynę Wirtualną Javy: JVM posiada pełną kontrolę nad realizacją wszystkich funkcji programu i nad dostępem programu do zasobów (pliki, pamięć operacyjna) systemowych Osiągnięto wysoki poziom bezpieczeństwa, co ma szczególne znaczenie w przypadku aplikacji internetowych Java posiada mechanizm automatycznego czyszczenia pamięci (Garbage Collection) i obsługi wyjątków co zapewnia większą stabilność działania tworzonych aplikacji oraz wygodę programowania.

Uruchamianie programów w Javie (4) 57 / 38 Dzięki kompilacji: Programy w Javie działają szybciej niŝ w przypadku innych języków interpretowanych Istnieje moŝliwość statycznej kontroli błędów (jeszcze przed uruchomieniem programu) Dzięki interpretacji kodu bajtowego: WyŜszy poziom bezpieczeństwa, stabilności, przenośność Java jest wolniejsza od np. C/C++ co jednak moŝe nie mieć większego znaczenia w przypadku np. aplikacji sieciowych, bądź graficznych systemów interakcji z uŝytkownikiem (GUI)

Podstawy programowania w Javie 58 / 38 Pliki źródłowe muszą mieć rozszerzenie *.java, np. HelloWorld.java Kod programów w Javie jest pogrupowany w tzw. klasy - umownie przyjmując, są to bloki rozpoczynające się od słowa kluczowego class (zwykle poprzedzonego tzw. modifikatorami np.: public, static, abstract, final) i ograniczone nawiasami { }, jak na przykładzie: //tu nie moŝna wstawić funkcji, deklaracji zmiennych itp. public abstract class Figura { } //tu jest miejsce na kod programu czyli wewnątrz klasy //tu moŝna wstawić kolejną klasę, zalecane jest jednak //umieszczanie klas w oddzielnych plikach

Podstawy programowania w Javie (2) 59 / 38 Klasa moŝe posiadać (statyczną) metodę main, która jest wywoływana z poziomu interpretera (Maszyny Wirtualnej) w chwili uruchomienia programu Argumentem wejściowym metody main jest tablica obiektów typu (klasy) String parametry wywołania Tablica w Javie jest obiektem (wyraźna róŝnica w stosunku do C/C++), pole length wyznacza ilość elementów tablicy class Argumenty { } public static void main( String[] args ) { } System.out.println( "liczba parametrów = " + args.length );

Podstawy programowania w Javie (3) 60 / 38 Na zewnątrz klasy mogą pojawiać się właściwie jedynie dwa rodzaje dyrektyw: - package - moŝe wystąpić raz, na samym początku pliku - import - moŝe wystąpić jeden lub więcej razy package pro2; import java.util.date; public class TestDaty { public static void main( String[] args ) { System.out.println( "Data: " + new Date() ); } }

Podstawy programowania w Javie (4) 61 / 38 Klasy w Javie pogrupowane są w tzw. pakiety, które moŝna traktować jako odpowiedniki bibliotek z C/C++. Pakiety tworzą strukturę hierarchiczną. W Javie istnieje zaleŝność między nazwami i hierarchią pakietów a strukturą plików na dysku. KaŜdy pakiet posiada swój katalog (nazwa katalogu zgodna z nazwą pakietu). Dyrektywa package oznacza przynaleŝność klasy do danego pakietu. Pakiety i klasy Javy są często przechowywane w plikach *.jar (Java archive) w postaci skompresowanej zajmują mniej miejsca na dysku (patrz %JAVAHOME%/jre/lib/rt.zip).

Podstawy programowania w Javie (5) 62 / 38 Kilka najwaŝniejszych pakietów standardowych Javy: java.lang definiuje standardowe elementy języka java.util struktury danych (listy, wektory, listy posortowane), obsługa daty i czasu, kompresja ZIP java.io strumienie we/wy, obsługa plików java.awt tworzenie GUI, grafika 2D java.applet tworzenie apletów Firma Sun udostępnia bardzo szczegółową i przejrzystą dokumentację dla wszystkich pakietów i klas J2SE. Zdecydowanie zalecam pobranie dokumentacji ze strony www.java.sun.com i zapoznanie się z jej zawartością.

Podstawy programowania w Javie (6) 63 / 38 Standardowo aplikacja ma dostęp do wszystkich klas z pakietu java.lang (np. System, String, Integer, Math). Dyrektywa import moŝe wystąpić wielokrotnie - przydaje się w momencie, gdy w programie uŝywane są klasy naleŝące do innych pakietów (niŝ aktualny pakiet, bądź java.lang). Przykład: do klasy Date moŝna odwoływać się za pomocą jej pełnej nazwy, czyli java.util.date, bądź teŝ umieścić na początku programu polecenie import java.util.date (lub import java.util.* ) i posługiwać się skróconą nazwą klasy czyli po prostu Date.