v0.2.12
This commit is contained in:
87
chapters/013-interfaces.md
Normal file
87
chapters/013-interfaces.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# 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 :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
type de retour
|
||||
visibilité
|
||||
fallibilité / Result
|
||||
throws
|
||||
contraintes génériques pertinentes
|
||||
modificateurs contractuels pertinents
|
||||
```
|
||||
|
||||
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 :
|
||||
|
||||
```text
|
||||
module
|
||||
package
|
||||
public
|
||||
```
|
||||
|
||||
Pas de `private` ni `protected` pour un contrat exposé par interface.
|
||||
|
||||
## 13.7 Constantes associées — V1 REQUIS — À FINALISER
|
||||
|
||||
Direction retenue :
|
||||
|
||||
```text
|
||||
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.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user