´ a la Introduccion ´ Programacion para la carrera de Licenciatura Licenciat ura en Artes Arte s y Tecnolog´ıas ıas
´ Pablo E. Mart´ Mar t´ınez ıne z L opez Federico A. Sawady O’Connor
´Indice de contenidos ´ Introducci´ Introduccion Unidad Unidad Unidad Unidad
´ digital de la Version Carpeta de trabajo
Unidad Unidad Unidad Unidad Unidad ´ Pagina siguiente
2
´ Mar t´ınez ın ez L opez, Pablo E. ´ a la Programacion ´ / Pablo E. Mart´ ´ Introduccion Mart´ınez ınez Lopez y Federico ´ de Carlos A. Lombardi. - 1ra ed. A. Sawady O’Connor; con colaboracion - Bernal : Universidad Virtual de Quilmes, 2013. ´ Recurso electronico. ISBN 978-987-1856-39-8 ´ ´ 1.Informatica. atica . 2.Progra 2.Programaci maci´on. 3.Rede 3.R edes. s. I.Saw I.Sawady ady O’Conno O’Connorr, FeFederico A. II.Lombardi, Carlos A., colab. III.T´ıtulo ıtulo CDD 005.3.
´ Procesamiento didactico: Bruno De Angelis, Ana Elbert ´ Morfese, Marcelo Aceituno y Juan I. Dise ˜ Dise ˜ no original de maqueta: Hernan Siwak ´ Pablo E. Mart´ınez ´ Diagramacion: ınez Lopez (con LATEX)
´ marzo 2013 Primera edicion:
ISBN: 978-987-1856-39-8
c Unive ´ nz Pena ˜ 352, Univers rsid idad ad Naci Nacion onal al de Quil Quilme mes, s, 2013 2013 Roqu Roque e Saenz ae 352, (B1876BXD) Bernal, Buenos Aires ´ Telefono: (5411) 4365 7100 — http://www.virtual.unq.edu.ar
La Universidad Nacional de Quilmes se reserva la facultad de disponer de ´ y reproesta obra, publicarla, traducirla, adaptarla o autorizar su traducci on ´ en cualquier forma, total o parcialmente, por medios electr onicos ´ duccion o ´ ´ magnetofonica ´ mecanicos, incluyendo fotocopias, grabaci on y cualquier sis´ Por consiguiente, nadie tiene facultema de almacenamiento de informacion. tad de ejercitar los derechos precitados sin permiso escrito del editor.
´ Queda hecho el deposito que establece la ley 11.723
2
´ Mar t´ınez ın ez L opez, Pablo E. ´ a la Programacion ´ / Pablo E. Mart´ ´ Introduccion Mart´ınez ınez Lopez y Federico ´ de Carlos A. Lombardi. - 1ra ed. A. Sawady O’Connor; con colaboracion - Bernal : Universidad Virtual de Quilmes, 2013. ´ Recurso electronico. ISBN 978-987-1856-39-8 ´ ´ 1.Informatica. atica . 2.Progra 2.Programaci maci´on. 3.Rede 3.R edes. s. I.Saw I.Sawady ady O’Conno O’Connorr, FeFederico A. II.Lombardi, Carlos A., colab. III.T´ıtulo ıtulo CDD 005.3.
´ Procesamiento didactico: Bruno De Angelis, Ana Elbert ´ Morfese, Marcelo Aceituno y Juan I. Dise ˜ Dise ˜ no original de maqueta: Hernan Siwak ´ Pablo E. Mart´ınez ´ Diagramacion: ınez Lopez (con LATEX)
´ marzo 2013 Primera edicion:
ISBN: 978-987-1856-39-8
c Unive ´ nz Pena ˜ 352, Univers rsid idad ad Naci Nacion onal al de Quil Quilme mes, s, 2013 2013 Roqu Roque e Saenz ae 352, (B1876BXD) Bernal, Buenos Aires ´ Telefono: (5411) 4365 7100 — http://www.virtual.unq.edu.ar
La Universidad Nacional de Quilmes se reserva la facultad de disponer de ´ y reproesta obra, publicarla, traducirla, adaptarla o autorizar su traducci on ´ en cualquier forma, total o parcialmente, por medios electr onicos ´ duccion o ´ ´ magnetofonica ´ mecanicos, incluyendo fotocopias, grabaci on y cualquier sis´ Por consiguiente, nadie tiene facultema de almacenamiento de informacion. tad de ejercitar los derechos precitados sin permiso escrito del editor.
´ Queda hecho el deposito que establece la ley 11.723
3
´Iconos Iconos
´ Son afirmaciones, conceptos o definiciones destaLeer con Atencion. ´ del tema cadas y sustanciales que aportan claves para la comprension que se desarrolla. ´ ´ de pregunPara Reflexionar. Propone un dialogo con el material a traves tas, planteamiento de problemas, confrontaciones del tema con la reali´ dad, ejemplos o cuestionamientos que alienten a la reflexion.
Pastilla. Incorpora informaciones breves, complementarias o aclaratorias ´ ´ de alg´un t ermino o frase del texto principal. El subrayado indica los t ermi´ ´ asociada en el nos a proposito de los cuales se incluye esa informacion margen. ´ de la Cita. Se diferencia de la palabra del autor de la Carpeta a trav es ´ insercion de comillas, para indicar claramente que se trata de otra voz que ingresa al texto. ´ o una afirmacion ´ del texto Ejemplo. Se utiliza para ilustrar una definicion principal, con el objetivo de que se puedan fijar mejor los conceptos. ´ a distintos casos o textos como Para Ampliar. Extiende la explicacion podr´ıan ıan ser s er los l os period´ p eriod´ısticos ısticos o de otras fuentes. ´ de Actividades. Son ejercicios, investigaciones, encuestas, elaboracion ´ ´ de gu´ ´ cuadros, graficos, resolucion gu´ıas ıas de estudio, etcetera. ´ Recurso Web. Liks a sitios o p aginas web que resulten una referencia dentro dentro del campo disciplinar disciplinario. io.
Lectura Obligatoria. Textos completos, cap´ cap´ıtulos ıtulos de libros, art´ art´ıculos ıculos y papers que se encuentran digitalizados en el aula virtual. Lectura Recomendada. Bibliograf´ıa ıa que no se considera obligatoria y a la que se puede recurrir para ampliar o profundizar alg´un un tema.
4
5
Los autores
´ Pablo E. Mart´ınez ınez Lopez ´ Pablo E. “Fidel” Mart´ınez ınez L opez se recibio´ de Doctor en Ciencias de la Compu´ en la UBA en noviembre 2005, y antes de eso de Mag´ tacion Mag ´ıster ıster en Ciencias ´ de la Computacion en la Universidad de la Republica. ´ Uruguay y de Licencia´ do en Informatica en la UNLP. Ejerce Ejerce la docencia docencia universitaria universitaria desde 1990, y ´ Exclusiva en la Universidad desde 2007 es Profesor Asociado con Dedicaci on Nacional de Quilmes, habiendo trabajado como docente en UNLP, UBA, UNR, UNRC y UNLM. Posee la categor´ıa ıa 2 en el programa de incentivos a la investiga´ del gobierno nacional. Sus areas ´ ´ cient´ cion de interes cient´ıfico ıfico son los Lenguajes de ´ especialmente Programaci on ´ Funcional, Estructuras de Datos, la Programaci´ Programacion, ´ automatica ´ ´ y los Lenguaproduccion de programas, progra mas, la Teor´ıa ıa de la Computaci Co mputaci on ´ ´ jes formales y automatas. Ha participado en diversos proyectos de investigacion ´ internacional desde 1993, habiendo dirigido incluso un proyecto de cooperacion ´ y transferencia desde 2007. Es autor en 2008, y varios proyectos de extensi on de numerosos nume rosos art´ a rt´ıculos ıculos cient´ıficos ıficos naciona n acionales les e internaciona inter nacionales les y de un cap´ıtulo ıtulo ´ en diversos niveles, y de libro. Ha formado recursos humanos en investigacion ´ universitaria y transferencia de conocimienha participado en tareas de gesti on ´ ´ como Director de Carrera tos, desempen˜ andose al momento de esta publicaci on ´ Informatica ´ de la Tecnicatura Universitaria en Programaci on del Departamento de Ciencia y Tecnolog´ Tecnolog´ıa ıa de la Universidad Nacional de Quilmes (UNQ) y Direc´ Tecnologica ´ tor de la Unidad de Vinculacion UTICs (Unidad de Tecnolog´ıas ıas de ´ y la Comunicacion) ´ dependiente de la Direccion ´ de Vinculacion ´ la Informacion ´ ˜ desde el Tecnologica de la misma Universidad. En ambos cargos se desempe na 2do semestre de 2007.
Federico A. Sawady O’Connor ´ ´ InFeder Federico ico A. Saw Sawady ady O’Connor O’Connor es Tecnico ecnic o Universit Universitario ario en Programaci Programaci´on ´ form atica de la Universidad Nacional de Quilmes (UNQ), siendo uno de los prime´ ros recibidos de dicha carrera. Ha publicado un art´ıculo ıculo referido a la didactica de ´ y su trabajo final de carrera consisitio´ en el contribuir en el desala programacion, ˜ rrollo del lenguaje G OBSTONES, disenando y desarrollando un sistema de tipos ˜ al momento de esta publicaci on ´ como empleado para el mismo. Se desempena ´ Sadosky en tareas vinculadas a la educaci on ´ en Computacion ´ de la Fundacion ´ I en la escuela de gestion ´ soy como docente de Laboratorio de Programaci on ´ cial Florentino Ameghino de Florencia Varela, en el nivel de secundaria tecnica, donde utiliza el enfoque propuesto en esta Carpeta.
6
7
´Indice general
1. La disciplina de la programaci´on ´ 1.1. ¿Que´ es la programaci on? . . . . . . . . . . . . ´ 1.2. ¿Que´ son los lenguajes de programacion? . . . 1.3. Breve historia de la programaci´on . . . . . . . . 1.3.1. Surgimiento de las computadoras . . . . 1.3.2. Los primeros lenguajes de alto nivel . . . 1.3.3. Los paradigmas de programaci´on . . . . ´ del software . 1.3.4. Consolidaci´on y expansion 1.3.5. La era de internet . . . . . . . . . . . . . 1.3.6. Tendencias actuales . . . . . . . . . . . . 1.4. Lenguajes para dominios espec´ıficos . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
´ 2. Primeros elementos de programacion ´ a elementos b asicos ´ 2.1. Introduccion . . . . . . . . . . . . . . . 2.1.1. Valores y expresiones . . . . . . . . . . . . . . . . . 2.1.2. Acciones y comandos . . . . . . . . . . . . . . . . . 2.1.3. Operaciones sobre expresiones y comandos . . . . 2.1.4. Tipos de expresiones . . . . . . . . . . . . . . . . . ´ 2.2. Elementos basicos de Gobstones . . . . . . . . . . . . . . 2.2.1. Tablero y bolitas . . . . . . . . . . . . . . . . . . . . 2.2.2. El cabezal . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3. Comandos simples . . . . . . . . . . . . . . . . . . . 2.2.4. Procedimientos simples . . . . . . . . . . . . . . . . ´ comandos simples . . . . . . . . . . . . . . . . 2.2.5. Mas 2.2.6. Utilizando adecuadamente procedimientos . . . . . 2.3. Acerca de las cuestiones de estilo . . . . . . . . . . . . . . ´ 2.3.1. Indentaci´on de codigo . . . . . . . . . . . . . . . . . 2.3.2. Elecci´on de nombres adecuados de identificadores ´ 2.3.3. Comentarios en el codigo . . . . . . . . . . . . . . . 2.4. Ejercitaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . . .
3. Procedimientos, funciones y parametrizaci´on 3.1. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Procedimientos con par´ametros . . . . . . . . . . . . ´ ´ de comandos . . . . . . 3.1.2. Formas basicas de repeticion 3.1.3. Ejercitaci´on . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Expresiones y funciones . . . . . . . . . . . . . . . . . . . . . 3.2.1. Expresiones compuestas y tipos . . . . . . . . . . . . 3.2.2. Operaciones predefinidas para construir expresiones 3.2.3. Alternativas condicionales . . . . . . . . . . . . . . . . 3.2.4. Funciones simples . . . . . . . . . . . . . . . . . . . . 3.3. Funciones avanzadas . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
17 17 19 21 21 23 24 26 26 27 28
. . . . . . . . . . . . . . . . .
33 33 33 35 37 37 38 39 39 42 44 50 53 58 58 61 63 66
. . . . . . . . . .
77 77 77 83 87 87 88 90 96 98 103
8
3.3.1. Funciones con par´ametros . . . . . . . . . . . . . . . . . . 103 3.3.2. Funciones con procesamiento . . . . . . . . . . . . . . . . 105 3.4. Ejercitaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4. Alternativa, repetici´on y memoria ´ sobre alternativas . . . . . . . . . . 4.1. Mas 4.1.1. Alternativa condicional . . . . . . 4.1.2. Alternativa indexada . . . . . . . ´ sobre repeticiones . . . . . . . . . 4.2. Mas ´ sobre repetici on ´ indexada . 4.2.1. Mas 4.2.2. Repetici´on condicional . . . . . . 4.2.3. Recorridos simples . . . . . . . . 4.3. Memorizaci´on de datos . . . . . . . . . 4.3.1. Variables . . . . . . . . . . . . . ´ complejos . . . 4.3.2. Recorridos mas 4.4. Ejercitaci´on . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
113 113 113 115 118 118 121 124 131 131 140 146
´ 5. Modularizacion ´ 5.1. Modulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. P YTHON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ´ 5.2.1. Como trabajaremos con P YTHON . . . . . . . . . . . . . . 5.2.2. Herramientas abstractas en P YTHON . . . . . . . . . . . . 5.3. Tipos abstractos de datos . . . . . . . . . . . . . . . . . . . . . . 5.4. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1. Ejercicios con listas . . . . . . . . . . . . . . . . . . . . . 5.5. Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1. Ejercicios con diccionarios . . . . . . . . . . . . . . . . . ´ sobre estructuras de datos . . . . . . . . . . . . . . . . 5.6. Iteracion 5.7. Biblioteca P YGAME . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8. Ejercicio integrador . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8.1. Organizaci´on del proyecto . . . . . . . . . . . . . . . . . . ´ del juego . . . . . . . . . . . . . . . . . . 5.8.2. Implementacion
. . . . . . . . . . . . . .
153 153 155 156 158 160 161 162 162 163 163 164 166 167 168
´ orientada a objetos 6. Programacion 6.1. El paradigma de orientaci´on a objetos . . . . ´ orientada a objetos en Python 6.2. Programacion ´ elementos del paradigma . . . . . . . . 6.3. Mas 6.3.1. Polimorfismo . . . . . . . . . . . . . . 6.3.2. Herencia . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
171 171 174 179 179 183
7.1. Persistencia de informaci´on . . . . . . . . . . . . . . . . . . 7.1.1. La necesidad de persistir . . . . . . . . . . . . . . . 7.1.2. Persistencia de datos, mecanismos de persistencia ´ consulta, b´usqueda . . . . . . . . . . 7.1.3. Actualizacion, 7.1.4. Persistencia en archivos . . . . . . . . . . . . . . . . 7.2. Concepto de base de datos . . . . . . . . . . . . . . . . . . 7.2.1. Cualidades de los datos persistidos . . . . . . . . . 7.2.2. Desventajas de la persistencia en archivos . . . . . 7.2.3. Un problema de consistencia . . . . . . . . . . . . . 7.2.4. ¿Qu´e son las bases de datos? . . . . . . . . . . . . 7.3. Bases de datos relacionales . . . . . . . . . . . . . . . . . . 7.3.1. Tablas, campos y filas . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
189 189 189 190 191 191 192 193 194 194 195 197 197
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
7. Bases de datos
por Carlos A. Lombardi
9
7.3.2. Tipos de datos . . . . . . . . . . . . . . . . . . . 7.3.3. Claves . . . . . . . . . . . . . . . . . . . . . . . . 7.3.4. Varias tablas . . . . . . . . . . . . . . . . . . . . ´ a SQL . . . . . . . . . . . . . . . . . . . . . 7.4. Introduccion ´ de las expresiones SQL . 7.4.1. Estructura y ejecucion 7.4.2. Definiendo la organizaci´on de una BD . . . . . . 7.4.3. Agregado de filas . . . . . . . . . . . . . . . . . . 7.4.4. Consultas sobre una u ´ nica tabla . . . . . . . . . 7.4.5. Ordenando el resultado de una consulta . . . . . 7.5. SQL m´as avanzado . . . . . . . . . . . . . . . . . . . . ´ 7.5.1. Calculos en las consultas . . . . . . . . . . . . . 7.5.2. El valor nulo . . . . . . . . . . . . . . . . . . . . 7.5.3. Consultas sobre varias tablas . . . . . . . . . . . ´ de dos tablas . . . . . . . . . . . 7.5.4. Reuniendo mas 7.5.5. Otras actualizaciones . . . . . . . . . . . . . . .
8. Redes 8.1. Redes de computadoras . . . . . . . . . . . . . . . . . 8.1.1. Clasificaci´on de las redes . . . . . . . . . . . . 8.1.2. Redes cliente-servidor y redes punto a punto . 8.2. Modelo de capas . . . . . . . . . . . . . . . . . . . . . 8.2.1. Modelo OSI . . . . . . . . . . . . . . . . . . . . 8.2.2. Modelo TCP/IP . . . . . . . . . . . . . . . . . . 8.2.3. Modelo h´ıbrido . . . . . . . . . . . . . . . . . . 8.2.4. Protocolos . . . . . . . . . . . . . . . . . . . . 8.2.5. Tipos de servicios . . . . . . . . . . . . . . . . 8.3. Capas del Modelo OSI . . . . . . . . . . . . . . . . . . ´ . . . . . . . . . . . . . . . . 8.3.1. Capa de aplicacion 8.3.2. Capa de transporte . . . . . . . . . . . . . . . 8.3.3. Capa de red . . . . . . . . . . . . . . . . . . . 8.3.4. Capa de enlace y capa f´ısica . . . . . . . . . . ´ al HTML . . . . . . . . . . . . . . . . . . 8.4. Introduccion ´ ´ 8.4.1. Descripci´on basica de una pagina web . . . . 9. Aplicaciones 9.1. Int´erpretes y compiladores . . . . . . 9.2. IDEs . . . . . . . . . . . . . . . . . . . 9.3. Ejercicio integrador . . . . . . . . . . . 9.3.1. Codificaci´on del modelo . . . . 9.3.2. Base de datos y consultas . . 9.3.3. Consultas a la base de datos .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
199 200 200 202 202 203 205 205 209 210 210 212 214 218 221
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
225 225 226 227 228 230 232 232 232 234 234 234 239 240 241 242 244
. . . . . .
247 247 248 250 250 251 254
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
La herramienta P Y G OBSTONES
257
Sokoban en P YTHON
261
10
11
´ Introduccion
´ es una disciplina que en pocos anos ˜ ha cobrado una relevanLa programacion ´ ´ cia fundamental en diversos ambitos de la cultura humana, como la producci on de conocimiento o de obras art´ısticas. Hoy d´ıa es deseable que un profesional ´ ya que es tenga un m´ınimo de conocimientos relacionados con la programacion, ˜ de sus tareas, se topar a´ con la factible que en alg´un momento del desempeno necesidad de comprender o manipular programas, comunicarse con equipos de programadores y tomar decisiones vinculadas a esta disciplina La asignatura busca formar a personas con poca o ninguna experiencia en ´ ´ patematicas vinculadas al desarrollo de software. Para ello ofrece una visi on ´ ´ ´ noramica de los temas b asicos, comenzando por la historia de la programaci on, ´ continuando con abstracciones basicas que permiten modelar programas, y pa´ ´ de software sando luego a tecnicas y tecnolog´ıas avanzadas para la construcci on ´ ´ orientada a objetos, y tem aticas ´ complejo, como la tecnica de programacion de bases de datos y redes de computadoras. ´ al profesional maniLos conocimientos impartidos durante el curso permitir an pular los conceptos asociados, para lograr un conocimiento profundo del funcio´ ´ namiento de los medios tecnicos contemporaneos, potenciando de esta manera ´ y el desarrollo de programas vinculados a su area ´ la planificacion de experien´ ´ ´ cia mediante su colaboracion con equipos de programacion, y permitiendole la ´ y posproducci on ´ de mamanipulaci´on de software espec´ıfico para la produccion ´ teriales graficos, sonoros, audiovisuales y multimediales en general, al conocer los fundamentos con los que los mismos fueron desarrollados. Se trata de una materia inicial en la carrera, pues permitir a´ luego abordar con herramientas cognitivas adecuadas las diversas materias espec´ıficas que constituyen el plan de estudios. Es por ello que se trata de una materia fundamental, que no puede desconocerse. La carpeta se organiza en 9 unidades. En la primera comenzamos presen´ y haremos una revision ´ tando la idea de programa y lenguaje de programacion, ´ desde su surgimiento moderno, de la historia de los lenguajes de programacion ´ del mundo acpara comprender el rol que los lenguajes juegan la construcci on ´ a un primer lenguaje de tual. En la segunda hacemos la primera aproximacion ´ programaci´on, presentando sus elementos b asicos (expresiones y comandos) y ´ organizandolos para comenzar a resolver problemas sencillos. Elegimos el len˜ guaje G OBSTONES, desarrollado espec´ıficamente en la UNQ para la ensenanza de un curso inicial. En la tercera continuamos presentando elementos de len´ en G OBSTONES, incorporando herramientas (funciones, guajes de programacion ´ para manejar la complejidad y simplificar los procedimientos y parametrizaci on) ´ del lenguaje GOB S programas resultantes. La cuarta completa la presentaci on ´ de los elementos mas ´ complejos del mismo (estrucTONES con una explicacion ´ y manejo de memoria elemental), y turas de control para alternativa y repetici on, propone algunos ejercicios avanzados. En la Unidad 5 presentamos otro conjunto de ideas, vinculado a la forma en que se agrupan las partes de un programa
12
´ a traves ´ de tipos abstractos de datos) para proveer flexibilidad (la modularizacion y comenzaremos a trabajar con estructuras de datos sencillas. Para ello cambia´ mos al lenguaje P YTHON , un lenguaje de propositos generales muy utilizado. En ´ orientada a objetos, y refinala sexta presentamos las ideas de la programaci on ´ de ellas las ideas de modularizaci on. ´ Este estilo de programaci on ´ mos a trav es ´ difundidos en la produccion ´ de software industrial es actualmente uno de los mas moderno. La Unidad 7 deja el estudio de los programas en s´ı, para concentrarse ´ a lo largo en otro aspecto fundamental, que es la persistencia de la informaci on ´ a traves ´ de bases de datos para simplicar el acceso del tiempo, y su organizaci on ´ nociones basicas ´ de los programas. Presentamos tambi en del lenguaje SQL de acceso a dichas bases de datos. La octava vuelve a cambiar, presentado otro ´ la organizacion ´ de redes de computadoaspecto que influye en la programaci on: ´ entre ras. Exploramos brevemente la forma en que se organiza la comunicaci on ´ de redes, volviendo a enfocar el problema de abstracci on ´ computadoras a traves ´ desde otro angulo completamente diferente. Finalmente concluimos en la Uni´ de una integracion ´ de conceptos en el desarrollo de dad 9 con la presentacion ´ para lo cual tambien ´ hablamos de ambientes de programaci on ´ y una aplicacion, las herramientas asociadas.
´ Problematica del Campo ´ de una manera amena y sencilla, teniendo Esta carpeta presenta la programacion en cuenta que los ususarios de la misma no buscan convertirse en expertos en el ´ ´ sino tener conocimientos de los fundamentos basicos ´ area de la programaci on, de la misma para poder interactuar en grupos interdisciplinarios que incluyan programadores. Sin embargo, no por ello incurre en el defecto de sobresimplificar ´ a traves ´ de metaforas ´ o infantilizar la programacion u otros recursos limitantes, ´ precisa, cient´ıfica, sin incurrir en detalles sino que busca mantener una visi on ´ tecnicos innecesarios. ´ alrededor del concepto de abstraccion, ´ idea verArticulamos la presentacion ´ de programacion ´ es tebral a la actividad misma de programar. La misma noci on una tarea abstracta, y que requiere de conceputalizaciones y representaciones ´ y los procesos. Asimismo, los lenguajes de prograabstractas de la informaci on ´ pueden ser vistos como herramientas de abstracci on, ´ y los elementos macion ´ del tipo de abstracci on ´ que en ellos aparecen se pueden comprender en funci on que proveen. A las unidades centradas en las formas de escribir programas le agregamos ´ de dos unidades fundamentales, como son la persistencia de informaci´ona traves ´ provista por las redes de computadoras, combases de datos, y la comunicaci on pletando de esta manera un marco conceptual integral en el proceso de desarrollo de software. El material de esta carpeta esta´ pensado para que sirva no solo como referen´ de material de consulta cia y gu´ıa del aprendizaje de la disciplina, sino tambi en para las definiciones elementales y las ideas que son pilar de la fascinante disci´ plina de la programaci on.
Reflexiones acerca del aprendizaje de la disciplina en el entorno virtual ´ Las ultimas ´ decadas fueron escenario de cambios culturales notables, dados en gran parte por el avance de la tecnolog´ıa, y repercutieron en todos los escena-
13
´ y transmision ´ de rios humanos, tanto sociales como pol´ıticos, y de producci on ´ conocimentos e informaci on. ´ El ambito educativo se ve, en consecuencia, impregnado de modificaciones, especialmente en las formas en que es viable, hoy en d´ıa, acceder al conoci´ son la base sobre la que se miento. Los cambios en las formas de comunicaci on ´ cambios, a partir de la influencia en la forma en que estructuran todos los dem as ´ los individuos representamos el conocimiento y adquirimos la informacion. Se vuelve imprescindible reflexionar sobre las herramientas que se ponen ´ para adquirir conocimientos, para incorporar no solo una a nuestra disposicion ´ ´ profunda sobre las popractica superficial de las mismas, sino una comprensi on sibilidades e implicaciones de su uso. ´ es clave el protagonismo y compromiso individual de cada estuEn educacion diante, aunque muchas veces esto no sea adecuadamente puesto en foco. En la educaci´on mediante entornos virtuales esto es doblemente necesario, dado que ´ el docente debe reemplazar numerosas formas no verbales de comunicaci on, ´ tales como gestos al hablar, por recursos virtuales como correos electr onicos o ´ Estas herramientas inform aticas ´ foros de discusion. no son fines en s´ı mismos, ´ el proceso de ensenanza ˜ y no potenciaran y aprendizaje si no son debidamente explotadas. Todos los actores del proceso educativo deben adaptarse, desde una ´ perspectiva intr´ınsecamente sociocultural, a su uso de manera c omoda. ˜ ´ donde la practica ´ En el caso de la ensenanza de la programacion, constante y sostenida es el unico ´ camino para aprender los conceptos fundamentales, este ´ Parafraseando un viejo compromiso y protagonismo debe remarcarse a u ´ n mas. ´ ´ no es un dicho acerca de la matem atica, podemos decir que “la programaci on ´ deporte para espectadores” (en ingl es computer science is not a spectator sport ), lo que viene a decir que para poder aprender es necesario involucrarse y ejercitar, ´ al mismo problema, ampliar la informaci on, ´ buscar varias alternativas de solucion ´ y probar en forma pr actica en las computadoras los programas realizados. En este proceso el docente act ua ´ como gu´ıa, y como consejero, pero el factor de ´ exito esta´ en el estudiante mismo. No dejen de tener esto en cuenta al realizar este curso.
Mapa conceptual ´ El mapa conceptual de esta carpeta se presenta en el gr afico G.1.
Objetivos generales de la asignatura El curso tiene como objetivos: ´ ´ las abstracciones necesaofrecer los elementos basicos de programacion, rias para organizar el estado de los programas constru´ıdos, y las nociones de bases de datos y redes, m´ınimos necesarios para comprender el ´ de software y sus alcances, y poder intervenir y proceso de construcci on ´ en el desarrollo de programas colaborar con un equipo de programaci on ´ vinculados con la tematica de la carrera. Un objetivo secundario del curso es ofrecer experiencia con entornos de tra´ a traves ´ de su utilizacion ´ en la ejercitacion. ´ Sin embargo, no bajo de progamacion es objetivo del curso entrenar a los estudiantes con ningun ´ entorno espec´ıfico, ni realizar un tratamiento exhaustivo del estado del arte en cuanto a herramientas ´ o utilizacion ´ de computadoras se refiere. para programacion
14
G.1. Mapa conceptual de la Carpeta de Trabajo
15
Objetivos espec´ıficos de la asignatura Los objetivos espec´ıficos del curso son que el estudiante logre: ´ y las ideas que llevaConocer la historia de los lenguajes de programacion ´ de los mismos. ron al desarrollo y evolucion ´ de progamas y su interrelacion. ´ Entender los elementos de construcci on ˜ Ser capaz de codificar pequenos programas para solucionar problemas sencillos con los elementos aprendidos. Conocer las nociones de bases de datos y redes de computadoras. ´ sencilla que comprenda persistenSer capaz de construir una aplicaci on ´ y comunicacion ´ a traves ´ de una red (aplicacion ´ clientecia de informacion servidor o web). ´ Adquirir un vocabulario b´asico de terminos relacionados con la programa´ cion.
16
17
´ La disciplina de la programacion ´ En esta primera Unidad comenzaremos a conocer el mundo de la programaci on. ´ y de proAnalizaremos introductoriamente la idea de lenguaje de programaci on ´ grama, y veremos c omo surge la necesidad de contar con este tipo de lenguajes, a partir de analizar brevemente la historia del surgimiento de los mismos. ´ y A partir de estas nociones iniciales acerca de qu e´ trata la programaci on ´ nos prepararemos para aprender las del concepto de lenguaje de programaci on nociones fundamentales que todo programador maneja.
1.1.
´ ¿Que´ es la programacion?
´ es una disciplina que requiere simultanemente ´ La programacion del uso de cier´ to grado de creatividad, un conjunto de conocimientos t ecnicos asociados y la ´ capacidad de operar constantemente con abstracciones (tanto simb olicas como enteramente mentales). La creatividad necesaria para programar no se diferencia demasiado de aque´ algo lla utilizada para producir textos. Sin embargo, lo que hace a la programaci on ´ especial es que requiere emplear un conjunto de conocimientos t ecnicos asocia´ de las computadoras. Esto agrega un grado notable de dos a la manipulacion rigurosidad a esta actividad, ya que no podemos programar sin tener en cuenta ´ de dieste aspecto. Por otra parte, al poseer una naturaleza ligada a la resoluci on ´ ferentes problemas del mundo real, se requiere de una capacidad de abstracci on ´ que permita operar sin que los conocimientos tecnicos limiten al programador a resolver adecuadamente dichos problemas. Para Reflexionar Ejemplos de actividades que requieren: un uso intensivo de la creatividad son las relacionadas con el arte; conocimientos t ´ ecnicos profundos son las relacionadas con la me´ dicina, electronica y qu´ımica; operar continuamente en abstracto son las relacionadas con filo´ ´ sof´ıa, l ogica y matematica. Todas las actividades mencionadas parecen dis´ımiles. ¿Por que´ la pro´ incluye y utiliza intensamente dichas capacidades? gramaci on
18
A lo largo de la vida los seres humanos continuamente enfrentamos todo tipo de problemas. Para ello nos valemos de diversas herramientas, que combinadas de maneras innovadoras ampl´ıan el espectro de soluciones y vuelven factible el desarrollo. Los programadores se dedican principalmente a construir programas. ´ Leer con Atencion ¿Que´ es un programa? Un programa es una descripci ´ on ejecutable de soluciones a problemas computacionales , es decir, un texto descriptivo ´ a un problema que al ser procesado por una computadora da solucion propuesto por los humanos. De esta manera, la parte descriptiva de los programas es el texto que el programador le provee a la computadora. A ´ la llamaremos c ´ esta descripcion odigo fuente de un programa .
´ 1.1.1. Un programa es una descripci ´ Definicion on ejecutable de soluciones a problemas computacionales. Actividad 1 Es sabido que a diario interactuamos constantemente con programas. Razone que´ conceptos posee actualmente sobre los programas ´ ´ que acaba de leer. Adem as ´ piense: y contrastelos con la definicion 1. ¿que´ problemas solucionan los programas que utiliza a diario? 2. ¿que´ diferencias existen con los problemas que no puede resolver por medio de una computadora?
La llamamos dura porque debe respetar de manera estricta ciertas re´ En esto se difeglas de formacion. rencia bastante de la sintaxis de los lenguajes, donde si bien hay reglas, existen numerosas excepciones. E incluso cuando un texto en lengua je natural no respeta totalmente las reglas es comun ´ que igual puede ser comprendido por un lector humano.
´ Si bien cuando escribimos el codigo fuente de un programa utilizamos s´ımbolos como los del lenguaje natural, este texto debe poder ejecutarse. Esa caracter´ıstica hace que los programas se diferencien de otros textos, ya que no cualquier texto es ejecutable por una computadora. Lo que hace a un texto ejecutable es ´ que un conjunto de reglas estrictas de un detersu sintaxis dura , que no es mas ´ minado lenguaje de programaci ´ on , con las que se escribe el codigo fuente. En s´ıntesis, la tarea diaria de un programador es codificar, es decir, escribir ´ a problemas de diversa ´ındole. La tarea consiste en programas, y dar soluci on ´ poder traducir las ideas que los programadores razonan a c odigo ejecutable, que ´ es el que finalmente resolver a´ el problema en cuestion. Programmers have to balance two very different worlds: a world of structure and a world of imagination. They create abstract con- cepts using very structured programming languages (like PHP or Java). It’s not an easy task.
http://lifedev.net/2008/07/programmer-creativity-boost/
´ de problemas en forma de prograUn elemento fundamental en la codificacion ´ la informacion ´ concernienmas es la representaci ´ on simb ´ olica de la informacion: te a un problema es representada mediante un modelo que luego se expresa a ´ de s ´ımbolos ´ son repretraves , que en el caso de los lenguajes de programacion ´ es un proceso sentados por numeros o letras. Toda la actividad de programaci on ´ ´ de codificaci ´ on y decodificaci ´ on de la informacion representada. Esta codifica´ ´ cion/decodificaci´ on puede darse numerosas veces antes de dar con la soluci on
19
buscada; por ejemplo, el movimiento de los dedos en un teclado es codificado en ˜ ´ senales electricas que luego son codificadas como n´umeros, los cuales son decodificados como caracteres que se muestran en una pantalla codificados como ´ ´ graficos, que a su vez son codificados con impulsos el ectricos que se traducen a luces que el cerebro humano interpreta como los mencionados caracteres, que resulta en lo que una persona entiende como escribir en un teclado y ver los ´ caracteres en la pantalla. Rara vez los usuarios de un sistema de c omputo son concientes de la cantidad de codificaciones y decodificaciones que se producen cuando utilizan computadoras. Para que los programadores puedan especificar estas transformaciones existen lenguajes que permiten escribir estos programas.
1.2.
´ ¿Que´ son los lenguajes de programacion?
Cuando programamos, no podemos utilizar el lenguaje natural con que nos comunicamos cotidianamente los seres humanos. Por el contrario, los programadores emplean un lenguaje que la computadora puede interpretar para realizar tareas. En otras palabras, un lenguaje de programaci ´ on . ´ que no es nativa de esta disciUna idea fundamental en la programaci on, plina, pero que es donde se aplica con mayor rigor, es la composicionalidad , o ´ de partes, y tratar sea, la capacidad de entender algo como una composici on cada parte por separado; y si alguna de las partes es demasiado grande, ¡repetimos el procedimiento! Por ejemplo, una ciudad se compone de barrios, los ´ compuestos de manzanas, las cuales estan ´ compuestas de casas, cuales estan ´ que a su vez estan compuestas de ladrillos, y podr´ıamos continuar hasta llegar ´ elementales (¿los quarks?). En las disciplinas tradicionales, a las part´ıculas mas cada parte es estudiada por una especialidad diferente. En nuestro ejemplo, la ˜ una ciudad posee urbanistas, arquitectos, etc. hasta l´ınea de trabajo para disenar ´ f´ıscos subatomicos. . . Cada disciplina, entonces, aborda un nivel y a lo sumo se relaciona con los dos adyacentes en estas jerarqu´ıas conceptuales . En la progra´ en cambio, es la misma disciplina la que aborda el tratamiento de todos macion, los niveles de la jerarqu´ıa, desde los bits hasta los sistemas hechos con cientos ´ fue de miles de componentes complejos. Esta particularidad de la programaci on ˜ ´ Edsger Wybe Dijkstra, que es consenalada por el cient´ıfico de la programacion ´ moderna siderado por muchos como uno de los fundadores de la computaci on ´ estructurada y algoritmos y por por sus trabajos fundacionales en programaci on ´ ˜ ´ En su sus opiniones sobre como debe hacerse y ensenarse la programacion. ´ trabajo “Sobre la crueldad de ense ˜ nar realmente ciencias de la computaci ´ on” , el ´ es una de las novedades radicales de la computacion, ´ lo dice que esta nocion que la hace algo sin precedentes en la historia de la ciencia y la humanidad. Para Ampliar
Se pronuncia “etsjer ´ w ´ıbe daijkstra” . Fue ´ un cient´ıfico holand es que vivio´ entre 1930 y 2002. Pionero en el desarrollo de las ciencias de la compu´ y ganador de tacion numerosos premios por sus notables contribuciones a ´ la programacion.
Realice una b´usqueda en internet acerca de la figura de Edsger Dijkstra, y considere algunas de sus contribuciones y las ideas que manejaba. Comience por leer el art´ıculo “On the cruelty of really tea- ching computing science” y profundizar sobre la idea de novedad radical. . http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/ EWD1036.html
20
Para Ampliar Entre las historias que se cuentan sobre Edsger Dijkstra hay una caracter´ıstica de su personalidad que se reflejo´ en todos sus trabajos. Intente ´ es. descubrir cual ´ notable de esta novedad radical reside en el hecho de que la base de Lo mas ´ es la unica la jerarqu´ıa de programaci on ´ que tiene sustento en el mundo f´ısico. Esta´ constitu´ıda por los circuitos que conforman las computadoras. Sobre esta capa se construyen las abstracciones mentales que permiten imaginarse que el movimiento de energ´ıa en los circuitos representa numeros y cuentas entre ´ ´ ellos, y que al encender diversas luces se conforman im agenes que pueden, a su vez, representar casi cualquier cosa: “ventanas” y “botones” en el caso de ´ las interfases graficas, “dragones” y “armas” en el caso de los juegos, “palabras” y “dibujos” en el caso de las herramientas de oficina como los procesadores ´ de la circulaci´on de energ´ıa pueden hacerse de palabras. Con esta abstracci on cuentas de maneras s´umamente veloces lo cual permite resolver problemas de ´ mayor complejidad, simular inteligencia al realizar deducciones mec anicamente, controlar mecanismos diversos, preparar sistemas que reaccionen a cambios en ´ el entorno, y un sinnumero de etceteras; en s´ıntesis, todas las maravillas mo´ ˜ ´ eran dernas a las que estamos tan acostumbrados y que hace 100 a nos atras ´ apenas una fantas´ıa casi ut opica. Los programadores, entonces, tenemos que aprender a imaginarnos cosas ´ de los programas. inexistentes, dotarlas de estructura y volverlas reales a trav es Y las herramientas que nos permiten llevar esto a cabo son los lenguajes de ´ . programaci on ´ Leer con Atencion ´ es una serie de reglas que establecen Un lenguaje de programacion qu´e descripciones ser´an aceptadas y ejecutadas y cu´ales no tienen ´ provisto por la computadora. sentido para el mecanismo de ejecucion ´ estas reglas estan ´ disenadas ˜ Ademas, de manera composicional, para que sea sencillo construir programas de mayor envergadura.
´ 1.2.1. Un lenguaje de programacion ´ es un conjunto de reglas que Definicion permiten escribir programas para su ejecuci ´ on por cierto mecanismo. ´ de caracter´ısticas suExisten muchos y variados lenguajes de programaci on, mamente diferentes y que emplean diferentes enfoques con los que podemos programar. Cada lenguaje comprende un conjunto de ideas que gu´ıan, como su ´ proposito final, la forma en que codificamos la descripci´on que otorgaremos a la ´ En todo momento el lenguaje de programaci´on permite especificar de Esta forma viene dada por las re- maquina. ´ glas que definen como se combi- manera precisa el trabajo que el programador espera que la computadora realice. nan los elementos que el lenguaje ´ provee al prograde programacion mador.
Para Reflexionar ´ ¿Conoce o escucho´ el nombre de algun ´ lenguaje de programacion? ´ ´ ¿Sabe el lenguaje de programacion con el que se desarrollo algun ´ programa que use a diario? ´ permiten volcar mejor las ideas A su vez, algunos lenguajes de programacion abstractas que el programador intenta emplear. Estos se conocen como lengua jes de alto nivel , ya que intentan, con cierto grado de eficacia, soslayar aquellas