transparencias: añadido ejemplo for
[spanish-workshop-intro-python:mainline.git] / beamer / main.tex
1 %; whizzy -pdf
2 \documentclass{beamer}
3
4 %% based on an original file from Till Tantau (thanks!)
5 \mode<presentation>
6 {
7   \usetheme{Boadilla}
8   \setbeamercovered{transparent}
9 }
10
11 \usepackage[spanish]{babel}
12 \usepackage[T1]{fontenc}
13 \usepackage[utf8x]{inputenc}
14 \input{pygment_preamble}
15
16 \title[Introducción a Python]{Introducción al lenguaje de programación Python}
17 \date{\today}
18 \author{Antonio García Domínguez}
19 \institute[OSLUCA]{Oficina de Software Libre\\Universidad de Cádiz}
20
21 \AtBeginSubsection[]
22 {
23   \begin{frame}<beamer>{Tabla de contenidos}
24     \tableofcontents[currentsection,currentsubsection]
25   \end{frame}
26 }
27
28 \begin{document}
29
30 \frame[plain]{\titlepage}
31
32 \begin{frame}
33 \frametitle{Tabla de contenidos}
34 \tableofcontents
35 \end{frame}
36
37 \section{Introducción}
38 %-------------------------------------------------------------------
39
40 \begin{frame}[fragile]
41   \frametitle{Características generales}
42
43   \begin{block}{Lenguaje en sí (ver \emph{import this})}
44     \begin{itemize}
45     \item Muy alto nivel
46     \item Sintaxis uniforme y sencilla
47     \item Completamente orientado a objetos
48     \item Multiparadigma
49     \item Énfasis está en la eficiencia de desarrollo
50     \end{itemize}
51   \end{block}
52
53   \input{../codigo/programas/zen.py.0.tex}
54 \end{frame}
55
56 \begin{frame}
57   \frametitle{Origen del nombre}
58   \framesubtitle{Monty Python and the Flying Circus}
59
60   \begin{center}
61     \includegraphics[width=.4\textwidth]{MontySpam}
62   \end{center}
63
64   Man:  Well, what've you got?
65
66   Waitress:     Well, there's egg and bacon; egg sausage and bacon; egg and spam; egg bacon and spam; egg bacon sausage and spam; spam bacon sausage and spam; spam egg spam spam bacon and spam; spam sausage spam spam bacon spam tomato and spam;
67
68   Vikings:      Spam spam spam spam...
69
70   Waitress:     ...spam spam spam egg and spam; spam spam spam spam spam spam baked beans spam spam spam...
71
72 \end{frame}
73
74 \begin{frame}
75   \frametitle{Implementaciones, herramientas y bibliotecas}
76
77   \begin{block}{Extensa biblioteca estándar}
78     \begin{itemize}
79     \item Analizadores XML DOM/SAX
80     \item Varios entornos de pruebas
81     \item Servidor Web
82     \item Y si necesitamos más, podemos integrar bibliotecas de otros
83       lenguajes con sus \emph{bindings} (PyGame, PyQt, PyGTK...)
84     \item También hay entornos y bibliotecas enteras en Python (Django)
85     \end{itemize}
86   \end{block}
87
88   \pause
89   
90   \begin{block}{Implementaciones}
91     \begin{description}
92     \item[CPython] la original, escrita en C
93     \item[Jython]  se ejecuta sobre la Java Virtual Machine
94     \item[IronPython] utiliza el .NET Common Language Runtime
95     \item[PyS60]  para móviles con Symbian serie 60
96     \item[PyPy] intérprete modular de Python escrito en Python
97     \end{description}
98   \end{block}
99
100 \end{frame}
101
102 \begin{frame}
103   \frametitle{Historia}
104
105   \begin{columns}
106     \column{.8\textwidth}
107     \begin{block}{Python 1.X}
108       \begin{itemize}
109       \item \structure{1991}: Guido van Rossum publica la 0.9.0
110       \item \structure{1994}: Versión 1.0, y se toman conceptos de
111         Lisp
112       \item \structure{2000}: Versión 1.6 genera polémica con su
113         licencia
114       \end{itemize}
115     \end{block}
116
117     \column{.2\textwidth}
118     \begin{center}
119       \includegraphics[width=.9\textwidth]{PythonProgLogo}
120     \end{center}
121
122   \end{columns}
123   \pause
124
125   \begin{columns}
126     \column{.2\textwidth}
127     \begin{center}
128       \includegraphics[width=.9\textwidth]{current-python-logo}
129     \end{center}
130
131     \column{.8\textwidth}
132     \begin{block}{Python 2.X}
133       \begin{itemize}
134       \item \structure{2000}: Versión 2.0 toma de Haskell y
135         recolecta ciclos
136       \item 2.1: código pasa a la \emph{Python Software Foundation}
137       \item Versión 2.2 equipara tipos básicos con clases normales
138       \item Versiones 2.3 y 2.4 (entre otras) toman de Java
139       \end{itemize}
140     \end{block}
141   \end{columns}
142   \pause
143
144   \begin{block}{Python 3.X (ahora en \emph{alpha})}
145     \begin{itemize}
146     \item Romperá compatibilidad hacia atrás y retirará bagaje inútil
147     \item ``There should be one-- and preferably only one --obvious way to do it.''
148     \end{itemize}
149   \end{block}
150   
151   
152 \end{frame}
153
154 \begin{frame}
155   \frametitle{Comparación con Java}
156
157   \begin{itemize}
158   \item También se compila a un \emph{bytecode} intermedio
159     \begin{itemize}
160     \item pero de forma implícita (estilo Perl)
161     \end{itemize}
162
163   \item Todo hereda de \texttt{object}
164     \begin{itemize}
165     \item pero todo, todo: no se escapan ni las constantes numéricas
166     \end{itemize}
167
168   \item Semántica de referencias a objetos
169     \begin{itemize}
170     \item Vamos pasando, asignando y devolviendo sólo \emph{referencias}
171     \end{itemize}
172
173   \item Recolección automática de basura
174
175   \item Introspección, serialización, multihilo, biblioteca estándar enorme...
176   \end{itemize}
177   
178 \end{frame}
179
180 \begin{frame}
181   \frametitle{Comparación con C++}
182   
183   \begin{itemize}
184   \item Multiparadigma: no obliga a hacer OO
185     \begin{itemize}
186     \item Procedural
187     \item Orientado a objetos
188     \item Genérico (mediante \emph{duck typing})
189     \item Algo de funcional
190     \end{itemize}
191
192   \item Herencia múltiple
193   \item Sobrecarga de operadores (menos asignación)
194   \item Libertad de elección de herramientas
195   \end{itemize}
196 \end{frame}
197
198 %-------------------------------------------------------------------
199 \section{Aspectos básicos}
200
201 \subsection{Tipos simples}
202 %-------------------------------------------------------------------
203 \begin{frame}[fragile]{Operaciones aritméticas}
204   \small
205   \input{../codigo/programas/ops_aritmeticos.py.0.tex}
206 \end{frame}
207
208 \begin{frame}[fragile]{Operaciones con bits}
209   \small
210   \input{../codigo/programas/ops_bits.py.0.tex}
211 \end{frame}
212
213 \begin{frame}[fragile]{Comparaciones}
214   \small
215   \input{../codigo/programas/comparaciones.py.0.tex}
216 \end{frame}
217
218 \begin{frame}[fragile]{Números complejos}
219   \small
220   \input{../codigo/programas/num_complejos.py.0.tex}
221 \end{frame}
222
223 \begin{frame}[fragile]{Cadenas}
224   \small
225   \input{../codigo/programas/cadenas.py.0.tex}
226 \end{frame}
227 %-------------------------------------------------------------------
228 \begin{frame}[fragile]{Booleanos}
229   \small
230   \input{../codigo/programas/booleanos.py.0.tex}
231 \end{frame}
232 %-------------------------------------------------------------------
233 \begin{frame}[fragile]{Todo esto es un objeto}
234
235   \begin{itemize}
236   \item Los objetos tienen métodos, y éstos tienen documentación
237   \item La documentación se puede consultar en momento de ejecución
238   \item ¿Qué cosas puedo hacer con una cadena?
239   \end{itemize}
240
241   \small
242   \input{../codigo/programas/ayuda_enlinea.py.0.tex}
243 \end{frame}
244 %-------------------------------------------------------------------
245 \subsection{Tipos estructurados}
246 %-------------------------------------------------------------------
247 \begin{frame}[fragile,allowframebreaks]{Listas}
248   \input{../codigo/programas/listas.py.0.tex}
249 \end{frame}
250
251 \begin{frame}[fragile]{Tuplas}
252   \input{../codigo/programas/tuplas.py.0.tex}
253 \end{frame}
254
255 \begin{frame}[fragile]{Diccionarios}
256   \input{../codigo/programas/diccionarios.py.0.tex}
257 \end{frame}
258
259 \begin{frame}[fragile]{Conjuntos}
260   \input{../codigo/programas/conjuntos.py.0.tex}
261 \end{frame}
262 %-------------------------------------------------------------------
263 \subsection{Control de flujo}
264 %-------------------------------------------------------------------
265 \begin{frame}[fragile]{Condicional: if}{Python nos obliga a indentar debidamente el código}
266   \input{../codigo/programas/if.py.0.tex}
267 \end{frame}
268
269 \begin{frame}[fragile]{Bucle sobre iterable: for}{El estilo de C es peligroso: mejor el foreach de Perl y Java 5}
270   \input{../codigo/programas/for.py.0.tex}
271 \end{frame}
272 %-------------------------------------------------------------------
273 \section{Funciones}
274 \subsection{Definición}
275 %-------------------------------------------------------------------
276 \begin{frame}
277 \frametitle{Definición}
278
279 \begin{itemize}
280 \item Versión básica
281 \item Con documentación
282 \item Valores por defecto
283 \item Paso de argumentos por nombre
284 \item Expansión de argumentos posicionales
285 \item Funciones anónimas
286 \end{itemize}
287 \end{frame}
288 %-------------------------------------------------------------------
289 %-------------------------------------------------------------------
290 \begin{frame}
291 \frametitle{Clausuras}
292
293 \end{frame}
294 %-------------------------------------------------------------------
295 %-------------------------------------------------------------------
296 \begin{frame}
297 \frametitle{Decoradores}
298
299 \end{frame}
300 %-------------------------------------------------------------------
301 %-------------------------------------------------------------------
302 \begin{frame}
303 \frametitle{Generadores}
304
305 \end{frame}
306 %-------------------------------------------------------------------
307 \section{Clases y objetos}
308 %-------------------------------------------------------------------
309 \begin{frame}
310 \frametitle{Clases y objetos}
311
312 \begin{itemize}
313 \item Definición de clases
314 \item Herencia
315 \item Propiedades
316 \item Módulos y paquetes
317 \item Manejo de excepciones
318 \item Duck typing
319 \end{itemize}
320 \end{frame}
321 %-------------------------------------------------------------------
322 \section{Marcos de pruebas}
323 %-------------------------------------------------------------------
324 \begin{frame}
325 \frametitle{Marcos de pruebas}
326
327 \begin{itemize}
328 \item doctests
329 \item unittest
330 \end{itemize}
331 \end{frame}
332 %-------------------------------------------------------------------
333
334 \end{document}
335