Course C #. Inheritance IV. Substitution principle. Video 44

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ก.ย. 2024
  • In this video we see an important concept when working with inheritance: the principle of substitution. It is a concept that is constantly applied when programming in any object-oriented language.
    For more courses, exercises and manuals visit: www.pildorasinformaticas.es

ความคิดเห็น • 77

  • @alejandrovasquez6751
    @alejandrovasquez6751 5 ปีที่แล้ว +18

    Es agradable ver la clase sin tener que repetir el video para entender. Muchas gracias profesor!

  • @Jusilus
    @Jusilus 3 ปีที่แล้ว +14

    Dejo unos ejemplos sencillos de uso que me vinieron muy bien en su día:
    1) Supongamos que queremos hacer una carrera de animales mamíferos. La forma más sencilla es que Mamífero tenga el campo movimiento y el método Mover(). Luego, cada animal por separado (Caballo, Perro y Gato) heredan de Mamífero dicho campo y método. Además, a cada animal le personalizamos el campo movimiento (Caballo = 5, PErro = 3, Gato = 2). Entonces, ¿cómo podríamos hacer la carrera de forma muy simple? Metemos todos los animales en una única colección (un array del tipo Mamifero) y ejecutamos su metodo en cada iteración de un bucle. Si, por ejemplo, la carrera tiene 10 turnos (10 ciclos del bucle) el caballo avanzará de 5 en 5, el perro de 3 en 3 y el gato de 2 en 2 (lógicamente, para que esto fuera más justo, deberían ser números al azar entre 1y el límite del animal).
    2) Un videojuego. Pongamos un Mario. Supongamos que queremos calcular el número de enemigos en pantalla, o su energía, etc. Cada enemigo tiene su propia clase (Tortuga, Erizo, Seta, etc) y todas heredan de la clase Enemigo. La forma más sencilla es, al igual que antes, tener en una colección del tipo Enemigo todos los bichos malos de la pantalla. Luego, con un bucle vas iterando por cada uno y obtienes la información que quieres. Contando que los enemigos se pueden generar al azar, si no se hace así no puedes saber si hay, por ejemplo, alguna Seta en pantalla, así que si la llamaras y no estuviera podría fallar el programa. Y lo mismo con otro tipo de enemigo. Es mucho más fácil si todos están en un único sitio.

    • @smokingcrimson128
      @smokingcrimson128 2 ปีที่แล้ว

      Yo estaba pensando hacer un videojuego en consola tipo rpg aventura de texto, quería saber si estaba bien o se podría optimizar mejor esta idea que tengo, deseo crear una superclase de Mobs de donde las clases hijas vengan todo tipo de bichos que se te puedan ocurrir, inluso pensaba categorizar a los monstruos, por ejemplo, la superclase mobs es clase padre de la clase "humanoides" y esta última a su vez es padre de otra clase llamada "Humanos" ya que en el juego estaba pensando que dentro de humanoides hallan otro tipo de monstruos no necesariamente humanos como goblins u orcos. Mi idea era que en algunos encuentros estos se generaran aleatoriamente con un array de enemigos, y tenía pensado que algunos de estos enemigos generados aleatoriamente sean arrays de clases hijas (como todos humanos) o de clases padre, como humanoides o incluso mobs, pero veo que esto será algo trabajoso aunque nada me quita el ánimo jeje, por cierto conocerás algún canal que me recomiendes sobre c# orientado a videojuegos? me encantan los vídeos de este canal pero también me gustaría aumentar mis referencias y sobre todo porque mi objetivo es programar videojuegos y aprender poco a poco.

  • @AlexRosales
    @AlexRosales 4 ปีที่แล้ว +8

    En este momentos estoy llevando C# en la Universidad , y me parece un curso muy completo, gracias por estos Ad Honorem que haces para nosotros los estudiantes, mucho mejores incluso que en la Universidad. Saludos desde Costa Rica Centroamérica.

  • @williamballen9462
    @williamballen9462 3 ปีที่แล้ว +3

    Que buen sentido del humor, esto hace que sus clases sean mas entretenidas.

  • @teamlucario387
    @teamlucario387 4 ปีที่แล้ว +2

    Me encanta cuando mete esos datos de historia y datos curiosos y los añade al código, le da un toque mas interesante a la clase

  • @claudiomendieta
    @claudiomendieta 5 ปีที่แล้ว +59

    JAJAJAJA me hizo el día el comentario de que un Gorila no es un humano, aunque algunos se parecen

    • @teamlucario387
      @teamlucario387 4 ปีที่แล้ว +1

      JAJAJAJAJA *2

    • @charly-ic2dd
      @charly-ic2dd 4 ปีที่แล้ว

      @@teamlucario387 los macristas jaja

    • @Hechizero459
      @Hechizero459 4 ปีที่แล้ว

      @@charly-ic2dd vos pagame el ife sh

    • @quiqueruiz5836
      @quiqueruiz5836 3 ปีที่แล้ว +2

      comentario racista se me cayó un ídolo

    • @estebanf1490
      @estebanf1490 3 ปีที่แล้ว +4

      @@quiqueruiz5836 tu comentario es racista, yo ni lo había pensado haci xd

  • @Mrleopola
    @Mrleopola 5 ปีที่แล้ว +7

    Muy bueno Juan. Estas clases son aunque no parezcan las más importantes. Ya que muchas veces (me incluyo), haciendo código (de manera desprolija y muy poco optimizado), más o menos avanzamos. Pero en la parte de diseño previo, lo que va a generar que un programa esté bien hecho, con reutilización de código, optimización, que sea legible para realizar modificaciones, etc. Ahí se complica la cosa. Un buen programador sabe si un proyecto debe usar o no herencia. Si alguien me acerca un proyecto a mí, quizás comience a armarlo con herencia y luego me doy cuenta que no es con herencias y cosas así. Creo que esto entra en la teoría de diseño de proyecto. Un abrazo!

  • @Schachlover
    @Schachlover 4 ปีที่แล้ว +1

    Gracias. Al repasar estos videos, siempre aprendo algo nuevo.

  • @raulnardone7062
    @raulnardone7062 5 ปีที่แล้ว +6

    Excelente como siempre. Muchas gracias Juan!

  • @TM-ln1jc
    @TM-ln1jc 5 ปีที่แล้ว +3

    Te digo lo de siempre, muy perfectamente bien explicado!
    Lo invito a que siga asi, y si se puede, subir los vídeos más frecuentemente.
    Gracias por compartir.

  • @betoshky82
    @betoshky82 ปีที่แล้ว

    Usted es mejor maestro que los que tuve en la universidad

  • @who_is_typo
    @who_is_typo ปีที่แล้ว

    Trabajazo increíble, curso entretenido, facil de seguir, completo. Lo único que me siento decir sobre esta entrega guarda relación con la forma: yo pondría ejemplos con Secretarios, Jefas de sección y Directoras, ya que se adapta mas a la realidad de hoy y no a la realidad de la generación de nuestros abuelos :) O si no, utilizar Secretaría o Dirección. Felicidades de nuevo por el contenido de calidad.

  • @franklinsena2843
    @franklinsena2843 4 ปีที่แล้ว

    Magistral explicación ha dado usted hombre!!! este curso es de los pocos en español que valen la pena ver. estoy repasando algunos puntos de programación para usar Unity y este curso ha sido clave.

    • @BreegBenjamin
      @BreegBenjamin 4 ปีที่แล้ว +1

      Es verdad, este hombre es un genio. Termine el curso hace tiempo, pero siempre que tengo que repasar un concepto, regreso aquí. ajajaja

  • @agentsmith8434
    @agentsmith8434 4 ปีที่แล้ว +1

    De aqui en adelante se pone la cosa buena gracias profe!

  • @rctmac
    @rctmac 5 ปีที่แล้ว

    Muchas gracias por esta nueva entrega maestro, tienes una manera de explicar la programación tan entendible, que muy pocos programadores tienen, espero que nos puedas enseñar sobre las clases abstractas y las interfaces, en tus próximas entregas. Muchas gracias nuevamente Juan. Saludos desde Bolivia.

  • @gerkuatento9903
    @gerkuatento9903 4 ปีที่แล้ว

    Me estoy iniciando en la programación y estos vídeos son muy buenos espero que sigas subiendo más de c# gracias

  • @tamararojas6044
    @tamararojas6044 ปีที่แล้ว

    el jueves tengo evaluacion de esto y no es tan dificil como pensaba muchas gracias :3

  • @marioguevara5954
    @marioguevara5954 5 ปีที่แล้ว +1

    Estare atento a futuros videos... Gracias!!!

  • @emireal09
    @emireal09 5 ปีที่แล้ว +2

    Genial, ya creo que entiendo mucho mejor la herencia.

  • @xSilencio99
    @xSilencio99 5 ปีที่แล้ว +1

    Se entiende con facilidad, buen vídeo.

  • @MrGonzaloll
    @MrGonzaloll ปีที่แล้ว

    16:50 "Como este, que resulta ser un humano (Juan), o eso dicen..." esto refuerza mi teoría de que sos de otro planeta (? jaja , no podes ser tan crack, muchas gracias por los cursos!

  • @andysierra5141
    @andysierra5141 5 ปีที่แล้ว +4

    en mis tiempos eso era polimorfismo.
    aun así esta perfectamente explicado y os felicito

  • @charly-ic2dd
    @charly-ic2dd 4 ปีที่แล้ว

    q buennn vidio muy util, saludos juan!

  • @euclidesperez9682
    @euclidesperez9682 ปีที่แล้ว

    He visto cursos en donde a esto se le llama polimorfismo debido a la muchas formas que toma un objeto de la superclase ahora se me siembra la duda.

  • @sacarymoviesamu
    @sacarymoviesamu 3 ปีที่แล้ว

    De verdad que me encantan tus bromas xd

  • @esto_esincreible
    @esto_esincreible 10 หลายเดือนก่อน

    Cuando hace esto:
    Mamiferos persona = new Humano("juan");
    Si pregunto mafiero es siempre humano la respuesta es no, entonces no estaria bien segun el principio de sustitución.. Creo haber entendido eso siguiendo los ejemplos anteriores @pidorasinformaticas espero vea mi pregunta.gracias 😁🌱

  • @miguelangelalvarez2333
    @miguelangelalvarez2333 5 ปีที่แล้ว +4

    Hasta el momento todo bien, pero cuando vi el siguiente tema: Polimorfismo; sólo el haber leído la palabra me provocó miedo jajaja. Saludos a todos los que siguen este curso.

  • @El_Facheras
    @El_Facheras ปีที่แล้ว +1

    Como dato informativo:
    Cuando almacenas sub clases en una clase maestra(base) como en este video, cuando necesitas acceder a los datos que contiene la subclase no será posible acceder a ellos, solo compartirán las variables, colecciones y métodos de la clase Mamíferos.
    Si sabes el tipo de la clase que esta almacenada en la matriz y necesitas ejecutar algo de la subclase en la matriz almacenMamiferos, es posible acceder a sus datos mediante esta sintaxis:
    //EJEMPLO CON CLASE GORILA
    ((Gorila)almacenAnimales[indice]).MetodoDentroClaseGorila();
    Si lo pusieramos asi => almacenAnimales[indice].MetodoDentroClaseGorila();
    No lo detectaría, pues estamos en la clase Mamíferos.
    No se como se llama este proceso, solo lo aprendí hace un tiempo sin saber como se llama el concepto, si alguien de paso me lo puede decir, le estaría agradecido, de hecho solo vine aquí por que de repente me acorde de este video y me surgió aquella duda que no supe responderme en aquel momento y mi cerebro se acordó de esto de la nada y vine aquí para si alguien mas se frustró como yo en su día.

  • @vazthaxkrules5272
    @vazthaxkrules5272 2 ปีที่แล้ว +1

    Tengo una duda, para que me sirve guardar un objeto Caballo en una variable Object si no puedo acceder a sus métodos?

    • @El_Facheras
      @El_Facheras ปีที่แล้ว

      Puedes acceder mediante por ejemplo:
      ((Gorila)almacenMamiferos[indice]).MetodoDeLaClaseGorila();

  • @alexandermachic2529
    @alexandermachic2529 3 ปีที่แล้ว

    gracias por todo esto :)

  • @francovedia5584
    @francovedia5584 ปีที่แล้ว

    gracias

  • @juliancuenca9108
    @juliancuenca9108 3 ปีที่แล้ว

    Gracias, es como si las subclases tambien heredasen el tipo de las superclases.

  • @giovannyleal2429
    @giovannyleal2429 4 ปีที่แล้ว

    execelente video

  • @geraldineclarosrios9689
    @geraldineclarosrios9689 4 ปีที่แล้ว +2

    Buenas noches a todos, se me presento una pregunta y pude aunto responderla JAJAJAJ, y quise dejar un comentario por si alguien le pasaba lo mismo, en la caso de la clase hija por ejemplo la clase caballo hereda el constructor de la clase mamiferos por herencia, pero que pasa si yo quiero tener otras condiciones iniciales añadirle cosas podemos tener sobrecarga de constructores en este caso el codigo sería :
    public Caballo(string nombre, int numpatas) : base(nombre)
    {
    this.numpatas = numpatas;
    }
    numpatas e un campo de clase de la clase caballo y a este constructor le añadi un parametro detipo entero del numero de patas y se debe colocar que hereda el constructor de la clase mamiferos, en pocas palabras es como ir añadiendo pero no se puede quitar esa condicion inicial por que e suna clase que hereda. Es como si mi papa me herada los ojos verdes no puedo sacarmelo y ponerme otros.ESPERO LES SIRVAAA MUCHO.

  • @pablosandoval7316
    @pablosandoval7316 5 ปีที่แล้ว

    Profe muchas gracias por los conocimientos que nos trasmites! tengo una consulta usted hará un curso aplicando este lenguaje en .NET mvc???

  • @elaprendiz7208
    @elaprendiz7208 2 ปีที่แล้ว

    En el minuto 16:53 aparece un momento épico🤣🤣🤣

  • @danisabadia5606
    @danisabadia5606 4 ปีที่แล้ว

    Una pregunta ¿Por que no utilizas las funciones integradas de set{} y get{} en lugar de crear métodos propios? ejemplo defino private strgin nombre
    creo solo un método public Nombre
    {
    set {this.nombre = value}
    get {cosnole.readline(nombre)}
    }
    Algo así me refiero ¿porqué no hacerlo así ?

  • @davidacosta3977
    @davidacosta3977 3 ปีที่แล้ว

    Profesor buen dia o noche, en caso se me conteste lo agradeceria mucho he seguido todos sus videos hasta este y lo he agradecido mucho pero estoy buscando aprender un tema al que llaman metodos de ordenamiento, no se si enseñes algo del tema en el curso y en que videos podria verlo. Gracias

  • @euclidesperez9682
    @euclidesperez9682 ปีที่แล้ว

    Yo he visto un curso de java y eso es muy parecido al polimorfismo.

  • @josuehombre2606
    @josuehombre2606 3 ปีที่แล้ว

    No veo claro como aplicar la sustitución en mis aplicaciones de control industrial....

  • @BreegBenjamin
    @BreegBenjamin 5 ปีที่แล้ว

    Sigo sin encontrar utilidad al Principio de sustitución

  • @gonzalozapata559
    @gonzalozapata559 4 ปีที่แล้ว

    Aca si me perdi.

  • @dagas125
    @dagas125 5 ปีที่แล้ว +1

    jajajaj a mi me la hizo cuando el dijo ¨se ejecuta el nombre de ese animallll¨, Enel minuto 18:33

  • @nicolas2008alcubo
    @nicolas2008alcubo 5 ปีที่แล้ว

    ¿Eso es polimorfismo?

    • @miguelrey2874
      @miguelrey2874 5 ปีที่แล้ว

      no, es principio de sustitución enfocado a la Herencia, el de Polimorfismo según él dijo que lo veríamos en los próximos videos que suba.

  • @ezequielmartinez194
    @ezequielmartinez194 ปีที่แล้ว

    Lpm, no entendi nada voy a tener que repasar mil veces este video como hice con el que explicaste el teorema de pitagoras

    • @euclidesperez9682
      @euclidesperez9682 ปีที่แล้ว

      es fácil un objeto de la superclase puede almacenar un objeto de cualquiera de sus subclases, o mas bien
      seria un objeto de la superclase puede instanciar a cualquiera de sus clases hijas.

    • @ezequielmartinez194
      @ezequielmartinez194 ปีที่แล้ว

      @@euclidesperez9682 Muchas gracias, necesitaba una respuesta corta y precisa. Solamente me quedará repasar.

  • @cosasdecompu5597
    @cosasdecompu5597 3 ปีที่แล้ว +1

    BUENO, YA ME VOY PERDIENDO

    • @dalnk2904
      @dalnk2904 2 ปีที่แล้ว

      ta potente

  • @alphaalfre
    @alphaalfre 2 ปีที่แล้ว

    👀

  • @davidperez2596
    @davidperez2596 2 ปีที่แล้ว

    Y los caballitos de mar? eh eh eh?

  • @abrahamjaimes7643
    @abrahamjaimes7643 2 ปีที่แล้ว

    18:28 entonses me dira el nombre de ese Animal , y miro que es Juan 😆

  • @kalziferx3smash301
    @kalziferx3smash301 4 ปีที่แล้ว +5

    15:18 secretarias.... son objetos... te me caiste bro :c

    • @hernangarcia77
      @hernangarcia77 4 ปีที่แล้ว +2

      7:40 Y tampoco es cierto que una secretaria no tenga relacion con un jefe o director...jeje

    • @lacrowd.portgas5274
      @lacrowd.portgas5274 3 หลายเดือนก่อน

      @@hernangarcia77 JAJAJA lptm esas secretarias son las favoritas del director

  • @luisal1485
    @luisal1485 ปีที่แล้ว +1

    comentario racista?...

  • @jesusalejandroloratovar7326
    @jesusalejandroloratovar7326 ปีที่แล้ว

    un humano es un gorila?, No aunq algunos se parecen, 🤣🤣🤣🤣🤣🤣🤣

  • @rowirave_
    @rowirave_ 2 ปีที่แล้ว

    me ofende que los cargos altos siempre sean de genero masculino y que secretaria siempre sea femenino xD

    • @dalnk2904
      @dalnk2904 2 ปีที่แล้ว

      pero en el otro video puso secretario

    • @dsc_dsc
      @dsc_dsc ปีที่แล้ว +1

      Uh estas aprendiendo programación, la ideología de género menor dejarla en otro lado.

    • @benja5019
      @benja5019 ปีที่แล้ว

      en realidad que importa eso xd