Vous êtes sur la page 1sur 27

Cours Coo:

💖Petits tips du cours:


https://www.jmdoudoux.fr/java/dej/chap-poo.htm
Fusion des notes // Pour aller au anciennes notes de débuts d’années
-Il y a deux manières d’utiliser une classe ,en instanciant ou bien avec de l’héritage.
-Maven c’est mieu que ANT
-Maven permet de générer un fichier XML répertoriant la doc et plein de trucs.
-LIFO => Last In, First Out
-Par défaut lorsque lorsqu'on met un constructeur il appel automatiquement le constructeur
de la classe Object.

Classe:

Une classe contient des attributs, des méthodes et au moins un constructeur.


ça dépend du langage utilisé.Pour exemple, JAVA ne fait pas l’héritage entre la méthode et
le constructeur.

Toutes les classes de collection implémentent l’interface List.


//TODO se renseigner

Les Flux:
Ce sont des fichiers, exploités sous forme de canaux unidirectionnel input/output.

2 Familles de fichiers:Binaires & Bloc/Texte

Classes HELPER:
Ce sont des utilitaires.
Pour les trouver c’est simple car ce sont les seules à être pluriels.
POO:
https://apprendre-la-programmation.net/programmation-orientee-objet/
Les trois principes de la POO sont l'encapsulation, l'héritage et Polymorphisme

1
JAVA:

POJO:
Plain Old Java Object (Java Bean ≠ POJO)
C’est une classe qui implémente la classe sérialisable.
Elle doit avoir un constructeur par défaut (c’est tout).
Ses attributs sont privés avec des méthodes accesseurs.
Rôle:Véhiculer de l’information.
Pas de traitement!!!
très utilisé dans les BDD.
POJO : Classe avec uniquement des attributs privés et un constructeur par défaut.
NE RÉALISE PAS DE TRAITEMENT.

Réification:
Le fait de transformer un concept en objet.
1) Concept => Objet
Classe => Objet
Classe ==
Attributs,Méthodes,Nom,constructeurs,Visibilitée,Modificateurs, Packages.

DAO:
Data Access Object (ADO chez Microsoft).
Doit implémenter les méthodes en utilisant le C.R.U.D .

IOC:
Invert Of Control
Permet l’injection de dépendances , par exemple via des fichiers de config ( *.property/*.ini).
Utile pour ne pas avoir à recompiler le code pour pouvoir changer les valeurs qui se trouvent
dans des fichiers.

2
CRUD:

ORM:
Object Relational Mapping

ORB:
Implémentent un bus logiciel par lequel des objets envoient et reçoivent des requêtes et des
réponses, de manière transparente et portable

EJB:
Entreprise d'objet accessible de loin permettant de dispatcher les objets sur plusieurs
machines, la haute disponibilitée etc…

Threads:
C bien c:
Framework -> executor (haut niveau)

3
JDBC:
Bas niveau

4
JPA:
Haut niveau

@ENTITY permet de dire ce que l'objet est lié à une table.


@Table(name = “nomTable”) permet de dire qu’elle est la table lier.

5
ACID:
Atomicité, Cohérence, Isolation, Durabilité

Polymorphisme de type:
En java on utilise l’opérateur ‘diamant’ pour spécifier le type(pour une liste générique).

liste<Animal> maListe = new Liste<>();


Le <Animal> permet de spécifier le type d’objet qui sera mis dans la liste.
On peut mettre un “?” dans l’opérateur diamant pour spécifier qu’on ne connaît pas le type
des éléments.

Il est important de noter que dans ce cas l'élément polymorphe est


l’attribut référant à la classe ciblé soit leB.On pourra donc

JVM:
La jvm charge les classes dans la ram avec le Classloader sous forme d’objet de type class
(classLoader).
<Réïfication>:La jvm va instancier les classes avec une metaclass.

6
Mot clé statique:
A utiliser avec parcimonie.
Permet de symboliser les attribut/méthodes de classes.
En UML ça se traduit pas un attribut/méthode souligné.
Créer dès que la classe existe.

Dans le langage de programmation Java, le mot-clé static indique que le membre en


question appartient à lui-même et non à une instance de ce type.
Cela signifie qu’une seule instance de ce membre statique est créée et est partagée par
toutes les instances de la classe.

Une méthode static ne doit pas altérer les variables de l’obj car on peut l'appeler sans avoir
créer l’obj.

7
Un petit exemple:

8
dans sortir() c’est supérieur et non pas inférieur à Visiteur.MAX.

On peut s’en servir pour des méthodes, elles pourront être appelées même si l'objet n'existe
pas, seront commune au obj instanciant la classe mais elle ne pourront pas travailler avec
des dynamique (créer avec l’obj).

9
Singleton:
Utilisé pour faire de l'interface entre les couches, ne pas en abuser car on casse la
multiplicité/duplicative de l'objet.

En java ya une notation @Singleton

Les collections:
Thread safe: Vector (lent),ArrayList (Pas tread safe),
Hashmap: table de hachage (clé, valeur)

10
Le MVC:
La vue à accès au contrôleur, le contrôleur n’a pas accès à la vue mais il pilote le modèle.
Le modèle ne connait rien.

La vue permet d’afficher les données, elle ne contient pas de données.


Le contrôleur dispose des règles, c’est lui qui dispose de la logique.
Il fait l’intermédiaire entre la vue et les modèles.
Le modèle contient l’information, les règles de gestion individuel.

JavaBeans:
Un JavaBeans est une classe qui contient des attributs uniquement privés avec ses
méthodes accesseur (public|protected) plus au moins le constructeur par
défaut.Il a besoin d’implémenter l’interface Serializable.Ce qui permet d’intégrer la classe
dans d’autres projets.
L’objectif des JavaBeans c’est que les modèles implémentent Serializable.

Expression lambda:
https://www.programiz.com/java-programming/lambda-expression
Java Lambda Expressions (With Examples).pdf

maListe.forEach(System.out::println);//Expression lambda

11
Les classe anonymes:
Permet d’instancier les classes non-instanciables pour des tâches spécifiques.
//TODO aller se renseigner

Les exceptions en java:

Avec les héritages:

throws suivi du type voulu pour signifier que la méthode peut jeter des exceptions.
throw est équivalent a un return.
public void setMachin(int mach) throws TropDeMachin{
if(mach > 100){
throw new TropDeMachin
}
this.machin = mach;
}
Un throw permet de faire “remonter” l’erreur pour qu’un try catch la récupère

Attraper:
try{
-A1
-A2
-A3
print("ok")
}catch(PbException){
print("PB")
}
print("FIN")
SI pas de pb alors il sera affiché ok suivi de FIN, mais si il y a une erreur alors ça sera PB
suivit de FIN bien que FIN puisse ne pas s’afficher dans le cas où il y aurait un return dans
le catch.

Créer:

12
Les runTimeException sont donc des exception lier à des erreurs de programmations.Si on
dérive de RunTimeException les classes n’auront pas à faire les try catch,c’est donc pour les
programmes systèmes ou bien embarqué.On dérive donc couramment de la classe
Exception.

13
Eclipse:

Générer la javadoc:
projet → générer javadoc
La visibilitée dépendra de la personne qui utilisera le programme client
→public,programmeur →private

Ajouter un connecteur:

Récupérer les connecteur:


Windows→ préférence→ java →build path →user lib → cliquer sur new → donner un nom
→ ok → add external jar → mettre le fichier java précédemment récupéré

Ajouter un Data source


click droit sur database connector ->> new → choisir une connection → lui donner un nom
ex:(panierDS) → next
→ new driver définition (choisir le plus mieux) puis aller dans JAR list → clear → addJar
(récupérer le .jar précédemment récupéré)
→ Aller dans l’onglet properties → changer le nom de la table dans le premier et le second
champ→ finish ,
cocher sauvegarder le mdp et finish.

Passer le projet en facette:


On ajoute modules maven : eclipselink,eclipse.persistence et javax

click droit sur le projet → propriétés → facet, cochet web module et jpa, ne pas oublier de
configurer le jpa.

On ajoute @ENTITY et @Table(name = “animal”)

14
UML:
La cardinalité maximum ayant un nombre fini correspond à un tableau et si c’est un ‘n’ alors
c’est une collection.
Un acteur est quelque chose qui interagit directement avec le système.

Délégations:
Toutes les délégations se traduisent par un attribut handler.

Association:

La cardinalité minimale est toujours de 0.


Il faudra donc vérifier que l’attribut soit différent de null avant de communiquer.
Tant que l’obj n’est pas connu l’attribut lui pointant dessus est initialisé à null.
Il y aura forcément 2 méthodes utilisées, la première pour s’associer et la seconde de se
dissocier.

Agrégation:

La cardinalité minimale est ce qu’on veut à part n.


A est responsable de B.
A peut vivre sans B.
B ne peut pas vivre SEUL.
B peut être partagé.
B n’est donc pas autonome.
Construction avec un new() ou bien en pointant sur l’obj récupéré en paramètre.
Il n’y a qu’une seule méthode avec du B ,qui correspond plus ou moins à un getter pour
retourner B.

15
Composition:

A est responsable de B.
A ne peut vivre sans B.
B ne peut vivre sans A.
cardinalité minimale de 1.
Il n’y a donc pas besoin de vérifier la présence de B.
B est construit dans A avec new().
Il y a obligatoirement zéro méthode faisant apparaître l’obj B.

Dépendance:

A dépend de B ,pouvant se traduire par une méthode ayant en paramètre un obj de type B.
C'est-à-dire que la relation est très ponctuelle.
1)Une méthode en param l’obj B
2)Une méthode Variable Locale de type B
3)Singleton : Appel DIRECT du code

16
2TUP:
https://docs.google.com/document/d/1mIjR3O0rdv25YJ-2cu9fW_ZNjYWdjx5JYNuSi33vnhM/
edit?usp=sharing

Etude préliminaire :
(A rendre en projet)
Penser à modéliser que les sauvegardes doivent se faire au fur et à mesure des
changements.

But: Ressortir le contexte

Acteurs:C'est un profil, un rôle extérieur au système et qui interagit directement avec(pas


d'intermédiaire).

Message:

Diagramme de contexte(statique et/ou dynamique) : accompagné d’un D-obj,D-collaboration

Capture des besoins fonctionnels:

1°Lister les cas d’utilisations:

Nom Acteur(s) Messages Commentaires

Lancer joueur J → A : lancer


A → J : etat

Entrer joueur J → A : entrer


A → J : suivi
nb:on peut mettre les colonnes qu’on veut

17
2°Fiches de scénario:

Précondition:

Cas nominal:
1)L’agence propose de lancer le jeu
2)Le joueur lance manuellement la simulation
3)L’agence retourne l’état et propose de faire rentrer un client.
4)Joueur fait entrer (cf. aller voir entrer)
5)Fin

Variantes:
2-a)Le joueur ne lance pas la simulation
1)Directe à l’étape 5
4-a)Le joueur entre
1)Le joueur annule l’entré
2)L’agence msg ?? → fin 5)

3°Classes candidates:
Agence, Voiture, Moteur, Client

Les possibilités pour transformer les classes


candidates en diagramme de classe:
1°) Donner naissance à une classe
2°) Relation/Heritage
3°) Attribut

4°Diagramme de ‘Use Cases’:

18
19
Correction Zoo

A)Importation gitlab

Préparation:

1)Création de projet GITLAB


-Nommé “correctionZoo”

2)Clonage sur eclipse


–Clone le https
Dans eclipse:
Perspective git, puis click droit, clone repository
next,next,Changer le répertoire de travail

3)Créer un projet MAVEN


“correctionZoo”, groupe: org.formation.NOM, artefact: zoo

Vue java, clic droit new projet,projet maven


-Cocher create a simple project (Pour créer un projet sans dépendances de zéro en gros)
-Décocher use default location
-Mettre le répertoire créé précédemment par le clonage
-Group ID: org.formation.NOM
-ArtefactID: correctionZoo

20
-On modifie le pom.xml de notre projet:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.formation.autard</groupId>
<artifactId>correctionzoo</artifactId>
<version>0.0.1-SNAPSHOT</version>

<properties>

<java.version>16</java.version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<junit.jupiter.version>5.8.2</junit.jupiter.version>

</properties>

<dependencies>

<!-- pour le paquet jupiter -->


<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>

21
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
</plugin>
<!-- POur exécuter les TESTS unitaire -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>${java.version}</release>
</configuration>
</plugin>
</plugins>
</build>
</project>
Pour connaitre sa version java a mettre dans <java.version>il faut aller dans
windows>preference>java>javaJREBuild
Click droit sur le projet > maven > update project
Click droit sur le projets > run as > run configuration >Junit .Et les passer en junit5 (si
besoin)

4)Copier tout
src et ce que est dans test dans le projet

Le projet sera en erreur

B)Corrections
On change le chemin des paquets pour qu’ils correspondent au nôtre
Click droit sur le projets > run as > maven install

2)Usine logicielle

Lors d’un commit on envoie les sources.


Le serveur reconstruit à partir des sources (build)
Fait passer les tests unitaires.

22
23
CI(Intégration continu) :

1)Tests automatique sur gitlab

A)Config de gitlab
Gitlab a besoin d'un fichier nommé .gitlab-ci.yml
dans gitlab:
- settings>CI/CD
- CI/CD>editor>Create
- modifier le fichier yml pour que ça fonctionne

Vu qu'on a modifier le yml faut le récupérer pour pouvoir faire des commit.
Dans eclipse :clic droit sur le projet > team>pull
Puis on fait un push head.

B)Mise en place des tests


On installe le paquet sonarLint pour avoir un équivalent de sonarqube (eclipse)
-tests
-Vérif qualitée

Pour sonar on ajoute des properties.


qualitygate correspond au niveau de qualité de réussite pour que ça soit accepté (définit
dans le serveur sonar par l’admin)

Eviter les system.out // remplacer par des logguer


Le dossier $HOME/.m2 contient les repository d’eclipse

<distributionManagement> vient après le build


GITLAB va pouvoir générer des variables d’environnement utiliser dans les pom.xml

24
Settings>CI/CD>Variables

CE(Développement continu):
-Dépôt sur un serveur appli

25
GitLab:

Schématiquement:

Faire un runner:

Aller dans settings

26

Vous aimerez peut-être aussi