- Les constructeurs
- La gestion des exceptions
- Les getters et les setters
- Lecture du clavier
- Les references
- Surcharge des méthodes
- Le mot clé this
- la méthode String tostring()
- Les constructeurs
- La gestion des exceptions
- Les getters et les setters
- Lecture du clavier
- Les references
- Surcharge des méthodes
- Le mot clé this
- la méthode String tostring()
Ce cours présente comment définir de nouveaux objets en définissant des classes. Un objet est une instance d'une classe qui définit les variables d'instances (attributs) et méthodes (fonctionnalités) que les objets créés à partir de la classe auront.
This course will introduce the core data structures of the Python programming language. We will move past the basics of procedural programming and explore how we can use the Python built-in data structures such as lists, dictionaries, and tuples to perform increasingly complex data analysis.
Voici le chapitre sur la surcharge des opérateurs en C++.
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Bonne lecture
Une révision des principaux concepts du langage JavaScript : variables, fonctions, types, fermetures (closures), objets et prototypes, format JSON. De nombreux exemples téléchargeables sur GitHub.
Voici le chapitre sur les classes et les objets en C++.
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Bonne lecture.
El documento es una carta de un bebé no nacido a su madre, expresando su amor por ella desde el vientre. El bebé describe su desarrollo físico y emocional a lo largo del embarazo, desde las primeras semanas hasta las 20 semanas, y su creciente entusiasmo por nacer y conocer a su madre.
Este documento describe la hidrología de Chile, incluyendo los tipos de ríos, su clasificación, cuencas hidrográficas y recursos hídricos. Explica que los ríos chilenos nacen principalmente en la Cordillera de los Andes y fluyen hacia el Océano Pacífico, y que la hidrografía varía desde escasos recursos en el norte hasta abundantes en el sur. También describe las cuencas del río Loa y las cuencas endorreicas del norte de Chile.
El documento describe cómo las pequeñas decisiones que tomamos tienen un gran impacto a largo plazo debido al efecto mariposa. Explica la metodología PDA (pensar-decidir-actuar) y cómo cada decisión lleva a otra, creando consecuencias impredecibles. También enfatiza la importancia de tomar el control de nuestras vidas mediante pequeñas decisiones conscientes en lugar de funcionar en piloto automático.
Ce cours présente comment définir de nouveaux objets en définissant des classes. Un objet est une instance d'une classe qui définit les variables d'instances (attributs) et méthodes (fonctionnalités) que les objets créés à partir de la classe auront.
This course will introduce the core data structures of the Python programming language. We will move past the basics of procedural programming and explore how we can use the Python built-in data structures such as lists, dictionaries, and tuples to perform increasingly complex data analysis.
Voici le chapitre sur la surcharge des opérateurs en C++.
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Bonne lecture
Une révision des principaux concepts du langage JavaScript : variables, fonctions, types, fermetures (closures), objets et prototypes, format JSON. De nombreux exemples téléchargeables sur GitHub.
Voici le chapitre sur les classes et les objets en C++.
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Bonne lecture.
El documento es una carta de un bebé no nacido a su madre, expresando su amor por ella desde el vientre. El bebé describe su desarrollo físico y emocional a lo largo del embarazo, desde las primeras semanas hasta las 20 semanas, y su creciente entusiasmo por nacer y conocer a su madre.
Este documento describe la hidrología de Chile, incluyendo los tipos de ríos, su clasificación, cuencas hidrográficas y recursos hídricos. Explica que los ríos chilenos nacen principalmente en la Cordillera de los Andes y fluyen hacia el Océano Pacífico, y que la hidrografía varía desde escasos recursos en el norte hasta abundantes en el sur. También describe las cuencas del río Loa y las cuencas endorreicas del norte de Chile.
El documento describe cómo las pequeñas decisiones que tomamos tienen un gran impacto a largo plazo debido al efecto mariposa. Explica la metodología PDA (pensar-decidir-actuar) y cómo cada decisión lleva a otra, creando consecuencias impredecibles. También enfatiza la importancia de tomar el control de nuestras vidas mediante pequeñas decisiones conscientes en lugar de funcionar en piloto automático.
La elaboración de los proyectos de investigaciónTatiana Ruiz
Este documento presenta las pautas y el esquema para la elaboración de proyectos de investigación. Explica que el proyecto debe seguir un proceso secuencial y tener en cuenta diferentes secciones como la formulación del problema, el marco teórico, la metodología y aspectos administrativos. Además, provee detalles sobre cómo elaborar cada una de estas secciones, incluyendo objetivos, variables, técnicas de recolección de datos, y cronogramas. El propósito es ilustrar el proceso de elaboración de un proyecto de investigación de
El documento proporciona una serie de consejos para enamorar al hombre o mujer de tus sueños. Algunos consejos incluyen mostrar seguridad y feminidad para atraer a un hombre, así como limpieza, seguridad y vestuario apropiado para impresionar a una mujer. En general, se enfatiza la importancia de ser uno mismo y natural en las interacciones románticas.
La multinationale CRISTIAN LAY, créée en 1981, a toujours été leader en matière de bijouterie. Elle posséde la formule parfaite permettant d’offrir des bijoux alliant avant-gardisme et tradition orfèbre qui soient accessibles à tous.
Au cours de l’année, CRISTIAN LAY publie 3 catalogues généraux (General Book). Chacun de ces catalogues est valable durant une période de 4 mois.
1) El documento habla sobre la importancia de planificar personalmente para saber quién eres, qué quieres y cómo lograrlo. La planificación personal proporciona sentido y dirección.
2) También destaca la diferencia entre aptitud (capacidad) y actitud (disposición), señalando que es la actitud positiva la que hace que la aptitud sea útil para lograr objetivos.
3) Explica los pasos básicos para realizar una planificación personal efectiva, como definir valores, visión, objetivos y hábitos para alcanzar lo que se
El documento presenta información sobre las comunidades virtuales y su potencial para la educación secundaria y formación profesional. Explica conceptos como sociedad red, redes sociales y comunidades virtuales. Destaca que las comunidades virtuales surgen a partir de la apropiación social de las TIC y pueden aportar a la formación mediante la colaboración, la responsabilidad y la cohesión social. Propone que las instituciones educativas desarrollen competencias comunicativas para fortalecer la interacción social colaborativa entre estudiantes.
Este documento define e ilustra el concepto de intención. Explica que la intención se refiere a la determinación de la voluntad hacia un fin particular y puede ser buena o mala dependiendo del objetivo. También destaca que aunque los actos se realicen con buena intención, sus consecuencias pueden ser dañinas, y viceversa. Además, enfatiza que tanto la intención como la acción son importantes, ya que la intención sin acción carece de sentido.
Este documento describe los desafíos de Chile en materia de innovación y propone tres ejes programáticos para aumentar la tasa de innovación en las empresas chilenas: 1) Desarrollar capacidades internas de gestión de la innovación; 2) Apoyar proyectos de innovación abierta mediante el uso de capacidades externas; y 3) Desarrollar capacidades para la gestión del portafolio de proyectos de innovación a través de pruebas de concepto y prototipos.
El documento describe los factores de riesgo y protectores en la adolescencia. Entre los factores de riesgo se encuentran problemas familiares como la violencia, el abuso de sustancias y la falta de comunicación, así como problemas sociales como la pobreza y la falta de oportunidades. Los factores protectores incluyen el apoyo familiar, las habilidades sociales, la autoestima y la participación en actividades extracurriculares. También se discute la resiliencia y la capacidad de los adolescentes para superar situaciones adversas con el apoyo de los factores protectores
Cette présentation est un bref descriptif de l'Ecosse, d'Edimbourg (la capitale) et d'Heriot-Watt University. Cette présentation englobe en général ce que j'ai appris lors de mon voyage ERASMUS
El documento habla sobre la importancia de desarrollar habilidades sociales para mejorar el desempeño laboral y las relaciones. Ofrece cinco pasos clave: 1) mejorar la comunicación oral, escrita y no verbal; 2) practicar habilidades de escucha activa; 3) formar relaciones dentro y fuera del trabajo; 4) desarrollar liderazgo; y 5) tomar iniciativa en el trabajo terminando tareas sin supervisión y buscando nuevas responsabilidades.
Ce premier cours présente les notions d'objet et de classe, et le lien entre elles. Il présente aussi le premier concept clé de la programmation orientée objet, à savoir l'encapsulation des données. Les exemples sont fournis dans plusieurs langages (Python, C#, Java, C++ et PHP).
Ce document a été conçu et utilisé sur plusieurs sessions de formation professionnelles pour développeurs logiciels.
Il présente la syntaxe du langage javascript à usage d'un public de développeurs maîtrisant déjà un langage de développement (langage C, Java, C Sharp, PHP...).
Niveau : débutant.
Séance numéro : 1/10.
Temps nécessaire à la séance : environ 1h.
Cette séance fait partie d'une série de 10 séances présentant le langage javascript (niveau débutant à confirmé).
Le niveau débutant de la série se réalise en 2 jours.
La niveau confirmé se réalise en 3 jours.
Ce programme est conforme aux titres du ministère du travail :
- Développeur Logiciel
- Concepteur Développeur Informatique
Il permet de valider les modules correspondants de ces titres RNCP (compétences développement de pages web).
La méthode utilisée mélange les approches interrogatives et actives :
- à partir d'exemples de code, faire raisonner les stagiaires par raisonnement hypothético-déductif ("que fait ce code?")
- à partir de code "à trous", faire découvrir et appliquer des éléments de syntaxe (travaux pratiques "construisons ensemble")
- à partir des problèmes rencontrés, faire rechercher des solutions possibles aux problèmes soulevés par le code "énigme" ("quelles solutions?")
- à partir de code "énigme", faire vérifier l'assimilation des connaissances ("vrai ou faux?")
Inclus :
- code à trou
- grille d'évaluation
Ce document powerpoint est également disponible en marque blanche. Nous contacter via notre compte twitter @forgelogicielle.
Fort de ses 1.7 millions de téléchargements l'an passé, Groovy continue son bonhomme de chemin en tête parmi les langages de programmation alternatifs pour la JVM.
Groovy 2.0, sorti l'an passé, introduisait dans son offre de la modularité, le support de JDK 7 au niveau syntaxique avec "Project Coin" autant qu'au niveau JVM avec l'utilisation d'"invoke dynamic", et proposait des fonctionnalités de typage et de compilation statique.
Groovy 2.1, quant à lui, s'appuie sur ces bases pour compléter le support d'"invoke dynamic" pour plus de performances. Il propose des améliorations permettant de documenter, d'aider les IDEs, et de vérifier statiquement les Domain-Specific Languages construits avec Groovy. Vous pourrez créer des méta-annotations regroupant d'autres annotations, pour éviter l'annotation "hell". Et enfin, vous irez encore plus loin dans la customisation du compilateur !
Accrochez votre ceinture, paré au décollage !
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
SOLID est un acronyme représentant cinq principes de bases de la programmation orientée objet permettant le développement de logiciels fiables, évolutifs et robustes. Le framework Symfony est un excellent support pour illustrer chacun de ces principes. Nous verrons ainsi que SOLID est à l’origine de sa flexibilité, sa fiabilité mais aussi de sa maintenabilité et son évolutivité. Nous verrons également comment appliquer ces principes pour améliorer son code métier et perfectionner l’architecture de son application.
Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, pour au final un code de meilleur qualité et plus accessible. La plupart de ces améliorations se trouvent dans cette présentation.
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
Depuis toujours nous souhaitons développer au mieux des procédures stockées dans SQL Server, afin de clarifier ou d’optimiser nos développements.
Depuis 2005, les procédures stockées et les triggers peuvent être développés en .NET, grâce à votre langage favoris : C#, VB.NET, etc. Nous pouvons ainsi tirer parti de toute la puissance de ce Framework : fonctions mathématiques, cryptages, gestion de chaine de caractères, manipulation des dates, etc.
Lors de cette session, nous expliquerons comment créer des procédures, des triggers et des fonctions d’agrégations dans ce mode CLR. Nous passerons en revue les trucs et astuces utiles pour optimiser nos requêtes. Nous verrons quels sont les avantages de concevoir des procédures SQL en .NET ; mais également quels en sont les inconvénients. Finalement, nous verrons comment déployer facilement les bibliothèques .NET créées, dans SQL Server : quels outils utiliser.
La présentation a pour but d'expliquer comment les concepts de Clean Architecture et de l'architecture en oignon ont été utilisés dans un projet phare de iA Groupe Financier pour permettre de travailler en mode agile en réutilisant du code patrimonial.
Karol Deland
Decouvrez les particularités de JavaScript qui vous aideront à débogguer sans craindre ce langage aujourd'hui indispensable.
- la portée des variables et comment ne pas polluer l'espace global
- comprendre le mot clé this
- les particularités des fonctions
- introduction aux namespaces
Loin de la théorie vous aurez des explications pratiques et des démos de code ainsi que les bonnes pratiques.
Ce cours présente les relations de composition et d'agrégation qu'il est possible d'établir entre plusieurs classes et objets. La seconde partie présente la notion d'immuabilité d'objets et montre comment faire des copies d'objets.
JavaScript est désormais omniprésent et rend possible l'écriture d'applications complexes et riches. Mais il est souvent mal connu des développeurs orientés objets classiques comme ceux pratiquant le C#, le Java ou le PHP. Cette session passera donc en revue les bases du langage JavaScript, ses spécificités comme les portées, les closures, le this différent de ce que vous pouvez connaître. Bref, vous verrez qu'il y a des pièges à éviter et qu'il ne faut pas négliger JavaScript. Il est très puissant mais potentiellement différent de ce vous connaissez déjà. Venez apprendre à le respecter avant de le maitriser!
UML OCL : An Expression Language - Core -- 29megaplanet20
Introduction to the Object Constraint Language (OCL) of UML.
Here we just present this language as an expression language with the different operators and this independently from UML.
Uml: Diagrammes de classes -- Concepts avances --- 27megaplanet20
Description des modèles de classes.
Dans cette partie sont présentés des concepts avancés:
- visibilités et autre éléments sur les attributs et opérations
- composition, association qualifiées, class associatives
- héritages avec différentes subtilités
Uml: Diagrammes de classes -- Concepts De Base 41megaplanet20
Introduction aux modèles de classes d'UML. Uniquement les concepts de bases sont présentés:
- classes et objets
- associations et liens
- héritages
Les autres concepts ne sont pas fondamendaux. Ils sont présentés dans un autre jeu de transparents.
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...M2i Formation
Améliorez l'intégration de vos nouveaux collaborateurs grâce à notre formation flash sur l'onboarding. Découvrez des stratégies éprouvées et des outils pratiques pour transformer l'intégration en une expérience fluide et efficace, et faire de chaque nouvelle recrue un atout pour vos équipes.
Les points abordés lors de la formation :
- Les fondamentaux d'un onboarding réussi
- Les outils et stratégies pour un onboarding efficace
- L'engagement et la culture d'entreprise
- L'onboarding continu et l'amélioration continue
Formation offerte animée à distance avec notre expert Eric Collin
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24BenotGeorges3
Les informations et évènements agricoles en province du Luxembourg et en Wallonie susceptibles de vous intéresser et diffusés par le SPW Agriculture, Direction de la Recherche et du Développement, Service extérieur de Libramont.
Le fichier :
Les newsletters : https://agriculture.wallonie.be/home/recherche-developpement/acteurs-du-developpement-et-de-la-vulgarisation/les-services-exterieurs-de-la-direction-de-la-recherche-et-du-developpement/newsletters-des-services-exterieurs-de-la-vulgarisation/newsletters-du-se-de-libramont.html
Bonne lecture et bienvenue aux activités proposées.
#Agriculture #Wallonie #Newsletter #Recherche #Développement #Vulgarisation #Evènement #Information #Formation #Innovation #Législation #PAC #SPW #ServicepublicdeWallonie
Cycle de Formation Théâtrale 2024 / 2025Billy DEYLORD
Pour la Saison 2024 / 2025, l'association « Le Bateau Ivre » propose un Cycle de formation théâtrale pour particuliers amateurs et professionnels des arts de la scène enfants, adolescents et adultes à l'Espace Saint-Jean de Melun (77). 108 heures de formation, d’octobre 2024 à juin 2025, à travers trois cours hebdomadaires (« Pierrot ou la science de la Scène », « Montage de spectacles », « Le Mime et son Répertoire ») et un stage annuel « Tournez dans un film de cinéma muet ».
1. megaplanet.org/JeanMarieFavre
OCL : Liaison avec UMLOCL : Liaison avec UML
ContexteContexte
Accès aux attributs et opérationsAccès aux attributs et opérations
Navigation via les associationsNavigation via les associations
Invariant, Propriété dérivée, Valeur d'initialisationInvariant, Propriété dérivée, Valeur d'initialisation
Précondition, Postcondition, Corps de méthodePrécondition, Postcondition, Corps de méthode
2. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
2
Contexte d'une contrainteContexte d'une contrainte
Contrainte toujours associée à un élément de modèle :Contrainte toujours associée à un élément de modèle :
lele contextecontexte de la contrainte.de la contrainte.
Deux techniques pour spécifier le contexte :Deux techniques pour spécifier le contexte :
Client
1..4 0..*
titulaires
Compte
numéro
solde
dMax
*
1
signataire1
0..*
CarteBleue
code
retraitMax
context Compte
inv: dmax >=0
inv: solde > -dMax
context CarteBleue
inv: Compte.titulaires->includes(self.signataire)
inv: code>0 and code<=9999
inv: retraitMax>10
context Compte::solde : integer
init: floor(depotInitial * 10 / 100)
{ init: 0 }
{ inv: Compte.titulaires->includes(self.signataire)}
{ inv: dMax >= 0
inv: solde > -dMax }
3. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
3
Opérations spécifiquesOpérations spécifiques
au modèle objet d ’UMLau modèle objet d ’UML
accès à un attribut, à une opérationaccès à un attribut, à une opération
navigation via les associationsnavigation via les associations
VIA une associationVIA une association
VERS une classe associativeVERS une classe associative
DEPUIS une classe associativeDEPUIS une classe associative
VIA un association qualifiéeVIA un association qualifiée
accès au type et super typesaccès au type et super types
accès aux instances d’une classe (extension)accès aux instances d’une classe (extension)
accès à l'état d'un objetaccès à l'état d'un objet
constructions pour les post conditionsconstructions pour les post conditions
4. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
4
Accès à un attributAccès à un attribut
Accès à une méthodeAccès à une méthode
objet . attributobjet . attribut
Accès à un attributAccès à un attribut
selfself.dateDeNaissance.dateDeNaissance
objet . méthodeobjet . méthode(( expr1expr1,, expr2expr2, … ), … )
Accès à une méthodeAccès à une méthode sans effet de bordsans effet de bord (( {query}{query} ))
selfself.impôts(1998).impôts(1998)
7. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
7
Navigation VIA une associationNavigation VIA une association
Rappel: élement converti en singletonRappel: élement converti en singleton
selfself.père->.père->sizesize()() = 1= 1
Permet de tester si la valeur est définiePermet de tester si la valeur est définie
selfself.père->.père->isEmptyisEmpty()()
selfself.épouse->.épouse->notEmptynotEmpty()() impliesimplies selfself.épouse.sexe =.épouse.sexe =
Sexe::fémininSexe::féminin
Association sans nom de rôleAssociation sans nom de rôle
=> nom de la classe destination (avec une minuscule)=> nom de la classe destination (avec une minuscule)
père
épouse
0..1
0..1Personne
sexe
8. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
8
Personne Société
Navigation VERS une associationNavigation VERS une association
objet . associationobjet . association
Permet d ’accéder à l ’ensemble des liensPermet d ’accéder à l ’ensemble des liens
employés
* 0..2
Emploi
salaire
augmenter()
sociétés
s.Emploi
p.Emploi
s.Emploi->collect(salaire)->sum()
s.Emploi.salaire->forall(x | x>500 )
sp
9. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
9
Navigation VERS une association réflexiveNavigation VERS une association réflexive
association réflexive => indication du sens de parcoursassociation réflexive => indication du sens de parcours
(vers le role)(vers le role)
objet . associationobjet . association [[ rolerole ]]
Personne
age
chefs
employés
*
*
Evaluation
note
paul.Evaluation [chefs ]
paul.Evaluation [employés]
paul.Evaluation [chefs].note -> sum()/paul.chefs->size()
paul.Evaluation ? marie
sophie
chefs
chefs
note=5
e1
note=15
e1
paulpablo
chefs
note=5
e3
11. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
11
Navigation via une Association QualifiéeNavigation via une Association Qualifiée
Banque Comptenc
0..1
lienlien .. rolerole [[valeurvaleur,,valeurvaleur, … ], … ]
Accès qualifiéAccès qualifié
b.compte[ 4029 ]
b.compte[ 0 ]
compte
Gère
lienlien .. rolerole
codomainecodomaine
lienlien .. assoc . keyassoc . key
domainedomaine
b.compte b.Gére.nc
12. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
12
Opérations concernant les typesOpérations concernant les types
objetobjet .. oclIsTypeOf(oclIsTypeOf( typetype ))
type directtype direct
objetobjet . oclIsKindOf(. oclIsKindOf( typetype ))
type direct ou supertypestype direct ou supertypes
objetobjet . oclAsType(. oclAsType( typetype ))
Conversion de type (casting)Conversion de type (casting)
Figures
Cercles Polygones
Triangles Carrés
c1
c2
c3
c4
t1
t2
ca1
ca2
p
13. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
13
Opérations concernant les typesOpérations concernant les types
Contraintes sur les typesContraintes sur les types
p.enfantsp.enfants->select(oclIsTypeOf(->select(oclIsTypeOf(FemmeFemme))))
p.enfants->p.enfants->select(oclIsKindOf(select(oclIsKindOf(FemmeFemme))))
Accès aux propriétés redéfiniesAccès aux propriétés redéfinies
f .f . oclAsType(oclAsType(PersonPerson)).nom.nom
Typage dynamiqueTypage dynamique
p.enfants-p.enfants->select(oclIsKindOf(>select(oclIsKindOf(FemmeFemme)).oclAsType(Set()).oclAsType(Set(FemmeFemme))))
->select(->select(nomDeJF <> nomnomDeJF <> nom))
Personne
nom enfants
*
Femme
nomDeJF
14. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
14
Opérations définies sur les classesOpérations définies sur les classes
Classe.propdeclasseClasse.propdeclasse
Permet d ’accéder aux propriétés de classesPermet d ’accéder aux propriétés de classes
Classe.Classe.allInstancesallInstances
Retourne l ’ensemble des instances de la classeRetourne l ’ensemble des instances de la classe
c ’est à dire l ’extension de cette classec ’est à dire l ’extension de cette classe
Personne.allInstances->Personne.allInstances->size()size() < 500< 500
Personne.allInstances->Personne.allInstances->forallforall(p1,p2 |(p1,p2 |
p1<>p2p1<>p2 impliesimplies p1.numsecu <> p2.numsecu)p1.numsecu <> p2.numsecu)
Personne.allInstances-Personne.allInstances->isUnique>isUnique(numsecu)(numsecu)
15. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
15
Où utiliser OCLOù utiliser OCL
OCL peut être utilisé pour décrire des prédicatsOCL peut être utilisé pour décrire des prédicats
inv:inv: invariants de classesinvariants de classes inv:inv: solde < decouvertMaxsolde < decouvertMax
pre:pre: pré-conditions d ’opérationspré-conditions d ’opérations pre:pre: montantARetirer > 0montantARetirer > 0
post:post: post-conditions d ’opérationspost-conditions d ’opérations post:post: solde > solde@presolde > solde@pre
OCL peut également être utilisé pour décrire des expressionsOCL peut également être utilisé pour décrire des expressions
def:def: déclarer des attributs ou des opérationsdéclarer des attributs ou des opérations def:def: nbEnfants:IntegernbEnfants:Integer
init:init: spécifier la valeur initiale des attributsspécifier la valeur initiale des attributs init:init: enfants->size()enfants->size()
body:body: exprimer le corps de méthodes {query}exprimer le corps de méthodes {query} body:body: enfants->select(age< a )enfants->select(age< a )
derive:derive: définir des élements dérivés (/)définir des élements dérivés (/) derive:derive: age<18age<18
16. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
16
InvariantsInvariants (inv)(inv)
Prédicat associé à une classe ou une associationPrédicat associé à une classe ou une association
Doit être vérifié à tout instantDoit être vérifié à tout instant
Le contexte est défini par un objetLe contexte est défini par un objet
cet objet peut être référencé parcet objet peut être référencé par selfself
l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?)l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?)
L ’invariant peut être nomméL ’invariant peut être nommé
contextcontext PersonnePersonne
invinv pasTropVieux : age < 110pasTropVieux : age < 110
invinv : self.age >= 0: self.age >= 0
18. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
18
Définitions additionnellesDéfinitions additionnelles (def)(def)
Il est possible en OCL de définir dans une classe existante:Il est possible en OCL de définir dans une classe existante:
de nouveaux attributsde nouveaux attributs
de nouvelles opérationsde nouvelles opérations
contextcontext ClasseClasse
defdef: nomatt : type = expr: nomatt : type = expr
defdef: nomop( … ) : type = expr: nomop( … ) : type = expr
Utile pour décomposer des requetes ou contraintes complexesUtile pour décomposer des requetes ou contraintes complexes
Eviter de "polluer" le modèleEviter de "polluer" le modèle
contextcontext PersonnePersonne
defdef: ancestres() :: ancestres() : SetSet(Personne)(Personne)
= parents->= parents-> unionunion(parents.ancestres()->(parents.ancestres()->asSetasSet())())
invinv:: notnot ancestres()->ancestres()->includesincludes((selfself))
19. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
19
Expression de propriétés dérivéesExpression de propriétés dérivées (derive)(derive)
Préciser en OCL la valeur d'un attribut ou d'une associationPréciser en OCL la valeur d'un attribut ou d'une association
dérivéedérivée
Complète la notationComplète la notation //
contextcontext Personne::estMarié : BooleanPersonne::estMarié : Boolean
derivederive : conjoint->: conjoint->notEmpty()notEmpty()
contextcontext Personne::filles :Personne::filles : SetSet(Personne)(Personne)
derivederive : enfants->: enfants->selectselect(sexe = Sexe::Feminin)(sexe = Sexe::Feminin)
contextcontext Personne::grandParents :Personne::grandParents : SetSet(Personne)(Personne)
derivederive: parents.parents->: parents.parents->asSetasSet()()
20. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
20
Expression du corps d'une méthodeExpression du corps d'une méthode (body)(body)
Description en OCL d'une méthode sans effet de bordDescription en OCL d'une méthode sans effet de bord
(({isQuery}{isQuery}))
Equivalent à une requêteEquivalent à une requête
contextcontext Personne:acf( p : Personne ) :Personne:acf( p : Personne ) : OrderedSetOrderedSet(Personne)(Personne)
bodybody : self.ancestres()->: self.ancestres()->intersectionintersection(p.ancestres())(p.ancestres())
->select(sexe = Sexe::Feminin)-->select(sexe = Sexe::Feminin)-
>>sortedBysortedBy(dateDeNaissance)(dateDeNaissance)
contextcontext PersonnePersonne
defdef: ancestres :: ancestres : SetSet(Personne)(Personne)
= parents->= parents->unionunion(parents.ancestres->(parents.ancestres->asSetasSet())())
21. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
21
Pré-conditions et post-conditionsPré-conditions et post-conditions (pre, post)(pre, post)
Prédicats associés à une opérationPrédicats associés à une opération
les pré-conditions doivent être vérifiées avant l ’exécutionles pré-conditions doivent être vérifiées avant l ’exécution
les post-conditions sont vraies après l ’exécutionles post-conditions sont vraies après l ’exécution
selfself désigne l ’objet sur lequel l ’opération à lieudésigne l ’objet sur lequel l ’opération à lieu
Dans une post-condition :Dans une post-condition :
@pre@pre permet de faire référence à la valeur avant l ’opérationpermet de faire référence à la valeur avant l ’opération
resultresult designe le resultatdesigne le resultat
ocsIsNewocsIsNew()() indique si un objet n'existait pas dans l'état précédentindique si un objet n'existait pas dans l'état précédent
contextcontext Type::opération( param1 : Type1, …) : TypeType::opération( param1 : Type1, …) : Type
prepre nom1 : param1 < …nom1 : param1 < …
prepre nom2 : …nom2 : …
postpost nom2 : …nom2 : … resultresult > …> …
23. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
23
ExercicesExercices
Spécifier une fonction qui retourne la racine carrée d'un réelSpécifier une fonction qui retourne la racine carrée d'un réel
context Math::Sqrt(x : Real) : Realcontext Math::Sqrt(x : Real) : Real
pre: x>=0pre: x>=0
post: result * result = xpost: result * result = x
Partie entière de la racine carrée d'un entierPartie entière de la racine carrée d'un entier
context Math::ISqrt( x : Integer ) : Integercontext Math::ISqrt( x : Integer ) : Integer
pre: x>=0pre: x>=0
post: result*result <= x and (result+1)*(result+1) > xpost: result*result <= x and (result+1)*(result+1) > x
24. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
24
Accès à l'état d'un objetAccès à l'état d'un objet
obj . oclInState( state )obj . oclInState( state )
Indique si l'objet est dans l'état spécifiéIndique si l'objet est dans l'état spécifié
Si une machine à état a été associée à la classe de l'objetSi une machine à état a été associée à la classe de l'objet
:::: pour avoir accès aux états imbriquéspour avoir accès aux états imbriqués
enfants->select( e | e.oclInState( Employé ) )enfants->select( e | e.oclInState( Employé ) )
livres->exists( l.oclInState( Rentré::ARanger ) )livres->exists( l.oclInState( Rentré::ARanger ) )
25. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
25
Contraintes sur l'état dans les post-conditionsContraintes sur l'état dans les post-conditions
@pre@pre fait référence à la valeur d'une propriété dans l'état initialfait référence à la valeur d'une propriété dans l'état initial
resultresult fait référence au résultatfait référence au résultat
oclIsNewoclIsNew indique que l'objet n'existait pas dans l'état initialindique que l'objet n'existait pas dans l'état initial
context Compte::virementInterne( dest : Compte, montant : integer )context Compte::virementInterne( dest : Compte, montant : integer )
: Opération: Opération
pre: montant>0pre: montant>0
pre: montant<self.soldepre: montant<self.solde
pre: self.titulaire = dest.titulairepre: self.titulaire = dest.titulaire
pre: self.banque = dest.banquepre: self.banque = dest.banque
post: self.solde < self.solde@pre - montantpost: self.solde < self.solde@pre - montant
post: dest.solde = dest.solde@pre + montantpost: dest.solde = dest.solde@pre + montant
post: self.operations = self.operations@pre->append(result)post: self.operations = self.operations@pre->append(result)
post: result.oclIsNew and result.montant = montantpost: result.oclIsNew and result.montant = montant
26. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
26
Contraintes sur l'échange de messagesContraintes sur l'échange de messages
^^ indique qu'un message à été envoyé entre les deux étatsindique qu'un message à été envoyé entre les deux états
^^^^ dénote l'ensemble des messages envoyés entre les deux étatsdénote l'ensemble des messages envoyés entre les deux états
Utile pour l'expression de protocoles, de patrons de conception, etc.Utile pour l'expression de protocoles, de patrons de conception, etc.
context TreeModel::hasChanged()context TreeModel::hasChanged()
post: getTreeListeners()@pre->forall( li | li ^ update() )post: getTreeListeners()@pre->forall( li | li ^ update() )
TreeModel TreeView
treeListeners
*
update()hasChanged()