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).
Dans ce cours, on découvre comment construire une interface graphique en Python en utilisant la librairie Tk. Après avoir vu les différents composants de base, ce cours présente la programmation évènementielle qui permet d'écrire du code qui réagit à des évènements comme le clic sur un bouton, par exemple.
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Le C++ est l'un des langages de programmation les plus utilisés actuellement (très populaire). Il a été crée en 1983 par Bjarne Stroustrup, un informaticien originaire du Danemark. Le C++ est une évolution du langage C avec plusieurs nouveautés. Il s'agit de concepts de programmation poussés comme la programmation orientée objet.
Ce cours intitulé « Programmation orientée objet en C++ » permet de vous apprendre les concepts de base de la programmation orientée objet; les notions de base du langage C++. Il vous permet, également, d'apprendre a implémenter des programmes orientées objet en C++.
Dans ce cours, on découvre comment construire une interface graphique en Python en utilisant la librairie Tk. Après avoir vu les différents composants de base, ce cours présente la programmation évènementielle qui permet d'écrire du code qui réagit à des évènements comme le clic sur un bouton, par exemple.
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Le C++ est l'un des langages de programmation les plus utilisés actuellement (très populaire). Il a été crée en 1983 par Bjarne Stroustrup, un informaticien originaire du Danemark. Le C++ est une évolution du langage C avec plusieurs nouveautés. Il s'agit de concepts de programmation poussés comme la programmation orientée objet.
Ce cours intitulé « Programmation orientée objet en C++ » permet de vous apprendre les concepts de base de la programmation orientée objet; les notions de base du langage C++. Il vous permet, également, d'apprendre a implémenter des programmes orientées objet en C++.
cours d'initiation à la programmation modulaire sous Python en utilisant des fonctions et des procédures pour décomposer un problème en sous-problème plus facile à traiter en utilisant des fonctions et des procédures.
C'est le premier chapitre du cours en C++ de la programmation procédurale à la POO.
Partie 1: La Programmation Procédurale.
Partie 2: La Programmation Orientée Objet.
Partie 3: Les Exceptions, Entrées/Sorties, Structures, Unions, Énumérations…
Partie 4: Les interfaces Graphiques avec Qt.
C'est la version 2019 du chapitre 1 sur C++:
https://fr.slideshare.net/AzizDarouichi/chap1-cours-en-c
Si vous avez des remarques ou des suggestions afin d'améliorer ce support du cours merci de me contacter via pr.azizdarouichi@gmail.com
Bonne lecture
Ce deuxième cours concerne les tuples, séquences non modifiables d'éléments. On peut les étendre en tuples nommés en ajoutant un nom à chacune des entrées du tuple, appelées alors champs. Enfin, on peut aller plus loin et définir des objets en associant des fonctions à des données. Cette seconde partie introduit à la programmation orientée objet.
Voici le chapitre sur les pointeurs et les références 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.
Objectif général : Développer en orienté objet avec Python
Objectifs opérationnels :
- Organiser le code grâce aux classes
- Sécuriser une classe avec l’encapsulation
- Réutiliser et factoriser du code avec l’héritage
- Invoquer des méthodes de même nom, quel que soit le type d'objet sur lequel elles opèrent, sans avoir à effectuer au préalable une vérification de type grâce au polymorphisme
C'est le chapitre 1 sur le langage Python qui est une introduction à ce langage.
Si vous avez des remarques ou des suggestions pour l’améliorer n’hésitez pas à m’écrire via ce courriel:
pr.azizdarouichi@gmail.com
Bonne lecture.
Slides du cours "JAVA1001 : Introduction à la programmation Java" de la formation "Apprendre Java et la Programmation Orientée-Objets" du learning center de http://www.ukonline.be
Ce premier cours introduit la notion de système embarqué en commençant par en donner une définition. Il les caractérise ensuite sur base de plusieurs critères : type d'application, de fonction visé, taille, fiabilité, efficacité. Il présente ensuite plusieurs aspects hardware (unité de calcul, architecture matérielle, composants clés) et software (niveau de programmation, processus de développement). Enfin, il conclut en discutant sur ce qu'est un ingénieur en systèmes embarqués.
cours d'initiation à la programmation modulaire sous Python en utilisant des fonctions et des procédures pour décomposer un problème en sous-problème plus facile à traiter en utilisant des fonctions et des procédures.
C'est le premier chapitre du cours en C++ de la programmation procédurale à la POO.
Partie 1: La Programmation Procédurale.
Partie 2: La Programmation Orientée Objet.
Partie 3: Les Exceptions, Entrées/Sorties, Structures, Unions, Énumérations…
Partie 4: Les interfaces Graphiques avec Qt.
C'est la version 2019 du chapitre 1 sur C++:
https://fr.slideshare.net/AzizDarouichi/chap1-cours-en-c
Si vous avez des remarques ou des suggestions afin d'améliorer ce support du cours merci de me contacter via pr.azizdarouichi@gmail.com
Bonne lecture
Ce deuxième cours concerne les tuples, séquences non modifiables d'éléments. On peut les étendre en tuples nommés en ajoutant un nom à chacune des entrées du tuple, appelées alors champs. Enfin, on peut aller plus loin et définir des objets en associant des fonctions à des données. Cette seconde partie introduit à la programmation orientée objet.
Voici le chapitre sur les pointeurs et les références 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.
Objectif général : Développer en orienté objet avec Python
Objectifs opérationnels :
- Organiser le code grâce aux classes
- Sécuriser une classe avec l’encapsulation
- Réutiliser et factoriser du code avec l’héritage
- Invoquer des méthodes de même nom, quel que soit le type d'objet sur lequel elles opèrent, sans avoir à effectuer au préalable une vérification de type grâce au polymorphisme
C'est le chapitre 1 sur le langage Python qui est une introduction à ce langage.
Si vous avez des remarques ou des suggestions pour l’améliorer n’hésitez pas à m’écrire via ce courriel:
pr.azizdarouichi@gmail.com
Bonne lecture.
Slides du cours "JAVA1001 : Introduction à la programmation Java" de la formation "Apprendre Java et la Programmation Orientée-Objets" du learning center de http://www.ukonline.be
Ce premier cours introduit la notion de système embarqué en commençant par en donner une définition. Il les caractérise ensuite sur base de plusieurs critères : type d'application, de fonction visé, taille, fiabilité, efficacité. Il présente ensuite plusieurs aspects hardware (unité de calcul, architecture matérielle, composants clés) et software (niveau de programmation, processus de développement). Enfin, il conclut en discutant sur ce qu'est un ingénieur en systèmes embarqués.
Ce cours présente la notion de qualité de code et comment il est possible de l'évaluer grâce à des métriques mesurables. Après avoir présenté plusieurs métriques standards, il se concentrer sur des aspects de qualité de code spécifique à l'orienté objet et présente les cinq concepts de l'orienté objet. La deuxième partie du cours présente plusieurs bonnes pratiques à avoir en programmation orientée objet, sur base d'exemples concrets.
Ce cours présente comment réaliser des interfaces graphiques avec Python en utilisant la librairie Kivy. La première partie rappelle les principes de la programmation évènementielle puis présente la séparation interface/comportement à l'aide de fichiers KV et Python. La deuxième partie présente comment réaliser des dessins avec les composants Canvas. On y voit comment dessiner des formes, appliquer des transformations et on termine avec un exemple de composants déplaçables.
Cette présentation concerne la mesure des distances entre la Terre et les étoiles. Elle présente notamment la technique du l'écho radar et celle de la parallaxe.
Ce premier cours introduit à plusieurs aspects liés au développement informatique. Le cours présente comment versioner son code avec le système Git et comment le déployer avec Heroku. Il présente ensuite comment débugguer avec le module pdb et comment profiler son code avec les modules timeit et profile. Enfin, le cours termine en présentant le concept de tests unitaires que l'on peut construire avec les modules doctest et unittest.
Ce cours concerne les arbres, structure de données organisant les données de manière hiérarchique dans de nœuds reliés entre eux par une relation parent-enfant. Le cours présente les arbres généraux et ensuite les arbres binaires, où chaque nœud possède 0 ou 2 enfants. Enfin, le cours termine en présentant des algorithmes de recherche et en particulier l'arbre binaire de recherche.
Ce cours concerne la manipulation des chaines de caractères et les expressions régulières. La première partie présente la classe str Python ainsi que les opérations qu'il est possible de faire sur des objets str. La seconde partie concerne les expressions regulières qui permettent de valider des chaines de caractères ou d'en extraire des sous-chaines qui satisfont un motif donné. On y voit finalement comment utiliser le module re Python.
Cette présentation montre plusieurs outils gratuits qui peuvent être utilisés pour gérer plusieurs aspects de la gestion de projets, en particulier informatique, de manière collaborative. On y voit comment versioner son code avec Git, déployer son code avec Heroku, tester son code avec Travis, gérer et planifier son temps et ses tâches avec Trello, FreedCamp et Tom'splanner, comment communiquer avec Slack et comment rédiger sa documentation avec Read the Docs.
Ce cours présente le langage UML qui permet notamment de modéliser des logiciels programmés en orienté objet. Ce cours présente les diagrammes de classes qui permettent de décrire la structure d'un logiciel et les diagrammes d'activité qui permettent de décrire les aspects dynamiques de l'exécution.
Ce premier cours avancé sur Python concerne les deux structures de données avancées que sont les ensembles et les dictionnaires. Ces derniers sont notamment utilisés pour construire des bases de données orientées document.
Dans ce cours, on découvre comment lire et écrire des fichiers à l'aide de Python. Il est possible de créer des fichiers texte ou des fichiers binaires. Pour manipuler un fichier, il faut d'abord l'ouvrir, puis on peut faire les opérations et enfin on doit le refermer.
Ce cours aborde la gestion d'erreurs en programmation, c'est-à-dire comment gérer les situations où une erreur se produit. Après avoir présenté le principe des spécifications et de la programmation défensive avec l'instruction assert, ce cours présente l'instruction try/except qui permet de capturer des erreurs. Enfin, le cours termine en présentant comment définir ses propres erreurs et les générer avec l'instruction raise.
Cette présentation concerne le développement piloté par les tests (TDD, Test-Driven Development). Cette méthodologie se base sur des tests unitaires qui testent de manière indépendante des unités de code (module, procédure/fonction, classe...). En particulier, cette présentation utilise la librairie CUnit utilisée pour le langage C.
Git est un logiciel de gestion de versions décentralisé qui vous permettra de gérer la vie d'un code informatique. Il permet une stratégie de backup, de gérer des versions et de stocker tout l'historique des modifications apportées à un projet informatique.
Ce cours présente la notion d'héritage entre classes qui permet de construire une relation de type "is-a". On crée une sous-classe à partir d'une super-classe, pour en hériter une partie de ses membres. On peut ensuite y ajouter des membres spécifiques. Ce cours présente également la redéfinition de méthodes, et comment utiliser les modificateurs de visibilité des membres.
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.
Ce cours est le premier en lien avec l'algorithmique présente les algorithmes et fonctions récursives ainsi que le type abstrait de données arbre. La première partie revient sur les notions de problème, algorithhme et spécification. La deuxième partie présente la récursion et de nombreux exemples. Enfin, la troisième partie présente le type abstrait de données arbre qui permet d'organiser des données de manière hiérarchique. Le cours se termine avec une introduction aux notions de backtracking et lookahead.
Introduction à la partie technique de la formation Digitalent mise en place par l'équipe ECAM. Cette formation couvre l'impression 3D, la programmation et l'électronique embarquée.
Ce cours présente la notion de système d'exploitation et en particulier les Linux embarqués qui sont spécialement conçus pour des systèmes embarqués de haut niveau avec des processeurs à usage général (GPP) comme unité de calcul principale. Il explique ensuite comment Linux embarqué démarre, quelles sont les différentes phases et modalités de stockage du système d'exploitation. Enfin, il présente la BeagleBone Black, ses caractéristiques et comment la programmer. Le cours conclut en expliquant la notion de driver de périphérique et comment ils sont conçus sous Linux à l'aide de fichiers.
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.
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.
Comme des millions de développeurs, vous utilisez C# quotidiennement … mais en maitrisez-vous les subtilités ? Cette session ludique vous plongera au cœur de votre langage de prédilection au travers programmes et exemples de code qui ne cesseront de vous surprendre. Avec en prime quelques (petits) lots à gagner pour les développeurs les plus perspicaces !
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
Le langage C++ a toujours la réputation d’un langage complexe, demandant une rigueur de tous les instants et qui peut en rebuter plus d’un. Mais avec l’arrivée de la nouvelle norme C++11 et de son intégration dans Visual Studio 11 (et intégration partielle dans Visual Studio 2010), elle permet comme le souligne Herb Sutter, d’écrire désormais du code "Clean, Safe and Fast", nous passons à l'ère du C++ moderne.
Le développement d'applications lourdes à base de JavaScript est désormais possible. Cependant, cela requiert de bien connaître le langage en lui-même ainsi que les meilleurs patterns et pratiques établit ces 10 dernières années à travers des frameworks comme YUI ou jQuery par exemple. Vous verrez donc ici comment bien structurer votre code, comment utiliser des approches permettant de palier à certaines limitations de JS et comment également industrialiser le code grâce à la mise en place de tests unitaires.
(Slides de la présentation à la conférence Agile France 2010)
Vous avez lu la cheatsheet de JMock, la documentation d’EasyMock, la FAQ de Mockito et pourtant, la moitié de votre code n’est toujours pas couvert. Vous n’arrivez juste pas à poser de tests dessus.
Votre code est intestable.
L’objectif de la session est de montrer pourquoi certains codes ne peuvent pas être testés et ce qui peut être fait pour y remédier. Nous verrons ainsi pourquoi il vaut mieux respecter la loi de Demeter et faire de l’injection de dépendances. Nous aborderons également les problèmes des classes avec trop de responsabilités et des états globaux.
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.
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!
Ce cours présente la programmation fonctionnelle et montre comment il est possible de programmer avec ce paradigme en utilisant Python. La première partie présente la notion d'objet de type fonction, les fonctions lambda, le type callable et les closures. La deuxième partie présente les décorateur et montre comment ajouter du comportement à une fonction à l'aide d'un décorateur. La troisième partie présente les itérateurs et les générateurs qui, grâce à l'instruction yield, génère les données à la demande.
Ce cours présente ce qu'est l'internet des objets (IoT), un réseau parallèle au web connectant entre eux des dispositifs physiques. Les différences majeures entre l'IoT et le web sont mises en avant, ainsi que les grands défis auxquels le monde de l'IoT est confronté. Le cours présente ensuite brièvement comment on peut gérer un système embarqué à distance, notamment pour la maintenance, le monitoring, le disaster recovery, notamment à l'aide d'un watchdog. Enfin, pour conclure, plusieurs architectures réseaux possibles sont présentées, pour inter-connecter des systèmes embarqués et les relier au web.
Ce cours présente la notion de système embarqué temps-réel et comment il est possible de gérer cela au niveau software avec un Linux embarqué. Plusieurs solutions sont présentées : OS temps-réel, linux préemptif et support hardware. Enfin, le cours présente le PRU-ICSS, dont est dotée la BeagleBone Black, une unité de calcul spécialisée pour les applications temps réel. Le cours présente comment programmer le PRU et notamment comment compiler un code à sa destination à l'aide d'un langage d'assemblage.
Ce cours présente les principaux moyens de communications que l'on peut déployer au sein d'un système embarqué. Après un rappel sur les différents types de communication (série/parallèle, synchrone/asynchrone, half-duplex/full-duplex), le cours présente le port série ainsi que l'implémentation UART. Vient ensuite le bus USB et les deux modes en hôte ou périphérique. Après cela, le cours présente les protocoles I2C et puis SPI. Enfin, il termine avec le simple bus 1-Wire. Tous ces différents moyens de communication sont disponibles sur la BeagleBone Black et le cours illustre comment les manipuler à l'aide du Linux embarqué.
Présentation du projet de transmission numérique dans lequel les étudiants sont amenés, en équipes mixtes électroniciens - informaticiens, à développer une application qui, sur base de données collectées par des senseurs, propose une analyse de ces dernières pour fournir un service.
Cette conférence présente le framework Johnny-Five qui permet de programmer des cartes embarquées à l'aide d'un module Node.js. Après un tour rapide du JavaScript et de son fonctionnement, en particulier la programmation fonctionnelle et l'exécution pilotée par les évènements, la présentation décrit Node.js et aborde rapidement son fonctionnement. La troisième partie présente Johnny-Five et plusieurs exemples simples de contrôle d'une LED et de l'utilisation des entrées/sorties numériques et analogiques.
Cette conférence présente LaTeX, un outil permettant de réaliser des documents de haute qualité typographique et professionnelle. Après avoir présenté quelques règles de typographie de la langue française, la présentation fait découvrir les bases de LaTeX et montre comment réaliser son premier document. Elle présente ensuite plusieurs constructions de base comme les listes, l'inclusion d'images et de tableaux, les mathématiques, les listings de code source. Enfin, elle termine avec des constructions plus avancées, comme la notion de figure et références croisées.
Ce second cours d'algorithmique présente des techniques utilisées en intelligence artificielle pour trouver une solution à un problème de recherche. La première partie définit un problème de recherche : état, action, arbre d'exécution, espace d'états, cout, objectif et formalisation. La deuxième partie présente plusieurs algorithmes de recherche : non informé (BFS, UCS, DFS, DLS, ID-DFS, BS), informé (BFS, A*) et avec adversaire (Minimax, Alpha-Beta Pruning). Enfin, la troisième partie présente deux librairies Python qui implémentent des algorithmes de recherche.
Ce cours introduit à l'intelligence artificielle. La première partie du cours présente et définit ce qu'est l'intelligence et décrit les notions d'agent rationnel et d'environnement et leurs propriétés. Ces deux concepts permettent d'offrir un cadre de réflexion sur l'intelligence. La fin de la première partie présente les neufs formes d'intelligence selon Howard Gardner. La seconde partie du cours présente et définit l'intelligence artificielle, initiée par Marvin Minsky et John McCarthy au MIT. Elle présente également le test de Turing, test permettant de déterminer si une machine peut penser. Cette partie se termine en présentant les six grands domaines de l'intelligence artificielle.
Ce cours présente les techniques que l'on peut utiliser pour effectuer des calculs parallèles avec une machine. La première partie introduit à la notion de parallélisme et de processus. Elle présente ensuite comment lancer et manipuler des processus avec les modules subprocess et multiprocessing. On y voit également comment communiquer entre processus avec des Queue et des Pipe. La deuxième partie présente les threads et leur utilisation avec le module threading. On y voit également comment créer un pool de workers/executors pour exécuter des jobs. Enfin, la dernière partie présente le framework dispy qui permet de facilement faire du calcul distribué et exploiter le parallélisme de données.
Ce deuxième cours aborde la programmation réseau, c'est-à-dire le développement d'applications avec plusieurs composants qui communiquent entre eux via la réseau. Après une rapide présentation des protocoles UDP et TCP, le cours aborde la notion de socket et présente le module Python de même nom. Le cours présente deux applications concrètes : une application de chat (basé sur UDP) et une application echo (basé sur TCP). Le cours se termine par la découverte de la notion de protocole de communication et de la définition du format des messages échangés.
Ce cours présente le notion de qualité de code et quels sont les critères et pratiques à adopter pour produire du code de qualité. Il présente les erreurs de programmation les plus fréquentes auprès des apprentis programmeurs. La deuxième partie du cours présente la notion de convention de codage et en particulier le PEP 0008 qui décrit des conventions à adopter lorsqu'on programme en Python.
Ce cours présente ce qu'est Internet et son fonctionnement. En partant de l'ordinateur personnel ou smartphone connectés en un réseau local, le cours remonte petit à petit vers le fournisseur d'accès et l'Internet complet. Le cours présente ensuite plusieurs protocoles qui assurent le bon fonctionnement d'Internet et des services qu'il permet d'offrir. Enfin, la dernière partie concerne l'internet des objets.
Ce cours introduit aux trois langages de programmation du Web que sont l'HTML, le CSS et le Javascript. L'HTML est un langage de balisage qui permet de décrire un document et sa structure. Le CSS est un langage qui permet de définir des règles de style à appliquer à un document. Enfin, Javascript est un langage permettant d'ajouter un aspect dynamique à une page web.
Ce cours introduit à la notion de type abstrait de données (TAD). On commence par y découvrir les principes de complexité temporelle et spatiale permettant d'analyser les performances d'une structure de données et d'algorithmes. Ensuite, le cours présente plusieurs TAD : la pile, la file, le deque et le vecteur. Enfin, il présente comment implémenter des TAD avec des structures chainées.
Ce cours concerne le polymorphisme, c'est-à-dire la capacité pour une variable de prendre plusieurs types de donnée durant le temps de sa vie. Le cours présente aussi la notion de classe abstraite et d'interface qui est une classe abstraite pure.
Programmation orientée objet : Object, classe et encapsulation
1. PO3T Programmation orientée objet
Séance 1
Objet, classe
et encapsulation
Sébastien Combéfis, Quentin Lurkin mercredi 16 septembre 2015
2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
3. Informations générales
PO3T Programmation orientée objet
13 cours de 1h30 (19,5 heures)
Documents utilisés sont sur Eole (slides et énoncés des labos)
Évaluation
Examen (PO3T) : 100%
Enseignants
Sébastien Combéfis (s.combefis@ecam.be)
Quentin Lurkin (q.lurkin@ecam.be)
3
5. Objectifs
Création et utilisation d’objets
État
Appel de méthode
Ramasse-miettes
Définition de classes
Variable d’instance, visibilité
Constructeur
Définition de méthode
Encapsulation
5
7. Vie d’un objet
Vie d’un objet
Création de l’objet (initialisation)
Appel de méthode, changement d’état (utilisation)
Destruction de l’objet (finalisation)
1 words = []
2
3 words.append(’Hello ’) # Appel de la méthode append
4 words.append(’World!’) # de l’objet words (list)
5
6 print(’ ’.join(words))
Hello World!
7
8. Et en Java...
1 import java.util. ArrayList ;
2
3 public class Cours1
4 {
5 public static void main ( String [] args)
6 {
7 ArrayList <String > words = new ArrayList <String >();
8
9 words.add ("Hello"); // Appel de la méthode add
10 words.add ("World!"); // de l’objet words (ArrayList)
11
12 System.out.println (String.join (" ", words));
13 }
14 }
8
10. Et en C++...
1 # include <iostream >
2 # include <vector >
3
4 using namespace std;
5
6 int main (int argc , char *argv [])
7 {
8 vector <string > words;
9
10 words.push_back ("Hello");
11 words.push_back ("World!");
12
13 string s;
14 join(words , ’ ’, s);
15 cout << s << endl;
16
17 return 0;
18 }
10
11. Et en C#...
1 using System;
2 using System. Collections .Generic;
3
4 namespace Cours1
5 {
6 public class MainClass
7 {
8 public static void Main (string [] args)
9 {
10 List <string > words = new List <string >();
11
12 words.Add ("Hello"); // Appel de la méthode Add
13 words.Add ("World!"); // de l’objet words (List)
14
15 Console .WriteLine (String.Join (" ", words));
16 }
17 }
18 }
11
12. Manipuler les objets du monde
getFuelLevel
isOnGround
startEngine
startAutopilot
13. Objet
Un objet possède
des attributs (caractéristiques)
des méthodes (fonctionnalités)
L’état de l’objet peut varier tout au long de l’exécution
Défini par l’ensemble des valeurs des attributs
Marque : Sony-Ericsson
Modèle : S500i
Couleur : Mysterious Green
Batterie : 80%
Luminosité : 60%
Marque : Sony-Ericsson
Modèle : S500i
Couleur : Spring Yellow
Batterie : 35%
Luminosité : 90%
13
14. Attribut
Un attribut possède une valeur
Cette valeur fait partie de l’état de l’objet
Les attributs sont accessibles en lecture et/ou en écriture
1 Console .WriteLine ("Taille de la liste : " + words.Count);
2
3 Console .WriteLine ("Ancienne capacité : " + words.Capacity);
4 words.Capacity = 10;
5 Console .WriteLine ("Nouvelle capacité : " + words.Capacity);
Taille de la liste : 2
Ancienne capacité : 4
Nouvelle capacité : 10
14
15. Fonctionnalité
Une fonctionnalité est appliquée sur un objet cible
Elle agit sur l’état de l’objet, en le lisant et/ou le modifiant
1 bool contains = words.Contains ("Hello");
2 bool allShorts = words.TrueForAll (s => s.Length <= 5);
3 Console .WriteLine (contains + ", " + allShorts);
4
5 Console .WriteLine ("Liste : " + String.Join(", ", words));
6 words.Clear ();
7 Console .WriteLine ("Liste : " + String.Join (", ", words));
True , False
Liste : Hello , World!
Liste :
15
16. Ramasse-miettes
Langages avec machine virtuelle ont un ramasse-miette
Suppression automatique et régulière des objets non référencés
1 System.out.println ( Runtime .getRuntime ().freeMemory ());
2 StringBuilder builder = new StringBuilder ("a");
3 for (int i = 0; i < 20; i++)
4 {
5 builder.append (builder);
6 }
7 System.out.println ( Runtime .getRuntime ().freeMemory ());
8
9 System.gc();
10 System.out.println ( Runtime .getRuntime ().freeMemory ());
> java -Xmx2048m Cours1
83601240
78776072
82171712
16
17. Destruction
Destruction explicite d’un objet
Libération de la mémoire et des ressources allouées
1 class Bullshit
2 {
3 public:
4 ~Bullshit ();
5 };
6
7 Bullshit ::~ Bullshit ()
8 {
9 cout << "Damn , I’ve been destroyed!";
10 }
11
12 int main (int argc , char *argv [])
13 {
14 Bullshit *b = new Bullshit ();
15 delete b;
16
17 return 0;
18 }
17
19. Classe
Une classe est un modèle avec lequel on construit des objets
Il s’agit d’un modèle qui reprend les attributs et fonctionnalités
Un objet est une instance d’une classe
On crée un nouvel objet à partir d’une classe
19
20. Instance
Trois éléments distincts
Une classe est un modèle
Un objet est une instance d’une classe
Une variable (de type objet) stocke une référence vers l’objet
g
GSM
GSM
Sony Ericsson
w200i
Orange-Blanc
GSM
Marque
Modèle
Couleur
envoyerSMS
recevoirAppel
voirNiveauBatterie
20
21. Alias
Une variable est une référence vers un objet
La variable permet d’accéder à l’objet
Un alias réfère le même objet qu’une autre variable
g
GSM
h
GSM
GSM
Sony Ericsson
w200i
Orange-Blanc
GSM
Marque
Modèle
Couleur
envoyerSMS
recevoirAppel
voirNiveauBatterie
21
22. Définir une classe
Définition d’une classe Contact représentant un contact
Défini par un prénom, un nom et un numéro de téléphone
1 class Contact:
2 def __init__(self , firstname , lastname):
3 self.firstname = firstname
4 self.lastname = lastname
5 self.phonenumber = 0
6
7 def setPhoneNumber (self , number):
8 self.phonenumber = number
9
10 def __str__(self):
11 return ’{} {} ({}) ’.format(self.firstname , self.lastname ,
self.phonenumber )
12
13 marchand = Contact(’Cédric ’, ’Marchand ’)
14 print(marchand) # Cédric Marchand (0)
15
16 marchand. setPhoneNumber (8172)
17 print(marchand) # Cédric Marchand (8172)
22
23. Constructeur et variable d’instance
Le constructeur initialise l’état de l’objet
On fait appel au constructeur au moment de l’instantiation
Initialisation des variables d’instance
On affecte une valeur à chaque variable d’instance
1 def __init__(self , firstname , lastname):
2 self.firstname = firstname
3 self.lastname = lastname
4 self.phonenumber = 0
5
6 # [...]
7
8 marchand = Contact(’Cédric ’, ’Marchand ’)
9 print(marchand)
23
24. En C#...
1 class Contact
2 {
3 private string firstname , lastname;
4 private int phonenumber;
5
6 public Contact (string firstname , string lastname)
7 {
8 this.firstname = firstname;
9 this.lastname = lastname;
10 this. phonenumber = 0;
11 }
12
13 // [...]
14 }
15
16 public class MainClass
17 {
18 public static void Main ( string [] args)
19 {
20 Contact marchand = new Contact ("Cédric", "Marchand");
21 Console .WriteLine (marchand);
22
23 // [...]
24 }
25 }
24
25. Variable d’instance
Une variable d’instance est liée à l’objet
Sa valeur fait partie de l’état de l’objet
Peuvent avoir une certaine visibilité
Uniquement accessible dans la classe ou visible de l’extérieur
1 public class Contact
2 {
3 private String firstname , lastname;
4 private int phonenumber;
5
6 // [...]
7 }
25
26. Instanciation
On peut créer plusieurs instances d’une classe
Chaque instance a son identité propre
marchand
Contact
Contact
Cédric
Marchand
8172
Contact
firstname
lastname
phonenumber
setPhoneNumber
toString
flemal
Contact
Contact
Clémence
Flemal
0
marchand = Contact(’Cédric’, ’Marchand’)
marchand.setPhoneNumber(8172)
print(marchand)
flemal = Contact(’Clémence’, ’Flemal’)
26
27. Méthode
Une méthode (d’instance) représente une fonctionnalité
Elle agit sur une instance spécifique, l’objet cible
Peuvent avoir une certaine visibilité
Uniquement accessible dans la classe ou visible de l’extérieur
1 def setPhoneNumber (self , number):
2 self.phonenumber = number
3
4 # [...]
5
6 marchand. setPhoneNumber (8172)
7 print(marchand)
27
28. En C#...
1 class Contact
2 {
3 // [...]
4
5 public void setPhoneNumber (int number)
6 {
7 phonenumber = number;
8 }
9
10 // [...]
11 }
12
13 public class MainClass
14 {
15 public static void Main ( string [] args)
16 {
17 // [...]
18
19 marchand. setPhoneNumber (8172);
20 Console .WriteLine (marchand);
21 }
22 }
28
29. Appel de méthode
Une méthode (d’instance) est appelée sur un objet cible
La méthode aura accès aux variables d’instances de cet objet
Mot réservé spécifique pour accéder à l’objet cible
Référence vers l’objet cible (this, self... )
1 public void setPhoneNumber (int number)
2 {
3 this. phonenumber = number;
4 }
5
6 // [...]
7
8 marchand. setPhoneNumber (8172); // this fera référence
9 Console .WriteLine (marchand); // à marchand
29
30. Accesseur
Un getter permet de lire une variable d’instance
Ou de manière générale, d’obtenir une information sur l’état
Un setter permet de modifier une variable d’instance
1 # [...]
2
3 def getPhoneNumber (self):
4 return self.phonenumber
5
6 def setPhoneNumber (self , number):
7 self.phonenumber = number
8
9 # [...]
10
11 marchand. setPhoneNumber (8172)
12 print(marchand. getPhoneNumber ())
30
31. Propriété C#
Une propriété permet de créer des accesseurs
Est vu de l’extérieur comme une variable d’instance publique
1 // [...]
2
3 public int PhoneNumber
4 {
5 get { return phonenumber; }
6 set { phonenumber = value; }
7 }
8
9 // [...]
10
11 marchand. PhoneNumber = 999;
12 Console .WriteLine (marchand. PhoneNumber);
31
32. Type abstrait de donnée
Abstract Data Type
ADT
Cacher les détails
d’implémentation
Rendre les changements
indépendants du reste
du programme
Le programme est
auto-documenté
Le programme manipule
des entités qui modélisent
le monde réel
32
33. Encapsulation I
Détails d’implémentation cachés du monde extérieur
Déclarer les variables d’instances comme privées
Accès contrôlés par les méthodes (d’instance) publiques
Permet un contrôle en lecture/écriture
1 public class Time
2 {
3 public int hour , minute;
4
5 public Time (int hour , int minute)
6 {
7 this.hour = hour;
8 this.minute = minute;
9 }
10 }
33
34. Accès direct
Le code utilisateur dépend de l’implémentation
Couplage fort entre des codes différents
Le code utilisateur ne fonctionnera plus en cas de changements
1 public static void main (String [] args)
2 {
3 Time t1 = new Time (8, 30);
4 Time t2 = new Time (12, 15);
5
6 System.out.println ((t1.hour == t2.hour && t1.minute < t2.
minute) || t1.hour < t2.hour);
7 System.out.println (t1.isBefore (t2));
8 }
34
35. Encapsulation II
Les variables d’instance doivent être privées
L’accès est contrôlé par des méthodes publiques
1 public class Time
2 {
3 private int hour , minute;
4
5 // [...]
6
7 public boolean isBefore (Time t)
8 {
9 return this.hour < t.hour || (this.hour == t.hour && this.
minute < t.minute);
10 }
11 }
12
13 // [...]
14
15 System.out.println (t1.isBefore (t2));
35
36. Encapsulation III
Le code utilisateur est indépendant de l’implémentation
1 class Time
2 {
3 private int minutes;
4
5 public Time (int hour , int minute)
6 {
7 this.minutes = 60 * hour + minute;
8 }
9
10 public boolean isBefore (Time t)
11 {
12 return this.minutes < t.minutes;
13 }
14 }
15
16 // [...]
17
18 System.out.println (t1.isBefore (t2));
36
37. Type de donnée
Une classe définit un nouveau type de donnée
Représentation plus directe d’objets du monde réel
Exposition d’une interface publique au monde extérieur
Variables d’instances et méthodes publiques
Des liens sont possibles entre différentes classes
37
38. Immuabilité
Un objet immuable garde le même état
Une fois initialisé, son état ne peut plus changer
Propriété très importantes dans plusieurs situations
Utilisation comme élément de certaines collections
Utilisation safe entre plusieurs threads
1 public class Time
2 {
3 private final int hour , minute;
4
5 public Time (int hour , int minute)
6 {
7 this.hour = hour;
8 this.minute = minute;
9 }
10 }
38
39. Code de hachage
Identifier de manière unique un objet
Deux objets avec le même état sont considérés identiques
Code de hachage unique pour chaque objet (hashcode)
Par exemple un entier sur 32 bits en Java
1 A = {1, 2, 3}
2 B = {3} | {1, 2}
3
4 print(id(A), id(B))
4338390408 4338390184
39
40. Crédits
Photos des livres depuis Amazon
https://www.flickr.com/photos/madalena_pestana/2828893154
https://www.flickr.com/photos/jetstarairways/6769120131
https://www.flickr.com/photos/booleansplit/3510951967
40