Génie Logiciel I. Cours V - Classes dérivées (suite), compilation et classes virtuelles. Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J.
|
|
- Sarah Labonté
- il y a 7 ans
- Total affichages :
Transcription
1 Génie Logiciel I Cours V - Classes dérivées (suite), compilation et classes virtuelles Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M. 2ème année - 08/09 Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 1 / 61 Plan du cours 1 Héritage simple 2 Retour sur les exceptions 3 Compilation 4 Héritage multiple 5 Gestion des conflits : les classes virtuelles Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 2 / 61
2 Héritage simple Rappels l héritage simple est un mécanisme qui permet de réutiliser une classe de base par extension ou adaptation, dans une nouvelle classe dite classe dérivée; on peut contrôler les accès aux membres de la classe de base de deux manières : 1 spécifier le statut des membres de la classe de base au cours de sa conception : private, protected ou public; 2 spécifier le mode d héritage lors de la conception de la classe dérivée : public, privé ou protégé. les constructeurs de la classe dérivée font automatiquement appel à un constructeur de la clase mère. Il ne faut l appeler explicitement qu en cas de transmission de valeurs; la forme canonique d une classe doit systématiquement comporter un constructeur par valeur, un constructeur par copie, des constructeurs par valeurs (ceux qui sont utiles), un destructeur et l opérateur d affectation. Dans le cas d une classe dérivée, l héritage sera public, le constructeur par copie utilisera le constructeur par copie de la classe mère tout comme l opérateur d affectation (selon la syntaxe vue en CM4); on peut redéfinir et/ou surcharger des membres de la classe mère dans la classe dérivée. Dans certains cas, comme les opérateurs +,, on a tout intérêt à le faire. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 3 / 61 Héritage simple Patrons de classes Combiner les patrons de fonctions avec l héritage simple ne pose aucun problème, il s agit après tout de fonctions membres ou de fonctions amies de la classe de base ou de la classe dérivée. De même, combiner les notions d héritage avec de patrons de classe est tout aussi facile. Cette combinaison peut revêtir plusieurs aspects : une classe «ordinaire» dérivant d une classe patron; un patron de classe dérivant d une classe «ordinaire»; un patron de classe dérivant d un autre patron de classe : avec les mêmes paramètres de type; avec des paramètres de type supplémentaires. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 4 / 61
3 Héritage simple classe ordinaire dérivant d un patron de classe Considérons le patron de classe point : patron de classe point #i n c l u d e <iostream > using namespace s t d ; template <c l a s s T> c l a s s p o i n t { T x, y ; p o i n t (T abs =0, T ord =0) {x=abs ; y=ord ; void a f f i c h e ( ) { cout << Coordonnées : ; cout << x << << y << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 5 / 61 Héritage simple classe ordinaire dérivant d un patron de classe On va maintenant définir une classe dérivée pointintcolore qui dérive de la classe patron point<int> : classe dérivée pointintcolore #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; c l a s s p o i n t I n t C o l o r e : p u b l i c p o i n t <i n t > { i n t c o u l e u r ; p o i n t I n t C o l o r e ( i n t abs =0, i n t ord =0, i n t c l =1) : p o i n t <i n t >(abs, ord ) { c o u l e u r=c l ; v o i d a f f i c h e ( ) { p o i n t <i n t >:: a f f i c h e ( ) ; cout << c o u l e u r : << c o u l e u r << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 6 / 61
4 Héritage simple classe ordinaire dérivant d un patron de classe Exemple de programme testant les deux classes précédentes : programme test i n t main ( i n t argc, char argv [ ] ) { point <f l o a t > p f ( 3. 5, 2. 8 ) ; p f. a f f i c h e ( ) ; p o i n t I n t C o l o r e p ( 3, 5, 9 ) ; p. a f f i c h e ( ) ; e x i t ( EXIT SUCCESS ) ; ===================== Coordonnées : Coordonnées : 3 5 c o u l e u r : 9 ===================== Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 7 / 61 Héritage simple Patron de classe dérivant d une classe ordinaire L aspect patron, c est-à-dire l introduction d un paramètre de type, concerne uniquement la classe dérivée : Exemple template <c l a s s T> c l a s s B : c l a s s A { Cela ne pose donc aucun problème particulier. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 8 / 61
5 Héritage simple Dérivation de patrons avec les mêmes paramètres Cette fois-ci, on va définir un patron de classe pointcolore avec le même paramètre de type que le patron de classe de base point, dans lequel le nouvel attribut introduit est du même type que les coordonnées du point : patron de classe dérivée pointcolore template <c l a s s T> p o i n t C o l o r e : p u b l i c p o i n t <T> { T c o u l e u r ; p o i n t C o l o r e ( T abs =0, T ord =0, T c l =1) : p o i n t <T>(abs, ord ) { c o u l e u r=c l ; v o i d a f f i c h e ( ) { p o i n t <T>:: a f f i c h e ( ) ; cout << c o u l e u r : << c o u l e u r << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 9 / 61 Héritage simple Dérivation de patrons avec les mêmes paramètres Exemple de programme test : programme test i n t main ( i n t argc, char a r g v [ ] ) { p o i n t <long> p ( 3 4, 2 5 ) ; p. a f f i c h e ( ) ; p o i n t C o l o r e pc ( 1 2, 4 5, 1 5 ) ; pc. a f f i c h e ( ) ; e x i t ( EXIT SUCCESS ) ; ===================== Coordonnées : Coordonnées : c o u l e u r : 15 ===================== Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 10 / 61
6 Héritage simple Dérivation de patrons avec paramètres supplémentaires Cette fois-ci, on va définir un patron de classe pointcolore avec le même paramètre de type que le patron de classe de base point, auquel on ajoute un nouveau paramètre de type pour le nouvel attribut : patron de classe dérivée pointcolore template <c l a s s T, c l a s s U> p o i n t C o l o r e : p u b l i c p o i n t <T> { U c o u l e u r ; p o i n t C o l o r e ( T abs =0, T ord =0, U c l =1) : p o i n t <T>(abs, ord ) { c o u l e u r=c l ; v o i d a f f i c h e ( ) { p o i n t <T>:: a f f i c h e ( ) ; cout << c o u l e u r : << c o u l e u r << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 11 / 61 Héritage simple Dérivation de patrons avec paramètres supplémentaires Exemple de programme test : programme test i n t main ( i n t argc, char a r g v [ ] ) { p o i n t C o l o r e <f l o a t, i n t > p ( 3. 5, 2. 8, 1 2 ) ; p. a f f i c h e ( ) ; p o i n t C o l o r e <unsigned long, s h o r t > q ( , , 8 ) ; q. a f f i c h e ( ) ; e x i t ( EXIT SUCCESS ) ; ===================== Coordonnées : c o u l e u r : 12 Coordonnées : c o u l e u r : 8 ===================== Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 12 / 61
7 Retour sur les exceptions Rappels le mécanisme des exceptions permet de gérer de manière conviviale et personnelle les erreurs qui peuvent survenir à l exécution d un programme; la levée d une exception se fait à l aide de l instruction throw; le gestionnaire d exception se fait à l aide d un bloc try - catch; on peut renvoyer des exceptions au gestionnaire parent à l aide de la commande throw; on peut spécifier pour une fonction quelles exceptions on peut transmettre au gestionnaire parent dans son prototype; pour envoyer des informations complémentaires au gestionnaire d exception, il faut que le type d exception soit celui d une classe possédant un constructeur par valeurs et autant d attributs que d informations pouvant être transmises. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 13 / 61 Retour sur les exceptions Les exceptions standard Elles sont disponibles dans l en-tête <stdexcept> et dérivent toutes d une classe de base exception : exception bad exception logic error bad alloc bad cast runtime error bad typeid domain error length error invalid argument out of range range error overflow error underflow error Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 14 / 61
8 Retour sur les exceptions Les exceptions déclenchées par la librairie standard bad alloc échec d allocation mémoire par la commande new; bad cast échec de conversion dynamique (opérateur dynamic cast); bad typeid erreur de détection du véritable type d un objet désigné par un pointeur ou une référence (rôle de typeid); bad exception erreur de spécification d exception; out of range erreur d indice; invalid argument argument du constructeur bitset non valide; overflow error erreur de dépassement de valeur autorisée (classe bitset). Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 15 / 61 Retour sur les exceptions Utiliser les exceptions standards on peut utiliser tous les types d exceptions standards, en respectant bien sûr la raison pour laquelle elles existent, par souci de bon-sens; toutes les classes dérivant directement de la classe exception doivent redéfinir une fonction membre sans arguments what fournissant en valeur de retour un pointeur sur une chaîne expliquant la nature de l exception. C est le cas de toutes les classes d exceptions; toutes les classes d exceptions disposent d un constructeur recevant un argument de type chaîne de caractère dont la valeur pourra ensuite être récupérée par what. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 16 / 61
9 Les exceptions standards Premier exemple Exemple 1: classes dérivées monexception1 et monexception2 #i n c l u d e <i o s t r e a m > #i n c l u d e <s t d e x c e p t > u s i n g namespace s t d ; c l a s s monexception1 : p u b l i c e x c e p t i o n { monexception1 ( ) { c o n s t char what ( ) c o n s t throw ( ) { r e t u r n mon e x c e p t i o n 1 ; ; c l a s s monexception2 : p u b l i c e x c e p t i o n { monexception2 ( ) { ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 17 / 61 Les exceptions standards Premier exemple Exemple 1: programme test i n t main ( i n t argc, char a r g v [ ] ) { t r y { throw monexception1 ( ) ; catch ( e x c e p t i o n & e ) { cout << e x c e p t i o n : << e. what ( ) << e n d l ; t r y { throw monexception2 ( ) ; catch ( e x c e p t i o n & e ) { cout << e x c e p t i o n : << e. what ( ) << e n d l ; e x i t ( EXIT SUCCESS ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 18 / 61
10 Les exceptions standards Premier exemple Voilà la sortie du programme test précédent : Exemple 1: sortie écran =========================== e x c e p t i o n : mon e x c e p t i o n 1 e x c e p t i o n : 13 monexception2 =========================== Dans la classe monexception2, la fonction membre what n a pas été surdéfinie, on appelle donc celle de la classe mère exception. On voit finalement quel est le type de l exception qui a été levée, mais le nombre 13 n est pas à proprement parler une information compréhensible. Il vaut mieux donc surcharger systématiquement la fonction what. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 19 / 61 Les exceptions standards Deuxième exemple On souhaite définir une classe dérivée de exception, mais qui, cette-fois ci, stocke la chaîne de caractère dans un argument : Exemple 2: classe dérivée monexception3 #i n c l u d e <i o s t r e a m > #i n c l u d e <s t d e x c e p t > u s i n g namespace s t d ; c l a s s monexception3 : p u b l i c e x c e p t i o n { char ad ; monexception3 ( ) { monexception3 ( char s t r ) { ad=s t r ; c o n s t char what ( ) c o n s t throw ( ) { r e t u r n ad ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 20 / 61
11 Les exceptions standards Deuxième exemple Exemple 2: programme test i n t main ( i n t argc, char a r g v [ ] ) { t r y { throw monexception3 ( p r e m i e r t y p e ) ; catch ( e x c e p t i o n & e ) { cout << e x c e p t i o n : << e. what ( ) << e n d l ; t r y { throw monexception3 ( deuxième t y p e ) ; catch ( e x c e p t i o n & e ) { cout << e x c e p t i o n : << e. what ( ) << e n d l ; e x i t ( EXIT SUCCESS ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 21 / 61 Les exceptions standards Deuxième exemple Voilà la sortie du programme test précédent : Exemple 2: sortie écran =========================== e x c e p t i o n : p r e m i e r type e x c e p t i o n : deuxième type =========================== La possibilité de spécifier un tel message permet de distinguer dans le programme plusieurs sortes d exceptions. On pourrait bien sûr définir une classe qui dérive d exception et qui ait plusieurs arguments. Dans ce cas, on pourrait définir la fonction membre what pour construire la chaîne de caractère qui devra être affichée lors de la gestion de l exception associée. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 22 / 61
12 Compilation Exemple 1 Considérons une classe appelée exemple. On a deux fichiers : exemple.h où toutes les fonctions membres sont déclarées en ligne et exemple.cpp, ce dernier contenant la fonction main. Déclaration classe exemple Définition classe exemple Programme Compilation Module objet exemple.o Module objet programme utilisateur Édition de liens Programme exécutable Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 23 / 61 Compilation Exemple 1 CXX=g++ CFLAGS = O3 g3 Wall fmessage l e n g t h =0 LDFLAGS = O3 SRC = exemple. cpp OBJ = exemple. o HEADER = exemple. h EXEC = exemple a l l : $ (EXEC) exemple. o : exemple. h %.o : %.cpp $ (CXX) $ (CFLAGS) c $< %: %.o $ (CXX) $ ( LDFLAGS) o $@ $< run : exemple. c l e a n : rm r f $ (OBJ) $ (EXEC) Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 24 / 61
13 Compilation Exemple 2 Ici, nous disposons d une classe exemple et d un fichier main.cpp contenant le programme utilisateur. Définition classe exemple Déclaration classe exemple Programme utilisant exemple Compilation Compilation Module objet exemple.o Module objet programme utilisateur Édition de liens Programme exécutable Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 25 / 61 Compilation Exemple 2 SRC = exemple. cpp main. cpp OBJ = exemple. o main. o HEADER = exemple. h EXEC = main a l l : $ (EXEC) exemple. o : exemple. h main. o : exemple. h %.o : %.cpp $ (CXX) $ (CFLAGS) c $< main : $ (OBJ) $ (CXX) $ (LDFLAGS) o $@ $ˆ # ou o $@ $ (OBJ) run : main. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 26 / 61
14 Compilation Exemple 3 Notre programme contient maintenant 2 classes exemple1 et exemple2 indépendantes et définies séparemment, ainsi que le programme dans main.cpp. Définition classe exemple1 Déclaration classe exemple1 Compilation Module objet exemple1.o Définition classe exemple2 Déclaration classe exemple2 Compilation Module objet exemple2.o Édition de liens Programme exécutable Programme utilisant exemple1 et exemple2 Compilation Module objet programme utilisateur Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 27 / 61 Compilation Exemple 3 SRC = exemple1. cpp exemple2. cpp main. cpp OBJ = exemple1. o exemple2. o main. o HEADER = exemple1. h exemple2. h EXEC = main a l l : $ (EXEC) exemple1. o : exemple2. o : exemple1. h exemple2. h main. o : exemple1. h exemple2. h %.o : %.cpp $ (CXX) $ (CFLAGS) c $< main : $ (OBJ) $ (CXX) $ (LDFLAGS) o $@ $ˆ # ou o $@ $ (OBJ) Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 28 / 61
15 Compilation Exemple 4 La classe exemple1 est maintenant une classe composant / mère de la classe exemple2 : Définition classe exemple1 Déclaration classe exemple1 Compilation Module objet exemple1.o Définition classe exemple2 Déclaration classe exemple2 Compilation Module objet exemple2.o Édition de liens Programme exécutable Programme utilisant exemple1 et exemple2 Compilation Module objet programme utilisateur Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 29 / 61 Compilation Exemple 4 SRC = exemple1. cpp exemple2. cpp main. cpp OBJ = exemple1. o exemple2. o main. o HEADER = exemple1. h exemple2. h EXEC = main a l l : $ (EXEC) exemple1. o : exemple1. h exemple2. h exemple2. o : exemple2. h main. o : exemple1. h exemple2. h %.o : %.cpp $ (CXX) $ (CFLAGS) c $< main : $ (OBJ) $ (CXX) $ (LDFLAGS) o $@ $ˆ # ou o $@ $ (OBJ) Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 30 / 61
16 Compilation Conseils en dehors des cibles habituelles (all, clean, et les éventuels run et test), commencer par écrire les dépendances entre les.o et les.h; écrire la ou les règle(s) de compilation, permettant de générer les.o; écrire la ou les règles d édition de liens, permettant de générer les différents exécutables; tous les.h inclus dans un autre.h ou dans un.cpp doivent apparaître dans la liste des dépendances, sans oublier les différentes classes mères sur tous les niveaux; penser à utiliser le mécanisme de protection contre les inclusions multiples (voir CM1); le programme exécutable dépendra quasi systématiquement de tous les.o, tout comme son module objet de tous les.h; structurer l arborescence des fichiers comportant le logiciel. Par exemple, un sous-répertoire src pour toutes les sources, un sous-répertoire bin pour tous les exécutables, Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 31 / 61 Compilation Compléments : Makefile et affichage Utilisation de echo %.o : s r c /%. B u i l d i n g f i l e : I n v o k i n g GCC C++ Compiler $ (CXX) $ (CFLAGS) c F i n i s h e d b u i l d i n g t a r g e t main : $ B u i l d i n g t a r g e t : I n v o k i n g GCC C++ L i n k e r $ (CXX) $ (LDFLAGS) o $@ $ F i n i s h e d b u i l d i n g t a r g e t Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 32 / 61
17 Compilation Compléments : Makefile et affichage la commande echo permet d afficher une chaîne de caractère sur la sortie standard; le quand il est ajouté empêche l affichage de la commande avant son exécution. Dans l exemple précédent, on ne doit donc voir apparaître que l intitulé de la commande de compilation et pas l intitulé des commandes echo : Utilisation de echo B u i l d i n g t a r g e t : main I n v o k i n g GCC C++ L i n k e r g++ O3 o main main. o exemple1. o exemple2. o F i n i s h e d b u i l d i n g t a r g e t main Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 33 / 61 Compilation Compléments : options de make make -d affiche les informations de débogage en plus de l exécution des commandes. Cela permet par exemple de pister l utilisation de règles implicites lorsque les cibles définies ne sont pas utilisées; make -k poursuit la compilation après une erreur autant que possible : toutes les cibles indépendantes de celle à l origine de l erreur seront compilées; make -n affiche les commandes qui seront exécutées, mais ne les exécute pas; make -r force la non-utilisation des règles implicites de compilation. La compilation n aura pas lieu si les règles définies par l(utilisateur sont incorrectes. Dans le cas de classes indépendantes, dans les exemples précédents, si l on écrit %.o: %.h en lieu et place de la liste des instructions de la forme exemple.o: exemple.h, le compilateur ne comprendra pas la règle de compilation et la règle d édition de liens qui auront été écrites. Il utilisera donc des règles implicites. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 34 / 61
18 Héritage multiple Problématique L héritage multiple s affranchit d un grosse contrainte en permettant à une classe d hériter de plusieurs classes. La plupart de ce que nous avons vu dans le cours sur l héritage simple reste valable pour l héritage multiple (droits d accès, ), mais nous devons introduire un certain nombre d informations supplémentaires pour répondre aux questions suivantes : Comment exprimer une dépendance «multiple» au sein d une classe dérivée? Comment sont appelés les constructeurs et les destructeurs concernés? Comment régler les conflits qui risquent d apparaître dans des cas comme une classe D héritant de 2 classes B et C, qui héritent toutes deux d une même classe A? Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 35 / 61 Héritage multiple Mise en œuvre La classe pointcolore que nous avons utilisé jusqu à présent va maintenant dériver de deux classes : la classe point bien sûr et une classe colore. point colore pointcolore les classes point et colore c l a s s p o i n t { i n t x, y ; p o i n t ( ) { p o i n t ( ) { a f f i c h e ( ) { ; c l a s s c o l o r e { s h o r t c o u l e u r ; c o l o r e ( ) { c o l o r e ( ) { a f f i c h e ( ) { ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 36 / 61
19 Héritage multiple Mise en œuvre La classe pointcolore que nous avons utilisé jusqu à présent va maintenant dériver de deux classes : la classe point bien sûr et une classe colore. point colore pointcolore la classe pointcolore c l a s s p o i n t C o l o r e : p u b l i c p o i n t, p u b l i c c o l o r e { p o i n t C o l o r e ( ) { p o i n t C o l o r e ( ) { a f f i c h e ( ) { ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 37 / 61 Héritage multiple Constructeurs et destructeurs Constructeurs : le mécanisme est le même que pour l héritage simple : si l on a besoin de transmettre des informations aux constructeurs des classes mères, on utilise la syntaxe suivante : constructeur p o i n t C o l o r e : : p o i n t C o l o r e ( ) : p o i n t ( ), c o l o r e ( ) { Les constructeurs des classes mères seront donc appelés dans l ordre stipulé dans la déclaration de la classe (pas du ou des constructeurs), et ce avant le constructeur de la classe dérivée. Destructeurs : tout comme pour l héritage simple, la destruction d objets se fait membre à membre. L ordre d appel des destructeurs est l inverse de l ordre d appel des constructeurs. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 38 / 61
20 Héritage multiple Un exemple complet La classe point #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; c l a s s p o i n t { i n t x, y ; p o i n t ( i n t abs, i n t ord ) { cout << ++ c o n s t r. p o i n t << e n d l ; x=abs ; y=ord ; p o i n t ( ) { cout << d e s t r. p o i n t << e n d l ; v o i d a f f i c h e ( ) { cout << Coordonnées : << x << << y << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 39 / 61 Héritage multiple Un exemple complet La classe colore #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; c l a s s c o l o r e { s h o r t c o u l e u r ; c o l o r e ( s h o r t c l ) { cout << ++ c o n s t r. c o l o r e << e n d l ; c o u l e u r=c l ; c o l o r e ( ) { cout << d e s t r. c o l o r e << e n d l ; v o i d a f f i c h e ( ) { cout << C o u l e u r : << c o u l e u r << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 40 / 61
21 Héritage multiple Un exemple complet La classe pointcolore #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; c l a s s p o i n t C o l o r e : p u b l i c p o i n t, p u b l i c c o l o r e { p o i n t C o l o r e ( i n t, i n t, i n t ) ; p o i n t C o l o r e ( ) { cout << d e s t r. p o i n t C o l o r e << e n d l ; v o i d a f f i c h e ( ) { p o i n t : : a f f i c h e ( ) ; c o l o r e : : a f f i c h e ( ) ; ; p o i n t C o l o r e : : p o i n t C o l o r e ( i n t abs =0, i n t ord =0, i n t c l =1) : p o i n t ( abs, ord ), c o l o r e ( c l ) { cout << ++++ c o n s t r. p o i n t C o l o r e << e n d l ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 41 / 61 Héritage multiple Un exemple complet Le programme test main ( ) { p o i n t C o l o r e p ( 3, 9, 2 ) ; cout << << e n d l ; p. a f f i c h e ( ) ; cout << << e n d l ; p. p o i n t : : a f f i c h e ( ) ; cout << << e n d l ; p. c o l o r e : : a f f i c h e ( ) ; cout << << e n d l ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 42 / 61
22 Héritage multiple Un exemple complet Sortie écran ++ c o n s t r. p o i n t ++ c o n s t r. c o l o r e ++++ c o n s t r. p o i n t C o l o r e Coordonnées : 3 9 C o u l e u r : 2 Coordonnées : 3 9 C o u l e u r : 2 d e s t r. p o i n t C o l o r e d e s t r. c o l o r e d e s t r. p o i n t Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 43 / 61 Héritage multiple Attributs multiples Attributs multiples c l a s s A { i n t x ; ; c l a s s C : p u b l i c A, p u b l i c B { ; c l a s s B { i n t x ; ; Les deux attributs coexistent (tout comme on l a vu en héritage simple avec la redéfinition d attributs). On les distingue donc grâce à l opérateur d accès : A::x et B::x. Que se passe t-il maintenant si les classes A et B héritent d une même classe D? Les attributs de D sont-ils dupliqués? Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 44 / 61
23 Classes virtuelles Problématique On se place dans le cadre suivant : A B C D Héritage conflictuel c l a s s A { i n t x, y ; ; c l a s s B : p u b l i c A { ; c l a s s C : p u b l i c A { ; c l a s s D : p u b l i c B, p u b l i c C { ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 45 / 61 Classes virtuelles Problématique En quelque sorte, D hérite 2 fois de la classe A. Cela signifie donc que les membres x et y de A apparaissent 2 fois dans la classe D. La question ne se pose pas vraiment pour les fonctions membres, elles existent en un seul exemplaire dans la classe A, et deviennent des fonctions membres de la classe dérivée par héritage. Par contre, les attributs x et y sont dupliqués dans toutes les instances de D. Y a-t-il redondance? La réponse est ça dépend. Si on souhaite utiliser 2 jeux de données de A, alors on utilise l opérateur d accès pour sélectionner les attributs hérités par l intermédiaire de B et de C : A::C::x et A::C::x ou B::x et C::x si B et C ne disposent pas d attribut x. On général, on ne souhaite pas cette duplication de données. Si on peut certes se débrouiller pour utiliser systématiquement l un des deux jeux, cela risque d être fastidieux. Le mécanisme des classes virtuelles apporte une solution commode. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 46 / 61
24 Classes virtuelles Mise en œuvre On utilise le mot-clé virtual pour spécifier aux classe filles qu en cas de descendant commun, la classe mère se sera inclue qu une seule et unique fois : Dérivation virtuelle c l a s s A { i n t x, y ; ; c l a s s B : p u b l i c v i r t u a l A { ; c l a s s C : v i r t u a l p u b l i c A { ; c l a s s D : p u b l i c B, p u b l i c C { ; Remarquer que le mot-clé virtual peut être placé avant ou après le mot-clé spécifiant le type de dérivation. Que se passe t-il maintenant pour les constructeurs et les destructeurs? Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 47 / 61 Classes virtuelles Constructeurs et destructeurs Les cas que l on sait traiter : A D E B F C Dans ces deux cas, nous savons comment échanger des informations entre un constructeur d une classe et les constructeurs de ses ascendants directs (ex: B pour C). Par contre, on ne sait pas transmettre des informations entre le constructeur d une classe et les constructeurs de ses ascendants indirects (ex: A pour C), mais cela n était pas utile, puisqu il suffit d y aller étape par étape, d un ascendant direct au suivant, Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 48 / 61
25 Classes virtuelles Constructeurs et destructeurs Que se passe t-il dans le cas suivant? A B C D 2 possibilités : 1 la classe A est déclarée virtuelle dans B et C; 2 la classe A n est pas déclarée virtuelle dans B et C. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 49 / 61 Classes virtuelles Constructeurs et destructeurs Si A n est pas déclarée virtuelle dans B et C, tout se passe comme si B et C dérivaient de deux classes A, ici notées A1 et A2 : A A1 A2 B C B C D D Les constructeurs seront appelés dans l ordre suivant : A1, B, A2, C et D. En ce qui concerne les transferts d informations, on peut très bien imaginer que les classes B et C n aient pas prévu les mêmes arguments en ce qui concerne A, puisqu il y aura construction de deux objets A différents. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 50 / 61
26 Classes virtuelles Constructeurs et destructeurs Si A est déclarée virtuelle dans B et C, on ne peut plus procéder de la même manière, car un seul objet A sera créé. Quels arguments faut-il transmettre au constructeur? Ceux prévus par B? Ceux prévus par C? La solution apportée par C++ est la suivante : le choix des informations a transmettre à A n a plus lieu dans B ou C, mais dans D : On spécifie dans ce cas dans le constructeur de D les informations destinées à A; il devient inutile (en fait, c est interdit) que les constructeurs de B et C puissent transmettre des informations à A. C est dans ce cas le constructeur par défaut de A qui sera appelé à la déclaration d une instance de B ou C. Il faut donc que la classe A dispose d un constructeur sans arguments. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 51 / 61 Classes virtuelles Constructeurs et destructeurs E F Le constructeur d une classe virtuelle est toujours appelé avant les autres. L ordre d appel des constructeurs est donc ici : F, E, G, H et I et pas E, F, G, H, I G (virtual F) H (virtual F) I Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 52 / 61
27 Classes virtuelles Un exemple colore point masse pointcolore pointmasse pointcoloremasse Pour éviter la duplication des membres de point dans pointcoloremasse, il est donc nécessaire que les classes pointcolore et pointmasse dérivent virtuellement de point. Cette dernière devra donc avoir un constructeur sans arguments. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 53 / 61 Classes virtuelles Un exemple La classe point c l a s s p o i n t { i n t x, y ; p o i n t ( i n t abs, i n t ord ) { cout << ++ c o n s t r. p o i n t : ; cout << abs << << ord << e n d l ; x=abs ; y=ord ; p o i n t ( ) { cout << ++ c o n s t r. d e f a u t p o i n t << e n d l ; x =0; y =0; v o i d a f f i c h e ( ) { cout << Coordonnées : << x << << y << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 54 / 61
28 Classes virtuelles Un exemple La classe colore c l a s s c o l o r e { s h o r t c o u l e u r ; c o l o r e ( s h o r t c l ) { cout << ++ c o n s t r. c o l o r e : ; cout << c l << e n d l ; c o u l e u r=c l ; v o i d a f f i c h e ( ) { cout << C o u l e u r : << c o u l e u r << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 55 / 61 Classes virtuelles Un exemple La classe masse c l a s s masse { i n t mas ; masse ( i n t m) { cout << ++ c o n s t r. masse : ; cout << mas << e n d l ; mas=m; v o i d a f f i c h e ( ) { cout << Masse : << mas << e n d l ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 56 / 61
29 Classes virtuelles Un exemple La classe pointcolore c l a s s p o i n t C o l o r e : p u b l i c v i r t u a l p o i n t, p u b l i c c o l o r e { p o i n t C o l o r e ( i n t abs, i n t ord, s h o r t c l ) : c o l o r e ( c l ) { cout << ++++ c o n s t r. p o i n t C o l o r e : ; cout << abs << << ord << << c l << e n d l ; v o i d a f f i c h e ( ) { p o i n t : : a f f i c h e ( ) ; c o l o r e : : a f f i c h e ( ) ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 57 / 61 Classes virtuelles Un exemple La classe pointmasse c l a s s pointmasse : p u b l i c v i r t u a l p o i n t, p u b l i c masse { pointmasse ( i n t abs, i n t ord, i n t m) : masse (m) { cout << ++++ c o n s t r. p o i n t M a s s e : ; cout << abs << << ord << << m << e n d l ; v o i d a f f i c h e ( ) { p o i n t : : a f f i c h e ( ) ; masse : : a f f i c h e ( ) ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 58 / 61
30 Classes virtuelles Un exemple La classe pointcoloremasse c l a s s p o i n t C o l o r e M a s s e : p u b l i c p o i n t C o l o r e, p u b l i c p o i ntmasse { p o i n t C o l o r e M a s s e ( i n t abs, i n t ord, s h o r t c l, i n t m) : p o i n t ( abs, ord ), p o i n t C o l o r e ( abs, ord, c l ), p o i n t M a s s e ( abs, ord,m) { cout << c o n s t r. p o i n t C o l o r e M a s s e : ; cout << abs << << ord << ; cout << c l << << m << e n d l ; v o i d a f f i c h e ( ) { p o i n t : : a f f i c h e ( ) ; c o l o r e : : a f f i c h e ( ) ; masse : : a f f i c h e ( ) ; ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 59 / 61 Classes virtuelles Un exemple Le programme test main ( ) { p o i n t C o l o r e pc ( 3, 9, 2 ) ; pc. a f f i c h e ( ) ; pointmasse pm( 1 2, 2 5, ) ; pm. a f f i c h e ( ) ; p o i n t C o l o r e M a s s e pcm ( 2, 5, 1 0, 2 0 ) ; pcm. a f f i c h e ( ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 60 / 61
31 Classes virtuelles Un exemple Sortie écran ++ c o n s t r. d e f a u t p o i n t ++ c o n s t r. c o l o r e : c o n s t r. p o i n t C o l o r e : Coordonnées : 0 0 C o u l e u r : 2 ++ c o n s t r. d e f a u t p o i n t ++ c o n s t r. masse : c o n s t r. p o i n t M a s s e : Coordonnées : 0 0 Masse : c o n s t r. p o i n t : c o n s t r. c o l o r e : c o n s t r. p o i n t C o l o r e : c o n s t r. masse : c o n s t r. p o i n t M a s s e : c o n s t r. p o i n t C o l o r e M a s s e : Coordonnées : 2 5 C o u l e u r : 10 Masse : 20 Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 61 / 61
Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string
Génie Logiciel I Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M.
Plus en détailIntroduction à l héritage en C++
Algorithmique/Langage 1ère année Introduction à l héritage en C++ Yacine BELLIK IUT d Orsay Yacine.Bellik@iut-orsay.fr 1 Bibliographie Ce cours est basé sur le livre suivant : Programmer en C++, 5ème édition
Plus en détailTP1 : Initiation à Java et Eclipse
TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les
Plus en détailC++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy
Claude Delannoy Programmer en langage C++ 8 e édition Avec une intro aux design patterns et une annexe sur la norme C++11 Groupe Eyrolles, 1993-2011. Groupe Eyrolles, 2014, pour la nouvelle présentation,
Plus en détailLa gestion des exceptions
La gestion des exceptions Même lorsqu un programme est au point, certaines circonstances exceptionnelles peuvent compromettre la poursuite de son exécution ; il peut s agir par exemple de données incorrectes
Plus en détailCours Langage C/C++ Programmation modulaire
Cours Langage C/C++ Programmation modulaire Thierry Vaira BTS IRIS Avignon tvaira@free.fr «v0.1 Rappel Programmation modulaire (1/2) Le découpage d'un programme en sous-programmes est appelée programmation
Plus en détailCours 1: Java et les objets
Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/
Plus en détailPremiers Pas en Programmation Objet : les Classes et les Objets
Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.
Plus en détailCours Programmation Système
Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février
Plus en détailQuelques éléments de compilation en C et makefiles
Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable
Plus en détailTraduction des Langages : Le Compilateur Micro Java
BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant
Plus en détailet Programmation Objet
FACULTE POLYTECHNIQUE DE MONS Service d Informatique et Programmation Objet Mohammed Benjelloun 2 ème Bachelier Année académique 2008-2009 Table des matières Avant-propos--------------------------------------------------------------------------
Plus en détailUne introduction à Java
Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)
Plus en détailProgrammer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)
Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes
Plus en détailChapitre VI- La validation de la composition.
Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions
Plus en détailLe prototype de la fonction main()
Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme
Plus en détailProgrammation Objet Java Correction
INSA - 4 AE 2007 2008 Durée : 1H00 Contrôle Programmation Objet Java Correction Consignes Tous les documents sont autorisés, mais ils seront peu utiles. Indiquez vos nom et prénom sur chaque feuille. Le
Plus en détailIntroduction au langage C
Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les
Plus en détailGénéralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code
Généralités javadoc Université de Nice - Sophia Antipolis Richard Grin Version 1.4.1 8/2/11 javadoc produit de la documentation en partant de commentaires particuliers insérés dans le code source des classes
Plus en détailProgrammation par les Objets en Java
Programmation par les Objets en Java Najib TOUNSI Les classes en Java (TD 3) I. Notion de classe I.1 Classe, champs, méthodes, instanciation, this, private vs. public. Créer une classe Point (coordonnée
Plus en détailNFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007
NFP 121 Java et les Threads Présentation : Thierry Escalarasse Mai 2007 Plan du cour Présentation de la notion de Threads La classe Thread L interface Runnable Les états d un thread La Synchronisation
Plus en détailCours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr
. Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le
Plus en détailIntroduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf
Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations
Plus en détailBases Java - Eclipse / Netbeans
Institut Galilée PDJ Année 2014-2015 Master 1 Environnements Java T.P. 1 Bases Java - Eclipse / Netbeans Il existe plusieurs environnements Java. Il est ESSENTIEL d utiliser la bonne version, et un environnement
Plus en détailC++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement
C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement des objets d'une classe Utilisation d'une classe Droit
Plus en détailProgrammation système en C/C++
Programmation système en C/C++ Jean-Baptiste Vioix (jb.vioix@free.fr) LE2I - ENESAD http://jb.vioix.free.fr 1-41 Programmation en C/C++ sous Unix Il existe des très nombreux outils de développement sous
Plus en détailRMI le langage Java XII-1 JMF
Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine
Plus en détailPlan Pédagogique du cours
Plan Pédagogique du cours Module: Programmation Orientée Objet Section : informatique Niveau : 3 ème niveau (gestion, industriel, réseau) Volume Horaire : 22,5 heures Cours Intégrés + 45 Travaux Pratiques
Plus en détailas Architecture des Systèmes d Information
Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes
Plus en détailSeance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.
Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece
Plus en détailMon premier rpm. http://alexandre-mesle.com 7 juin 2010. 1 Avant de commencer 2 1.1 RPM... 2 1.2 URPMI... 2 1.3 RPMBUILD... 2
Mon premier rpm http://alexandre-mesle.com 7 juin 2010 Table des matières 1 Avant de commencer 2 1.1 RPM....................................................... 2 1.2 URPMI.....................................................
Plus en détailCréation d objet imbriqué sous PowerShell.
Création d objet imbriqué sous PowerShell. Par Laurent Dardenne, le 13/01/2014. Niveau Ce tutoriel aborde la création d objet composé, c est-à-dire que certains de ses membres seront eux-mêmes des PSObjects.
Plus en détailSystèmes d exploitation
Systèmes d exploitation Virtualisation, Sécurité et Gestion des périphériques Gérard Padiou Département Informatique et Mathématiques appliquées ENSEEIHT Novembre 2009 Gérard Padiou Systèmes d exploitation
Plus en détailHéritage presque multiple en Java (1/2)
Héritage presque multiple en Java (1/2) Utiliser deux classes ou plus dans la définition d'une nouvelle classe peut se faire par composition. class Etudiant{ int numero; Diplome d; float passeexamen(examen
Plus en détailLangage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2
Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD
Plus en détailLangage et Concepts de ProgrammationOrientée-Objet 1 / 40
Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr
Plus en détailGénéralités sur le Langage Java et éléments syntaxiques.
Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...
Plus en détailProgrammation système I Les entrées/sorties
Programmation système I Les entrées/sorties DUT 1 re année Université de Marne La vallée Les entrées-sorties : E/O Entrées/Sorties : Opérations d échanges d informations dans un système informatique. Les
Plus en détailFacultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object
Facultés Universitaires Notre-Dame de la Paix Conception et Programmation Orientées- Object 2008-2009 RÉSUMÉ PRATIQUE... 4 CLASSE OBJET... 4 NOTION D HÉRITAGE... 4 LE POLYMORPHISME... 5 LES CLASSES ABSTRAITES...
Plus en détailInfo0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Plus en détailFormation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux
Formation Webase 5 Ses secrets, de l architecture MVC à l application Web Adrien Grand Centrale Réseaux Sommaire 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un
Plus en détailTP1. Outils Java Eléments de correction
c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par
Plus en détailLe langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie
Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis
Plus en détailRAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)
CLASSE RACINE Object ancêtre de toutes les classes RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) définit donc des méthodes héritées par toutes
Plus en détailExceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;
CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe
Plus en détailJava Licence Professionnelle CISII, 2009-10
Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation
Plus en détailChapitre I Notions de base et outils de travail
Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement
Plus en détailConventions d écriture et outils de mise au point
Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette
Plus en détailOS Réseaux et Programmation Système - C5
OS Réseaux et Programmation Système - C5 Rabie Ben Atitallah rabie.benatitallah@univ-valenciennes.fr RPC - XDR Rappel RPC: Remote Procedure Call Besoin d un environnement de haut niveau pour le développement
Plus en détailIntroduction aux concepts d ez Publish
Introduction aux concepts d ez Publish Tutoriel rédigé par Bergfrid Skaara. Traduit de l Anglais par Benjamin Lemoine Mercredi 30 Janvier 2008 Sommaire Concepts d ez Publish... 3 Système de Gestion de
Plus en détailPolycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5
UNIVERISTE MOHAMMED PREMIER Faculté des Sciences d Oujda Oujda - Maroc Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5 Pr. El Mostafa DAOUDI Département de Mathématiques
Plus en détailModule.NET 3 Les Assemblys.NET
Module.NET Chapitre 3 Les Assemblys.NET 2011/2012 Page 1 sur 13 Contenu Cours... 3 3.1 - Définition d un assembly.net... 3 3.2 - Private assembly ou assembly privé.... 3 3.3 - Shared assembly ou assembly
Plus en détailApprendre Java en 154 minutes
Apprendre Java en 154 minutes Tutorial Java 1.6 - HESB-TI Stéphanie Calderara José R. Beuret Quentin Cosendey Mai 2008 Table des matières 1 Objet, classe et modificateur 3 1.1 Le premier pas..........................
Plus en détailClaude Delannoy. 3 e édition C++
Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.
Plus en détailLMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour
LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections
Plus en détailINTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
Plus en détailCours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan
Cours de C++ François Laroussinie Dept. d Informatique, ENS de Cachan 2 novembre 2005 Première partie I Introduction Introduction Introduction Algorithme et programmation Algorithme: méthode pour résoudre
Plus en détailClasses et Objets en Ocaml.
Classes et Objets en Ocaml. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/2/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/2/ Cours Exercices Slide 1 1. Objets 2.
Plus en détailRemote Method Invocation (RMI)
Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe
Plus en détailIntroduction à C++ et à wxwidgets
Introduction à C++ et à wxwidgets Master IGC 1ère année Année universitaire 2011/2012 Christophe Renaud Version 1.5 19/09/2011 Introduction Objectifs du cours Introduction au langage objet C++ Introduction
Plus en détailArguments d un programme
Arguments d un programme L2 SPI, Bruno Jacob 1 Arguments Quand on appelle un programme dans un environnement UNIX ou MS- DOS, on compose une ligne de commandes de la forme : nom-du-programme argument1
Plus en détailProgrammation C. Apprendre à développer des programmes simples dans le langage C
Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités
Plus en détail1.6- Génération de nombres aléatoires
1.6- Génération de nombres aléatoires 1- Le générateur aléatoire disponible en C++ 2 Création d'un générateur aléatoire uniforme sur un intervalle 3- Génération de valeurs aléatoires selon une loi normale
Plus en détailTP1 : Initiation à Java et Eclipse
TP1 : Initiation à Java et Eclipse 1 I. Objectif du TP TP1 : Initiation à Java et Eclipse Programmation Mobile Initiation à l environnement Eclipse et aux notions de base du langage Java. II. Environnement
Plus en détailBases de programmation. Cours 5. Structurer les données
Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et
Plus en détailJava c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java
1 - Vue générale 2 - Mon premier programme 3 - Types de Programme 1 2 c est quoi? Technologie développée par SUN Microsystems lancée en 1995 Dans un des premiers papiers* sur le langage JAVA, SUN le décrit
Plus en détail2 Grad Info Soir Langage C++ Juin 2007. Projet BANQUE
2 Grad Info Soir Langage C++ Juin 2007 Projet BANQUE 1. Explications L'examen comprend un projet à réaliser à domicile et à documenter : - structure des données, - objets utilisés, - relations de dépendance
Plus en détailServeur d'application Client HTML/JS. Apache Thrift Bootcamp
Serveur d'application Client HTML/JS Apache Thrift Bootcamp Pré-requis La liste ci-dessous de logiciels doit être installée et opérationnelle sur la machine des participants : Compilateur thrift http://thrift.apache.org/
Plus en détailINFO-F-404 : Techniques avancées de systèmes d exploitation
Nikita Veshchikov e-mail : nikita.veshchikov@ulb.ac.be téléphone : 02/650.58.56 bureau : 2N8.213 URL : http://student.ulb.ac.be/~nveshchi/ INFO-F-404 : Techniques avancées de systèmes d exploitation Table
Plus en détailPour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère
L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la
Plus en détailIntroduction à la programmation Travaux pratiques: séance d introduction INFO0201-1
Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 B. Baert & F. Ludewig Bruno.Baert@ulg.ac.be - F.Ludewig@ulg.ac.be Qu est-ce que la programmation? Programmer Ecrire un
Plus en détailEnvironnements de développement (intégrés)
Environnements de développement (intégrés) Tests unitaires, outils de couverture de code Patrick Labatut labatut@di.ens.fr http://www.di.ens.fr/~labatut/ Département d informatique École normale supérieure
Plus en détailChapitre VIII. Les bases de données. Orientées Objet. Motivation
Chapitre VIII Motivation Le modèle relationnel connaît un très grand succès et s avère très adéquat pour les applications traditionnelles des bases de données (gestion) Les bases de données Orientées Objet
Plus en détailPrincipes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle
2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA Stéphane Vialle Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle 1 Principes 2 Architecture 3 4 Aperçu d utilisation
Plus en détailProgrammation MacOSX / ios
Programmation MacOSX / ios Master Ingénierie Informatique 2011-2012 Jean-Baptiste.Yunès@liafa.jussieu.fr deux extensions objets de C : C++ (Stroustrup) Objective-C (Cox & Love) ajout de constructions à
Plus en détailPlan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7
Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin
Plus en détailPROGRAMMATION PAR OBJETS
PROGRAMMATION PAR OBJETS Java Environnement et constructions spécifiques Walter Rudametkin Maître de Conférences Bureau F011 Walter.Rudametkin@polytech-lille.fr B. Carré Polytech Lille 2 Java (Sun 1995)
Plus en détailCours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation
Plus en détailCours d initiation à la programmation en C++ Johann Cuenin
Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................
Plus en détailCours 1 : Introduction Ordinateurs - Langages de haut niveau - Application
Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un
Plus en détailCours 14 Les fichiers
Cours 14 Les fichiers F. Gayral 1 Fichier : définition /media/travaux/documents/fgenseignement/java1/courstpsfgfc/14-fichiers/voirtypefichiers Fichier = ensemble d informations codées et stockées sur une
Plus en détailAuto-évaluation Programmation en Java
Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN
Plus en détailSynchro et Threads Java TM
Synchro et Threads Java TM NICOD JEAN-MARC Master 2 Informatique Université de Franche-Comté UFR des Sciences et Techniques septembre 2008 NICOD JEAN-MARC Synchro et Threads avec Java TM 1 / 32 Sommaire
Plus en détailM1if22 - Logiciels éducatifs Conception & rôle de l enseignant
M1if22 - Logiciels éducatifs Conception & rôle de l enseignant Stéphanie Jean-Daubias Stephanie.Jean-Daubias@liris.univ-lyon1.fr http://liris.cnrs.fr/stephanie.jean-daubias/ Plan du cours Méthodologies
Plus en détailSouad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/
Recherche opérationnelle Les démonstrations et les exemples seront traités en cours Souad EL Bernoussi Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/ Table des matières 1 Programmation
Plus en détailHMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control
HMI target Visu / PLC HMI Pour réaliser une interface homme machine avec PLC control VERSION : 1.4 / PH DATE : 5 Novembre 2014 Sommaire Ce manuel explique de manière pratique les étapes successives pour
Plus en détailJava Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets
Licence Professionnelle CISII, 2009-2010 Cours 2 : Classes et Objets 1 Classes et Objets Objectifs des LOO : - Manipuler des objets - Découper les programmes suivant les types des objets manipulés - Regrouper
Plus en détailInitiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr
Initiation à JAVA et à la programmation objet raphael.bolze@ens-lyon.fr O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation
Plus en détailGOL502 Industries de services
GOL502 Industries de services Conception d un service Partie IIb Version 2013 Introduction Conception d un service partie IIb Nous verrons dans ce chapitre Modélisation d un service; Langage de modélisation
Plus en détailPolymorphisme, la classe Object, les package et la visibilité en Java... 1
Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....
Plus en détailDE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51
DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de
Plus en détail1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)
1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d
Plus en détailRemote Method Invocation en Java (RMI)
Remote Method Invocation en Java (RMI) Modélisation et construction des applications réparties (Module M-4102C) J. Christian Attiogbé Fevrier 2015 J. Christian Attiogbé (Fevrier 2015) Remote Method Invocation
Plus en détailManuel d'installation de GESLAB Client Lourd
Manuel d'installation GESLAB Client Lourd Référence Date de la dernière mise à jour Rédigé par Objet GESLAB_MINS_TECH_Manuel d'installation GESLAB Client 15/04/2013 Steria Manuel d'installation de GESLAB
Plus en détailINITIATION AU LANGAGE JAVA
INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal
Plus en détailWINDOWS SHAREPOINT SERVICES 2007
WINDOWS SHAREPOINT SERVICES 2007 I. TABLE DES MATIÈRES II. Présentation des «content types» (Type de contenu)... 2 III. La pratique... 4 A. Description du cas... 4 B. Création des colonnes... 6 C. Création
Plus en détailStructure d un programme et Compilation Notions de classe et d objet Syntaxe
Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types
Plus en détailP r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )
P r ob lé m a t iq u e d e la g é n é r icit é les versions de Java antérieures à 1.5 permettaient de créer des classes de structures contenant n'importe quels types d'objet : les collections (classes
Plus en détailTraitement de données
Traitement de données Présentation du module TINI Présentation du module : Le module Tini se décline en plusieurs versions, il est constitué d une carte d application et d un module processeur : Les modules
Plus en détailWASD en environnement haute disponibilité Jean-Pierre PETIT WASD Le produit WASD WASD signifie Wide Area Surveillance Division C est le nom d une division de la défense australienne qui a accepté en 1996
Plus en détail