Introducció a les classes Bloc 1 de 4 Definicions ...

26
El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari. GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost Introducció a les classes Bloc 1 de 4 Definicions Especificació Informàtica curs 21/22 Prof. D. Tost

Transcript of Introducció a les classes Bloc 1 de 4 Definicions ...

Page 1: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Introducció a les classes

Bloc 1 de 4

Definicions

Especificació

Informàtica curs 21/22

Prof. D. Tost

Page 2: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Classes● Tots els objectes de python (variables, constants,

funcions) estan categoritzats en classes

● Una classe representa l’estructura i funcionalitat comuna a tots els objectes de la classe

● Un objecte d’una classe s’anomena instancia de la classe

Objectes concrets de la classe Cadira: instàncies.

Definició de la classe Cadira: com són, quines característiques i funcions.

Page 3: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Classes

● Classes «builtin»: list, tuple, dict, str, set

● De mòduls externs: datetime.date, pandas.Dataframe ... 

● Pròpies: Punt2D, Poligon, Personatge, Laberint, ...

l1 i l2 són instàncies de la classe list

Cal saber utilitzar classes i implementar-les.

Page 4: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Les funcions type i isinstance

● Per saber quina és la classe a la pertany un objecte utilitzem la funció type

● Per saber si un objecte és d’una classe utilitzem la funció isinstance.

● Això permet per exemple d’executar una instrucció o l’altre segons la classe de l’objecte.

Page 5: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Instancies i instanciació Un objecte d’una classe s’anomena «instància». Crear-ne una és «instanciar» l’objecte.La forma estàndard de crear una instància és:

Els paràmetres que cal passar quan es crea una instància estan descrits a l’especificació de la classe. Aprendrem a entendre l’especificació per saber instanciar objectes.

Exemple:>>> a = int()    a és una instància de la classe int>>> l = list()   l és una instància de la classe list>>> d = date(2020, 9, 28)  d és una instància de la classe date

import nom_modulnom_instància = nom_mòdul.nom_classe(paràmetres)

from nom_mòdul import nom_classenom_instància = nom_classe(paràmetres)

O bé

Page 6: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Atributs d’instàncies

Per saber quins atributs té una classe, caldrà llegir la seva especificació.

Les instàncies d’una classe tenen definits atributs que representen informació de les instàncies. Els atributs tenen un nom específic propi.

Per consultar un atribut d’una instància:

nom_instància.nom_atribut

Per modificar un atribut d’una instància:

nom_instància.nom_atribut = expressió

Exemple:

>>> d = date(2020, 9, 28)     d és una instància de la classe date>>> d.day  el valor de l’atribut day de d és 2228

Page 7: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Mètodes d’instància

Els mètodes d’instància són funcions definides sobre les instàncies d’una classe. Els mètodes «s’invoquen» a diferència de les funcions que es «criden»:

nom_instància.nom_mètode(paràmetres)

nom_funció(paràmetres)

Crida d’una funció

Invocació d’un mètode

Page 8: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Mètodes>>> from datetime import date>>> d = date(2014, 3, 24)>>> d.day23>>> d.month3>>> d.year2014>>> d.weekday()1>>> l = [1, 2, 3]>>> l.sort()      >>> sorted(l)

day, month i year són atributs de la instància

weekday() és un mètode de la classe dateS'ha invocat el mètode weekday sobre la instància d

sort és un mètode de les llistes

sorted és una funció que té com a paràmetre una llista

Page 9: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

● És el document que descriu les característiques d’una classe. A partir d’aquest document podrem crear i utilitzar instàncies de la classe

● Aquest document proporciona informació sobre:– El nom del mòdul en el que està definida la classe

– El nom de la classe– Com instanciar-la: quins paràmetres cal passar al mètode que crea

la instància

– Quin atributs públics té

– Quins mètodes públics té– Quines funcions i operacions suporta

Page 10: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

L’especificació de la classe és documentació i cal entendre-la per saber com crear i utilitzar objectes de la classe.

class nom_mòdul.nom_classe(paràmetres)

Descripció

Atributs:

Llista d’atributs

Mètodes

Llista de mètodes

Operacions i funcions que suporta

Llista d’operacions i mètodes

Paràmetres que caldrà especificar quan es crei una instància de la classe

Alguns paràmetres poden tenir un valor de defecte nom = valor

Mòdul on està implementada la classe

La classe disposa de mètodes que donen suport a aquestes operacions i funcions

Page 11: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

● Exemple: veiem l’especificació de la classe Vagó un dels exercicis de l’assignatura i intentem utilitzar-la

La línia class vago.Vago(is, nseu, npeu) indica el nom del mòdul (vago.py), el nom de la classe Vago i els paràmetres que cal passar en crear una instància

Page 12: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

● Exemple: veiem l’especificació de la classe Vagó un dels exercicis de l’assignatura i intentem utilitzar-la

Quin és el nom de l’atribut, nseu o nseients? Quina diferència?nseu és el nom del paràmetre formal a partir del qual es calcula el valor inicial de l’atribut nseients. Pot ser qualsevol nom. En canvi el nom de l’atribut és obligatòriament nseients.

Page 13: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

● Exemple: veiem l’especificació de la classe Vagó un dels exercicis de l’assignatura i intentem utilitzar-la

Observeu la diferència entre consultar un atribut (v.id) i invocar un mètode (v.capacitat()). Inclús si el mètode no té paràmetres cal posar () després del nom.

Page 14: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

● Exemple: veiem l’especificació de la classe Tren en el mateix exercici

Per instanciar un tren només cal passar-li el nom. Es crea un tren buit, sense vagons, amb capacitat 0

Page 15: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

● Exemple: veiem l’especificació de la classe Tren en el mateix exercici

El mètode capacitat sobre la classe Tren no és mateix que sobre la classe Vago.

Page 16: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

● Exemple: veiem l’especificació de la classe Tren en el mateix exercici

t[0] és el primer vagó del tren, una instància de la classe Vago.

Page 17: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Help

● En l’interpret de python feu help(nom classe) per veure’n l’especificació

Page 18: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Atributs d’instància● Algunes classes tenen atributs protegits, que no es poden modificar. Per

exemple:

● Totes les instàncies tenen els atributs d’instància definits a l’especificació de la classe (encara que cada instància amb un valor que li és propi). Tanmateix, a una instància se li pot afegir un atribut nou sempre que es desitgi. Les altres instancies no tindran aquest atribut.

Page 19: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Atributs públics i privats● Les instàncies poden tenir atributs públics (són els que apareixen a l’especificació) i

també atributs privats que només es poden consultar indirectament a través del mètodes públics i operacions definides sobre la classe.

Per exemple: us heu preguntat on es guardaven els vagons de la clase Tren?No tenim cap atribut de tipus llista o similar que puguem consultar. Per consultar vagons utilitzem la operació t[i] directament i, per afegir-ne, utilitzem el mètode afegir_vago. La classe té un atribut que emmagatzema els vagons, però és privat, no hi podem accedir directament.

Page 20: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Atributs de classe● A més dels atributs d’instància, una classe pot tenir atributs de classe. Són

atributs el valor del qual és comú a totes les instàncies.

● Per consultar

i també,

● Per modificar

nom_classe.nom_atribut

nom_instància.nom_atribut

nom_classe.nom_atribut = valor

Alerta que si modifiqueu el valor d’un atribut de classe a través d’una instància, l’atribut passa a ser propi de la instància.

Page 21: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Atributs de classe● A més dels atributs d’instància, una classe pot tenir atributs de classe. Són

atributs el valor del qual és comú a totes les instàncies. Sovint s’utilitzen per guardar valors constants de la classe. Per exemple la classe date del mòdul datetime:

Page 22: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Atributs de classe● A més dels atributs d’instància, una classe pot tenir atributs de classe. Són

atributs el valor del qual és comú a totes les instàncies. ● Alerta que si modifiqueu el valor d’un atribut de classe a través d’una instància,

l’atribut passa a ser propi de la instància.

Classe ex1.Moble(a, h, col) Atributs de classe prof = 60 la profunditat del moble Atributs d’instància amplada l’amplada del moble (int) alcada l’alçada del moble (int) color el color del moble (str)

Observeu com es consulta l’atribut de classe prof des de la classe i de les instàncies. Quan es modifica m1.prof, en realitat s’està creant un atribut propi de m1.

Page 23: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Mètodes de classe

● Les classes també poden tenir mètodes que s’invoquen a nivell de classe. S’utilitzen per exemple, per crear instàncies de formes diferents.

● Per exemple:

Page 24: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Operacions● Les classes poden suportar operacions aritmètiques si així ho

consta en l’especificació. Per exemple:

>>> from datetime import datetime>>> d1 = datetime(2017, 2, 20)>>> d2 = datetime(2014, 2, 21) >>> t = d2­d1>>> tdatetime.timedelta(1)>>> t.days1

t és una instància a la classe timedelta definida també al mòdul datetime. Analitzeu l’especificació de la classe i veureu que té l’atribut days

La classe datetime suporta l’operador resta

Page 25: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Especificació d’una classe

class  persona.Persona(nom_persona, naixement) 

Classe que representa una persona a partir del nom de la persona (string) i la data de naixement (instància a la classe datetime)

Attributs:

   nom: nom de la persona 

   edat: edat de la persona

>>> import datetime>>> naix = datetime.datetime(1996, 10, 20)

>>> import persona>>> p = persona.Persona('Eric', naix)  >>> p.edat21>>> p.nom'Eric'>>> p.naixementTraceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'Persona' object has no attribute 'naixement'>>> p.naixTraceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'Persona' object has no attribute 'naix'

Els atributs s’inicialitzen a partir dels paràmetres. Aquí, en crear la classe Persona es calcula l’atribut edat a partir de la data de naixement però la data en sí no és un atribut.

Page 26: Introducció a les classes Bloc 1 de 4 Definicions ...

El contingut està disponible sota la llicència Creative Commons Attribution Share Alike si no s'indica el contrari.

GETI- ETSEIB- Informàtica- Introducció a les Classes - Curs 21/22 Dani Tost

Resum

Instanciació:

     import nom_mòdul

     nom_instància = nom_mòdul.nom_classe(paràmetres)

 O 

    from nom_mòdul import nom_classe

    nom_instància = nom_classe(paràmetres)

Consulta d'un atribut

nom_instància.nom_atribut  també, si és de classe,  nom_classe.nom_atribut

Assignació d'un valor a un atribut

nom_instància.nom_atribut = valor  

    (si és de classe nom_classe.nom_atribut = valor)

Invocació d'un mètode

    nom_instància.nom_mètode()  també, si és de classe, nom_classe.nom_mètode()