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
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
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.