Vous êtes sur la page 1sur 34

Ecole Nationale Suprieure de Techniques Avances (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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Plan gnral du cours IN204


Des langages procduraux la POO Construction, destruction, mmoire Encapsulation, visibilit, packages Hritage (deux cours) Prsentation du projet 2004-2005 Conduite de projet Langage UML (deux cours) Exceptions, conteneurs Interfaces graphiques Conduite de projets (suite) Composants Conception avance
Page : 2

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

Ecole Nationale Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Plan du cours 1

De la programmation procdurale la programmation oriente objets La dcomposition Les classes


Les attributs Les mthodes

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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Programmation << classique >>

Objectif : crire une squence d'instructions de telle faon qu'un ordinateur produise une sortie approprie pour une certaine entre Ingrdients :
dcomposition en fonctions variables passages de paramtres 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Dcomposition 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Savoir dcomposer

Une bonne dcomposition en fonctions fait apparatre des sous-fonctions << naturelles >>, i.e. qui ont un sens autonome Plus un algorithme est complexe, plus il faut le dcomposer en nombreuses fonctions plus simples On doit comprendre immdiatement 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Variables

Une variable correspond un emplacement mmoire C'est un emplacement allou pour faire des calculs Le nom de la variable permet au compilateur de retrouver l'emplacement. On appelle << porte >> 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Types de base et oprateurs

Boolens : boolean => true, false Entiers : short, int, long (entiers signs) Flottants : float, double (IEEE 754) Caractres : 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Dclaration, allocation, initialisation


double epsilon;
epsilon

double epsilon = 0.005;


epsilon

0.005

Une variable est une adresse en mmoire La dclaration induit une allocation de mmoire Une variable non initialise vaut : null, false, 0 Une variable peut tre initialise lorsqu'elle est dclare : type nomVariable = valeur; Initialisation = dclaration + 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 Suprieure de Techniques Avances (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 porte d'une variable locale est le bloc dans lequel elle est dfinie 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Variables globales

Variables globales : visibles dans tout le programme, alloues pour toute la dure du programme NB : l'usage des variables globales est plus facile premire vue, mais inefficace et dstructurant Inefficace : ne sont pas stockes dans la pile, mais dans la mmoire globale => accs plus long Dstructurant : parpillement des donnes et des fonctions Elles tendent disparatre 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Types composs

Tableaux :
int[] montableau; // ne rserve pas la place mmoire !!! int montableau[]; // ne rserve pas la place mmoire !!! 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Dclaration 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 alloues 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 Suprieure de Techniques Avances (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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Dclaration et allocation simultane

double valeurs[] ={0.2,6.3,7.456,80.0,10.10}; System.out.println(valeurs.length); => 5


Vrification de non dbordement : 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Structures

Variables complexes constitues de plusieurs lments plus simples


struct Camion { int nbRoues; int nbRemorques; float longueur; }

Usage : moncamion.nbRoues = 18; Constitue le point de dpart de la programmation oriente 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Programmation oriente objets

Tous les ingrdients de la programmation procdurale classique sont prsents Mais la dcomposition en arbre de fonctions n'est pas assez structurante pour des programmes trs complexes Structurer le programme autour des objets manipuls Les traitements sont associs aux objets Raisonner dans le langage du problme Sparation plus claire entre donnes 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Dcomposition classique en fonctions


main() Donnes

init()

calcule() Donnes

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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Dcomposition oriente objets


Donnes Donnes

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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Les classes

Les programmes manipulent diffrents objets Chaque objet est une instance d'une classe Par exemple, le mot << langage >> est un reprsentant de la classe des mots. Une classe dsigne un type gnrique 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Les attributs

Les attributs d'une classe sont les lments qui composent les objets de cette classe Tous les attributs sont dots d'un type dfini au niveau de la classe (autre classe ou type de base) Les attributs sont vus comme des variables globales internes un objet La porte d'un attribut est l'objet dans lequel il est dfini L'attribut d'un objet garde sa valeur d'une mthode l'autre tant qu'aucune mthode 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Usage des attributs

Les attributs servent reprsenter diverses relations


caractristiques ou qualits d'un objet composants d'un objet complexe objets en relation avec l'objet

Lorsqu'on utilise un attribut dans une mthode, il ne faut pas rappeler son type Eviter d'avoir une variable dans une mthode qui porte le mme 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Les mthodes

A chaque classe sont associes des mthodes, 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 rcrire l'envers, etc. Il faut s'efforcer d'associer une classe des mthodes qui lui sont naturelles Surcharge : une mme classe peut avoir plusieurs mthodes de mme nom, mais avec des paramtres diffrents

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

Page : 23

Ecole Nationale Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Mthodes 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Lobjet 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Objets, Classes et Instances

Une classe est une description gnrique pour un ensemble dobjets Les objets sont des instances de cette classe Chaque objet est dfini par lensemble 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Les constructeurs

Pour utiliser un objet, il est ncessaire de commencer par le construire Construire = allouer un emplacement en mmoire C'est le rle des constructeurs Un constructeur est une mthode qui porte le mme 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 alloue

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

Page : 27

Ecole Nationale Suprieure de Techniques Avances (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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Allocation mmoire d'un objet


mavoiture Voiture objet cr avec new

mavoiture = new Voiture(); La rfrence est une sorte de << tlcommande >> 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 Suprieure de Techniques Avances (ENSTA) - http://www.ensta.fr

Oubli de l'allocation
null

mavoiture

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

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

Page : 30

Ecole Nationale Suprieure de Techniques Avances (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 Suprieure de Techniques Avances (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 Suprieure de Techniques Avances (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 gnrer du bytecode excutable par la machine virtuelle (JVM) Taper java MaClasse permet d'excuter la mthode 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 Suprieure de Techniques Avances (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