SCRIPT

Transkrypt

SCRIPT
Programowanie obiektowe
15 godzin w.
30 godzin lab
Wykład 1
Zakres
1. Wprowadzenie do programowania zorientowanego obiektowo.
Definicja klasy. Instancje. Pola i metody. Dziedziczenie klas.
Enkapsulacja. Polimorfizm.
2. Techniki obiektowe w JavaScript. Obiekt Math, Date, document.
Dostęp do obiektów. Tworzenie i modyfikacja instancji.
3. Tworzenie nowych klas i instancji – kreacja metod i ich
wykorzystanie.
4. Wprowadzenie do programowania w środowisku Java (Eclipse,
NetBeans). Konstruktory i destruktory, dziedziczenie.
5.
Obiekty i klasy w Javie. Przykłady zastosowań.
Podstawowe cechy
programowania
obiektowego
Programowanie strukturalne (proceduralne)
– to koncepcja tradycyjna
Główną jego składową są instrukcje działające na
danych.
Złożone programy korzystają z funkcji, procedur
(także modułów) w celu uproszczenia zarządzania i
kontroli nad programem, lecz nie zmienia to
podstawowej koncepcji.
Wady programowania strukturalnego
■ dane są powszechnie dostępne – łatwo o błędy,
■ sekwencyjność wykonywania programu,
■ wszystkie sytuacje trzeba przewidywać
i obsługiwać,
■ konieczność testowania po każdej zmianie,
■ wiele instrukcji, obszerny kod, trudność
zrozumienia algorytmu
• służy do nauki programowania
• niewygodne
• nie przystaje do obecnych systemów operacyjnych
obiektowych (komponentowych)
Przykład wykorzystania funkcji
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function dodaj(s1,s2) {
s3=s1+s2;
alert(s3);
}
</SCRIPT>
<BODY style="font-size:28px">
<SCRIPT LANGUAGE="JavaScript">
//wykonanie funkcji
dodaj(-3, 1.5);
//inne wykonanie funkcji
dodaj(13,2.5);
</SCRIPT>
</BODY>
//definicja funkcji
Zauważono „Kryzys oprogramowania” – programowanie
strukturalne utrudnia panowanie nad bardzo złożonymi
systemami informatycznymi (SI) - rozwój sprzętu
wyprzedzał techniki budowania SI.
Potrzebne były metody zwiększające wydajność i
systematyczność tworzenia SI, a następnie ich
wydajność.
Poza tym powstały interfejsy graficzne (Windows)!
Korzenie technologii obiektowej – lata 60-te, Nygaard
i Dohl - Simula 1, Simula67 (1967).
OBIEKTOWOŚĆ – filozofia tworzenia na
podstawie rzeczywistych zjawisk otaczającego
świata (nie tylko język programowania).
Obiekty (świata rzeczywistego a także
systemu operacyjnego komputera – plik,
ikona, przycisk, okno) – mają swoje
właściwości statyczne (nazwa, kolor itp.) a
także zbiory operacji na nich czy przez nie
wykonywanych.
Np. typ tablica ma swoje cechy – atrybuty:
■ wymiar
■ rozmiar
■ typ przechowywanych danych
nie określa się jednak sposobów operacji na
tablicach (np. dodawanie tablic), trzeba do tej
operacji tworzyć własne kody lub korzystać
z bibliotecznych procedur, których użycie wymaga
szczegółowego zapoznania się z zestawem
parametrów formalnych (sposób użycia).
Stworzono tzw. ADT – abstrakcyjny typ danych –
nazwano modułem (język Modula) lub klasą (język
Simula).
Podążanie w kierunku naturalnego języka (zbliżenie do
rzeczywistości),
System reaguje na zdarzenia („siły sprawcze”), efektem
są procesy:
o
inicjacji przetwarzania parametrów obiektów
o
przesyłu informacji między obiektami
o
oddziaływania jednych obiektów na inne
PROGRAMOWANIE OOP
(Object Oriented Programming)
– podstawowe pojęcia
Programowanie zorientowane obiektowo (OOP – Object Oriented
Programming) umożliwia przedstawienie problemu w postaci
logicznie powiązanych ze sobą struktur danych zwanych
obiektami, wymieniających informacje między sobą.
„Obiektowość” opiera się na koncepcyjnym (intuicyjnym)
klasyfikowaniu rzeczywistości. Na świat składają się obiekty i
procesy w nich zachodzące.
Koncepcja (pojęcie) "klasy"
KLASA= typ obiektowy=encja (entity)
OBIEKT = reprezentacja w klasie = instancja
Podobnie jak typ zmiennej i zmienna
typ
liczbowy
klasa człowiek
xyz
przedstawiciele
typu
AB C
instancje w
klasie
"Koncepcja (pojęcie) jest wyobrażeniem lub oznaczeniem
stosowanym do rzeczy lub obiektów w naszej świadomości"
(Martin)
(Encja = byt pojęciowy, konceptualny)
Przykład 1: Klasyfikacja obiektów
materialne: osoba, samochód, robot, maszyna
niematerialne (abstrakcyjne): firma, czas,
role: pacjent, nauczyciel,
relacyjne: małżeństwo, posiadanie
zdarzeniowe: sprzedaż, wysłanie
inne: zestaw, ikona, sygnał, proces
Łatwo zrozumieć pojęcia materialne, trudniej abstrakcyjne.
Przenikanie i wzajemna zależność pojęć.
Klasy:
wyrób japoński,
urządzenie do
rejestracji
obrazu,
Obiekty:
kamera SONY,
magnetowid Panasonic
magnetowid
Toyota Celica
OBIEKTY
– egzemplarze typów obiektowych (TO),
instancje w klasie
Np. Samochód (TO)– Toyota, Renault (obiekty)
wyrób Renault (TO) – Megane, Kangoo, Clio (obiekty)
KLASA - zbiór obiektów „przefiltrowanych” przez definicję typu
obiektowego - sklasyfikowanych do tego typu.
Może być brak obiektów w klasie np.
klasa: perpetuum mobile,
klasa: samochód napędzany wodą
Typ obiektowy = klasa - jest to złożona struktura danych
o określonej liczbie atrybutów.
Atrybuty dzielimy na pola i metody.
pola (fields) – atrybuty (właściwości opisane
wartościami dowolnych typów, także strukturalnych)
Pole jest to zmienna, która może być różnego typu.
metody (methods) – procedury i funkcje wykonywane
na polach.
Metoda jest czynnością wykonywaną na obiekcie
w postaci procedury lub funkcji. Metoda obiektu operuje
na polach (danych) obiektu, przy ich pomocy mamy
dostęp do pól.
Teoria programowania wprowadza pojęcie typu
rekordowego
Przykład definicji typu rekordowego:
typ osoba =record
{
nazwisko : tekst
imie: tekst
wiek: liczba całkowita
kolor_oczu: (niebieskie,czarne, piwne, zielone, brązowe);
//typ tzw. wyliczeniowy
itd..
}
Znamy to z baz danych: Microsoft Access – semestr 2.
Prosty typ obiektowy (klasa) mógłby na przykład być
tak definiowany
typ osoba = class {
nazwisko : tekst
waga: liczba całkowita
funkcja jedz (kg)
{waga=waga+kg/10}
funkcja biegaj (km)
{waga=waga-km/10}
}
Jak widzimy definicja klasy (typu obiektowego) zawiera dwie
funkcje (metody).
Czyli…
…. typ obiektowy to typ rekordowy
poszerzony o metody (funkcje)
Dokładniej… metoda jest to pewna funkcja mająca definicję
w ramach typu obiektowego, jest integralnie przypisana do
klasy.
Wykorzystanie właściwości i metod jest kwalifikowane
(przypisanie do egzemplarzy w klasie):
definicja klasy Kot {
właściwości
metody
}
Maciuś, Mruczek → Kot
Maciuś. sierść => szara;
Mruczek.jedz
Maciuś.miaucz
definicje
akcje wyzwolone przez
siły sprawcze:
• nadania wartości
właściwościom,
• wykonanie metod
Hermetyzacja
Własność polegająca na dostępie do pól jedynie przy
użyciu metod nazywa się hermetyzacją.
Ułatwia kontrolę poprawności złożonych programów.
Dziedziczenie
Typ obiektowy może on być:
•
niezależny, (zdefiniowany podobnie jak typ
rekordowy)
•
jako potomek istniejącego. Wtedy mówimy, że obiekt
dziedziczy wszystkie elementy (pola i metody)
swojego przodka lub jest typem potomnym.
Obiekty potomne mogą mieć własnego potomka (lub
wielu).
Przykładowo:
• klasa nadrzędna: człowiek
• klasa podrzędna: pracownik lub student (potomek
klasy człowiek).
Obiekt dziedziczy wszystkie elementy (pola i metody)
swojego przodka lub jest typem potomnym – posiada
dodatkowe pola i metody
Obiekty potomne mogą mieć własnego potomka (lub
wielu).
Przykładowo: robotnik, urzędnik – potomkowie klasy
pracownik
Wzajemne zależności obiektów układają się w
drzewo hierarchii obiektów.
Dziedziczność bezpośrednia – przodek jest niezależny
(sam nie ma przodka)
Dziedziczność pośrednia – przodek już dziedziczy (sam
ma przodka)
Przykład:
typ polozenie =
class {//obiekt niezależny
x: liczba całkowita;
y: liczba całkowita;
}
typ punkt =
class (polozenie){ //obiekt potomny
widocznosc: typ logiczny (TAK/NIE);
}
Przykład:
typ
TPolozenie = class
{
x: liczba całkowita;
y: liczba całkowita;
function przesun (dx, dy: liczba całkowita)
{
x:=x+dx;
y:=y+dy;
}
}
opis metody
Jeśli mamy zdefiniowany typ (klasę) Polozenie …możemy
korzystać z obiektów (instancji w klasie)…
p1, p2 obiekty typu (klasy) Polozenie
//nadanie wartości polom (w zależności od ich typu)
p1.x=100;
p1.y = 30;
//wykonanie metody
p1.przesun(100,50);
…
dostęp do pól (też metod) - zapis z kropką
Jeszcze jeden ważny aspekt…
zagnieżdżanie obiektów
Obiekty mogą się składać się z obiektów składowych, czyli właściwości
klasy mogą być też klasami, przykładowo:
klasa Robot_humanoidalny
{ klasa Ręka [2]
{definicja}
pola klasy też
klasa Noga [2]
typu
obiektowego
Definicja
{definicja}
klasa Tułów
{definicja}
metody robota
metody klasy
}
Określenie przynależności
obiekty R1, R2:Robot_humanoidalny;
obiektów do klasy
R1.Reka. przesuń(kierunek, odległość)
Przykładowa akcja
OOP - Object Oriented Programming
• stosuje się typ obiektowy - abstrakcyjne typy danych
• operacje programu dotyczą utworzonych w
nim obiektów (instancji) – zgodnie z definicją
• dane traktowane są jako rzecz istotniejsza - funkcje
na drugim miejscu
Istota działań w programie:
sterowane zdarzeniami (event_driven)
• zdarzenie jest zjawiskiem mającym związek z obiektem:
- w interfejsie systemu (naciśnięcie klawisza, kliknięcie
myszką, wybranie opcji menu)
- w określonym momencie czasowym
- w przypadku detekcji wystąpienia pewnego zjawiska,
stanu, poziomu jakiejś wielkości
- wyzwolone przez inny obiekt
• działania nie muszą być sekwencyjnie wykonywane
- wystąpienie zdarzenia ⇒ aktywizacja procedury obsługi
(metody)
- dalsze oczekiwanie na następne zdarzenie
• praktyczna realizacja wspomagana przez jakiś system
operacyjny
Realizacja programowania obiektowego:
-
-
większość współczesnych języków: C++,
Java, JavaScript, PHP, ObjectPascal, C#,
nawet w środowiskach specjalizowanych:
np. Matlab
w złożonych systemach, np. : sterowanie
automatów, systemy czasu rzeczywistego często specjalistyczne oprogramowanie,
kodowanie danych i funkcji systemów
obiektowych z wykorzystaniem języków
niskiego poziomu (elementarne rozkazy
procesora, assembler)
Javascript
Przypomnienie zasad
Może być osadzany w innych programach, na przykład w
przeglądarce internetowej, aby, mając dostęp do obiektów
otoczenia (np. modelu obiektowego przeglądarki
internetowej - DOM), można sprawować nad tym otoczeniem
kontrolę.
Javascript jest łatwy w nauce i pozwala na pewne
„zdynamizowanie” stron internetowych, a także zarządzanie
włanymi, utworzonymi obiektami.
Przeglądarki mogą pytać o zezwolenie na wykonanie skryptu.
Wstawienie skryptu do dokumentu HTML
Skrypty JavaScript są zagnieżdżane w dokumentach HTML. Skrypt JavaScript
umieszczane są między znacznikami <SCRIPT> i </SCRIPT>.
<SCRIPT LANGUAGE="JavaScript">
treść skryptu
</SCRIPT>
<HTML><HEAD></HEAD>
<BODY>
<P> To jest tekst 1</P>
<SCRIPT LANGUAGE="JavaScript">
treść skryptu 1
</SCRIPT>
<P> To jest tekst 2</P>
<SCRIPT LANGUAGE="JavaScript">
treść skryptu 2
</SCRIPT>
</BODY></HTML>
Może istnieć wiele skryptów naprzemiennie z
pozostałym kodem HTML
Aby tworzyć działające skrypty JavaScript
wymagane są:
- jakaś metoda wprowadzania i
przechowania danych (liczb, tekstów)
- jakieś instrukcje, które umożliwią
obliczenia wyników
- jakieś metody pokazania wyniku
Wykorzystanie skryptu Javascript w dokumencie HTML
<HTML><HEAD></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
// obiekt document i jego metoda write - wypisanie tekstu
document.write ("To jest zwykły tekst");
// wysyłamy też znacznik HTML
document.write ("<BR />");
//nadajemy wartość zmiennej
x=5;
// ... i wyświetlamy jej wartość
document.write("Wartość zmiennej <I>x</I> : "+x);
document.write ("<BR>To jest liczba PI:"+Math.PI);
</SCRIPT>
<P> a to już akapit poza skryptem</P>
</BODY></HTML>
właściwość
obiektu
Kilka zasad pisania skryptów
Komentarze
Komentarz o kilku wierszach,
/*
treść komentarza
*/
Jednowierszowy komentarz
// tekst
Wykorzystywane są w celu:
- opisy wyjaśniające
- dezaktywowanie instrukcji (testy, błędy)
Identyfikatory
Są to nazwy elementów (zmiennych, obiektów, funkcji)
Zmienne służą do przechowania wartości określonego
typu
Jednym z podstawowych sposobów nadania wartości
zmiennej jest instrukcja przypisania (nadania wartości)
Ciąg liter, cyfr, znaków podkreślenia (nie wolno spacji!)
Musi się zaczynać od litery
Ważne duże i małe litery ! (w odróżnieniu od innych języków)
Przykłady identyfikatorów dla zmiennych:
x
alfa
Alfa
to dwie różne
zmienne
mojaZmienna
styl
"wielbłądzi"
B11
c_33
Operatory
Arytmetyczne: +
-
*
/
%(reszta z dzielenia)
Przypisania:
=
+=
–=
*=
/=
++
-%=
x+=5 odpowiada x=x+5,
x–=5 odpowiada x=x–5,
x*=5 odpowiada x=x*5,
x/=5 odpowiada x=x/5,
inkrementacja – zwiększenie o 1 (x++ odpowiada x=x+1)
dekrementacja – zmniejszenie o 1 (x-- odpowiada x=x-1)
reszta z dzielenia (x%=5 odpowiada x=x%5)
operator + służy też do konkatenacji (łączenia tekstów)
"Mateusz " + 'Kowalski'
para " lub para '
Przykładowo:
<SCRIPT LANGUAGE="JavaScript">
x = 7; //początkowo x ma wartość 7
x++; //zwiększamy o 1
x += 4; //dodajemy 4
(lub:
x=x+4 )
x %= 10; //reszta z dzielenia z przez 10, a więc ….. 2
//tu trzeba by wypisać wartość x na ekranie, zaraz się nauczymy
</SCRIPT>
Operatory porównania
wyrażenie operator wyrażenie
==
!=(nierówne)
<=
<
>
>=
Przykładowo:
x==5
x>=3
a+b> 3*y
jest to pytanie: czy jest spełnione?
odpowiedź: tak lub nie (TRUE/FALSE)
Porównania mogą być przypisane do zmiennej:
z34 = 5<=6 (zmienna z34 będzie miała wartość true)
Używane też w innych instrukcjach (np. warunkowej) – o tym za
chwilę
Operatory logiczne
• koniunkcja (i)
• alternatywa (lub)
• negacja
&&
||
!
true && false daje false
!false daje true
Instrukcje – wykonanie akcji!
Instrukcje języka oddzielamy średnikami (jeśli
zapisujemy w tym samym wierszu).
Czasem blok kilku instrukcji otaczamy klamrami { }
zazwyczaj we wnętrzu instrukcji warunkowych i
iteracyjnych (np. if, for, while) – o nich za chwilę
<SCRIPT LANGUAGE="JavaScript">
instrukcja1;
{
traktowany w całości
instrukcja2;
jako blok instrukcji
instrukcja3;
instrukcja4;
}
</SCRIPT>
Typy instrukcji
- przypisania (nadania wartości);
- warunkowe
- pętle
- wykonania funkcji (metody obiektu)
Instrukcja przypisania
zmienna operator_przypisania [wyrażenie];
Po lewej stronie operatora tylko nazwa zmiennej!!! inicjowanej (pierwszy raz
definiowanej) lub istniejącej i przedefiniowywanej.
Po prawej stronie operatora piszemy wyrażenie (bardzo podobne jak w
Excelu), zawierające liczby, operatory, nawiasy okrągłe, funkcje – metody
obiektów, oraz zmienne o ZNANYCH WARTOŚCIACH
Wyrażenie jest obliczane i jego wartość przechowana w zmiennej
Wyrażenie jest opcjonalne (pomijamy w przypadku operatorów ++ i --)
Przykłady:
x=5;
alfa= 3*x;
b15=(3-x)+2.7/alfa;
b15++;
x+=4;
stałe - liczby dziesiętne z
KROPKĄ!!!
Oczywiście ważna jest kolejność
instrukcji przypisania!
a=5;
a++; //to ma sens
a++; //nieznane a
a=5;
Instrukcja wypisania na ekranie
document.write (element);
document to wbudowany obiekt w JavaScript, a write (pisz) to jedna
z jego metod
identyfikator obiektu i identyfikator jego metody oddzielamy kropką
Przykład
<SCRIPT LANGUAGE="JavaScript">
document.write ("To jest zwykły tekst<BR />");
x=5; //przypisujemy wartość zmiennej
// wyświetlamy jej wartość
document.write("Wartość zmiennej <I>x</I> : "+x+"<BR />");
napis="Mateusz " + 'Kowalski';
document.write(napis);
</SCRIPT>
Można wysyłać do przeglądarki znaczniki HTML(dla pozycjonowania,
formatowania itp.)
Inna metoda wyprowadzenia danych wyświetlanie w dodatkowym okienku
alert
Metoda dla obiektu window, tworząca okienko
dialogowe z napisem informacyjnym lub wartością
numeryczną.
<SCRIPT language="JavaScript">
raz=2;
alert("Witaj!");
alert("Witaj "+raz+"-gi raz");
</SCRIPT>
dokładniej window.alert , ale domyślny obiekt to window
Obiekt Math (uwaga! –duża litera M)
Wbudowany obiekt Math zawiera wartości
matematyczne, jako właściwości (ang. property) i
funkcje standardowe jako metody (ang. method).
Są tutaj przechowywane pewne stałe matematyczne:
Math.property
lub gotowe funkcje
Math.method
gdzie property lub method jest jednym z podanych
niżej elementów.
property (właściwości)
E
e - stała Eulera, która wynosi ok. 2.718
PI
wartość liczby π, czyli ok. 3.14159
document.write(Math.E);
method (metody)
abs(wyrażenie)
wartość bezwzględna liczby
cos(wyrażenie)
sin(wyrażenie)
tan(liczba)
funkcje trygonometryczne (argument w
radianach!!!)
ceil(liczba)
zaokrąglenie do całkowitej w górę
floor(liczba)
zaokrąglenie do całkowitej w dół
round(liczba)
zaokrąglenie do najbliższej całkowitej
exp(liczba)
ex UWAGA!!!
log(liczba)
logarytm naturalny liczby !
pow(liczba1,liczba2)
wartość liczby1 podniesionej do potęgi
liczby2
random()
wartość pseudolosowa z przedziału
(0,1) – bez argumentu
sqrt(liczba)
pierwiastek kwadratowy liczby
Przykłady:
<SCRIPT LANGUAGE="JavaScript">
document.write(Math.sin(4*Math.PI/180)+"<BR />");
</SCRIPT>
lub wykorzystując zmienną:
<SCRIPT LANGUAGE="JavaScript">
wynik=Math.sin(3*Math.PI/180);
document.write(wynik);
//można też
alert ("Wynik=:"+wynik); //w dodatkowym oknie
</SCRIPT>
Sekwencja obliczeń:
<SCRIPT LANGUAGE="JavaScript">
//Pierwiastki równania kwadratowego
a=5;
b=5;
c=1;
delta=b*b-4*a*c;
pdelta=Math.sqrt(delta);
x1=(-b-pdelta)/2/a; //albo …/(2*a)
x1:-0.7236067977499789
x2=(-b+pdelta)/2/a;
x2:-0.276393202250021
document.write('x1:'+x1+"<BR />");
document.write('x2:'+x2+"<BR />");
</SCRIPT>
Oczywiście gdy delta będzie ujemne, to błąd!
NaN – nieokreślone
Jak przeciwdziałać? Instrukcja badania warunku if (test,
sprawdzenie!)
Przykład pisania wyrażeń
y=
sin x − 3 ( x − 3 )x
zapis w skrypcie JavaScript
2
x
−3
+4
x=Math.PI; //musimy określić wartość x
y= (Math.pow(Math.sin(x),2) - Math.pow((x-3)*x,1/3)) /(Math.abs(Math.pow(x,-3))+4);
document.write(y);
łatwo o błędy (dużo nawiasów!)
Uwaga: wolno spacje, ale nie wewnątrz nazw
wolno przenieść do następnego wiersza
jak sobie ułatwić?
wprowadzać zmienne pomocnicze
liczymy etapami….
y=
sin x − 3 ( x − 3 )x
2
x
−3
<SCRIPT language="JavaScript">
x=Math.PI; //jak poprzednio
L1= Math.pow(Math.sin(x),2);
L2=Math.pow((x-3)*x,1/3);
L= L1- L2;//licznik
M= Math.abs(Math.pow(x,-3))+4; //mianownik
y= L/M; //wynik
document.write(y);
</SCRIPT>
+4
Debugging – detekcja błędów kodu JavaScript
Przykładowo:
…
document.write("log(5)<br />");
document.write(math.log(5)/Math.log(10)+"<
br />");
…
W IExplorer – Menu Narzędzia (narzędzia deweloperskie - F12) –
w oknie konsoli klikamy menu Skrypt
Po odświeżeniu strony w konsoli pojawi się komunikat:
SCRIPT5009: Brak definicji „math”