Vous êtes sur la page 1sur 51

DÉVELOPPEMENT C#

NOVEMBRE 2020

LICENCE PROFESSIONNELLE
GÉNIE LOGICIEL

(PAR D R . J USTIN MOSKOLAI)


OBJECTIFS DU COURS

q Démystifier la notion de programmation OO

q Acquérir les bonnes pratiques de programmation


structurée

q Maîtriser des techniques de programmation, en se


focalisant sur les approches par objets et par
composantes ;

q Maitriser le concept événementiel

2
SOMMAIRE

Chapitre 0 : La programmation objet et


événementielle

• Définitions
• Programmation événementielle
• Rôle de la POO
• Concepts fondamentaux de la notion d’objet

SJP
SAINT JÉRÔME POLYTECHNIQUE

3
MÉTHODES DE CONCEPTION

q Conception fonctionnelle
● Système = ensemble de fonctions
● État du système (données) centralisé et partagé par les fonctions

q Conception guidée par les données


● Système = base de données
● Fonctions communes à toutes les données
● Adaptée à l’élaboration de grandes bases de données

q Conception orientée objet


● Système = ensemble d’objets
● Objet = données + fonctions
● État du système distribué entre tous les objets

SJP
SAINT JÉRÔME POLYTECHNIQUE

4
PROGRAMMATION ÉVÉNEMENTIELLE

q Il existe un ensemble de langages de programmation,


chacun est spécialisé dans un domaine d’application
donné et chacun possède un type spécifique:

o Programmation structuré ou modulaire : le programme est vu


comme un ensemble d’unités structurés hiérarchiquement.

o Programmation orientée objet : le programme n’est une autre


qu’une collection d’objet qui communique

o Programmation événementielle : Les composants d'une


application événementielle c’est à dire les objets interagissent
entre eux et avec l'environnement.

5
PROGRAMMATION ÉVÉNEMENTIELLE

q Les événements sont captés par le système d'exploitation, le


traitement consiste en l'exécution des procédures
événements associées à celui-ci s'il en existe.

q C'est le programmeur qui doit prévoir la procédure à


exécuter en réponse à un événement donné.

q Par exemple, le déclenchement de l'événement click sur un


bouton quitter doit terminer l'exécution, le choix d'un élément
dans un menu doit déclencher certaines opérations, un top
d'horloge doit modifier le contenu d'une zone d'image.

q Si l’événement E se produit sur l’objet O alors le traitement T


est exécuté.

6
CONCEPTION ORIENTÉE OBJET

q Principes
● Concept du domaine d'application = objet
Décrit par état (attributs) + comportement (opérations)
● Liens entre concepts : héritage, agrégation, composition...

q Caractéristiques des objets


● Identité : objet = entité unique (mêmes attributs ⇏ même objet)
● Classification : regroupement des objets de même nature
(attributs + opérations)
● Polymorphisme : comportement différent d'une même
opération
dans différentes classes
● Héritage : partage hiérarchique des attributs et opérations

SJP
SAINT JÉRÔME POLYTECHNIQUE

7
MODÉLISATION OBJET

Notion d’Objet Une abstraction du monde réel c.-à-d. des


données informatiques regroupant des caractéristiques du monde
réel
Exemple
une personne, une voiture, une maison, ..

SJP
SAINT JÉRÔME POLYTECHNIQUE

8
MODÉLISATION OBJET

SJP
SAINT JÉRÔME POLYTECHNIQUE

9
MODÉLISATION OBJET

SJP

10
SAINT JÉRÔME POLYTECHNIQUE
MODÉLISATION OBJET

Visibilité des attributs définissent les droits d'accès aux données


(pour la classe elle-même, d'une classe héritière, ou bien d'une classe
quelconque)

SJP

11
SAINT JÉRÔME POLYTECHNIQUE
TYPE DE RELATIONS ENTRE CLASSES

§ Héritage

§ Association

§ Contenance
• Agrégation
• Composition

SJP

12
SAINT JÉRÔME POLYTECHNIQUE
HÉRITAGE

permet de créer une nouvelle classe à partir d'une classe existante


Principe classe dérivée contient les attributs et les méthodes de sa
classe mère

SJP

13
SAINT JÉRÔME POLYTECHNIQUE
ASSOCIATION

Connexion sémantique entre deux classes


Navigabilité

SJP

14
SAINT JÉRÔME POLYTECHNIQUE
ASSOCIATION

Nom de l’association
lien sémantique entre les classes

SJP

15
SAINT JÉRÔME POLYTECHNIQUE
ASSOCIATION

SJP

16
SAINT JÉRÔME POLYTECHNIQUE
ASSOCIATION

SJP

17
SAINT JÉRÔME POLYTECHNIQUE
CONTENANCE

SJP

18
SAINT JÉRÔME POLYTECHNIQUE
AGRÉGATION

SJP

19
SAINT JÉRÔME POLYTECHNIQUE
AGRÉGATION

SJP

20
SAINT JÉRÔME POLYTECHNIQUE
COMPOSITION

SJP

21
SAINT JÉRÔME POLYTECHNIQUE
EXEMPLE DIAGRAMME OBJET

SJP

22
SAINT JÉRÔME POLYTECHNIQUE
EXERCICE

Concevoir le diagramme de classe d’une application de gestion


d’hôtel.
Voici ce que vous devez modéliser :
Un hôtel est constitué d'un certain nombre de chambres. Un responsable
de l'hôtel gère la location des chambres. Chaque chambre se loue à un
prix donné.
L'accès aux salles de bain est compris dans le prix de la location d'une
chambre. Certaines chambres comportent une salle de bain, mais pas
toutes. Les hôtes de chambres sans salle de bain peuvent utiliser une
salle de bain sur le palier. Ces dernières peuvent être utilisées par
plusieurs hôtes.
Les pièces de l'hôtel qui ne sont ni des chambres, ni des salles de bain
(hall d'accueil, cuisine...) ne font pas partie de l'étude (hors sujet).
Des personnes peuvent louer une ou plusieurs chambres de l'hôtel, afin
d'y résider. En d'autre termes : l'hôtel héberge un certain nombre de
personnes, ses hôtes (il s'agit des personnes qui louent au moins une
chambre de l'hôtel...).
SJP

23
SAINT JÉRÔME POLYTECHNIQUE ANALYSE DES SYSTÈMES (PAR DR J. MOSKOLAI)
SJP

24
SAINT JÉRÔME POLYTECHNIQUE ANALYSE DES SYSTÈMES (PAR DR J. MOSKOLAI)
SOMMAIRE

Chapitre I : Concepts clés


de la programmation
• Variables, constantes
• Instructions élémentaires
• Structure d’un programme C#
• Les principaux types de données en C#

SJP

25
SAINT JÉRÔME POLYTECHNIQUE
VARIABLES & CONSTANTES

Les variables sont caractérisées par 3 éléments :

q Leur nom qui est une étiquette permettant de les identifier,

q Leur type qui correspond à un ensemble de valeurs admissibles,

q Leur état (contenu, valeur) qui est une valeur et une seule du type
admissible (une variable a toujours un état et contient donc toujours
une valeur).

SJP

26
SAINT JÉRÔME POLYTECHNIQUE
VARIABLES & CONSTANTES

Les types usuels qui sont aussi les types élémentaires en


programmation sont :
q les nombres entiers (valeurs entières positives et négatives),
q les nombres réels,
q les caractères qui comprennent l'ensemble des lettres, chiffres,
signes de la ponctuation ainsi que d'autres signes comme l'espace ('
') ou le dièse ('#'),
q les chaînes de caractères contenant une suite ordonnée de
caractères,
q les booléens, ce type comporte 2 valeurs : { vrai, faux }.
Les constantes sont des variables particulières pour lesquelles il est
impossible de modifier l'état.

SJP

27
SAINT JÉRÔME POLYTECHNIQUE
VARIABLES & CONSTANTES

q OPÉRATEURS
Afin d'effectuer les traitements, on dispose d'opérateurs arithmétiques
élémentaires :

pour les nombres entiers et réels :


o + (addition),
o - (soustraction),
o * (multiplication),
o / (division : le quotient est un nombre réel),

pour les nombres entiers seulement :


o div (quotient entier de la division euclidienne),
o mod (reste de la division euclidienne)
SJP

28
SAINT JÉRÔME POLYTECHNIQUE
VARIABLES & CONSTANTES

On dispose également d'opérateurs relationnels élémentaires (les


deux opérandes doivent être de même type, y compris pour les
caractères et les chaines de caractères, l’ordre est alors
alphabétique) :

pour les nombres entiers et les nombres réels :


o < (strictement inférieur à),
o > (strictement supérieur à)
o ≤ (inférieur ou égal à),
o ≥ (supérieur ou égal à),
o = (égal à),
o ≠ (différent de),
Les résultats produits par les opérateurs relationnels sont toujours de type
booléen.
SJP

29
SAINT JÉRÔME POLYTECHNIQUE
INSTRUCTIONS ÉLÉMENTAIRES

Enfin, on dispose d'opérateurs logiques pour lesquels les opérandes ne peuvent


être que booléens. Ils servent, le plus souvent, à combiner des propositions
issues des opérateurs relationnels :
o et,
o ou,
o éventuellement le "ou exclusif" ("fromage ou dessert" mais pas les deux)
qu'on peut noter ouX, oux, ouex, ou encore xor (plus Anglais),
o non qui ne dispose que d'un opérande placé après l'opérateur et qui inverse
la proposition de l'opérande (exemple non a<b est équivalent à a≥b).
Le résultat produit par ces opérateurs est de type booléen.
Les opérateurs sont utilisés dans l'écriture d'expressions. Une expression peut
être constituée d'une variable, d'une constante ou d'une valeur seule, d’une
combinaison d'opérateurs et d'opérandes (les opérandes peuvent êtres des
variables, des constantes, des valeurs ou des expressions).

SJP

30
SAINT JÉRÔME POLYTECHNIQUE
INSTRUCTIONS ÉLÉMENTAIRES

q L’Affectation
L’affectation est une instruction qui permet d'attribuer une valeur numérique
ou le résultat de l’évaluation d’une expression à une variable si ce résultat
est du type de celui de la variable.
La syntaxe de l'affectation est la suivante :
nomdevariable ¬ expression ;

Exemples

x ¬ 12 ;
x ¬ x+1 ;
S ¬ A+B+C ;
S ¬ S/N ;
NOM ¬ "TOTO" ;

SJP

31
SAINT JÉRÔME POLYTECHNIQUE ANALYSE DES SYSTÈMES (PAR DR J. MOSKOLAI)
INSTRUCTIONS ÉLÉMENTAIRES

q SAISIE OU LECTURE
Pour indiquer qu'une valeur particulière est donnée à une variable déclarée à partir
d'un périphérique d’entrée (le clavier en général), on utilise la syntaxe :
Saisir nomdevariable;
On peut également écrire :
Lire (nomdevariable);
Si cette variable avait déjà reçu une valeur alors, l’ancienne valeur est perdue.
L’utilisateur doit entrer une valeur du type déclaré pour ne pas provoquer d’erreur ou
d’aberration.
Dans le cas où plusieurs données doivent être saisies successivement, on pourra
utiliser la syntaxe :
Saisir nomdevariable1, nomdevariable2,... nomdevariableN;
ou
Lire (nomdevariable1, nomdevariable2,... nomdevariableN);

SJP

32
SAINT JÉRÔME POLYTECHNIQUE
INSTRUCTIONS ÉLÉMENTAIRES

q DÉCLARATION DE CONSTANTES
Pour déclarer une constante, il faut préciser trois élément :
o son type,
o son nom,
o sa valeur,
Afin d'effectuer cette déclaration, la syntaxe suivante peut être utilisée
Type nomconstante = valeur ;
Si plusieurs constantes sont de même type on pourra écrire :

Type nomconstante1 = valeur1, nomconstante2 = valeur2,...


nomconstanteN = valeurN;

SJP

33
SAINT JÉRÔME POLYTECHNIQUE
EXEMPLE : ALGORITHME DE CALCUL DE TVA SUR UN PRIX HORS TAXE

début

Variables
Réel prixHT, montantTVA
Constante
Réel tauxTVA = 0,196

Afficher " Saisissez le prix hors taxe : "

Saisir prixHT

montantTVA ← prixHT*tauxTVA

Afficher " Le montant de la TVA est : " , montantTVA, " Le Prix TTC est : ", prixHT + montantTVA

fin
SJP

34
SAINT JÉRÔME POLYTECHNIQUE
PROGRAMMER EN C # AVEC UN ENVIRONNEMENT INTÉGRÉ

q Un environnement de développement intégrés (IDE : Integrated


Development Environment) est un ensemble d’outils qui en plus des
tâches classiques d’un langage de programmation offre des
fonctionnalités étendues permettant de couvrir une plus large partie du
cycle de création d’un logiciel.

q On peut distinguer des tâches telles que :


o Compilation et déboguage
o Déploiement de l’application.
o Intégrer des outils de test et de vérification.
o Outil de création graphique (icône).
o Interface avec les SGBD.
o Générateur de menus.
o Un ensemble d’assistants.
SJP

35
SAINT JÉRÔME POLYTECHNIQUE
EXEMPLES D’IDE

q Dans ce qui suit, des exemples d’IDE chez des éditeurs différents et
basés sur des langages de programmation différents :

q Borland Delphi
q Borland Jbuilder
q Oracle JDevelopper
q Microsoft Visual Basic et C#
q Microsoft Visual C++

SJP

36
SAINT JÉRÔME POLYTECHNIQUE
PRINCIPE DE FONCTIONNEMENT

q Principe de fonctionnement :

q Conception de l’interface.
q Mise en place des contrôles.
q Ecriture du code
q Test et exécution.

SJP

37
SAINT JÉRÔME POLYTECHNIQUE
DÉCLARATION DE DONNÉES

q Déclaration d’une constant

q Déclaration de variable

SJP

38
SAINT JÉRÔME POLYTECHNIQUE
LES ÉNUMÉRATIONS

q Une énumération permet de définir un ensemble de constantes qui sont


liées entre elles. La déclaration se fait de la manière suivante :

enum Semaine {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche} ;


Semaine jour ;
jour=Semaine.mardi ;

q Le compilateur associe à lundi la valeur 0, 1 à mardi, 2 à mercredi …

if( jour==Semaine.jeudi) ó
if((int)jour==3)
jour=Semaine.mardi ;
jour++ ; // jour devient
mercredi

SJP

39
SAINT JÉRÔME POLYTECHNIQUE
LES ÉNUMÉRATIONS

q Il est possible d’affecter une valeur particulière à chaque membre de


l’énumération :

enum Couleur
{
Rouge=12,
Bleu=46 ,
Jaune=9
} ;

SJP

40
SAINT JÉRÔME POLYTECHNIQUE
LES STRUCTURES

q La syntaxe de déclaration d’une structure est la suivante :

struct Nom_typ {
public type1 Champ1; Exemple
public type2 Champ2;
public type3 Champ3; struct Personne
… {
public typeN ChampN; public string Nom ;
} public string Prenom ;
public int Age ;
}

Personne Vperso;
Vperso=new Personne( );
Vperso.nom = "Ali" ;
Vperso.Age = 23;

SJP

41
SAINT JÉRÔME POLYTECHNIQUE
LES OPÉRATEURS

q Arithmétiques et de comparaison

SJP Pour une chaine + est l’opérateur de la concatenation

42
SAINT JÉRÔME POLYTECHNIQUE
LES OPÉRATEURS

q Logiques

SJP

43
SAINT JÉRÔME POLYTECHNIQUE
LES OPÉRATEURS

q Opérateurs abrégés

Opérateurs d’affectation :

Le langage C# offre la possibilité d’écrire des opérations avec une formule


abrégée. La syntaxe est la suivante :

Variable Opérateur = Expression.

Ceci est équivalent à : Variable = Variable Opérateur Expression

Exemple :

A += 5; ó A = A + 5 ;
B *= 7; ó B = B * 7 ;

SJP

44
SAINT JÉRÔME POLYTECHNIQUE
LES OPÉRATEURS

q Opérateurs abrégés

Opérateur d’incrémentation :

Pour incrémenter la valeur d’une variable on peut utiliser l’opérateur ++.

La syntaxe est la suivante : Variable++ pour une incrémentation postfixée ou


++Variable pour une incrémentation préfixée.

Exemple :

i++; ó i = i+1 ;
++i; ó i = i+1 ;

x=y++; ó x=y ; y=y+1 ;


x=++y ; ó y=y+1 ; x=y;

SJP

45
SAINT JÉRÔME POLYTECHNIQUE
LES OPÉRATEURS

q Opérateurs abrégés

Opérateur de décrémentation :

Pour décrémenter la valeur d’une variable on peut utiliser l’opérateur --. La


syntaxe est la suivante : Variable-- pour une décrémentation postfixée ou --
Variable pour une décrémentation préfixée.

Exemple :

i--; ó i = i-1 ;
--i; ó i = i-1 ;

x=y--; ó x=y ; y=y-1 ;


x=--y; ó y=y-1 ; x=y ;

SJP

46
SAINT JÉRÔME POLYTECHNIQUE
LES TABLEAUX

Un tableau C# est un objet permettant de rassembler sous un même identificateur des


données de même type. Sa déclaration est la suivante :

Type[] tableau=new Type[n]

n est le nombre de données que peut contenir le tableau.

La syntaxe Tableau[i] désigne la donnée n° i où i appartient à l'intervalle [0,n-1].

Toute référence à la donnée Tableau[i] où i n'appartient pas à l'intervalle [0,n-1]


provoquera une exception.

Un tableau peut être initialisé en même temps que déclaré :


int[] entiers=new int[] {0,10,20,30};

ou plus simplement :
int[] entiers={0,10,20,30};
SJP

47
SAINT JÉRÔME POLYTECHNIQUE
LES TABLEAUX

Les tableaux ont une propriété Length qui est le nombre d'éléments du tableau.

Un tableau à deux dimensions pourra être déclaré comme suit :

Type[,] tableau=new Type[n,m];

Où n est le nombre de lignes, m le nombre de colonnes. La syntaxe Tableau[i,j]


désigne l'élément j de la ligne i de tableau.

Le tableau à deux dimensions peut lui aussi être initialisé en même temps qu'il est
déclaré :

double[,] réels=new double[,] { {0.5, 1.7}, {8.4, -6}};

ou plus simplement :

double[,] réels={ {0.5, 1.7}, {8.4, -6}};


SJP

48
SAINT JÉRÔME POLYTECHNIQUE
LES TABLEAUX

Le nombre d'éléments dans chacune des dimensions peut être obtenue par la méthode
GetLength(i) où i=0 représente la dimension correspondant au 1er indice, i=1 la
dimension correspondant au 2ième indice, …

Le nombre total de dimensions est obtenu avec la propriété Rank, le nombre total
d'éléments avec la propriété Length.

Un tableau de tableaux est déclaré comme suit :

Type[][] tableau=new Type[n][];

La déclaration ci-dessus crée un tableau de n lignes. Chaque élément tableau[i] est une
référence de tableau à une dimension.

Ces références tableau[i] ne sont pas initialisées lors de la déclaration ci-dessus. Elles
ont pour valeur la référence null.

SJP

49
SAINT JÉRÔME POLYTECHNIQUE
LES TABLEAUX

L'exemple ci-dessous illustre la création d'un tableau de


tableaux :

1. // un tableau de tableaux
2. string[][] noms = new string[3][];
3. for (int i = 0; i < noms.Length; i++) {
4. noms[i] = new string[i + 1];
5. }//for
6. // initialisation
7. for (int i = 0; i < noms.Length; i++) {
8. for (int j = 0; j < noms[i].Length; j++) {
9. noms[i][j] = "nom" + i + j;
10. }//for j
11. }//for i

SJP

50
SAINT JÉRÔME POLYTECHNIQUE
LES TABLEAUX

Explications exemple

• ligne 2 : un tableau noms de 3 éléments de type string[][]. Chaque élément est un


pointeur de tableau (une référence d'objet) dont les éléments sont de type string[].

• lignes 3-5 : les 3 éléments du tableau noms sont initialisés. Chacun "pointe"
désormais sur un tableau d'éléments de type string[]. noms[i][j] est l'élément j du
tableau de type string [] référencé par noms[i].

• ligne 9 : initialisation de l'éélment noms[i][j] à l'intérieur d'une double boucle. Ici


noms[i] est un tableau de i+1 éléments. Comme noms[i] est un tableau,
noms[i].Length est son nombre d'éléments.

SJP

51
SAINT JÉRÔME POLYTECHNIQUE