--- title: M06 Accés a dades. Interfaces amb Python 3. tags: DAM, M6 --- [Link en MarkDown](https://hackmd.io/@JdaXaviQ/S1eI0tEDs) # M06 Accés a dades. Interfaces amb Python 3. ![](https://i.imgur.com/7wAsWkl.png) ## Concepte d'interface. Dins del paradigma de **_programació orientada a objectes_**, les interfaces són elements molt semblants a les classes, però que tenen la particularitat de que **no poden definir atributs** i tots els seus **mètodes han de ser abstractes** (es defineix la seva signatura, però no inclouen la implementació). ```mermaid classDiagram class IAnimal{ <<interface>> + expressat() + avança() } class Gos class Gat IAnimal <|.. Gos : implements IAnimal <|.. Gat : implements ``` ## Interfaces a Python. Per a codificar interfaces a Python utilitzarem la biblioteca abc (Abstract Base Classes), que ens permet definir mitjançant decoradors mètodes abstractes. Exemple d'implementació d'una interface a Python: ```python #!/usr/bin/python3 # -*- coding: utf-8 -*- import abc """ IAnimal.py: Interface que defineix el comportament dels animals. """ __author__ = "Xavi Quesada (f.javier.quesada@iesjoandaustria.org)" class IAnimal(abc.ABC): @abc.abstractmethod def expressat(self): pass @abc.abstractmethod def avança(self): pass ``` ```python #!/usr/bin/python3 # -*- coding: utf-8 -*- import IAnimal """ Gos.py: Gos és un animal domèstic """ __author__ = "Xavi Quesada (f.javier.quesada@iesjoandaustria.org)" class Gos(IAnimal.IAnimal): def expressat(self): print("\tBup-bup!") def avança(self): print("\tVaig a tota velocitat amb l'ajut de les meves quatre potents potes.") class Gat(IAnimal.IAnimal): def expressat(self): print("\tMèu!") def avança(self): print("\tSaltirejant arribo a qualsevol part.") def main(): el_gos_negre = Gos() el_gat_renat = Gat() el_gos_negre.expressat() el_gos_negre.avança() el_gos_negre.expressat() el_gat_renat.expressat() el_gat_renat.avança() el_gat_renat.expressat() if __name__ == "__main__": main() ```