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

## 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()
```