Programowanie obiektowe– ćw.7
Transkrypt
Programowanie obiektowe– ćw.7
Programowanie obiektowe– ćw.7 JAVAScript –definicje własnych obiektów i ich instancje W JavaScript można tworzyć własne definicje obiektów (tzw. konstruktor obiektu) z wykorzystaniem funkcji. Potem można tworzyć ich egzemplarze (instancje). Przykładowo funkcja definiująca obiekty: function Nazwa(argument1, argument2) { this.właściwość1 = argument1; //nadanie wartości przez argument this.właściwość2 = argument2; //nadanie wartości przez argument this.właściwość3 = 5; //nadanie stałej wartości liczbowej this.właściwość4 = true; //nadanie stałej wartości logicznej this.metoda1 = function(argumenty){ //opis metody1 (można tu wykorzystywać argumenty i właściwości) } this.metoda2 = function(argumenty){ //opis metody2 } //itd. } Jak widzimy właściwości obiektu (z wykorzystaniem słowa kluczowego this) są nadawane przy pomocy argumentów funkcji, mogą też mieć nadane stałe wartości. Teraz możemy wygenerować wiele "egzemplarzy" (instancji) obiektu o definicji Nazwa() i przypisać je do zmiennych referencji p1 i p2. Wykorzystujemy tu zapis ze słowem kluczowym new: var p1 = new Nazwa( argumenty aktualne); //zmienna lokalna p2 = new Nazwa( inne argumenty aktualne); //zmienna globalna Poniżej konkretny przykład - oprócz właściwości także metody (wewnętrzne funkcje) w definicji funkcji konstruktora obiektów typu Pies(): <PRE> <SCRIPT language="JavaScript"> //funkcja konstruktor – pewne właściwości przekazywane przez argumenty funkcji function Pies(imie, rasa, kolor, plec) { //własciwości this. imie = imie; this. rasa = rasa; this. kolor = kolor; this. plec = plec; this.glos ="HAUUUU"; //dla wszystkich psów ten sam //metoda this.dajGlos = function () {//bez argumentu document.writeln (this.glos); //wypisz głos psa } this.zmienGlos = function(nowy){//argument podaje nowy głos this.glos=nowy; } this.pokazImie = function(){//bez argumentu return this.imie; } };//koniec definicji konstruktora //teraz utworzymy dwie instancje (dwa obiekty typu Pies) var piesek1 = new Pies( "Misia", "Labrador", "czekoladowa", "suka" ); var piesek2 = new Pies( "Misiek", "Seter", "rudy", "pies" ); //możemy mieć dostęp do właściwości i metod document.writeln(piesek1.imie); // ->Misia piesek1.imie="Fisia"; //zmiana właściwości piesek1.dajGlos ( ); //-> HAUUUU piesek1.zmienGlos("hau hau hau"); //można zmienić właściwość odpowiednią metodą piesek1.dajGlos ( ); //nowy głos document.writeln(piesek1.pokazImie( )); //metoda bezargumentowa //itd. np. wykorzystywać właściwości i metody pieska2 </SCRIPT> </PRE> Właściwości i metody piszemy zawsze w odniesieniu do utworzonego egzemplarza obiektu (zapis kwalifikowany – z kropką): obiekt.właściwość obiekt.metoda Właściwości najczęściej wypisujemy lub czasem zmieniamy, można je także wykorzystać w metodach do wyrażeń obliczeniowych (w zależności od typu właściwości). Metody wykonujemy w osobnej instrukcji w kontekście egzemplarza obiektu albo, o ile funkcja zwraca jakąś wartość (return), można tę wartość wypisać lub wykorzystać do ewentualnych dalszych działań. Argumenty służą do inicjacji wartości właściwości. Metody też mogą mieć argumenty przekazywane do metod (jak np. metoda zmienGlos() ). Argumentów przy wykonaniu musi być tyle samo ile w definicji i odpowiedniego typu. Zwróćmy uwagę, że zmienne argumentów mają tu takie same nazwy jak właściwości obiektu (rozróżnienie dzięki słowu this), choć mogą też się różnić. Zadania 1. Dokładnie przeanalizować przykład, sposoby definiowania właściwości i metod, tworzenie egzemplarzy obiektów, wykorzystanie właściwości i metod w skrypcie. 2. W powyższym przykładzie: • Dodać do funkcji konstruktora właściwość wiek. Obydwu tworzonym egzemplarzom typu Pies nadawać różną wartość wieku przy pomocy argumentu. Wyświetlić wiek na ekranie. • dodać do konstruktora metodę pokazWiek(). Wykorzystać metodę w skrypcie do wyświetlenia wieku obu psów. • dodać następne właściwości według własnego pomysłu, np. dlugoscOgona, oraz metody (np. nadajDlugoscOgona() lub pokazDlugoscOgona() ). 3. Utworzyć skrypt, w którym: • utworzona jest definicja obiektu Auto z zaprojektowanymi właściwościami, np. marka, pojemnosc, moc, predkosc itp. Uwaga: Wszystkie wartości właściwości inicjować przez argumenty funkcji definiującej, z wyjątkiem prędkości, którą dla wszystkich nowotworzonych obiektów ustawić na 0. • zdefiniować metody: wypiszDane(), której zadaniem jest wypisanie danych auta, start(s) gdzie s będzie prędkością początkową, stop(), której zadaniem jest zatrzymanie pojazdu, przyspiesz(p), gdzie p będzie wartością, o którą należy zwiększyć prędkość. • tworzona jest instancja (lub kilka instancji) obiektu Auto, • po utworzeniu instancji wypisywane są wszystkie właściwości z wykorzystaniem metody wypiszDane(), • następnie wykorzystujemy metody: start() przyspiesz() stop() (przyspieszać można wielokrotnie), każdorazowo wypisywać na ekranie dane (szczególnie interesuje nas prędkość początkowa, po starcie, po przyspieszeniu itd. – można utworzyć dodatkowo metodę wypiszPredkosc() i ją wykorzystać).