Programación Orientada a Objetos
La Programación Orientada a Objetos es un paradigma de la programación, que está basado en la creación de clases, con las cuales podemos crear objetos. Este paradigma fue diseñado para crear Software basado en el comportamiento de los objetos y las cosas en la vida real. Con ella podemos diseñar mejor el código y puede ser comprendido más fácilmente por los desarrolladores.
También es conocida como POO o como OOP por sus siglas en inglés (Object Oriented Programming).
La programación orientada a objetos no es un patrón de diseño, tampoco un estilo de arquitectura, ni un estándar. Como lo mencionamos, la POO es un paradigma, por lo tanto es un estilo de programación de Software.
Utilizando el paradigma de la POO, podemos separar los diferentes componentes de las aplicaciones en diversas clases que nos permitan agrupar funcionalidades y propiedades en diferentes piezas, conocidas como Clases, para reutilizarlas cuantas veces sea necesario (creando objetos).
¿Cómo emplear este paradigma?
La base de la Programación Orientada a Objetos, como su nombre lo dice, es a partir de la creación de objetos, donde estos representan alguna entidad del mundo real. Para poder crear objetos, debemos hacerlo a partir de una plantilla, conocida como Clase, en ella, se especificarán las propiedades y los comportamientos que tendrán los objetos que creemos a partir de ella.
Para poder hacer un uso adecuado del paradigma, necesitamos conocer los principios de la POO, Abstracción, Encapsulamiento, Polimorfismo y Herencia.
Dado que la POO es un paradigma, puede ser aplicado a cualquier lenguaje de programación que sea orientado a objetos, como puede ser Java, Python, C, entre otros. El objetivo del Post es explicar la POO en general y no aplicado a ningún lenguaje en particular, por lo cual los ejemplos estarán representados de forma genérica.
Abstracción
El principio de abstracción es un proceso que implica reconocer las características importantes de los objetos que vamos a crear en nuestro sistema. La utilidad de la abstracción consiste en declarar en nuestras clases únicamente las propiedades y comportamientos que serán de alguna utilidad e ignorar aquellos que no lo sean.
Para ello, debemos de prestar especial atención en lo que es un objeto y lo que puede hacer, en lugar de preocuparnos en cómo implementarlo. Está basado en el principio de mínimo compromiso, que en palabras simples, significa que solamente debemos de mostrar el comportamiento en específico y no cómo está funcionando. De esta forma, interactuaremos con otros objetos sin preocuparnos en su implementación. También es importante identificar aquellas propiedades que se comparten entre diversos objetos, más adelante veremos por qué.
Supongamos que estamos creando un sistema de gestión de consultas para una clínica veterinaria, en ella se atenderán solamente perros. ¿Qué información sería necesaria guardar para cada uno de ellos? (Aquí ya tenemos una clase: Perro)
Bueno, de un Perro necesitaríamos saber su nombre, la edad, el responsable de la mascota, las vacunas que tiene aplicadas, alguna enfermedad, etc. Esta es información útil para un sistema de consultas, no nos interesa saber el color de los ojos, o la forma de las orejas, al menos no para el sistema, porque para el veterinario sí podría importarle.
Bien, ya tenemos las características de un Perro, ahora, ¿Qué comportamiento tendría un perro dentro del sistema? Se le puede aplicar una vacuna, diagnosticar alguna enfermedad, cumplir años, entre otras. Estos pueden los comportamientos que tendremos en el sistema para los perros, de momento no nos interesa saber si ya salió a su paseo semanal, o si está cansado.
En eso consiste la abstracción, en reconocer los objetos que existirán en nuestro sistema e identificar las propiedades y comportamientos que son útiles para poder realizar las acciones que necesitemos.
Encapsulamiento
El principio de Encapsulamiento consiste en limitar el acceso a una propiedad o a un miembro de nuestras clases, con la finalidad de mantener las propiedades de los objetos restringidas y que únicamente puedan ser alteradas mediante operaciones definidas.
Para aplicar este principio, dentro del sistema interactuaremos con otros objetos a través de sus métodos definidos y no directamente con sus propiedades. La finalidad del encapsulamiento es enfocarnos en cómo utilizar los demás objetos y no en cómo fueron construídos.
Volviendo al ejemplo de la clínica, los perros tendrán como propiedad una lista de vacunas que han sido aplicadas, lo adecuado es no modificar directamente la lista, sino ejecutar un método como agregarVacuna(nombre) y que internamente ese método modifique la lista agregando el elemento.
Herencia
El principio de herencia consiste en compartir propiedades y comportamientos a otras clases. Esto es muy útil cuando tenemos varios objetos que comparten las mismas características, así podremos crear una clase con aquellas propiedades que existen en ambas y aplicar la herencia a cada una de ellas. De esta manera reutilizaremos el código escrito, ya que no será necesario definir los mismos atributos en ambas clases.
Cuando una clase le hereda a otra sus propiedades, se le conoce como clase padre o como Superclase. Cuando a una clase le heredan características de otra, se le conoce como clase hija o Subclase.
Gracias a la herencia, podemos crear una jerarquía de clases en nuestros sistemas compartiendo propiedades y características que solamente escribimos en código una sola vez.
Retomando el ejemplo de la clínica, vemos que ha tenido muy buenos resultados y comenzará a atender gatos también, para ello será necesario definir una nueva clase Gato y poder guardar la información necesaria, al hacerlo, nos damos cuenta de que es muy similar a la clase Perro y no sería una buena práctica tener dos clases que sean muy parecidas.
Entonces, hemos creado una nueva clase llamada Animal, que contendrá el nombre, la edad, el responsable y las vacunas aplicadas. De esta forma la clase Perro y la nueva clase Gato heredarán las propiedades de Animal, ahora ambas tendrán las mismas características sin necesidad de escribirlas en cada una de ellas.
Si más adelante queremos agregar alguna propiedad particular para un gato o un perro, podremos hacerlo en alguna de ellas sin afectar la jerarquía.
Polimorfismo
El principio de Polimorfismo consiste en la capacidad que tienen los objetos de una clase para responder al mismo evento durante su invocación y comportarse de manera similar o particular. En palabras simples, es la facilidad con la que podremos conseguir que un objeto de alguna clase hija se comporte de la misma forma que su clase clase padre. Esto con la finalidad de mantener los comportamientos de la jerarquía y que puedan ser modificados para que cada clase hija se comporte de un modo en particular si es necesario.
En nuestra clínica, tenemos nuestras clases de Perro y Gato, ambas heredan de Animal, por lo tanto cuentan con las mismas propiedades y métodos de ella. Sin embargo, podemos aplicar un comportamiento particular en los métodos para cada subclase. Esto nos permite que el mismo método definido en la clase padre pueda tener diferentes comportamientos en las clases hijas según nuestras necesidades.
Beneficios de la POO
Como podrás notar, utilizar la Programación Orientada a Objetos, nos permitirá darle un contexto lo más realista posible a nuestras aplicaciones. Evitar el código duplicado, proteger las definiciones, ocuparlas a través de funcionalidades definidas y proporcionar comportamientos particulares para nuestros objetos.
Aplicando los principios adecuadamente, tendremos un código más escalable y fácil de mantener con una estructura organizada que puede ser comprendida por la gran mayoría de las personas.
Conclusión
Al principio podrá parecer que la Programación Orientada a Objetos es muy complicada, sin embargo la práctica constante facilitará mucho las cosas. Recuerda que la POO es un paradigma utilizado para diseñar aplicaciones lo más similares a la vida real. Utilizarla adecuadamente nos permitirá crear aplicaciones robustas con un código más limpio.
No olvides visitar nuestra cuenta de Instagram @codigazosit
Te compartimos el post de este artículo por si tienes alguna duda o comentario.
¡Muchas gracias por tu visita!