2. Classes: Flota de vehicles autònoms (2 punts)

Avís

En aquest exercici, haureu d’implementar 3 classes. La segona i la tercera depenen de la primera, però la segona i la tercera són independents. La puntuació de cada apartat serà com a mínim de 0.5 punts i s’ajustarà durant la correcció per arribar a la puntuació total de l’exercici (2 punts sobre la nota d’examen).

2.1. Classe Autonom

La classe Autonom, que representa un vehicle autònom, està especificada a continuació. Implementeu-la en el mòdul autonoms (fitxer autonoms.py)

class autonoms.Autonom(idvehi, velmig)

Construeix una instància de la classe amb informació del seu identificador i la seva velocitat mitjana en terreny pla en km/h.

Atributs

id

L’identificador del vehicle autònom (str) inicialitzat amb el paràmetre idvehi.

vel

La velocitat mitjana del vehicle en km/h (float), inicialitzada amb el paràmetre velmig.

Mètodes

durada(dist)

Retorna la durada (datetime.timedelta) d’un trajecte de distància en km dist (float) feta pel vehicle a velocitat constant de valor igual a l’atribut vel i sense efectuar cap parada.

La classe també suporta la funció str() que retorna l’expressió: Vehicle id on id és l’identificador del vehicle.

Per exemple:

>>> b1 = Autonom('AS34', 18.0)
>>> b1.id, b1.vel
('AS34', 18.0)
>>> str(b1)
'Vehicle AS34'
>>> b1.durada(69.9)
datetime.timedelta(seconds=13980)
>>> b1.durada(245.2)
datetime.timedelta(seconds=49040)

Disposeu d’un joc de proves més complet al fitxer tests-autonoms.txt.

2.2. Classe Flota

La classe Flota, representa una flota de vehicles autònoms (instàncies de les classes Autonom). Està especificada a continuació. Implementeu-la en el mòdul vehicles (fitxer vehicles.py)

class vehicles.Flota(nom)

Construeix una instància de la classe Flota amb informació del seu nom i inicialment buida (sense cap vehicle autònom).

Atributs

nom

El nom de la flota (str).

Mètodes

afeg_vehicle(b)

Si no hi ha cap vehicle amb el identificador de b a la flota, l’afegeix al final. En cas contrari, modifica la velocitat del vehicle de la flota amb identificador b.id assignant-li la de b.

Aquesta classe suporta les operacions següents:

Operació

Resultat

flota[i]

Retorna el i -èssim vehícle de la flota 0<=i<len(flota)

len(flota)

Retorna el nombre de vehicles de flota.

Per exemple:

>>> m = Flota('Eltour')
>>> m.afeg_vehicle(Autonom('B05', 9.5))
>>> m.afeg_vehicle(Autonom('T73', 18.1))
>>> len(m)
2
>>> m[0].id, m[0].vel
('B05', 9.5)
>>> m.afeg_vehicle(Autonom('T56', 9.2))
>>> len(m)
3
>>> m[2].id, m[2].vel
('T56', 9.2)
>>> m.afeg_vehicle(Autonom('T56', 67.9))
>>> m[2].id, m[2].vel
('T56', 67.9)
>>> len(m)
3

Observeu que implementar aquesta classe, cal que definiu un atribut privat, per emmagatzemar els vehicles, per exemple una llista (list). Disposeu de més jocs de prova al fitxer tests-flota.txt.

2.3. Classe AutonomTop

La classe AutonomTop, es deriva per herència de la la classe Autonom i li afegeix dos atributs: tmax que representa el nombre màxim d’hores seguides que el vehicle pot circular sense aturar-se i trepos el nombre d’hores de repòs que ha de fer abans de tornar a circular després d’haver superat el màxim nombre d’hores. També sobreescriu el mètode durada(). Implementeu-la en el mòdul autonomstop (fitxer autonomstop.py)

class autonomstop.AutonomTop(idvehi, velmig, tmax, trepos)

Construeix una instància de la classe AutonomTop amb informació del seu identificador i la seva velocitat mitjana en terreny pla en km/h, el nombre màxim d’hores d’autonomia de la què disposa i el nombre d’hores de repòs necessàries.

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

tmax

El nombre màxim d’hores seguides que el vehicle autònom pot circular (float), inicialitzat amb el paràmetre tmax

trepos

El nombre d’hores de repòs que ha de fer el vehicle abans de poder tornar a circular després d’haver circulat tmax hores (float), inicialitzat amb el paràmetre trepos.

Mètodes

durada(dist)

Retorna la durada (datetime.timedelta) d’un trajecte de distància en km dist (float) feta pel vehicle circulant el màxim nombre d’hores seguides possible, a velocitat constant de valor igual a l’atribut vel i efectuant només les parades obligàtories de repòs.

Per exemple:

>>> b1 = AutonomTop('AS34', 20, 100, 2)
>>> b1.id, b1.vel, b1.tmax, b1.trepos
('AS34', 20, 100, 2)
>>> b1.durada(100)
datetime.timedelta(seconds=18000)
>>> b2 = AutonomTop('AS34', 20, 2, 2)
>>> b2.id, b2.vel, b2.tmax, b2.trepos
('AS34', 20, 2, 2)
>>> b2.durada(100)
datetime.timedelta(seconds=32400)
>>> b2.durada(2111)
datetime.timedelta(days=8, seconds=63180)

Disposeu d’un joc de proves més complet al fitxer tests-autonomstop.txt.