Diferència entre revisions de la pàgina «POO Exercicis»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
 
(Hi ha 6 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 +
== Exercici 1. Creació d'objectes. Llista de clients ==
 +
Realitza una llista de clients amb les seves dades (nom, cognom, dni, data naixement, etc.). L'aplicació ha de permetre entrar nous clients i mostrar les dades per la pantalla.
 +
 +
NOTA: Es podria realitzar amb diccionaris, però es tracta d'iniciar-nos als objectes. Crea una ''classe Client'' que contingui les dades per un sol client, i els mètodes d'entrada i impressió de dades. L'aplicació principal ha de controlar el menú.
 +
 +
<br>
 +
 +
== Sudoku 2.0 ==
 +
[[Python:_tipus_bàsics_de_dades#Sudoku_2.0|Exercici Sudoku 2.0 (amb objectes)]]
 +
 +
<br>
 +
 +
 +
== Joc conversacional ==
 +
Crearem un joc conversacional en mode text. Consisteix en què l'aplicació explica l'usuari on està, objectes que l'envolten, etc., i l'usuari escriu una accio per la consola, el que li pot portar a altres espais, agafr objectes i utilitzar-los per resoldre l'aventura.
 +
 +
* El joc tindrà diferents espais on el jugador pot anar passant (carrer, habitacions, parc, plaça, etc.).
 +
* Per moure's pels espais el jugador indicarà si avança cap al [N]ord, [S]ud, [E]st, [O]est.
 +
* Feu-vos un mapa amb els diferents espais. A partir del mapa, creeu els espais, assigneu-los els atributs necessaris i connecteu-los entre sí (punters a Nord/Sud/Est/Oest) perquè l'usuari pugui moure's a través d'ells.
 +
 +
[[Imatge:joc_conversacional_espai.png|dreta]]
 +
Pels espais heu d'utilitzar un objecte Espai com l'indicat en aquest diagrama:
 +
 +
Opcional:
 +
* Podeu afegir [http://www.retrojunkie.com/asciiart/asciiart.htm dibuixos "ASCII Art" com els d'aquesta web] (treballem en consola). Mireu-vos la web, hi ha de tot!
 +
* Cada espai tindrà objectes i personatges.
 +
* Els objectes poden agafar-se, deixar-se i ser utilitzats per l'usuari.
 +
* Quan l'usuari hagi resolt una sèrie d'accions es donarà el joc per acabat amb un missatge de felicitació.
 +
 +
Exemple:
 +
<pre>----------------------------------
 +
Estàs a l'habitacio
 +
----------------------------------
 +
 +
    .    !__________!    .    _______
 +
    /_\  |____  ____|  /_\  |__*__|
 +
  __|__  {____}{____}  __|__  |__*__|
 +
__|_*_|__%%%%%%%%%%%%__|_*_|__|__*__|__
 +
  |  | %%%%%%%%%%%%%% |  |  |/  \|
 +
        %%%%%%%%%%%%%%%%
 +
      %%%%%%%%%%%%%%%%%%
 +
      %%%%%%%%%%%%%%%%%%%%
 +
    /||||||||||||||||||||\
 +
    ||||||||||||||||||lc||
 +
 +
[Comentari]: Un dormitori amb llit i tauleta de nit.
 +
[Objectes]: mocador, bossa
 +
[Personatges]: cap
 +
 +
Possibles sortides: (s)ud  (o)est
 +
Possibles accions:  (m)ira objecte , (a)gafa objecte , (u)tilitza objecte
 +
 +
Què fas? mira mocador
 +
</pre>
 +
 +
<br>
 +
 
== Lliga de futbol 2.0 ==
 
== Lliga de futbol 2.0 ==
 
Ampliarem l'exercici de l'aplicació de la lliga de futbol realitzat en l'apartat de llistes i diccionaris. En aquest cas els partits els encapsularem en un objecte "Partit" que tindrà per interfície uns mètodes particulars. La manera d'implementar internament la puntuació i l'autor de gol es recomana fer-la amb una llista on s'apunta el nom del jugador, però és optatiu triar algun altre sistema sempre i quan es respecti la interfície proposada.
 
Ampliarem l'exercici de l'aplicació de la lliga de futbol realitzat en l'apartat de llistes i diccionaris. En aquest cas els partits els encapsularem en un objecte "Partit" que tindrà per interfície uns mètodes particulars. La manera d'implementar internament la puntuació i l'autor de gol es recomana fer-la amb una llista on s'apunta el nom del jugador, però és optatiu triar algun altre sistema sempre i quan es respecti la interfície proposada.
Línia 21: Línia 78:
  
 
El menú ha de permetre:
 
El menú ha de permetre:
* Crear nova lliga: carregar un arxiu de configuració ("equips.cfg") amb el nom dels equips.
+
# Crear nova lliga: carregar un arxiu de configuració ("equips.cfg") amb el nom dels equips.
* Entrar les dades d'un partit: t'ha de demanar triar equip local / visitant d'una llista i després entrar el número de gols de cada equip i qui els ha marcat.
+
# Entrar les dades d'un partit: t'ha de demanar triar equip local / visitant d'una llista i després entrar el número de gols de cada equip i qui els ha marcat.
*:De fet, no cal indicar el nº de gols, sinó que vagis entrant el nom dels jugadors que marquen. Quan entris una cadena buida (enter directament) es considerarà acabada l'entrada de dades d'aquell equip.
+
#:De fet, no cal indicar el nº de gols, sinó que vagis entrant el nom dels jugadors que marquen. Quan entris una cadena buida (enter directament) es considerarà acabada l'entrada de dades d'aquell equip.
* Esborrar les dades d'un partit (per si hem comès un error a l'entrar-ho).
+
# Esborrar les dades d'un partit (per si hem comès un error a l'entrar-ho).
** Ho farem esborrant l'objecte Partit (amb un "del"), i tornant a crear l'objecte.
+
#* Ho farem esborrant l'objecte Partit (amb un "del"), i tornant a crear l'objecte.
* Enregistrar les dades d'una lliga en un arxiu de text.
+
# Enregistrar les dades d'una lliga en un arxiu de text.
* Carregar les dades d'una lliga des d'un arxiu de text.
+
# Carregar les dades d'una lliga des d'un arxiu de text.
** Format del fitxer:<pre>nom_equip_local / nom_equip_visitant / jugador_local_gol_1 , jugador_local_gol_2, ... / jugador_visitant_gol_1 , jugador_visitant_gol_2, ...</pre>
+
#* Format del fitxer:<pre>nom_equip_local / nom_equip_visitant / jugador_local_gol_1 , jugador_local_gol_2, ... / jugador_visitant_gol_1 , jugador_visitant_gol_2, ...</pre>
* Calcular i mostrar la '''classificació dels equips'''.
+
# Mostrar els '''resultats dels partits'''.
* Calcular i mostrar el '''rànking de "pichichis"'''.
+
# Calcular i mostrar la '''classificació dels equips'''.
 +
# Calcular i mostrar el '''rànking de "pichichis"'''.
  
 
<br>
 
<br>

Revisió de 20:12, 28 oct 2013

Exercici 1. Creació d'objectes. Llista de clients[modifica]

Realitza una llista de clients amb les seves dades (nom, cognom, dni, data naixement, etc.). L'aplicació ha de permetre entrar nous clients i mostrar les dades per la pantalla.

NOTA: Es podria realitzar amb diccionaris, però es tracta d'iniciar-nos als objectes. Crea una classe Client que contingui les dades per un sol client, i els mètodes d'entrada i impressió de dades. L'aplicació principal ha de controlar el menú.


Sudoku 2.0[modifica]

Exercici Sudoku 2.0 (amb objectes)



Joc conversacional[modifica]

Crearem un joc conversacional en mode text. Consisteix en què l'aplicació explica l'usuari on està, objectes que l'envolten, etc., i l'usuari escriu una accio per la consola, el que li pot portar a altres espais, agafr objectes i utilitzar-los per resoldre l'aventura.

  • El joc tindrà diferents espais on el jugador pot anar passant (carrer, habitacions, parc, plaça, etc.).
  • Per moure's pels espais el jugador indicarà si avança cap al [N]ord, [S]ud, [E]st, [O]est.
  • Feu-vos un mapa amb els diferents espais. A partir del mapa, creeu els espais, assigneu-los els atributs necessaris i connecteu-los entre sí (punters a Nord/Sud/Est/Oest) perquè l'usuari pugui moure's a través d'ells.
Joc conversacional espai.png

Pels espais heu d'utilitzar un objecte Espai com l'indicat en aquest diagrama:

Opcional:

  • Podeu afegir dibuixos "ASCII Art" com els d'aquesta web (treballem en consola). Mireu-vos la web, hi ha de tot!
  • Cada espai tindrà objectes i personatges.
  • Els objectes poden agafar-se, deixar-se i ser utilitzats per l'usuari.
  • Quan l'usuari hagi resolt una sèrie d'accions es donarà el joc per acabat amb un missatge de felicitació.

Exemple:

----------------------------------
Estàs a l'habitacio
----------------------------------

     .    !__________!    .    _______
    /_\   |____  ____|   /_\   |__*__|
   __|__  {____}{____}  __|__  |__*__|
 __|_*_|__%%%%%%%%%%%%__|_*_|__|__*__|__
   |   | %%%%%%%%%%%%%% |   |  |/   \|
        %%%%%%%%%%%%%%%%
       %%%%%%%%%%%%%%%%%%
      %%%%%%%%%%%%%%%%%%%%
     /||||||||||||||||||||\ 
     ||||||||||||||||||lc|| 

[Comentari]: Un dormitori amb llit i tauleta de nit.
[Objectes]: mocador, bossa
[Personatges]: cap

Possibles sortides: (s)ud  (o)est 
Possibles accions:  (m)ira objecte , (a)gafa objecte , (u)tilitza objecte

Què fas? mira mocador


Lliga de futbol 2.0[modifica]

Ampliarem l'exercici de l'aplicació de la lliga de futbol realitzat en l'apartat de llistes i diccionaris. En aquest cas els partits els encapsularem en un objecte "Partit" que tindrà per interfície uns mètodes particulars. La manera d'implementar internament la puntuació i l'autor de gol es recomana fer-la amb una llista on s'apunta el nom del jugador, però és optatiu triar algun altre sistema sempre i quan es respecti la interfície proposada.

Lliga futbol partits.png

Requisits:

  • L'aplicació ha de permetre portar la puntuació d'una lliga de futbol.
  • Els equips s'han d'indicar en l'arxiu de configuració "equips.cfg".

Estructura de dades:

  • Les dades les emmagatzemarem en una matriu feta amb diccionaris, és a dir, un diccionari de diccionaris.
  • Cada partit s'emmagatzemarà en objectes Partit com el del model proposat. Cal respectar la interfície.
  • Cadascun dels equips tindrà un diccionari on emmagatzemarà el resultat dels partits (objecte Partit) que ha jugat a casa seva.
    • Exemple 1. Ens adreçarem al resultat d'un partit amb:
      gols_visit = resultats["local"]["visitant"].num_gols_visit()
    • Exemple 2. Podriem imprimir el resultat amb:
      print "Resultat del partit %s-%s: %d-%d" % (local,visitant,gols_local,gols_visit)
  • PISTES: Es recomana inicialitzar la matriu a l'inici de l'aplicació:
    • Carregar l'arxiu "equips.cfg" en una llista.
    • Inicialitzar el diccionari amb
      resultats = {}
    • Cada element serà l'equip local. Caldrà inicialitzar els seus partits amb un bucle iterant pels elements "equip"
      resultats[equip] = {}
    • Fer un bucle per crear el diccionari de diccionaris i inicilitzar cada element Partit:
      resultats["local"]["visitant"] = Partit()

El menú ha de permetre:

  1. Crear nova lliga: carregar un arxiu de configuració ("equips.cfg") amb el nom dels equips.
  2. Entrar les dades d'un partit: t'ha de demanar triar equip local / visitant d'una llista i després entrar el número de gols de cada equip i qui els ha marcat.
    De fet, no cal indicar el nº de gols, sinó que vagis entrant el nom dels jugadors que marquen. Quan entris una cadena buida (enter directament) es considerarà acabada l'entrada de dades d'aquell equip.
  3. Esborrar les dades d'un partit (per si hem comès un error a l'entrar-ho).
    • Ho farem esborrant l'objecte Partit (amb un "del"), i tornant a crear l'objecte.
  4. Enregistrar les dades d'una lliga en un arxiu de text.
  5. Carregar les dades d'una lliga des d'un arxiu de text.
    • Format del fitxer:
      nom_equip_local / nom_equip_visitant / jugador_local_gol_1 , jugador_local_gol_2, ... / jugador_visitant_gol_1 , jugador_visitant_gol_2, ...
  6. Mostrar els resultats dels partits.
  7. Calcular i mostrar la classificació dels equips.
  8. Calcular i mostrar el rànking de "pichichis".


Base de dades d'espectacles[modifica]

Tenim una companyia de representació que vol fer una web mostrant els espectacles que porten. Necessitem crear els següents objectes amb la jerarquia pertinent i els seus atributs entre parèntesi:

  • Espectacle (id, durada, preu)
    • Escenic (escenari_minim)
      • Teatre (protagonista, actors[], extres[])
      • Clown (principal, secundaris[])
      • Monoleg (monologuista)
    • Animacio
      • Infantil
      • Adults
    • Musical
      • TeatreMusical
      • Rock
      • Ball
    • Dansa
      • Ballet
      • HipHop

Dissenya unes classes amb aquesta jerarquia. La classe Espectacle ha d'implementar els següents mètodes que després cal reescriure en les classes derivades:

  • demana_dades(): demanarà les dades per la consola i les emmagatzemarà en l'objecte.
  • mostra_dades(): formata i mostra les dades pertinents a la classe.

En les classes heredades procura no demanar ni mostrar les dades pertanyents a les superclasses, sinó que només es demanen i mostren les de la pròpia classe. Per poder mostrar/demanar totes les dades utilitza el mètode sobrecarregat de les superclasses.

Finalment realitza un programa que gestioni una llista d'Espectacles per línia de comanda. El programa ha de permetre a l'usuari afegir, llistar i esborrar elements "fulla" (que no tenen fills, això vol dir que no poden ser ni Espectacle, ni Escenic, ni Animacio, ni Musical ni Dansa) en la llista.