Vous êtes sur la page 1sur 41

Techniques de

Programmation
Avancées
Cours 1 : Mise à niveau

Mme S. BENKERDAGH
Organisation du cours

• Méthodes et techniques de programmation

• Programmation Java

• Gestion des exceptions en Java


Méthodes et techniques de
programmation

• Les différents types de programmation:


• la programmation impérative
• la programmation orientée objets
• la programmation fonctionnelle
• la programmation logique
•…
Programmation “Impérative”
• La programmation impérative est le type de programmation le
plus fréquent. Elle consiste à lister une séquence d’ordres à
l’ordinateur.

• Le code va ensuite être exécuté ligne par ligne jusqu’à la fin


de son exécution.

• Les langages en programmation impérative sont le C, le


COBOL, le SmallTalk ou encore le Perl. En plus des
langages plus connus comme Python, JavaScript, et PHP.
Programmation orientée
objet (POO)
• La programmation orientée objet (ou POO) est un paradigme
dans lequel on va créer puis utiliser des objets. Un objet est
comme une structure qui représente une entité. On peut
ensuite ajouter des méthodes et des caractéristiques à ces
objets.

• En programmation par objet, de nombreux concepts ont vu le


jour comme par exemple la notion de classe, le
polymorphique ou encore l’héritage.

• Les langages de programmation orientée objets sont


Smalltalk, C++, Objective C, Python, PHP, Java, Ruby, C#
ou encore Swift…
Programmation
fonctionnelle
• La programmation fonctionnelle fait partie de la famille de la
programmation déclarative. Elle se caractérise principalement par la
possibilité de déclarer et d’appeler des fonctions à l’intérieur
d’autres fonctions.

• Les langages fonctionnels sont LISP, Haskell, OCaml, Erlang,


Scala. Le paradigme de programmation fonctionnel était très
apprécié, il est aussi possible de coder de manière fonctionnelle avec
des langages comme JavaScript ou encore Python.

• Le paradigme procédurale est similaire à la programmation


fonctionnelle sauf qu’elle fonctionne avec des procédures plutôt
qu’avec des fonctions.
• Les langages de programmation procédurale sont BASIC, C,
COBOL, Fortran, Pascal, Perl, VBScript
Programmation logique
• La programmation logique fait partie de la famille de la
programmation déclarative. Elle est généralement utilisée
dans l’intelligence artificielle. Il s’agit d’une programmation
basée sur le calcul de prédicats.

• En mathématiques, on utilise les prédicats pour trouver des


solutions. En informatique on reprend ces concepts pour que
l’ordinateur résolve les problèmes.

• Le langage qui utilise le paradigme de programmation logique


par excellence est Prolog. On peut aussi utiliser la
programmation logique en Python.
D’autres types de programmation
• Programmation réactive,
• Programmation par contrats,
• Programmation séquentielle,
• Programmation par contraintes,
• Programmation concurrente,
• Programmation récursive,
• …
Qu'est-ce que la technologie
Java et pourquoi en ai-je
besoin ?
• Java est un langage de programmation orienté objet et une plate-
forme de calcul lancé par Sun Microsystems en 1995.

• C’est la plate-forme qui garantit la portabilité des applications


développées en Java, sur plusieurs systèmes d’exploitation tels
que UNIX, Windows, Mac OS ou GNU/Linux avec peu ou pas de
modifications.

• A l'heure actuelle, une grande partie du monde numérique dépend


de Java.
L'environnement d'exécution
d'un programme

Un programme écrit en JAVA est stocké dans un fichier dont l'extension est .java .
Ce fichier est d'abord compilé et le résultat donne un autre fichier binaire dont
l'extension est .class.
Java – Notions fondamentales
• L’utilisation des packages:
Les packages se présentent soit sous la forme d’un répertoire
contenant des sous répertoires, ou soit sous la forme d’archives.
Dans le cas des archives, les classes d’un même package
peuvent être regroupées dans fichier .jar ou .zip , formant ainsi
des sortes de bibliothèques que vous pouvez importer pour
utiliser certaines fonctions/ classes dans votre programme.

/* Extrait d’un programme JAVA */


import java.io.*; // Importe toutes les classes de java.io
import java.util.GregorianCalendar ; // Importe seulement la classe
GregorianCalendar
Java – Notions fondamentales
• Une classe est un fichier :

Le programme est contenu dans un fichier. Il représente une classe, tout comme celles livrées
avec JAVA que nous avons vu ci-dessus. En effet, vos programmes seront compilés en .class et
seront utilisables par d'autres programmeurs ou par vous même.

Dès que vous souhaitez créer un programme en Java , il est indispensable de créer une classe ,
un fichier.

import java.lang.*; // Importe tous les objets de la bibliothèque

public class MonPremierProgramme {


public static void main ( String[] args ) {
System.out.println("Ceci est mon premier programme");
}
}

Ø Ce programme permet d'envoyer une chaîne de caractère à l'écran console. Le nom de la


classe est MonPremierProgramme et il contient une méthode spéciale nommée main. Il
s’agit de la fonction principale du programme.
Java – Notions fondamentales
• Les classes
Une classe se déclare de la manière suivante :
<modificateur d'accès> class <Nom de la classe>

Ce qui donne dans notre exemple :


public class MonPremierProgramme

Ensuite, tout ce qui est contenu entre les accolades fait partie
de la classe.

En résumé, la plupart des programmes JAVA ont cette structure.


Il est important de se familiariser avec.
Java – Notions fondamentales
• Les commentaires
// Commentaire sur une seule ligne
/** Commentaire
sur plusieurs
lignes */
• Types de données :

/* Exemples de déclaration d'entiers


int monEntier1 = 123478; // Correct
int monEntier2 = 12.0 ; // Incorrect , erreur de compilation
short monEntier3 = 32000; // Correct
short monEntier4 = 33000; // Incorrect , erreur de compilation
long monEntier5 = 3000000000L ; // Correct
long monEntier6 = 3000000000 ; // Incorrect , erreur de compilation
byte monEntier7 = -40; // Correct
byte monEntier8 = 128; // Incorrect , erreur de compilation
float monNombre = 12.34F ; // F : précise qu'il s'agit d'un flottant
double monNombre2 = 13.45E14 ;
char monCaractere = '\u2122' ;
String maChaine;

• Constantes
Pour déclarer une constante en JAVA, il suffit d'employer le modificateur final devant la déclaration de la
variable.
final double EURO = 6.55957; // Taux de change pour le franc
Java – Notions fondamentales
• Bloc d'instructions et portée
Avant de parler de boucles, il faut bien comprendre ce que représentent
un bloc d'instructions et la portée des éléments qu'il contient.

Un bloc est un ensemble d'instructions délimitées par des accolades. Les


exemples vus précédemment contenaient des blocs :

public class Exemple {


public static void main (String[] args){

int nombre=45;
int resultat;
resultat = (nombre * 4) / 2;
System.out.println("resultat="+resultat); // Affiche le résultat
}
}
Java – Notions fondamentales
• Bloc d'instructions et portée

public class Exemple{

public static void main (String[] args){


int a;
{
int b = 3;
a = b * 2:
}
a = b + 7 ; // Erreur car b n'est pas connu dans ce contexte
}
}
Java – Notions fondamentales
• Les instructions conditionnelles:
if (solde<0)
message = "Vous êtes débiteur";

else if (solde == 0)
message = "Vos comptes sont à zéro";

else if (solde >= 10000)


message = "Voulez-vous épargner ?";
Java – Notions fondamentales
• Les boucles :
public class Ex6
{
public static void main (String[] args){
int x=2, resultat=1;
int n=12;
int i=n;

while ( i>0) // Tant que I supérieur à 0


{
resultat *= x; // resultat = resultat * x
i--; // Décrémentation
}
System.out.println("Resultat="+resultat); // 4096
}
}

for ( instruction1 ; expression1 ; expression2 )


{
bloc d'instructions
}
Java – Notions fondamentales

L’instruction (Switch-case):

switch selecteur {
case valeur1 : instruction1;
instruction2;
// …
case valeur2 : instruction3;
// …
default : instruction4;
}
Java – Notions fondamentales
• Déclaration d'un tableau :
int [] monTableau = new int[50];`
int monTableau[] = new int[50];

monTableau[14] = 14;

int[] monTableau ={ 12,5,34,7,15,23,2 };

public class Ex7 {


public static void main (String[] args){

String [] tab = { "Chaine 1" , "Chaine 2" , "Chaine 3" };

// Boucle chargee d'afficher tab2


for (int i=0 ; i< tab.length ; i++ )
System.out.println("tab["+i+"] = "+tab[i]);
}
}
Java – Notions fondamentales
public class Ex8 {
public static void main (String[] args)
{

int [] source ={ 1,2,3,4,5 } ;


int [] cible = { 0,0,0,0,0,0,0,0,0 };

System.arraycopy(source ,0 , cible , 2 , 5 );

// Boucle chargee d'afficher cible


for (int i=0 ; i< cible.length ; i++ )
System.out.println("cible["+i+"] = "+cible[i]);

}
}
Gestion des exceptions en Java
u Objectifs du cours:

Ø Expliquer les concepts d’exception et de traitement d'erreur.

Ø Pouvoir utiliser les blocs try pour spécifier le code dans lequel une
exception peut se produire.

Ø Pouvoir lancer des exceptions avec l'instruction throw.

Ø Comprendre le processus de propagation des exceptions.

Ø Examiner l’utilisation de la clause finally dans un module de


traitement d’exception.

Ø Pouvoir définir de nouvelles exceptions.


Gestion des exceptions en Java
• 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).

• Lors de la détection d'une erreur, un objet qui hérite de la


classe Exception est créé (on dit qu'une exception est levée) et
propagé à travers la pile d'exécution jusqu'à ce qu'il soit traité.

• Ces mécanismes permettent de renforcer la sécurité du code


Java.
Gestion des exceptions en Java
• Exemple : une exception levée à l'exécution non capturée

public class TestException {


public static void main(java.lang.String[] args) {
int i = 3;
int j = 0;
System.out.println("résultat = " + (i / j));
}
}
Gestion des exceptions en Java
Premier exemple :
Gestion des exceptions en Java

• Flux du programme par les illustrations ci-dessous :


1. Le programme s’exécute d’une façon normale pour les instructions
des lignes (6), (11) à (16)
2. Pour la ligne (20), le problème se produit lorsque la valeur est
divisée par 0.
3. Le programme saute hors de la fonction principale et la ligne de
code (23) n'a pas été réalisée ou traitée.
Gestion des exceptions en Java
Gestion des exceptions en Java

• Le flux du programme par l'illustration suivante :


1. Les instructions des lignes (1) à (16) s’executent d’une façon
normale.
2. L’exceptions se produit pour la ligne (21), la variable value est
divisée par 0.
3. Immédiatement le programme saute pour exécuter les commandes du
bloc de capture (catch), la ligne (24) est ignorée.
4. Les lignes (26) à (33) sont exécutées è bloc Catch {} et suite
5. La ligne (36) est exécutée.
Syntaxe général d’une exception en
Java
Hiérarchie des exceptions
• C'est le modèle de diagramme hiérarchique de « Exception »
en Java.

• La classe au plus haut niveau est Throwable.

• Deux sous-classes directes sont Erreur et Exception.

• Dans la branche Exception, il existe une sous-


classe RuntimeException, qui sont des exceptions que Java ne
saura pas vérifier pendant la compilation.
Hiérarchie des exceptions

java.lang.Objet

java.lang.Throwable

java.lang.Error java.lang.Exception

Arithmetic
Runtime Exception …
Exception
Hiérarchie des exceptions
• Error
• Lorsque la défaillance de la liaison dynamique, ou autre défaillance importante
dans une machine virtuelle se produit, il renvoie un Error.
• Exceptions
• La plupart des programmes lancent et rattrappent des objets issus de la classe
Exception. Dans le cas où Exception indique un problème qui se produit mais que
ce dernier n'est pas grave.

La classe Exception a beaucoup de descendants définis dans les paquets Java. Ces
descendants indiquent de différents types d'Exception qui peuvent se produire. Par
exemple,
• NegativeArraySizeException
• RuntimeException.
• Runtime Exceptions
• La classe RuntimeException représente des exceptions qui se produisent lors de
l'exécution du programme. Un exemple d'exécution d'une exception
est NullPointerException, qui se produit lorsque vous accédez à une méthode ou
au champ d'un objet via une référence null. Une NullPointerException peut se
produire lorsqu'un programme essaie de faire la référence à un objet non existant.
Exceptions prédéfinies
• Il existe des exceptions prédéfinies par des bibliothèques
standard de Java :
• JavaArithmeticException : par exemple, division d’un nombre
par 0
• ClassCastException : par exemple, tentative de transformer un
objet String en Integer
• IndexOutOfBoundsException : par exemple, appeler un index de
tableau qui n’existe. tab[10] alors que la variable tab n’a que 9
éléments par exemple.
• NullPointerException : appel d’une variable non-existante ou
d’un fichier non-existant par exemple.
• FileNotFoundException : exemple, tentative d’ouverture d’un
fichier inexistant en lecture
• …
Méthodes Rôles
• Les principales méthodes de la classe Throwable sont :

• String getMessage( ) : lecture du message

• void printStackTrace( ) : affiche l'exception et l'état de la pile


d'exécution au moment de son appel

• void printStackTrace(PrintStream s) : Idem mais envoie le


résultat dans un flux.
• …
Détails sur la clause Finally
• Une clause finally est généralement incluse pour s’assurer que
certaines opérations de nettoyage (par exemple, la fermeture
des fichiers ouverts) sont effectuées.

• Une clause finally s’exécute toujours lorsque son bloc Try


s’exécute (qu’il y ait ou non une exception).

• De plus, si la clause finally comprend une instruction de


transfert de contrôle (return, break, continue, throw), cette
instruction prévaut sur tout transfert de contrôle initié dans le
bloc try ou dans une clause catch.
Détails sur la clause Finally
• Si le bloc finally inclut un transfert de contrôle, il a la priorité sur
tout transfert de contrôle exécuté dans le try ou dans une clause
catch exécutée. Ainsi, dans tous les cas, la clause finally s’exécute,
puis le transfert de contrôle a lieu.
• Voici un exemple : Le résultat de l’exécution de ce code est 2.

• Try {
• return 0;
• }
• finally {
• return 2;
• }
Créer sa propre exception
• Exemple.
• Créons une classe LiquidNotFoundException qui hérite de la
classe Exception.
• Une méthode qui risque lever une exception de type
LiquidNotFoundException l’indique à l’aide de throws.
Créer sa propre exception
Créer sa propre exception
• Dans cet exemple, on compare la valeur de la variable quantite à
celle de quantiteConteneur.

• Si sa valeur est supérieure à cette dernière, alors on demande à notre


application de générer notre exception personnalisée
LiquidNotFoundException.

• Celle-ci est une extension de Exception qui va afficher le message


« Pas assez de liquide dans le conteneur» àcontrôler mieux ses
applications, et particulièrement les messages d’erreur.
• Si on avait juste étendu notre exception à la classe Exception, alors,
lorsque l’exception serait survenu, on aurait un message d’erreur
bizarre de type « java.lang.Throw.exception at 39.
LiquidNotFoundException».
Exercice : Création des Exceptions
• Ecrire une classe Entreprise. Une entreprise a un nombre d’employés, un
capital, un nom, une mission, et une méthode public String mission()
qui renvoie la mission de l’entreprise et qui déclare le lancement de
l’exception SecretMissionException. On aura également une méthode
public int capital() qui renvoie le capital et qui déclare le lancement de
l’exception NonProfitException.

• Ecrire une classe EntrepriseSecrete qui hérite d’Entreprise et dont la


méthode mission lance l’exception SecretMissionException.

• Ecrire une classe EntrepriseSansProfit qui hérite d’Entreprise et dont la


méthode capital lance l’exception NonProfitException.

• Ecrire une méthode qui prend en entrée un tableau d’entreprises et


affiche la mission et le capital de toutes les entreprises (quand cela est
possible). Tester la méthode sur les entreprises ”Ford”,”CIA”, ”Spectre”,
”CroixRouge”, ”Microsoft”, ”ParisDiderot”.
Fin du cours 1

Vous aimerez peut-être aussi