📌 La programmation traditionnelle décompose un problème en sous-problèmes élémentaires selon une approche descendante, sépare les données des traitements et assemble des structures de données avec des algorithmes.
La programmation procédurale produit une solution liée au problème, peu générique et peu réutilisable, dont les différentes portions sont fortement dépendantes.
La conception objet cherche à minimiser l’information partagée afin de réduire les effets imprévus et les bugs, puis favorise la réutilisation de composants indépendants du contexte et leur spécialisation.
Procédural : données séparées des traitements ; objet : composants réutilisables et moins dépendants.
★ À maîtriser
📌 L’instanciation est la relation et le mécanisme qui permettent de créer un objet à partir de sa classe, et un objet est l’instance d’une seule classe.
Compléments
📌 Une variable d’instance appartient à un objet particulier, tandis qu’une variable de classe contient une donnée commune aux instances et s’utilise avec des méthodes de classe invoquées sur la classe.
📌 Un message synchrone bloque l’appelant jusqu’à la fin de l’opération, tandis qu’un message asynchrone permet à l’appelant de poursuivre son traitement et peut rendre plusieurs objets actifs simultanément.
AE-MH : abstraction, encapsulation, modularité, hiérarchie.
★ À maîtriser
Les caractéristiques essentielles de l’orienté objet sont:
La modélisation objet construit le système de façon ascendante comme un assemblage de composants unitaires, contrairement à l’approche descendante de la programmation procédurale.
Java est un environnement orienté objet comprenant un langage, une machine virtuelle appelée JVM et un ensemble d’API et d’outils tels que jdb et javadoc.
Java est portable parce que les programmes sont traduits en Java bytecode, indépendant de la cible et interprété par une plateforme Java.
Compléments
📌 UML est un formalisme graphique normalisé par l’OMG qui définit des diagrammes statiques ou dynamiques, mais ce n’est pas une méthode de modélisation.
Réalité → modèles affinés → composants informatiques → bytecode exécuté par la JVM.
📌 Un fichier Java peut contenir une ou plusieurs classes, mais une seule peut y être déclarée public et son nom doit être exactement celui du fichier, dont l’extension est .java.
📌 En Java, les variables numériques sont initialisées par défaut à 0, les variables objets à null, et une variable final ne peut plus changer après son initialisation.
Fichier .java → compilation en .class → chargement et exécution du bytecode.
📌 La valeur d’une variable final ne peut plus changer après son initialisation, et une variable locale final déclarée mais non encore initialisée est appelée blank final.
Variable d’instance par objet, variable de classe partagée
📌 Une instruction est une unité d’exécution complète terminée par un point-virgule, tandis qu’un bloc regroupe zéro ou plusieurs instructions entre accolades.
📌 Lorsque plusieurs opérateurs ont le même niveau de priorité, leur associativité détermine le sens d’évaluation ; la soustraction est associative de gauche à droite, donc 1-2-3 vaut -4.
📌 Dans un tableau Java, l’indice commence à 0 et se termine à la taille du tableau moins 1, tandis que l’attribut length donne sa taille.
Expression → instruction → bloc
★ À maîtriser
Compléments
Le nombre d’arguments transmis à la méthode main est obtenu par l’expression .
🔄 La lecture d’une valeur primitive suit ces étapes:
String immuable, StringBuffer modifiable
📌 Si aucune classe ne définit de constructeur, Java en fournit un par défaut ; dès qu’un constructeur est défini, ce comportement par défaut disparaît.
Classe → instance → constructeur → méthodes
★ À maîtriser
Chaque objet possède une copie de ses variables d’instance, tandis que toutes les instances d’une classe partagent une seule copie de ses variables de classe.
Le mot-clé static déclare un membre de classe et le mot-clé final indique que sa valeur ne peut pas changer.
Les arguments sont passés par valeur : pour un type primitif, la méthode ne modifie pas la valeur originale, tandis que pour une référence d’objet elle peut modifier les données de l’objet mais pas la référence originale.
String est destinée aux chaînes dont la valeur ne change pas, tandis que StringBuffer est destinée aux chaînes modifiables.
Compléments
Une méthode statique n’accède pas directement aux variables d’instance, et le mot-clé this désigne l’objet sur lequel une méthode d’instance a été invoquée.
Les classes enveloppes Integer, Double, Float et Long fournissent notamment valueOf pour convertir une String en objet de la classe enveloppe et parseXxx pour convertir une String en donnée primitive.
Instance indépendante, classe partagée
📌 L’héritage est envisagé lorsque des classes ont des fonctionnements ou des services semblables afin de factoriser des attributs ou des méthodes, mais il n’apparaît généralement pas au début de la modélisation.
Réutilisation du code → maintenance facilitée
★ À maîtriser
📌 L’héritage est généralement introduit après le début de la modélisation, lorsque des classes ont des fonctionnements ou des services semblables afin de factoriser des attributs ou des méthodes.
📌 En Java, une classe hérite directement d’une seule classe, hérite par défaut de la classe Object et ne peut participer à un cycle d’héritage.
Compléments
📌 La relation d’héritage dépend du contexte du problème, mais la modélisation doit aussi envisager les réutilisations futures lorsque le programme s’enrichit de nouvelles ressources.
Classes comparables → factorisation des attributs et méthodes
★ À maîtriser
📌 Une classe D hérite d’une classe B si D est une sorte de B, de sorte que tout ce qui est vrai pour B le soit également pour D.
Compléments
La classe générale est appelée classe de base, classe mère ou superclasse, tandis que la classe spécialisée est appelée classe dérivée, classe fille ou sous-classe.
Une classe peut avoir un nombre illimité de sous-classes et l’héritage peut s’étendre sur plusieurs niveaux.
Généralisation factorise, spécialisation enrichit
★ À maîtriser
La surcharge propose plusieurs méthodes de même nom avec des signatures différentes, tandis que la redéfinition remplace dans une sous-classe une méthode héritée de même signature.
Une méthode redéfinie doit conserver le même nom, le même type de résultat, le même nombre et les mêmes types de paramètres que la méthode de la superclasse, avec un accès identique ou moins restrictif.
Un membre private est accessible uniquement dans sa classe, un membre par défaut dans les classes du même package, un membre protected dans les sous-classes et les classes du même package, et un membre public dans toutes les classes.
Le constructeur d’une sous-classe doit appeler en premier le constructeur de sa superclasse, qui initialise les attributs hérités, tandis que le constructeur de la sous-classe initialise ses propres attributs.
Compléments
📌 Une méthode redéfinie peut être appelée avec le mot-clé super, mais une méthode déclarée final ou static dans la classe de base ne peut pas être redéfinie.
Surcharge : signatures différentes ; redéfinition : même signature
📌 Le principe de substitution autorise l’utilisation d’une instance de sous-classe partout où une instance de superclasse est attendue, mais l’utilisation inverse exige une conversion explicite.
📌 Java interdit le multihéritage de classes, mais une classe peut hériter d’une classe et implémenter autant d’interfaces qu’elle le souhaite.
Superclasse accepte la sous-classe ; l’inverse exige un cast
★ À maîtriser
📌 La méthode equals de Object utilise l’identité pour considérer deux références comme égales lorsqu’elles désignent le même objet, mais elle peut être redéfinie pour comparer le contenu de deux objets.
📌 Une classe finale ne peut pas avoir de classe dérivée, tandis qu’une méthode finale ne peut pas être surdéfinie dans les sous-classes.
Compléments
La méthode toString retourne une représentation de l’objet sous forme de chaîne composée du nom de la classe et d’une représentation hexadécimale non signée du hashcode, ce qui est utile pour afficher ses informations.
La méthode getClass retourne un objet Class représentant à l’exécution la classe de l’objet.
final bloque l’héritage, abstract bloque l’instanciation
Une classe qui implémente une interface doit implémenter toutes les méthodes déclarées par cette interface ou hériter de leur implémentation depuis une superclasse.
Java 8 permet aux interfaces de déclarer des méthodes static et des méthodes default avec une implémentation afin que les classes existantes puissent évoluer sans implémenter explicitement chaque nouvelle méthode default.
En cas d’héritage en diamant entre interfaces fournissant des méthodes default concurrentes, la classe peut résoudre l’ambiguïté en redéfinissant la méthode et en appelant explicitement l’implémentation voulue avec Interface.super.methode().
Méthodes default ajoutées → évolution non intrusive des interfaces
★ À maîtriser
📐 Formule — La syntaxe générale d’une expression lambda est .
📌 Une lambda peut avoir zéro, un ou plusieurs paramètres, dont le type peut être explicite ou inféré ; les parenthèses sont facultatives pour un paramètre unique dont le type est inféré.
📌 Le corps d’une lambda peut être une expression unique ou un bloc de plusieurs instructions entre accolades ; avec une seule instruction, les accolades sont facultatives et la valeur de retour est celle de l’instruction si elle en possède une.
Compléments
Paramètres → flèche → corps
📌 Après l’instruction de package, une classe peut utiliser directement le nom court d’un élément importé au lieu de son chemin complet.
📌 Le code d’une classe ou d’une interface est placé dans un fichier portant son nom et l’extension .java, dans une arborescence de répertoires reflétant la structure du package.
À la compilation, le compilateur crée un fichier .class pour chaque classe définie, et ces fichiers sont placés dans une arborescence correspondant au package.
Lancer une exception consiste à créer un objet Exception et à le transmettre à l’environnement d’exécution.
📌 Lorsqu’une méthode peut potentiellement générer une exception, elle doit soit la traiter avec try/catch, soit déclarer throws, sinon une erreur de compilation se produit, sauf pour les erreurs et exceptions de java.lang.
Lorsqu’une exception est lancée dans un bloc try, son exécution s’interrompt, un gestionnaire correspondant est recherché en remontant la pile d’appels, puis l’exécution reprend après les gestionnaires et passe par finally.
Un bloc try peut être associé à un ou plusieurs blocs catch, et un bloc finally permet de nettoyer l’état d’une méthode avant la poursuite du programme.
Throwable est la classe de base du traitement des erreurs, Error représente un échec grave de la machine virtuelle, Exception représente des erreurs moins graves et RuntimeException regroupe des exceptions non contrôlées acceptées par le compilateur.
Une exception personnalisée doit dériver de Exception ou de RuntimeException, et non de Error.
Pour lancer une exception, on utilise le mot-clé throw suivi d’un objet dont la classe dérive de Throwable, et la méthode concernée déclare cette possibilité avec throws.
📌 Les méthodes pouvant lancer des exceptions contrôlées doivent inclure une clause throws nom_exception afin d’informer le compilateur et d’imposer à la méthode appelante un traitement ou une propagation.
S-I-A-C : statique, instance, arbitraire, constructeur
| Dimension | Programmation procédurale | Conception objet |
|---|---|---|
| Décomposition | Approche descendante par sous-problèmes | Approche ascendante par composants |
| Données et traitements | Séparés | Regroupés au sein d’objets |
| Réutilisation | Solution liée au problème et peu générique | Composants indépendants et réutilisables |
| Dépendances | Portions fortement dépendantes | Modules faiblement couplés |
| Dimension | Variable d’instance | Variable de classe |
|---|---|---|
| Copies | Une copie par objet | Une seule copie par classe |
| Accès | Accessible par les méthodes d’instance | Accessible par les méthodes de classe selon les règles de portée |
| Invocation | Via l’objet courant | Via la classe, par exemple NomDeClasse.methode(arg) |
Teste tes connaissances sur Fondamentaux de Java et objets avec 64 questions à choix multiples et corrections détaillées.
1. Quelle démarche caractérise la programmation traditionnelle lorsqu’elle traite un problème complexe ?
2. Quelle caractéristique décrit le mieux une solution produite par la programmation procédurale ?
Mémorisez les concepts clés de Fondamentaux de Java et objets avec 85 flashcards interactives.
Comment la programmation traditionnelle décompose-t-elle un problème ?
Elle le décompose en sous-problèmes élémentaires selon une approche descendante.
Que sépare la programmation traditionnelle dans son approche ?
Elle sépare les données des traitements.
Comment la programmation traditionnelle assemble-t-elle les structures de données ?
Elle les assemble avec des algorithmes.
Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.
Générateur de fiches