---
# System prepended metadata

title: '-1. Curs SOC UF2.  Model de programació web i base de dades'
tags: [SOC, ' UF2']

---

---
title: -1. Curs SOC UF2.  Model de programació web i base de dades
tags: SOC, UF2
---

# -1. Curs SOC UF2. Model de programació web i base de dades
## POO. Classes i objectes.
Objectes i classes són dos conceptes clau en la programació orientada a objectes (POO).

Un objecte és una instància d'una classe, és a dir, una representació concreta d'un concepte abstracte. Per exemple, si tenim una classe "cotxe", un objecte d'aquesta classe podria ser un Volkswagen Golf vermell amb matrícula 1234 ABC. Aquest objecte tindria propietats (color, marca, matrícula, etc.) i mètodes (accelerar, frenar, etc.) que el defineixen.

Per altra banda, una classe és un conjunt de propietats i mètodes que defineixen un concepte abstracte. Així, la classe "cotxe" podria tenir propietats com "marca", "color" i "matrícula", i mètodes com "accelerar", "frenar" i "girar". Una vegada que hem definit una classe, podem crear múltiples objectes d'aquesta classe, cadascun amb les seves pròpies propietats i mètodes.

Per exemple, podríem crear un objecte de la classe "cotxe" anomenat "meu_cotxe" amb la marca "Seat", el color "blau" i la matrícula "5678 XYZ". Així, el codi per crear un objecte de la classe "cotxe" seria més o menys així:
```python=
class Cotxe():
    def __init__(self, marca, color, matricula):
        self.marca = marca
        self.color = color
        self.matricula = matricula
        
    def accelerar(self):
        # Codi per accelerar el cotxe
        
    def frenar(self):
        # Codi per frenar el cotxe
        
    def girar(self, direccio):
        # Codi per girar el cotxe en una direcció concreta
```

I cada cop que necessitem un __objecte__ cotxe, el creariem així:
```python=
meu_cotxe = Cotxe("Seat", "blau", "5678 XYZ")
```
## Herència
L'herència és un concepte important en la programació orientada a objectes (POO). Bàsicament, l'herència és la capacitat de crear noves classes a partir de classes existents, utilitzant les propietats i mètodes de la classe existent i afegint noves propietats i mètodes específics.

En POO, una classe que hereta d'una altra classe s'anomena "subclasse" o "classe derivada", mentre que la classe de la qual la subclasse hereta s'anomena "superclasse" o "classe mare".

Quan una subclasse hereta d'una superclasse, hereta totes les propietats i mètodes de la superclasse. Això significa que la subclasse pot utilitzar aquests mètodes i propietats sense haver de definir-los de nou. Si la subclasse vol afegir noves propietats o mètodes, pot fer-ho a través de la definició d'aquests nous elements en la subclasse.

Per exemple, suposem que tenim una classe "cotxe" amb propietats com "marca", "model" i "any" i mètodes com "accelerar" i "frenar". Podríem crear una subclasse anomenada "cotxe_amb_canvi_manual" que hereta totes les propietats i mètodes de la classe "cotxe", però que també té noves propietats i mètodes específics per a un cotxe amb canvi de marxes manual.

A continuació, es mostra un exemple senzill en Python que demostra com implementar l'herència:
```python=
#!/usr/bin/python3

# Definim una classe base "cotxe"
class Cotxe():
    def __init__(self, marca, model, any):
        self.marca = marca
        self.model = model
        self.any = any
        
    def accelerar(self):
        print("El cotxe està accelerant.")
    
    def frenar(self):
        print("El cotxe està frenant.")

    def __str__(self):
        return f"{self.marca=}, {self.model=}, {self.any=}"
        
# Definim una subclasse "cotxe_esportiu" que hereta de "cotxe"
class Cotxe_amb_canvi_manual(Cotxe):
    def __init__(self, marca, model, any, qty_marxes):
        super().__init__(marca, model, any)
        self.qty_marxes = qty_marxes
        
    def canviar_marxa(self):
        print("El cotxe està canviant de marxa.")

if __name__ == "__main__":
    un_cotxe = Cotxe("Chevrolet", "Camaro", 2020)
    un_cotxe_amb_canvi_manual = Cotxe_amb_canvi_manual("Ford", "Courier", 2017, 5)

    print(f"{str(un_cotxe)=}")
    print(f"{str(un_cotxe_amb_canvi_manual)=}")

```