"¡Hola, Amigo! Hoy voy a abrir un nuevo e interesante mundo a tu vista. Estoy hablando de Programación Orientada a Objetos (POO) . Ya conoces las clases y los objetos. Hoy vas a para aprender más sobre ellos, mucho más".

Comenzaremos con los cuatro pilares de la programación orientada a objetos. Son abstracción, encapsulación, herencia y polimorfismo. (Solía ​​haber tres, pero la abstracción se agregó más tarde)

1) Abstracción.

Un buen ejemplo de abstracción en la vida real son las descripciones de puestos en una empresa. Un título de trabajo es una cosa, pero sus deberes son un asunto completamente diferente.

Imagina que estás creando el organigrama de tu futura empresa. Puede dividir los deberes de una secretaria, distribuyéndolos entre varios otros puestos. Puede dividir el trabajo del director ejecutivo en varios puestos separados: director financiero, director de tecnología, director de marketing, director de recursos humanos. O podría combinar los puestos de gerente de oficina y reclutador en uno.

Suponga que se le ocurren nombres para puestos en su empresa y luego "distribuye" las responsabilidades de estos puestos. Eso es abstracción : dividir algo grande y monolítico en varias partes pequeñas.

POO: principios básicos - 1

Desde la perspectiva de un programador, la abstracción es dividir correctamente un programa en objetos.

Un programa grande generalmente se puede representar como objetos que interactúan en cualquiera de una docena de formas diferentes. La abstracción le permite seleccionar las características principales de un objeto y omitir cualquier cosa menos importante.

La abstracción es como una estrategia militar. Si elige la estrategia incorrecta, ninguna táctica ingeniosa salvará el día.

2) Encapsulación.

La encapsulación pretende mejorar la interacción entre objetos simplificándolos.

POO: principios básicos - 2

La mejor manera de simplificar algo es ocultar cualquier cosa complicada de aquellos que no necesitan saberlo. Por ejemplo, si se sentara detrás de los controles de piloto de un avión Boeing, le llevaría mucho tiempo entender cómo funcionan:

POO: principios básicos - 3

En cambio, a los pasajeros del avión todo les parece más sencillo: compran un billete y abordan el avión, que luego despega y aterriza. Puedes volar fácilmente de un continente a otro, sabiendo solo cómo «comprar un billete» y «subir a un avión». No vemos nada de la complejidad relacionada con la preparación del avión para el vuelo, el despegue, el aterrizaje y las diversas situaciones de emergencia potenciales. Y no hemos mencionado la navegación por satélite, el piloto automático y los centros de control de tráfico aéreo. Esto simplifica nuestra vida.

En términos de programación, la encapsulación es «ocultar la implementación». Me gusta esa definición. Nuestra clase puede contener cientos de métodos e implementar un comportamiento muy complejo en diversas situaciones. Pero podemos ocultar todos sus métodos de miradas indiscretas (marcándolos como « privados »), dejando solo dos o tres métodos para la interacción con otras clases (marcándolos como « públicos »). Luego, todas las demás clases en nuestro programa solo verán y llamarán a estos pocos métodos en esta clase . Toda la complejidad de la clase se ocultará en el interior, al igual que la cabina se mantiene fuera de la vista de los felices pasajeros.

3) Herencia.

La herencia es un concepto en programación y en la vida real. En programación, la herencia es una relación especial entre dos clases. Pero la herencia en la vida real es mucho más interesante.

Si necesitamos crear algo en la vida real, tenemos dos opciones:

1) hacer lo que necesitamos desde cero y dedicar mucho tiempo y esfuerzo a hacerlo.

2) hacer lo que necesitamos usando cosas que ya existen.

La mejor estrategia es esta: tomamos una buena solución existente, la volvemos a trabajar y la modificamos para que satisfaga nuestras necesidades, y luego la usamos.

Considere la evolución humana. Si rastreamos su origen hasta el comienzo de la vida en el planeta, vemos que han pasado miles de millones de años. Pero si pensamos en los humanos a partir de los monos, entonces solo han pasado un par de millones de años. Crear algo desde cero lleva más tiempo. Mucho mas largo.

De manera similar, en programación podemos crear una clase basada en otra. La nueva clase se convierte en descendiente (heredero) de una clase existente. Esto es muy útil cuando ya tiene una clase que contiene el 80-90% de los datos y métodos necesarios. Simplemente declaramos una clase adecuada como padre de nuestra nueva clase. Todos los datos y métodos de la clase principal se convierten automáticamente en parte de la nueva clase. Conveniente, ¿verdad?

4) Polimorfismo.

El polimorfismo es un concepto de programación que describe la situación en la que se ocultan diferentes implementaciones detrás de la misma interfaz. Para encontrar un análogo en la vida real, podemos observar el proceso de conducir un automóvil.

Si una persona puede conducir un camión, también podría ponerse al volante de una ambulancia o un automóvil deportivo. Una persona puede conducir un automóvil independientemente del tipo de automóvil que sea, porque todos tienen la misma interfaz de control: volante, pedales y palanca de cambios. Los autos están organizados de manera diferente en el interior, pero todos comparten la misma interfaz de control.

Volviendo a la programación, el polimorfismo nos permite interactuar con objetos de diferentes clases (generalmente con un ancestro común) de la misma manera. La importancia de esto no se puede exagerar. Se vuelve más importante a medida que el programa crece.

OOP es principios. Leyes de programación. Cada uno de ellos nos restringe de alguna manera, pero a cambio brinda enormes ventajas a medida que los programas crecen. Los cuatro principios de la programación orientada a objetos son como las cuatro patas de una silla. Si quitas aunque sea uno de ellos, todo el sistema se vuelve inestable.