Katedra Inżynierii Wiedzy, Uniwersytet Ekonomiczny w Katowicach Wykład 2
Java Foundations Classes przyciski; pola tekstowe; panele; okna dialogowe; biblioteka Swing.
Metodyka (paradygmat) programowania - czyli? Metodyka (zwana też często paradygmatem) to ustandaryzowane dla wybranego obszaru podejście do rozwiązywania problemów. sposób programowania oparty na mechanizmach udostępnianych przez wybrany język programowania; w związku z odmiennym przeznaczeniem języków programowania mogą występować istotne różnice pomiędzy poszczególnymi paradygmatami; środowisko przeważnie nie narzuca paradygmatu; dobór odpowiedniej metodyki zależy od rozwiązywanego problemu;
Nadtypy paradygmatów Programowanie stacjonarne - tworzenie programu, uwzględniającego obliczenia wykonywane przez jeden procesor; Programowanie rozproszone - tworzenie programu, uwzględniającego obliczenia wykonywane bez współdzielenia zasobów obliczeniowych (współdzielenie danych - często rozproszonych); Programowanie równoległe - tworzenie kodu z uwzględnieniem obliczeń wykonywanych przez więcej niż jeden procesor. Konieczność synchronizacji i komunikacji;
Typy paradygmatów Programowanie imperatywne - słynna instrukcja goto ; Przykłady języków: Algol, Fortran, Pascal, C. Programowanie funkcyjne - Haskell (Wartościowanie leniwe); Programowanie opisowe - VHDL (język opisu i projektowania układów cyfrowych); Programowanie logiczne - Prolog (fakty i reguły);
Podstawowe rodzaje metodyk Programowanie liniowe - całość programu jest postrzegana jako jeden, ciągły blok; Programowanie proceduralne - dekompozycja problemu. Blok główny to szkielet programu, a poszczególne procedury i funkcje są wywoływane w określonej kolejności; Programowanie funkcyjne - wynik w programowaniu funkcyjnym otrzymywany poprzez złożenie funkcji. Przykładowo pętla zastępowana jest poprzez rekurencję. Programowanie obiektowe - klasa, obiekt, metoda, pole, enkapsulacja. Programowanie generyczne - programowanie uogólnione. Programowanie agentowe - dekompozycja kodu i wydzielenie zadań dla osobnych podprogramów/wątków/procesów.
Krótko o Javie typy proste; typy referencyje; deklaracja zmiennych; instrukcje sterujące; rzutowanie; metody i zwracane typy; zasięg zmiennych; obiekty i dziedziczenie; interfejsy.
Java vs C# Java to aplikacje przenośne; C# wydajniejsze; C# bardziej rozbudowane środowisko i sporo narzędzi ułatwiających pracę; W C# typy proste to też obiekty, natomiast w Javie trzeba je najpierw opakować (np. klasa Double, lub Integer); W Javie nie można w prosty sposób definiować typów prostych (w C# mamy struct); trzeba uważać na obsługę tablic w Java odwołujemy się do pierwszego wymiaru, a potem do drugiego.
Programowanie obiektowe klasa a obiekt; konstruktor (domyślny, parametrowy, kopiujący); pola prywatne a pola publiczne; metody klasy; klasy statyczne i pola statyczne.
Co dobrze będzie znać? podstawy klas i obiektów; dziedziczenie (większość komponentów dziedziczy po innych elementach); podstawy liczb losowych (pseudolosowych); tablice statyczne (oraz dynamiczne);
Kolekcje lista (java.util.list) - każdy element ma przyporządkowany numer kolejny(indeks). Możliwość dodawania nowych elementów oraz pobierania wartości elementu na danej pozycji; kolejka(java.util.queue) - lista umożliwiająca obsługę mechanizmu FIFO oraz LIFO; mapa (java.util.map) - przechowuje mapowania klucz-wartość, przy czym klucz jest unikalny.
Rysunek: Hierarchia Collections. Źródło: wazniak.mimuw.edu.pl
Nieco dokładniej - listy ArrayList - stosowana kiedy kluczowy jest czas dostępu do danych, ale liczba dodawanych elementów jest niewielka; LinkedList - wersja z powiązanymi elementami - stosowana, kiedy liczba operacji takich jak usuwanie, czy dodawanie będzie duża; ArrayList oraz LinkedList są implementacjami interfejsu List; kiedy używamy Array a kiedy Linked? - jeżeli nie jesteśmy pewni, to raczej mamy użyć ArrayList; w przypadku listy typu Linked pobranie elementu ma złożoność równą O(1).
Nieco dokładniej - kolejka kolejka LIFO - Last In First Out; kolejka FIFO - First In First Out; kolejka priorytetowa - kolejka z ustaloną strukturą relacji pomiędzy elementami; kolejki udostępniają mechanizm dodawania oraz pobierania elementu z głowy (języki funkcyjne np. Haskell i podział listy na głowę oraz ogon);
Nieco dokładniej - mapa mapa formalnie jest kolekcją; przechowują pary elementów klucz-wartość; wartości moga się powtarzać, natomiast obiekty-klucze muszą być unikalne w obrębie całej mapy; TreeMap - przechowuje elementy, które są posortowane według klucza; HashMap - funkcja HashCode, czyli zwrócenie liczby całkowitej dla obiektu swojego typu.
Wybrane operacje na kolekcjach boolean Add(Object o); boolean Remove(Object o); boolean Contains(Object o); boolean removeall(collection coll); int Size().
Rysunek: Klasa Object i zastosowanie
Klasa Interfejs wszystkie metody są zaimplementowane. wszystkie metody są abstrakcyjne. Klasa abstrakcyjna niektóre metody są zaimplementowane; niektóre metody są abstrakcyjne.
Interfejsy tworzony przy pomocy słowa kluczowego interface; dokładny opis czynności(metod), które dana klasa powinna robić; brak opisu, w jaki sposób ma zostać zrealizowane dane zadanie; np. metoda Sortuj(int[] tablica) - wymusza na nas zaimplementowanie metody sortowania dla tablicy typów int. Nie ma jednak informacji na temat tego, czy ma to być quicksort, czy też sortowanie bąbelkowe; klasa implementująca dany interfejs może posiadać dodatkowe metody charakterystyczne tylko dla niej; adnotacja @Override - a więc wskazanie w klasie implementującej metodę danego interfejsu, iż nadpisujemy tę metodę; interfejs może być używany jako ogólniejszy typ - nadklasa dla innych klas, np. interfejs Pojazd, a dalej: Rower jest implementacją interfejsu Pojazd.
Klasy abstrakcyjne mogą zawierać metody abstrakcyjne; mogą zawierać zwykłe metody posiadające określone funkcjonalności; mogą zawierać stałe; metod abstrakcyjnych nie można oznaczyć jako statycznych; nie można stworzyć konkretnej instancji klasy abstrakcyjnej;
Rysunek: Okno projektowania
Rysunek: Dostępne elementy Swing
Kontenery najwyższego poziomu JFrame reprezentuje okno główne aplikacji; JFrame zawiera obszar, w którym przedstawione zostaną wszystkie pozostałe komponenty; w szczególności konieczne jest ustalenie wielkości okna (możliwości zmniejszania / zwiększania obszaru roboczego, czy tez tytułu okna); Obiekt klasy JFrame może zostać utworzony z głównej klasy projektu zawierającej tylko metodę main (punkt wejścia do aplikacji), lub utworzony wewnątrz głównego pliku w projekcie.
Kontenery najwyższego poziomu II kontener najwyższego poziomu traktowany jest w aplikacji jako singleton powinniśmy mieć tylko jedną instancję tego obiektu; kontener JFrame może być (poprzez dziedziczenie) rozszerzony o dodatkowe elementy; kontener JFrame może zawierać mniejsze kontenery - JPanel, które pozwalają grupować elementy; położenie komponentów w JFrame może być ustalone bezwzględnie, lub względem innych elementów (analogicznie jak w przypadku interfejsów mobilnych); w przypadku (niezalecanego) układu z położeniem bezwzględnym sugerowane jest przyjęcie stałego i niezmiennego rozmiaru całej aplikacji; zarządzanie położeniem elementów wewnątrz kontenera odbywa się przy pomocy layout managera (np. flow manager, grid manager).
Dziękuję za uwagę