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ć).

Podobne dokumenty