---
# System prepended metadata

title: M06 Accés a dades. Interfaces amb Python 3.
tags: [DAM, ' M6']

---

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


