CSI2520 Un langage de programmation par scripting orienté-objet (et fonctionnel)

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Programmation Tcl/Tk Raymond Ripp janvier 2009
Pour débutant … et autre Raymond Ripp
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
(Classes prédéfinies – API Java)
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
Algorithme et programmation
Principes de programmation (suite)
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Sous-programmes Concepts généraux Passage de paramètres Fonctions
CPI/BTS 2 Programmation Web Introduction au PHP
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Python La programmation objet
Introduction à la programmation (Java)
Fichiers et entrées / sorties Sauvegarde des programmes dans des fichiers. Compilation. Lecture et écriture de données dans des fichiers. Formatage des.
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Séquences : listes et tuples Définition dune liste. Opérations sur les listes. Fonctions permettant de manipuler les listes. Instruction for. Tuples. Exemples.
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Le langage Javascript pour le web
Présentation Structures de Données et TDA
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Points importants de la semaine Les constantes. Les boucles. Les opérateurs relationnels Les opérateurs logiques.
Instruction sélective switch-case Instruction répétitive do-while For
CSI2520, Hiver 2007 Python Un langage de programmation par scripting et plus…
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
Chapitre 8 Structure de contrôle.
CSI3525: Concepts des Langages de Programmation Notes # 6: Langages de Programmation Fonctionelle II: Introduction au ML.
Plan troisième cours Instruction sélective Instruction répétitive
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Modules et packages Modules, fichiers, chemin d’accès à un module, espaces de noms, importation de modules ou d’attributs de modules, packages, exemples.
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
L’essentiel du langage C
Python Fonction et procédure
Animateur : Med HAIJOUBI
PHP & My SQL.
La notion de type revisitée en POO
Scripts shell intro Un script bash est un fichier contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash),
Créer des packages.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Les tests.
 Syntaxe du langage PHP
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Le langage Racket (Lisp)
CSI2520 Un langage de programmation impérative et concurrente.
Fichier=open('monfichier.txt','w') >>> fichier.write('bonjour\n') 8 >>> liste ['le chien', 'le chat', 'le loup'] >>> for s in liste: fichier.write(s+'\n')
Initiation au JavaScript
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
Les bases de l’algorithmique
Module 133 Développer des applications Web Introduction à PHP.
Langage de programmation
Scripts et fonctions Instructions de contrôle
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
Introduction à l’utilitaire
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
** Flash séance 2 Action script. ** Action Script Ajoute de l’interactivité Permet de contrôler les clips  Langage de programmation orienté objet.
Flash 2 ème séance Interaction François Marliac Mickaël Moreira.
Philippe Gandy – 13 octobre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
FLASH Séance 2 Xiaoliang Liang Morgane Le Nan SI28 P05.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Variables : notion Une variable permet de stocker/manipuler une donnée dans un programme avec un nom explicite Caractériser par son type (entier, flottant,...)
BASE DE L’ALGORITHMIE.  Un système d’instructions.  Pour résoudre d’un problème ou d’une classe de problèmes  Recette de cuisine pour faire un gâteau.
IFT359 – Programmation fonctionnelle Thème 07 Fermeture, affectation ou monades 1.
Transcription de la présentation:

CSI2520 Un langage de programmation par scripting orienté-objet (et fonctionnel)

 Langage de plus haut niveau ◦ Syntaxe simple  Souvent interprété (byte code)  Axé sur le développement rapide  Très utile pour la programmation de contrôle ◦ Accès au système fichiers, etc.  Typage dynamique ◦ Variable non-déclarée ◦ Erreur de typage détecté à l’exécution  Riche en modules réutilisable CSI2520

 Créé en 1991, en logiciel libre depuis 2000 ◦ Les versions 2.X et 3.X co-existent et ne sont pas complètement compatibles  C’est avant tout un langage multi-paradigme  Programmation très productive (3x à 10x) ◦ Facile à apprendre ◦ Prototypage rapide  Encourage la réutilisation et le logiciel libre ◦ Beaucoup de modules disponibles  En général, plus lent CSI2520

 Un programme est composé de modules ◦ Créé dans un fichier texte ◦ Les changements de lignes et l’indentation a un signification définie  Un module est composé d’énoncés ◦ Un module peut être importé dans un autre  Un énoncé contient des expressions import math

 Un module est un fichier texte contenant des instructions Python  Le nom du fichier est le nom du module ◦ Extension.py ◦ Variable système PYTHONPATH CSI2520 >>> import fibo >>> fibo.fib(1000)

CSI2520 # fichier fibo.py def fib(n): # affiche la serie de Fibonacci jusqu’à n a, b = 0, 1 while b < n: print(b) a, b = b, a+b def fib2(n): # retourne la serie de Fibonacci jusqu’à n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result

CSI2520 >>> print('Bonjour les amis ! ') Bonjour les amis ! >>> >>> >>>

CSI2520 >>> y = 3.14 >>> y >>> a = "bonjour" >>> a 'bonjour' >>> b = 'salut' >>> b 'salut' >>> c = '''girafe''' >>> c 'girafe' >>> x = 45 >>> x >>> y = 2.5 >>> x + y 47.5 >>> (x * 10) / y >>> chaine = "Salut" >>> chaine 'Salut' >>> chaine + " Python" 'Salut Python' >>> chaine * 3 'SalutSalutSalut' >>> x = 2 >>> type(x) >>> x = 2.0 >>> type(x) >>> x = '2' >>> type(x) >>> 2**  Les types ne sont pas déclarés ◦ Chaines de caractères Unicode  Les variables sont des références à des objets ◦ Ramasse-miette

CSI2520 >>> animaux = ['girafe','tigre','singe','souris'] >>> animaux[1] 'tigre‘ >>> animaux[-2] 'singe' >>> tailles = [5, 2.5, 1.75, 0.15] >>> mixte = ['girafe', 5, 'souris', 0.15] >>> animaux ['girafe', 'tigre', 'singe', 'souris'] >>> tailles [5, 2.5, 1.75, 0.15] >>> mixte ['girafe', 5, 'souris', 0.15]  Séquence de types mixtes

>>> animaux[0:2] ['girafe', 'tigre'] >>> animaux[0:3] ['girafe', 'tigre', 'singe'] >>> animaux[0:] ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[:] ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[1:] ['tigre', 'singe', 'souris'] >>> animaux[1:-1] ['tigre', 'singe'] >>> ani1 = ['girafe','tigre'] >>> ani2 = ['singe','souris'] >>> ani1 + ani2 ['girafe', 'tigre', 'singe', 'souris'] >>> ani1 * 3 ['girafe', 'tigre', 'girafe', 'tigre', 'girafe', 'tigre']

CSI2520 >>> a = [66.25, 333, 333, 1, ] >>> print( a.count(333), a.count(66.25), a.count('x')) >>> a.insert(2, -1) >>> a.append(333) >>> a [66.25, 333, -1, 333, 1, , 333] >>> a.index(333) 1 >>> a.remove(333) >>> a [66.25, -1, 333, 1, , 333] >>> a.reverse() >>> a [333, , 1, 333, -1, 66.25] >>> a.sort() >>> a [-1, 1, 66.25, 333, 333, ]

CSI2520 >>> squares = [x**2 for x in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] >>> vec = [[1,2,3], [4,5,6], [7,8,9]] >>> [num for elem in vec for num in elem] [1, 2, 3, 4, 5, 6, 7, 8, 9]

 Les variables sont des références à des objets ◦ Affecter une liste à une variable ne créé pas de copie >>> listeA=[1,2,3] >>> listeB=['a','b',listeA,'c'] >>> listeC=listeB >>> listeD=listeB[:] # copie >>> listeC ['a', 'b', [1, 2, 3], 'c'] >>> listeD ['a', 'b', [1, 2, 3], 'c'] >>> listeA.remove(2) >>> listeC ['a', 'b', [1, 3], 'c'] >>> listeD ['a', 'b', [1, 3], 'c'] >>> listeB.insert(-1,'d') >>> listeC ['a', 'b', [1, 3], 'd', 'c'] >>> listeD ['a', 'b', [1, 3], 'c']

CSI2520 >>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido'] = 4127 >>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098} >>> tel.keys() ['guido', 'irv', 'jack'] >>> 'guido' in tel True  Séquence avec une relation clé,valeur

 Séquences immuables >>> trois=(1,2,3) >>> cinq=trois+(4,5) >>> trois (1, 2, 3) >>> cinq (1, 2, 3, 4, 5) >>> trois[1] 2 >>> cinq.index(4) 3 >>> trois[1]=6 Traceback (most recent call last): File " ", line 1, in trois[1]=6 TypeError: 'tuple' object does not support item assignment

 == teste l’équivalence  is teste si c’est le même objet >>> listeA [1, 3] >>> listeX=[1,3] >>> listeY=listeA >>> listeA==listeX True >>> listeA is listeX False >>> listeA==listeY True >>> listeA is listeY True

 Les affectations augmentées sont permises ◦ += -= *= /= etc. ◦ a = b = c = 2  Affectation à l’aide de tuples ◦ x, y = 3, 5 ◦ x, y = y, x # les expressions à droite sont évaluées d’abord  Affectation de séquences ◦ a,b,c,d = 'Allo' ◦ x=[1,2,3,4,5] ◦ a,b,*c= x # c sera [3,4,5] ◦ a,*b,c= x # b sera [2,3,4]

CSI2520 if x < 0: x = 0 print('de négatif à zéro') elif x == 0: print 'zéro' elif (x == 1 or x == 10): print 'un-dix' else: print 'positif'  L’indentation est obligatoire ◦ L’utilisation de 4 espaces est suggérée  Les paranthèses ne sont requises que pour une expression sur plusieurs lignes  La valeur 0, les objets vide et le None sont considérés comme faux  Les expressions booléenne sont toujours court-circuitées  Pas d’évaluations inutiles

CSI2520 >>> for i in [0,1,2,3]: print(i) >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> for a in animaux: for c in a: print(c) g i r a f e t i g r e s i n g e. >>> x=[1,2,3] >>> y=[9,8,7] >>> for (a,b,c) in (x,y): print(a,b,c) >>> for i in range(4): print(i)

>>> x=[1,2,3,4,5] >>> while x: if x[0] == 3: print('oui') break # passe par dessus le else x=x[1:] else: print('non') # a executer lorsqu’on sort du while oui >>> x [3, 4, 5] >>>

 La fonction range retourne un iterable >>> it=range(10,50,5) >>> i=iter(it) >>> next(i) 10 >>> next(i) 15 >>> list(it) [10, 15, 20, 25, 30, 35, 40, 45]

While True: reponse= input('Un nombre svp: ') if reponse == 'stop' : break try: nombre= int(reponse) except: print('Erreur! ' * 2) else: print(num*num) print('Merci!')

 En général, les fonctions sont utiles pour: ◦ Faciliter la réutilisation du code ◦ Minimiser les répétitions dans le code ◦ Décomposer les procédures en entités plus simples  En Python, une fonction se définie avec le def ◦ def créé un objet et lui assigne un nom ◦ def est un énoncé exécutable  La fonction n’existe pas tant que le def n’est pas exécuté def f(x): return x % 2 != 0 and x % 3 != 0 if user == 'advanced': def f(x): return x % 2 != 0 and x % 3 != 0 else: def f(x): return x % 2 != 0

 Par défaut, toutes les variables dans une fonction sont locales ◦ On peut aussi définir des variables  global : accessible de l’extérieur  nonlocal : qui conservent leur état  Les arguments sont passés par références  Une fonction peut auss être créée avec un énoncé lambda

>>> exp2= lambda x: x**2 >>> exp2(5) 25 >>> liste=[1,3,5] >>> list(map(exp2,liste)) [1, 9, 25] >>> def plafond(P): return lambda X: X if X<P else P >>> p255=plafond(255) >>> p255(5) 5 >>> p255(345) 255  Expression pouvant remplacer le def ◦ Le corps du lambda est une seule expression ◦ ◦ souvent utilisé avec  map  reduce  filter

 Les fonctions Python sont implicitement polymorphiques ◦ Mais il n’y a pas de surcharge de fonctions  Il n’est pas permit de définir une autre fonction avec le même nom mais une signature différente >>> def fois(x,y): return x*y >>> fois(5,7) 35 >>> fois('salut',3) 'salutsalutsalut‘ >>> def intersection(A,B): resultat= [] for x in A: if x in B: resultat.append(x) return resultat >>> intersection([1,2,3,4,5],(1,3,5,7,9)) [1, 3, 5] >>> intersection(['a','b','c'],'salut bonjour') ['a', 'b']

 Une fonction peut retourner des tuples >>> pluriel=lambda X : X+'s' >>> def plurielListe(X): resultat=list(map(pluriel,X)) return resultat[0][0],resultat >>> plurielListe(liste) ('c', ['chats', 'chiens', 'loups'])

>>> def prefixe(pre,*mots): mots2=[] for m in mots: mots2.insert(-1,pre+m) return mots2 >>> prefixe('le ', 'chien','chat','loup') ['le chat', 'le loup', 'le chien']

>>> def applatir(L): resultat=[] for x in L: if isinstance(x,list): resultat+=applatir(x) else: resultat.append(x) return resultat >>> applatir([1,2,3,4]) [1, 2, 3, 4] >>> applatir([1,2,[3,[4,5]],8]) [1, 2, 3, 4, 5, 8]