Return to Video

Dziedziczenie własności obiektu (wersja wideo)

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

more » « less
Video Language:
English
Duration:
07:17

Polish subtitles

Revisions