Programación orientada a objetos POO

La programación orientada a objetos es un paradigma. Un paradigma es una idea de como ver y hacer las cosas. La POO es una forma de ver los problemas como un conjunto de objetos que interactúan entre sí para realizar las tareas que debe hacer el programa.

¿Por qué paradigmas de programación?

El problema más grande en programación es como ordenar un programa para que sea fácil de entender. Así el programa es fácil de corregir y extender.

La solución es dividir el problema en subproblemas más fáciles de manejar. Esto crea un nuevo problema: cómo interactúan las soluciones de los subproblemas para conseguir la solución final.

Ahora el problema se reduce a cómo dividir el problema de forma de reducir el conflicto entre las partes. El primer adelanto en este sentido fue el paradigma de programación estructurada.

Paradigma de programación estructurada

La idea de la programación estructurada es desaparecer el uso de saltos (Ej: instrucción GOTO) que producen un “código espagueti” difícil de entender usando:

  1. Subrutinas: dividir el programa en subprogramas más pequeños.

  2. Bloques: secuencia ordenada de Instrucciones.

  3. Selección: Instrucciones que cambian el curso del programa.

  4. Repetición: Instrucciones que permiten repetir hasta alcanzar una condición o haber recorrido una colección.

Lo más potente de este paradigma es la división del código en subprogramas. Esta encapsulación del código nos permite modificar un código sin afectar al código de otro subprograma.  

La parte más débil de este paradigma es que divide sólo el código, no divide los datos del programa.

Paradigma de programación orientada a objetos

Este paradigma divide el problema en objetos del problema a resolver. Si el problema es acerca de animales pueden existir objetos perros, gatos, etc. Si el problema es sobre figuras geométricas los objetos serán triángulos, cuadrados, etc.

Cada objeto encapsula los datos y el código relacionados con el objeto. En el caso del triángulo el tamaño de los lados del triángulo sería un dato del objeto y las instrucciones para calcular el área serían el código.

Cada objeto está especializado en algo, tiene la responsabilidad de manejar y proteger los datos del tema en que esta especializado y ofrecer a los demás objetos servicios relacionados con su especialidad.

Campos del objeto o variables de instancia

El estado de un objeto, o sea sus datos se guarda en variables conocidas como campos o variables de instancia del objeto. Existe una recomendación de que estos campos solo sean accedidos desde dentro del objeto.

Métodos del objeto

La capacidad de hacer cosas de un objeto la dan procedimientos llamados métodos asociados al objeto. Estos métodos tienen libre acceso a los campos del objeto. La POO recomienda que los campos solo sean accedidos de esta forma y no directamente desde otro objeto.

Encapsulamiento y ocultamiento de información

La idea de crear un objeto es que este oculte información y complejidad al resto. El resto usará los servicios ofrecidos por sus métodos sin saber cómo presta estos servicios.

Para acceder a los campos de un objeto desde fuera puede hacerse indirectamente usando un métodos del objeto. De esta forma a futuro puede modificarse los campos y el código del método de nuestro objeto sin afectar a los múltiples objetos que usan el dato a través del método.  

Supongamos que tenemos el objeto triángulo con un campo área y un método calcular_área. Los demás accederán al área usando el método. Pasado un tiempo se decide que el campo área no es necesario y se elimina. El método calcular_área puede calcular el área usando los lados del triángulo.

Si otros objetos se les hubiese permitido usar el campo área deberíamos buscarlos y corregirlos. Como los objetos usaron el método calcular_área la modificación no les afecta.

Clases, instancias, prototipos y herencia

La idea de la programación orientada a objetos es manejar familias de objetos de un mismo tipo (Por ejemplo objetos tipo perro, gato, etc.). Para crear objetos o instancias de cada familia existen dos métodos: Clases o Prototipos. Esto y como heredar comportamiento veremos en el próximo tutorial Clases, instancias, prototipos y herencia en POO.