# Core : types, classes et héritage

Source : https://docs.berkios.online/core/classes-et-types/ · Section : Core · Documentation officielle BERKIOS (https://docs.berkios.online)


## Définir un type de données

Un `type` regroupe des champs :

```text
module "Capteurs"

type LectureCapteur
  capteur: Texte
  temperature: Décimal
  valide: Bool

fonction principale() -> Entier
  soit lecture = LectureCapteur("T1", 21.4, true)
  afficher lecture.temperature
  retourner 0
```

## Les classes

Une classe ajoute des **méthodes** qui agissent sur ses champs. Dans une méthode, `self` désigne l'objet courant.

```text
module "Comptes"

class Compte
  titulaire: Text
  solde: Int

  fn deposer(montant: Int) -> Int
    self.solde = self.solde + montant
    retourner self.solde

  fn retirer(montant: Int) -> Int
    self.solde = self.solde - montant
    retourner self.solde

fn main() -> Int
  soit compte = Compte("Amina", 100)
  afficher compte.deposer(50)
  afficher compte.retirer(20)
  afficher compte.solde
  retourner 0
```

Résultat : `150`, `130`, `130`.

On crée un objet en appelant la classe avec la valeur de chaque champ, dans l'ordre : `Compte("Amina", 100)`.

## L'héritage

`extends` permet à une classe de reprendre une autre classe et de redéfinir ses méthodes :

```text
class Animal
  nom: Text

  fn parler() -> Text
    retourner "..."

class Chien extends Animal
  race: Text

  fn parler() -> Text
    retourner "Wouf !"
```

## Les interfaces

Une interface décrit ce qu'une classe **doit** savoir faire, sans dire comment :

```text
interface Rechargeable
  fn recharger(quantite: Int) -> Int

class Batterie implements Rechargeable
  niveau: Int

  fn recharger(quantite: Int) -> Int
    self.niveau = self.niveau + quantite
    retourner self.niveau
```

## Pour aller plus loin

Le dépôt contient des exemples exécutables dans `compiler/examples/core/` : classes, héritage, interfaces, génériques, modules et valeurs typées. Exécutez-les avec `berkios core <fichier>.bks`.
