v0.2.12
This commit is contained in:
78
chapters/008-classes-et-object.md
Normal file
78
chapters/008-classes-et-object.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# 8. Classes et `Object`
|
||||
|
||||
## 8.1 Héritage de base — V1 REQUIS — FIGÉ
|
||||
|
||||
Toutes les classes héritent implicitement de `Object`, sauf `Object` lui-même.
|
||||
|
||||
Les primitives, structs, enums, tuples et unions n'héritent pas artificiellement de `Object`.
|
||||
|
||||
## 8.2 Héritage de classes — V1 REQUIS — FIGÉ
|
||||
|
||||
Héritage de classe unique uniquement.
|
||||
|
||||
Une classe concrète doit être explicitement :
|
||||
|
||||
```text
|
||||
open
|
||||
ou
|
||||
final
|
||||
```
|
||||
|
||||
Une classe abstraite est :
|
||||
|
||||
```text
|
||||
abstract
|
||||
```
|
||||
|
||||
`abstract`, `open` et `final` sont mutuellement exclusifs au niveau classe.
|
||||
|
||||
## 8.3 Receivers — V1 REQUIS — FIGÉ
|
||||
|
||||
```text
|
||||
this instance courante
|
||||
super instance de la classe parente immédiate
|
||||
cls classe courante dans une clsmethod
|
||||
parent classe parente immédiate dans une clsmethod
|
||||
```
|
||||
|
||||
Pas de :
|
||||
|
||||
```text
|
||||
super::super
|
||||
parent::parent
|
||||
```
|
||||
|
||||
## 8.4 Accès membre — V1 REQUIS — FIGÉ
|
||||
|
||||
Les membres sont accédés explicitement avec `::` :
|
||||
|
||||
```text
|
||||
this::field
|
||||
token::kind()
|
||||
Type::member
|
||||
super::method()
|
||||
```
|
||||
|
||||
`.` qualifie les namespaces/modules/types ; `::` accède à un symbole contenu.
|
||||
|
||||
Ils relèvent de la grammaire et ne sont pas surchargeables.
|
||||
|
||||
## 8.5 Identité d'instance — V1 REQUIS — FIGÉ
|
||||
|
||||
`Object` fournit une opération intrinsèque non overridable :
|
||||
|
||||
```text
|
||||
Object::sameInstance(Object other) -> bool
|
||||
```
|
||||
|
||||
Elle teste l'identité d'instance, c'est-à-dire si deux références désignent exactement le même objet.
|
||||
|
||||
Elle n'est pas équivalente à `==`.
|
||||
|
||||
Exemple : deux objets différents peuvent être logiquement égaux mais ne pas être la même instance.
|
||||
|
||||
`Object` n'implémente pas automatiquement `OpEqual` ni `OpPartialEqual`.
|
||||
|
||||
Les classes ne reçoivent donc aucune égalité de valeur automatique.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user