Platzi
Platzi

Suscr铆bete a Expert y aprende de tecnolog铆a al mejor precio anual.

Antes: $249
$209
Currency
Antes: $249
Ahorras: $40
COMIENZA AHORA
Termina en: 9D : 13H : 24M : 43S

Programaci贸n Orientada a Objetos2/25

Lectura

Programaci贸n orientada a objetos en Python

Uno de los elementos m谩s importantes de los lenguajes de programaci贸n es la utilizaci贸n de clases para organizar programas en m贸dulos y abstracciones de datos.

Las clases se pueden utilizar de diversas maneras. Pero en este art铆culo hablaremos de c贸mo utilizarlas en el contexto de la programaci贸n orientada a objetos. La clave para entender la programaci贸n orientada a objetos es pensar en objetos como agrupaciones de datos y los m茅todos que operan en dichos datos.

Por ejemplo, podemos representar a una persona con propiedades como nombre, edad, g茅nero, etc. y los comportamientos de dicha persona como caminar, cantar, comer, etc. De la misma manera podemos representar unos aud铆fonos con propiedades como su marca, tama帽o, color, etc. y sus comportamientos como reproducir m煤sica, pausar y avanzar a la siguiente canci贸n.

Puesto de otra manera, la programaci贸n orientada a objetos nos permite modelar cosas reales y concretas del mundo y sus relaciones con otros objetos.

Las ideas detr谩s de la programaci贸n orientada a objetos tienen m谩s de 50 a帽os y han sido ampliamente aceptadas y practicadas en los 煤ltimos treinta. A mediados de la d茅cada de los setenta se comenzaron a escribir art铆culos acad茅micos explicando los beneficios de esta aproximaci贸n a la programaci贸n. Tambi茅n durante esos a帽os se comenzaron a escribir los primeros lenguajes de programaci贸n que incorporaban estas ideas (como Smalltalk y CLU). Pero no fue hasta la llegada de Java y C++ que la idea consigui贸 un n煤mero importante de seguidores.

Hasta ahora, en el curso previo de esta serie hemos utilizado programaci贸n orientada a objetos de manera impl铆cita. Cuando decimos 鈥淟os objetos son las principales cosas que un programa de Python manipula. Cada objeto tiene un tipo que define qu茅 cosas puede realizar un programa con dicho objeto,鈥 nos estamos refiriendo a las ideas principales de la programaci贸n orientada a objetos. Hemos utilizado los tipos lista y
diccionario, entre muchos otros, as铆 como los m茅todos asociados a dichos tipos.

As铆 como los creadores de un lenguaje de programaci贸n solo pueden dise帽ar una fracci贸n muy peque帽a de todas las funciones 煤tiles (como abs, float, type, etc.), tambi茅n pueden escribir una fracci贸n muy peque帽a de los tipos 煤tiles (int, str, dict, list, etc.). Ya sabemos los mecanismos que nos permiten crear funciones, ahora veremos los mecanismos que nos permiten crear nuevos tipos (o clases).

Clases en Python

Las estructuras primitivas con las que hemos trabajado hasta ahora nos permiten definir cosas sencillas, como el costo de algo, el nombre de un usuario, las veces que debe correr un bucle, etc. Sin embargo, existen ocasiones cuando necesitamos definir estructuras m谩s complejas, por ejemplo un hotel. Podr铆amos utilizar dos listas: una para definir los cuartos y una segunda para definir si el cuarto se encuentra ocupado o no.

cuartos_de_hotel = [101, 102, 103, 201, 202, 203]
cuarto_ocupado = [True, False, False, True, True, False]

Sin embargo, este tipo de organizaci贸n r谩pidamente se sale de control. 驴Qu茅 tal que quisi茅ramos a帽adir m谩s propiedades, c贸mo si el cuarto ya fue aseado o no? 驴Si el cuarto tiene cama doble o sencilla? Esto nos lleva a una falta fuerte de organizaci贸n y es justamente el punto que justifica la existencia de clases.

Las clases nos permiten crear nuevos tipos que contiene informaci贸n arbitraria sobre un objeto. En el caso del hotel, podr铆amos crear dos clases Hotel() y Cuarto() que nos permitiera dar seguimiento a las propiedades como n煤mero de cuartos, ocupaci贸n, aseo, tipo de habitaci贸n, etc.

Es importante resaltar que las clases solo proveen estructura. Son un molde con el cual podemos construir objetos espec铆ficos. La clase se帽ala las propiedades que los hoteles que modelemos tendr谩n, pero no es ning煤n hotel espec铆fico. Para eso necesitamos las instancias.

Instancias

Mientras que las clases proveen la estructura, las instancias son los objetos reales que creamos en nuestro programa: un hotel llamado PlatziHotel o Hilton. Otra forma de pensarlo es que las clases son como un formulario y una vez que se llena cada copia del formulario tenemos las instancias que pertenecen a dicha clase. Cada copia puede tener datos distintos, al igual que cada instancia es distinta de las dem谩s (aunque todas pertenecen a una misma clase).

Para definir una clase, simplemente utilizamos el keyword class. Por ejemplo:

class Hotel:
    pass

Una vez que tenemos una clase llamada Hotel podemos generar una instancia llamando al constructor de la clase.

hotel = Hotel()

Atributos de la instancia

Todas las clases crean objetos y todos los objetos tienen atributos. Utilizamos el m茅todo especial __init__ para definir el estado inicial de nuestra instancia. Recibe como primer par谩metro obligatorio self (que es simplemente una referencia a la instancia).

class Hotel:
    
    def __init__(self, numero_maximo_de_huespedes, lugares_de_estacionamiento):
        self.numero_maximo_de_huespedes = numero_maximo_de_huespedes
        self.lugares_de_estacionamiento = lugares_de_estacionamiento
        self.huespedes = 0


hotel = Hotel(numero_maximo_de_huespedes=50, lugares_de_estacionamiento=20)
print(hotel.lugares_de_estacionamiento) # 20

M茅todos de instancia

Mientras que los atributos de la instancia describen lo que representa el objeto, los m茅todos de instancia nos indican qu茅 podemos hacer con las instancias de dicha clase y normalmente operan en los mencionados atributos. Los m茅todos son equivalentes a funciones dentro de la definici贸n de la clase, pero todos reciben self como primer argumento.

class Hotel:

    ...

    def anadir_huespedes(self, cantidad_de_huespedes):
        self.huespedes += cantidad_de_huespedes

    def checkout(self, cantidad_de_huespedes):
        self.huespedes -= cantidad_de_huespedes

    def ocupacion_total(self):
        return self.huespedes


hotel = Hotel(50, 20)
hotel.anadir_huespedes(3)
hotel.checkout(1)
hotel.ocupacion_total() # 2

Ahora que ya sabemos qu茅 son las clases y c贸mo las podemos utilizar en nuestros programas, plat铆canos qu茅 clases te ser铆an 煤tiles para modelar en uno de tus programas.

Aportes 249

Preguntas 4

Ordenar por: