POO Exercicis

De Cacauet Wiki
Salta a la navegació Salta a la cerca

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


Sudoku 2.0

Exercici Sudoku 2.0 (amb objectes)


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.

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

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.