You are on page 1of 34

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.

fr

ENSTA : cours IN204 Introduction à JAVA et UML
Olivier Sigaud LIP6/AnimatLab olivier.sigaud@lip6.fr 01.44.27.88.53

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 1

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Plan général du cours IN204
• • • • • • • • • • • • Des langages procéduraux à la POO Construction, destruction, mémoire Encapsulation, visibilité, packages Héritage (deux cours) Présentation du projet 2004-2005 Conduite de projet Langage UML (deux cours) Exceptions, conteneurs Interfaces graphiques Conduite de projets (suite) Composants Conception avancée
Page : 2

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Plan du cours 1

• De la programmation procédurale à la programmation orientée objets • La décomposition • Les classes
– Les attributs – Les méthodes

• Construction d'un objet • Exemple

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 3

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Programmation << classique >>

• Objectif : écrire une séquence d'instructions de telle façon qu'un ordinateur produise une sortie appropriée pour une certaine entrée • Ingrédients :
• • • • • • décomposition en fonctions variables passages de paramètres tests boucles structures

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 4

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Décomposition fonctionnelle

• • • •

Le programme est une fonction principale int main(argc, argv[]) Cette fonction appelle des sous-fonctions Qui en appellent d'autres…
main()

init()

calcule()

trie()

affiche() permute()
Page : 5

factorise()

compare()

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Savoir décomposer

• Une bonne décomposition en fonctions fait apparaître des sous-fonctions << naturelles >>, i.e. qui ont un sens autonome • Plus un algorithme est complexe, plus il faut le décomposer en nombreuses fonctions plus simples • On doit comprendre immédiatement ce que fait toute fonction • Erreur : tout mettre dans une grosse fonction

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 6

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Variables

• Une variable correspond à un emplacement mémoire • C'est un emplacement alloué pour faire des calculs • Le nom de la variable permet au compilateur de retrouver l'emplacement. • On appelle << portée >> d'une variable l'espace au sein du programme où cette variable est connue

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 7

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Types de base et opérateurs

• • • •

Booléens : boolean => true, false Entiers : short, int, long (entiers signés) Flottants : float, double (IEEE 754) Caractères : char (Unicode)

• && : and || : or • == != >= <=

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 8

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Déclaration, allocation, initialisation
double epsilon;
epsilon

double epsilon = 0.005;
epsilon

0.005

• • • •

Une variable est une adresse en mémoire La déclaration induit une allocation de mémoire Une variable non initialisée vaut : null, false, 0 Une variable peut être initialisée lorsqu'elle est déclarée : type nomVariable = valeur; • Initialisation = déclaration + affectation
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO
Page : 9

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Blocs et variables locales

Tout ensemble d'instruction entre "{}" est un bloc Une fonction est un bloc particulier Dans une fonction, il peut y avoir plusieurs blocs La portée d'une variable locale est le bloc dans lequel elle est définie • L'espace est alloué temporairement, le temps pendant lequel le pointeur d'instructions parcourt le bloc. • • • •

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 10

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Variables globales

• Variables globales : visibles dans tout le programme, allouées pour toute la durée du programme • NB : l'usage des variables globales est plus facile à première vue, mais inefficace et déstructurant • Inefficace : ne sont pas stockées dans la pile, mais dans la mémoire globale => accès plus long • Déstructurant : éparpillement des données et des fonctions • Elles tendent à disparaître en POO

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 11

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Types composés

• Tableaux :
– – – – int[] montableau; // ne réserve pas la place mémoire !!! int montableau[]; // ne réserve pas la place mémoire !!! int[5] montableau; // ne compile pas !!! int montableau[5]; // ne compile plus !!!

• Indices : de 0 à n-1 • Classes • Interfaces

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 12

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Déclaration de tableaux
valeurs[1] = 0.005;
valeurs[0] valeurs[1]

double valeurs[]; valeurs = new double[5];
valeurs[0]

0.005

valeurs[2]

valeurs[4]

valeurs[4]

Les cases du tableau sont allouées au new ou n=4; valeurs = new double[n+1];
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO
Page : 13

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Dimensions multiples
valeurs[0][0]

Object valeurs[5][5];
valeurs[0] valeurs[0][2] valeurs[2] valeurs[0][4] valeurs[4] valeurs[1][0]

valeurs[1][2]

valeurs[1][4]
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO
Page : 14

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Déclaration et allocation simultanée

double valeurs[] ={0.2,6.3,7.456,80.0,10.10}; System.out.println(valeurs.length); => 5
Vérification de non débordement : IndexArrayOutOfBounds

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 15

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Structures

• Variables complexes constituées de plusieurs éléments plus simples
struct Camion { int nbRoues; int nbRemorques; float longueur; }

• Usage : moncamion.nbRoues = 18; • Constitue le point de départ de la programmation orientée objets
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 16

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Programmation orientée objets

• Tous les ingrédients de la programmation procédurale classique sont présents • Mais la décomposition en arbre de fonctions n'est pas assez structurante pour des programmes très complexes • Structurer le programme autour des objets manipulés • Les traitements sont associés aux objets • Raisonner dans le langage du problème • Séparation plus claire entre données et traitements

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 17

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Décomposition classique en fonctions
main() Données

init()

calcule() Données

factorise() trie() compare() permute()

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 18

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Décomposition orientée objets
Données Données

init()

calcule() factorise()

trie() compare() permute()

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 19

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Les classes

• Les programmes manipulent différents objets • Chaque objet est une instance d'une classe • Par exemple, le mot << langage >> est un représentant de la classe des mots. • Une classe désigne un type générique dont les objets sont des instances • Un programme est structuré sous forme d'un ensemble de classes qui se partagent les traitements à effectuer

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 20

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Les attributs

• Les attributs d'une classe sont les éléments qui composent les objets de cette classe • Tous les attributs sont dotés d'un type défini au niveau de la classe (autre classe ou type de base) • Les attributs sont vus comme des variables globales internes à un objet • La portée d'un attribut est l'objet dans lequel il est défini • L'attribut d'un objet garde sa valeur d'une méthode à l'autre tant qu'aucune méthode ne le modifie

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 21

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Usage des attributs

• Les attributs servent à représenter diverses relations
– caractéristiques ou qualités d'un objet – composants d'un objet complexe – objets en relation avec l'objet

• Lorsqu'on utilise un attribut dans une méthode, il ne faut pas rappeler son type • Eviter d'avoir une variable dans une méthode qui porte le même nom qu'un attribut

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 22

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Les méthodes

• A chaque classe sont associées des méthodes, qui correspondent aux traitements que le programme peut effectuer sur les objets de cette classe • Par exemple, on peut épeler un mot, l'imprimer, le réécrire à l'envers, etc. • Il faut s'efforcer d'associer à une classe des méthodes qui lui sont naturelles • Surcharge : une même classe peut avoir plusieurs méthodes de même nom, mais avec des paramètres différents

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 23

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Méthodes et fonctions
C JAVA class Voiture { Embrayage embrayage; Moteur moteur; BoiteVitesse boite; public void demarrer() { embrayage.enfoncer(); moteur.faireTourner(.); boite.passerVitesse(1); embrayage.relacher(); }

struct Voiture { Embrayage embrayage; Moteur moteur; BoiteVitesse boite; }; void demarrer(Voiture v) { enfoncer(v.embrayage); faireTourner(v.moteur); passerVitesse(v.boite, 1); relacher(v.embrayage); }

}
Page : 24

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

L’objet comme contexte

class Nombre { int valeur; //attribut Nombre(int val){//constructeur valeur=val; } int ajoute(int val){ return (valeur + val); } public static void main(String args[]) { Nombre monNombre = new Nombre(8); int resultat = monNombre.ajoute(5); System.out.println(resultat); } }
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO
Page : 25

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Objets, Classes et Instances

• Une classe est une description générique pour un ensemble d’objets • Les objets sont des instances de cette classe • Chaque objet est défini par l’ensemble des valeurs que prennent ses attributs

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 26

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Les constructeurs

• Pour utiliser un objet, il est nécessaire de commencer par le construire • Construire = allouer un emplacement en mémoire • C'est le rôle des constructeurs • Un constructeur est une méthode qui porte le même nom que la classe et ne renvoie rien • L'appel du constructeur se fait à l'aide du mot clef << new >> • New renvoie l'adresse de la zone allouée

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 27

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Exemple de construction

class Voiture { double longueur; public Voiture(double lg) { longueur = lg; } public static void main(String args[]) { Voiture mavoiture = new Voiture(2.80); } }
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO
Page : 28

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Allocation mémoire d'un objet
mavoiture Voiture objet créé avec new

mavoiture = new Voiture(); La référence est une sorte de << télécommande >> sur l'objet

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 29

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Oubli de l'allocation
null

mavoiture

Voiture mavoiture; mavoiture.demarre(); Provoque "NullPointerException" C'est une erreur archi-fréquente !!!

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 30

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Exemple de classe personnelle

class Voiture { double length; String name; double getLength() { return length; } void setLength(double len) { length = len; } void setName(String nom) { name = nom; } }
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 31

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Exemple (suite)

class Voiture { … Voiture() { } Voiture(string nom, double len) { setName(nom); setLength(len); } public static void main(String args[]) { Voiture v = new Voiture(); v.setName(« coccinelle »); v.setLength(3.5); //ou Voiture v = new Voiture (« coccinelle », 3.5); } }
Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO
Page : 32

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Lancer Java

• Mettre la classe MaClasse dans un fichier MaClasse.java (une seule classe par fichier) • Taper javac MaClasse.java permet de générer du bytecode exécutable par la machine virtuelle (JVM) • Taper java MaClasse permet d'exécuter la méthode main() de la classe MaClasse si elle en a une.

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 33

Ecole Nationale Supérieure de Techniques Avancées (ENSTA) - http://www.ensta.fr

Youpi la pause !

Ce document est mis à votre disposition par l'ENSTA sous couvert de la licence "Creative Commons" Introduction à JAVA : la POO

Page : 34