0:00:01.012,0:00:05.499
Agora que já sabe o básico de JavaScript,[br]quero ensinar um uso interessante dele.
0:00:05.629,0:00:09.546
Algo que chamamos de [br]"programação orientada a objetos"
0:00:09.546,0:00:12.570
Mas primeiro precisamos [br]entender porque isso é útil.
0:00:12.570,0:00:17.089
Pensei em um programa que faça sentido[br]o uso da Orientação a Objetos.
0:00:17.479,0:00:19.518
Agora, é bom um programa para se começar.
0:00:19.518,0:00:24.031
No topo tenho duas variáveis que [br]armazenam dados de um objeto.
0:00:25.021,0:00:28.414
Agora, o objeto literal é um [br]tipo de objeto que já vimos,
0:00:28.414,0:00:30.448
que criamos com duas chaves
0:00:30.448,0:00:33.419
e colocamos todos os nomes e valores[br]dessas propriedades dentro.
0:00:34.259,0:00:39.071
Então temos duas dessas variáveis objetos,[br]e embaixo temos essa função drawWinston
0:00:39.071,0:00:41.129
que recebe um único argumento,
0:00:41.129,0:00:47.842
e então desenha uma imagem baseada [br]nas propriedades x e y dos objetos.
0:00:47.842,0:00:52.447
e um título de acordo com as [br]propriedades apelido e idade do objeto.
0:00:52.747,0:00:57.624
E agora embaixo finalmente, chamamos[br]drawWinston() no adolescente e no adulto,
0:00:58.054,0:01:00.382
e isso é o que faz isso aparecer.
0:01:02.562,0:01:10.956
Agora, se vamos aqui, e olharmos para[br]esses objetos, veja que eles são parecidos
0:01:10.988,0:01:13.840
Ambos tem as mesmas propriedades,
0:01:13.850,0:01:17.337
e ambos podem ser usados para [br]chamar a função "drawWinston()."
0:01:17.787,0:01:19.564
Na verdade, se você para pra pensar,
0:01:19.624,0:01:24.072
ambos estão descrevendo [br]um tipo Winston, certo?
0:01:24.072,0:01:28.074
E podemos imaginar que talvez exista [br]esse tipo abstrato de Winston no mundo.
0:01:28.074,0:01:31.336
e todo Winston tem os [br]mesmos tipos de propriedades,
0:01:31.336,0:01:35.950
como apelido, idade, x e y.
0:01:36.260,0:01:41.898
E aqui o que fizemos foi criar [br]duas instâncias de Winston
0:01:41.898,0:01:44.506
para descrever um tipo único de Winston,
0:01:44.506,0:01:48.255
um é Winston adolescente e este um adulto.
0:01:48.255,0:01:54.381
Eles são realmente bem parecidos, e sabe,[br]há muitas coisas similares entre eles.
0:01:54.551,0:01:57.437
Se você pensar nisso, há muito do modo[br]como o mundo funciona também
0:01:57.437,0:02:00.867
por isso temos esses tipos de objetos [br]abstratos como humanos e pessoas.
0:02:00.867,0:02:03.057
e então somos apenas [br]instâncias específicas
0:02:03.057,0:02:05.564
de objetos com nossas pequenas[br]propriedades próprias.
0:02:05.754,0:02:09.931
Podemos usar técnicas [br]de orientação a objeto em JavaScript
0:02:09.931,0:02:14.088
para essas variáveis do Winston
0:02:14.868,0:02:17.805
são instâncias formais do objeto Winston,
0:02:17.805,0:02:21.194
eles sabem que eles [br]compartilham essas propriedades.
0:02:21.683,0:02:27.314
Pra isso, a primeira coisa que fazemos[br]é descrever este tipo abstrato de Winston.
0:02:27.844,0:02:30.497
E faremos isso com uma variável
0:02:30.737,0:02:32.420
Você armazenará o tipo em uma variável.
0:02:32.440,0:02:38.444
Então var Winston, usaremos W, pois sempre[br]iniciamos nosso objetos com maiúsculo
0:02:38.824,0:02:41.136
e vamos configurá-lo como uma função.
0:02:42.116,0:02:46.350
E essa função é um tipo especial que [br]chamamos de "construtor da função"
0:02:46.990,0:02:51.742
pois é isso o que será executado toda vez[br]que criarmos uma nova instância do Winston
0:02:51.962,0:02:57.400
Se quisermos criar um Winston adolescente[br]ou adulto, chamaremos essa função.
0:02:57.400,0:03:03.238
Significa que essa função deverá receber[br]qualquer argumento que precise saber,
0:03:03.238,0:03:06.387
afim de criar um Winston completo.
0:03:06.387,0:03:10.624
Nesse caso, precisa saber [br]o apelido, idade, x e y.
0:03:11.264,0:03:15.063
Agora, uma vez que recebemos esses [br]argumentos precisamos fazer algo com eles,
0:03:15.063,0:03:21.069
Precisamos na verdade associar [br]a informação ao objeto Winston.
0:03:21.069,0:03:24.655
Usaremos uma nova [br]palavra chave, chamada this.
0:03:25.325,0:03:28.632
E this se refere a [br]instância atual do objeto.
0:03:28.632,0:03:34.611
Então, this.nickname, a propriedade [br]nickname do objeto é igual a
0:03:34.861,0:03:38.199
o que for passado para [br]o construtor da função, ok?
0:03:38.419,0:03:44.688
E this.age é igual idade que é [br]passada, this.x é igual ao x e this.y
0:03:45.728,0:03:47.672
igual ao y da entrada.
0:03:48.282,0:03:52.826
Muito bem, agora temos este [br]tipo abstrato chamado Winston,
0:03:53.096,0:03:56.790
e tem o construtor da função que [br]usamos para criar o novo Winston.
0:03:57.340,0:03:59.185
Vamos tentar usá-lo.
0:04:00.165,0:04:02.010
Criaremos o Winston adolescente novamente
0:04:02.090,0:04:05.245
mas dessa vez [br]faremos winstonTeen, igual,
0:04:05.245,0:04:10.376
e ao invés de chaves, [br]usaremos igual newWinston.
0:04:10.376,0:04:13.790
Estamos dizendo "Queremos criar [br]uma nova instância do tipo Winston"
0:04:13.790,0:04:21.105
e então passaremos a informação [br]necessária, "Winsteen", 15, 20, 50.
0:04:22.175,0:04:25.652
E então podemos deletar esse antigo, [br]porque não precisamos mais.
0:04:27.362,0:04:30.202
E agora está criado o novo Winsteen.
0:04:31.052,0:04:34.942
E agora podemos fazer [br]winstonAdult = new Winston()
0:04:35.422,0:04:39.101
e é claro o nome dele é [br]"Mr. Winst-a-lot", bom nome,
0:04:39.721,0:04:43.320
e ele tem 30 anos, e a posição é 229 e 50.
0:04:43.750,0:04:46.580
Tudo bem? E então [br]podemos deletar esse objeto.
0:04:47.280,0:04:50.744
E, nosso código ainda funciona.
0:04:50.884,0:04:52.948
O que fizemos aqui foi o que[br]eu disse certo,
0:04:52.948,0:04:57.754
há esse, e esse tipo de dado [br]abstrato que são um Winston
0:04:57.754,0:05:04.262
e podemos criar novas instâncias que tem[br]essas propriedades deles que são únicas.
0:05:05.152,0:05:08.179
E apenas lembraremos [br]das propriedades dentro deles
0:05:08.799,0:05:14.299
Lembrar é muito importante. Você sabe que[br]aqui dentro temos this.nickname, this.age.
0:05:14.299,0:05:19.832
Se acidentalmente, não tiver essa idade, [br]perceba que agora diz, "undifined"
0:05:20.172,0:05:22.913
É porque lá embaixo,[br]essa função drawWinston,
0:05:22.913,0:05:27.972
aguarda todos os objetos serem [br]informados, inclusive "age" (idade).
0:05:28.162,0:05:30.324
E se não colocarmos this.age,
0:05:30.664,0:05:33.543
Não terá uma propriedade "age", certo? [br]Passamos para o construtor da função
0:05:33.543,0:05:35.132
Mas não fizemos nada com isso,
0:05:35.132,0:05:38.873
temos que incluir isto no objeto [br]usando a palavra chave this
0:05:39.133,0:05:40.432
Vamos adicionar novamente.
0:05:41.022,0:05:42.521
Agora,você deve estar pensando,
0:05:42.521,0:05:46.361
Ok, você tem o um código que funciona[br]e está fazendo essas mudanças.
0:05:46.361,0:05:50.542
Mas, sabe, o que [br]fizemos já foi feito antes.
0:05:50.542,0:05:51.873
Mas aqui está a parte legal.
0:05:51.873,0:05:55.746
Agora, todo o nosso Winston [br]usa o mesmo construtor.
0:05:55.816,0:06:00.467
Se quisermos, podemos [br]mudar propriedades do Winston.
0:06:00.717,0:06:02.478
Todos os Winstons, aqui dentro.
0:06:02.478,0:06:05.830
Talvez "age" (idade), talvez [br]queiramos mudar para "years old" (anos).
0:06:05.920,0:06:07.282
Podemos mudar apenas aqui,
0:06:07.372,0:06:12.545
e agora em todos os nossos Winstons ficará[br]"15 years old", "30 years old", certo?
0:06:12.545,0:06:14.618
Eles estão pegando a parte que[br]é única deles
0:06:14.618,0:06:16.961
mas também está usando coisas que são[br]compartilhadas entre eles.
0:06:16.961,0:06:19.481
Isso é a parte legal da programação[br]orientada a objeto
0:06:19.481,0:06:22.721
essa ideia que há esses [br]tipos de objetos no mundo,
0:06:22.721,0:06:26.022
e você pode criar novas [br]instâncias desses objetos.
0:06:26.022,0:06:29.190
Há coisas que são parecidas neles, como a[br]mesma propriedade,
0:06:29.190,0:06:31.078
e há coisas que são diferentes como,
0:06:31.078,0:06:35.028
essa propriedade na verdade tem um valor[br]diferente dessa outra propriedade, certo?
0:06:35.118,0:06:39.688
Então, podemos ter o mesmo comportamento,[br]como chamar as mesmas funções.
0:06:40.538,0:06:42.758
e então usá-las de modo parecido.
0:06:43.108,0:06:46.069
Essa é uma das coisas legais em[br]programação orientada a objeto.
0:06:46.069,0:06:48.344
mas como você verá, há mais coisas.
0:06:48.344,0:06:49.810
Então, fique ligado!
0:06:49.810,0:06:51.000
Legendado por [Valter Bigeli][br]Revisado por [Fernando dos Reis]