Orientación de objetos Python

Orientación de objetos

Orientación de Objetos

Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación en el que los conceptos del mundo real relevantes para nuestro problema se modelan a través de clases y objetos, siendo estos una serie de interacciones entre estos objetos (clases y objetos).

Clases y objetos

Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas. El estado se define a través de variables llamadas atributos, la funcionalidad se modela a través de funciones a las que se les conoce con el nombre de métodos del objeto.

Un ejemplo de objeto podría ser un coche, en el que tendríamos atributos como la marca, el número de puertas o el tipo de carburantes y métodos como el arranque y freno.

La clase es una plantilla genérica a partir de la cual tiene los objetos; plantilla que es la que define qué atributos y métodos tendrán los objetos de esa clase.

Las clases se definen mediante la palabra clave “class” seguida del nombre de la clase, dos puntos (:) y a continuación, indentado, el cuerpo de la clase. Como en el caso de las funciones, si la primera línea del cuerpo se trata de una cadena de texto, esta será la cadena de documentación de la clase o “docstring”.

La palabra “__init__” hace que se ejecute la línea de código justo después de crear un nuevo objeto a partir de la clase, proceso que se conoce con el nombre de instanciación, funciona para realizar cualquier proceso de inicialización que sea necesaria (pasos).

La palabra “self” funciona para referirse al objeto actual que está a su lado, es un mecanismo necesario para acceder a los atributos y métodos del objeto referenciado. Para ejecutar las clases creadas se realiza de la siguiente manera:

Herencia

Los tres conceptos básicos en la orientación a objetos es: encapsulamiento, herencia múltiple y el polimorfismo.

En un lenguaje orientado a objetos cuando hacemos que una clase (subclase) herede de otra clase (superclase) estamos haciendo que la subclase contenga todos los atributos y métodos que tenía la superclase, este proceso también es conocido como “extender una clase”.

Para indicar que una clase hereda de otra se coloca el nombre de la clase de la que se hereda entre paréntesis después del nombre de la clase:

Herencia múltiple

En Python, a diferencia de otros lenguajes como Java o C#, se permite la herencia múltiple, una clase puede heredar de varias clases a la vez. Una clase puede heredar de otra con diferentes métodos y atributos. Para esto basta con escribir la siguiente línea de código:

Polimorfismo

La palabra polimorfismo, del griego poly morphos (varias formas), se refiere a la habilidad de objetos de distintas clases de responder al mismo mensaje. Esto se puede conseguir a través de la herencia: un objeto de una clase derivada es al mismo tiempo un objeto de la clase padre, de forma que allí donde se requiere un objeto de la clase padre también se puede utilizar uno de la clase hija.

Encapsulación

La encapsulación se refiere a impedir el acceso a determinados métodos y atributos de los objetos estableciendo así qué puede utilizarse desde fuera de la clase. Esto se consigue en otros lenguajes de programación como Java utilizando modificadores de acceso que definen si cualquiera puede acceder a esa función o variable (public) o si está restringido el acceso a la propia clase (private). En Python no existen los modificadores de acceso, y lo que se suele hacer es que el acceso a una variable o función viene determinado por su nombre: si el nombre comienza con dos guiones bajos (y no termina también con dos guiones bajos) se trata de una variable o función privada, en caso contrario es pública.