Języki i paradygmaty programowania (JIPP)

Transkrypt

Języki i paradygmaty programowania (JIPP)
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-obiektkomponent
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,


http://java.sun.com
ics.p.lodz.pl/~aniewiadomski
–
Dział ,,Dydaktyka'', JiPP
2001, 90zł
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 przeznaczone
tylko 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żytkownika
2.Projektowanie
3.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.
1. Analiza wymagań użytkownika
●
Dane – jakie informacje przetwarza system?
–
●
Użytkownicy – kto ma korzystać?
–
●
Grupy i ich prawa dostępu
Warunki odbiorcy – gdzie system ma działać?
–
●
Typy danych, formaty, konwersje
Sprzętowe, lokalowe, finansowe
Czy firma ma już system?
–
Jaki? Za ile? Od kiedy? Co chcą zmienić?
2. Projektowanie – warstwa danych
●
Baza danych
–
–
●
Prawa dostępu do tabel
–
●
tabele, kwerendy, relacje, więzy integralności
Formy normalne tabel, normalizacja
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
–
●
Przepływ danych
–
–
–
●
np. zaloguj się = sprawdź login + sprawdź hasło +
wyświetl zawartość konta użytkownika
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 klientserwer
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
–
●
Testy długookresowe, pomiar niezawodności
T. pełnozakresowe
–
●
Po zmianach, ''czy nie zmieniono za dużo''
T. operacyjne
–
●
[Roszkowski, 2004]
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
–
–
●
Obserwacja rejestrów zdarzeń (tzw. logów)
–
–
●
Nieaktywni użytkownicy
Dereplikacja wpisó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
●
●
Aplikacja <= System informacyjny
–
Aplikacja ,,nie zawiera'' sprzętu
●
●
Model-View-Controller – wzorzec projektowy, design
patern
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
Write
Modify
Delete
●
np. SELECT
np. INSERT
np. UPDATE
np. DELETE
W tym sensie ''bazy'' w Accessie nie są tylko zbiorami
danych, ale całymi aplikacjami
Arch. trójwarstwowa
warstwa 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,
–
–
–
●
Interfejsy
–
–
–
●
Wizualizacja (wyświetlanie) rezultatów procesów
Pobieranie danych i kontrola ich poprawności
Przyjmowanie poleceń użytkownika
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
●
●
●
–
●
●
–
●
●
www.gazeta.pl
Interfejs = jw.
Logika = Java, serwer Tomcat
Dane
= Postgress (???)
CGI
●
–
–
Interfejs = DHTML przeglądarka
Logika = PHP, serwer Apache
Dane
= Serwer MySQL
JSP
●
Allegro
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
Kompilator
LINUX
Źródło
C/C++
Kompilator
Windows
Kompilator
DOS
LINUX
Sys. Op
LINUX
*.EXE
Windows
Sys. Op
Windows
*.bash
*.exe
DOS
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
Kompilator
plik(i)
*.class
czyli
Bajt-kod
.............
Linux
Platforma
LINUX
JVM
Win2K
Platforma
Windows
JVM
DOS
JVM
*.class
*.class
*.class
Platforma
DOS
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
●
●
Pakiet to zbiór klas, gdzie
–
–
●
http://java.sun.com/j2se/1.4.2/docs/api/
nazwa pakietu
nazwa klasy
= nazwa katalogu
= 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 komponentowe
wykł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ępu
Nie 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. Operatory
a. 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
!zmiennaLogiczna
3*5,
x<y ? x : y
(1, 2 lub 3)
(1 argument)
(2 argumenty)
(3 argumenty)
d. Wartość (typ rezultatu) – następny slajd
e. 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
+ * %
–
●
Logiczne
–
●
Wynik
!
true lub
Przypisania
–
●
Wynik jest typu jednego z operandów
&&
||
false
=
+=
-= *=
++
Wynik jest typu lewego argumentu (czyli Lwartości)
--
Kategorie (4)
operatory (podział przybliżony)
●
Porównania
–
●
●
&
|
>=
^ << >>>
Wynik jest typu jednego z operandów
Przydziału pamięci
–
●
<
true lub false
Bitowe
–
==
Wynik jest typu referencyjnego
Kontroli typu
instanceof
– Wynik logiczny
● Zalecane ćwiczenia!
new
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ło
int funkcja (double x) {
// ciało funkcji
return 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
Typy danych
Proste
Złożone
Tablicowe
Obiektowe
Biblioteczne
Programisty
Typy proste
(wbudowane, built-in, primitives)
●
●
●
byte
short
char
–
●
●
●
1 bajt, stałoprzec. ze znakiem
2, int
4, long 8
2 kod znaku UNICODE
możliwe zapisanie EOF
boolean 1 bajt, true/false
float
double
4 bajty, zmiennoprzecinkowa
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
Date
ActionEvent
String
java.awt.Button
java.util.Date
java.awt.event.ActionEvent
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!”);
Inicjalizacja
x = 25;
// typy proste
napis = new String(”1.2.3.próba Stringa...”); // typy złożone
b2 = 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
●
–
zmienna po this jest polem bieżącej klasy
●
–
obiekt.pole
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
n
l
fl
d
bt
ch
e
pt
boolean
short, int
long
float
double
Button
Checkbox
Event
Point
bOdpowiedz
nWagaZawodnika
lRozmiarPliku
flMojaPensja
dJegoPensja
przycisk
pole wyboru
zdarzenie
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
●
–
wszystkie zmienne typów złożonych (tablicowych i
agregatów) są referencjami – wymagają dynamicznego
przydziału pamięci
–
operator
–
●
int x=0;
* 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
–
–
–
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
●
–
–
przykład
package nazwa_pakietu ;
przykład
położenie plików w pakietach określa zm. środ. CLASSPATH
●
–
mogą być inne klasy, ale niepubliczne
po kompilacji w jednym pliku *.class znajduje się jedna klasa
Przypisanie klasy do pakietu odbywa się instrukcją
●
–
Kurs Tylocha, rozdz. 2.3.4
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.
W C/C++
Nazwaklasy.funkcja()
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 komponenty
np. 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 komponentowe
wykł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,
●
●
–
Bł. logiczne – program działa wbrew oczekiwaniom,
ale __DZIAŁA__
●
●
●
–
Nieznana zmienna/funkcja/klasa/...
Brak nawiasu/średnika/....
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
Exceptions
błędy
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
–
●
indeks poza granicami tablicy
–
●
ArrayIndexOutOfBoundsExcetion
referencja wskazująca na pusty obszar pamięci
–
●
FileNotFoundException
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
try-catch-finally
{
// 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){ }
........
Porównanie if-else i try-catch
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;
}}
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
miesiąc
dzień mies.
dzień tyg.
godzina
minuta
sekunda
liczba c. = y – 1900
liczba z {0, .., 11}, gdzie 0 = styczeń
liczba z {1, .., 31}
liczba z {0, ..., 6}, gdzie 0 = niedziela
liczba całk. z przedziału <0, 23>
liczba całk. z przedziału <0, 59>
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
........
........

Podobne dokumenty