[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.01,0:00:05.50,Default,,0000,0000,0000,,Agora que já sabe o básico de JavaScript,\Nquero ensinar um uso interessante dele. Dialogue: 0,0:00:05.63,0:00:09.55,Default,,0000,0000,0000,,Algo que chamamos de \N"programação orientada a objetos" Dialogue: 0,0:00:09.55,0:00:12.57,Default,,0000,0000,0000,,Mas primeiro precisamos \Nentender porque isso é útil. Dialogue: 0,0:00:12.57,0:00:17.09,Default,,0000,0000,0000,,Pensei em um programa que faça sentido\No uso da Orientação a Objetos. Dialogue: 0,0:00:17.48,0:00:19.52,Default,,0000,0000,0000,,Agora, é bom um programa para se começar. Dialogue: 0,0:00:19.52,0:00:24.03,Default,,0000,0000,0000,,No topo tenho duas variáveis que \Narmazenam dados de um objeto. Dialogue: 0,0:00:25.02,0:00:28.41,Default,,0000,0000,0000,,Agora, o objeto literal é um \Ntipo de objeto que já vimos, Dialogue: 0,0:00:28.41,0:00:30.45,Default,,0000,0000,0000,,que criamos com duas chaves Dialogue: 0,0:00:30.45,0:00:33.42,Default,,0000,0000,0000,,e colocamos todos os nomes e valores\Ndessas propriedades dentro. Dialogue: 0,0:00:34.26,0:00:39.07,Default,,0000,0000,0000,,Então temos duas dessas variáveis objetos,\Ne embaixo temos essa função {\i1}drawWinston{\i0} Dialogue: 0,0:00:39.07,0:00:41.13,Default,,0000,0000,0000,,que recebe um único argumento, Dialogue: 0,0:00:41.13,0:00:47.84,Default,,0000,0000,0000,,e então desenha uma imagem baseada \Nnas propriedades x e y dos objetos. Dialogue: 0,0:00:47.84,0:00:52.45,Default,,0000,0000,0000,,e um título de acordo com as \Npropriedades apelido e idade do objeto. Dialogue: 0,0:00:52.75,0:00:57.62,Default,,0000,0000,0000,,E agora embaixo finalmente, chamamos\N{\i1}drawWinston(){\i0} no adolescente e no adulto, Dialogue: 0,0:00:58.05,0:01:00.38,Default,,0000,0000,0000,,e isso é o que faz isso aparecer. Dialogue: 0,0:01:02.56,0:01:10.96,Default,,0000,0000,0000,,Agora, se vamos aqui, e olharmos para\Nesses objetos, veja que eles são parecidos Dialogue: 0,0:01:10.99,0:01:13.84,Default,,0000,0000,0000,,Ambos tem as mesmas propriedades, Dialogue: 0,0:01:13.85,0:01:17.34,Default,,0000,0000,0000,,e ambos podem ser usados para \Nchamar a função "drawWinston()." Dialogue: 0,0:01:17.79,0:01:19.56,Default,,0000,0000,0000,,Na verdade, se você para pra pensar, Dialogue: 0,0:01:19.62,0:01:24.07,Default,,0000,0000,0000,,ambos estão descrevendo \Num tipo Winston, certo? Dialogue: 0,0:01:24.07,0:01:28.07,Default,,0000,0000,0000,,E podemos imaginar que talvez exista \Nesse tipo abstrato de Winston no mundo. Dialogue: 0,0:01:28.07,0:01:31.34,Default,,0000,0000,0000,,e todo Winston tem os \Nmesmos tipos de propriedades, Dialogue: 0,0:01:31.34,0:01:35.95,Default,,0000,0000,0000,,como apelido, idade, x e y. Dialogue: 0,0:01:36.26,0:01:41.90,Default,,0000,0000,0000,,E aqui o que fizemos foi criar \Nduas instâncias de Winston Dialogue: 0,0:01:41.90,0:01:44.51,Default,,0000,0000,0000,,para descrever um tipo único de Winston, Dialogue: 0,0:01:44.51,0:01:48.26,Default,,0000,0000,0000,,um é Winston adolescente e este um adulto. Dialogue: 0,0:01:48.26,0:01:54.38,Default,,0000,0000,0000,,Eles são realmente bem parecidos, e sabe,\Nhá muitas coisas similares entre eles. Dialogue: 0,0:01:54.55,0:01:57.44,Default,,0000,0000,0000,,Se você pensar nisso, há muito do modo\Ncomo o mundo funciona também Dialogue: 0,0:01:57.44,0:02:00.87,Default,,0000,0000,0000,,por isso temos esses tipos de objetos \Nabstratos como humanos e pessoas. Dialogue: 0,0:02:00.87,0:02:03.06,Default,,0000,0000,0000,,e então somos apenas \Ninstâncias específicas Dialogue: 0,0:02:03.06,0:02:05.56,Default,,0000,0000,0000,,de objetos com nossas pequenas\Npropriedades próprias. Dialogue: 0,0:02:05.75,0:02:09.93,Default,,0000,0000,0000,,Podemos usar técnicas \Nde orientação a objeto em JavaScript Dialogue: 0,0:02:09.93,0:02:14.09,Default,,0000,0000,0000,,para essas variáveis do Winston Dialogue: 0,0:02:14.87,0:02:17.80,Default,,0000,0000,0000,,são instâncias formais do objeto Winston, Dialogue: 0,0:02:17.80,0:02:21.19,Default,,0000,0000,0000,,eles sabem que eles \Ncompartilham essas propriedades. Dialogue: 0,0:02:21.68,0:02:27.31,Default,,0000,0000,0000,,Pra isso, a primeira coisa que fazemos\Né descrever este tipo abstrato de Winston. Dialogue: 0,0:02:27.84,0:02:30.50,Default,,0000,0000,0000,,E faremos isso com uma variável Dialogue: 0,0:02:30.74,0:02:32.42,Default,,0000,0000,0000,,Você armazenará o tipo em uma variável. Dialogue: 0,0:02:32.44,0:02:38.44,Default,,0000,0000,0000,,Então var Winston, usaremos W, pois sempre\Niniciamos nosso objetos com maiúsculo Dialogue: 0,0:02:38.82,0:02:41.14,Default,,0000,0000,0000,,e vamos configurá-lo como uma função. Dialogue: 0,0:02:42.12,0:02:46.35,Default,,0000,0000,0000,,E essa função é um tipo especial que \Nchamamos de "construtor da função" Dialogue: 0,0:02:46.99,0:02:51.74,Default,,0000,0000,0000,,pois é isso o que será executado toda vez\Nque criarmos uma nova instância do Winston Dialogue: 0,0:02:51.96,0:02:57.40,Default,,0000,0000,0000,,Se quisermos criar um Winston adolescente\Nou adulto, chamaremos essa função. Dialogue: 0,0:02:57.40,0:03:03.24,Default,,0000,0000,0000,,Significa que essa função deverá receber\Nqualquer argumento que precise saber, Dialogue: 0,0:03:03.24,0:03:06.39,Default,,0000,0000,0000,,afim de criar um Winston completo. Dialogue: 0,0:03:06.39,0:03:10.62,Default,,0000,0000,0000,,Nesse caso, precisa saber \No apelido, idade, x e y. Dialogue: 0,0:03:11.26,0:03:15.06,Default,,0000,0000,0000,,Agora, uma vez que recebemos esses \Nargumentos precisamos fazer algo com eles, Dialogue: 0,0:03:15.06,0:03:21.07,Default,,0000,0000,0000,,Precisamos na verdade associar \Na informação ao objeto Winston. Dialogue: 0,0:03:21.07,0:03:24.66,Default,,0000,0000,0000,,Usaremos uma nova \Npalavra chave, chamada {\i1}this{\i0}. Dialogue: 0,0:03:25.32,0:03:28.63,Default,,0000,0000,0000,,E {\i1}this{\i0} se refere a \Ninstância atual do objeto. Dialogue: 0,0:03:28.63,0:03:34.61,Default,,0000,0000,0000,,Então, {\i1}this.nickname{\i0}, a propriedade \Nnickname do objeto é igual a Dialogue: 0,0:03:34.86,0:03:38.20,Default,,0000,0000,0000,,o que for passado para \No construtor da função, ok? Dialogue: 0,0:03:38.42,0:03:44.69,Default,,0000,0000,0000,,E {\i1}this.age{\i0} é igual idade que é \Npassada, {\i1}this.x{\i0} é igual ao x e {\i1}this.y{\i0} Dialogue: 0,0:03:45.73,0:03:47.67,Default,,0000,0000,0000,,igual ao y da entrada. Dialogue: 0,0:03:48.28,0:03:52.83,Default,,0000,0000,0000,,Muito bem, agora temos este \Ntipo abstrato chamado Winston, Dialogue: 0,0:03:53.10,0:03:56.79,Default,,0000,0000,0000,,e tem o construtor da função que \Nusamos para criar o novo Winston. Dialogue: 0,0:03:57.34,0:03:59.18,Default,,0000,0000,0000,,Vamos tentar usá-lo. Dialogue: 0,0:04:00.16,0:04:02.01,Default,,0000,0000,0000,,Criaremos o Winston adolescente novamente Dialogue: 0,0:04:02.09,0:04:05.24,Default,,0000,0000,0000,,mas dessa vez \Nfaremos {\i1}winstonTeen{\i0}, igual, Dialogue: 0,0:04:05.24,0:04:10.38,Default,,0000,0000,0000,,e ao invés de chaves, \Nusaremos igual {\i1}newWinston{\i0}. Dialogue: 0,0:04:10.38,0:04:13.79,Default,,0000,0000,0000,,Estamos dizendo "Queremos criar \Numa nova instância do tipo Winston" Dialogue: 0,0:04:13.79,0:04:21.10,Default,,0000,0000,0000,,e então passaremos a informação \Nnecessária, "Winsteen", 15, 20, 50. Dialogue: 0,0:04:22.18,0:04:25.65,Default,,0000,0000,0000,,E então podemos deletar esse antigo, \Nporque não precisamos mais. Dialogue: 0,0:04:27.36,0:04:30.20,Default,,0000,0000,0000,,E agora está criado o novo Winsteen. Dialogue: 0,0:04:31.05,0:04:34.94,Default,,0000,0000,0000,,E agora podemos fazer \N{\i1}winstonAdult = new Winston(){\i0} Dialogue: 0,0:04:35.42,0:04:39.10,Default,,0000,0000,0000,,e é claro o nome dele é \N"Mr. Winst-a-lot", bom nome, Dialogue: 0,0:04:39.72,0:04:43.32,Default,,0000,0000,0000,,e ele tem 30 anos, e a posição é 229 e 50. Dialogue: 0,0:04:43.75,0:04:46.58,Default,,0000,0000,0000,,Tudo bem? E então \Npodemos deletar esse objeto. Dialogue: 0,0:04:47.28,0:04:50.74,Default,,0000,0000,0000,,E, nosso código ainda funciona. Dialogue: 0,0:04:50.88,0:04:52.95,Default,,0000,0000,0000,,O que fizemos aqui foi o que\Neu disse certo, Dialogue: 0,0:04:52.95,0:04:57.75,Default,,0000,0000,0000,,há esse, e esse tipo de dado \Nabstrato que são um Winston Dialogue: 0,0:04:57.75,0:05:04.26,Default,,0000,0000,0000,,e podemos criar novas instâncias que tem\Nessas propriedades deles que são únicas. Dialogue: 0,0:05:05.15,0:05:08.18,Default,,0000,0000,0000,,E apenas lembraremos \Ndas propriedades dentro deles Dialogue: 0,0:05:08.80,0:05:14.30,Default,,0000,0000,0000,,Lembrar é muito importante. Você sabe que\Naqui dentro temos this.nickname, this.age. Dialogue: 0,0:05:14.30,0:05:19.83,Default,,0000,0000,0000,,Se acidentalmente, não tiver essa idade, \Nperceba que agora diz, "undifined" Dialogue: 0,0:05:20.17,0:05:22.91,Default,,0000,0000,0000,,É porque lá embaixo,\Nessa função drawWinston, Dialogue: 0,0:05:22.91,0:05:27.97,Default,,0000,0000,0000,,aguarda todos os objetos serem \Ninformados, inclusive "age" (idade). Dialogue: 0,0:05:28.16,0:05:30.32,Default,,0000,0000,0000,,E se não colocarmos {\i1}this.age{\i0}, Dialogue: 0,0:05:30.66,0:05:33.54,Default,,0000,0000,0000,,Não terá uma propriedade "age", certo? \NPassamos para o construtor da função Dialogue: 0,0:05:33.54,0:05:35.13,Default,,0000,0000,0000,,Mas não fizemos nada com isso, Dialogue: 0,0:05:35.13,0:05:38.87,Default,,0000,0000,0000,,temos que incluir isto no objeto \Nusando a palavra chave {\i1}this{\i0} Dialogue: 0,0:05:39.13,0:05:40.43,Default,,0000,0000,0000,,Vamos adicionar novamente. Dialogue: 0,0:05:41.02,0:05:42.52,Default,,0000,0000,0000,,Agora,você deve estar pensando, Dialogue: 0,0:05:42.52,0:05:46.36,Default,,0000,0000,0000,,Ok, você tem o um código que funciona\Ne está fazendo essas mudanças. Dialogue: 0,0:05:46.36,0:05:50.54,Default,,0000,0000,0000,,Mas, sabe, o que \Nfizemos já foi feito antes. Dialogue: 0,0:05:50.54,0:05:51.87,Default,,0000,0000,0000,,Mas aqui está a parte legal. Dialogue: 0,0:05:51.87,0:05:55.75,Default,,0000,0000,0000,,Agora, todo o nosso Winston \Nusa o mesmo construtor. Dialogue: 0,0:05:55.82,0:06:00.47,Default,,0000,0000,0000,,Se quisermos, podemos \Nmudar propriedades do Winston. Dialogue: 0,0:06:00.72,0:06:02.48,Default,,0000,0000,0000,,Todos os Winstons, aqui dentro. Dialogue: 0,0:06:02.48,0:06:05.83,Default,,0000,0000,0000,,Talvez "age" (idade), talvez \Nqueiramos mudar para "years old" (anos). Dialogue: 0,0:06:05.92,0:06:07.28,Default,,0000,0000,0000,,Podemos mudar apenas aqui, Dialogue: 0,0:06:07.37,0:06:12.54,Default,,0000,0000,0000,,e agora em todos os nossos Winstons ficará\N"15 years old", "30 years old", certo? Dialogue: 0,0:06:12.54,0:06:14.62,Default,,0000,0000,0000,,Eles estão pegando a parte que\Né única deles Dialogue: 0,0:06:14.62,0:06:16.96,Default,,0000,0000,0000,,mas também está usando coisas que são\Ncompartilhadas entre eles. Dialogue: 0,0:06:16.96,0:06:19.48,Default,,0000,0000,0000,,Isso é a parte legal da programação\Norientada a objeto Dialogue: 0,0:06:19.48,0:06:22.72,Default,,0000,0000,0000,,essa ideia que há esses \Ntipos de objetos no mundo, Dialogue: 0,0:06:22.72,0:06:26.02,Default,,0000,0000,0000,,e você pode criar novas \Ninstâncias desses objetos. Dialogue: 0,0:06:26.02,0:06:29.19,Default,,0000,0000,0000,,Há coisas que são parecidas neles, como a\Nmesma propriedade, Dialogue: 0,0:06:29.19,0:06:31.08,Default,,0000,0000,0000,,e há coisas que são diferentes como, Dialogue: 0,0:06:31.08,0:06:35.03,Default,,0000,0000,0000,,essa propriedade na verdade tem um valor\Ndiferente dessa outra propriedade, certo? Dialogue: 0,0:06:35.12,0:06:39.69,Default,,0000,0000,0000,,Então, podemos ter o mesmo comportamento,\Ncomo chamar as mesmas funções. Dialogue: 0,0:06:40.54,0:06:42.76,Default,,0000,0000,0000,,e então usá-las de modo parecido. Dialogue: 0,0:06:43.11,0:06:46.07,Default,,0000,0000,0000,,Essa é uma das coisas legais em\Nprogramação orientada a objeto. Dialogue: 0,0:06:46.07,0:06:48.34,Default,,0000,0000,0000,,mas como você verá, há mais coisas. Dialogue: 0,0:06:48.34,0:06:49.81,Default,,0000,0000,0000,,Então, fique ligado! Dialogue: 0,0:06:49.81,0:06:51.00,Default,,0000,0000,0000,,Legendado por [Valter Bigeli]\NRevisado por [Fernando dos Reis]