IFT 232 Méthodes de Conception Orientées Objets Introduction Plan Qu’est-ce qu’un langage de programmation ? Langage de programmation En tant que filtre pour concevoir le monde En tant que culture La programmation par objets (POO) Un survol du territoire Vers l’apprentissage de la culture Java Etude des langages de programmation Etape 1: Identification et classification des éléments de base des langages de programmation Etape 2: Regroupement de ces éléments en familles de langages Approche horizontale: • Regrouper les langages similaires en termes de syntaxe et sémantique la programmation par objets: Smalltalk, Java, C++, Eiffel… La programmation procédurale: C, Pascal, Modula… Etape 3: Langage de programmation ==> une culture Approche verticale • La syntaxe et la sémantique ne font pas un langage de programmation • Pour réellement comprendre un langage de programmation, il faut comprendre et intégrer sa culture Éléments de base d’un langage de programmation Variable Type: typé | non typé, types primitifs, inférence de types, Valeur: pointeurs, calculée par une fonction, ramasse-miettes, Portée: lexicale, dynamique, locale, globale Structure de contrôle Conditionnelles, boucles, primitives Exceptions Invocation / activation des calculs Appel de procédures, appel de fonctions, démons Transmission de messages, passage de paramètres Choix de la “fonction” activée • Pattern matching, polymorphisme, héritage Éléments de base d’un langage de programmation Statut de certains éléments Fonctions, classes réflexivité Modifications en cours d’exécution de certains éléments Parallélisme Synchrone, asynchrone, fil d’exécution (thread)… Calculs Compilation, interprétation, machine virtuelle Pile d’exécution, tas (“heap”) Évaluation paresseuse, backtracking Familles de langages de programmation Programmation par objets Programmation procédurale Programmation fonctionnelle Programmation par contraintes Programmation logique Programmation par règles etc. Langage de programmation Langage Filtre sur le monde S’insère dans une culture Langage de programmation NIVEAU Lisp Lexical Des parenthèses, des symboles, Et très peu de formes spéciales Syntaxique (define (somme l) (define res 0) (define liste l) (while (notNull? l) (Set! res (+ res (car l))) (set! liste (cdr liste))) res) Sémantique (define (somme l) (if (null l) 0 (somme (+ (car l) (somme (cdr l))))) Pragmatique (define (somme l) (accumulate (lambda (x l) (+ x (car l))) 0 l)) La programmation par objets Cinq éléments de base Instance Classe Héritage Méthode Transmission de messages La culture “orientée objets” Modélisation Unified Modelling Language (UML) Le langage La syntaxe et la sémantique du langage, e.g. Java, Smalltalk… Les conventions • Programmation • Nomenclature Les composants JavaBeans reposent sur ces conventions La pratique de programmation Refactorisation Schémas de conception Méthodologie de développement de systèmes Programmation agile To be a ``most important'' innovation, an innovation has to be an idea that is very widely used and is critically important where it applies. To be a "software" innovation, it has to be a technological innovation that impacts how computers are programmed (e.g., an approach to programming or an innovative way to use a computer). An innovation is a new idea. And in this paper, what's meant is a new idea in software technology. http://www.dwheeler.com/innovation/innovation.html Programmation par objets Objet, acteur, prototype Classe Instance Transmission de message Méthode Héritage simple \ multiple, interface, polymorphisme, surcharge (“overloading”) LANGAGE de programmation NIVEAU Application au langage naturel Lexical Vocabulaire Erreurs d’orthographe Grammaire Règles Signification Erreurs de sens Interprétation en tenant compte du contexte Syntaxique Sémantique Pragmatique Esthétique Une culture est aussi un filtre …une certaine façon de concevoir le monde Programmer --> cuisine Lexical Syntaxique Inuits ??? Mode de cuisson Mode de cuisson Huile d’olive Sémantique Cuisson (trop) longue Al dente Spaghetti alla bolognese Choix des pâtes Combinaison Temps de cuisson Crème, parmesan Pragmatique Pizzaghetti Antipasto Primo pasto Secundo pasto