Les classe Avio i derivades =========================== La classe Avio ^^^^^^^^^^^^^^ .. py:module:: avio La classe :py:class:`Avio`, especificada a continuació, està implementada al fitxer :download:`avio.py `. Representa avions amb un cert nombre de files i sis seients per fila (lletres ``'A'`` a ``'F'``). Cada seient està identificat pel seu número de fila (un enter entre 0 i el nombre de files totals de l'avió -1) i una lletra entre ``'A'`` i ``'F'``. .. py:class:: Avio(identificador, nf) .. rubric:: Atributs .. py:attribute:: id Identificador de l'avió (:py:class:`str`) Aquesta classe suporta les **operacions** següents: +--------------------------+-----------------------------------------------------------+ | Operació | Resultat | +==========================+===========================================================+ | ``a[ifil, icol]`` | Retorna el nom de la persona que ocupa el seient | | | de la fila *ifil* i columna *icol* de *a*, amb | | | :math:`0 \leq ifil \lt len(a)` i | | | :math:`'A' \leq icol \leq 'F'`. | | | Retorna ``'Lliure'`` si ningú ocupa el seient | +--------------------------+-----------------------------------------------------------+ | ``a[ifil, icol] = nom`` | Assigna *nom* al seient de la fila | | | *ifil* i columna *icol* de *a*, amb | | | :math:`0 \leq ifil \lt len(a)` i | | | :math:`'A'\leq icol \leq 'F'` | +--------------------------+-----------------------------------------------------------+ Aquesta classe suporta la funció :py:func:`len` que retorna el nombre de files de l'avió. Proveu d'utilitzar aquesta classe. Disposeu de doctests per a inspirar-vos a :download:`tests-avio.txt `. Mireu la implementació i observeu que la classe té un atribut privat per emmagatzemar els seients que és una llista de diccionaris. Vegeu com els mètodes :py:meth:`__setitem__` i :py:meth:`__getitem__` tenen un sol paràmetre per indicar la posició del seient, però aquest és una tupla formada per un :py:class:`int` i un :py:class:`str`. Classe AvioRes ^^^^^^^^^^^^^^ .. py:module:: aviores En el fitxer :py:mod:`aviores.py`, implementeu una nova classe, anomenada :py:class:`AvioRes` que hereta de la classe :py:class:`avio.Avio` i li afegeix un nou mètode. .. py:class:: AvioRes(identificador, nfil) Hereta de la classe :py:class:`avio.Avio` i té el mètode addicional següent: .. rubric:: Mètodes .. py:method:: seients_lliures() Retorna el nombre de seients lliures de l'avió Disposeu de tests a :download:`tests-aviores.txt `. Classe AvioCat ^^^^^^^^^^^^^^ .. py:module:: aviocat En el fitxer :py:mod:`aviocat.py`, implementeu la classe :py:class:`AvioCat` que hereta de la classe :py:class:`aviores.AvioRes` i que representa avions amb dues categories de seients: els de primera i els de segona. Els seients de primera sempre ocupen les primeres files de l'avió i els de segona, les files següents. La classe :py:class:`AvioCat` ha de tenir un nou atribut :py:attr:`nfilprim` que indica el nombre de files de primera categoria. Vegeu-ne l'especificació: .. py:class:: AvioCat(identificador, nfil, nfilprimera) Hereta de la classe :py:class:`aviores.AvioRes` i té un atribut i un mètode addicional i una nova implementació del mètode :py:meth:`seients_lliures`. .. rubric:: Atributs .. py:attribute:: nfilprim Nombre de files reservades per a primera categoria (:py:class:`int`). S'inicialitza amb el valor del paràmetre `nfilprimera`. .. rubric:: Mètodes .. py:method:: seients_categoria(cat) Retorna el nombre de seients de la categoria `cat` (el valor de `cat` és 1 per primera i 2 per segona). .. py:method:: seients_lliures() Sobreescriu el mètode corresponent de la classe base per retornar una tupla formada pel nombre de seients lliures de primera i segona categoria. Disposeu de tests a :download:`tests-aviocat.txt `. Classe AvioIter ^^^^^^^^^^^^^^^ .. py:module:: avioiter En el fitxer :py:mod:`avioiter.py`, implementeu la classe :py:class:`AvioIter`. .. py:class:: AvioIter(identificador, nfil) Hereta de la classe :py:class:`avio.Avio` i suporta la funció :py:func:`iter` que permet iterar sobre els noms de les persones que ocupen el seus seients, en ordre fila i columna. Disposeu de tests a :download:`tests-avioiter.txt `. Disposeu de solucions a :download:`aviores.py `, :download:`aviocat.py ` i :download:`avioiter.py `.