
Principios de la programación orientada a objetos
Tutorial
foundational
+10XP
10 mins
(155)
Unity Technologies

En este tutorial, aprenderás sobre los conceptos básicos del paradigma de programación orientada a objetos y sus cuatro principios asociados.
Al finalizar este tutorial, podrás realizar lo siguiente:
- Definir la encapsulación.
- Definir herencias.
- Definir polimorfismo.
- Definir abstracción.
- Explicar cómo los pilares de la OOP funcionan juntos para crear código eficiente y organizado.
Languages available:
1. Descripción general
Mientras obtienes más práctica con la programación, finalmente comenzarás a identificar situaciones donde tu código sospechoso podría escribirse de manera más eficaz. Quizás hayas copiado y pegado líneas de código o cambiado los niveles de protección en variables muchas veces mientras agregas más scripts a un proyecto. Sin importar la situación específica, estas observaciones son una parte importante de convertirse en un mejor programador porque piensas más allá de solo la funcionalidad pura del código y consideras también su usabilidad.
Hay muchas formas de mejorar la usabilidad del código e incluso muchas opiniones distintas acerca de cuál es el mejor método. Eso podría ser abrumador para los nuevos programadores. La mejor forma de obtener experiencia es intentar estos métodos. Para ayudarte a comenzar, te mostraremos uno de los paradigmas (o patrones) más populares de programación: la programación orientada a objetos.
2. ¿Qué es la programación orientada a objetos?
La programación orientada a objetos (OOP) es un patrón de programación en el cual los métodos y variables que se relacionan entre sí están agrupados para formar lo que se llama un objeto (¡el «object» en OOP!).
Mantener los datos organizados en objetos tiene muchas ventajas. Hace que el código sea más comprensible, lo cual facilita comprender lo que el código intenta lograr. En el ejemplo anterior, podemos ver que nuestro objeto Rabbit (Conejo) tiene algunas variables que describen su apariencia física y un método que define cómo puede moverse. Sería confuso si abrieras una clase aparte llamada Burrow (Cavar) y descubrieras un conjunto de métodos relacionados con Rabbit para comer zanahorias y mover la nariz.
Los objetos también te permiten controlar la accesibilidad de tu código, lo cual significa que reducirás la posibilidad de que alguien más (o incluso tú) accidentalmente arruine el código mientras creas tus proyectos. También podrás reutilizar y cambiar el propósito de distintas partes de tu código con facilidad.
Considera que cada proyecto tiene al menos dos programadores que trabajan en él: tú y tu yo seis meses después, cuando ya no recuerdes cómo o por qué hiciste lo que hiciste. La programación orientada a objetos hará que tu código sea más fácil de leer y más difícil de arruinar, tanto para ti como para cualquier otro programador que trabaje en tu proyecto.
Hay cuatro principios fundamentales en la programación orientada a objetos, los cuales son llamados comúnmente los pilares de la OOP. Son abstracción, encapsulación, herencia y polimorfismo. Para utilizar el patrón de programación orientada a objetos de forma correcta, solo necesitas aprender y aplicar estos cuatro principios. Aprenderemos acerca de cada uno de estos pilares a detalle más adelante, pero por ahora revisémoslo en términos generales.
3. Los cuatro pilares
Abstracción es el proceso de eliminar código complejo de los scripts donde otros programadores lo verán y solo exponer la funcionalidad que otros programadores realmente necesitarán. Cuando «excluyes» los detalles, reduces el código duplicado y proporcionas fácil acceso a los métodos más útiles. El objetivo de la abstracción es conservar tu código lo más limpio y simple posible para que otros programadores (o tú) lo utilicen. En nuestro ejemplo de Rabbit anterior, el método Hop (Salto) sería un buen ejemplo de abstracción. Sin el método Hop, si un programador quisiera que el conejo se moviera, tendría que escribir código que obtuviera acceso a su RigidBody y definir su velocidad, altura del salto, etc. Con el método Hop, todos esos aspectos se excluyen, lo cual permite que el programador se enfoque más en el cuándo que en el cómo debe saltar el conejo.
Herencia es el proceso de crear una clase primaria desde la cual otras clases, conocidas como clases secundarias, pueden crearse. Una clase secundaria toma todas las características de la principal, o clase primaria, de forma automática. Esto reduce la necesidad de rescribir código que ambas clases necesitarían usar. Como ejemplo, digamos que queremos crear una nueva clase llamada Bunny (Conejito). Como la clase Rabbit, tiene orejas que pueden estar verticales o dobladas, tiene pelaje de un color específico y puede saltar. Sin la herencia, esencialmente tendrías que copiar todo el código que ya escribiste y pegarlo en la nueva clase. Con las herencias, simplemente amplías la clase Rabbit y la funcionalidad ya está ahí y es accesible para la clase Bunny. La clase Bunny entonces podría tener una funcionalidad específica de Bunny; por ejemplo, comer alimento para conejito.
Polimorfismo es uno de los aspectos más útiles de la herencia. Te permite crear funcionalidades alternativas para código que se heredó de una clase primaria. Por ejemplo, nuestra clase Bunny secundaria representa un Rabbit domesticado. Puede saltar al igual que un Rabbit, pero un Bunny probablemente sería un poco más lento que su contraparte silvestre. Con polimorfismo, puedes anular el contenido del método Hop y escribir código personalizado que sea único a Bunny. La llamada del método es la misma, pero el código correcto se invocará con base en la entidad que lo llama.
La encapsulación es parecida a la abstracción en el sentido en que su propósito general es separar al programador de la complejidad del código, pero aquí el enfoque es más en la seguridad del código en forma de accesibilidad. La encapsulación te da las herramientas para crear código para otros programadores y asegurarte de que solo utilicen tus variables y métodos para lo que se diseñaron. En el código encapsulado, los demás programadores no pueden cambiar fácilmente los valores de las variables ni las propiedades de los objetos. Es imposible mencionar todas las distintas formas en que otros scripts pueden obtener acceso a tu código; por ello, es mucho mejor encapsular lo que creaste para que solo funcione según lo diseñaste. Como ejemplo, digamos que el tipo de oreja de nuestro Rabbit afecta su capacidad auditiva. Una vez que ese valor se defina, no debe cambiarse después. Para garantizar que el valor esté protegido, lo definirías como «private» para evitar que cualquier script externo pueda obtener acceso.
4. Programación orientada a objetos en las misiones
Si sientes que algo de esto te suena familiar, ¡es verdad! En realidad ya has implementado algunos principios de la OOP en tu código durante este trayecto. Mientras trabajas en esta misión, intenta pensar sobre qué pilar podrías aplicar cuando escribas una nueva funcionalidad para tu proyecto. En la siguiente misión, revisitaremos cada pilar en profundidad mientras buscas formas para iterar y mejorar tu código.
5. Próximos pasos
Es importante considerar que la programación orientada a objetos no es el único paradigma de programación que existe. Hay muchos métodos distintos para crear aplicaciones y es probable que no utilices el método orientado a objetos para todo lo que hagas en Unity. La programación orientada a objetos, y de hecho todos los patrones de programación, solo son herramientas en tu repertorio y aunque algunas puedan ser más efectivas que otras en algunas cosas, no hay un paradigma que sea absolutamente superior. Siempre recuerda seleccionar la herramienta que tiene más sentido para el desafío que enfrentas. Dicho eso, la programación orientada a objetos es una excelente herramienta para nuevos programadores. Mientras avanzas por las siguientes misiones, ampliarás tu conocimiento sobre estos conceptos básicos.
En el siguiente tutorial, es momento de comenzar con el proyecto. Implementarás el flujo de la Escena y configurarás botones para que el usuario pueda moverse entre dos escenas y salir de la aplicación.