Programmation orientée objet

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Spécialisation/généralisation Héritage Polymorphisme.
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Langages objet Définitions Traduction des méthodes en C++
Approfondissement du langage
Introduction à Java - les paquetages -
C.
JAV - TD 6 Structures de données JAVA
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Programmation Orientée Objet (POO)
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Programmation par Objets et Java
Chapitre III Héritage (début)
Principes de programmation (suite)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Langage Oriente Objet Cours 4.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
C++ : classes Introduction aux Langages Orientés Objets
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Structures de données IFT-10541
Introduction au paradigme orienté-objet (suite)
Design Pattern: Decorator
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
La Modélisation Orientée Objet Concevoir un programme : modélisation du problème à résoudre Notion de programme : machine de Turing Pouvoir d’expression.
11/04/ L'héritage Cours 7 Cours 7.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Réaliser par: Sadok Amel Cheboui hassiba
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Le polymorphisme.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les classes Introduction aux Langages Orientés Objets
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
Classes abstraites, interface Classe interne Classes enveloppes
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Transcription de la présentation:

Programmation orientée objet

Les objets L'encapsulation Héritage Généricité Modularité Sécurité Réutilisation du code Généricité Traitement abstrait de donnée

L’encapsulation Concevoir une classe Les données membres Se demander ce qui est accessible au monde Ce qui doit être caché (implémentation) Définir le moyen de communiquer avec les autres Les données membres Peuvent être des types primitifs Ou des objets de n’importe quel classe On parle de composition ou d’agrégation

L’encapsulation L’accès aux données membres doit être contrôler Ecrire des méthodes pour l’accès aux donner Et pour la modification des données Grace aux modificateur d’accès, on peut empêcher l’accès directe aux données membres en dehors de la classe

Visibilité des données membres Modificateurs class NomDeLaClasse [extends ClasseMere] [implements NomInterface] { Modificateur type nom; Modificateur typeRetour nom(typeParam1, …); } Modificateur Signification par defaut Visible par toutes les classes du même package public Visible par toutes les autres classes protected Modificateur de méthode : visible par les classes du même package et les classes héritées private Visibles qu’a l’intérieur de la classe static Membre partagé par toutes les instances. Méthode qui n’agit que sur les membres static, pas besoin d’avoir un objet pour l’utiliser. final Le membre ne peut être définie qu’une fois. La méthode ne peut être redefinie

Conception C’est pas facile Il n’y pas de recette miracle Mais certaine règles pour y arriver Motif de conception (design pattern) Décomposer (diviser pour régner) Pensez en terme de modules réutilisables

Surcharge Différentes méthodes peuvent avoir le même nom Pour savoir laquelle est appelée, c’est les paramètre qui jouent Donc même nom mais paramètres différents Cela permet d’avoir un nommage cohérent Attention aux conversions implicite de type

Test de la surcharge Créer une nouvelle classe TestSurcharge Chaque méthode écrit simplement sa signature créer une méthode void f1(type param) pour les types char, byte, short, long, float, double créer une méthode void f2(type param) byte, short, long, float, double etc jusqu’à f7 avec seuelement double tester pour tous les types : type arg = val; f1(val); f2(val) …

Pause !

Exercice Définir une classe Student Avec les données membres String name; String firstName; String studentNumber Avec une méthode printInformation qui affiche le nom et le prénom Tester cette méthode en instanciant un objet Student Définir une classe Teacher Données membres … printInformation Définir une classe Car Ajouter un membre Car aux classes Student et Teacher Définir les modificateur et accesseurs pour les données membres de ces classes

Héritage Si une classe est presque comme une autre Réutilisation du code Hiérarchisation du code On parle de classe mère et classe fille Les méthodes et données membres sont héritées Rectangle position largeur longueur affiche calculAire Cercle position centre affiche calculAire Forme géométrique affiche calculAire

Héritage Penser l’héritage comme une relation est-un Un rectangle est une forme géométrique Tout ce qui est vrai pour une forme géométrique l’est pour un rectangle Tout ce que l’on peut faire avec une forme géométrique, on peut le faire avec un rectangle Une référence d’une classe peut contenir un objet de classe héritée Cela permet le traitement générique des données

Héritage Avec une hiérarchie de classes Polymorphisme Une méthode avec le même nom dans la classe mère et dans la fille Un algorithme écrit pour la classe mère fonctionnera pour la classe fille, même si la fille spécialise les méthodes Classe abstrait : déclare des méthodes sans les définir

Conception de l’héritage Factoriser les éléments commun Spécialiser dès que possible Lors de l’utilisation de classe Prendre en paramètre la classe de plus bas niveau correspondant à l’algorithme

Exemple : une classe de liste Une veut concevoir des listes de … Une classe mère Liste Des classe filles ListeDe Dans la classe mère des méthodes abstraites Pour accéder à l’élément suivant Pour savoir si un élément suivant existe Les classes filles implémentent ces méthodes

Exemple : une classe de liste Pour le traitement des listes Parcours de liste générique Tri de liste générique Si les élément de la liste sont comparables

En Java Visibilité d’une classe Modificateurs : Modificateurs class NomDeLaClasse [extends ClasseMere] [implements NomInterface] {…} Modificateur Signification abstract Des méthodes sont abstraite : sans définition. La classe ne peux être instancier, elle sert seulement de classe mère. final La classe ne peut servir de classe mère private La classe est locale au fichier ou elle est définie public La classe est accessible partout

En Java extends : spécifie la classe mère Au plus une classe mère Une classe fille peut surchargé (redéfinir) un méthode de la classe mère (polymorphisme) implements : définie des interfaces Une interface est un ensemble de déclaration de méthode Cela permets « l’héritage multiple »

Interface en Java Toutes les méthodes sont implicitement abstraites [public/package] interface NomInterface [extends NomInterface, AutreInterface] { // méthode // champs static } Toutes les méthodes sont implicitement abstraites Les membres sont implicitement static et final Toutes classe qui implémente une interface doit définir les méthodes de l’interface

Exercice Définir une classe People Avec les données membres String name; String firstName; Car car; … Avec une méthode printInformation qui affiche le nom et le prénom, appel printInformation de Car Tester cette méthode en instanciant un objet de type People Modifier Student et Teacher pour hériter de People

Exercice suite Définir une interface InformationPrint avec une méthode printInformation Modifier les classes définies pour qu’elle implémente la nouvelle interface Créer un tableau de InformationPrint et affecter à ce tableau les objets créés. Appeler la méthode printInformation pour chaque élément du tableau

Encore du Java Les constructeurs new appel le constructeur de la classe Il permet d’initialiser les données membres De rendre l’objet dans un état cohérent Un constructeur est une méthode ayant le même nom que la classe Peut avoir des paramètres Plusieurs constructeurs possible Appel du constructeur de la class mère : super()

On continue l’exo Ajouter plusieurs constructeurs aux classes Sans paramètres Avec un ou plusieurs paramètres pour initialiser les données membres

Retour sur les références

Référence et affectation Vous vous souvenez des histoires d’adresse ? Exemple : Il faut faire s1.name = s2.name Student s1 = new Student(); Student s2 = new Student(); s1.name = ‘’a’’; s2.name = ‘’b’’; s2.printInformation(); s2 = s1; s1.name = ‘’c’’;

Clone Toutes classe dérive de la classe Objet La classe objet contient une méthode protected clone() Il faut la redéfinir en public pour rendre un objet clonable Et il faut aussi implémenter l’interface Clonable Sinon on à une Exception, mais on en parlera plus tard La méthode clone doit appeler super.clone()

Clone Enfin il faut cloner les membres objet Soit par l’appel de clone Soit par new et en initialisation les membres public Object clone() { Object o = null; try { o = super.clone(); } catch(CloneNotSupportedException e) { e.printStackTrace(System.err); return o;

Encore un exo Implémenter la méthode clone pour les classes People, Student et Teacher Tester que tout fonctionne bien Instancier deux objet d’une classe cloner l’une dans l’autre modifier les valeurs des données membres

Pour la culture Comment fonctionne l’héritage dans la machine (une possibilité) Chaque objet représente une adresse A cette adresse on trouve l’adresse du début des méthodes le nombre de méthodes les données membres Le compilateur appel les méthode par leur adresse, c’est donc dynamique à l’exécution