[cfinformatica-grup] Re: [cfinformatica-grup] Python i GS M03 UF1 Programació Estructurada : compartir i dubte

  • From: Joan Josep Ordinas Rosa <jordinas@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
  • To: cfinformatica-grup@xxxxxxxxxxxxx
  • Date: Fri, 1 Mar 2019 12:39:27 +0100

A aquesta matèria hi ha un RA "Utilitza correctament tipus de dades simples
i compostes". Altres anys jo ensenyava tipus de dades compost homogènies
(vectors, matrius, ...) i també heterogènies (structs a C). Com a exemple
d'heterogènia, per explicar-me una mica, crear variables d'un tipus de
dades Alumne, formades per nom (string), nota (real) i data de naixement,
on la data de naixement està formada alhora per dia, mes i any (enters).




record/struct són sistemes de baix nivell, simples estructures de dades,
per agrupar variables de forma contigua en memòria. Si realment vols
explicar això amb Python et cal __slots__:

https://stackoverflow.com/questions/472000/usage-of-slots




Però quan he volgut ensenyar a Python com podem treballar amb variables
compostes heterogènies i com crear nous tipus de dades. he vist diverses
solucions i no sé si el que finalment he escollit és el més correcte i
pedagògic.

Primer vaig veure els diccionaris, que és una solució molt senzilla, però
no permet crear nous tipus de dades, i no "escala" bé quan hem de crear
estructures compostes molt complexes. Per exemple:

  persona1 = {'nombre':'Calico', 'edad':25}

Segon vaig probar la versió nova dels NamedTuples, però és inmutable. Un
cop es dona un valor a un camp, ja no es pot modificar. Per exemple:

  class Persona(NamedTuple):
    nombre: str
    edad: int

Tercer vaig descobrir el nou decorador DataClass, que es molt bonic i
semblava perfecte pel que volia:

  @dataclass
  class Persona:
    nombre: float
    edad: int

Però vaig pensar que a llarg termini els seria molt més útil que els
ensenyes a declarar estructures utilitzant classes, tot i que era més
complexe que l'anterior solució amb DataClass:

  class Persona:

    def __init__(self, nombre, edad):
      self.nombre = nombre
      self.edad = edad

    def __str__(self):
      return 'Persona: ' + self.nombre + ' - ' + str(self.edad) + ' años'

Però com que no veuen funcions fins la UF2, finalment vaig decidir
quedar-me amb classes que només tinguessin el constructor, i a més sense
paràmetres, i esperar a la següent UF que toca explicar funcions per
introduir els mètodes. Per exemple, vaig acabar amb això, que és més
senzill:

  class Persona:
    def __init__(self):
      self.nombre = ''
      self.edad = 0

Algú més s'ha trobat amb aquesta disjuntiva? Quina opció heu escollit? Hi
ha més opcions?

Salutacions


    Àlex

Other related posts: