Programmation orientée objet dans VFP QUELQUES CONCEPTS FONDAMENTAUX ET LEURS APPLICATIONS DANS VFP



Documents pareils
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Initiation à JAVA et à la programmation objet.

Chapitre VI- La validation de la composition.

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Génie Logiciel avec Ada. 4 février 2013

as Architecture des Systèmes d Information

Java c est quoi? Java pourquoi?

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Programmer en JAVA. par Tama

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Cours 1: Java et les objets

GOL502 Industries de services

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Programmation MacOSX / ios

Programmation Orientée Objet

TP1 : Initiation à Java et Eclipse

Programmation Objet - Cours II

Une introduction à Java

Création d objet imbriqué sous PowerShell.

Héritage presque multiple en Java (1/2)

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Traduction des Langages : Le Compilateur Micro Java

INITIATION AU LANGAGE JAVA

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Généralités sur le Langage Java et éléments syntaxiques.

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Programmation Orientée Objet en C#

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Evolution d Applications. Une Approche pour l Evolution des Systèmes Logiciels. Exemple : Le Serveur WWW. Applications Considérées

Diagramme de classes

Développement d un interpréteur OCL pour une machine virtuelle UML.

DES CONCEPTS OBJET PAR JAVA

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

UML (Diagramme de classes) Unified Modeling Language

Introduction à LDAP et à Active Directory Étude de cas... 37

3. UML - Unified Modeling Language Diagrammes statiques

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Programmation Orientée Objet application au langage Java Version Novembre 2007

Éléments de programmation et introduction à Java

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Sage 100 CRM Guide de l Import Plus avec Talend Version 8. Mise à jour : 2015 version 8

UML. Diagrammes de classes (suite) Delphine Longuet.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Programmation par composants (1/3) Programmation par composants (2/3)

TD/TP PAC - Programmation n 3

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Créer et partager des fichiers

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

Alfresco Guide Utilisateur

Devenez un véritable développeur web en 3 mois!

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Web Tier : déploiement de servlets

Évaluation et implémentation des langages

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

IFT2255 : Génie logiciel

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Classes et Objets en Ocaml.

Bases de données. Chapitre 1. Introduction

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Patrons de Conception (Design Patterns)

Langage Java. Classe de première SI

Université de Bangui. Modélisons en UML

Chapitre 2. Classes et objets

Cours de Génie Logiciel

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

1 Définition d une classe en Java

PHP et le Cloud. All rights reserved. Zend Technologies, Inc.

Reporting Services - Administration

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

L enseignement de méthodes agiles dans un contexte d apprentissage actif

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Aperçu de la sauvegarde sous Windows 7

Maarch V1.4

Plan. Patrons de conception. Motivations. Design Pattern : principe. Philippe Collet

Magento. Pratique du e-commerce avec Magento. Christophe Le Bot avec la contribution technique de Bruno Sebarte

Introduction aux concepts d ez Publish

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Visual Paradigm Contraintes inter-associations

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

programmation S initier à la la Avec des exemples en C, C++, C#, Java et PHP Avec des exemples en C, C++, C#, Java et PHP Claude Delannoy

F. Barthélemy. 17 mai 2005

Transcription:

Programmation orientée objet dans VFP QUELQUES CONCEPTS FONDAMENTAUX ET LEURS APPLICATIONS DANS VFP

Avertissement : qui suis-je? d où viens-je? 30 années de développement de progiciels de gestion dans le cadre de sociétés éditrices de logiciels Gestion de bases de données de volume important Interface utilisateur riche, intuitive et conviviale Pratique professionnelle de Delphi (version 3) et VFP (essentiellement version 6) Lecture, et vaguement écriture, de Java, Python, Perl et C#

L ouvrage de référence de la POO

Un autre ouvrage (plus didactique) La programmatio orientée objet (cours et exercices en ULM2 avec Java 6, C# 4, Python, PHP 5 et LinQ Hugues Bersini, Editions Eyrolles (5 ème édition - 2011)

Préambule (pour éviter les confusions) Nos environnements de développement privilégient les notions de formulaires et d événements Trois niveaux : concepts POO, programmation événementielle, formulaire comme conteneur ultime Exemple : la propriété Parent Dans les exemples de cette session, les méthodes ne font rien et les propriétés sont vides

Introduction : la POO, qu est-ce? Une méthode d analyse, de conception et d implémentation centrée sur les données (quelques exemples tirés de la gestion) Une classe (ou type) est un ensemble structuré de données répondant à des messages Trois principes : l encapsulation, l héritage, le polymorphisme La classe instancie un objet sur lequel pointent une ou plusieurs références

Introduction : l encapsulation Une entité : la classe ou le type Des champs, attributs ou propriétés Des méthodes, procédures ou fonctions Protéger les données par la rétention de l information : modificateurs de visibilité et accesseurs Autre forme de protection des données : organisation du code, packages

Introduction : l héritage Application à la programmation du principe de moindre effort Une classe dérivée (ou sous-classe) hérite des méthodes et propriétés de sa classe parente (ou superclasse) Elle définit des méthodes et propriétés correspondant à sa spécialisation Ne pas confondre héritage et composition (la propriété d une classe est un objet d une autre classe)

Introduction : le polymorphisme Surcharge de méthode : un même nom, plusieurs signatures (exemple : la méthode DrawingText présentée dans C# par Cesar hier matin) Redéfinition : une sous-classe implémente à nouveau une méthode définie dans une classe parente Ad hoc : un même nom pour des classes indépendantes (exemple Refresh)

Introduction : les objets La classe est un texte statique dans le code Un objet est l instance d une classe et possède un cycle de vie Les variables qui référencent des objets sont des pointeurs vers la zone mémoire stockant le contenu de celui-ci Un objet est l instance de sa classe effective mais aussi des parents de celle-ci (il peut être manipulé en étant sous-classé)

Introduction : ce dont on ne parlera pas Les classes, méthodes, propriétés abstraites ou virtuelles Les interfaces Les méthodes et les propriétés statiques ou de classe Les classes génériques

Et VFP dans tout ça? Les moins : le typage (01-type) et au moins un bug (hidden) VFP trop procédural pour faire de la POO? VFP implémente un ensemble cohérent qui assume le cœur POO dont nous avons besoin pour des progiciels de gestion de données

Première étape : définir une classe Pas de classe racine dans VFP Liste des classes de base dans l aide : Reference Language Reference Object, Collections, and Classes Classe Custom comme classe de base de mes exemples Une première expérimentation : 02-classe1 Deux sections : les propriétés et les méthodes Trois niveaux de visibilité : public (rien), protected (protected) et private (hidden) Instanciation d un objet par CreateObject ou NewObject (afin de préciser le module comprenant la classe à instancier)

Première étape : les accesseurs Comment protéger l accès aux données avec les méthodes _assign (set) et _access (get) Application avec la classe précédente : 03-classe1 Dans VFP, pour protéger efficacement une donnée il faut la définir comme publique!

Première étape : THIS La classe fait référence à l objet courant par le mot-clé THIS L usage de ce mot-clé est impératif (voir 04-classe1) Attention : ne pas confondre une propriété et une variable locale de même nom

Deuxième étape : une sous-classe Avertissement linguistique : parent versus owner Avec 05-classe2 la spécialisation de Classe1 en Classe2 Classe2 hérite des propriétés et méthodes de Classe1 mais ne peut manipuler que les attributs publics et protégés Avec 06-classe2 nous voyons comment implémenter le polymorphisme La méthode d une classe peut appeler la méthode de son parent avec Dodefault() La méthode d une classe peut appeler la méthode d un grand-parent avec l opérateur de résolution de portée ::

Vie et mort d un objet (phase un) Pour visualiser le cycle de vie d un objet nous allons redéfinir les méthodes Init et Destroy À toute classe nous ajoutons la méthodes Release dont le code est Release This Un objet est instancié soit avec CreateObject soit avec NewObject Avec 08-classe1, quatre modes de désaffectation d une variable objet Release loobjet1 loobjet1 n existe plus l objet pointé est détruit loobjet1=null loobjet1=null l objet pointé est détruit loobjet1= loobjet1= l objet pointé est détruit loobjet1.release() loobjet1=null l objet pointé est détruit

Vie et mort d un objet (phase deux) Release loobjet1 et loobjet1.release() exécutent à priori le même code Dans tous les cas l objet pointé est détruit Avec 09-classe1, nous observons comment les quatre modes de désaffectation réagissent en présence d une seconde référence sur l objet Release loobjet1 loobjet1 n existe plus loobjet2 pointe sur l objet loobjet1=null loobjet1=null loobjet2 pointe sur l objet loobjet1= loobjet1= loobjet2 pointe sur l objet loobjet1.release() loobjet1=null loobjet2=null

Vie et mort d un objet : Release loobjet1 Le programme 11-classe1 illustre les différents cas où cette commande pourrait être utile Une instance globale qui doit se libérer avant la fin du programme courant Inutile dans le cas d une variable locale : la sortie de la méthode provoque la destruction de l objet Inutile aussi dans le cas d une propriété de classe, qu elle soit définie par NewObject, CreateObject ou AddObject : la destruction du propriétaire provoque la destruction de l objet référencé par la propriété

Vie et mort d un objet : loobjet1=null Déréférence la variable loobjet1 Le garbage collector détruit un objet quand aucune référence ne pointe plus sur lui (le programme 10-classe1 illustre ce phénomène)

Vie et mort d un objet : loobjet1= Quelle curieuse idée de vouloir transtyper une variable! Mais il fallait bien voir ce que cela donnait.

Vie et mort d un objet : loobjet1.release() Cette méthode détruit l objet Il positionne à Null toutes les variables qui référencent l objet détruit Effet secondaire : une variable objet peut devenir null d une seconde à l autre

Et le programme 07-classe2? Où l on voit qu une variable cachée peut devenir visible par à peu près tout le monde

Et les Thisform, Load, Parent... Nous ne sommes plus vraiment dans la POO Thisform : une tentative de reprise du concept de délégation Load : une méthode qui vient interférer avec le processus de création Parent : ambiguë (bien que très pratique) car c est au client d utiliser les classes qu il définit comme propriétés, mais ces classes n ont à priori pas à invoquer leur client Si le temps le permet voir les programmes 12-parent, 13-locale et 14- composition (et 15-paramètre s il existe)

Ce qui fait souffrir L absence massive de classes non visuelles (listes, arbres...) L impossibilité de décrire des classes génériques L absence d accès aux sources (comment comprendre le fonctionnement de ce qui est caché dans une boîte noire?)

Conclusion (pourquoi développer en POO) Parce que c est la mode Parce que la plupart des langages récents utilisent peu ou prou les concepts de la POO Parce que la POO rapproche nos objets logiciels des données que manipulent nos clients Parce que la POO permet une implémentation agréable de classes orientées métier Donc : programmez objet, il en restera toujours quelque chose et, avec VFP, ce quelque chose est le cœur de votre métier