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