Cours Programmation Java 2020
Cours Programmation Java 2020
ORIENTÉ OBJET :
JAVA
Proposé par Ing. Fabrice Pegoffa
PROGRAMME
• Partie 0 : Programmation Orienter Objet
• Vue D’ensemble
• Différents types de méthodes
• Visibilité
• Concepts :
• Concept de modélisation à travers les notions de
classe et d’instanciation
• Concept d’action à traver la notion d’envoi de
messages entre objets
• Concept de construction par la réutilisation et
amélioration par l’utilisation de la notion
d’héritage
LES PARADIGMES DE LA POO
• 3 paradigmes fondamentaux :
• L‘encapsulation
• L’héritage
• Le Polymorphisme
L’ENCAPSULATION
• Derrière ce terme se cache le concept même de l'objet : réunir sous la
même entité les données et les moyens de les gérer, à savoir les champs
et les méthodes.
• L'encapsulation introduit donc une nouvelle manière de gérer des
données. Il ne s'agit plus de déclarer des données générales puis un
ensemble de procédures et fonctions destinées à les gérer de manière
séparée, mais bien de réunir le tout sous le couvert d'une seule et même
entité.
L’HÉRITAGE
• Objectif : construire de nouvelles classes en réutilisant les
attributs et les méthodes de classes existences
• Les attributs peuvent être modifiés au niveau de la sous-
classe
• La sous-classe peut ajouter des attributs à ceux de sa classe
mère; dans ce cas ses attributs sont prioritaires sur les
attributs qu’il hérite.
• Une classe hérite d’une autre si elle répond à la relation « is
a » ou « est un »
• L'héritage successif de classes permet de définir une
hiérarchie de classe qui se compose de super classes et de
sous-classes
L’HÉRITAGE
L’HÉRITAGE (EXEMPLE)
• Considérons un objet Bâtiment. Cet objet est pour le moins
générique, et sa définition reste assez vague. On peut toutefois lui
associer divers champs, dont par exemple :
• les murs ;
• le toit ;
• une porte ;
• l'adresse ;
• la superficie.
• On peut supposer que cet objet Bâtiment dispose d'un ensemble de
méthodes destinées à sa gestion
• ouvrir le Bâtiment ;
• fermer le Bâtiment ;
• agrandir le Bâtiment.
• Grâce au concept d'héritage, cet objet Bâtiment va pouvoir donner
naissance à un ou des descendants.
L’HÉRITAGE (EXEMPLE)
• Ainsi, si l'on poursuit notre exemple, nous allons pouvoir
créer un objet Maison. Ce nouvel objet est toujours
considéré comme un Bâtiment
• Toutefois, si notre nouvel objet est toujours un Bâtiment, il
n'en reste pas moins qu'il s'agit d'une Maison. On peut donc
lui adjoindre d'autres champs et méthodes
• nombre de fenêtres ;
• nombre d'étages ;
• nombre de pièces ;
• possède ou non un jardin ;
• possède une cave.
LE POLYMORPHISME
• Afin de mieux cerner ce paradigme, il suffit d'analyser la structure du
mot : poly comme plusieurs et morphisme (ou Morphe) comme forme
• Il traite ainsi la capacité d’un objet à prendre plusieurs forme
• Cette capacité dérive du principe d'héritage vu précédemment
• Toute fois, il est possible d’utiliser ce paradigme sans pour autant passé
par l’héritage, mais au sein de la même classe
• Ainsi la possibilité à un objet d’avoir plusieurs méthodes de même nom.
• L’objet garde toujours la capacité de redéfinir une méthode afin de la
réécrire, ou de la compléter.
• Le polymorphisme, en d'autres termes, est donc la capacité du système
à choisir dynamiquement la méthode qui correspond au type réel de
l'objet en cours
LA PROGRAMMATION
ORIENTÉ OBJET
Types de Méthodes
PRINCIPALES MÉTHODES
• Privées
• Protégées
LES CHAMPS ET MÉTHODES
PUBLIQUES
• Comme leur nom l'indique, les champs et méthodes dits publics sont
accessibles depuis tous les descendants et dans tous les modules
• Ainsi, si un objet est déclaré dans une unité avec un champ privé, alors
ce champ ne pourra être accédé qu'à l'intérieur même de l'unité.
• Il n'est pas nécessaire d'avoir un accesseur par champ privé, car ceux-ci
peuvent n'être utilisés qu'à des fins internes.
• Très souvent, les accesseurs en lecture verront leur nom commencer par
Get quand leurs homologues en écriture verront le leur commencer par
Set.
• Le type boolean, lui, ne peut contenir que deux valeurs : true (vrai) ou
false (faux), sans guillemets
• Ex :
CATÉGORIES DE
VARIABLES
• Deux catégories de variables en Java:
• Les variables globales : elles sont déclarées dans la classe. Elle sont
crées en mémoire lors de l’instanciation de l’objet et retirées de la
mémoire lors de la destruction de cet objet
• Les variables locales : elles sont crées dans une méthode soit en tant que
paramètre de la méthode, soit en tant que variable de la méthode. Elles
sont accessibles uniquement dans leurs méthodes d’appartenance.
• La boucle pour :
• Equivaut à « pour »
LES TABLEAUX
• Un tableau est une variables qui contient plusieurs valeurs ordonnées
séquentiellement que nous pourrons appeler au moyen d'un indice
• Il y a autant de types de tableaux que de types de variables
• Deux catégories de tableaux :
• Tableau à une dimension : on peut le voir comme un tableau à une ligne et
plusieurs colonnes ou un tableau à une colonne et plusieurs lignes
• Le constructeur :
• méthode permettant d’instancier un nouvel objet
• Elle porte le nom de la classe et n’a pas de type de retour
QUELQUES CONVENTIONS DE
JAVA
• Le nom d’une classe devrait commencer par une lettre majuscule
• Le nom d’une méthode ou d’une variable devrait commencer par une
lettre minuscule
• Dans le cas de nom venant de plusieurs mots, utiliser la notion en dos
de chameaux de préférence aux tirets, points, underscore ou tout autre
caractère spécial
• Ex: MaClasse, MaClasseEtudiant, nomEtudiant, nombreLivreAchete
• Les constantes se nomment en MAJUSCULE
LES MODIFICATEURS
• Les modificateurs sont des mots clés qui permettent en général de
définir la façon dont on accèdera aux méthodes, variables ou classes
dans les programmes où ils sont utilisé.
• On distingue plusieurs types de modificateurs en Java:
• Modificateurs d’accès : public, private, protected, default
• Un modificateur d’accès indique si les autres classes de l'application
pourront accéder ou non à la classe/méthode/membre (qualifié par la
suite d'« item »). Ces modificateurs sont au nombre de quatre :
• public : toutes les classes peuvent accéder à l'item
• protected : seules les classes dérivées et les classes du même package peuvent
accéder à l'item
• private : l'item est seulement accessible depuis l'intérieur de la classe où il est
défini.
• (par défaut) : sans modificateur d'accès, seules les classes du même package
peuvent accéder à l'item.
LES MODIFICATEURS
• Modificateurs d’accès : public, private, protected, default
LES MODIFICATEURS
• abstract
• Le modificateur abstract indique qu'une classe ou méthode est abstraite.
• Toute classe déclarée avec ce mot clé ne peut être instanciée
• final
• Ajouté devant un attribut, il le rend immuable, dès lors qu'il est initialisé
• Pour les types primitifs, final fige la valeur, pour les objets, final fige la
référence, et non la valeur de la référence
• Devant une variable locale, il a le même comportement que pour un attribut.
• Devant une méthode, il indique que cette méthode ne peut pas être modifiée
dans une classe dérivée.
• Devant une classe, il indique que cette classe ne peut pas avoir de sous-classe.
• static
• Le modificateur static indique, pour une méthode, qu'elle peut être appelée
sans instancier sa classe (syntaxe : Classe.methode()).
• Pour un attribut, qu'il s'agit d'un attribut de classe, et que sa valeur est donc
partagée entre les différentes instances de sa classe.
LES MODIFICATEURS
• synchronized
• Le modificateur synchronized indique que la méthode ne peut être exécutée que par un
thread à la fois. Le verrou ne s'active que pour l'objet sur lequel la méthode a été appelée
• transient
• Le modificateur transient indique que lors de la sérialisation de l'objet, cet attribut n'est
pas sérialisé et donc il est ignoré. Cela signifie que lorsque l'on désérialise l'objet,
l'attribut portant le modificateur transient n'est pas défini dans l'objet désérialisé.
• native
• Ce modificateur permet d'indiquer que cet item est défini dans une bibliothèque externe
écrite dans un autre langage de programmation, utilisant l'API JNI.
• strictfp
• Pour une méthode, une classe ou une interface, le modificateur strictfp (abréviation de
strict floating point) force la JVM à évaluer les opérations à virgules flottantes (sur les
double et float) conformément à la spécification Java, c'est-à-dire de la gauche vers la
droite. Cela permet d'avoir un comportement identique d'une JVM à une autre et d'éviter
certains dépassements de valeur limite pour les résultats intermédiaires.
• volatile
• Pour une variable, le modificateur volatile force la JVM, avant et après chaque utilisation
de la variable, à la rafraîchir à partir de la mémoire principale au lieu d'utiliser un cache
local. Cela permet de synchroniser la valeur de la variable entre plusieurs threads.
EXERCICE
Saisir et compiler les programmes suivant :
EXERCICE
LIRE LES ENTRÉES
CLAVIER
• En java, c’est la classe Scanner qui permet de prendre les
informations du clavier
• Pour récupérer une informations du clavier, il faut utiliser un
objet de cette classe
• Quelques méthodes pour récupérer les informations du clavier:
• nextLine() pour récupérer une chaine de caractère
• nextInt() pour récupérer un int
• nextLong() pour récupérer un long
• nextDouble pour récupérer un double
• nextByte() pour récupérer un byte
• Exemple
COMPILER UN PROGRAMME
MULTI-PACKAGE
• Créer ou choisir un dossier qui devra contenir les fichiers de votre
programme
• Créer un répertoire monPackage et enregistrer y la classe suivante
COMPILER UN PROGRAMME
MULTI-PACKAGE
• Dans le répertoire de votre programme la classe suivante
COMPILER UN PROGRAMME
MULTI-PACKAGE
• Ouvrir l’invite de commande et se déplacer dans le répertoire de votre
programme
• Aller dans le répertoire monPackage
• Compiler la classe Personne
• Revenir dans le répertoire du programme
• Compiler et exécuter la classe MainPers
• Créer un répertoire main dans le répertoire du programme et copier la
MainPers.java dans ce répertoire
• Ajouter la déclaration package main; au début du fichier (Première
ligne)
COMPILER UN PROGRAMME
MULTI-PACKAGE
• La nouvelle classe ressemble à ceci
Personne
- nom : String
La classe Principale va :
- prenom : String 1. Créer un objet des
- age : int différentes classes
- quartier : String
- pays : String 2. Prendre les informations
- sexe : String du clavier de chaque objet
+ donnerSesInfos () : String créer
...
3. Afficher les informations
de chaque objet à l’écran
Enseignant
Etudiant
- salaire : int
- matière : int - matricule : String
- montantVerse : int
+ donnerCours () : String
... + donnerInfos () : String
...
EXCEPTIONS
• Les exceptions représentent le mécanisme de gestion des erreurs
intégré au langage Java.
• Il se compose d'objets représentant les erreurs et d'un ensemble
de trois mots clés qui permettent de détecter et de traiter ces
erreurs (try, catch et finally ) mais aussi de les lever ou les
propager (throw et throws).
• Deux phases de traitement d’une Exception :
• La propagation qui permet de levée une Exception à fin de signaler à
la JVM qu’un code est potentiellement dangereux
• La capture qui permet de récupérer une exception survenue à fin de
poursuivre l’exécution du programme
• execution
• exception
EXEMPLE (SUITE)
EXEMPLE (SUITE)
EXEMPLE (SUITE)
EXEMPLE (SUITE)
GÉNÉRALITÉS
• Dans le modèle Objet, les données d’un objet quelconque sont perdues dès
qu’on sort de sa portée.
• Il existe des mécanismes pour garder les informations d’un objet afin de le
reconstruire une fois qu’il ne se trouve plus en mémoire
• Le principe ici est alors de sauvegarder les données, afin de les récupérées à
un moment quelconque.
• L’ensemble des classes qui vont permettre d’effectuer ces différentes tâches
constitueront la partie Modèle de notre application.
LES BASES DE DONNÉES
• Une base de données est un outil permettant de stocker et de retrouver
l'intégralité de données brutes ou d'informations en rapport avec un thème ou
une activité
• Elle est généralement constituée de tables, et chaque table dispose d’un
ensemble d’attributs, parmi lesquels on a un attribut primaire appelé
identifiant de la table,
• Le logiciel qui permet de gérer ce stockage s’appelle SGBD (Système de
Gestion des Bases de Données) en anglais DBMS
• Il existe plusieurs SGBD parmi lesquels:
• Oracle Database
• PostgreSQL
• MySQL (que nous utiliserons)
• Microsoft SQL Server
• MariaDB
• SQLite
LES BASES DE DONNÉES ET
JAVA
• Il existe deux technologies en Java pour la connexion à la base de données
• JDBC : Java DataBase Connectivity
• JPA : Java Persistance API
• Ces deux technologies permet la connexion des SGBD les plus Usuels grâce à
un API connector disponible sur le site Web du SGBD en question.
• La Java Persistence API (abrégée en JPA), est une interface de programmation
Java permettant aux développeurs d'organiser des données relationnelles dans
des applications utilisant la plateforme Java.
• La Java Persistence API repose essentiellement sur l'utilisation des annotations,
introduites dans Java 5. Elles permettent de définir facilement des objets métier,
qui pourront servir d'interface entre la base de données et l'application, dans le
cadre d'un mapping objet-relationnel.
JDBC AVEC MYSQL
• JDBC (Java DataBase Connectivity) est une interface de
programmation créée par Sun Microsystems — depuis racheté par
Oracle Corporation — pour les programmes utilisant la plateforme
Java.
• Elle permet aux applications Java d'accéder par le biais d'une
interface commune à des sources de données pour lesquelles il
existe des pilotes JDBC.
• Il s'agit d'une base de données relationnelle, et des pilotes JDBC
sont disponibles pour tous les systèmes connus de bases de
données relationnelles.
• Le pilote JDBC pour MySQL s’appel mysql-connector-java et est
disponible sur le site de MySQL.
JDBC AVEC MYSQL
• La première étape de la communication à une base de donnée est la
connexion.
• Elle se fait à partir de la méthode de classe Connection
getConnection(String url) de la classe DriverManager.
• Ex : Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=minty&password=greatsqldb");