Programación Orientada a Objetos (POO)

Programación Orientada a Objetos (POO)

La Programación Orientada a Objetos (POO) es un paradigma o estilo de programación que nos ayuda a trabajar con clases y objetos con el fin de crear varios objetos de una sola clase y así reutilizar código.

¿Cuál es la diferencia entre una clase y un objeto?

Una clase es una plantilla donde asignamos las propiedades y métodos de los objetos que queremos crear. Por su parte, las propiedades son las características que se describen de un objeto. Por ejemplo, si queremos crear objetos de tipo animal, las propiedades serían como su nombre y edad. Los métodos son el comportamiento que le asignamos al objeto. Siguiendo el ejemplo anterior, que llamaremos desde ahora clase Animal, un método podría ser comer y caminar.

Dicho esto, una clase no es una entidad real. Para que la clase realice una acción o se ejecute lo que está dentro de ella necesitamos instanciarla y así crear objetos.

Así que un objeto es la entidad como tal, es algo real que ya podemos utilizar en nuestro programa.

Veamos un ejemplo:

Fuente: Google.

El fin de una clase Animal es crear varios objetos con la misma clase. Por ejemplo, en esta clase podríamos crear un objeto perro, gato, pato o gallina (entre otros), donde cada objeto la información es distinta, pero siempre utilizando los atributos y métodos de la clase.

Creando la clase Animal utilizando PHP


Una vez creada la clase necesitamos generar los objetos. Para ello, necesitamos instanciar la clase, es decir, llamar la clase y utilizar sus atributos y métodos para cada objeto.


El operador new permite crear una instancia de un tipo de objeto como la clase Animal. Con base en eso, tenemos 2 objetos que son de tipo Animal: los objetos perro y gato.

Método Constructor

El constructor es un método que permite inicializar un objeto, es decir, una vez que hacemos la instancia de una clase, podríamos mandar la información del objeto que queremos o enviar información estática de un objeto predeterminado.

En algunos lenguajes de programación, el constructor tiende ser un método que tenga el mismo nombre de la clase, pero en PHP el método lo vamos a declarar como __construct.

Siguiendo con el ejemplo de la clase Animal, vamos a tener un método constructor y vamos a pedir la información del objeto desde la instancia de la clase.

En el método constructor, asignamos dos parámetros para recibir la información del objeto y esos valores van hacer referencia a cada atributo. Cuando llamemos los atributos dentro de la clase, se utiliza this.

This hace referencia a los atributos y métodos de la clase.


Cuando hagamos la instancia de la clase, tenemos que inicializar el objeto enviando los 2 argumentos que nos pide el constructor: nombre y edad.

Pilares de la Programación Orientada a Objetos

En la Programación Orientada a Objetos, tenemos cuatro pilares fundamentales que son la base para crear nuestras clases y objetos: abstracción, encapsulamiento, herencia y polimorfismo.

Abstracción

Nos ayuda a pensar e identificar cuáles atributos y métodos vamos a necesitar para crear nuestra clase. Si bien los objetos pueden tener muchas características y comportamientos, en el proceso de la abstracción solo extraemos lo que requerimos para trabajar.

Supongamos que tenemos que hacer un programa con la información de estudiantes de una institución. Podríamos tomar en cuenta que los atributos de la clase Estudiante serían: nombre, teléfono, dirección, carnet, sección e institución, mientras que los métodos podrían ser ver su perfil, registrar y actualizar.

Encapsulamiento

Es la manera como podemos restringir el acceso a ciertos atributos y métodos de una clase para brindar una mayor seguridad. A fin de entender esto, debemos saber que existen modificadores de acceso que son public, private y protected.

Cuando colocamos una propiedad o método public, asignamos que podrá ser accesible tanto dentro y fuera de la clase, así como para clases hijas. Si utilizamos protected, asignamos que solo podrá ser accesible dentro de la clase y clases hijas. Y, por último, private nos indica que solo podrá ser accesible dentro de la misma clase.

Herencia

Indica que podemos tener una clase base (o padre) y clases hijas que dependan de ella. El fin de la herencia es reutilizar las propiedades y métodos de la clase padre y así evitar sobreescribir demasiado código en las clases. Normalmente, cuando usamos herencia se emplea la palabra reservada extends para asignar que cierta clase se extiende de otra.

Siguiendo con el ejemplo de la información de los estudiantes, además de tener una clase Estudiante, también tienes una clase Profesor. Ambas pueden compartir propiedades y métodos como nombre, dirección, teléfono, correo, etc. Entonces, para no repetir propiedades o métodos que comparten ciertas clases, mejor creamos una clase extra, la clase Persona,  de la que se extienden las otras y que facilita  reutilizar su código.

Polimorfismo

Hace referencia a cuando un objeto puede cambiar de forma, es decir, podemos sobreescribir un método que ya exista de una clase y cambiar su comportamiento para otro objeto. El polimorfismo se podrá efectuar si tenemos herencia ya que, con ésta, reutilizamos métodos que ya tienen un comportamiento definido por el padre. Sin embargo, si quieres cambiar ese comportamiento en tu clase hija, sobreescribe el método tal como se llama y modifica su comportamiento.

Uno de los ejemplos más comunes es el sonido de los animales. Supongamos que tenemos la clase Animal y dos clases hijas: Gato y Perro. Ambas heredan el método hacerSonido(). Ahora bien, ya que hablamos de un animal diferente, el sonido también es diferente. Por lo tanto, cada clase hija sobreescribe el método y cambia su comportamiento.

¿Qué son las clases abstractas?

Otro tema relevante en la Programación Orientada a Objetos son las clases abstractas, las cuales  solo sirven para ser heredadas. En otras palabras: con una clase abstracta no podemos crear un objeto o instanciarla, sino que solamente nos ayuda a heredarlas en otras clases y así reutilizar su código.

Para que se declare una clase como abstracta necesitamos asignar la palabra reservada abstract class y debe tener, como mínimo, un método abstracto.

Veamos un ejemplo con PHP:

En nuestro  ejemplo de los animales, cada animal tiene su propio sonido, ¿cierto? Entonces, podemos crear una clase padre Animal con su método de hacer sonido. Por ende, requerimos unas clases hijas como Perro y Gato.

Primero, creamos la clase abstracta con el método abstracto. Cuando asignamos un método abstracto, significa que la clase abstracta no va definir su comportamiento, sino las clases que hereden el método.


Luego, creamos las clases hijas. Lo interesante cuando trabajas con clases abstractas es que cuando se extienden de las subclases los métodos abstractos que asignes, serán obligatorios para ellas ya que las hijas tienen que definir el comportamiento del método.


En este ejemplo no solo vimos cómo utilizar una clase abstracta, sino que también aplicamos los pilares de herencia y polimorfismo. Con la herencia, utilizamos la palabra reservada extends para las clases Perro y Gato que pueden extenderse de la clase Animal y, en el caso del polimorfismo, aprendimos que en cada clase hija sobreescribimos el método hacerSonido() pero con un comportamiento diferente.

Espero que esta información sea de utilidad y recuerda seguir practicando. ¡Éxito!

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.