Classes: Restaurants

Implementeu les 3 classes especificades a continuació.

Classe Taula

La classe Taula representa una taula d’una restaurant.

class taules.Taula(capac)

Crea una instància de la classe que representa la capacitat i l’ocupació d’una taula de restaurant.

Atributs:

capacitat

Nombre màxim de persones que poden seure a la taula (int).

nlliures

Nombre de places lliures de la taula (int), inicialment totes les de la taula.

Mètodes:

ocupacio()

Retorna el nombre de places ocupades de la taula (int).

ocupar(npers)

Ocupa npers places de la taula sempre que la taula estigui buida i la seva capacitat ho permeti. En aquest cas, retorna True. En cas contrari, no ocupa cap plaça de la taula i retorna False.

alliberar()

Allibera la taula de manera que totes les seves places siguin lliures.

Vegeu un exemple d’ús de la classe:

>>> from taules import Taula
>>> t = Taula(4)
>>> t.capacitat
4
>>> t.nlliures
4
>>> t.ocupacio()
0
>>> t.ocupar(1)
True
>>> t.capacitat
4
>>> t.nlliures
3
>>> t.ocupacio()
1
>>> t.ocupar(2)
False
>>> t.nlliures
3
>>> t.alliberar()
>>> t.nlliures
4

Per implementar aquesta classe cal tenir en compte que els dos atributs capacitat i nlliures s’inicialitzen amb el valor del paràmetre de la instanciació capac. Observeu que el mètode ocupar() només modifica la ocupació de taules lliures, és a dir que no es poden afegir clients a taules ja parcialment ocupades. Tampoc es pot ocupar una taula per sobre de la seva capacitat. Implementeu la classe en el fitxer taules.py. Disposeu de jocs de prova de l’exercici al fitxer test-taules.txt.

Classe Restaurant

La classe Restaurant especificada a continuació representa un restaurant.

class restaurants.Restaurant(nom_resto, nombre_taules)

Crea una instància de la classe que representa un restaurant amb el nom donat nom_resto i format per nombre_taules instàncies de la classe Taula. Inicialment tant la capacitat de les taules com el seu nombre de places lliures és 0.

Atributs:

nom

El nom del restaurant (str).

Mètodes:

modif_taula(idt, novacap)

Modifica la capacitat de la taula d’índex idt del restaurant assignant-li el valor novacap. També allibera totes les places de la taula.

capacitat()

Retorna el nombre màxim de places que pot oferir el restaurant.

ocupacio()

Retorna el nombre de places ocupades del restaurant.

Aquesta classe ha de suportar les operacions següent:

Operació

Resultat

r[idt]

Retorna el nombre de places ocupades de la taula idt del restaurant r. \(0 \leq idt \lt len(r)\)

r[idt] = npers

Ocupa npers places de la taula idt del restaurant r, sempre que la capacitat de la taula ho permeti i que aquesta sigui lliure. En cas contrari no fa res. \(0 \leq idt \lt len(r)\)

La classe suporta la funció len() que retorna el nombre de taules del restaurant i la funció str() que retorna el string «Restaurant nom».

Per implementar aquesta classe cal tenir en compte que l’atribut nom s’inicialitza amb el valor del paràmetre de la instanciació nom_resto. La classe té, a més d’aquest atribut públic, un atribut privat que representa les taules. El restaurant té nombre_taules taules. En implementar el mètode __setitem__(), és obligatori utilitzar el mètode ocupar() de la classe Taula.

Vegeu un exemple d’ús de la classe:

>>> from restaurants import Restaurant
>>> r = Restaurant('Cal Joan', 5)
>>> str(r)
'Restaurant Cal Joan'
>>> len(r)
5
>>> r.capacitat()
0
>>> for i in range(5):
...    r.modif_taula(i, 4)
...
>>> r.capacitat()
20
>>> r.ocupacio()
0
>>> r[0] = 3
>>> r[1] = 5
>>> r[0] = 1
>>> r.ocupacio()
3

Implementeu aquesta classe en el fitxer restaurants.py. Disposeu de jocs de prova de l’exercici al fitxer test-restaurants.txt.

Classe RestaurantCovid

Les restriccions d’aforament imposades durant la pandèmia del COVID-19 han modificat el reglament de funcionament del restaurant. Ara, hi ha un aforament màxim i, encara que hi hagi llocs lliures, si es supera aquest aforament, no es poden acceptar nous clients.

La classe RestaurantCovid hereta de la classe Restaurant i li afegeix un nou atribut maxafor (l’aforament màxim).

class restaurants_covid.RestaurantCovid(nom_resto, ntaules, maxafor)

Crea una instància de la classe que representa un restaurant de nom nom_resto format per ntaules instàncies de la classe Taula amb una restricció d’aforament de maxafor. Com en la classe base, inicialment tant la capacitat com l’ocupació de les taules és 0.

Atributs: (a més dels de la classe base)

maxafor

Màxim aforament permès, inicialitzat amb el valor del paràmetre maxafor de la instanciació.

Per implementar aquesta classe cal tenir en compte que és necessari reescriure el mètode capacitat() de la classe base per tal que retorni el mínim entre la capacitat real del restaurant (nombre de places totals) i l’aforament permès. Per calcular la capacitat real del restaurant cal invocar el mètode capacitat() de la classe base.

Per exemple:

>>> from restaurants_covid import RestaurantCovid
>>> from restaurants  import Restaurant
>>> r = RestaurantCovid('Casa Loli', 3, 15)
>>> isinstance(r, RestaurantCovid) and isinstance(r, Restaurant)
True
>>> r.nom
'Casa Loli'
>>> r.maxafor
15
>>> for i in range(3):
...     r.modif_taula(i, 6)
...
>>> r[0] = 2
>>> r[1] = 8
>>> r[2] = 3
>>> r.capacitat()
15
>>> r.ocupacio()
5

Implementeu aquesta classe en el fitxer restaurants_covid.py. Disposeu de jocs de prova de l’exercici al fitxer test-restaurants_covid.txt.

Disposeu d’una solució dels 3 exercicis a taules.py, restaurants.py i restaurants_covid.py.