Dziedziczenie własności obiektu (wersja wideo)
-
0:01 - 0:03Wracamy do programu
tworzącego Winstonów. -
0:04 - 0:06Dodałam nowy typ obiektu: Hopper,
-
0:06 - 0:09bo Hopper czuła się pominięta.
-
0:09 - 0:12Definiuję ją tak samo jak Winstona.
-
0:12 - 0:14Zaczynam od konstruktora,
-
0:14 - 0:17potem są właściwości,
rysowanie i mówienie... -
0:17 - 0:21Dodałam też metodę „Hura!”,
-
0:21 - 0:25bo Hopper bardzo lubi świętować.
A Winston - wcale. -
0:25 - 0:30U dołu funkcji stworzyłam
dwa nowe obiekty „Hopper”: -
0:30 - 0:33Dużą i Małą. Narysowałam je.
-
0:33 - 0:37Jednej przypisałam funkcję
mówienia, drugiej - „Hura”. -
0:37 - 0:40I dobrze. Patrząc
w ten fragment programu, -
0:40 - 0:43możecie zauważyć coś ciekawego.
-
0:43 - 0:47Program dla Hopper
jest podobny do tego dla Winstona. -
0:47 - 0:49Zwróćcie uwagę na konstruktora.
-
0:49 - 0:55Może pamiętacie... To dokładnie
ten sam program, co u Winstona. -
0:55 - 1:00I funkcja „talk” jest identyczna
jak u niego. -
1:01 - 1:04Jedno i drugie ma funkcję „draw”.
-
1:04 - 1:07Te dwa typy obiektów wiele łączy!
-
1:07 - 1:13To ma sens, bo Hopper i Winston
są podobnymi typami w naszym świecie. -
1:13 - 1:17Zresztą w prawdziwym świecie,
poza komputerem, -
1:18 - 1:21wiele typów obiektów
przypomina inne. -
1:21 - 1:23Np. w królestwie zwierząt.
-
1:23 - 1:25Wszystkie zwierzęta
są do siebie podobne. -
1:25 - 1:29Ale są różne typy zwierząt,
np. ludzie. -
1:29 - 1:34Ludzie są podobni do zwierząt,
a także do siebie nawzajem. -
1:34 - 1:38Możemy więc powiedzieć,
że „zwierzę” to typ obiektu, -
1:38 - 1:42od którego typ obiektu „człowiek”
dziedziczy funkcjonalność. -
1:42 - 1:44Nie zaczynamy się z niczego;
-
1:44 - 1:47dodajemy cechy do tych,
które mamy jako zwierzęta. -
1:47 - 1:49Wszystkie zwierzęta wydają odgłosy,
-
1:49 - 1:51a ludzie dodatkowo mówią.
-
1:52 - 1:56Pojęcie dziedziczenia obiektów
przydaje się też w programowaniu. -
1:56 - 2:01W JavaScript możemy stworzyć
łańcuch dziedziczenia obiektów. -
2:01 - 2:05Zastanówmy się, co łączy
nasze typy obiektów. -
2:05 - 2:07I wymyślmy nazwę.
-
2:07 - 2:11Stworzymy nowy typ obiektu,
reprezentujący obiekt bazowy. -
2:11 - 2:14Dajmy nazwę: „Creatures”
(istoty). Bo nimi są. -
2:14 - 2:16Piszemy: „var creature =”...
-
2:16 - 2:18Potrzebujemy konstruktora.
-
2:18 - 2:23Ma go Hopper.
Taki sam jest u Winstona. -
2:23 - 2:25W porządku? I teraz...
-
2:25 - 2:28Zobaczmy... Teraz chcemy...
-
2:29 - 2:33Co dalej? Może dodamy
funkcję „talk”? -
2:33 - 2:36Zabierzemy ją.
-
2:36 - 2:40Musi być w prototypie „creature”.
-
2:40 - 2:41W porządku.
-
2:41 - 2:45Mamy już typ obiektu „creature”.
-
2:45 - 2:48Ale Hopper musi się dowiedzieć,
-
2:48 - 2:53że ma na opierać swoje działanie
na „creature”. -
2:53 - 2:56Załatwimy to, pisząc ten wiersz.
-
2:56 - 2:59Piszemy: „Hopper.prototype”
-
2:59 - 3:02równa się „object.create”
-
3:03 - 3:05„creature.prototype”.
-
3:05 - 3:08Ten wiersz każe językowi JavaScript
-
3:08 - 3:12oprzeć prototyp,
czyli funkcjonalność Hopper, -
3:12 - 3:15na prototypie „creature”.
-
3:15 - 3:20Zawsze, gdy program szuka
funkcji u Hopper, -
3:20 - 3:23najpierw spojrzy na prototyp.
-
3:23 - 3:27A jeśli tam nie znajdzie,
to spojrzy na prototyp „creature”. -
3:27 - 3:29To nazywamy łańcuchem prototypów.
-
3:30 - 3:31Po zrobieniu tego
-
3:32 - 3:35powinno być możliwe skasowanie
funkcji „talk” u Hopper. -
3:35 - 3:37Bo jest już w „creature”.
-
3:38 - 3:40Wyżej w łańcuchu prototypów.
Spróbujmy! -
3:40 - 3:43Gotowi? Udało się!
-
3:43 - 3:48Bo program znalazł funkcję
w prototypie „creature”. -
3:49 - 3:51Spróbujmy skasować
tę funkcję u Winstona. -
3:53 - 3:58Nie udało się. Obiekt nie ma
metody „talk”. -
3:58 - 4:00A dlaczego?
-
4:00 - 4:03Są konstruktor i „draw”,
a „talk” usunęliśmy. -
4:03 - 4:07Zapomnieliśmy powiedzieć
prototypowi Winstona, -
4:07 - 4:10że ma się opierać na prototypie
„creature”. Ważny wiersz: -
4:10 - 4:15„Winston.prototype=object.create
creature.portotype”. -
4:18 - 4:21Już! Zauważcie coś istotnego:
-
4:21 - 4:24Ten wiersz jest po konstruktorze,
-
4:24 - 4:27ale wpisuję go, zanim dodam coś
do prototypu Winstona. -
4:27 - 4:30Zazwyczaj chcemy powiedzieć,
-
4:30 - 4:34że na tym będzie się opierać
początkowy prototyp. -
4:34 - 4:37Możemy dodawać do prototypu
kolejne elementy. -
4:37 - 4:41Winston i Hopper mogą mieć
charakterystyczne cechy, -
4:41 - 4:45których nie ma w „creatures”.
Super, że można je zdefiniować! -
4:47 - 4:50No dobrze. Widzimy
powtarzające się fragmenty. -
4:50 - 4:51To konstruktor.
-
4:51 - 4:54Ten sam we wszystkich
trzech przypadkach. -
4:54 - 4:57Czy możemy go skasować?
-
4:58 - 4:59Spróbujmy.
-
5:01 - 5:04Hmmm... Nie udało się.
-
5:04 - 5:08Hopper pokazuje się w lewym górnym
rogu. Nie pamięta nic o sobie. -
5:08 - 5:11Bo JavaScript nie zakłada,
-
5:11 - 5:15że chcemy tego samego konstruktora,
nawet gdy ma być w prototypie. -
5:15 - 5:19Pozwala nam zdefiniować
konstruktora dla tych obiektów. -
5:19 - 5:23I daje łatwy sposób,
by przywołać -
5:23 - 5:26tę funkcję z obiektu.
-
5:26 - 5:29Piszemy więc: „creature”...
-
5:29 - 5:30kropka, „call”,
-
5:31 - 5:35„this,nickname,age,x,y”.
-
5:36 - 5:37Dobrze.
-
5:37 - 5:39Program robi to
(zauważcie - zadziałało!)... -
5:39 - 5:45przywołuje funkcję
„creature”, konstruktora. -
5:45 - 5:48Przywołuje funkcję, ale mówi:
-
5:48 - 5:53„przywołaj tę funkcję tak
jak z obiektu Hopper, -
5:54 - 5:57jak z tymi argumentami”.
-
5:57 - 6:00Tak została przywołana Hopper.
-
6:00 - 6:04Program zostanie wykonany tak,
jakby był tutaj. -
6:04 - 6:05I o to właśnie nam chodzi.
-
6:06 - 6:07Udało się!
-
6:07 - 6:10Możemy skopiować ten wiersz
-
6:10 - 6:14także do konstruktora Winstona.
-
6:15 - 6:17To działa. Tak!
-
6:17 - 6:19Dobrze. Patrzcie:
-
6:19 - 6:22zamknęliśmy wspólne właściwości
i funkcjonalność -
6:22 - 6:25w jednym typie obiektu bazowego,
„creature”, -
6:25 - 6:28i na tej podstawie stworzyliśmy
dwa typy obiektów. -
6:28 - 6:32Dziedziczą funkcjonalność,
ale dodają też własną. -
6:32 - 6:36Wystarczy zmienić tę funkcjonalność
w jednym miejscu. -
6:36 - 6:41Np. moglibyśmy zmienić wiek,
pisząc: „plus lata”. -
6:41 - 6:44Teraz każdy ma na końcu „lata”.
-
6:44 - 6:48Możemy też zmienić
funkcje „talk”. „Super!”. -
6:48 - 6:52Teraz każdy Winston
i Hopper mówią: „Super!”. -
6:53 - 6:57Wiecie, jak tworzyć typy obiektów
i jak przebiega dziedziczenie. -
6:57 - 7:00Pomyślcie, jak to wykorzystać
w rysowaniu, animacjach, -
7:00 - 7:01symulacjach i grach.
-
7:02 - 7:05Np. macie grę
z wieloma postaciami... -
7:05 - 7:08Wszystkie biegają,
ale tylko niektóre skaczą. -
7:08 - 7:12Tu trzeba wykorzystać typy
obiektów i dziedziczenie! -
7:12 - 7:15Na pewno wymyślicie też
mnóstwo własnych zastosowań.
- Title:
- Dziedziczenie własności obiektu (wersja wideo)
- Description:
-
To tylko zapis naszych interaktywnych sesji poświęconych kodowaniu, stworzony by ułatwić ich przełożenie na inne języki. Polecamy obejrzenie tych sesji bezpośrednio pod adresem: https://pl.khanacademy.org/cs/programming/
- Video Language:
- English
- Duration:
- 07:17
Lech Mankiewicz edited Polish subtitles for Object Inheritance (Video Version) | ||
Lech Mankiewicz edited Polish subtitles for Object Inheritance (Video Version) |