Cet ouvrage fait partie de la bibliothèque YouScribe
Obtenez un accès à la bibliothèque pour le lire en ligne
En savoir plus

Programmation Première partie

De
15 pages
Niveau: Supérieur, Master

  • mémoire


Programmation 1 Première partie Thi-Bich-Hanh Dao Master CCI – Université d'Orléans Année 2011-2012 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 1 / 57 Le module Programmation 1 Organisation Cours : 10 séances de 2h le jeudi de 8h à 10h TD : 10 séances de 2h30 le lundi de 15h15 à 17h45 TP : 10 séances de 2h30 le jeudi de 13h30 à 16h Les intervenants Cours et TD : TP : Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 2 / 57 Evaluation Contrôle continu CC écrit Exercices à rédiger chaque semaine : sujet distribué le lundi en TD et à rendre avant le TD suivant Note CC = moyenne pondérée des exercices Contrôle terminal Examen écrit Note finale Note finale = moyenne pondérée de CC et de CT Attention : note éliminatoire si inférieur à 7 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 3 / 57 Références Livre : Penser en Java, Bruce Eckel (version française du livre Thingking in Java) Sur la toile : Ressource du cours sur le site du département : http ://www.

  • void clear

  • programmation orienté

  • terminal editeur de texte

  • affectation instruction conditionnelle

  • java

  • instruction de contrôle répétitif


Voir plus Voir moins

Vous aimerez aussi

Le module Programmation 1
OrganisationProgrammation 1
Cours : 10 séances de 2h le jeudi de 8h à 10hPremière partie
TD : 10 séances de 2h30 le lundi de 15h15 à 17h45
TP : 10 de 2h30 le jeudi de 13h30 à 16h
Thi-Bich-Hanh Dao
Master CCI – Université d’Orléans Les intervenants
Cours et TD : thi-bich-hanh.dao@univ-orleans.fr
Année 2011-2012
TP : frederic.dabrowski@univ-orleans.fr
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 1 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 2 / 57
Evaluation Références
Contrôle continu
CC écrit
Exercices à rédiger chaque semaine : Livre : Penser en Java, Bruce Eckel (version française du livre
￿ Thingking in Java)sujet distribué le lundi en TD et à rendre avant le TD suivant
Sur la toile :Note CC = moyenne pondérée des exercices
￿ Ressource du cours sur le site du département :
http ://www.univ-orleans.fr/sciences/info/ressources/Modules/
Contrôle terminal
master2/mastercci/master-cci-programmation-1/
Examen écrit ￿ Site developpez :
http ://java.developpez.com/cours/
Note finale
Note finale = moyenne pondérée de CC et de CT
Attention : note éliminatoire si inférieur à 7
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 3 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 4 / 57Plan du module Plan de la première partie
1 Introduction : objet, classe, élémentaires de programmation
2 Instruction de contrôle conditionnel
3 Abstraction, encapsulation et modularité Introduction à la programmation orienté objet
4 Fonctions récursives Objets de Java
5 Instruction de contrôle répétitif Classes d’objets
6 Tableaux Instruction de base : affectation
7 Bibliothèque de classes Java Instruction conditionnelle
8 Interface et implantation
9 Héritage
10 Exception et entrée/sortie en Java
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 5 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 6 / 57
Introduction à la POO Environnements de programmation
Toute chose est un objet BlueJ
￿ ￿on peut stocker des données dans un objet simple d’utilisation
￿ ￿on peut aussi demander à un objet de faire des opérations sur on peut créer, voir et envoyer des messages à des objets d’une
lui-même façon visuelle
￿ facile pour tester des programmes indépendantsUn programme est un ensemble d’objets se disant les uns aux
autres quoi faire en s’envoyant des messages NetBeans, Eclipse, ...
￿ ￿pour demander à un objet, on lui envoie un message environnements plus riches
￿ gestion simplifiée des projets comprenants plusieurs classesChaque objet a son propre espace de mémoire composé d’autres
￿ demande plus ou moins de temps pour apprendre à utiliserobjets
Editeurs de texte et terminalChaque objet est d’un type précis
￿ editeur de texte pour éditer le code source et terminal pour
￿ on dit que chaque objet est une instance d’une classe
compiler et lancer le programme
Tous les objets d’un type particulier peuvent recevoir le même ￿ sans apprentissage d’utilisation
message ￿ demande Makefile pour gérer des projets comprenant plusieurs
￿ le style de ces message est défini dans la classe de ces objets classes
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 7 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 8 / 57Quelques conventions/restrictions Les objets de Java
Les objets Java modélisent les objets d’un problème donnéLe nom des variables, classes, objets, etc. se compose des
￿ ex : un cercle, un triangle, une personne, ...lettres, des chiffres et de _
Les objets sont créés à partir de classes
Le nom des classes se commence avec un majuscule
￿ la classe décrit les types de données que ses objets contiennent
Le nom des variables et des objets se commence avec un ￿ la décrit aussi types de messages que ses objets peuvent
minuscule recevoir
￿ les objets sont des instances de classesUne instruction par ligne
￿ ex : un cercle donné est une instance de la classe Cercle
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 9 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 10 / 57
Objets et classes Structure d’une classe
Un objet possède des champs (ou attributs) décrits dans le texte Chaque classe déclare deux composants
de sa classe Les champs (ou les attributs)
￿ ex : Cercle déclare pour chaque cercle un diamètre, un centre (x,y),
￿ indiquent le type des données que les objets de la classe
une couleur, s’il est ou non visible
contiennent
￿ ex : cercle1 est une instance de Cercle, il est bleu, de diamètre 10
￿ chaque donnée est soit une valeur d’un type primitif soit un objet
et à la position (10,20)
d’une autre classe
Une classe déclare aussi des méthodes, c’est-à-dire les Les méthodes
messages compris par ses objets
￿ indiquentlesmessagesquelesobjetsdelaclassepeuventrecevoir
￿ ex : un Cercle peut apparaître (makeVisible), être déplacé
￿ chaque méthode possède une signature
horizontalement (moveHorizontal), ...
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 11 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 12 / 57Types de données Signature de méthodes
Chaque méthode possède une signature unique, qui se compose
en 3 parties
Les classes d’objets :
￿ le type de la valeur renvoyée
￿ de la librairie Java : String, Integer, Double,...
￿ le nom de la méthode
￿ classes définies par utilisateur : Cercle, Triangle, Personne,...
￿ la liste des paramètres et leur type (cette partie est facultative)
Les types primitifs : les données de type primitif ne sont pas des
void makeVisible()
objets
void changePosition(int newX, int newY)
￿ nombres :int, float, double, byte, long, short
￿ Pour envoyer un message à un objet : les paramètres sontcaractères :char
￿ booléens :boolean, deux valeurs possiblestrue etfalse remplacés par des valeurs du type
cercle1.makeVisible()
cercle2.changePosition(50,100)
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 13 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 14 / 57
L’état d’un objet La « notation pointée »
Chaque objet dispose d’un état représenté par les valeurs Le point «.» possède plusieurs significations dans le langage Java
stockées dans ses champs
Il représente la virgule dans un nombre approché :3.1416
Un objet de la classe Circle possède 5 champs (voir ex.)
Il sépare le nom d’un objet du méthode qui lui est envoyé
La valeur du champs diameter d’un objet cercle1 de la classe cercle1.makeVisible()=⇒ demande à cercle1 de devenir visible
Circle s’obtiendra par l’expression : cercle1.diameter
Il sépare le nom d’un objet du nom d’un de ses champs
Lorsqu’on envoie un message à un objet en invoquant l’une de cercle1.color=⇒ prendre la couleur de cercle1
ses méthodes, il se peut que l’état de l’objet change (voir ex.)
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 15 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 16 / 57Une classe Calculette Méthode avec ou sans résultat retourné
class Calculette { Soit cal1 une instance de la classe Calculette
int screen;
void clear() est une méthode qui ne retourne pas de résultatvoid clear() {
cal1.clear(=⇒ cal1 obéit, sa variable cal1.screen est mise à 0,this.screen = 0;
mais il ne répond pas}
int getScreen() est une méthode qui retourne un résultat de typevoid addToScreen(int n) {
intthis.screen = this.screen+1;
int v = cal1.getScreen()}
=⇒ on affecte à v la valeur de cal1.screenint getScreen() {
return this.screen; getScreen() est une méthode d’accès (un accesseur). Le nom des
} accesseurs commence en général par get
}
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 17 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 18 / 57
Les différentes variables de cette classe Les expressions
La classe Calculette comporte deux sortes de variables : Les expressions représentent une valeur typée
￿ screen est le nom d’un champ : variable d’instance 2 est une expression constante (de typeint)
￿ n est un paramètre de la méthode addToScreen
3+4−5 également : elle représente la valeur 2
Toutes les instances d’une classe possède le même jeu de
this.screen+n est une expression variable, sa valeur dépend du
variables d’instance mais avec des valeurs distinctes propres à
champ screen et du paramètre n
chaque instance. Elle représente l’état de l’objet.
cal1.getScreen()*2 est une expression, son évaluation consiste en
Les variables paramètres représentent de l’information
l’appel de la méthode getScreen sur l’objet cal1 suivie d’une
supplémentaire qui existe seulement lors de l’envoi d’un message
multiplication par 2
à un objet
cal1.clear() n’est pas une expression car son résultat estvoidcal1.addToScreen(20)
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 19 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 20 / 57La priorité des opérateurs Modification de variable : l’opérateur =
Certaines expressions sont ambiguës : 2+3∗4 vaut 2+(3∗4)
this.screen=0;=⇒ la valeur de la variable this.screen devient 0ou(2+3)∗4?
this.screen = this.screen+n;=⇒ la valeur de la variableLes règles de priorité :∗/% plus prioritaires que+−
this devient la valeur calculée par l’ancienne valeur deSi même priorité, l’évaluation dans l’ordre du texte de gauche à
this.screen augmentée de la valeur de la variable ndroite
Même format : l’instruction d’affectationLes parenthèses permettent de préciser l’ordre d’évaluation
<variable> =<expression>2+4∗5 vaut 22
(2+4)∗5 vaut 30
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 21 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 22 / 57
L’instruction d’affectation Ne pas confondre = et ==
L’instruction d’affectation permet de modifier la valeur d’une
variable x=y=⇒ on prend la valeur de la variable y pour affecter à la
this.screen=0; variable x
x==y=⇒ on teste si la valeur de la variable x est identique à la
￿ la nouvelle valeur est représentée par une expression
valeur de la variable y
￿ l’instruction se termine par un point-virgule
￿ Par nature,le type de l’expression (membre droit) doit être compatible avec le
￿type de la variable affectée (à gauche) x=y est une instruction d’affectation,
￿ x==y est une expression de typebooleanL’opérateur += est l’opérateur d’affectation combiné
this.screen += n est équivalent à this.screen=this.screen+n
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 23 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 24 / 57Portée et durée de vie d’une variable Etude d’une classe :TicketMachine
La portée (ou visibilité) d’une variable est la partie du code source
d’où l’on peut accéder à sa valeur
Modélisation naïve d’un distributeur de ticket tramway à prix
￿ la portée d’un champ est la totalité du bloc de sa classe unique
￿ la portée d’un paramètre est son bloc de déclaration (méthode)
Les clients insèrent de l’argent et demandent l’impression d’unLa durée de vie d’une variable est la période pendant laquelle elle
ticketsubsiste avant sa destruction
￿ la durée de vie d’un champ est la durée de vie de l’objet auquel il On ne vérifie pas que le client a inséré assez d’argent pour avoir
appartient son ticket!
￿ la durée de vie d’un paramètre est la durée de la méthode
lorsqu’elle est appelée
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 25 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 26 / 57
Les champs de données Initialisation des champs : le constructeur
price, balance, total sont de typeint. La valeur initiale par défaut
d’un champ numérique est 0.
￿ Or on veut pouvoir choisir la valeur initiale de priceUne machine à ticket droit connaître :
￿ et cette valeur peut être différente pour chaque machine￿ le prix d’un ticket : price
￿ Le constructeur permet de choisir ou de calculer la valeur initialela somme insérée par un client jusqu’à présent : balance
￿ des champs d’un objet :le total collecté par cette billetterie : total
￿ le constructeur peut avoir des paramètreDonc trois champs pour chaque machine à ticket dans la
￿ le est appelé (précédé du mot clénew) lors de ladéclaration des variables d’instance
construction d’un objet
Le constructeur n’est pas une méthode!
Exemple : constructeur de TicketMachine
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 27 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 28 / 57Les méthodes Les méthodes « accesseurs »
Il faut décrire les messages susceptibles d’être envoyés à une Ce sont les méthodes permettant d’accéder aux champs d’un
machine donnée : les méthodes de la classe objet
Ici quatre méthodes : Il est considéré comme sain de passer par des accesseurs pour
￿ connaître le prix d’un ticket de cette machine accéder à la valeur du champs d’un objet plutôt que d’accéder
￿ la somme déjà introduite par le client
directement à cette valeur par la notation pointée :
￿ insérer une d’argent
ticketMach1.getPrice()=⇒ très bien￿ imprimer le ticket
ticketMach1.price=⇒ moins bien
Deux premières méthodes sont des « accesseurs », la troisième
Raison : pour la sécurité, on verra plus tard ...
est « modificateur », la dernière est « mixte »
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 29 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 30 / 57
Les méthodes « modificateurs » Affichage à l’écran
System.out est un objet, c’est la sortie standard qui est par défaut
l’écran
La méthode println(String texte) invoquée sur l’objet System.out
Elles permettent de modifier les champs d’un objet affiche le texte en paramètre
exemple : méthode insertMoney(int amount) Pour afficher la valeur d’une variable, on la concatène (avec
￿ aucune réponse retournée, seulement une action : modifier la l’opérateur +) à une chaîne de caractères
valeur du champ balance de l’objet courant qui est this System.out.println(this.price+ " euros");
￿ notation +=
Attention à ne pas confondre l’addition et la concaténation, toutes
deux notées +
si price vaut 8 et total vaut 14 alors
price + total + " " vaut "22 "
" " + price + total vaut " 814"
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 31 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 32 / 57Utilisation avec BlueJ Qu’est-ce qu’un objet?
TicketMachine tm1 = new TicketMachine(8);
Création d’une instance tm1 de la classe TicketMachine
Un objet (un bloc dans la mémoire centrale de l’ordinateur) est
Message : quel est le prix d’un ticket?
créé, avec price vaut 8, balance et total valent 0
Insertion d’argent
La variable tm1 contient l’adresse en mémoire du bloc. On dit que
Message : quel est le solde? c’est une référence (ou un pointeur) vers l’objet : imprimer le ticket L’objet lui-même est pointé par la référence
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 33 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 34 / 57
L’égalité == entre objets L’affectation = entre objets
Attention : le signe == entre objets est une comparaison entre Attention : le signe = entre objets est une affectation entre
références et non entre champs! références et non entre champs!
Exemple : Exemple :
TicketMachine tm1 = new TicketMachine(8); TicketMachine tm1 = new TicketMachine(8);
Tick tm2 = new Tick; Tick tm2 = tm1;
l’expression tm1 == tm2 donne false! l’expression tm1 == tm2 donne true!
raison : tm1 et tm2 pointent vers deux objets différents raison : un seul objet est créé, deux références tm1 et tm2
pointent vers ce même objetSi on veut comparer les champs, il faut ajouter à la classe
TicketMachine une méthode egalA Donc si on modifie l’un des champs de tm1, cela induira un effet
boolean egalA(TicketMachine t) { ...} sur tm2 qui pointe sur la même zone.
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 35 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 36 / 57Un scénario L’instruction conditionnelle if
Elle réalise un « aiguillage » suivant le résultat d’un test : si ...
alors ... sinon
Soit tm1 une machine à ticket avec le prix 8 euros SI test ALORS instruction
if (<test>)On introduit 2 euros
<instruction> ;
On demande d’imprimer un ticket
SI test ALORS instr puis instr puis ...puis instr1 2 nLe ticket est bel est bien imprimé!
if (<test>){
Il faut donc un test avant d’imprimer un ticket <instr > ;1
...;
<instr >;n
}
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 37 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 38 / 57
L’instruction conditionnelle if ... else Les expressions booléennes
SI test ALORS instruction 1 SINON instruction 2 Le résultat d’un test est soit vrai soit faux, qui correspond à deux
if (<test>){ valeurs true et false du type primitif boolean
<instr > ;1
Poser un test en Java revient à évaluer une expression} else {
booléenne, comme<instr > ;2 x < y+1
}
total >= 0
<instr > peut être une instruction ou une suite d’instructionsi n % 2 == 0
Toutes les instructions sont acceptées dans les blocs
Attention : ne pas confondre l’affectation = et la comparaison ==!
conditionnels, y compris d’autres blocs conditionnels!
Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 39 / 57 Thi-Bich-Hanh Dao (M2 CCI) Programmation 1 Année 2011-2012 40 / 57