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”