Diseño Basado en Componentes: Todo lo que Necesitas Saber
Heads up!
This summary and transcript were automatically generated using AI with the Free YouTube Transcript Summary Tool by LunaNotes.
Generate a summary for freeIf you found this summary useful, consider buying us a coffee. It would help us a lot!
Introducción
¡Hola! Bienvenidos a este nuevo vídeo donde exploraremos el diseño basado en componentes, un patrón fundamental en el desarrollo moderno de software. En esta clase, aprenderemos cómo crear y gestionar componentes, así como comprender su arquitectura básica. Este patrón ha existido en el mercado durante bastante tiempo y es esencial para organizar proyectos de software grandes y complejos.
Te invito a quedarte hasta el final, donde explicaré no solo las ventajas, sino también las desventajas de trabajar con este tipo de diseño.
¿Qué es el Diseño Basado en Componentes?
El diseño basado en componentes divide las funcionalidades de un sistema en piezas más pequeñas y manejables, conocidas como componentes. En este contexto, los actores o entidades en nuestro proyecto son simplemente contenedores de estos componentes.
Componentes y Actores
- Actores: Representan las entidades que poseen ciertos comportamientos. Por ejemplo, en un juego, un personaje sería un actor.
- Componentes: Son responsables de la lógica de las funcionalidades. Esto puede incluir comportamiento de renderización, físicas, movimientos, etc.
Esta relación se describe comúnmente como "un actor tiene un componente de físicas, un componente de render, etc."
Ventajas del Diseño Basado en Componentes
El uso de componentes ofrece varias ventajas significativas para los desarrolladores. Aquí te detallo algunas:
1. Organización del Código
- Modularidad: Permite mantener el código mucho más organizado. Cuando se produce un error, se puede solucionar directamente en el componente afectado sin buscar en clases extensas.
- Menos responsabilidades: Cada componente maneja una responsabilidad específica, evitando la sobrecarga de trabajo en un solo actor.
2. Reutilización de Componentes
- Los componentes son reutilizables en diferentes actores, lo que reduce el tiempo de desarrollo y mejora la consistencia en la funcionalidad del sistema.
3. Reducción del Acoplamiento
- Cuando trabajamos con componentes, el acoplamiento entre ellos se minimiza, permitiendo a diferentes programadores trabajar en paralelo sin interferir en los trabajos de los otros.
4. Flexibilidad
- Aunque existe cierto grado de dependencia entre componentes, la flexibilidad básica de la implementación se conserva mediante la correcta organización.
Desventajas del Diseño Basado en Componentes
A pesar de las ventajas, también existen desventajas que los desarrolladores deben considerar:
1. Complejidad del Proyecto
- Al añadir múltiples componentes, el diseño del proyecto se vuelve más complejo, lo que puede requerir más tiempo y esfuerzo para organizar antes de comenzar a programar.
2. Comunicación entre Objetos
- Se puede perder flexibilidad en la comunicación directa entre actores. Esto puede hacer que ciertas implementaciones sean más complicadas de gestionar.
3. Sobrecarga de Ingeniería
- Para algunos proyectos que son relativamente simples, aplicar un diseño basado en componentes puede ser un exceso de ingeniería, complicando innecesariamente la estructura del código.
Mejorando la Gestión del Código
Como se mencionó, la gestión adecuada de estos componentes es crucial. Por ejemplo, cuando se trabaja con Unreal Engine, la implementación de los componentes puede ayudarnos a mantener el código más limpio y efectivo.
Creando tus Propios Componentes
Para crear un componente en Unreal, se puede heredar de UActorComponent
, que incluye funcionalidades base necesarias para gestionar la transformación, rotación y escalado de un actor. Este método es muy efectivo, ya que evita que los actores individuales se vuelvan demasiado grandes y difíciles de manejar.
Ejemplo de Implementación
Dado un actor que deseamos optimizar:
- Se creará un nuevo componente que encapsule la lógica específica seleccionada.
- Se implementará un método en el componente para gestionar su funcionalidad y se referenciará desde el actor asociado.
Con la implementación correcta, el tamaño de la clase de actor podría reducirse considerablemente y facilitar la gestión de su lógica. Este enfoque también se traduce en un control más eficiente del rendimiento.
Resumen de Claves
- Planes de diseño: Piensa críticamente sobre la necesidad de un diseño basado en componentes antes de aplicarlo, y asegúrate de que tenga sentido para la complejidad de tu proyecto.
- Patrones como sugerencias: Recuerda que los patrones de diseño son guías y no reglas estrictas. Puedes adaptar los conceptos a tus necesidades específicas.
Conclusión
El diseño basado en componentes es una herramienta poderosa en el arsenal de cualquier desarrollador de software, especialmente en entornos complejos como los videojuegos. A través de la modularidad y la reutilización, puedes contribuir a un código más limpio y eficiente. Sin embargo, siempre es importante evaluar caso por caso si la implementación de este patrón realmente beneficia al proyecto en el que estás trabajando.
¡Gracias por acompañarme en esta clase y no olvides dejar tu comentario! Si has encontrado útil la información, considera dejar un 'like' y suscribirte para más contenido sobre desarrollo de software. Hasta la próxima!
hola bienvenidos a este nuevo vídeo pues bien en esta clase vamos a aprovechar para ver cómo podemos crear gestionar y
también vamos a entender el concepto base que existe detrás de los componentes este patrón de diseño que
tenemos a nuestra disponibilidad desde hace bastante tiempo atrás entonces antes que nada antes de comenzar a
muchas de las que en la actualidad que tenemos en el mercado funcionan a través de un patrón conocido como componen
paste design o diseño basado en componentes este patrón lo que nos sugiere es que los actores o las
entidades no son otra cosa que contenedores de componentes y los componentes en este caso vendrían a ser
el actor o la entidad tiene un componente de render tiene un componente de movimiento tiene un componente de
físicas y todo este tipo de cosas como pones pero nosotros tenemos aquí dentro del carácter de la clase de
normalmente hereda de pan y también hereda ya por la principal diferencia que existe entre actor y carácter es que
por defecto carácter ya incorpora muchos de estos componentes como por ejemplo el cac se compone el mes y compone en
carácter no se compone en este caso bueno la cámara y todas las cosas que yo le añadí desde código en este caso
entonces actor como base como tal no tiene absolutamente nada lo único que tiene son ciertas funcionalidades a
través de métodos para poder acceder a cierta información que está asociada a componentes que él pueda tener en un
momento concreto esa es la principal diferencia que existen más que nada entre carácter y actor a pesar que está
bueno como sabemos carácter también el sistema de este como les digo el cuco el diseño basado en componentes lo que
sugiere pasar todas esas funcionalidades que esta clase pudiera tener a diferentes componentes a clases más
pequeñas que van a gestionar en este caso esos comportamientos esto es más que nada una de las ventajas que nos
otorgan esto de aquí es que tenemos el código mucho más organizado y cuando haya que hacer un cambio por ejemplo que
se la física fallo por algún motivo nosotros no tenemos que ingresar a la clase normal del actor por es
posibilidad quien le venga ingresar aquí el event graph y buscar la parte donde hace la cuestión de cálculos físicos de
todo eso en vez de hacerlo aquí sobre el actor me voy a la clase que gestiona en este caso todo lo que tiene que ver con
física al igual si falla algo con el mes porque no sé no se está reutilizando bien con alguna cosa por el estilo yo ya
voy a ese fichero a ese archivo a modificarlo ahí y no entonces nos ayuda a organizar mucho más
el código y eso evita tener clases muy extensas que a lo largo del tiempo conforme más cosas en la mañana tienes
más responsabilidades vaya teniendo la clase va a ser más difícil de depurar entonces ese es una de las ventajas que
nos da el sistema avanzado en componentes otra ventaja que nos da es que estos componentes nosotros no vamos
a poder usar sobre cualquier actor los componentes en este caso son revisables son reciclables nosotros podemos usarlo
sobre cualquier actor esa es una de las ventajas que nos da trabajar con componentes otras ventajas que tienen
los componentes y bueno esto sería no todos los componentes lo tienen es que cada componente se va a en este caso a
describir o realizar sin tener conocimientos de los detalles internos de otros componentes la ventaja que nos
da esto es que por ejemplo si estamos en un grupo de programadores yo puedo trabajar por ejemplo el
compañero trabaja un componente de cámara por ejemplo entonces nosotros podemos trabajar tranquilamente sobre el
código sin interferir en sobre el trabajo de los otros pero como les digo eso es algo que no se aplica a todos los
componentes ya que hay componentes que dependen de otros para poder trabajar como por ejemplo el componente de mes o
un componente de render no necesariamente este de mes porque por ejemplo para poder mostrar en
este caso en una animación alguna cosa tengo que preguntarle si el personaje está en el piso por ejemplo o tengo que
preguntarle si está en el aire como por ejemplo hacemos cuando trabajamos con el animation club entonces eso nos genera
un acoplamiento entre esos dos componentes pero en este caso ese es un tipo de copla miento que muchas veces no
vamos a poder evitar ya que para que el componente de render pueda trabajar está obligado a trabajar a necesitar en este
caso un componente de físico entonces lo que nosotros debemos hacer a través de este trabajo es minimizar el
acoplamiento van a ver componentes que se van a acoplar pero necesitamos minimizarlo lo más que se pueda y ese es
otra ventaja que nos da a trabajar con componentes se minimiza la cantidad de acoplamiento perfecto pero sabiendo las
ventajas que esto tiene esto también tiene algunas desventajas y parte de las desventajas que tiene es que
el componente en el proyecto se comienza a ser más difícil ya que nosotros tenemos que pensar mejor el diseño de
clases para antes de sentarnos a escribir código entonces por lo que tenemos que separar los comportamientos
o las funcionalidades en este caso y como digo eso hace que la estructura de nuestro proyecto crezca bastante se
comience a ser más complicado pero como lo ganamos en este caso organización evitamos un poco el tema del
acoplamiento o sea no tenemos un complemento tan fuerte entonces es parte de los de las desventajas que están tras
otra desventaja que nos trae el trabajar con componentes es la comunicación directa entre objetos nosotros muchas
veces cuando trabajamos por ejemplo en el event graft nosotros a veces escogemos y llamamos el carácter burmen
específicas con el trabajo a través de componentes nosotros perdemos esa flexibilidad entonces tenemos que buscar
métodos para seguir teniendo en parte esa flexibilidad o algo parecido a esa flexibilidad entonces esa es parte de
pero aquí quiero hacer un paréntesis como les dije trabajar con este diseño hace el proyecto mucho más difíciles de
trabajarlo como tal nosotros deberíamos aplicar intentar aplicar este diseño solo en realidad
cuando sea necesario y no en todas las circunstancias porque van a haber clases que de pronto son bastante sencillas en
donde complicar el proyecto por gusto sería realizar sobre ingeniería en este caso entonces solo debemos aplicar este
patrón 4 obligó cuando en realidad sea necesario si nosotros vamos a nosotros estamos trabajando por ejemplo y creemos
que esa clase puede llegar a crecer demasiado ahí si nosotros deberíamos sentarnos y decir bueno sabes que
deberían mejor pasar todo esto a componentes todo lo que se pueda pasar a componentes en este caso para evitar
tener una clase o clases demasiado largas por tener todas las responsabilidades metidas en un solo
adicional y es algo que me estuvieron preguntando a mí en la clase anterior link en la parte superior del vídeo
también comentario fijado por ejemplo cuando nosotros trabajamos el tema del carácter del animation blood entonces
acceder a cierta información que tiene específicamente esta clase de aquí la respuesta a eso o la respuesta más
sencilla que les podía dar es que la mayoría de lógica nosotros deberíamos pasar a componentes y acceder a esos
componentes desde aquí a través del tráiler pulmones como ya vimos en esa clase entonces nosotros llamaríamos como
lo hicimos aquí en el obtener lo compone en este caso y ya trabajaríamos con los datos que se van a necesitar entonces
esa sería una opción es otra ventaja en este caso que nos da trabajar con componentes aquí dentro de un red y algo
que también debemos entender con real es un sistema basado en componentes un real ya implementa en gran medida todos los
que les acabo de decir entonces cómo podemos ahora crear nuestros propios componentes para quitar
cierta lógica o para comenzar a distribuir mejor la lógica de nuestros actores si yo quisiera mantener la
terminología que los actores no son otra cosa solo contenedores de componentes cómo puedo hacer dicha tarea entonces
vamos en este caso haciéndolo entonces vamos acá así pues las clases y lo que tenemos que hacer en este caso es crear
un componente de nuevo para crear un componente ya hemos visto de un ciclo sprout class y en este caso vamos a
heredar de actual componen o descompone en nuestro caso nos viene mejor trabajar con él sin componen por qué porque 'sin
se componen y trae aún un componente transformación hacia atrás propiedades de transformación que nos permite
moverlos rotar o escalar entonces nos viene mucho mejor que actual componente no trae nada de eso
entonces en este caso nosotros saldríamos ya al código y como pueden ver la clase del pickup es poner que
también les dejo un link de la serie aquí en la parte superior del vídeo y también un comentario fijado la clase el
tamaño de la clase redujo bastante lo único que tiene actualmente solamente una referencia a un puntero en este caso
al static me descompone ya les pongo ponen que el componente que creamos anteriormente entonces ahora el cpp lo
único que está es durante la construcción construir dichos componentes entonces hemos reducido el
tamaño de esta clase a solamente esto y aquí esta clase ahora tiene la relación con con él tiene un tiene un componente
en este caso de mes y tiene un componente de expongo un poco perfecto entonces toda la lógica que nosotros
teníamos anteriormente aquí la cortamos y la pegamos en el expongo un poner entonces revisemos él es con compone que
en este caso como les dije eso y pasamos el método que en este caso se nos ayudaba a crear el actor en este
caso es respond y pasamos en este caso el otro método que tenía otros nombres y aproveché para ponerle en este caso un
nombre un poco más claro wen pica actor disco lectora cuando el actor es es recogido en este caso va a hacer
determinada cosa el tiempo para hacer responde el pick up en este caso sigue siendo el mismo en este caso también
como digo fue un corte y pega también tiene la logia en este caso para pedir la clase de la cual se va a hacer spam
voy a guardar un puntero a esa instancia y en este caso él está emergiendo para el control de tiempo
entonces como les digo el resto sigue siendo completamente igual durante bien play creamos el actor durante el expone
en la lógica del spot y cada actor en este caso para crear el picado también tenemos durante el wish pong que
cuando se va a responder lo que va a hacer volver a crearlo y en este caso limpiar el time pero aquí hay algo que
debemos también revisar el get what time el manager es un método que pertenece a actor noah actor compone entonces voy a
tener que pedir un puntero en este caso del dueño quien esté incorporando este componente para llamar a su método que
es world time el manager esa es toda la diferencia y al igual cuando el pickup es récord recogido recolectado en este
caso que primero destruyamos en la instancia y también voy a aceptar un timer que en este caso es lo mismo voy a
perfecto entonces por el lado del pickup expone como digo fue un corte y pega el código que teníamos anteriormente solo
que a esta clase ahora también tenemos que hacer un cambio durante en este caso en la clase del pri acá porque
recordemos que este objeto necesito rellenar el delegado que tiene no necesito decirle a través de la
dirección de la memoria de la función que se va a ejecutar cuando esto sea llamado entonces la única diferencia
está en que el código o sea este método ya no se encuentra dentro del psuv onerosa dentro del dueño de estética
sino que ahora va a preguntar por el componente que ese actor tiene en ciclo se más a través de poner que componen by
class y voy a preguntarle si tiene este componente si él tiene este componente pues se salta esto porque si no lo tiene
termina la función sin hacer nada más y en este caso va a aceptar el delegado se va a rellenar el puntero interno que
tiene este delegado perfecto eso es todo los cambios que hemos hecho entonces con esto ya procederíamos a compilar
podríamos en este caso ya regresar unreal y vamos revisando en este caso el actor que tenemos aquí porque recordemos
que yo lo que hice fue arrastrar el actor directamente desde aquí acá es en asia no pasé por el proceso de crear un
blues benito en este caso quería pasar de este proceso y en este caso como pueden ver él ya
tiene aquí el pica de exponer componen el cual le di la posición que es en ese punto yo quiero que se cree en este caso
el picado y lo único que hago es echar el tiempo para hacerles públicas que este caso se reduce a tres para que sea
más rápido que los pobres y coma más y la clase que va en este caso va a crear la instancia en este caso entonces
seguir funcionando entonces si recojo perfecto ahí se destruyó me permite saltar más alto porque eso sigue
todo esto sigue funcionando igual distribuimos las responsabilidades ahora a un componente por eso vieron que la
clase en este caso ética dispone de las más pequeñas porque ya no tienen esa responsabilidad de crear él solamente es
un contenedor de componentes y así es como se va a mantener perfecto muchachos esto sería todo una
cosa adicional como les digo esto depende de la complejidad de su proyecto van a ver actores donde de pronto
podemos implementar la idea a medias a final de cuentas los patrones de diseño lo que son más que nada son sugerencias
a problemas porque ser así problemas clásicos problemas que con los que siempre te vas a topar son problemas
bastante comunes de qué son sugerencias para resolver esos problemas sin reinventar la red pero nosotros de
pronto no si nosotros queremos sólo tomamos una parte de ese concepto y lo implementamos a nuestra clase de alguna
forma parecida entonces son cosas que podemos hacer y como les digo depende bastante de su proyecto porque en el
caso del personaje si nosotros quisiéramos implementar en este caso el tema para que sólo el carácter sea solo
un contenedor de componentes nosotros podríamos hacerlo pero nos vamos a enfrentar al problema por ejemplo déjame
enfrentar con el problema del tema de los inputs ya que los impute es algo que hasta cierto punto si necesito
gestionarlo aquí yo los puedo gestionar aquí sería la forma más fácil de poder hacerlo pero nosotros podríamos buscar
una forma de poder implementar componentes para el manejo de los inputs es bastante complicado lo veo bastante
complicado pero como les digo sea en realidad este tema los patrones es una sugerencia no es 100% obligatorio
usarlos pero siempre es recomendable saberlos entenderlos siempre es recomendable nosotros podemos tomar
fragmentos de ese patrón e implementarlos a nuestro estilo así que muchachos como les digo esto sería todo
por este vídeo si les gustó el vídeo la información que les brinde les fue de utilidad pueden ayudarme con un like y
suscribiéndose a este canal aqui les voy a dejar otros vídeos de honra ya que son muy lindos muy sexys en los cuales
podremos aprender un montón y por mi parte esto sería todo no olviden dejar su punto y coma al final y nos vemos en