Return to Video

Herança de Objetos (Versão Vídeo)

  • 0:01 - 0:04
    Estamos de volta com nosso
    programa que cria Winstons
  • 0:04 - 0:07
    mas eu adicionei um novo tipo de objeto
    Hopper porque Hopper estava se sentindo
  • 0:07 - 0:09
    um pouco deixado de lado.
  • 0:09 - 0:12
    Eu defino Hopper do mesmo
    jeito que eu defino Winston,
  • 0:12 - 0:16
    começando pelo construtor e recebendo
    as mesmas propriedades e então draw
  • 0:16 - 0:21
    e talk e eu também adicionei
    outro método chamado Horray
  • 0:21 - 0:25
    porque Hoppers realmente gostam de
    comemorar e Winstons não mesmo.
  • 0:25 - 0:31
    No final da função, eu criei dois novos
    objetos Hopper: lilHopper e bigHopper
  • 0:31 - 0:35
    e chamei draw nos dois e talk
    em um e Horray no outro.
  • 0:36 - 0:38
    Está bem arrumado.
  • 0:38 - 0:40
    Agora, se olharmos esse
    código aqui em cima,
  • 0:40 - 0:43
    você talvez note algo interessante.
  • 0:43 - 0:47
    O código do Hopper é muito similar
    ao código do Winston.
  • 0:47 - 0:49
    Particularmente, veja seu construtor.
  • 0:49 - 0:55
    Não sei se você se lembra mas é exatamente
    o mesmo código do construtor de Winston.
  • 0:55 - 1:00
    E essa função talk é também exatamente
    o mesmo código da função talk do Winston.
  • 1:01 - 1:04
    E ambos possuem a função draw.
  • 1:04 - 1:08
    Então há muito em comum entre esses
    dois tipos de objetos e isso faz sentido
  • 1:08 - 1:12
    porque você sabe que Hopper e Winston
    são dois tipos muito similares de objeto.
  • 1:12 - 1:17
    E, se você pensar sobre o
    mundo real fora do computador,
  • 1:17 - 1:21
    a maioria dos objetos compartilha
    similaridades com outros tipos de objeto.
  • 1:21 - 1:25
    Como no reino animal, todos os animais
    são similares de alguma forma.
  • 1:25 - 1:28
    E temos diferentes tipos de
    animais como os humanos.
  • 1:28 - 1:34
    E humanos compartilham dessas semelhanças
    mas também tem suas próprias propriedades.
  • 1:34 - 1:38
    Então podemos dizer que animal
    é um tipo de objeto
  • 1:38 - 1:42
    de que o tipo de objeto humano
    herda funcionalidades.
  • 1:42 - 1:43
    Não começamos completamente do zero,
  • 1:43 - 1:47
    adicionamos funcionalidades por cima das
    que temos por ser um tipo de animal.
  • 1:47 - 1:51
    Como todos os animais fazem sons,
    mas humanos também fazem a linguagem.
  • 1:52 - 1:56
    Então esse conceito de herança de objetos
    é realmente útil na programação também.
  • 1:56 - 2:00
    E nós podemos criar uma cadeia de herança
    de objetos em nosso Javascript.
  • 2:00 - 2:02
    Então pra fazer isso nós precisamos pensar
  • 2:02 - 2:05
    sobre o que é compartilhada
    por nossos tipos de objeto.
  • 2:05 - 2:07
    E inventar um nome pra isso.
  • 2:07 - 2:11
    Porque vamos criar um novo tipo de objeto
    que represente o objeto base.
  • 2:11 - 2:12
    Vamos chamá-los de criaturas.
  • 2:12 - 2:14
    Ambos são criaturas.
  • 2:14 - 2:18
    Então dizemos varCreature é igual a...
    E agora precisamos da função construtora.
  • 2:18 - 2:23
    Então vamos pegar do Hopper já
    que é a mesma que Winston tem.
  • 2:23 - 2:24
    Certo.
  • 2:24 - 2:27
    E então... Vamos ver.
  • 2:27 - 2:29
    Agora nós queremos...
    O que queremos fazer em sequência?
  • 2:29 - 2:32
    Talvez queiramos adicionar a função talk.
  • 2:34 - 2:36
    A função talk apenas pegamos do Hopper.
  • 2:36 - 2:39
    Mas, é claro, precisamos dela
    no protótipo de criatura.
  • 2:41 - 2:46
    Então agora temos esse
    tipo de objeto Creature
  • 2:46 - 2:48
    Mas precisamos dizer a Hopper
  • 2:48 - 2:53
    que Hopper deveria basear sua
    funcionalidade em Creature.
  • 2:53 - 2:56
    Podemos fazer isso
    escrevendo esta linha aqui.
  • 2:56 - 3:05
    Vamos dizer Hopper.prototype é igual a
    Object.create(Creature.prototype)
  • 3:05 - 3:10
    Essa linha diz ao Javascript para basear
    o protótipo do Hopper, ou seja,
  • 3:10 - 3:15
    basear toda a funcionalidade do Hopper
    sobre o protótipo de criatura.
  • 3:15 - 3:20
    Isso significa que toda vez que ele
    procurar uma função em um Hopper,
  • 3:20 - 3:23
    procurará no protótipo de Hopper primeiro,
  • 3:23 - 3:27
    mas se não achar o que está procurando,
    vai procurar no protótipo de criatura.
  • 3:27 - 3:30
    E isso é o que chamamos
    de cadeia de protótipos.
  • 3:30 - 3:35
    Um vez que já fizemos isso, poderíamos
    deletar a função talk do Hopper.
  • 3:35 - 3:39
    Porque ela já existe em criatura
    que está acima na cadeia de protótipos.
  • 3:39 - 3:40
    Então vamos testar.
  • 3:42 - 3:43
    Funciona!
  • 3:43 - 3:47
    E funciona porque a acha
    no protótipo de criatura.
  • 3:49 - 3:52
    Vamos tentar deletar do Winston também.
  • 3:54 - 3:58
    Não funcionou, aqui diz que o objeto
    não tem o método talk.
  • 3:58 - 4:02
    E por que isso? Bem, nós temos o
    construtor de Winston e a função draw
  • 4:02 - 4:03
    e tiramos a função talk.
  • 4:03 - 4:06
    Pode-se notar que esquecemos de dizer
    na verdade que o protótipo de Winston
  • 4:06 - 4:10
    deve se basear no protótipo de criatura.
    Precisamos daquela linha muito importante.
  • 4:10 - 4:16
    Winston.prototype =
    Object.create(Creature.prototype)
  • 4:19 - 4:20
    E repare num ponto importante.
  • 4:20 - 4:25
    Eu tenho essa linha depois da função do
    construtor mas antes de adicionar qualquer
  • 4:25 - 4:29
    outra coisa ao protótipo do Winston.
    Isso é o que você geralmente quer fazer.
  • 4:29 - 4:31
    Você quer dizer que assim
    que você estiver começando,
  • 4:31 - 4:34
    é nisso que seu protótipo
    inicial vai ser baseado.
  • 4:34 - 4:37
    Mas então podemos continuar
    adicionando coisas ao seu protótipo.
  • 4:37 - 4:41
    Porque pode haver algo que é único aos
    Winstons ou único aos Hoppers
  • 4:41 - 4:43
    que outras criatura não tem.
  • 4:43 - 4:46
    E isso não tem problema,
    você pode definir essas coisas.
  • 4:46 - 4:50
    Agora, se olharmos, ainda temos
    algumas partes de código repetidas.
  • 4:50 - 4:52
    O código do construtor.
  • 4:52 - 4:53
    Temos ele todas as três vezes.
  • 4:53 - 4:57
    Então poderíamos
    apenas deletá-lo?
  • 4:58 - 4:59
    Vamos tentar.
  • 5:01 - 5:03
    Não parece que isso funcionou.
  • 5:03 - 5:08
    Porque nosso Hopper aparecer lá em cima no
    canto esquerdo e esqueceu tudo sobre si.
  • 5:08 - 5:13
    E isso é porque JavaScritpt não assume que
    você quer o mesmo construtor mesmo que
  • 5:13 - 5:16
    você queira basear o protótipo nele.
  • 5:16 - 5:19
    Você sabe, você pode definir seu
    próprio construtor para esses objetos.
  • 5:19 - 5:26
    Mas você também tem um jeito fácil de
    chamar um construtor dentro de um objeto.
  • 5:26 - 5:28
    Então o jeito que podemos
    fazer isso é escrevendo
  • 5:28 - 5:35
    Creature.call(this, nickname, age, x, y)
  • 5:36 - 5:40
    O que isso faz, note que funcionou.
  • 5:40 - 5:45
    E o que isso fez foi realmente chamar a
    função da criatura, a função construtora.
  • 5:45 - 5:48
    Está chamando essa função mas está
    chamando e dizendo você deveria chamar
  • 5:48 - 5:54
    a função construtora como se ela estivesse
    sendo chamada de um objeto Hopper.
  • 5:54 - 5:57
    E como se ela estivesse sendo
    chamada com esses argumentos.
  • 5:57 - 5:59
    E esses são os argumentos com
    que Hopper foi chamado.
  • 6:00 - 6:04
    E, no fim, o código vai ser executado
    como se estivesse logo aqui.
  • 6:04 - 6:07
    E isso é exatamente o que
    queremos. E funcionou!
  • 6:07 - 6:14
    E podemos ir a frente e copiar essa linha
    dentro do construtor do Winston também.
  • 6:15 - 6:17
    E funciona!
  • 6:17 - 6:21
    Então olhe aqui, encapsulamos todas as
    propriedades compartilhadas e
  • 6:21 - 6:25
    funcionalidades dos nossos objetos em um
    único tipo de objeto base, criatura.
  • 6:25 - 6:28
    E fizemos dois tipos de objeto que
    se estendem deste objeto base.
  • 6:28 - 6:32
    Eles herdam funcionalidades mas
    também adicionam suas próprias.
  • 6:32 - 6:33
    E o mais legal sobre isso é que
  • 6:33 - 6:36
    podemos alterar a funcionalidade
    compartilhada em um único lugar.
  • 6:36 - 6:39
    Por exemplo, se quiséssemos
    mudar a idade de novo,
  • 6:39 - 6:41
    poderíamos dizer: mais "anos de idade".
  • 6:42 - 6:44
    Agora todo mundo tem "anos de idade".
  • 6:44 - 6:52
    Ou poderíamos mudar a função talk. E agora
    Winstons e Hoppers estão dizendo "sup".
  • 6:53 - 6:56
    Então agora que você viu como criar tipos
    de objeto e herdar de tipos de objetos,
  • 6:56 - 6:58
    você pode começar a pensar como isso
  • 6:58 - 7:01
    pode ser útil em nossos desenhos
    e animações e simulações e jogos.
  • 7:01 - 7:05
    Por exemplo, talvez você tenha um jogo e
    tenha vários tipos de personagens nele
  • 7:05 - 7:08
    e todos eles podem correr mas
    somente alguns podem pular.
  • 7:08 - 7:12
    É um lugar perfeito pra alguns tipos de
    objeto e algumas heranças.
  • 7:12 - 7:15
    Mas eu aposto que você pode pensar em
    uma tonelada de outros jeitos também.
  • 7:15 - 7:17
    Legendado por [Alberto Oliveira]
    Revisado por [Fernando dos Reis]
Title:
Herança de Objetos (Versão Vídeo)
Description:

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

Portuguese, Brazilian subtitles

Revisions