Vous êtes sur la page 1sur 8

Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

Université Abdelhamid Mehri – Constantine 2


2018-2019 – Semestre 1

Développement d’applications mobiles

– Cours 4 –
Chapitre 4 : Langage Java
et programmation orienté objet (1/2)

Staff pédagogique
Nom Grade Faculté/Institut Adresse e-mail
Chaouche Ahmed-Chawki MCB Nouvelles Technologies ahmed.chaouche@univ-constantine2.dz

Etudiants concernés
Faculté/Institut Département Année Spécialité
Nouvelles Technologies IFA Licence 3 Technologie de l’Information (TI)
Nouvelles Technologies IFA Licence 3 Science de l’informatique (SCI)

Objectifs du cours 4
Comprendre le paradigme orienté objet
Assimiler la syntaxe du langage Java

© Dr. A.-C. Chaouche Page 1 à 8


Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

1. Langage Java
Java est un langage de programmation orienté objet, développé par l’entreprise Sun Microsystems en 1995, où
cette dernière a été rachetée en 2009 par l’entreprise Oracle. Une de ses plus grandes forces est son excellente
portabilité sur plusieurs systèmes d’exploitation tels que Windows, Linux ou Mac OS.
Java permet de développer de nombreuses sortes de programmes :
Des applications de bureau (Desktop)
Des applets (côté client)
Des applications Web (côté serveur)
Des applications mobiles
1.1. Classement des langages de programmation
le tableau suivant présente le classement des langages de programmation d’apèrs le classement de TIOBE, de
Septembre 2018 [1]:

N° Langages Types Ratio Evolution (2017)

- 1 Java 17,436% +4.75%

- 2 C 15,447% +8.06%

+1 3 Python 7,653% +4.67%

-1 4 C++ 7,394% +1.83%

+1 5 VB .Net 5,308% +3.33%

-1 6 C# 3,295% -1.48%

-1 7 PHP 2,775% +0.57%

-1 8 JavaScript 2,131% +0,11%

+18 9 SQL 2,062% +2,06%

1.2. Kit de développement de Java


Afin de développer en Java, il est nécessaire d’avoir le JDK (Java Development Kit) qui représente l’outillage
indispensable au développeur Java. Ce kit contient les outils nécessaires pour programmer en Java: compiler,
déboguer, exécuter, ou tester ses programmes Java. Le JDK contient plusieurs outils, voici ceux qui sont les
plus importants pour le développement Java :
Le compilateur : javac
Le décompilateur : javap
L’interpréteur Java (appelé aussi machine virtuelle Java) : java
L’outil de génération de documentation : javadoc
L’outil de création d’archive livrables pour vos clients : jar

© Dr. A.-C. Chaouche Page 2 à 8


Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

Le compilateur Java ne produit pas directement un fichier exécutable, mais du code intermédiaire appelé
bytecode (*.class). Pour exécuter le programme, il faut utiliser la machine virtuelle Java qui va interpréter le
bytecode en vue de l'exécution du programme.
La machine virtuelle Java (JVM) est donc un outils d'émulation qui exécute des programmes compilés sous
forme de bytecode Java, en produisant les mêmes résultats quelle que soit la plateforme. De plus, comme toute
machine vituelle, la JVM comport un Garbage collector (ramasse-miettes) consistant à recycler la mémoire
préalablement allouée puis inutilisée.
Afin de simplifier le développement, un outil de développement, appelé IDE (Integrated Development
Environment), est souvent utilisé pour augmenter la productivité des développeurs en automatisant une partie
des activités. Il comporte entre autre un éditeur de texte, un ensemble d’outils ainsi qu'un débogueur qui permet
d'exécuter ligne par ligne le programme. Comme tout langage, Java possède plusieurs IDE, nous citons ceux
qui sont les plus utilisés : Eclipse [2], NetBeans [3] et IntelliJ IDEA [4].
Java existe en plusieurs éditions :
Java Standard Edition (Java SE) pour les applications Desktop
Java Micro edition (Java ME) pour les applications mobiles ou embarquées
Java Entreprise edition (Java EE) pour les applications Web
Java FX, pour un environnement client riche
JavaCard (OS) pour carte à puce
1.3. Convention de nommage
La communité des développeurs se sont mis d’accord pour proposer un ensemble de conventions et de règles
pour faciliter la compréhension et donc la maintenance du code source. Les développeurs devraient utiliser ces
règles dans leur code afin de mieux le structurer sûrtout dans le cadre d'un travail en équipe. La définition de
ces règles est importante pour plusieurs raisons [5] :
La majorité du temps passé à coder est consacrée à la maintenance évolutive et corrective d'une
application
Ce n'est pas toujours, voire rarement, l'auteur du code qui effectue ces maintenances
Ces règles facilitent la lisibilité et donc la compréhension du code
Voici les règles qui sont défini pour Java :
Nom de package (dot.case) : par exemple :
ntic.licence.dam, com.google.maps
Nom de classe (PascalCase) : par exemple :
Activity, HttpSession
Nom de méthode (camlCase) : par exemple :
run(), getBackground()
Instance de classe/variable locale (camlCase) : par exemple :
i, myWidth, currentUser, threadList
Constante (SCREAMING_SNAKE_CASE) : par exemple :
LENGTH_SHORT, DEFAULT_CONTEXT

© Dr. A.-C. Chaouche Page 3 à 8


Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

2. Java et le paradigme orienté objet


2.1. Objet et classe
L'idée de base de la programmation orientée objet est de rassembler dans une même entité, appelée objet, les
données/propriétés (consituant son état) et les fonctions/méthodes (vus comme son comportement) qui s'y
appliquent. Les objets peuvent envoyer des messages les uns aux autres à travers des appels aux méthodes.
1 public class A {
2 public String a1;
3 package Stri²ng a2;
4 protected String a3;
5 private String a4;
6
7 public void op1() { ... }
8 public void op2() { ... }
9 }

Une classe peut être comparée à un moule qui, lorsque nous le remplissons, nous donne un objet ayant la forme
du moule ainsi que toutes ses caractéristiques. Une classe est un ensemble de données et de comportements
communs regroupées dans une même entité. Une classe est donc vue comme une description abstraite d'un
objet tandis qu’un objet correspond à une instance d’une classe :

1 A obj = new A();

2.2. Classe abstraite et interface


La classe abstraite est une classe qui contient une ou plusieurs méthodes abstraites (qui n'ont pas de définition
explicite). Une classe déclarée abstract ne peut pas être instanciée : il faut définir une classe qui hérite de
cette classe et qui implémente les méthodes abstraites.
1 public abstract class A {
2
3 ...
4 public void op1() { ... }
5 }

Une interface est une classe abstraite dont toutes les méthodes sont abstraites et dont tous les attributs sont
constants. N'ayant pas de constructeur, une interface est vue comme un contrat auquel une classe qui
l’implémente doit respecter. Plusieurs interfaces peuvent être implémentées dans une même classe.

1 public interface Ia {
2 ...
3 public int add(int op1, int op2);
4 }
5
6
7
8 public class A implements Ia {
9 ...
10 public int add(int op1, int op2) { ... }
11 }

2.3. Héritage
la notion d'héritage est l'un des fondements de la programmation orientée objet. Grâce à l'héritage, les objets
d'une classe fille (sous-classe) ont accès aux données et aux méthodes de la classe mère (super-classe) et
peuvent les étendre. L'héritage facilite la réutilisation du code et la gestion de son évolution.

© Dr. A.-C. Chaouche Page 4 à 8


Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

En Java, il n'y a pas d'héritage multiple, c’est-à-dire, une classe peut avoir plusieurs sous-classes, mais elle
peut avoir qu'une seule classe mère.
1 public class A {
2 ...
3 public int add(int op1, int op2);
4 }
5
6 public class B extends A {
7 ...
8 public int substract(int op1, int op2) { ... }
9 }

2.4. Encapsulation
En Java, la notion d’encapsulation permet de sécuriser l'accès aux données d'une classe. Ainsi, les données
déclarées private à l'intérieur d'une classe ne peuvent être accédées et modifiées que par des méthodes
définies dans la même classe. Si une autre classe veut accéder aux données de la classe, l'opération n'est
possible que par l'intermédiaire d'une méthode appelée « accesseur ».
Un accesseur est une méthode publique qui donne l'accès à une variable privée. Il peut y avoir pour une
variable, un accesseur en lecture (getter) et un autre en écriture (setter). Par convention, les accesseurs en
lecture commencent par get et les accesseurs en écriture commencent par set, voici un exemple :
1 public class A {
2
3 private int name;
4 ...
5 public int getName(){ ... }
6 }

Le tableau suivant illustre la portée des varibales/méthodes pour chacun des modicateurs possible en Java :

Modificateur Classe Package Sous-classe Partout

public

protected
[pas de modificateur]

private

2.5. Surcharge
La surcharge (overload) d’une méthode ou d’un constructeur permet de définir plusieurs fois une même
méthode/constructeur avec le nombre et/ou le type des paramètres différent. Le compilateur choisit la méthode
qui doit être appelée en fonction du nombre et du type des arguments.
1 public class A {
2 ...
3 public int add(int op1, int op2) { ... }
4 public float add(float op1, float op2) { ... }
5 }

2.6. Redéfinition
La redéfinition (overriding) permet à une sous-classe de fournir une implémentation dédiée d'une méthode
héritée de sa super-classe, cependant les signatures des deux méthodes doivent être les mêmes. Les méthodes
sont redéfinies avec le même nom, les mêmes types, le même nombre d'arguments et les mêmes exceptions

© Dr. A.-C. Chaouche Page 5 à 8


Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

propagées, sinon il s'agit d'une surcharge. Par ailleurs, pour appeler la méthode add(…) de la super-classe A, il
faut exécuter super.add(…).

1 public class A {
2 ...
3 public int add(int op1, int op2) { ... }
4 }
5
6 public class B extends A {
7 ...
8 @Override
9 public int add(int op1, int op2) { ... }
10 }

2.7. Polymorphisme
Le polymorphisme consiste à attribuer à un objet d’une super-classe (A) une instance de la sous classe (B). Ceci
permet de manipuler des objets sans vraiment connaître leur type. La gestion du polymorphisme est assurée
par la JVM dynamiquement à l'exécution.
1 public class A {
2 ...
3 public int add(int op1, int op2) { ... }
4 }
5
6 public class B extends A {
7 ...
8 public int substract(int op1, int op2) { ... }
9 }
Un upcasting de la classe fille vers la classe mère permet d’affecter à une référence d'une classe (A) n'importe
quel objet d'une de ses sous-classes (B).
Un downcasting consite à considérer une référence d’une classe (A) comme un objet d’une de ses sous-classes
(B). Cependant, il faut informer le compilateur de cette possible erreur en castant la référence.
Le upcasting est toujours autorisé (ligne 1), mais le downcasting impose une vérification de type (ligne 4) et
peut déclencher une exception de type ClassCastException.

1 A a = new B(); ok (upcasting)


2 int res1 = a.add(2,3);
3 int res2 = a.substract(5,4); Erreur syntaxique
4 if (a instanceof B)
5 int res3 = ((B)a).substract(5,4); ok (downcasting)

2.8. Associations
La relation d'association permet de relier 2 classes, en indiquant qu'une classe possède une référence d’une
autre classe. Les associations peuvent être décrites comme une relation "has-a" et peuvent être
unidirectionnelle ou bidirectionnelle. Dans la phase de conception, une association peut être soit une agrégation
ou une composition :
L'agrégation est une association unidirectionnelle non symétrique, où une classe est une partie d'une
autre classe. L'agrégation est une relation de type « ensemble/élément ». Un objet de la classe
« ensemble » est composé d'un ou plusieurs objets de la classe « élément » [6].
La composition est une agrégation forte qui lie les cycles de vie entre l’ensemble et le(s) élément(s),
où un élément n’existe pas sans être dans un ensemble et la suppression de l’ensemble entraîne la
suppression des éléments. De plus, les éléments appartiennent de manière exclusive à
l’ensemble, contrairement à l’agrégation qui autorise qu’un élément appartienne à plusieurs
ensembles.

© Dr. A.-C. Chaouche Page 6 à 8


Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

En Java, les associations entre classes sont tout simplement représentées par des références. Les classes
associées possèdent en attribut une ou plusieurs références vers l'autre classe. Le nombre de référence dépend
de la cardinalité. Les valeurs de cardinalité possibles sont : Un et un seul (1..1 ou 1), zéro ou un (0..1), de m à
n (m..n), de zéro à plusieurs (0..* ou *), et de un à plusieurs (1..*). Lorsque la cardinalité est 1 ou 0..1, il n'y a
qu'une seul référence de l'autre classe, cependant quand la cardinalité est 0..* ou 1..*, y a une collection de
références de l’autre classe, représenté généralement par des listes [7].
Comme exemple, une université est composée de plusieurs facultés, et chaque faculté est un agrégat de
plusieurs professeurs. La destruction de l'université implique la destruction des facultés qui la composent, alors
que la destruction d'une faculté n'implique pas la destruction des professeurs liés à cette faculté par une relation
d'agrégation.
Voici un exemple d’une association de composition (unidirectionnelle) avec la cardinalité one-to-one :
1 public class A {
2 private B rb;
3 public void addB( B b ) {
4 this.setB( b );
5 }
6 public B getB() {
7 return rb;
8 }
9 public void setB( B b ) {
10 this.rb = b;
11 }
12 }
13 public class B {
14 ...
15 // La classe B ne connaît pas l'existence de la classe A
16 }

Liens utiles
Les étudiants peuvent consulter ces références pour approfondir leurs connaissances dans ce cours:
Java SE : https://docs.oracle.com/javase/8/docs/api/
Outil et JDK (Java SE) : http://www.oracle.com/technetwork/java/javase/downloads/index.html
Java et paradigme orienté objet : http://java.developpez.com/cours/
Associations sous Java : http://laurent-audibert.developpez.com/Cours-UML/?page=diagramme-classes#L3-3

Références

[1] T. s. BV, «TIOBE Index for September 2018,» 4 Septembre 2018. [En ligne]. Available:
https://www.tiobe.com/tiobe-index/.
[2] The Eclipse Foundatio, «Eclipse Oxygen,» Juin 2017. [En ligne]. Available: http://www.eclipse.org/.
[3] Oracle Corporation, «NetBeans IDE - The Smarter and Faster Way to Code,» 2017. [En ligne].
Available: https://netbeans.org/features/index.html.
[4] JetBrains, «Intellij IDEA,» 2017. [En ligne]. Available: https://www.jetbrains.com/idea/.
[5] J.-M. Doudoux, «Développons en Java - Des normes de développement,» 2016. [En ligne]. Available:
https://www.jmdoudoux.fr/java/dej/chap-normes-dev.htm.
[6] P. Valicov, «Bases de la conception orientée objet - Concepts objet (Diagrammes de Classes),» 2017.
[En ligne]. Available: http://pageperso.lif.univ-
mrs.fr/~petru.valicov/Cours/M2104/Diagrammes_classes_x4.pdf.

© Dr. A.-C. Chaouche Page 7 à 8


Développement d’Applications Mobiles (DAM) 2018-2019 – Semestre 1 Université Constantine 2

[7] S. Laporte, «Les relations entre classes,» 2017. [En ligne]. Available:
http://stephanie.laporte.pagesperso-orange.fr/Pdf/LES%20RELATIONS%20ENTRE%20OBJETS.htm.

© Dr. A.-C. Chaouche Page 8 à 8

Vous aimerez peut-être aussi