La Programación Orientada a Objetos en primer lugar es un paradigma, una filosofía en la forma en que programamos. Es abstraer cualquier objeto o ente del mundo real, ejemplos: carro, persona, televisor, estudiante, cliente, etc, y plasmarlos en nuestro código.
La POO es una forma de pensar en como resolver cualquier problema o necesidad aplicando principios como abstracción, encapsulamiento, modularización, herencia, polimorfismo.
Definiciones:
- ¿Qué es una clase?
Una clase es un molde o plantilla a partir de la cual se puede crear objetos.
Ejemplo: La clase Carro.
- ¿Qué es un objeto?
Es una entidad del mundo real, que posee estados (atributos) y comportamientos (métodos). Se trata de una instancia de una clase.
Ejemplo: Un carro posee: color, marca, número de puertas ... puede acelerar, cambiar de velocidad, frenar, cambiar de dirección, etc.
- ¿Qué es la abstracción?
Es extraer las características esenciales de alguna cosa, ignorando los detalles innecesarios o que sean redundantes.
Ejemplo: Abstraer o modelar la clase Carro. (Que tiene y puede hacer un carro)
- ¿Qué es el encapsulamiento?
Es el proceso mediante el cual se envuelven los atributos y comportamientos de una abstracción.
Ejemplo: Poner los atributos y comportamientos de un carro en una clase, adicional se podría empaquetarla.
- ¿Qué es el ocultamiento de información?
Ocultar los detalles de implementación.
Para llevar este proceso acabo se utilizan los modificadores de acceso.
Ejemplo: Imaginemos que tenemos un carro pues como me pertenece, puedo saber cuanta gasolina hay en el tanque, pero yo no puedo saber cuanta gasolina hay en el tanque del carro de mi vecino a menos que se lo pregunte.
- Los objetos se comunican por mensajes
Quiere decir que los objetos se envían mensajes para conocer sus estados.
Ejemplo: Cuando dos personas se conocen. La una le pregunta a la otra ¿Como te llamas? con lo cual la otra responde con su nombre.
- ¿Qué es la modularización?
Es el proceso a través del cual se descompone un sistema en piezas o en partes más pequeñas, cada una de las cuáles es independiente (poco acopladas) y poseen un significado propio (cohesivas)
- ¿Qué es la herencia?
Es cuando una clase adquiere o hereda las características de una clase existente, con la capacidad de agregar características propias. Es análogo al mundo real. Ejemplo: Cuando un hijo hereda algún bien o cosa del padre y adicional puede tener las suyas propias.
- ¿Qué es la polimorfismo?
Es cuando un objeto se puede comportar de diferente forma según el contexto.
Ejemplo: Imaginemos que tenemos una clase llamada Figura con un método abstracto (sin implementar) llamado dibujaFigura() y varías clases que heredan o extienden de esta como: cuadrado, círculo y triángulo, con lo cual cada una de estas clases tendrá que implementar el método de la clase padre, pero con la diferencia de que la forma de dibujar será distinta para cada objeto. No es lo mismo dibujar un cuadrado que un círculo. Mediante el polimorfismo tenemos comportamientos (formas de hacer algo) distintos asociados a objetos distintos.
¿Por qué utilizar la POO?
Por que nos permite la reutilización de código, con lo cual ahorramos tiempo y esfuerzo. Hace que nuestro software sea más fácil de mantener, probar y depurar debido a que sus piezas se encuentran poco acopladas y son cohesivas es decir posee modularización. Aplicando un diseño orientado a objeto nuestro software es más robusto además es un paradigma que utilizan varios lenguajes de programación así como Industrias del software que hacen uso de él.