Passer au contenu

Création de classes

AP Informatique A · Sujet 3

Entrainer
Leçon vidéo pour ce sujet Ouvrir la page vidéo
7:26

Création de classes

Voici un étudiant, stocké sous forme de trois variables indépendantes : un nom, une année et une note. C'est correct. Ajoutez maintenant mille étudiants. Vous aurez besoin de trois mille variables…

Narration en anglais · Sous-titres anglais + 中文 incrustés

3.1

Abstraction et Conception de Programme

Programme

Objectif d'apprentissage 3.1.A : Représenter la conception d'un programme en utilisant un langage naturel ou en créant des diagrammes indiquant les classes du programme et les abstractions de données et procédurales trouvées dans chaque classe en incluant tous les attributs et comportements.

  • 3.1.A.1 L'abstraction est le processus de réduction de la complexité en se concentrant sur l'idée principale. En masquant les détails irrelevants pour la question en cours et en regroupant des détails connexes et utiles, l'abstraction réduit la complexité et permet de se concentrer sur l'idée.
  • 3.1.A.2 L'abstraction de données fournit une séparation entre les propriétés abstraites d'un type de données et les détails concrets de sa représentation. L'abstraction de données gère la complexité en donnant un nom aux données sans faire référence aux détails spécifiques de la représentation. Les données peuvent prendre la forme d'une variable unique ou d'une collection de données, comme dans une classe ou un ensemble de données.
  • 3.1.A.3 Un attribut est un type d'abstraction de données défini dans une classe hors de toute méthode ou constructeur. Une variable d'instance est un attribut dont la valeur est unique pour chaque instance de la classe. Une variable de classe est un attribut partagé par toutes les instances de la classe.
  • 3.1.A.4 L'abstraction procédurale fournit un nom à un processus et permet à une méthode d'être utilisée en ne sachant que ce qu'elle fait, pas comment elle le fait. Grâce à la décomposition de méthodes, un programmeur décompose les grands comportements de la classe en petits comportements en créant des méthodes pour représenter chaque petit comportement individuel. Une abstraction procédurale peut extraire des caractéristiques partagées pour généraliser la fonctionnalité au lieu de dupliquer du code. Cela permet la réutilisation du code, ce qui aide à gérer la complexité.
  • 3.1.A.5 L'utilisation de paramètres permet de généraliser les procédures, rendant les procédures réutilisables avec une gamme de valeurs d'entrée ou d'arguments.
  • 3.1.A.6 L'utilisation de l'abstraction procédurale dans un programme permet aux programmateurs de modifier l'interne d'une méthode (pour la rendre plus rapide, plus efficace, utiliser moins de stockage, etc.) sans avoir besoin d'avertir les utilisateurs de la méthode du changement, tant que la signature de la méthode et ce que fait la méthode sont préservés.
  • 3.1.A.7 Avant d'implémenter une classe, il est utile de prendre le temps de concevoir chaque classe, y compris ses attributs et comportements. Cette conception peut être représentée à l'aide d'un langage naturel ou de diagrammes.

Source : Description du cours et de l'examen AP College Board

Un puzzle en cours : les classes et méthodes sont des pièces modulaires d'une conception de programme plus large
Un puzzle en cours : les classes et méthodes sont des pièces modulaires d'une conception de programme plus large

Abstraction 抽象 signifie dissimuler des détails derrière une interface simple – vous utilisez un String sans savoir comment il stocke les caractères. Une bonne conception divise un problème en classes, chacune responsable d'une idée. Ce sujet porte sur l'écriture de vos propres classes.

Décomposer un programme en modules et sous-modules
Décomposer un programme en modules et sous-modules
Vocabulaire Entrainer
Anglais Chinois Pinyin
Abstraction/əbˈstrækʃn/ 抽象 chōu xiàng
3.2

L'Impact de la Conception de Programme

Programme

Objectif d'apprentissage 3.2.A : Expliquer les implications sociales et éthiques des systèmes informatiques.

  • 3.2.A.1 La fiabilité du système désigne la capacité du programme à effectuer ses tâches comme prévu dans des conditions spécifiées sans défaillance. Les programmateurs doivent s'efforcer de maximiser la fiabilité du système en testant le programme avec une variété de conditions.
  • 3.2.A.2 La création de programmes a des impacts sur la société, l'économie et la culture. Ces impacts peuvent être à la fois bénéfiques et préjudiciables. Les programmes conçus pour répondre à un besoin ou résoudre un problème peuvent avoir des effets néfastes involontaires au-delà de leur usage prévu.
  • 3.2.A.3 Des questions juridiques et des préoccupations relatives à la propriété intellectuelle surgissent lors de la création de programmes. Les programmeurs réutilisent souvent du code écrit par d'autres et publié en open source et gratuit. L'intégration de code qui n'est pas publié en open source exige que le programmeur obtienne une autorisation et achète souvent le code avant de l'intégrer à son programme.

Source : Description du cours et de l'examen AP College Board

Les choix de conception affectent si le code est correct, lisible et réutilisable. Encapsulation 封装 – garder les données privées et les exposer uniquement via des méthodes – protège l'état d'un objet contre les mauvais usages et permet de changer l'intérieur sans casser les utilisateurs de la classe. Un nommage soigné, des méthodes à usage unique et les tests réduisent les bugs.

La conception comporte aussi une responsabilité au-delà du code. Fiabilité du système 系统可靠性 - un programme effectuant ses tâches comme prévu, sans défaillance - est quelque chose que les programmeurs devraient maximiser par une conception et des tests minutieux. Les programmes ont des impacts réels sur la société, l'économie et la culture qui peuvent être à la fois bénéfiques et nocifs. Et la création de programmes soulève des questions légales et de propriété intellectuelle 知识产权 : les programmeurs réutilisent souvent du code publié comme code open source 开源 et gratuit à utiliser, mais doivent respecter sa licence et donner crédit plutôt que copier le travail d'autrui comme le leur.

Vocabulaire Entrainer
Anglais Chinois Pinyin
Encapsulation/ɪnˌkæpsjʊˈleɪʃn/ 封装 fēng zhuāng
System reliability/ˈsɪstəm rɪˌlaɪəˈbɪlɪti/ 系统可靠性 xì tǒng kě kào xìng
legal and intellectual-property/ˈliːɡl ænd ˌɪntəˈlektʃuːəl ˈprɒpəti/ 知识产权 zhī shí chǎn quán
open source/ˈəʊpən sɔːs/ 开源 kāi yuán
instance variables/ˈɪnstəns ˈveərɪəblz/ 实例变量 shí lì biàn liàng
3.3

L'Anatomie d'une Classe

Programme

Objectif d'apprentissage 3.3.A : Écrire du code pour définir les contraintes d'accès et de visibilité des classes, des données, des constructeurs et des méthodes.

  • 3.3.A.1 L'encapsulation des données est une technique selon laquelle les détails d'implémentation d'une classe sont cachés aux classes externes. Les mots-clés public et private affectent l'accès des classes, des données, des constructeurs et des méthodes. Le mot-clé private restreint l'accès à la classe déclarante, tandis que le mot-clé public permet l'accès depuis des classes extérieures à la classe déclarante.
  • 3.3.A.2 Dans ce cours, les classes sont toujours désignées public et déclarées avec le mot-clé class.
  • 3.3.A.3 Dans ce cours, les constructeurs sont toujours désignés public.
  • 3.3.A.4 Les variables d'instance appartiennent à l'objet, et chaque objet possède sa propre copie de la variable.
  • 3.3.A.5 L'accès aux attributs doit être maintenu interne à la classe afin de réaliser l'encapsulation. Il s'agit donc d'une bonne pratique de programmation de désigner les variables d'instance pour ces attributs comme private sauf si la spécification de la classe stipule le contraire.
  • 3.3.A.6 L'accès aux comportements peut être interne ou externe à la classe. Les méthodes désignées comme public peuvent être accédées internement ou externement à une classe, tandis que les méthodes désignées comme private ne peuvent être accédées qu'internement à la classe.

Source : Description du cours et de l'examen AP College Board

Une classe a trois parties : variables d'instance 实例变量 (champs – les données de l'objet), constructeurs (construisent des objets) et méthodes (comportement). Les champs sont généralement private ; les méthodes sont généralement public :

Diagramme de classe : attributs privés et méthodes publiques
Diagramme de classe : attributs privés et méthodes publiques
public class Student {
    private String name;      // instance variable
    private int score;

    public Student(String n, int s) {   // constructor
        name = n;
        score = s;
    }
    public int getScore() { return score; }   // accessor
}
Un plan : une classe est un modèle qui définit comment les objets de ce type sont construits
Un plan : une classe est un modèle qui définit comment les objets de ce type sont construits
Explorer

Voir les champs d'un objet comme des boîtes

Une classe regroupe des données liées (ses champs) et des méthodes. Chaque objet obtient son propre ensemble de boîtes de champs ; assigner à l'un ne change que cet objet.

Vocabulaire Entrainer
Anglais Chinois Pinyin
constructor/kənˈstrʌktə/ 构造函数 gòu zào hán shù
overloading/ˌəʊvəˈləʊdɪŋ/ 重载 zhòng zài
3.4

Constructeurs

Programme

Objectif d'apprentissage 3.4.A : Écrire du code pour déclarer des variables d'instance pour les attributs à initialiser dans le corps des constructeurs d'une classe.

  • 3.4.A.1 L'état d'un objet fait référence à ses attributs et à leurs valeurs à un moment donné et est défini par les variables d'instance appartenant à l'objet. Cela définit une relation « posséder » (has-a) entre l'objet et ses variables d'instance.
  • 3.4.A.2 Un constructeur sert à définir l'état initial d'un objet, ce qui devrait inclure des valeurs initiales pour toutes les variables d'instance. Lorsqu'un constructeur est appelé, de la mémoire est allouée pour l'objet et la référence d'objet associée est retournée. Les paramètres du constructeur, s'ils sont spécifiés, fournissent des données pour initialiser les variables d'instance.
  • 3.4.A.3 Lorsqu'un objet mutable est un paramètre de constructeur, la variable d'instance doit être initialisée avec une copie de l'objet référencé. De cette manière, la variable d'instance ne conserve pas une référence à l'objet original, et les méthodes sont empêchées de modifier l'état de l'objet original.
  • 3.4.A.4 Lorsqu'aucun constructeur n'est écrit, Java fournit un constructeur sans paramètre, et les variables d'instance sont définies sur des valeurs par défaut selon le type de donnée de l'attribut. Ce constructeur est appelé le constructeur par défaut.
  • 3.4.A.5 La valeur par défaut pour un attribut de type int est 0. La valeur par défaut d'un attribut de type double est 0.0. La valeur par défaut d'un attribut de type boolean est false. La valeur par défaut d'un type de référence est null.

Source : Description du cours et de l'examen AP College Board

Un constructeur 构造函数 a le même nom que la classe et aucun type de retour. Il s'exécute lorsque vous écrivez new, et sa tâche est d'initialiser les champs. Une classe peut avoir plusieurs constructeurs avec des listes de paramètres différentes (surcharge 重载) ; un constructeur sans argument définit des valeurs par défaut.

3.5

Méthodes : Comment les Écrire

Programme

Objectif d'apprentissage 3.5.A : Écrire du code pour définir les comportements d'un objet via des méthodes écrites dans une classe en utilisant des valeurs primitives et déterminer le résultat de l'appel de ces méthodes.

  • 3.5.A.1 Une méthode void ne retourne pas de valeur. Son en-tête contient le mot-clé void avant le nom de la méthode.
  • 3.5.A.2 Une méthode non-void (non vide) retourne une seule valeur. Son en-tête inclut le type de retour à la place du mot-clé void.
  • 3.5.A.3 Dans les méthodes non-void, une expression de retour compatible avec le type de retour est évaluée, et la valeur est retournée. C'est ce qu'on appelle le retour par valeur.
  • 3.5.A.4 Le mot-clé return est utilisé pour retourner le flux de contrôle au point où la méthode ou le constructeur a été appelé. Tout code situé séquentiellement après une instruction return ne sera jamais exécuté. L'exécution d'une instruction return à l'intérieur d'une instruction de sélection ou d'itération arrêtera cette instruction et sortira de la méthode ou du constructeur.
  • 3.5.A.5 Une méthode d'accès (accessor) permet aux objets d'autres classes d'obtenir une copie de la valeur des variables d'instance ou de classe. Une méthode d'accès est une méthode non-void.
  • 3.5.A.6 Une méthode mutatrice (modificatrice) est une méthode qui modifie les valeurs des variables d'instance ou de classe. Une méthode mutatrice est souvent une méthode void.
  • 3.5.A.7 Les méthodes avec des paramètres reçoivent des valeurs par l'intermédiaire de ces paramètres et utilisent ces valeurs pour accomplir la tâche de la méthode.
  • 3.5.A.8 Lorsqu'un argument est une valeur primitive, le paramètre est initialisé avec une copie de cette valeur. Les modifications apportées au paramètre n'ont aucun effet sur l'argument correspondant.

Source : Description du cours et de l'examen AP College Board

Une méthode a une signature, un type de retour et un corps. Un accessor (getter) 访问器 retourne de l'information sans modifier l'objet ; un mutator (setter) 修改器 modifie un champ. Une méthode retournant une valeur doit avoir un return du bon type sur chaque chemin ; une void méthode ne retourne rien.

public void setScore(int s) { score = s; }   // mutator
public String toString() { return name + ": " + score; }
Explorer

Suivre un appel de méthode et son retour

Appeler une méthode pousse un cadre avec ses paramètres ; lorsqu'elle atteint return, le cadre est retiré et la valeur retourne à l'appelant.

Vocabulaire Entrainer
Anglais Chinois Pinyin
accessor (getter)/əkˈsesə/ 访问器 fǎng wèn qì
mutator (setter)/mjuːˈteɪtə/ 修改器 xiū gǎi qì
static (class) variable/ˈstætɪk ˈveərɪəbl/ 类变量 lèi biàn liàng
3.6

Passer et Retourner des Références d'un Objet

Programme

Objectif d'apprentissage 3.6.A : Écrire du code pour définir les comportements d'un objet via des méthodes écrites dans une classe en utilisant des références d'objets et déterminer le résultat de l'appel de ces méthodes.

  • 3.6.A.1 Lorsqu'un argument est une référence d'objet, le paramètre est initialisé avec une copie de cette référence ; cela ne crée pas une nouvelle copie indépendante de l'objet. Si le paramètre fait référence à un objet mutable, la méthode ou le constructeur peut utiliser cette référence pour modifier l'état de l'objet. Il s'agit d'une bonne pratique de programmation de ne pas modifier les objets mutables passés en paramètre sauf si requis dans la spécification.
  • 3.6.A.2 Lorsque l'expression de retour évalue une référence d'objet, la référence est retournée, et non une référence vers une nouvelle copie de l'objet.
  • 3.6.A.3 Les méthodes ne peuvent accéder aux données privées et aux méthodes d'un paramètre qui contient une référence vers un objet, sauf si le paramètre est du même type que la classe englobante de la méthode.

Source : Description du cours et de l'examen AP College Board

= copie la référence, pas l'objet

Lorsque vous passez un objet à une méthode, Java copie la référence, donc la méthode agit sur le même objet – les modifications de ses champs sont visibles pour l'appelant. (Les primitives sont copiées par valeur, donc les modifications ne le sont pas.) Une méthode peut également retourner une référence vers un objet. Comme un String est immuable, le passer est sûr ; passer un objet mutable permet à la méthode de le modifier.

Java passe par valeur : la méthode reçoit une copie ; le vrai passage par référence, dont Java est dépourvu, lui permettrait de réassigner la variable de l'appelant
Java passe toujours par valeur (gauche) : la méthode reçoit une copie de la référence. Le vrai passage par référence (droite) – que Java ne possède pas – permettrait à la méthode de réassigner la propre variable de l'appelant.

Compétence pour l'examen : savoir que muter les champs d'un objet à l'intérieur d'une méthode affecte l'original, mais réassigner le paramètre (param = new...) n'affecte pas l'appelant.

Exemple résolu. Supposons que s soit un Student avec score 50, et que nous appelions tweak(s) :

public static void tweak(Student a) {
    a.setScore(100);          // (1) mutates the shared object
    a = new Student("Z", 0);  // (2) repoints the local copy only
    a.setScore(5);            // (3) changes only the new local object
}

La ligne (1) modifie l'objet pointé par s, donc l'appelant voit maintenant 100. La ligne (2) fait en sorte que la propre copie de la référence de la méthode pointe vers un nouvel objet – le s de l'appelant reste intact – et la ligne (3) n'affecte que ce nouvel objet. Après l'appel, s.getScore() est 100 : la mutation a été appliquée, la réassignation non.

3.7

Variables et Méthodes de Classe

Programme

Objectif d'apprentissage 3.7.A : Écrire du code pour définir les comportements d'une classe via des méthodes de classe.

  • 3.7.A.1 Les méthodes de classe ne peuvent pas accéder ni modifier les valeurs des variables d'instance ni appeler des méthodes d'instance sans recevoir une instance de la classe via un paramètre.
  • 3.7.A.2 Les méthodes de classe peuvent accéder ou modifier les valeurs des variables de classe et peuvent appeler d'autres méthodes de classe.

Objectif d'apprentissage 3.7.B : Écrire du code pour déclarer les variables de classe qui appartiennent à la classe.

  • 3.7.B.1 Les variables de classe appartiennent à la classe, tous les objets d'une classe partageant une seule copie de la variable de classe. Les variables de classe sont désignées avec le mot-clé static avant le type de variable.
  • 3.7.B.2 Les variables de classe désignées public sont accédées à l'extérieur de la classe en utilisant le nom de la classe et l'opérateur point, car elles sont associées à une classe, et non à des objets d'une classe.
  • 3.7.B.3 Lorsqu'une variable est déclarée final, sa valeur ne peut pas être modifiée.

Source : Description du cours et de l'examen AP College Board

champs statiques vs instance

Une variable statique (de classe) 类变量, marquée static, est partagée par tous les objets de la classe – une seule copie au total (ex. un compteur du nombre d'objets existants). Une méthode statique appartient à la classe et ne peut pas utiliser directement les champs d'instance. Accédez-y par le nom de la classe : Student.getCount().

3.8

Portée et Accès

Programme

Objectif d'apprentissage 3.8.A : Expliquer où les variables peuvent être utilisées dans le code.

  • 3.8.A.1 Les variables locales sont des variables déclarées dans les en-têtes ou les corps de blocs de code. Les variables locales ne peuvent être accédées que dans le bloc dans lequel elles sont déclarées. Puisque les constructeurs et les méthodes sont des blocs de code, les paramètres des constructeurs ou des méthodes sont également considérés comme des variables locales. Ces variables ne peuvent être utilisées que dans le constructeur ou la méthode et ne peuvent pas être déclarées comme public ou private.
  • 3.8.A.2 Lorsqu'il existe une variable locale ou un paramètre ayant le même nom qu'une variable d'instance, le nom de la variable fera référence à la variable locale plutôt qu'à la variable d'instance à l'intérieur du corps du constructeur ou de la méthode.

Source : Description du cours et de l'examen AP College Board

Portée 作用域 est là où un nom est visible. Une variable locale déclarée dans une méthode n'existe qu'à l'intérieur ; un paramètre n'existe que dans sa méthode ; une variable d'instance est visible tout au long de l'objet. Les modificateurs d'accès contrôlent la visibilité entre les classes : private (seulement cette classe) contre public (n'importe où). Les variables locales masquent les champs du même nom – une source de bugs.

Une variable globale est visible partout ; une variable locale seulement dans son bloc
Une variable globale est visible partout ; une variable locale seulement dans son bloc
Vocabulaire Entrainer
Anglais Chinois Pinyin
Scope/skəʊp/ 作用域 zuò yòng yù
3.9

Le Mot-clé this

Programme

Objectif d'apprentissage 3.9.A : Écrire du code pour des expressions auto-référentielles et déterminer le résultat de ces expressions.

  • 3.9.A.1 À l'intérieur d'une méthode d'instance ou d'un constructeur, le mot-clé this agit comme une variable spéciale contenant une référence vers l'objet courant — l'objet dont la méthode ou le constructeur est appelé.
  • 3.9.A.2 Le mot-clé this peut être utilisé pour passer l'objet courant en tant qu'argument dans un appel de méthode.
  • 3.9.A.3 Les méthodes de classe n'ont pas de référence this.

Source : Description du cours et de l'examen AP College Board

this est une référence vers l'objet courant. Utilisez-le pour distinguer un champ d'un paramètre ayant le même nom, ou pour appeler une autre méthode du même objet :

public Student(String name, int score) {
    this.name = name;      // this.name is the field; name is the parameter
    this.score = score;
}

Compétence pour l'examen : quand un paramètre de constructeur ou de setter a le même nom qu'un champ, vous devez écrire this.field = param – sans this, l'affectation ne sert à rien.

3.9

Conseils d'examen

  • Concevez avec des méthodes et des classes : encapsulez les données en tant que champs private et exposez le comportement via des méthodes publiques.
  • Connaissez la différence entre un objet et sa classe, et que les objets sont passés par valeur – le paramètre reçoit une copie de la référence, donc une méthode peut modifier l'état de l'objet, mais réassigner le paramètre n'affecte pas l'appelant (Java n'a pas de passage par référence).
  • Parcourez les tableaux et les ArrayLists en toute sécurité – la taille est length vs .size(), et la suppression pendant une boucle décale les indices.
  • Tracez une méthode récursive pour déterminer son résultat : trouvez d'abord le cas de base, puis suivez chaque appel récursif jusqu'à sa valeur de retour (l'écriture de code récursif sort du cadre de l'examen).
  • Reconnaissiez le vocabulaire de l'héritage – superclasse, sous-classe, redéfinition de méthode, et que chaque classe est une sous-classe de Object (la conception et l'implémentation de l'héritage sortent du cadre de l'examen).

Leçons interactives sur ce sujet

Traversez-le étape par étape, avec des exercices à vérification instantanée.

Épreuves Passées

Plus de sujets dans AP Informatique A

Se connecter ou créer un compte

IGCSE, A-Level & AP