Classe
Classe
Une classe est un modèle pour créer des objets. Les classes définissent des propriétés et des méthodes. Les propriétés stockent des valeurs, tandis que les méthodes définissent le comportement des objets créés à partir de la classe.
Mais alors, c’est quoi la différence avec une struct ?
Effectivement, tu vas le voir, les classes et les structs sont très similaires. À quelques détails près
→ Il n’y a pas d’initialiseur automatique d’instance avec les classes.
→ Une classe peut hériter d’une autre.
→ Les classes sont des types de référence, les structs des types de valeur.
On va décortiquer ces différences en détail dans le cours.
Syntaxe
class Car {
var color: String
var brand: String
var horse: Int
init(color: String, brand: String, horse: Int) {
self.color = color
self.brand = brand
self.horse = horse
}
}
Comme tu peux l’observer, on vient de créer une classe Car avec trois propriétés. À la différence des structures qui ont un initialisateur automatique, avec les classes, il va falloir initialiser manuellement. Pour ça, on utilise init(), une méthode spéciale qui aide à créer un nouvel objet, en lui donnant les valeurs initiales dont il a besoin pour bien fonctionner.
On découvre également le mot-clé self. Ce mot permet à un objet de parler de lui-même. Il est utilisé par un objet pour se référer à ses propres propriétés ou méthodes. Dans notre exemple, self.color = color signifie que la propriété color, qui fait référence à la propriété color de la classe, sera égale à la valeur du paramètre color de l’init.
Héritage
Super-classe
class Vehicule {
var speed: Int
init(speed: Int) {
self.speed = speed
}
func start() {
print("Le véhicule démarre à \(speed) km/h.")
}
func stop() {
print("Le véhicule s'arrête.")
}
}
Sous-classe
class Car: Vehicule {
var color: String
init(speed: Int, color: String) {
self.color = color
super.init(speed: speed)
}
}
L’héritage permet à une classe d’hériter des propriétés et méthodes d’une autre classe. La classe héritée est appelée « classe parente » ou « superclasse », et la classe héritante est appelée « classe dérivée » ou « sous-classe ». Dans la sous-classe, on utilise super.init() pour faire appel à l’initialiseur de la classe parente
class Car: Vehicule {
var color: String
init(speed: Int, color: String) {
self.color = color
super.init(speed: speed)
}
}
let myCar = Car(speed: 100, color: "Rouge")
myCar.start()
On peut appeler les méthodes et propriétés de la super-classe parente. Ici la méthode start().
Override
class Car: Vehicule {
var color: String
init(speed: Int, color: String) {
self.color = color
super.init(vitesse: vitesse)
}
override func start() {
print("La voiture \(color) démarre à \(vitesse) km/h.")
}
}
var fordMustang = Car(speed: 123, color: "Jaune")
print(fordMustang.start())
Lecture dans la console ->
Le véhicule Jaune démarre à 123 km/h.
Le mot-clé override permet à une méthode dans une sous-classe de fournir une version personnalisée d’une méthode qui est déjà définie dans sa super-classe.
Encapsulation
Il existe plusieurs modificateurs d’accès en Swift, mais nous allons nous concentrer sur les deux principaux à retenir pour le moment
→ public : Les membres sont accessibles depuis n’importe quel fichier source de tout module qui importe le module de définition.
→ private : Les membres sont accessibles uniquement au sein de la même déclaration.
Setters et Getters
Les setters et getters sont des méthodes utilisées pour contrôler l’accès et la modification des propriétés d’une classe ou d’une structure. Ils jouent un rôle essentiel dans l’encapsulation en permettant un contrôle sur la manière dont les données sont lues et modifiées.
class Bank {
private var money: Int = 0
func getMoney() -> Int {
return money
}
func setMoney(amount: Int) {
if amount >= 0 {
money = amount
} else {
print(“Le montant ne peut pas être négatif.“)
}
}
}
Classe VS Structure
Classe → Type de référence
Structure → Type de valeur
Struct → Type de valeur :
Les struct sont des types de valeur. Cela signifie que lorsqu’une structure est affectée à une nouvelle variable ou constante, ou passée à une fonction, une copie de la structure est créée. Chaque instance de la structure est indépendante des autres.
struct Person {
var name: String
}
var person1 = Person(name: "Steve")
var person2 = person1
person2.name = "Tim"
print(person1.name)
print(person2.name)
/* Lecture dans la console ->
Steve
Tim
*/
Classe → Type de référence
Les classes sont des types de référence. Lorsqu’une instance de classe est affectée à une nouvelle variable ou constante, ou passée à une fonction, une référence à la même instance est créée. Toutes les références pointent vers la même instance.
class Person {
var name: String
init(name: String) {
self.name = name
}
}
let person1 = Person(name: "Steve")
let person2 = person1
person2.name = "Tim"
print(person1.name)
print(person2.name)
/* Lecture dans la console ->
Tim
Tim
*/
Comment choisir entre une classe ou une structure
Pour choisir entre une structure et une classe, il est important de comprendre leurs différences fondamentales et d’évaluer tes besoins spécifiques. Opte pour une structure si tu souhaites que chaque instance soit une copie indépendante, si tu travailles principalement avec des données immuables, si les données sont relativement simples et de petite taille, et si tu n’as pas d’héritage.
En revanche, choisis une classe si tu as besoin de partager et modifier les mêmes données entre différentes parties de ton code, si tu as besoin d’héritage, si tu gères des états complexes ou des cycles de vie d’objets complexes, ou si tu as besoin de personnaliser la gestion de la mémoire. En te basant sur ces critères, tu peux déterminer si une classe ou une structure convient le mieux à tes besoins spécifiques en Swift.
Exercices Pratiques
Exo classe
Télécharger le playground
Accède aux consignes directement en téléchargeant le playground.
⚠️ Les consignes que tu trouveras dans le playground ne sont pas verrouillées. Fais attention à ne pas les effacer par inadvertance !
Objectif
Les classes en Swift sont l’un des piliers fondamentaux de la programmation orientée objet. Elles te permettent de modéliser des objets complexes avec des propriétés et des comportements. Comprendre les classes te donnera les outils nécessaires pour structurer ton code, organiser tes données, et réutiliser les fonctionnalités à travers ton application. Avec les classes, tu pourras gérer efficacement des relations entre objets, créer des hiérarchies, et rendre ton code plus évolutif et maintenable.
Quiz
Après un peu de pratique, il est temps de te tester avec un petit quiz pour vérifier si tout est clair pour toi. Prends ton temps, lis bien les questions, et bonne chance.
Note
Attention ! Les classes se nomment comme les structures : en PascalCase. Ça signifie que tu les nommeras toujours en commençant par une majuscule !
Exercices Pratiques
Exo classe
Télécharger le playground
Accède aux consignes directement en téléchargeant le playground.
⚠️ Les consignes que tu trouveras dans le playground ne sont pas verrouillées. Fais attention à ne pas les effacer par inadvertance !
Objectif
Les classes en Swift sont l’un des piliers fondamentaux de la programmation orientée objet. Elles te permettent de modéliser des objets complexes avec des propriétés et des comportements. Comprendre les classes te donnera les outils nécessaires pour structurer ton code, organiser tes données, et réutiliser les fonctionnalités à travers ton application. Avec les classes, tu pourras gérer efficacement des relations entre objets, créer des hiérarchies, et rendre ton code plus évolutif et maintenable.
Quiz
Après un peu de pratique, il est temps de te tester avec un petit quiz pour vérifier si tout est clair pour toi. Prends ton temps, lis bien les questions, et bonne chance.
Note
Attention ! Les classes se nomment comme les structures : en PascalCase. Ça signifie que tu les nommeras toujours en commençant par une majuscule !