JAVAScript –definicje własnych obiektów i ich instancje cd. //tu

Transkrypt

JAVAScript –definicje własnych obiektów i ich instancje cd. //tu
Programowanie obiektowe– ćw.6
JAVAScript –definicje własnych obiektów i ich instancje cd.
Mamy poniższą definicję klasy (konstruktor):
<SCRIPT language="JavaScript">
function Auto (nr,nazwa) {
//właściwości
this.nr=nr;
this.nazwa = nazwa;
this.predkosc=0;
//metody
this.podajNazwe = function(){
return this.nazwa;
}
this.ruch = function(dp){
this.predkosc=dp;
}
this.zatrzymaj = function(){
this.predkosc=0;
}
this.pokazPredkosc = function(){
return this.predkosc;
}
}
//tu samodzielnie dopisać kod działań z wykorzystaniem definicji klasy
</SCRIPT>
Zadanie
1. Bazując na poprzednim ćwiczeniu:
• dopisać kod utworzenia instancji obiektu Auto(),
• wykorzystać metod do inicjacji ruchu i wyświetlania aktualnej prędkości,
• dodać właściwość stanBaku, dodać metodę pokazStanBaku,
• zmodyfikować metodę ruch() tak, aby oprócz prędkości jako argument podawany był
również dystans do przejechania,
• w treści metody ruch() zmniejszać stanBaku o ilość zależną od przejechanego dystansu, wykonać w kodzie dla egzemplarza auta kilka jazd i każdorazowo wyświetlać stan
baku,
• dopisać warunek, żeby niemożliwy był ujemny stan baku,
• dopisać w metodzie ruch() warunek uruchomienia auta – jeżeli bak jest pusty nie da
się jechać,
• dopisać metodę tankuj() i wykorzystać w kodzie.
Oddziaływanie wzajemne obiektów
<HTML> <HEAD> </HEAD><BODY style="font-size:18px">
Oddziaływanie obiektów – koty gryzą wzajemnie ogony
<PRE>
<SCRIPT language="javascript">
var Kot=function(imie, ogon) {
this.imie=imie;
this.ogon=ogon;
//argumentem metody będzie inny obiekt
this.ugryz=function(ob){
ob.ogon-=5;
}
}
kot1= new Kot ("Maciuś",20);
kot2= new Kot ("Misiek", 20);
document.writeln(kot1.imie," ma ogon ",kot1.ogon);
document.writeln(kot2.imie," ma ogon ",kot2.ogon);
document.writeln(kot2.imie," gryzie ", kot1.imie);
kot2.ugryz(kot1);//kot2 gryzie kota1
document.writeln(kot1.imie," ma teraz ogon ",kot1.ogon);
document.writeln(kot1.imie," gryzie ", kot2.imie);
kot1.ugryz(kot2); //kot1 gryzie kota2
document.writeln(kot2.imie," ma teraz ogon ",kot2.ogon);
</SCRIPT>
</PRE>
</BODY></HTML>
Obiekty wewnętrzne
W przypadku konieczności uwzględnienia pewnej liczby elementów o identycznym zestawie właściwości,
wchodzących w skład definiowanego obiektu, możemy jedną z właściwości obiektu głównego zdefiniować jako
pustą tablicę, a następnie wykorzystać odpowiednią metodę do wypełniania tablicy.
Elementami takiej tablicy mogą także być obiekty (mamy wówczas możliwość zróżnicowania typów składowych obiektu). Tablica elementów może być dynamicznie wypełniana w programie (dowolna liczba jej składowych).
<PRE><SCRIPT language="JavaScript">
var Mechanizm= function(nr, typ)
{
this.nrR=nr;
this.typR= typ;
//pusta tablica
this.dzwignie=[ ];
this.tworzDzwignie=function(nrDz, dlDz)
{
//umieść obiekt wewnętrzny w podanej komórce tablicy
this.dzwignie[nrDz-1]={
nrD: nrDz,
dlD: dlDz,
}
}
} //koniec definicji konstruktora
//tworzymy egzemplarz obiektu
m1=new Mechanizm (1,'x25');
//tworzymy składowe obiektu
m1.tworzDzwignie (1, 500);
m1.tworzDzwignie (2,600);
m1.tworzDzwignie (3,400);
//wypisujemy nadane właściwości
document.writeln("Robot nr ",m1.nrR, " Typ:",m1.typR);
document.writeln("Ręce");
//elementy tablicy dzwignie
for (k=0;k<m1.dzwignie.length;k++)
{
document.writeln("Nr dzwigni:", m1.dzwignie[k].nrD," długość
dźwigni:",m1.dzwignie[k].dlD);
}
</SCRIPT></PRE>
Przykład aplikacji z wizualizacją
Utworzyć obrazek auta (plik o nazwie 1.jpg), zapisać w folderze z poniższym plikiem HTML:
<HTML><HEAD></HEAD><BODY style="font-size:30px">
<SCRIPT language="JavaScript">
//zmienne pomocnicze
licznik=0;
var t;
//=========================================
function stoper( )
{
el=document.getElementById("T1");
el.style.left = licznik;
licznik++;
t=setTimeout("stoper( )",op);
}
//=========================================
function jazda(p) {
//ustalenie opóźnienia (szybkości)
op=2000/p; //zmienna globalna
stopuj( )
//uruchom stoper
stoper();
}
//=========================================
function stopuj( ) {
clearTimeout(t);
}
</SCRIPT>
<INPUT type="button" value="Start 50" onclick="jazda(50)" />
<INPUT type="button" value="Start 100" onclick="jazda(100)" />
<INPUT type="button" value="Start 200" onclick="jazda(200)" />
<INPUT type="button" value="Stop" onclick="stopuj( )" />
<IMG id="T1"
style="position: absolute; left: 0px; top: 60px; background-color:red" src="1.jpg"/>
</BODY></HTML>
Przykład 2
Wyścig dwóch aut (potrzebny też drugi obrazek auta – 2.jpg)
<HTML> <HEAD>
</HEAD>
<BODY STYLE="FONT-SIZE:18PX">
<DIV id="ed1">MacLaren ma prędkość:0</DIV>
<DIV id="ed2">Porsche ma prędkość:0</DIV>
<SCRIPT language="JavaScript">
licznik1=0;
licznik2=0;
var t1;
var t2;//konieczna inicjacja zmiennych t1 t2
//definiujemy funkcję jako konstruktor obiektu Auto(nazwa)
function Auto (nr,nazwa) {
this.nr=nr;
this.nazwa = nazwa;
this.predkosc=0;
var d=document.getElementById('ed'+this.nr);
d.style.visible='true';
//metody
this.podajNazwe = function( ){
return this.nazwa;
}
this.przyspiesz = function(dp){
this.predkosc=dp;
}
this.zatrzymaj = function( ){
this.predkosc=0;
}
this.pokazPredkosc = function( ){
return this.predkosc;
}
this.wyswietl = function( ){
var d=document.getElementById('ed'+this.nr);
d.innerHTML=this.podajNazwe()+' ma prędkość:'+this.pokazPredkosc();
}
}
//-----------------------------------------------------//pomocnicza funkcja porównująca prędkości dwóch obiektów
function porownaj(a,b) {
if (a.predkosc>b.predkosc)
return 'Prędkość auta '+ a.nazwa+ ' jest większa';
else if (a.predkosc==b.predkosc)
return 'Prędkości aut są jednakowe';
else
return 'Prędkość auta '+ b.nazwa+ ' jest większa';
}
//-----------------------------------------------------function zrobAuta() {
a1 = new Auto(1,"MacLaren");
a2 = new Auto(2,"Porsche");
o1=document.createElement("IMG");
o2=document.createElement("IMG");
o1.setAttribute("src", "1.jpg");
o1.setAttribute("id", "o1");
o1.style.position="absolute";
o1.style.left="0px";
o1.style.top="200px";
o2.setAttribute("src", "2.jpg");
o2.setAttribute("id", "o2");
o2.style.position="absolute";
o2.style.left="0px";
o2.style.top="300px";
var d=document.getElementById('ed1');
document.body.insertBefore(o1,d);
document.body.insertBefore(o2,d);
zlam=document.createElement("BR");
var e=document.getElementById('o2');
document.body.insertBefore(zlam,e);
}
//------------------------------------------------------function stoper1()
{
o1.style.border="10px solid green";
o1.style.left = licznik1;
licznik1++;
t1=setTimeout("stoper1()",op1);
}
//-----------------------------------------------------function stoper2()
{
o2.style.border="10px solid blue";
o2.style.left = licznik2;
licznik2++;
t2=setTimeout("stoper2()",op2);
}
//-----------------------------------------------------function jazda1(p)
{
op1=2000/p;
stopuj1();
stoper1();
}
//-----------------------------------------------------function jazda2(p)
{
op2=2000/p;
stopuj2();
stoper2();
}
//-----------------------------------------------------function stopuj1( )
{
clearTimeout(t1);
}
//-----------------------------------------------------function stopuj2( )
{
clearTimeout(t2);
}
//-----------------------------------------------------</SCRIPT>
<INPUT type="button" value=" Utwórz dwa auta" onclick="zrobAuta()" /><BR/>
<INPUT type="button" value=" Wolno a1" onclick="a1.przyspiesz(10);a1.wyswietl( );jazda1(50)" />
<INPUT type="button" value=" Szybko a1" onclick="a1.przyspiesz(30);a1.wyswietl( );jazda1(100)" />
<INPUT type="button" value=" Zatrzymaj a1" onclick="a1.zatrzymaj();a1.wyswietl( );stopuj1()" /><BR/>
<INPUT type="button" value=" Wolno a2" onclick="a2.przyspiesz(10);a2.wyswietl( );jazda2(50)"/>
<INPUT type="button" value=" Szybko a2" onclick="a2.przyspiesz(30);a2.wyswietl( );jazda2(100)"/>
<INPUT type="button" value=" Zatrzymaj a1" onclick="a2.zatrzymaj( );a2.wyswietl( );stopuj2()"/><BR/>
<INPUT type="button" value="Które auto jest szybsze?" onclick="alert(porownaj(a1,a2)+
"\n"+a1.podajNazwe( )+" "+a1.pokazPredkosc( )+"\n"+a2.podajNazwe( )+" "+
a2.pokazPredkosc( ));" /><br />
</BODY></HTML>
Na bazie tej aplikacji dokonać własnych zmian:
1. Uwzględnienie i wizualizacja stanu benzyny w baku w czasie jazdy.
2. Wyścig trzech aut.
3. Wyścig dwóch aut z losowo zmienianą w czasie prędkością.
4. Inne według własnego pomysłu.
Temat: Robot z 4-ma kończynami, opisanymi jako tablica obiektów wewnętrznych – wizualizacja ruchu
kończyn.
Temat: Klasa Narzędzie i klasy potomne Młotek i Piła
Temat: Klasa Zegar_mechaniczny z obiektami wewnętrznymi (wskazówki, koła zębate – jako tablice
obiektów.

Podobne dokumenty