Files
saselang-bible/chapters/013-interfaces.md
2026-09-13 10:20:16 +02:00

2.6 KiB

13. Interfaces

13.1 Nature — V1 REQUIS — FIGÉ

Saselang utilise des interfaces et ne prévoit pas un concept séparé de trait en V1.

Une interface :

  • peut hériter de plusieurs interfaces ;
  • ne possède pas d'état d'instance propre ;
  • ne possède pas de construct/destruct d'instance ;
  • peut fournir des méthodes par défaut ;
  • peut définir des constantes associées de contrat.

13.2 Méthodes de contrat et defaults — V1 REQUIS — FIGÉ

Sans corps : contrat abstrait implicite.

Avec corps : implémentation par défaut.

Pas besoin de abstract ou open sur une méthode d'interface.

13.3 Signature — V1 REQUIS — FIGÉ

La signature de surcharge d'une méthode contient uniquement :

nom
+ ordre des paramètres
+ type de chaque paramètre

Le type de retour ne fait pas partie de la signature.

13.4 Contrat — V1 REQUIS — FIGÉ EN PRINCIPE

Pour la compatibilité d'héritage, le contrat comprend au minimum :

type de retour
visibilité
fallibilité / Result
throws
qualification const et contraintes génériques pertinentes
modificateurs contractuels pertinents

faults reste visible dans la déclaration et dans la documentation, mais sa nature optionnelle/non exhaustive signifie qu'il n'impose pas la même compatibilité d'override que throws.

Les futurs pré/post-contrats formels, s'ils existent, devront également participer à cette notion.

13.5 Conflits d'héritage multiple — V1 REQUIS — FIGÉ

Lorsque deux chemins héritent de la même signature :

  1. si les contrats diffèrent -> erreur de compilation ;
  2. si les contrats sont compatibles et aucun default distinct n'existe -> fusion du contrat ;
  3. si un seul default distinct existe -> ce default est hérité ;
  4. si deux defaults distincts existent -> override explicite obligatoire ;
  5. si les deux chemins héritent exactement du même default depuis un ancêtre commun sans le redéfinir -> pas de faux conflit.

Il n'existe aucune priorité implicite « premier parent gagne » ou « dernier parent gagne ».

13.6 Visibilité des contrats — V1 REQUIS — FIGÉ

Les contrats d'interface peuvent être :

module
package
public

Pas de private ni protected pour un contrat exposé par interface.

13.7 Constantes associées — V1 REQUIS — À FINALISER

Direction retenue :

public interface Ring<T> {
    public const T Zero;
    public const T One;
}

Une interface pourra probablement fournir une valeur par défaut à une constante associée, mais syntaxe, résolution des conflits et règles de spécialisation doivent encore être figées.