[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.18,0:00:03.58,Default,,0000,0000,0000,,Znacie podstawy języka JavaScript. Dialogue: 0,0:00:03.68,0:00:05.74,Default,,0000,0000,0000,,Pokażę wam fajne zastosowanie. Dialogue: 0,0:00:05.84,0:00:08.76,Default,,0000,0000,0000,,Tzw. programowanie obiektowe. Dialogue: 0,0:00:09.48,0:00:12.39,Default,,0000,0000,0000,,Zacznijmy od tego,\Nczemu to jest przydatne. Dialogue: 0,0:00:12.49,0:00:17.32,Default,,0000,0000,0000,,Mam program, który ulepszymy\Nza pomocą obiektów. Dialogue: 0,0:00:17.42,0:00:19.50,Default,,0000,0000,0000,,Teraz też jest niezły! Dialogue: 0,0:00:19.60,0:00:24.09,Default,,0000,0000,0000,,Dwie zmienne, u góry,\Nprzechowują literały. Dialogue: 0,0:00:25.09,0:00:28.30,Default,,0000,0000,0000,,Literał to obiekt, który już znamy: Dialogue: 0,0:00:28.40,0:00:33.11,Default,,0000,0000,0000,,w klamrach wpisujemy nazwy\Nwłaściwości oraz wartości. Dialogue: 0,0:00:34.29,0:00:38.100,Default,,0000,0000,0000,,Tu mamy dwie zmienne z literałami,\Na tu - funkcję „drawWinston”, Dialogue: 0,0:00:39.10,0:00:41.01,Default,,0000,0000,0000,,przyjmującą jeden argument. Dialogue: 0,0:00:41.11,0:00:45.84,Default,,0000,0000,0000,,Funkcja rysuje obraz\Nz uwzględnieniem „x” i „y” Dialogue: 0,0:00:45.94,0:00:47.65,Default,,0000,0000,0000,,oraz właściwości obiektu; Dialogue: 0,0:00:47.75,0:00:52.10,Default,,0000,0000,0000,,wyświetla też podpis\Nz przydomkiem i wiekiem. Dialogue: 0,0:00:52.92,0:00:57.86,Default,,0000,0000,0000,,U dołu mamy funkcję „drawWinston”\Ndla wieku nastoletniego i dorosłego. Dialogue: 0,0:00:57.96,0:01:00.90,Default,,0000,0000,0000,,Dlatego pokazuje się obraz. Dialogue: 0,0:01:01.00,0:01:05.99,Default,,0000,0000,0000,,Super! Przyglądając się literałom, Dialogue: 0,0:01:06.09,0:01:11.12,Default,,0000,0000,0000,,zauważymy ich podobieństwo. Dialogue: 0,0:01:11.22,0:01:13.91,Default,,0000,0000,0000,,Mają te same właściwości Dialogue: 0,0:01:14.01,0:01:17.60,Default,,0000,0000,0000,,i w obu może działać\Nta sama funkcja „drawWinston”. Dialogue: 0,0:01:17.70,0:01:21.63,Default,,0000,0000,0000,,Zastanówmy się:\Nkażdy literał opisuje Dialogue: 0,0:01:21.73,0:01:23.43,Default,,0000,0000,0000,,jakiś rodzaj Winstona. Dialogue: 0,0:01:23.53,0:01:28.51,Default,,0000,0000,0000,,Jakby na świecie istniał\Nabstrakcyjny typ Winstona, Dialogue: 0,0:01:28.61,0:01:31.58,Default,,0000,0000,0000,,zatem każdy Winston\Nmiałby te same właściwości Dialogue: 0,0:01:31.68,0:01:35.83,Default,,0000,0000,0000,,(przydomek, wiek,\Nwspółrzędne „x” i „y”)... Dialogue: 0,0:01:36.39,0:01:41.89,Default,,0000,0000,0000,,A my tu stworzyliśmy\Ntylko dwie instancje Winstona, Dialogue: 0,0:01:41.99,0:01:44.99,Default,,0000,0000,0000,,by opisać go\Nw szczególnej sytuacji. Dialogue: 0,0:01:45.09,0:01:48.06,Default,,0000,0000,0000,,Ten jest nastolatkiem,\Na ten - dorosłym. Dialogue: 0,0:01:48.16,0:01:51.46,Default,,0000,0000,0000,,Są podobni do siebie. Dialogue: 0,0:01:51.56,0:01:54.66,Default,,0000,0000,0000,,Bardzo wiele ich łączy. Dialogue: 0,0:01:54.76,0:01:57.45,Default,,0000,0000,0000,,Tak zresztą działa świat. Dialogue: 0,0:01:57.55,0:02:01.07,Default,,0000,0000,0000,,Istnieją abstrakcyjne\Ntypy danych, np. ludzie, Dialogue: 0,0:02:01.17,0:02:05.63,Default,,0000,0000,0000,,a każdy z nas jest instancją,\Nz własnymi cechami. Dialogue: 0,0:02:05.73,0:02:10.08,Default,,0000,0000,0000,,W JavaScript możemy używać\Ntechnik obiektowych, Dialogue: 0,0:02:10.18,0:02:14.61,Default,,0000,0000,0000,,żeby te zmienne z Winstonem Dialogue: 0,0:02:14.71,0:02:17.75,Default,,0000,0000,0000,,były instancjami obiektu „Winston”, Dialogue: 0,0:02:17.85,0:02:21.66,Default,,0000,0000,0000,,i wiedziały,\Nże mają wspólne cechy. Dialogue: 0,0:02:21.76,0:02:24.07,Default,,0000,0000,0000,,Aby tak było, musimy... Dialogue: 0,0:02:24.17,0:02:27.82,Default,,0000,0000,0000,,opisać ten abstrakcyjny\Ntyp danych - „Winstona”. Dialogue: 0,0:02:27.92,0:02:32.58,Default,,0000,0000,0000,,W tym celu określimy zmienną,\Nby przechowywać w niej dane. Dialogue: 0,0:02:32.68,0:02:35.76,Default,,0000,0000,0000,,Piszę więc: „var Winston”,\Nprzez wielkie „W” Dialogue: 0,0:02:35.86,0:02:38.74,Default,,0000,0000,0000,,(nazwy obiektów\Nzaczynamy od wielkiej litery). Dialogue: 0,0:02:38.84,0:02:41.03,Default,,0000,0000,0000,,I piszemy, że jest to równe funkcji. Dialogue: 0,0:02:42.12,0:02:46.65,Default,,0000,0000,0000,,To funkcja specjalna,\Nzwana konstruktorem. Dialogue: 0,0:02:46.76,0:02:49.70,Default,,0000,0000,0000,,Zostanie przywołana zawsze,\Ngdy będziemy chcieli Dialogue: 0,0:02:49.80,0:02:51.82,Default,,0000,0000,0000,,stworzyć nową instancję Winstona. Dialogue: 0,0:02:51.92,0:02:54.29,Default,,0000,0000,0000,,Chcąc stworzyć Winstona\Nnastoletniego Dialogue: 0,0:02:54.39,0:02:57.74,Default,,0000,0000,0000,,albo dorosłego,\Nprzywołamy tę funkcję. Dialogue: 0,0:02:57.84,0:03:00.77,Default,,0000,0000,0000,,Będzie ona przyjmować Dialogue: 0,0:03:00.87,0:03:03.62,Default,,0000,0000,0000,,argumenty, których potrzebuje, Dialogue: 0,0:03:03.72,0:03:06.20,Default,,0000,0000,0000,,by stworzyć pełnego Winstona. Dialogue: 0,0:03:06.30,0:03:10.17,Default,,0000,0000,0000,,W tym przypadku to przydomek,\Nwiek, „x” i „y”. Dialogue: 0,0:03:11.23,0:03:15.02,Default,,0000,0000,0000,,Skoro przyjęliśmy te argumenty,\Nmusimy coś z nimi zrobić. Dialogue: 0,0:03:15.12,0:03:17.79,Default,,0000,0000,0000,,Trzeba przypisać Dialogue: 0,0:03:17.89,0:03:21.20,Default,,0000,0000,0000,,te informacje do obiektu „Winston”. Dialogue: 0,0:03:21.43,0:03:24.78,Default,,0000,0000,0000,,Użyjemy nowego specjalnego\Nhasła, zwanego „this” (to). Dialogue: 0,0:03:25.54,0:03:28.41,Default,,0000,0000,0000,,Będzie się odnosić\Ndo bieżącej instancji obiektu. Dialogue: 0,0:03:28.51,0:03:30.81,Default,,0000,0000,0000,,Napiszemy: „this.nickname”, Dialogue: 0,0:03:30.91,0:03:34.71,Default,,0000,0000,0000,,co będzie znaczyć, że właściwość\Nprzydomka obiektu jest równa... Dialogue: 0,0:03:34.81,0:03:38.24,Default,,0000,0000,0000,,temu, co poda\Nfunkcja konstruktor. OK? Dialogue: 0,0:03:38.34,0:03:41.26,Default,,0000,0000,0000,,A „this.age” jest równe\Nwprowadzonemu wiekowi; Dialogue: 0,0:03:41.36,0:03:44.68,Default,,0000,0000,0000,,„this.x” równa się\Nwprowadzonemu „x”, a „y”... Dialogue: 0,0:03:45.81,0:03:48.25,Default,,0000,0000,0000,,równa się wprowadzonemu „y”. Dialogue: 0,0:03:48.35,0:03:52.95,Default,,0000,0000,0000,,Mamy abstrakcyjny typ danych,\Nktóry nazwaliśmy Winstonem, Dialogue: 0,0:03:53.05,0:03:56.63,Default,,0000,0000,0000,,a z pomocą konstruktora\Nmożemy stworzyć nowego Winstona. Dialogue: 0,0:03:57.50,0:04:00.19,Default,,0000,0000,0000,,Spróbujmy z tego skorzystać. Dialogue: 0,0:04:00.29,0:04:05.06,Default,,0000,0000,0000,,Znów robimy nastoletniego Winstona.\NPowiemy, że jest on równy... Dialogue: 0,0:04:05.16,0:04:07.15,Default,,0000,0000,0000,,Zamiast wstawiać klamry, Dialogue: 0,0:04:07.25,0:04:10.14,Default,,0000,0000,0000,,powiemy, że jest równy\Nnowemu Winstonowi. Dialogue: 0,0:04:10.24,0:04:13.77,Default,,0000,0000,0000,,Czyli staramy się stworzyć\Nnową instancję Winstona. Dialogue: 0,0:04:13.87,0:04:17.30,Default,,0000,0000,0000,,Wprowadzamy potrzebne informacje:\N„winstonTeen”, Dialogue: 0,0:04:17.40,0:04:21.29,Default,,0000,0000,0000,,15, 20, 50. W porządku? Dialogue: 0,0:04:22.28,0:04:25.75,Default,,0000,0000,0000,,Stary fragment możemy skasować.\NJest już niepotrzebny. Dialogue: 0,0:04:27.28,0:04:30.79,Default,,0000,0000,0000,,Stworzyliśmy nowego Winstona. Dialogue: 0,0:04:30.89,0:04:34.97,Default,,0000,0000,0000,,Powiemy, że Dorosły Winston\Nrówna się Nowemu Winstonowi. Dialogue: 0,0:04:35.07,0:04:37.62,Default,,0000,0000,0000,,Nazywa się Pan Wygrany, Dialogue: 0,0:04:37.72,0:04:39.13,Default,,0000,0000,0000,,ładnie! Dialogue: 0,0:04:39.23,0:04:43.24,Default,,0000,0000,0000,,Ma 30 lat i znajduje się\Nna 229 i 50. Dialogue: 0,0:04:43.93,0:04:47.21,Default,,0000,0000,0000,,Możemy skasować literał. Dialogue: 0,0:04:47.31,0:04:50.06,Default,,0000,0000,0000,,Hura! Nasz program działa! Dialogue: 0,0:04:50.73,0:04:54.24,Default,,0000,0000,0000,,Powiedzieliśmy tutaj: Dialogue: 0,0:04:54.34,0:04:57.66,Default,,0000,0000,0000,,mamy abstrakcyjny\Ntyp danych, Winstona, Dialogue: 0,0:04:57.76,0:05:00.40,Default,,0000,0000,0000,,i możemy tworzyć nowe instancje Dialogue: 0,0:05:00.50,0:05:04.25,Default,,0000,0000,0000,,z wyjątkowymi właściwościami. Dialogue: 0,0:05:04.35,0:05:08.64,Default,,0000,0000,0000,,Przypomnijmy sobie\Nwłaściwości w nich zawarte. Dialogue: 0,0:05:08.74,0:05:10.61,Default,,0000,0000,0000,,Trzeba o nich pamiętać. Dialogue: 0,0:05:10.71,0:05:14.13,Default,,0000,0000,0000,,Mamy tu „this.nickname”\Ni „this.age”. Dialogue: 0,0:05:14.23,0:05:17.60,Default,,0000,0000,0000,,Gdyby nie było „this.age”, Dialogue: 0,0:05:17.70,0:05:19.97,Default,,0000,0000,0000,,spójrzcie: wyskakuje „nieokreślone”. Dialogue: 0,0:05:20.07,0:05:22.78,Default,,0000,0000,0000,,Bo tutaj, wewnątrz\Nfunkcji „drawWinston”, Dialogue: 0,0:05:22.88,0:05:28.00,Default,,0000,0000,0000,,każdy wprowadzony obiekt\Npowinien mieć właściwość wieku. Dialogue: 0,0:05:28.10,0:05:30.51,Default,,0000,0000,0000,,Gdybyśmy nie powiedzieli\N„this.age”, Dialogue: 0,0:05:30.61,0:05:32.49,Default,,0000,0000,0000,,nie byłoby właściwości wieku. Dialogue: 0,0:05:32.59,0:05:35.48,Default,,0000,0000,0000,,Wpisaliśmy to do konstruktora\Ni nic nie zrobiliśmy. Dialogue: 0,0:05:35.58,0:05:39.36,Default,,0000,0000,0000,,Musimy przypisać wiek do obiektu\Nużywając hasła „this”. Dialogue: 0,0:05:39.46,0:05:41.17,Default,,0000,0000,0000,,Dodajmy to z powrotem. Dialogue: 0,0:05:41.27,0:05:46.26,Default,,0000,0000,0000,,Pomyślicie: „Jasne, twój program\Nśmiga, robisz niezłe rzeczy... Dialogue: 0,0:05:46.36,0:05:50.50,Default,,0000,0000,0000,,ale to wszystko dałoby się\Nosiągnąć starymi metodami”. Dialogue: 0,0:05:50.60,0:05:52.39,Default,,0000,0000,0000,,Teraz będzie fajnie. Dialogue: 0,0:05:52.49,0:05:55.77,Default,,0000,0000,0000,,Każdy Winston przechodzi\Nprzez tego samego konstruktora. Dialogue: 0,0:05:55.87,0:06:00.81,Default,,0000,0000,0000,,Gdybyśmy chcieli, możemy zmienić\Nto i owo o Winstonie. Dialogue: 0,0:06:00.91,0:06:03.04,Default,,0000,0000,0000,,O wszystkich Winstonach tutaj. Dialogue: 0,0:06:03.14,0:06:05.83,Default,,0000,0000,0000,,Przy wieku napiszemy „ile lat”. Dialogue: 0,0:06:05.93,0:06:07.62,Default,,0000,0000,0000,,Umieszczamy to tu Dialogue: 0,0:06:07.72,0:06:12.42,Default,,0000,0000,0000,,i każdy Winston mówi:\N„15 lat”, „30 lat” itd. Dialogue: 0,0:06:12.52,0:06:14.87,Default,,0000,0000,0000,,To jego specyfika, Dialogue: 0,0:06:14.97,0:06:17.23,Default,,0000,0000,0000,,ale instancje mają też\Ncechy wspólne. Dialogue: 0,0:06:17.33,0:06:20.76,Default,,0000,0000,0000,,Świetne w programowaniu\Nobiektowym jest to... Dialogue: 0,0:06:20.86,0:06:22.76,Default,,0000,0000,0000,,że istnieją rodzaje obiektów, Dialogue: 0,0:06:22.86,0:06:26.29,Default,,0000,0000,0000,,a my możemy tworzyć\Nich instancje. Dialogue: 0,0:06:26.39,0:06:29.70,Default,,0000,0000,0000,,Czasami są podobne,\Nnp. mają te same własciwości, Dialogue: 0,0:06:29.80,0:06:34.74,Default,,0000,0000,0000,,ale są też różnice, np. „ta właściwość\Nprzybiera inną wartość niż ta druga”. Dialogue: 0,0:06:35.53,0:06:38.99,Default,,0000,0000,0000,,Możemy jednak zrobić to samo, Dialogue: 0,0:06:39.09,0:06:43.17,Default,,0000,0000,0000,,przywołać te same funkcje\Ni użyć ich w podobny sposób. Dialogue: 0,0:06:43.27,0:06:45.91,Default,,0000,0000,0000,,To są zalety\Nprogramowania obiektowego, Dialogue: 0,0:06:46.01,0:06:48.48,Default,,0000,0000,0000,,ale zobaczycie: można więcej! Dialogue: 0,0:06:48.58,0:06:50.02,Default,,0000,0000,0000,,Oglądajcie dalej!