Forge logicielle, GitLab, gestion de versions, Git
Entrée sous suivi de version, instantané d'un dépôt,
zone de transit (staging area), validation
(commit), états possibles d'une entrée, entrées
ignorées
Clonage d'un dépôt, contenu du répertoire de travail,
dépôt distant, tirer depuis un dépôt distant, pousser vers un
dépôt distant
Branche, fusion de branches, étiquette, processus de
travail pour les séances
Séance 2
Spécification
Spécification et préparation des tests de
validation
« 4 + 1 » vues de Kruchten, vue
« cas d'utilisation », rôle de la
spécification, rôle de la préparation des tests de
validation
Diagramme de cas d'utilisation, acteur, généralisation
spécialisation entre acteurs, cas d'utilisation, lien de
communication, généralisation spécialisation entre cas
d'utilisation
Préparation des tests de validation, précondition,
postcondition, relation entre les préconditions dans une
généralisation spécialisation, relation entre les
postconditions dans une généralisation spécialisation,
test de validation d'un cas d'utilisation, table de décision
Vue « logique » des
« 4 + 1 » vues de Kruchten, aspects
statiques Versus dynamiques, rôle de la
conception préliminaire
Diagramme de classes, classe, association, multiplicité,
attributs d'instance / de classe / dérivés, opérations
d'instance / de classe, classe d'association et
transformation en une classe et deux associations,
agrégation, classe abstraite, opération abstraite,
généralisation spécialisation, redéfinition
(override), liaison dynamique, surcharge
(overload) (subsomption), principe de
substitution de Liskov & Wing, Façade
Diagramme d'objets
Diagramme de séquence, participant, message, barre
d'activation, ligne de vie, fragments, appel
synchrone Versus asynchrone, recherche d'objet,
création / suppression d'objet
Diagramme de communications, lien d'interaction,
message, messages conditionnés / en séquence / imbriqués,
recherche d'objet, création / suppression d'objet
Séance 4
Conception détaillée
Conception détaillée et préparation des tests
unitaires
Rôle de la conception détaillée, rôle de la préparation
des tests unitaires, dette technique
Raffinement de diagramme de classes, navigabilité,
composition, agrégation
Diagramme de machine à états, type d'état, état initial
/ final / « en construction », « en
destruction », événement, transition, condition,
action, transition implicite
Fiche de classe, traduction des associations en
attributs, référence, traduction des
agrégations Versus compositions, visibilité,
encapsulation, opération accesseur, traduction des
attributs dérivées, traduction des classes
d'association, traduction des diagrammes d'interaction
en algorithmes, traduction des diagrammes de machine à
états
Invariant de classe, programmation défensive avec
vérification des préconditions, programmation par
assertion avec l'opération
invariant
Tests unitaires d'une opération, vérification de la
postcondition et de la levée d'exception, expression de
la postcondition avec les attributs prime, table
de décision des tests unitaires d'une opération
Programmation outillée, construction de logiciel avec
Maven, programmation et exécution des tests avec JUnit
Héritage, transtypage (implicite vers le haut, explicite
vers le bas), redéfinition de méthodes, liaison tardive,
type formel, type actuel, visibilité des attributs et des
méthodes, classe abstraite, interface
Polymorphisme, classe paramétrée
(generics), paramètre de type
Énumération, annotations
Collections, bibliothèque, interfaces, classes concrètes,
algorithmes, listes, dictionnaires,
méthodes equals et hashCode, parcours
de collections
Flot d'exécution normale versus flot de gestion
des erreurs, détection d'une situation anormale, région
gardée, traitement d'une situation anormale par
compensation et poursuite, par transformation du type
d'exception, par arrêt franc.
Lever une exception avec throw new
ClasseException(message), relayer une exception
avec throws, traiter une exception avec le
bloc try—catch, finally.
Erreur versus exception, exceptions sous contrôle
(checked, y compris les exceptions applicatives)
et hors contrôle
(unchecked, RuntimeException).
Programmation des tests avec JUnit (vrai
positif, vrai négatif, faux positif et faux négatif),
annotations @BeforeClass, @Before,
@Test, @After et @AfterClass.
Exception dans les tests,
@Test(expected=ClasseException.class).
Analyse statique de code, aide avec SpotBugs, Javadoc, aide avec Checkstyle
Idiome, patron d'implémentation
Idiomes JAVA, méthodes communes à tous les
objets, equals
avec hashCode, toString avec les cas
particuliers de l'association bidirectionnelle et de
l'énumération
Lambda expressions, classe anonyme, interface
fonctionnelle, syntaxe d'une lambda expression
(types des arguments explicites ou inférés, corps formé
d'un bloc ou d'une expression), contexte d'exécution,
référence de méthode, syntaxe et type d'une référence
d'une méthode, interfaces fonctionnelles standard.
Manipulation des collections avec les Streams,
paradigme de programmation map/reduce,
pipeline, stream, évaluation tardive, début /
traitement intermédiaire / terminaison du pipeline.
Qualité de modèle UML : correction sémantique
(well-formedness), cohérence
(consistency), complétude (completeness),
cohérence entre diagrammes, cohérence avec le code,
couplage et cohésion (fonctionnelle, fortuite)