WT PW – rok 2008/9
IS(U) – semestr 2 – Wykład 2
Wykład 2. Programowanie strukturalne
i obiektowe; środowisko języka Java
I.
Zasady programowania
1.
Programowanie strukturalne
2.
Założenia programowania obiektowego
II.
Java jako język obiektowy
1.
Struktura programów Javy
2.
Podstawowe elementy języka Java
III.
Implementacje języka Java
1.
Historia i współczesność języka Java
2.
Zintegrowane środowiska programistyczne Java 2
I.1
Programowanie strukturalne
i modularne
Ê
Strukturalizacja programów:
Ê
program złożony z niezależnych bloków: procedur, funkcji oraz
sekwencji instrukcji organizowanych w struktury
Ê
procedury i funkcje (czyli procedury zwracające wynik) mogą być
wielokrotnie wywoływane w programie
Ê
nazwy w programie są widoczne w obrębie bloku (i od miejsca), w
którym zostały zdefiniowane, np. wewnątrz procedury
Ê
Instrukcje organizują przebieg wykonania programu (kolejność
wykonania sekwencji instrukcji)
Ê
instrukcje strukturalne: iteracyjne (cykle obliczeń) i warunkowe
Ê
instrukcje wywołania procedur wykonują ich treść
Ê
wyrażenia występujące w instrukcjach mogą zawierać wywołania
funkcji, które wyliczają ich wartości
Ê
Programy złożone z niezależnie kompilowanych modułów
I.1.1
Cykle obliczeń:
iteracja i rekurencja
Ê
Obliczenia cykliczne:
podstawowy mechanizm automatyzacji obliczeń.
Ê
Iteracja to postępowanie polegające na wielokrotnym
powtarzaniu tego samego przekształcenia
Ê
w programowaniu - wielokrotne powtarzanie tej samej
sekwencji instrukcji.
Ê
Rekurencja to metoda obliczania wartości funkcji
z użyciem tej funkcji: f(x) = F(f(x’))
Ê
w programowaniu - wywołanie funkcji (tj. użycie jej nazwy) w bloku
instrukcji realizujących tę funkcję
Ê
wzajemna rekurencja: f(x) = F(g(y)); g(y) = G(f(x’))
I.1.2
Przykład 1-a: silnia iteracyjnie
function
Silnia_I
(
n
: Integer): Integer;
var
i
,
silnia
: Integer;
begin
silnia
:= 1;
for
i
:= 2 to
n
do
silnia
:=
silnia
*
i
;
Result:=
silnia
;
end;
START
pobierz
n
i + 1
Æ
i
silnia*i
Æ
silnia
N
i > n ?
1
Æ
silnia
2
Æ
i
T
zwróć
silnia
STOP
int
Silnia_I
(int
n
){
int
silnia = 1;
for(int
i
=
1
;i<=
n
;i++) {
silnia
=*
i
;
}
return
silnia
;
end;
funkcja
Pascala
metoda
Javy
Silnia
=?
n
=2 (>1)
Silnia_R
=2
//Pascal
function
Silnia_R
(
n
:Integer): Integer;
begin
if
n
>1 then
Result:=
n
*
Silnia_R
(
n
-1)
else Result:= 1;
end;
//Java
int
Silnia_R
(int
n
) {
if(
n
>1 ){
return
n
*
Silnia_R
(
n
-1)
} else return 1;
end;
Silnia
=?
n
=4 (>1)
Silnia
=?
n
=5 (>1)
Silnia
=?
n
=3 (>1)
Silnia_R
=1
n
=1
Silnia_R
=6
Silnia_R
=120
Silnia_R
=24
I.1.3
Przykład 1-b: silnia rekurencyjnie
Stos: SP
Parametry
dla kolejnych
wywołań funkcji są
umieszczane na
stosie, następnie
zdejmowane po
zakonczeniu
obliczeń.
Wyniki są konsu-
mowane przez
funkcję
wywolującą
I.2.1
Rozwój podejścia obiektowego
Ê
Simula 67: prekursor języków obiektowych
klasy obiektów, dziedziczenie, funkcje wirtualne
Ê
Języki o „czystej” orientacji obiektowej
Smalltalk (1980): OOP object-oriented programming
Eiffel (1985)
Java (1995)
Ê
Obiektowe rozwinięcia języków proceduralnych
C++ (1986)
Object Pascal (~1990) Æ Delphi
Ê
MS Windows, COM (Common Object Model)
Visual Basic (quasi-obiektowy)
Ê
Obiektowe narzędzia programowania sterowanego
zdarzeniami w środowisku graficznym
Visual C++
Delphi (1995)
Netbeans (2000)
WT PW – rok 2008/9
IS(U) – semestr 2 – Wykład 2
I.2.2
Założenia „orientacji obiektowej”
Ê
Abstrakcja
programy operują na strukturach abstrakcyjnych obiektów
o określonych cechach i zachowaniu
Ê
Enkapsulacja (hermetyzacja, kapsułowanie)
sposób realizacji cech i zachowań jest ukryty wewnątrz
programowych reprezentacji obiektów
Ê
Kompozycja / dekompozycja
obiekty można łączyć w większe całości
lub dzielić na części składowe
Ê
Wielokrotne użycie
biblioteki obiektów, hierarchie klas obiektów
o różnym poziomie specjalizacji
I.2.3
Typowe cechy obiektowych
języków programowania
Ê
Orientacja obiektowa:
program jako struktura powiązanych wzajemnie obiektów
właściwości (properties, attributes) reprezentują ich cechy
metody (methods) reprezentują ich zachowania
Ê
Klasy i instancje (egzemplarze) obiektów
obiekty to instancje określonych klas (typów obiektowych)
tworzone na początku lub w trakcie wykonywania programu
Ê
Dziedziczenie i polimorfizm
cechy/zachowania dziedziczone od klasy przodka lub własne
Ê
Komunikacja między obiektami
wiadomości (messages)
przesyłane w toku wykonania programu
Ê
Rozwój w stronę GUI i programowania zdarzeniowego
obiekty z postacią graficzną oraz z metodami obsługi zdarzeń
Ê
Klasy obiektów w językach obiektowych dziedziczą
atrybuty i metody od bezpośrednich przodków
można definiować
z
klasy wyspecjalizowane, przejmujące
cechy klasy ogólnej
z
klasę ogólną, reprezentującą
wspólne cechy klas szczegółowych
I
.
2.4
Hierarchia
klas, dziedziczenie
Ê
Wielokrotne dziedziczenie
dostępne w niektórych językach
np. C++
w Javie i Delphi realizowane
częściowo przez tzw. interfejsy
I.2.5
Przykład dziedziczenia
OSOBA
Nazwisko,
Rok urodzenia
Wiek()
STUDENT
+ Plan zajęć,
Lista ocen
+ Średnia ocen()
PRACOWNIK
+ Lista zajęć,
Pensum
+ Nadgodziny()
TStudent =
class(TOsoba)
class
Student
extends
Osoba
TPracownik =
class(TOsoba)
class
Pracownik
extends
Osoba
NAZWA OBIEKTU
Właściwości …
Metody …
Ê
Java jest językiem „zorientowanym obiektowo”, opartym
głównie na C++ (składnia) i SmalTalk (zasady implementacji)
Ê
Prawie wszystkie wartości w programie Javy są obiektami, także
łańcuchy znaków i tablice, (wyjątkiem są typy proste)
Ê
Sam program Javy też jest obiektem i operuje na obiektach
Ê
W porównaniu z C++ Java jest zoptymalizowana. Usunięto
mechanizmy będące przyczyną częstych błędów programistycznych,
m.in.:
nie ma wskaźników; w Javie nazwy zmiennych obiektowych stanowią
referencje, czyli adresy istniejących obiektów
nie ma wielokrotnego dziedziczenia; klasa Javy może dziedziczyć
tylko od jednej klasy ”rodzicielskiej”
mechanizmy wielokrotnego dziedziczenia są częściowo zastępowane
przez tzw. interfejsy
II.1
Struktura programu w Javie
II.1.1
Klasy i obiekty w programie Javy
Ê
Programowanie w Javie polega na definiowaniu klas obiektów w
postaci, np.:
public class
Prostokąt
{
// deklaracje właściwości i metod definiowanej klasy obiektów
(w tym konstruktorów)
… //
public static void main(String[] arguments) {…}
}
Ê
Aby użyć w programie określonego obiektu, należy:
Ê
zadeklarować zmienną obiektową, podając jej klasę i nazwę
Ê
utworzyć instancję obiektu z pomocą konstruktora tej klasy
dwa różne
konstruktory
konstruktor to specjalna metoda, która
służy do tworzenia obiektów danej klasy
metoda
main()
umożliwia
wykonanie
programu
WT PW – rok 2008/9
IS(U) – semestr 2 – Wykład 2
II.1.2
Deklaracje właściwości i metod
Ê
Klasa zawiera ciąg deklaracji i instrukcji, opisujących:
Ê
jej właściwości – nazwane wartości, czyli zmienne (lub stałe)
Ê
jej metody – konstruktory, procedury i funkcje
Ê
Deklaracje klas, właściwości i metod mogą się zaczynać od słów
kluczowych, które określają ich „widoczność” i inne cechy
np. public oznacza nieograniczoną dostępność, tj. możliwość
użycia wewnątrz dowolnej innej klasy (po dokonaniu importu)
Ê
Słowo kluczowe static poprzedza deklaracje właściwości
zmiennych i metod klasowych, których użycie nie wymaga
tworzenia instancji obiektu (np. funkcje matematyczne)
Ê
Słowo kluczowe
final
poprzedza deklaracje zmiennych ustalonych,
czyli wartości stałych, których nie można zmieniać w programie
II.1.3
Przykład deklaracji i użycia
właściwości i metod klasy Javy
public class
Prostokąt
{
public int
szerokość
;
public int
wysokość
;
public
Point
początek
;
public
Prostokąt
() {
początek = new
Point
(0, 0);
}
public
Prostokąt
(int
s
, int
w
) {
this(); //wywołuje konstruktor bez parametrów
szerokość = s;
wysokość = w;
}
//metoda obliczania powierzchni
public int
powierzchnia
() {
return
szerokość
*
wysokość;
}
}
zmienne
proste
kons-
truktory
funkcja
(
metoda
zwracają-
ca wynik
)
Ê
Odwołania do właściwości i
metod zmiennej klasowej są
kwalifikowane jej nazwą,
np. po deklaracjach:
Prostokąt A
= new
Prostokąt
();
Prostokąt B
= new
Prostokąt
(
50
,
100
);
poniższa instrukcja przypisania
A
.
wysokość
=
B
.
wysokość
;
nada prostokątowi A wysokość
prostokąta B
Ê
Wywołania funkcji występują
w wyrażeniach, np.:
int
p
=
B
.
powierzchnia
() *
20
;
zmienna
obiektowa
II.1.4
Aplety Javy i cykl ich działania
Ê
Aplet to obiekt Javy, wyposażony w graficzny interfejs, osadzony
w dokumencie HTML. K
lasy składowe apletu mogą być ładowane
dynamicznie przez sieć i uruchamiane lokalnie w przeglądarce
Ê
Aplety w odróżnieniu od aplikacji
nie posiadają metody main().
Główna klasa apletu jest
potomkiem predefiniowanej klasy
java.applet.Applet
Ê
Aplet dziedziczy szereg metod,
które są zdefiniowane w klasie
nadrzędnej, dzięki czemu posiada
m.in.:
możliwość komunikowania
się z przeglądarką
zdolność obsługi graficznego
interfejsu użytkownika
II.1.4
Główne metody apletu
Ê
Metoda init() wywoływana tylko raz w ciągu całego życia apletu, po
załadowaniu strony z apletem, zapoczątkowuje jego wykonywanie nadając
początkowe ustawienia czcionek, kolorów, koloru tła ekranu itp.
Ê
Metoda start(), wywoływana po wykonaniu metody init, uruchamia wątki
animacji, odtwarzania dźwięków i innych czynności apletu;
aplet wyposażony w metodę start() powinien mieć również w metodę stop();
metoda start() może być wielokrotnie wywoływana podczas cyklu życia
apletu, np. przy każdym powrocie na stronę z apletem
Ê
Metoda stop() jest wywoływana, gdy okno przeglądarki, w której znajduje się
aplet, jest minimalizowane do ikony, zasłaniane przez inne okno, lub przy
otwarciu nowej strony WWW; służy m.in. do zatrzymania wątków
Ê
Metoda destroy() jest wywoływana, gdy aplet kończy swoje działanie; rzadko
używana, ponieważ Java posiada mechanizm automatycznego zwalniania
nieużywanych zasobów pamięci
III.1.1
Historia języka Java
Ê
”Narodziny” Javy – 1990 rok, Sun Microsystems, Inc. Mountain
View, California.
Ê
Początkowa nazwa nowego języka – OAK
Ê
Przeznaczenie - programowanie inteligentnych
urządzeń domowego użytku (projekt Green).
Ê
Główny architekt Javy – James Gosling
Ê
W 1994 r. wstrzymano prace nad Javą. Przyczyna - brak
zainteresowania projektem Green ze strony znanych producentów
urządzeń
elektronicznych
Ê
Rozwój Internetu powoduje ponowne zainteresowanie się
językiem tworzącym przenośne programy.
Ê
1995 rok, konferencja w San Francisco - pierwsza publiczna
prezentacja Javy
kompilacja
JVM
javac nazwa_pliku.java
Pliki *.class
interpretacja przez JVM zainstalowaną na danej
platformie lub przeglądarce WWW
Pliki *.java
III.2.1
Zasada działania programów w Javie
„kod bajtowy”
- postać
półskompilowana
niezależność od
platformy
WT PW – rok 2008/9
IS(U) – semestr 2 – Wykład 2
III.2.1
Cechy Javy
Ê
Java to uniwersalny język programowania niezależny od
platformy sprzętowo-programowej – raz napisany kod można
wykorzystać w każdym środowisku wyposażonym w interpreter
kodu bajtowego Javy czyli JVM (
Java Virtual Machine
)
Ê
Java dostarcza uniwersalnego środowiska
Ê
programowania GUI (
Graphic User Interface
) – biblioteki komponentów:
Ê
AWT – ubogi wygląd komponentów, zależny od platformy
Ê
Swing – nowocześniejszy, niezależny od platformy
Ê
programowania multimediów
Ê
dostępu do baz danych, JDBC (Java DataBase Connectivity)
Ê
programowania w sieciach i w systemach rozproszonych.
Ê
budowania programów z gotowych komponentów (JavaBeans)
Ê
tworzenia aplikacji dla urządzeń mobilnych
III.2.1
Środowiska programistyczne Java 2
firmy Sun Microsystems
Sun zdefiniował szereg platform Java 2 dla różnych rodzajów urządzeń
Ê
Java 2 Standard Edition (J2SE)
Ê
definiuje
definiuje
platformę
platformę
dla
dla
aplikacji
aplikacji
ogólnych
ogólnych
zastosowań
zastosowań
Ê
realizuje
realizuje
podstawowy
podstawowy
zakres
zakres
API
API
(
(
Application
Application
Programming
Programming
Interface
Interface
)
)
Ê
służy do tworzenia aplikacji „klienckich” używanych samodzielnie lub
z poziomu przeglądarki internetowej
Ê
Java 2 Enterprise Edition (J2EE)
rozszerza J2SE o dodatkowe API
rozszerza J2SE o dodatkowe API
pozwalające na tworzenie wielowarstwowych aplikacji dla przed
pozwalające na tworzenie wielowarstwowych aplikacji dla przed
siębiorstw
siębiorstw
Ê
Java 2 Micro Edition (J2ME) zawiera narzędzia do tworzenia
i testowania aplikacji dla urządzeń mobilnych
Ê
Personal Java - podzbiór J2SE, urządzenia przenośne z małymi zasobami
Ê
Java Card - minimalny podzbiór klas Java, karty inteligentne (smart cards
III.2.1
Wielowarstwowa architektura
aplikacji J2EE
Ê
Warstwa prezentacji realizuje dostęp do aplikacji dla klienta
przez osobną aplikację napisaną w Javie (thick client) lub
przeglądarkę internetową (thin client)
Ê
Warstwa logiki biznesowej obsługiwana przez serwery aplikacji
realizuje główne zadania: udostępnia źródła danych, integruje
istniejący system informatyczny przedsiębiorstwa z nowymi
funkcjami; zbudowana z komponentów EJB
(Eneterprise Java Beans)
Ê
Warstwa danych danych jest źródłem danych dla aplikacji
(relacyjna czy obiektowa baza danych, system plików, system
katalogowy, dane z dotychczasowego systemu informatycznego
przedsiębiorstwa).
III.2.1
Technologie informatyczne
wykorzystane w architekturze J2EE
Ê
EJB (Eneterprise Java Beans)
komponenty działające w warstwie środkowej, zarządzane i wykonywane na
serwerze, reprezentujące logikę biznesową aplikacji
Ê
CORBA (Common Object Request Broker)
standard budowy i specyfikacji komponentów w rozproszonych systemach
informacyjnych opracowany przez niezależne konsorcjum OMG (Object
Management Group)
Ê
RMI (Remote Method Invocation)
mechanizm umożliwiający wywołanie metod zdalnych obiektów
wykonujących się w innych maszynach wirtualnych Javy, które mogą
znajdować się na innych komputerach; obiekt wywołujacy metodę zdalną
nazywany jest obiektem klienta, a obiekt zdalny obiektem serwera
Ê
Technologie Internetu i Webu
HTTP, HTML/XML, aplety – programowanie po stronie klienta;
JSP, serwlety – programowanie po stronie serwera