POO: ¿Qué es la POO? Guía de fundamentos de la Programación Orientada a Objetos.
Introducción a la Programación Orientada a Objetos (POO)
A llegado el momento de hablar de uno de los temas más importantes en programación y que todo programador al menos debe conocer que es, estoy hablando de la Programación Orientada a Objetos mejor conocida por sus siglas como POO en español o OOP en ingles, en este post te enseñaré los fundamentos para comprender este paradigma de programación y sus principales características, recuerda que si te gusta ayúdame a compartirlo en tus redes sociales y suscríbete a mi canal de EWebik en YouTube para brindar mi apoyo.
Tabla de contenido
- 1 Introducción a la Programación Orientada a Objetos (POO)
- 2 ¿Qué es la Programación Orientada a Objetos (POO)?
- 3 Cambiando nuestro paradigma para pensar en objetos
- 4 Ejemplo de programación orientada a objetos tomando como referencia a un carro
- 5 Orígenes de la Programación Orientada a Objetos
- 6 Conceptos y fundamentos de la POO
- 7 ¿Qué es una Clase?
- 8 ¿Qué es un objeto?
- 9 ¿Qué es un mensaje?
- 10 ¿Qué es un método?
- 11 ¿Qué es un evento?
- 12 ¿Qué es un atributo?
- 13 ¿Qué es el estado interno?
- 14 ¿Qué es identidad?
- 15 Componentes del objeto
- 16 Características de la programación orientada a objetos POO
- 17 ¿Qué es la abstracción?
- 18 ¿Qué es el encapsulamiento?
- 19 ¿Qué es el principio de ocultación?
- 20 ¿Qué es el polimorfismo?
- 21 ¿Qué es Herencia?
- 22 ¿Qué es multi herencia?
- 23 Conclusiones
¿Qué es la Programación Orientada a Objetos (POO)?
La programación orientada a objetos es un modelo de programación que utiliza una entidad llamada objeto, con el cual podemos realizar una abstracción del mundo real para la solución de problemas.
El paradigma de programación POO es sencillo de explicar, ya que esencialmente nos indica que debemos organizar los programas que componen un software a imagen y semejanza de cómo los organizaríamos en el mundo real, por lo tanto, cualquier cosas del mundo real o quizá casi cualquier cosa, mejor dicho, puedes ser abstraído y plasmado en un programa mediante el uso de la POO.
Cambiando nuestro paradigma para pensar en objetos
Lo primero que debes de quitarte de la cabeza es que la POO, no solo es, separar el código en varios archivos, cuando estaba trabajando en una empresa y me toco realizar entrevistas a desarrolladores de todo tipo, les preguntaba ¿Qué es la POO? y casi el 90 por ciento respondía, que la POO es una forma en que podemos separar y organizar el código para no tenerlo en un solo archivo, esto es incorrecto, ya que en casi cualquier lenguaje se puede separar en diferentes archivos el código.
Pienso que la forma de pensar de los chicos y chicas que entrevistaba se debía a la formación que recibieron en las universidades o cursos de programación. Muchos de nosotros cuando iniciamos en la programación, nos enseñan en la forma tradicional o en un paradigma más bien conocido como estructurado, nos enseñan y hacen pensar que los programas son como una lista de instrucciones que al seguirse al pie de la letra le indican a una máquina o computadora lo que debe hacer.
Cuando cambiamos este paradigma y pensamos en objetos, desde este punto de vista un programa es un conjunto de objetos que dialogan entre sí para realizar las distintas tareas que tienen programadas, tal y como lo haría, los sistemas de los que está compuesto un carro, en un auto los sistemas se comunican interna y externamente con otros sistemas para que el carro funcione correctamente, ¿cierto?
Ejemplo de programación orientada a objetos tomando como referencia a un carro
Supongamos que queremos programar y realizar un software sobre un automóvil y dentro de los requerimientos nos han indicado que utilicemos programación orientada a objetos, muy bien, lo primero que debemos hacer para poder cumplir con este requerimiento, es pensar en cada parte que compone al carro como un objeto independiente y dado que hay muchas soluciones para poder resolver este problema yo propongo la siguiente.
Primero debemos entender que el carro en su totalidad es o puede ser un objeto, al pensar así podemos descomponer al auto en objetos mas simples para bajar la complejidad del problema, al atacar el problema de esta manera lo que estamos haciendo es una forma de abstracción, en dónde vemos a un carro como una entidad que puede ser programada, de esta forma podemos decir que, si el carro es un objeto, el color del carro, el número de puertas, el número de luces, serían los atributos y el arranque o ignición, el freno y la reversa, serían acciones que pudiésemos interpretar como métodos.
Dicho lo anterior, al momento de realizar nuestra programación lo que tenemos que hacer es representar al carro, sus atributos y métodos mediante otra entidad dentro de la POO llamada Clase, esta nueva entidad nos permite representar a base de código el comportamiento y características del auto.
Pero no quiero adelantarme mucho, lo que deseo explicarte es la forma en que uno debe de cambiar la mentalidad cuando sale de la programación estructurada y se adentra en la POO y para ello es momento de ver en forma general cada aspecto y entidades que posee la POO.
Gracias por tu calificación
(4)
Orígenes de la Programación Orientada a Objetos
No soy muy bueno relatando historia mejor hagamos una lista de los acontecimientos mas importantes de la POO:
- Tiene su origen en Sumula 67 programa orientado a realizar simulaciones en el Centro de Cómputo Noruego en Oslo.
- La programación orientada a objetos fue creada por Ole Johan Dahl y Kristen Nygaard.
- La idea de la POO nace de la agrupación de diversas tipas de naves en diversas clases de objetos, se dieron cuenta que al hacer esto, cada objeto definía sus propios datos y comportamiento.
- No obstante, la idea se refino en Smalltalk cuyas primeras versiones fueron escritas en lenguaje Basic.
- A mediados de los ochenta la POO tomo su lugar como uno de lo paradigmas de programación dominante gracias a la influencia que tenia el lenguaje C y una de sus exenciones mas populares C++.
- El paradigma orientado a objetos fue adoptado mas tarde por lenguajes como Ada, BASIC, Lisp y Pascal, aunque, algunos de estos solo ocupan ciertos fundamentos y no aplican la POO en su totalidad.
Quizá esta es la sección mas aburrida de este Post, ahora vayamos a cosas mas interesantes, pero no sin antes darle el reconocimiento a todos los que han dejado su legado y nos han hecho la vida más fácil a todos en esto de la programación.
Conceptos y fundamentos de la POO
La programación orientada a objetos tiene 7 conceptos fundamentales que debemos comprender antes de escribir una linea de código, claro si es que queremos hacer bien las cosas, tu puedes hacer lo que te haga feliz. Estos conceptos son:
- Clase
- Objeto
- Mensaje
- Método
- Evento
- Propiedad o Atributo
- Estado interno
¿Qué es una Clase?
Una clase en la POO la podemos ver como el instructivo, plano o receta que define las propiedades y comportamiento de un objeto en particular, y mediante el concepto de instanciación las clases pueden crear objetos.
¿Qué es un objeto?
El objeto es la representación funcional del mundo real, o dicho de otra manera, es la instancia de una clase, por ejemplo, para hacer un pastel necesitamos la receta, seguimos los pasos y finalmente tenemos el pastel, en programación la clase seria la receta y el pastel sería el objeto.
¿Qué es un mensaje?
Un mensaje en la POO es simplemente la comunicación que esta dirigida a un objeto, este mensaje lo indica al objeto que debe ejecutar uno de sus métodos ya sea con ciertos parámetros asociados al evento que genero dicho mensaje o sin parámetros asociados.
¿Qué es un método?
Es una serie de pasos o algoritmo que se define en la clase y que podrá utilizar el objeto, se ejecuta cuando el objeto recibe un mensaje y desde un punto de vista menos abstracto es aquello que puede hacer el objeto, los métodos en el objeto pueden modificar las propiedades del objeto o generar eventos con nuevos mensajes dirigidos a otros objetos. Los métodos pueden ser de carácter publico o privado.
¿Qué es un evento?
Son acciones o sucesos que se presentan en un sistema, algunos de ellos pueden ser originados por los mismo usuarios que utilizan dicho sistema o mensajes generados desde otros objetos del entorno.
¿Qué es un atributo?
Al igual que los métodos, existen atributos o propiedades privadas y publicas, y son aquellos contenedores de un tipo de dato que se asocia a un objeto o clase, los atributos definen las características del objeto, por ejemplo, en un carro podríamos decir que los atributos son el color, número de puertas, cantidad de llantas, etc.
Hasta este momento cuentas con las bases teórica de la programación orientada a objetos, no obstante, podemos encontrar 3 conceptos importantes que también debes conocer y que son:
- El estado interno
- Los componentes de un objeto
- La identificación de un objeto
¿Qué es el estado interno?
Supongamos que un objeto cuenta con una variable que no puede ser accedida por otros objetos, esto quiere decir que su valor puede ser modificado únicamente desde el interior del objeto definiendo un estado interno en el objeto.
¿Qué es identidad?
Este concepto hace referencia a que en un objeto puede ser representado por medio de una tabla o entidad compuesta por sus atributos y funciones.
Gracias por tu calificación
(4)
Componentes del objeto
Seguramente ya te imaginaras cueles son pues ya hemos revisado los conceptos mas importantes, de todos modos vamos a enlistarlos:
- Atributos
- Identidad
- Relaciones
- Métodos
Excelente viajero web, has aprendido los conceptos fundamentales de este paradigma, ahora toca ver las características que posee la POO.
Características de la programación orientada a objetos POO
La siguientes características son aquellas que están aceptadas como porte de los fundamentes de la orientación a objetos y que verás en muchos libros de programación.
¿Qué es la abstracción?
La abstracción es un termino muy interesante y si me ayudas a compartir este post, haré un artículo dedicado a este tema, por el momento y manera de resumen, la abstracción es cuando analizamos y denotamos las características principales y/o esenciales de un objeto, por ejemplo, volvemos al nuestro carro, en un proceso de abstracción indicamos que las características esenciales de un auto son, que tiene llantas, puertas, volante y frenos, por otra parte, cuenta con un comportamiento que indica un método de encendido, apagado, reversa y activación de seguros.
Lo que deseo que comprendas es que en el proceso de abstracción debes seleccionar las principales características y propiedades del mundo real, con lo cual podrás crear un modelo basado en clases que describa lo mejor posible el mundo real o el problema que deseas atacar.
¿Qué es el encapsulamiento?
El termino encapsulamiento suele confundirse con otro principio llamado ocultación que veremos mas adelante, no obstante, lo que realmente nos quiere decir el encapsulamiento es, que podemos reunir todos los elementos que tienen el mismo nivel de abstracción, aumentando la cohesión de los componentes del sistema, esto quiere decir que podemos almacenar en una misma sección los elementos que constituyen una entidad, esto se logra aplicando el concepto de ocultación, es por eso que se confunde ambos términos, podemos encontrar tres niveles de encapsulamiento:
- Publico
- Protegido
- Privado
¿Qué es el principio de ocultación?
Lo podemos ver como la manera de ocultar la información principal o secreta de nuestro objeto, este proceso de aislamiento protege a las propiedades de un objeto contra su escritura y modificación por aquellos que no tienen derecho ni permiso a estas propiedades.
¿Qué es el polimorfismo?
Esto es cuando tenemos comportamientos diferentes en objetos que extienden de una misma clase, pero, que tienen métodos con el mismo nombre realizando diferentes comportamientos.
Cuando invocas dos objetos distintos que poseen métodos con el mismo nombre, cada método ejecutara su comportamiento programado, en tiempo de ejecución, podemos llamar a esta característica asignación tardía o asignación dinámica. En algunos lenguajes entendemos esto como la sobrecarga de un método.
¿Qué es Herencia?
La herencia nos indica que si una clase hija supongamos de nombre B, extiende de otra clase de nombre A, recibe o propiamente dicho, hereda todas los atributos y métodos de la clase A, por lo tanto, esta clase tendrá y podrá usar los mismos métodos y atributos públicos y privados que tiene A, no obstante, al ser una clase independiente podrá tener métodos y atributos que no tiene su clase padre A.
¿Qué es multi herencia?
Este es un concepto un poco complicado, y aun más, porque muchos lenguajes no tienen implementado este concepto que nos indica que, la multiherencia se da cuando dos clases padre A y B, heredan todos sus métodos y atributos a una clase hija C, por lo tanto, la clase C podrá usar todos las características de A y B más los métodos y atributos propios que tenga implementados C.
El lenguaje que cuenta con multiherencia implementada es C++, otros lenguajes como C# o JAVA, simulan este comportamiento a través de algo llamado Interfaces, las cuales agregan funcionalidad extra a la clase, pero sin ser herencia propiamente.
Como tip y quizá te lo pregunten en alguna entrevista de trabajo, la herencia se da entre clases y no entre objetos.
Conclusiones
Como puedes ver con la programación orientada a objetos podemos modelar el entorno del mundo real y crear programas poderoso de una manera relativamente sencilla, este Post no queda aquí pronto estaré subiendo ejemplos y vídeos desde mi canal de YouTube, por favor suscríbete al boletín y a mi canal para que te avise cuando los suba.
Gracias por tu calificación
(4)
🧐 Autoevaluación: POO
¿Qué es un POO?
¿Qué es la programación orientada a objetos?
¿Qué es polimorfismo en programación orientada a objetos?
Juan Carlos García
Desarrollador de software / SEO
Durante años he desarrollado plataformas dedicadas al rastreo satelital y varios sitios web que se encuentran en la primera página de Google, y hoy quiero compartir contigo lo que se en tecnologías como: Node JS, PHP, C# y Bases de datos.
Si quieres apoyarme sígueme en mis redes sociales y suscríbete a mi canal de YouTube.