[Dev OpenGP] [65] Little Python lesson

[ Thread Index | Date Index | More opengp.tuxfamily.org/development Archives ]


Revision: 65
Author:   alband85
Date:     2009-03-19 16:43:04 +0100 (Thu, 19 Mar 2009)

Log Message:
-----------
Little Python lesson

Modified Paths:
--------------
    externals/Com/Rapport/tex/rapport.tex


Modified: externals/Com/Rapport/tex/rapport.tex
===================================================================
--- externals/Com/Rapport/tex/rapport.tex	2009-03-19 14:30:30 UTC (rev 64)
+++ externals/Com/Rapport/tex/rapport.tex	2009-03-19 15:43:04 UTC (rev 65)
@@ -1,4 +1,4 @@
-\documentclass[a4paper,11pt,oneside,draft]{report}
+\documentclass[a4paper,11pt,oneside, draft]{report}
 \usepackage[utf8]{inputenc}
 \usepackage{amsfonts, amsmath, amsthm}
 \usepackage[a4paper]{geometry}
@@ -8,6 +8,7 @@
 \usepackage{emp}
 \usepackage{rotating}
 \usepackage[lined,linesnumbered,boxed,french]{sty/algorithm2e}
+\usepackage{moreverb}
 \usepackage[frenchb]{babel}
 
 
@@ -452,9 +453,9 @@
 
 Une récupération des données du dépôt se fait au moyen de la commande : 
 \begin{quote}
-	\begin{verbatim}
+	\begin{boxedverbatim}
 		svn co svn+ssh://<USER>@svn.tuxfamily.org/svnroot/opengp/opengp
-	\end{verbatim}
+	\end{boxedverbatim}
 \end{quote}
 L'obtention d'un répertoire particulier est possible en précisant le nom de ce répertoire dans l'arborescence en argument supplémentaire de la commande ci-dessus. De plus amples informations concernant les commandes SVN sont données en annexe \ref{chapter:svn} (page \pageref{chapter:svn}). 
 
@@ -462,7 +463,7 @@
 \begin{figure}
 	\centering
 	\begin{minipage}{.5\textwidth}
-		\begin{verbatim}
+		\begin{boxedverbatim}
 .
 |-- branches
 |-- tags
@@ -479,7 +480,7 @@
         |           |-- plugin1
         |           `-- plugin2
         `-- tests
-		\end{verbatim}
+		\end{boxedverbatim}
 	\end{minipage}
 	\caption{Arborescence du projet}\label{fig:arboProjet}
 \end{figure}
@@ -511,10 +512,10 @@
 
 \chapter{Diagramme de classes}
 
-\begin{figure}
+\begin{figure}[ht!]
 	\centering
 	\begin{turn}{90}
-		\includegraphics{../figures/uml/class-1}
+		\includegraphics[width=.9\textwidth]{../figures/uml/class-1}
 	\end{turn}
 	\caption{Diagramme de classes (\emph{package} \textsf{ogp})}
 \end{figure}
@@ -550,5 +551,86 @@
 	\item[unlock] Retire un verrou.
 \end{description}
 
+\chapter{Python en (très) bref}
+\section{Syntaxe}
 
+La structuration d'un code source Python est basée sur l'indentation. Celle-ci est laissée au choix du développeur (tabulation, $n$ espaces...) mais doit être suivie rigoureusement (l'interpréteur Python le rappellera avec joie au développeur qui ne l'aurait pas fait). 
+
+Python propose globalement les mêmes concepts qu'un autre langage orienté objet. On illustre ces explications à l'aide de la figure \ref{fig:classePython} (page \pageref{fig:classePython}). 
+
+\begin{figure}[ht!]
+\begin{boxedverbatim}
+class MaClasse(object):
+  """
+    Description de la classe
+  """
+  # Variable de classe (voir détails)
+  maVariable = 0
+  
+  # Méthode lancée à l'instanciation de la classe
+  def __init__(self, params):
+    # Contenu
+    ...
+  
+  # Définition d'une méthode publique
+  def func(self, a):
+    # Portée : instance de la classe (self)
+    self.a = a
+    # Portée : méthode
+    b = a
+  
+  # Méthode privée (préfixée par "__")
+  def __priv(self, i):
+    print "__priv est une méthode privée"
+    # Variable privée (portée de __pi : instance de la classe)
+    self.__pi = i
+\end{boxedverbatim}
+\caption{Exemple de définition d'une classe en Python}\label{fig:classePython}
+\end{figure}
+
+\begin{figure}
+\centering
+\begin{boxedverbatim}
+# Instanciation
+c = MaClasse(params)
+# Utilisation de func (équivalence des deux syntaxes)
+c.func(2)
+MaClasse.func(c, 2)
+\end{boxedverbatim}
+\caption{Exemple d'instanciation de classe en Python}
+\end{figure}
+
+Dans cet exemple, on définit une classe \texttt{MaClasse} héritant de \texttt{object}. Contrairement à d'autres langages, on n'utilise pas de constructeur à proprement parler : la méthode \texttt{\_\_init\_\_} est la première méthode exécutée, mais elle l'est alors que la classe possède déjà une instance valide (contrairement à un constructeur qui est lancé avant qu'une instance valide n'existe).
+
+De la même manière, la méthode \texttt{\_\_del\_\_} est exécutée lors de la destruction de l'instance. Elle est assimilable (par abus ici aussi) à un destructeur. 
+
+Au sein d'une classe, les objets peuvent avoir le statut \og{}publique\fg{} ou \og{}privé\fg{}. Même s'il est possible de créer des objets protégés, cette option n'est pas disponible par défaut dans le langage. Les objets privés sont distingués des objets publiques par leur préfixe \og{}\_\u\fg{} (deux caractères \og{}souligné\fg{} ou plus). Un objet préfixé par un seul caractère \og{}souligné\fg{} doit être considéré comme privé par le développeur mais n'est pas masqué par Python (il reste utilisable en dehors de la classe), il s'agit d'une simple convention. 
+
+L'instance courante de la classe est représentée par la variable \texttt{self}. Les variables n'ayant pas besoin d'être déclarées, ce mot clef permet de définir leur portée. Ainsi, en définissant \texttt{a = 0}, la portée est celle de la méthode (variable locale). En revanche, utiliser \texttt{self.a = 1} donnera à \texttt{a} une portée égale à la classe (variable globale). Les variables initialisées hors des méthodes (par exemple, \texttt{maVariable}) ont un comportement particulier. Elles sont utilisables simultanément comme des variables statiques et comme des attributs de la classe instanciée. Ainsi, dans l'exemple de la figure \ref{fig:pythonVariableClasse} (page \pageref{fig:pythonVariableClasse}), la variable \texttt{maVariable} possède trois valeurs à la fin de l'exécution : 
+\begin{itemize}
+	\item en tant qu'attribut statique, elle vaut 3 (et valait initialement 0) ;
+	\item en tant qu'attribut de \texttt{c1}, elle vaut 2 ;
+	\item en tant qu'attribut de \texttt{c2}, elle vaut 1. 
+\end{itemize}
+À noter qu'utiliser autrement qu'en écriture une variable non déclarée lève une exception. 
+
+\begin{figure}
+\centering
+\begin{boxedverbatim}
+# Instanciation
+c1 = MaClasse(params)
+c2 = MaClasse(params)
+# Utilisation statique
+MaClasse.maVariable = 3
+# Utilisation comme attribut de l'instance
+c1.maVariable = 2
+c2.maVariable = 1
+\end{boxedverbatim}
+\caption{Exemple d'utilisation d'une variable de classe}\label{fig:pythonVariableClasse}
+\end{figure}
+
+\section{Gestion des modules}
+%TODO
+
+
 \end{document}


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/