< Return to Video

Herencia de Objetos (Version en Video)

  • 0:01 - 0:03
    Volvimos con nuestro programa que crea Winstons
  • 0:03 - 0:08
    pero he agregado un nuevo tipo de objeto "Hopper" porque Hopper se sentía un poco
  • 0:08 - 0:12
    solo. Así ahora defino "Hopper" de la misma forma que defino "Winston", tu sabes,
  • 0:12 - 0:16
    empezando con la función constructora y tomando las mismas propiedades y después "dibujar"
  • 0:16 - 0:20
    y después "hablar" y después agrego otro método llamado
  • 0:20 - 0:24
    "Hooray" porque a los "Hoppers" les gusta celebrar y a los "Winstons" nó.
  • 0:24 - 0:28
    Ahora, abajo de la función he creado
  • 0:28 - 0:31
    2 nuevos objetos "Hopper": el pequeño Hopper y el grán Hopper
  • 0:31 - 0:35
    y los dibujo y llamo la función "talk" (hablar) en uno y "Hooray" en el otro.
  • 0:35 - 0:38
    Eso es excelente.
  • 0:38 - 0:40
    Ahora, si vemos éste codigo aquí arriba
  • 0:40 - 0:42
    notarás algo interesante. Es que
  • 0:42 - 0:52
    el código para l "Hopper" es muy similar al codigo para "Winston". Particularmente el constructor. No sé si recuerdas pero ésa es basicamente el mismo código del constructor de "Winston"
  • 0:52 - 1:01
    Y después la función "talk" (hablar) es igual al "talk" del Winston.
  • 1:01 - 1:04
    y ambos tienen función "draw" (dibujar).
  • 1:04 - 1:08
    así que hay muchas cosas en común acerca de estos dos tipos de objetos
  • 1:08 - 1:11
    y tiene sentido porque sabes que Hopper y Winston son 2 tipos de objeto muy similares
  • 1:11 - 1:15
    en nuestro mundo. Si lo consideras, sabes, el mundo real
  • 1:15 - 1:20
    fuera de la computadora muchos objetos comparten similaridades
  • 1:20 - 1:21
    con otros tipos de objetos.
  • 1:21 - 1:24
    Como en el reino animal. Todos los animales
  • 1:24 - 1:27
    son simliares en algunas formas. Y después tenemos diferentes tipos de animales
  • 1:27 - 1:32
    como los humanos. Y los humanos comparten esas similarides
  • 1:32 - 1:34
    pero tambien tienen sos propias similaridades únicas.
  • 1:34 - 1:36
    Así que podríamos decir que
  • 1:36 - 1:39
    un animal es un tipo de objeto del cual el tipo de objeto "humano" hereda funcionalidad.
  • 1:39 - 1:47
    No empezamos de cero, sino agregamos a la funcionalidad que ya tenemos de ser un animal.
  • 1:47 - 1:49
    como todos los animales que hacen ruido.
  • 1:49 - 1:51
    pero los humanos tambien tienen lenguaje
  • 1:51 - 1:55
    Así que este tipo de herencia de objetos
  • 1:55 - 1:57
    es realmente útil en la programación también.
  • 1:57 - 2:00
    y podemos crear una cadena de herencia de objetos en nuestro Javascript
  • 2:00 - 2:03
    Así para hacer esto cuando piensas en
  • 2:03 - 2:04
    lo que comparten nuestros objetos.
  • 2:04 - 2:07
    Y se te ocurre un nombre para ella.
  • 2:07 - 2:09
    porque vamos a crear un nuevo tipo de objeto
  • 2:09 - 2:11
    que representa el objeto base
  • 2:11 - 2:12
    así que llamémoslo "Creature" (criatura)
  • 2:12 - 2:14
    ambos son criaturas
  • 2:14 - 2:18
    Así que decimos "var creature =" y ahora necesitamos nuestra función constructora.
  • 2:18 - 2:22
    Vamos y simplemente copiemos la del "Hopper" que igual a la de "Winston"
  • 2:22 - 2:24
    Está bien
  • 2:24 - 2:27
    y despues... vamos
  • 2:27 - 2:28
    ahora quiero...
  • 2:28 - 2:30
    ¿Qué queremos ahora?
  • 2:30 - 2:32
    Talvez queremos agregar la función de arriba
  • 2:32 - 2:39
    y solo copiamos la de "Hopper". Pero por supuesto que necesitamos tenerla en el prototipo de la "Creature" en vez de eso.
  • 2:39 - 2:42
    OK, excelente.
  • 2:42 - 2:45
    ahora tenemos el tipo de objeto "creature" (criatura).
  • 2:45 - 2:48
    Pero necesitamos decirle a "Hopper" que debería
  • 2:48 - 2:51
    basar su funcionalidad según "Creature".
  • 2:51 - 2:51
    Podemos hacer eso escribiendo ésta línea
  • 2:54 - 2:59
    y diremos "Hopper.prototype"
  • 2:59 - 3:02
    es igual a "object.create"
  • 3:02 - 3:05
    "creature.prototype"
  • 3:05 - 3:14
    Lo que hace esta linea es decirle a Javascript que base la funcionalidad del prototipo de "Hopper" en la del prototipo de "Creature".
  • 3:14 - 3:22
    y eso significa que cada vez que busque una función en "Hopper", buscara el prototipo de Hopper
  • 3:22 - 3:26
    primero, pero si no lo encuentra entonces buscara en el prototipo de "Creature".
  • 3:26 - 3:29
    Y eso es lo que llamamos una cadena de prototipos.
  • 3:29 - 3:34
    Ahora, una vez que hemos hecho esto deberíamos de poder borrar la funcion "talk"
  • 3:34 - 3:36
    en "Hopper"
  • 3:36 - 3:38
    Porque ya existe en "Creature".
  • 3:38 - 3:40
    He está mas arriba en la cadena del prototipo.
  • 3:40 - 3:43
    Listo?
  • 3:43 - 3:44
    ¡Funcionó!
  • 3:44 - 3:47
    Y funciona porque encuentra la función en el prototipo de "Creature".
  • 3:47 - 3:51
    Intentémoslo borrándolo en "Winston" también.
  • 3:51 - 3:58
    OK. No funcionó porque dice que no tiene método "talk".
  • 3:58 - 4:01
    ¿Porqué es eso? Bueno, tenemos nuestro constructor "Winston"
  • 4:01 - 4:04
    y "draw" y eliminamos el "talk".
  • 4:04 - 4:08
    Bueno, notarás que se nos olvidó decirle al prototipo de "Winston" decirle que se base
  • 4:08 - 4:09
    en el prototipo de "Creature".
  • 4:09 - 4:11
    Necesitamos esa línea muy importante
  • 4:11 - 4:13
    "Winston.prototype=object.create"
  • 4:13 - 4:15
    "creature.prototype."
  • 4:15 - 4:19
    :)
  • 4:19 - 4:20
    Y notamos algo importante.
  • 4:20 - 4:26
    Tengo ésta línea después de la función constructora pero antes de agregar cualquier otra cosa
  • 4:26 - 4:29
    al prototipo constructor.
  • 4:29 - 4:29
    Eso es algo que usualmente quieres hacer.
  • 4:29 - 4:31
    Debes decírselo justo
  • 4:31 - 4:34
    cuando empiezas inmediatamente. esto es en lo que se basará tu prototipo inicial
  • 4:34 - 4:37
    Pero después seguimos agregando mas cosas a su prototipo
  • 4:37 - 4:42
    Porque podría habar algo que es único a los "Winstons" o "Hoppers"
  • 4:42 - 4:44
    que no está en los "Creatures".
  • 4:44 - 4:45
    Y es muy bueno que también puedes definir eso.
  • 4:45 - 4:50
    Esta bien. Ahora, si miramos esto, todavía hay código repetido
  • 4:50 - 4:52
    el código constructor.
  • 4:52 - 4:53
    ¿Verdad? Lo tenemos 3 veces.
  • 4:53 - 4:57
    ¿Podríamos borrarlo?
  • 4:57 - 4:58
    Intentémoslo.
  • 4:58 - 5:04
    OK. MMM... no parece haber funcionado.
  • 5:04 - 5:07
    Porque nuestro "Hopper" salió en el rincón superior izquierdo y parece habérsele olvidado lo demás.
  • 5:07 - 5:15
    Ésto es porque Javascript no asume que quieres el mismo constructor aún si quieres basar el prototipo de allí.
  • 5:15 - 5:19
    Te permite definir tu propio constructor para éstos objetos.
  • 5:19 - 5:24
    Pero también te da una forma fácil de llamar un constructor de un objeto.
  • 5:24 - 5:29
    La forma en que haremos esto es
  • 5:29 - 5:35
    escribiendo "Creature.call, this, [apodo], [edad], x, y"
  • 5:35 - 5:41
    Ahora, lo que esto hace (Nota que funciono. ¡Sí!) Y lo que hizo es que
  • 5:41 - 5:44
    ahora esta llamando la funcion "Creature", su función constructora
  • 5:44 - 5:50
    Está llamando la función pero esta pasando y diciendo: "OK, debes llamar este constructor como si..
  • 5:50 - 5:54
    ...estuviera siendo llamada del objeto 'Hopper'"
  • 5:54 - 5:57
    y como si está siendo llamado con éstos argumentos.
  • 5:57 - 5:59
    Éstos son los argumentos con los que se llamó "Hopper"
  • 5:59 - 6:04
    Y eso acabará ejecutando el código como si estuviera allí mismo.
  • 6:04 - 6:05
    Que es lo que queremos. Y funcionó.
  • 6:05 - 6:10
    y podemos proceder y hacer
  • 6:10 - 6:12
    una copia de ésta línea en el constructor
  • 6:12 - 6:14
    de "Winston" también.
  • 6:14 - 6:17
    Y funciona. :D
  • 6:17 - 6:25
    Esta bien. Miremos esto. Hemos encapsulado todas nuestras propiedades compartidas y funcionalidades en un solo objeto base, "Creature".
  • 6:25 - 6:28
    Y hemos hecho 2 tipos de objeto que extienden el objeto base.
  • 6:28 - 6:31
    Heredan la funcionalidad pero agregan la propia suya también.
  • 6:31 - 6:36
    Y lo excelente es que podemos cambiar la funcionalidad compartida en un solo lugar
  • 6:36 - 6:40
    Como si quisiéramos cambiar la edad de nuevo podríamos agregar el texto "years old" (años de edad).
  • 6:40 - 6:44
    Ahora todos dicen "years old" al final.
  • 6:44 - 6:50
    O Podríamos la función "talk" y decir "woo". Y Ahora los "Winstons" y "Hoppers" dirían "sup".
  • 6:50 - 6:57
    Ahora que has visto como crear tipos de objetos y heredar de otros tipos
  • 6:57 - 7:01
    puedes empezar a pensar en como esto podría ser útil en tus dibujos y animaciones y simulaciones y juegos.
  • 7:01 - 7:05
    Por ejemplo, talvez tienes un juego y tienes diferentes personaejs en el.
  • 7:05 - 7:08
    y todos pueden correr pero solo algunos pueden saltar
  • 7:08 - 7:12
    ese el el perfecto lugar para los tipos de objetos y algo de herencia.
  • 7:12 - 7:16
    Pero apuesto a que puedes pensar en más formas de hacerlo al igual.
Title:
Herencia de Objetos (Version en Video)
Description:

This is just a screen grab of our interactive coding talk-through, prepared to make captioning and translation easier. It is better to watch our talk-throughs here:
https://www.khanacademy.org/cs/programming/

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

Spanish subtitles

Revisions