Języki i paradygmaty programowania
(JIPP)
dr hab. inż. Adam Niewiadomski, prof. nadzw.Informatyka, III sem.
studia dzienne inżynierskie PWSZ we Włocławku
Program przedmiotu
● 1 część semestru (ok. 4-5 wykładów)– OOP i inne techniki programowania (zarys)– Generacje języków programowania– Trójwarstwowa architektura aplikacji
● W. danych, w. logiki, w. Interfejsu użytkownika– Fazy życia oprogramowania
● 2 część semestru (ok. 8-9 wykładów)– Język Java (Aplikacje konsoli, graficzny interfejs
użytkownika, aplikacje okienkowe)● Programowanie obiektowe, zorientowane obiektowo,
programowanie komponentowe, klasa-obiekt-komponent
http://ics.p.lodz.pl/~aniewiadomski
Cykl slajdów nie stanowi kompletnego opracowania, a zwłaszcza nie jest skryptem zastępujacym wykład. Należy traktować go wyłącznie jako zbiór notatek ułatwiajacych słuchaczom udział w zajęciach.
Slajdy można przetwarzać pod warunkiem nienaruszania praw autora, w szczegolnosci (ale bez ograniczenia do) rozpowszechniania całosci lub fragmentów w jakiejkolwiek formie bez zgody autora.
Cykl inżynierii oprogramowania (1)
● Algorytmy i złożoność obliczeniowa– Struktury danych, tablice, pętle, instrukcje
warunkowe i skoku, sortowanie, wyszukiwanie elementów w tablicach itp.
● Podstawy programowania– Programowanie proceduralne – instrukcje
sterujące, implementacja podstawowych algorytmów, tablice i dynamiczne struktury danych, kompilacja, praca krokowa, debugging
– Projektowanie klas, obiektów i ich funkcji składowych, dziedziczenie klas
Cykl inżynierii oprogramowania (2)
● Języki i paradygmaty programowania– Techniki i generacje języków programowania– Trójwarstwowa architektura aplikacji– Fazy życia oprogramowania (zarys)– Trójwarstwowa architektura aplikacji i jej realizacja
w języku Java– Obiekt – klasa – komponent jako powtarzalne
(reusable) fragmenty kodu● Wykorzystanie technik OOP i komponentów do produkcji
aplikacji niezależnych sprzętowo z tekstowym i/lub graficznym interfejsem użytkownika (GUI)
Cykl inżynierii oprogramowania (3)
● Inżynieria oprogramowania– Analiza i projektowanie obiektowe, język UML
(najprawdopodobniej)● Założenie: słuchacz najpierw poznaje techniki
implementacji, później uczy się stosować je na szerszą skalę i uzależniać od nich pozostałe fazy projektu informatycznego– ''Od szczegółu do ogółu'' – Zależy to także od pozostałych przedmiotów
● Bazy danych, sieci komp., bezpieczeństwo systemów, programowanie aplikacji klient-serwer, podstawy programowania sieciowego, itp.
Bibliografia, czyli literatura
Java – przegląd, obiektówka i aplety
K. Arnold, J. Gosling, Java, WNT 1999, 42 złJava ogólnie, zwłaszcza aplikacje konsoli
Eckel B.: Thinking in Java. Helion, 2001, 90zł
http://java.sun.com ics.p.lodz.pl/~aniewiadomski
– Dział ,,Dydaktyka'', JiPP
Klasy systemów informacyjnych
● ERP - Enterprise Resource Planning system informatyczny zarządzający działalnością przedsiębiorstwa jako całością– SAP, IFS, JEEVES, INFOR MAX+, Symfonia
Forte, Impuls BPSC● ERP = MRP I + MRP II
– MRP I (Material Resource Planning)● planowanie materiałowe
– MRP II (Manufacturing Resource Planning)● planowanie produkcyjne
Standardowe moduły ERP
● Produkcja● Logistyka● Księgowość● Magazyn● Sprzedaż● Zakupy
– czego brakuje ???
Rozwój ERP
● ERP są zwane "Back-office" - bo przeznaczonetylko dla personelu w odróżnieniu od
systemów klasy ● CRM Customer Relationship Management
– Pewne zasoby dostępne są także dla klientów, np. za pośrednictwem WWW
● Rozwój --> ERP II ''wychodzą poza przedsiębiorstwo''
● ECR = Obsługa konsumentow i dostawców (Efficient Consumer Response)
Rozwój ERP cd.
● SCM = Zarządzanie Łańcuchem Dostaw (Supply Chain Management)
● RFID Radio Frequency Identification - w systemach kontroli przepływu produktów/towarów w oparciu o fale radiowe – np. System Automatycznej Identyfikacji Towarów
(SAIT)
Fazy życia oprogramowania
1.Analiza wymagań użytkownika2.Projektowanie3.Implementacja 4.Testy i wdrożenie 5.Konserwacja i reengineering
Fazy te moga po sobie nastepować wg różnych cyklów, np. kaskadowego, kaskadowego z powrotami, spiralnego, itp.
● Dane – jakie informacje przetwarza system?– Typy danych, formaty, konwersje
● Użytkownicy – kto ma korzystać?– Grupy i ich prawa dostępu
● Warunki odbiorcy – gdzie system ma działać?– Sprzętowe, lokalowe, finansowe
● Czy firma ma już system?– Jaki? Za ile? Od kiedy? Co chcą zmienić?
1. Analiza wymagań użytkownika
2. Projektowanie – warstwa danych
● Baza danych– tabele, kwerendy, relacje, więzy integralności– Formy normalne tabel, normalizacja
● Prawa dostępu do tabel– Który użytkownik które dane widzi i/lub przetwarza
● Zgodność z normami prawnymi– Jawność/tajność informacji, prawo publikowania – Ochrona danych osobowych
● Zwłaszcza danych wrażliwych
2. Projektowanie – warstwa logiki
● Procesy, podprocesy – funkcje systemu– np. zaloguj się = sprawdź login + sprawdź hasło +
wyświetl zawartość konta użytkownika● Przepływ danych
– Dane wejściowe i wyjściowe– Jak przetwarzać dane? – Gdzie przechowywać dane wynikowe?
● Algorytmy – specyfikacje procesów– Rysunki, pseudokod, język naturalny
2. Projektowanie – interfejs użytkownika
● Interfejs (ang. interface) – metoda komunikowania się programu z użytkownikiem
● Interfejs tekstowy– DOS, Norton Commander, Linux Console– Szybko działa, ale wymaga znajomości komend
● Interfejs graficzny – Windows, KDE, Gnome– Wolniejszy, ale intuicyjny w obsłudze
2. Projektowanie – interfejs użytkownika (2)
● Interfejsy graficzne– Okienkowy – dla osobnych aplikacji– Okienkowy – dla aplikacji – Przeglądarka internetowa – dla aplikacji klient-
serwer● Przed zaprojektowaniem interfejsu
trzeba znać możliwości odbiorcy !– Sprzęt i system operacyjny– Stopień wyszkolenia personelu
3. Implementacja
● Zapis ustaleń projektowych w języku/językach programowania– Warstwy danych– Warstwy logiki– Warstwy interfejsu użytkownika (-ów)
● Metodyka obiektowa lub proceduralna● Od metody implementacji bardzo
silnie zależą fazy analizy i projektu (koszty!!! - obiektowo czy proceduralnie??)
4. Testy i wdrożenie
● Wdrożenie systemu informacyjnego – uruchomienie w docelowym środowisku działania, dla docelowej grupy użytkowników i wykonującego docelowe zadania– Środowisko = platforma + otoczenie (np. budynek,
inne instalacje)– Platforma = sprzęt + system(y) operacyjny(-e)– Zadania = przetwarzanie rzeczywistych danych
pod rzeczywistym obciążeniem– Wersje językowe – lokalizacja oprogramowania
4. Testy i wdrożenie (2)
● Szkolenie personelu– Szkolenie bezpośrednie lub pośrednie– Szkolenie w trakcie testowania (system celny)
● Dokumentacja techniczna– Systemy pomocy ''Help'', instrukcje obsługi, – Warunki eksploatacji i konserwacji– Warunki serwisu i gwarancji
4. Testy i wdrożenie (3)
● T. regresyjne [Roszkowski, 2004]
– Po zmianach, ''czy nie zmieniono za dużo''● T. operacyjne
– Testy długookresowe, pomiar niezawodności● T. pełnozakresowe
– Przy pełnym obciążeniu systemu● T. wydajnościowe
– Pomiary szybkości, wydajności (sprzęt !!)
4. Testy i wdrożenie (4)
● T. negatywne– Świadome wprowadzanie błędów
● T. ergonomiczne– Czytelność i wygoda interfejsów
● T. dokumentacji użytkownika– Czytelność ''helpów'', zgodność ze stanem faktycznym
● T. akceptacyjne– Testy ostateczne, ''kupić czy nie kupić''
● Testy bezpieczeństwa !!!
4. Testy i wdrożenie (5) - koszty
● Sprzęt: serwer bazy danych, stacje robocze użytkowników - klienci (PC, laptopy, palmtopy), odpowiednia infrastruktura (sieć, komputerowa, telefony komórkowe)
● Oprogramowanie: licencja na systemy operacyjne serwera i stacji roboczych, licencja na serwer baz danych, licencja na oprogramowanie.
● http://www.logistyka.net.pl/ – A. Stachowicz-Stanusch, M. Stanusch
4. Testy i wdrożenie (6) - koszty
● Wdrożenie: analiza przedwdrożeniowa, parametryzacja systemu, ewentualne modyfikacje systemu, instalacja, połączenie z istniejącymi systemami informatycznymi przedsiębiorstwa, szkolenie, próbna eksploatacja, nadzór nad pełną eksploatacją
● Serwis: umowa stałej opieki serwisowej– Zalicza się do następnej fazy, ale umowa
zawierana jest przy wdrożeniu
5. Eksploatacja i konserwacja systemu
● ''Odśmiecanie'' baz danych– Nieaktywni użytkownicy– Dereplikacja wpisów
● Obserwacja rejestrów zdarzeń (tzw. logów)– Login, logout, awarie, zamknięcia sesji– Nowi użytkownicy, modyfikacja uprawnień
● Dbałość o bezpieczeństwo– Wykrywanie ataków– Aktualizacja zabezpieczeń– Kontrola dostępu
Administrowanie systemem
5. Reengineering (2)
● Reengineering – inżynieria wtórna● Service packs, aktualizacje, ''łaty'' - patches● Uwagi do następnej wersji systemu
– Funkcje zbędne, nie używane, powielające się– Funkcje pożądane, nowe lub o zmienionym działaniu,
itp.● Reinstalacja systemu (skrajny przypadek)
***Wszystkie powyższe czynności potocznie określa
się mianem ''support'' – wsparcie
Architektura aplikacji ● Model trójwarstwowy
– Warstwa danych– Warstwa logiki aplikacji– Warstwa interfejsu użytkownika
● Model-View-Controller – wzorzec projektowy, design patern
● Aplikacja <= System informacyjny– Aplikacja ,,nie zawiera'' sprzętu
● Synonimy ,,aplikacji'': oprogramowanie, software, ● Inne architektury/modele
– np. Web Services – 4 warstwy: jw. + usługa sieciowa, odpowiedzialna za zbieranie danych rozproszonych,
● Na rożnych serwerach, w różnych kopiach tej samej bazy
Trzy warstwy aplikacji – przykład
//--------- dane -------------------int tab[] = new int[N];tab[0] = 43;tab[1] = 11; ..... tab[N] = 30;
//--------- logika ------------------for (i=0; i<N-1; i++)
for (j=0; j<N-i-1; j++)if (tab[j]>tab[j+1])
bufor = tab[j];tab[j] = tab[j+1];tab[j+1] = bufor; }
//--------- interfejs użytkownika -------for (i=0; i<N; i++)
cout<< tab[i]; // System.out.println(+tab[i]);
A. trójwarstwowa – warstwa danych
● Warstwa danych – przechowuje dane w sposób pasywny, nie implementuje procedur dostępu do danych ani ich przetwarzania
● Wykonuje zlecane przez warstwę logiki podstawowe operacje:– Read np. SELECT– Write np. INSERT– Modify np. UPDATE– Delete np. DELETE
● W tym sensie ''bazy'' w Accessie nie są tylko zbiorami danych, ale całymi aplikacjami
Arch. trójwarstwowawarstwa danych (2)
● Technologie tworzenia warstwy danych– SQL ''bezpośrednio''– narzędzia graficzne
generujące kod SQL, np. OpenOfficeBase
– diagramy związków encji (Entity Relationship Diagram
● Ok. 95 % baz – relacyjne– 5 % inne (obiektowe,
sieciowe, hierarchiczne)
Arch. trójwarstwowa – logika aplikacji
● Warstwa logiki – metody przetwarzania danych, funkcje, procedury, procesy, usługi...
● ...operujące na danych z bazy, przetwarzające je i przekazujące do bazy, do innych procesów/funkcji lub do interfejsu użytkownika
● Szczegółowe określenie (specyfikacja) tej warstwy wymaga algorytmów w postaci schematów blokowych lub pseudokodów
● Technologie: 3GL – Pascal, Cobol, Fortran, C/C++, Java, PHP; 4GL – LISP, Prolog
Arch. trójwarstwowa – warstwa interfejsu użytkownika
● Zespół operacji odpowiedzialnych za kontakt z użytkownikiem, – Wizualizacja (wyświetlanie) rezultatów procesów– Pobieranie danych i kontrola ich poprawności– Przyjmowanie poleceń użytkownika
● Interfejsy– Tekstowe– Graficzne (Graphical User Interface, GUI)– Przeglądarki WWW (wymaga formatowania
HTML-em danych wyjściowych)● PHP, VBScript, ActionScript, XML Flash,
HTML+CSS+JavaScript+DOM=DHTML
Warianty arch. trójwarstwowej
● Aplikacja typu ''Desktop''– Aplikacja ''biurkowa'', bez połączenia z siecią– Całość kodu wykonuje się na stacji roboczej– Aby działać nie musi łączyć się z innymi systemami
● Aplikacja klient-serwer – dwa systemy (programy, maszyny, platformy) komunikujące się ze sobą w celu wykonywania zadanych operacji– Thick client, gruby klient - interfejs + logika u klienta,
a dane na serwerze – Thin client, cienki klient – interfejs u klienta, a logika
i dane na serwerze
Gruby klient
<html> <body> <p>Zaloguj sie: </p> <form method="post"> <input type="text" value="wpisz login"> <input type="password" name="haslo"> <input type="submit" onclick='javascript: if (haslo.value == "mojehaslo") document.write("witamy !!!"); else document.write("ZLE !!!");'>
</form> </body></html>
Przykład ,,thin client”
Przykłady arch. trójwarstwowej
● Sortowanie tablicy● Google● Program pocztowy● Word, Paint, Corel● www.onet.pl, www.interia.pl
– Jakie dane? Jaka logika? Jaki interfejs?
Technologie wytwarzania aplikacji Desktop (1)
Kod maszynowy (1GL) i assemblery (2GL)sterowniki
Języki 3-ciej generacji (3GL)– Cobol, Fortran, Basic (programy obliczeniowe)– Pascal, C/C++, Java (programy użytkowe)– Visual Basic (aplikacje Office – Excel, Word,
OpenOfficeOrg)Dokumenty doc, xls, odt, odp nazywam tu aplikacjami
ze względu na występujące w nich elementy interaktywne, np. formularze, przyciski, kontrolki itp.
Technologie wytwarzania aplikacji Desktop (2)
Języki 4-ej generacji (4GL)– SQL – relacyjne bazy danych – Prolog, Lisp – Systemy Sztucznej Inteligencji– TeX, LaTeX, BibTeX – skład drukarski
\documentclass[a4paper,11pt,bf,small,twoside]{itic} %{{{\usepackage{graphicx}\begin{document}
\title{INTERVAL-VALUED LINGUISTIC SUMMARIZATION OF~DATA}\author{ \textbf{Adam \uppercase{Niewiadomski}} }
Języki i metody wizualne– Corel – dokumenty i aplikacje graficzne– PowerPoint, OpenOfficeImpress – prezentacje
Technologie wytwarzania aplikacji klient-serwer (1)
● Gruby klient– Applety
● Interfejs = Java+ HTML, przeglądarka● Logika = Java (plik *.class ładowany do Temp)● Dane = Serwer WWW przechowujący kod
<applet code=”kod_appletu.class” width=200 height=200>
– ActiveX skaner MKS● Interfejs = C++, ActiveX,● Logika = C++● Dane = Serwer WWW przechowujący kod
Technologie wytwarzania aplikacji klient-serwer (2)● Cienki klient
– PHP Allegro● Interfejs = DHTML przeglądarka● Logika = PHP, serwer Apache● Dane = Serwer MySQL
– JSP www.gazeta.pl● Interfejs = jw.● Logika = Java, serwer Tomcat● Dane = Postgress (???)
– CGI Wirtualna Polska● Interfejs = jw.● Logika = Perl ... ● Dane = ....
– ASP, ASP.NET, .NET - www.microsoft.com – Ruby, RubyOnRails
Java – historia (1)
● James Gosling – pomysł stworzenia języka niezależnego od sprzętu (ściślej: od platformy)(Sun Microsystems – California, 1990)– Pierwsza nazwa – OAK (okazała się zastrzeżona)– Pierwotne przeznaczenie – interfejsy urządzeń AGD
i audio-video– Modyfikacje i nowe modele sprzętu wymagały
częstych zmian oprogramowania – koszty ! ● np. telefony komórkowe
Java – historia (2)
● Niezależność sprzętowa znalazła zastosowanie w usłudze WWW
● 1993 pierwsza przeglądarka WWW, HotJava, która obsługiwała programy w Javie, jednak nadal było to rozwiązanie lokalne Suna, gdyż inne firmy nie wytwarzały oprogramowania zgodnego z tym standardem
● 1995 przeglądarka Netscape Navigator 2.0 obsługuje Applety Java, co ustanowiło przyjęcie rozwiązania dotąd lokalnego jako ogólnego standardu (!)
Zależność aplikacji od sprzętu
● Program zależny od platformy
Źródło C/C++
Kompilator Windows
Kompilator LINUX
Kompilator DOS
*.EXE Windows
*.bashLINUX
*.exe DOS
Sys. OpLINUX
Sys. OpWindows
Sys. Op DOS
Zależność od platformy na przykładzie programów w C/C++
● Program w wersji źródłowej wymaga kompilacji i konsolidacji (linkowania) z bibliotekami zgodnymi z daną platformą
● Formaty plików pośrednich i wynikowych są inne dla poszczególnych platform (np. *.obj, *.exe, *.dll)
● *.exe zawiera listę instrukcji danego procesora ● Zatem: na każdy sprzęt konieczny jest inny
kompilator, linker oraz zestaw bibliotek– Duże koszty, – brak przenośności źródeł oraz gotowego
oprogramowania
Niezależność sprzętowa aplikacji
● Program niezależny od sprzętu
Źródło *.java
plik(i) *.class czyli Bajt-kod
JVM Win2K
JVM Linux
JVM DOS
Kompilator
PlatformaLINUX
PlatformaWindows
Platforma DOS
*.class
*.class
*.class
.............
Niezależność oprogramowania od platformy
● Kod źródłowy kompilowany jest zawsze tą samą metodą i łączony z tymi samymi bibliotekami
● Jest to możliwe, gdyż plik wynikowy *.class (tzw. kod pośredni, bajt-kod) zawiera instrukcje dla programu wykonującego, a nie bezpośrednio dla procesora
● Program wykonujący (interpreter) odpowiada za przetłumaczenie poleceń z pliku *.class na rozkazy danego procesora
● Technologie – .net (C#, J#, VB.net) – Ruby, RubyOnRails
są innymi niż Java przykładem tworzenia oprogramowania niezależnego od sprzętu
Java Virtual Machine
● Wirtualna Maszyna Javy● __Interpreter bajt-kodu__ (czyli poleceń
w plikach *.class)● JVM działa analogicznie jak procesor
przetwarzający kod w pliku .EXE● Istnieją implementacje na praktycznie wszystkie
platformy– np. Windows – środowisko uruchomieniowe JRE – j2re-1_6_0_11-windows-i586.exe
Biblioteki
● Niezależność sprzętowa to także biblioteki● Niezależne od platformy zbiory klas i ich
metod składowych, czyli tzw. API– Application Programming Interface
● http://java.sun.com/j2se/1.4.2/docs/api/● Pakiet to zbiór klas, gdzie
– nazwa pakietu = nazwa katalogu– nazwa klasy = nazwa pliku
● Pakiety na dysku są rozpakowane (katalogi z plikami *.class) lub ''spakowane'' do plików.jar (java archive)
Plusy niezależności sprzętowej (1)
Szerokie zastosowania w Internecie– Zamieszczając aplet Javy na stronie nie trzeba
myśleć o tym jaki komputer ma odbiorca Mały rozmiar kodu wynikowego
– 1kB appletu *.class vs. ok. 200kB .exe drukującego jedną linię tekstu
● Jedna metoda kompilacji i jeden zestaw pakietów– Kod klas i funkcji bibliotecznych jest odczytywany
przez JVM, a nie przez różne procesory, a więc działa podobnie
Plusy niezależności sprzętowej (2)
● Na 1 dobry program napisany w C++ przypada 3,7 złych programów. W Javie proporcja ta wynosi 1,7.
●
● Napisanie programu w Javie zajmuje średnio 3 krotnie mniej czasu.● Programy w Javie są nawet 2-3 krotnie krótsze
(nie licząc komentarzy Javadoc)
Minusy niezależności sprzętowej (1) Spowolnienie działania (dodatkowy program między
procesorem a kodem)– Plik *.class nie jest bezpośrednio odczytywany
przez procesor, ale przez program interpretujący, czyli JVM
● Programy Javy ładują się 6-krotnie wolniej.– Program napisany w Javie potrzebuje statystycznie
2-3 krotnie więcej RAM niż napisany C++ i działa do 10x wolniej
Minusy niezależności sprzętowej (2)
Konieczność zainstalowania JVM przy pierwszym uruchomieniu programu– Przy wolnym łączu uniemożliwiało to działanie
Javy Niemal całkowity brak współpracy z kodami w
innych językach– W C/C++ można było zlinkować do .exe funkcje
napisane np. w Pascalu i skompilowane do *.obj
Programowanie komponentowewykład 3
Informatyka, IV sem.studia dzienne
FTIiMS, PŁ
Programowanie komponentowe wymaga
Znajmości składni języka – każdy język programowania można poznać posługując się pewnym schematem
– Jakie są słowa kluczowe, jak buduje się wyrażenia, funkcje, zmienne, jak tworzy się typy danych, struktury danych, tablice, obiekty, itp.
Znajomości bliotek (obiektów, pakietów i komponentów)– Czy trzeba samemu tworzyć funkcje i struktury danych,
czy może wystarczy skorzystać z gotowych i zoptymalizowanych?
Znajomości narzędzi programistycznych – szybkość i wygoda tworzenia aplikacji
– Jak uruchomić kod w danym języku, jak poprawić błędy, jak wygenerować powtarzalne fragmenty kodu, praca krokowa, debugging
Kategorie składniowe Javy (1)
1. Słowa kluczowe – nazwy typów, instrukcji sterujących, stałych, operatorów, modyfikatorów dostępuNie można w ten sposób nazwać zmiennych,
funkcji, itp.Słowa zarezerwowane obejmują terminy
''reserved for future use'' – przewiduje się, że w przyszłych wersjach Javy wprowadzone będą nowe słowa kluczowe, a wówczas starsze kody mogłyby nie kompilować się w nowych środowiskach, np. w Java 7
Kategorie (2,3)
2. Separatory (9 szt.) ( ) { } ; , [ ] - oddzielają wyrażenia, bloki kodu, klasy- niektóre są także operatorami, np. [ ] operator
indeksowania tablicy
3. Komentarze// jednolinijkowy od znaku // do końca linii
/* Komentarz blokowy */
Kategorie (4) operatory
4. Operatorya. Priorytet, czyli ''kolejność wykonywania działań'', np. obiekt.tab[2*5]b. Wiązanie (prawe/lewe)
wiązanie lewe np. 2+3+4+5 kompilator oblicza kolejno(((2+3)+4)+5)wiazanie prawe, np. x=y=z=2, kompilator oblicza(x=(y=(z=2)))Od prawej wiążą operatory jednoargumentowe
i przypisania, pozostałe od lewej
Operatory c.d.
c. Ilość argumentów (1, 2 lub 3)!zmiennaLogiczna (1 argument)3*5, (2 argumenty)x<y ? x : y (3 argumenty)
d. Wartość (typ rezultatu) – następny slajde. L-wartość (ang. Left-value, L-value) -
każde wyrażenie, które może znaleźć się po lewej stronie operatora przypisania, np. X = 2, tab[1] = tab[2]
-ale nie: 5+=1 lub 5++, gdyż jest równoznaczne z 5=5+1 !!!!
Kategorie (4) operatory cd.Podział przybliżony pod względem typu
zwracanej wartości● Arytmetyczne + - * %
– Wynik jest typu jednego z operandów● Logiczne ! && ||
– Wynik true lub false● Przypisania = += -= *= ++ --
– Wynik jest typu lewego argumentu (czyli L-wartości)
●
Kategorie (4) operatory (podział przybliżony)
● Porównania == < >= – true lub false
● Bitowe & | ^ << >>>– Wynik jest typu jednego z operandów
● Przydziału pamięci new– Wynik jest typu referencyjnego
● Kontroli typu instanceof– Wynik logiczny
● Zalecane ćwiczenia!
Kategorie (5) Identyfikatory – nazwy
● stałe, czyli literały literały specjalne, np. polskie znaki
– znakowe (char, String) – ‘w’, ”Dziendobry”, ‘\xY’– liczb całkowitych (int, byte) – 100, 011, 0xFF00, 55L– liczb rzecz. (double, float) – 1.5, .6, 0.5f , 0.7D– logiczne (boolean) – true, false
● Są to także słowa zarezerwowane● zmienne x, i, nazwisko, checkbox1● typy Button, String, int, char
Identyfikatory (nazwy) funkcji
● np. init(), wyciagnijPierw(25);● Występują w trzech kontekstach
– Deklaracja, int funkcja(double x);
– Definicja = deklaracja + ciałoint funkcja (double x) {
// ciało funkcjireturn rezultat;
}– Wywołanie: użycie wartości funkcji
X = funkcja (3.14);
Sterowanie wykonaniem programu
● for, while, do..while – jak w C/C++– Oprócz np. while(1)
● Brak konwersji wyrażeń logicznych do int● Powinno być while(1==1)
● if..else,if..else if..else – jw.● switch..case..default – jw.● break, continue – jw. ● Przypisanie = (+=, -=, ......)
– Dokładnie jak w C/C++
Sterowanie... cd.bloki instrukcji (obowiązuje przesłanianie nazw zmiennych)
int x=2;
{
int y = 5;
System.out.println(""+y);
/// Bledem jest np. int x=3; Przeslania zmienna istniejącą
}
int y=3; // Nie jest to błąd – kompilator ,,zapomniał'' o y
System.out.println(""+y); //EFEKT ???
Typy danych w Jawie
Złożone
Typy danych
Proste
ObiektoweTablicowe
ProgramistyBiblioteczne
Typy proste(wbudowane, built-in, primitives)
● byte 1 bajt, stałoprzec. ze znakiem● short 2, int 4, long 8● char 2 kod znaku UNICODE
– możliwe zapisanie EOF
● boolean 1 bajt, true/false
● float 4 bajty, zmiennoprzecinkowa● double 8, jw.
Typy tablicowe ● TYLKO DYNAMICZNE !!!● Jednowymiarowa
– int tab [ ] = new int [6];Ale nie: int tab[6], bo nie ma tu rezerwacji
pamięci operatorem new
● Dwuwymiarowa– double tab [ ] [ ] = new double [10] [10];
Są to przykłady definicji tablic Trójwymiarowa boolean tab[ ][ ][ ]= ........
Typy obiektowe
● Biblioteczne– Button java.awt.Button– Date java.util.Date– ActionEvent java.awt.event.ActionEvent– String java.lang.String
● Własne – definicja klasy– Np. Macierz
class Macierz {definicja klasy, czyli pól i funkcji składowych
}
Zmienne – referencje (de facto: wskaźniki)
● Zmienna – miejsce w pamięci do przechowywania danych to miejsce ma swoją nazwę, jak to w językach imperatywnych 3-ej generacji, nie zaś adres
● Zmienne (tylko pola klas lub zmienne lokalne/formalne funkcji, brak zmiennych globalnych)
– automatyczne (tylko typy proste, kompilator sam rezerwuje pamięć i sam ją zwalnia)
● int x; char znak; – dynamiczne (rezerwacja pamięci operatorem new,
wszystkie typy obiektowe i tablice)– statyczne inicjalizacja wymagana przy deklaracji
● np. static int x = 5; //nie: static int x; ... x=5;
Zmienne – deklaracja, przydział pamięci, inicjalizacja● Deklaracja
int x, y=3;Button b1, b2;
● Rezerwacja pamięci (nie dotyczy typów prostych)b1 = new Button(”Kliknij tu!”);
● Inicjalizacjax = 25; // typy prostenapis = new String(”1.2.3.próba Stringa...”); // typy złożoneb2 = b1; // ŹLE - konstruktor kopiujący nie wywoła się,
zostaną przypisane ADRESY, nie WARTOŚCI, musi być:b2 = new Button(b1);
Konwencje zapisu kodu w Jawie
● Klasy – wielką literą, bez ‘C’ lub ‘T’ z przodu– Macierz, Button, String
● Zmienne – małą literą, bez podkreśleń– i, nazwiskoStudenta, iloscWierszyMacierzy– zmienna po ‘.’ jest polem jakiejś innej klasy
● obiekt.pole– zmienna po this jest polem bieżącej klasy
● this.pole // równoważne: pole, ale z this jest czytelniej– zmienna bez poprzedzającego selektora jest
argumentem formalnym funkcji lub zm. lokalną/pomocniczą
● pole
Standardy zapisu kodu... cd.
● Funkcje – czasownik małą literą, dopełnienie – wielką– getNumber, toString, add, róbCoś
● Nazwy pakietów – małą literą– java.awt; – java.mypackage.MyClass
● To klasa MyClass w pakiecie java.mypackage● Bloki { // początek bloku
// instrukcje } //koniec bloku
Notacja węgierska (Hungarian notation)Źródło: Bates: Poznaj Visual C++ 6.0, Appendix A
● b boolean bOdpowiedz● n short, int nWagaZawodnika● l long lRozmiarPliku● fl float flMojaPensja● d double dJegoPensja● bt Button przycisk● ch Checkbox pole wyboru● e Event zdarzenie● pt Point punkt
Różnice między C/C++ a Javą (1)
● Typy danych podstawowych niezależne od sprzętu – specyficzne dla JVM, a nie dla platformy
● Nie istnieje pojęcie wskaźnika– wszystkie zmienne typów prostych są wartościami
● int x=0; – wszystkie zmienne typów złożonych (tablicowych i
agregatów) są referencjami – wymagają dynamicznego przydziału pamięci
– operator * oznacza tylko mnożenie
– operatory .* , -> , :: nie istnieją
● this jest referencją
Różnice... (2)● Tablice tylko dynamiczne Kurs Tylocha, rozdz. 2.3.17
– tablica w Jawie jest obiektem● dziedziczy po Object, implementuje interfejs Cloneable
– deklaracja wymaga przydziału pamięci w zadanej ilości, poprzez podanie liczby elementów...
● String tab[ ] = new String[5]; – ...lub zbioru inicjalizującego wartości elementów
● int tablicaInt[ ] = {1, 2, 3, 4, 5};● String tab[ ]={new String(”pn”),new String(”wt”)...};
– Nazwa tablicy wraz z nawiasami [ ] jest L-wartością● tab[0] = ”niedziela”
Różnice... (3)
● Zwalnianie pamięci Kurs Tylocha, rozdz. 2.3.13
– Nie ma operatora delete– zwalnianiem pamięci zajmuje się funkcja System.gc()
(od ang. garbage collector)– funkcja ta wywoływana jest automatycznie co jakiś czas w
osobnym wątku, tylko wtedy, gdy nie ma nic innego ważniejszego do zrobienia (wątek ten ma b. niski priorytet)
– sprawdzane są wszystkie wartości w referencjach; jeśli w żadnej nie ma adresu danego obszaru pamięci, to obszar ten jest zerowany (rysunek)
Różnice... (4)
● Zwalnianie cd. – zwalnianie jawne– można wywołać jawnie funkcję
System.gc()– jeśli obiekt musi przed zniknięciem zwolnić
zasoby (np. pozamykać pliki), można nadpisać funkcję finalize(), odziedziczoną po java.lang.Object
● przykład: kurs Tylocha, rozdz. 2.3.12
● Wniosek: finalizer działa podobnie jak destruktor– dotyczy to także wywołań finalizerów klas-przodków
Różnice... (5)
● Brak możliwości przeciążania operatorów– operacje na niewbudowanych typach danych realizowane są
przez funkcje składowe o zwyczajowych nazwach, np.● == string1.equals(string2) rez. boolean● <=, >... string3.compareTo(string4) rez. int● = konstruktory klas
– wszystkie przeciążone operacje przypisania zastąpione są przez konstruktory kopiujące
String tekst1 = new String (innyString);
String tekst2 = tekst1;//przepisanie ADRESU !!
String tekst2 = new String (tekst1); //działa jeśli istnieje konstruktor kopiujący
Konstruktor kopiujący (5')
● K. kopiujący klasy A w C/C++ - konstruktor, który można wywołać z jedynym parametrem będącym referencją do obiektu klasy A– Pozostałe parametry mogą być domyślne
● W Javie nie ma domyślnych parametrów funkcji● K. kopiujący w Javie ma tylko jeden parametr● Jeśli konstruktor w Javie odwołuje się do
konstruktora klasy bazowej, – to robi to poprzez słowo super, koniecznie w
pierwszej linii pod nagłówkiem, patrz Różnica (9)– Brak list inicjalizacyjnych
Komentarz
● Różnice 1 – 5 mają znaczny wpływ na budowę wyrażeń w Javie i, w ogólności, na konstrukcję kodu i działajacych programów. Ich przyswojenie jest istotne z punktu widzenia eliminacji nawyków z C/C++ (nawyków niewłaściwych w Jawie)
Różnice... (6) dostęp do klas, pól i metod
Dostęp do klas, pól i metod Kurs Tylocha, rozdz. 2.3.4– w Jawie obowiązuje tzw. dostęp pakietowy– Pakiet, podstawowa jednostka, jest katalogiem plików *.class – w jednym pliku *.java znajduje się jedna klasa publiczna
● mogą być inne klasy, ale niepubliczne przykład
– po kompilacji w jednym pliku *.class znajduje się jedna klasa– Przypisanie klasy do pakietu odbywa się instrukcją
● package nazwa_pakietu ; przykład
– położenie plików w pakietach określa zm. środ. CLASSPATH● przykład dla CLASSPATH = C:\WINNT\java
– Pakiet może zawierać podpakiety● np. java.awt zawiera w sobie java.awt.event – zbiór klas
odpowiedzialny za zdarzenia w oknach
Różnice... (modyfikatory – 1)
● Modyfikatory dostępu do klasy– public – pola i składowe są widoczne w pakiecie i poza nim– final – po klasie nie można dziedziczyć– abstract – nie można utowrzyć obiektu tej klasy – domyślnie: dostęp pakietowy – pola i metody widoczne tylko
dla klas wewnątrz pakietu● Modyfikatory dostępu do pól i funkcji klasy
– private – pole/metoda widoczne tylko w klasie– protected – pole metoda widoczne w klasie, pakiecie i w
klasach dziedziczących– public – pole metoda widoczne ''wszędzie''– domyślnie ''package'', jw.
Różnice... (modyfikatory – 2)
● Modyfikatory własności funkcji składowych– final, static, abstract, synchronized, native
● dostęp do f-cji st. Nazwaklasy.funkcja()● W C/C++ Nazwaklasy::funkcja()
● Modyfikatory własności pól klas– final, static, transient, volatile
● inicjalizacja pola statycznego – tylko w kodzie klasy (nie jak w C)● rozdz. Kurs Tylocha 2.3.12 – inicjalizator pól statycznych
Różnice... (7) dziedziczenie
● Brak modyfikatorów dziedziczenia klas (public, private...)● Dziedziczenie tylko po jednej klasie – jednobazowe
– Hierarchia klas w pakietach ma postać drzewa – każda klasa ma co najwyżej jednego bezpośredniego przodka
– Upraszcza to graf hierarchii dziedziczenia klas● Czasem klasy muszą posiadać pewne funkcje, jeśli chcą aby dla ich
obiektów działały metody standardowe– Arrays.sort(Object[]) - wymaga aby obiekty miały funkcję
compareTo(), czyli implementowały interfejs Comparable ● INTERFEJS
– klasa abstrakcyjna– o zadeklarowanych, ale nie zdefiniowanych funkcjach (jeśli posiada)– o polach wyłącznie statycznych (jeśli posiada)– zadeklarowana słowem interface
Różnice (7) – przykład diagramu schematu dziedziczenia jednobazowego z interfejsami
java.lang.Object | +--java.awt.Component
| +--java.awt.Container | +--java.awt.Panel | +--java.applet.Applet ActionListener
ItemListener
class MyApplet
Interfejs jako klasa, klasa interfejsowa
● Każda klasa implementująca interfejs MUSI zdefiniować jego metody– Dzięki temu pewne cechy mają zawsze tę samą nazwę;
ułatwia to np. ich wywoływanie przez inne komponentynp. Funkcja Arrays.sort(Object[ ] tab) działa w oparciu o funkcję compareTo(...), a więc obiekty w tablicy tab muszą implementować interfejs Comparable
● Interfejs może dziedziczyć po innych interfejsach (także po kilku), ale nie może dziedziczyć po klasach
● Interfejs może być deklarowany w jednym pliku *.java z klasami publicznymi mimo tego, że sam jest publiczny
● Po kompilacji interfejs zostanie umieszczony w osobnym pliku *.class
Interfejs... cd.
Kurs Tylocha, 2.3.12, 2.3.15
[public] interface InterfejsPrzykl {static int Pole=3;abstract public void Metoda();
} //domyślnie interfejs jest publiczny// użycie interfejsu przez klasę
public class MyApplet extends Applet implements InterfejsPrzykl {
public void Metoda() { // co robi ta metoda dla tej klasy}
}
Klasy wewnętrzne, anonimowe i lokalne Kurs Tylocha, 2.3.7
● Klasa wewnętrzna – klasa zdefiniowana wewnątrz definicji innej klasy– występowała w C/C++
● Klasa lokalna – klasa zdefiniowana wewnątrz bloku instrukcji (w definicji funkcji)– niedopuszczalne w C/C++
● Klasa anonimowa – klasa zdefiniowana wewnątrz wyrażenia– new NazwaKlasyPrzodka(//lista argumentów//) {...}
● jest to także sposób na dziedziczenie po interfejsach (!!!) – niedopuszczalne w C/C++
Różnice... (9 – słowo super)
Słowo kluczowe super Kurs Tylocha rozdz. 2.3.13● Konstruktory nie posiadają list inicjalizacyjnych
– odpada operator : oraz inicjalizacja typu pole(wartość)
● super() – wywołuje konstruktor klasy bazowej
lub ● super.funkcja( ) - wywołuje funkcję o tej samej nazwie,
ale w wersji z klasy bazowej● Wywołanie super(....) musi być pierwszą linią kodu
konstruktora przykład
Różnice... (9 – słowo super, c.d.)
● Zakładamy hierarchię klas: A, B extends A, C extends B● Słowa super nie można łączyć kasakadowo; aby odnieść się
do nazwy niestatycznej w klasie wyższej należy konwertować referencję this– np. w obiekcie klasy C
((A)this).get();● Konwersja this do klasy-przodka jest równoznaczna z super
– w obiekcie klasy C:● ((B)this).get(); = super.get();
Programowanie komponentowewykład 5
Informatyka, IV sem.studia dzienne
FTIiMS, PŁ
Błędy w programach
● Z punktu widzenia kodu rozróżniamy– Bł. kompilacji – błąd składni w kodzie programu,
● Nieznana zmienna/funkcja/klasa/...● Brak nawiasu/średnika/....
– Bł. logiczne – program działa wbrew oczekiwaniom, ale __DZIAŁA__
● np. niepoprawne wyniki obliczeń● Nieprzewidziane zachowanie interfejsu● Brak możliwości wykonania jakiejś operacji
– Bł. czasu wykonania (ang. Runtime) – program uruchamia się, ale potem __zatrzymuje__
● Dzielenie przez zero, indeks tablicy spoza zakresu● Błąd otwarcia pliku (ogólnie: operacji we/wy)● Odwołanie do niezainicjalizowanej zmiennej obiektowej
– String x; System.out.println(x);
Wyjątki i błędy w Javie● Java oferuje bardzo rozbudowany, ściśle zorientowany
obiektowo mechanizm obsługi sytuacji krytycznych (błędy we/wy, alokacji pamięci, braku zasobów, błędnych operacji itd.)
● Sytuacje wyjątkowe dzielimy na dwa rodzaje– Errors błędy– Exceptions wyjątki
● Błędy – sytuacje rzadkie, związane z działaniem JVM, np. brak pakietu lub klasy, „opór” środowiska, poważny błąd systemowy
● Błędy nie powinny być obsługiwane w „zwykłych” programach Javy, ich wyrzucaniem zajmuje się watek JVM uruchamiający ''nasze'' programy– np. java.lang.NoClassDefFoundError – brak klasy z funkcją
main w bieżącym/wskazanym katalogu ● Zadanie na kolokwium: napisz kod wywołujący wyjątek X
Wyjątki i błędy – hierarchia klas
Wyjątki... cd
Kurs Tylocha, rozdz. 2.4
Wyjątki – sytuacje zazwyczaj możliwe do obsłużenia instrukcją if..else, np.
● nie znaleziono pliku– FileNotFoundException
● indeks poza granicami tablicy– ArrayIndexOutOfBoundsExcetion
● referencja wskazująca na pusty obszar pamięci– NullPointerException
● Błąd operacji arytmetycznej– ArithmeticException
Wyjątki RuntimeExceptions● Mogą występować bardzo często, nawet po kilka w
jednym wyrażeniu– for (i=0; i<10; i++); tab[ i ] = i;
● Ich obsługa nie jest przez kompilator wymagana – zbyt duży koszt sprawdzenia w porównaniu do strat spowodowanych przez taki wyjątek– NullPointerException– ArrayIndexOutOfBoundsException– ArithmeticException
● W momencie wystąpienia RuntimeException program zatrzyma się i pokaże nazwę wyjątku oraz miejsce jego wystąpienia
przykład
Wyjątek jako obiekt
● Każda sytuacja wyjątkowa jest reprezentowana przez obiekt pewnej klasy
● Każdy pakiet dysponuje odpowiednim zestawem wyjątków obsługującym błędy wywołane przez jego klasy/funkcje przykłady z dokumentacji
● Można także we własnych pakietach definiować własne wyjątki, pod warunkiem, że dziedziczą one z klasy Throwable
Jak powstaje wyjątek?
● Słowa kluczowe throw,throws ● Wyjątek trzeba najpierw zgłosić
public void funkcja() throws MyException { //........ if (WystapilBlad) throw new MyException;
// .........
● new MyException zwraca referencję do obiektu zawierającego dane o sytuacji wyjątkowej, np. kod błędu, treść komunikatu, itp.
Obsługa wyjątków
Metoda try-catch-finallytry {
// instrukcja generująca wyjątek}catch (NazwaKlasyWyjątku wyj)
{ // co zrobić z tym wyjątkiem}....finally
{//blok wykona się niezależnie od wystąpienia wyjątku}
Kolejność obsługi wyjątków (1)
● Jeśli wyjątki są w różnych blokach kodu– o kolejności decyduje przebieg sterowania, np.
try { // instrukcje generujące wyjątki}catch (IOException io){System.err.println("blad IO");}try { // instrukcje generujące wyjątki}catch (SecurityException se){System.err.println("blad sec");
Kolejność obsługi wyjątków (2)
● Jeśli wyjątki występują w tym samym bloku– o kolejności decyduje hierarchia dziedziczenia:
“od najbardziej szczegółowego do najbardziej ogólnego”, czyli ''od dołu do góry”, poźniej
try {// ...... instrukcje generujące wyjatki } catch (java.io.ObjectStreamException) { } catch (java.io.IOException) { } catch (java.lang.Exception){ }........
int otwórzPlik(ścieżka) {if ( plik.otwórz() == false)
{błąd otwarcia pliku}else if ( przydzielpamięć(plik.długość) ==false)
{brak pamięci}else if (zapiszdopliku(tekst) == false)
{błąd wyjścia}else if (zamknijplik() == false)
{ obsłuż ten błąd}else
return OK ;}
Porównanie if-else i try-catch
readFile {try {otwórz plik;przydziel dla niego pamięć;wczytaj tekst do pliku ;zamknij plik;}
catch (fileOpenFailed) {zrób coś z tym;} catch (memoryAllocationFailed) {zrób coś z tym;} catch (writeFailed) {zrób coś z tym;} catch (fileCloseFailed) {zrób coś z tym;}}
Porównanie if-else i try-catch
Definiowanie własnego wyjątku
class MyException extends Exception {String msg;MyException() {msg = new String (“komunikat wyjatku”);}
}
•Większość możliwych wyjątków jest już zdefiniowana w pakietach•Własne wyjątki służą do zgłoszenia np.
•sytuacji wyjątkowej we własnej klasie•wyjątku odziedziczonego po istniejącym
Standardowe struktury danych
● Pakiety Javy zawierają b. dużą ilość gotowych do użycia w kodzie klas – struktur danych
● Np. pakiet java.util– klasy reprezentujące dynamiczne struktury danych– klasy obsługujące kalendarz, datę, walutę, słownik– klasy obsługujące struktury kontenerowe, itp.
● Apel: zanim zaczniesz tworzyć nową klasę – PRZEJRZYJ DOKUMENTACJĘ PAKIETÓW !!!– 9 przypadków na 10 jest już oprogramowanych
Klasy String i StringBuffer
● java.lang.String – reprezentuje łańcuchy tekstowe w miejsce tablicy char[ ] (lub C/C++: char*)– 11 konstruktorów, w tym kopiujące– compareTo(), compareToIgnoreCase(), concat(), equals(Object),
replace(), replaceAll, trim(), valueOf()● String jest klasą „final” – ponadto zapisanego
w niej tekstu nie można zmienić!● Do modyfikacji tekstu służy klasa java.lang.StringBuffer
– należy stworzyć jej obiekt zainicjowany Stringiem– przetworzyć tekst metodami klasy StringBuffer– rezultat zapisać od nowa w obiekcie String
Klasa Vector
● Klasa reprezentująca tablicę obiektów pochodzących od java.lang.Object
● java.lang.Object // sam Vector też pochodzi od Object...| +--java.util.AbstractCollection
| +--java.util.AbstractList | +--java.util.Vector
● Funkcje obsługujące dane:– add(Object), add(Collection), add(int index, Object)– set(), setElementAt(Object, int), setSize(int)– clear(), remove(Object), removeAll(), trimToSize(int)– clone(), toString(), toArray(), equals(Object)
Klasa java.util.Stack
● Klasyczny stos pozwala tylko na kładzenie elementów na górze i ich zdejmowanie z góry
● Rozszerzone implementacje stosu umożliwiają również podglądanie elementów lub ich sprawdzanie
● Klasa Stack jest rozszerzoną implementacją stosu● Dziedziczy od Vector● Funkcje:
– boolean empty();– pop(Object), push(Object), boolean search(Object), peek()
Klasa Arrays
● Jeśli nie chce się przekształcać własnych tablic w obiekty z biblioteki Java...
● ...można użyć funkcji z klasy Arrays; reprezentuje ona (w postaci funkcji statycznych) najczęstsze operacje na gotowych tablicach– sortowanie – 20 funkcji sort() – porównywanie elementów – 9 funkcji equals()– wyszukiwanie – 9 funkcji binarySearch()– wypełnianie – funkcje fill()
● Funkcje te przyjmują daną tablicę jako argument (inaczej niż zazwyczaj jest w Javie)
dokumentacja
Obiekt Date
● Do działania na datach – klasa Date – Java 1.1, później klasa Calendar
● Obiekt klasy Date reprezentuje dowolny moment czasowy z dokładnością do milisekund
● Na 64 bitach (long) zapamiętuje liczbę milisekud, które upłynęły od 1 stycznia 1970 roku, od godz. 0h 00m 00s 000ms (tzw. moment epoch)
● Daty wcześniejsze zapamiętuje się jako liczby ujemne
Format danych w Date
rok liczba c. = y – 1900miesiąc liczba z {0, .., 11}, gdzie 0 = styczeńdzień mies. liczba z {1, .., 31}dzień tyg. liczba z {0, ..., 6}, gdzie 0 = niedziela godzina liczba całk. z przedziału <0, 23>minuta liczba całk. z przedziału <0, 59>sekunda liczba całk. z przedziału <0, 61> !!! (sek. przestępne)
funkcje getYear(), getMonth(), getDate(), getDay(), getHour().....
Konstruktory i funkcje Date
● Date now = new Date();– alokuje obiekt „dokładnie ten moment”
● Date(y, m, d), Date(y, m, d, h, m), Date(y, m, d, h, m, s)● Date(long milisecs), Date(String)● Brak konstruktora kopiującego Date(Date) – dlaczego?● now.equals(whenelse), // tendencja do nazw naturalnych● now.before(LittleBitLater)● now.after(LittleBitEarlier)● setDate(), setMonths(), setYear().....
Inne struktury danych
● Calendar, Currency● Dictionary, GregorianCalendar● ........● ........