TALLER DE INTRODUCCIÓN A LA PROGRAMACIÓN Ezequiel Aranda Sun Campus Ambassador 1 Agenda Parte 1: ¿Qué es una computadora? Parte 2: Java Parte 3: Herramientas para enseñar Java PARTE 1 ¿Qué es una computadora? Todo esto no es tan nuevo... En el siglo VIII, el matemático e ingeniero Muhammad ibn Musa al-Khwarizmi, inventó el algoritmo. 1642 – Blaise Pascal inventa la “Pascalina” (ninguna relación con la “Pastalinda”). Todo esto no es tan nuevo... (II) 1801 – El francés Joseph Marie Jacquard, utilizó un mecanismo de tarjetas perforadas para controlar el dibujo formado por los hilos de las telas confeccionadas por una máquina de tejer. 1822 – Charles Babbage completó su “Artefacto de la diferencia”. 1843 – Lady Ada Augusta Lovelace sugirió la idea de que las tarjetas perforadas se adaptaran de manera que causaran que el motor de Babbage repitiera ciertas operaciones. Todo esto no es tan nuevo... (III) 1854 – El desarrollo del Álgebra de Boole fue publicado por el lógico inglés George Boole. 1919 – El primer circuito multivibrador o biestable (en léxico electrónico flip-flop) fue desarrollado por los inventores americanos W.H. Eccles y F.W. Jordan 1924 - Walther Bothe construyó una puerta lógica AND 1936 – Alan Turing describe la máquina de Turing Todo esto no es tan nuevo... (IV) 2004 – Mark Zuckerberg funda Facebook, y la mayoría de las personas de esta generación descubren el resultado de cientos de años de investigación científica. Entonces, ¿Quien inventó la computadora? En realidad, la computadora no es un invento de una persona en particular. Es el resultado evolutivo de ideas y realizaciones de muchas personas relacionadas con áreas tales como la electrónica, la mecánica, los materiales semiconductores, la lógica, el álgebra y la programación. Volviendo a la pregunta original: ¿Qué es una computadora? Una computadora es una máquina de proposito general que recibe y procesa datos para convertirlos en información útil Esta formada por numerosos componentes que, en combinación pueden ejecutar con exactitud y rapidez una gran variedad de secuencias o rutinas precisamente determinadas. Volviendo a la pregunta original: ¿Qué es una computadora? (II) La computadora, además de la rutina o programa informático, necesita de datos específicos ("Input") que deben ser suministrados, y que son requeridos al momento de la ejecución, para proporcionar el producto final del procesamiento de datos, que recibe el nombre de "output". Volviendo a la pregunta original: ¿Qué es una computadora? (III) La información puede ser entonces utilizada, reinterpretada, copiada, transferida, o retransmitida a otra(s) persona(s), computadora(s) o componente(s) electrónico(s) local o remotamente usando diferentes sistemas de telecomunicación, pudiendo ser grabada, salvada o almacenada en algún tipo de dispositivo o unidad de almacenamiento. Entoces, ¿Cómo funciona? Arquitectura de von Neumann. Unidad aritmético lógica (ALU) Unidad de control Memoria central Dispositivos de entrada y salida (E/S) Entendido. Ahora a darle ordenes: Mmmm... FAIL. Pensándolo bien: ¿Cómo hago para decirle a cada componente que hacer y que la combinación de esas ordenes de lugar a la función que yo quiero realizar? ¿En que idioma habla una computadora? Habla en lenguaje de máquina. Son secuencias de unos y ceros que representan instrucciones. Y cada máquina programable tiene su propio lenguaje de máquina (aunque suelen ser similares). ¿O sea que un programador escribe secuencias de unos y ceros durante 8 horas diarias? Aunque eso haría más sencillo responder a muchas incógnitas sobre los programadores, no. Existen lo que se conocen como “lenguajes de programación”, que básicamente son instrucciones de alto nivel que luego son traducidas a código de máquina. Lenguaje de programación Existen dos tipos de lenguaje de programación: de bajo nivel. de alto nivel. El “nivel” hace referencia al nivel de abstracción respecto del lenguaje de máquina. Lenguaje de alto nivel Los lenguajes de programación de alto nivel se caracterizan por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas. Ada Basic C++ COBOL Fortran Java Python Perl Pascal PHP PL/SQL Genial, ya tengo la definición de lenguaje. Pero aún no tengo ni idea de como escribir un programa Los lenguajes de programación, cuentan todos en su haber con un juego de "instrucciones". Un programa es una secuencia de instrucciones pensada para resolver un problema. Si no sabemos resolver el problema, no podremos escribir el programa. A uno se le puede ocurrir una manera de resolverlo. A otra persona, otra. Este “método” con el que resolvemos el problema, es lo que se llama “algoritmo”. Algoritmo Un algoritmo no es más que una secuencia de pasos que, seguidos uno a uno, me permiten resolver un problema. Por ejemplo, para ver una película: 1. Elijo una película de las de mi colección. 2. Compruebo SI TV y vídeo están conectadas a la red (y procedo). 3. SI la TV está apagada, la enciendo, SI NO, pues no. Y lo mismo con la vídeo. 4. Abro el estuche de la película. 5. Saco la película de su estuche. Algoritmo (II) 6. Introduzco la película en la vídeo. Dejo el estuche sobre la vídeo. 7. SI la TV no está en el canal adecuado, la cambio, SI NO, pues no. 8. Tomo los controles remotos (el del TV y el de la vídeo). 9. Me pongo cómodo. 10. Pulso PLAY en el control de la vídeo. Dos detalles importantes: 1. La descripción de cada paso no me lleva a ambigüedades: los pasos son absolutamente explícitos y no inducen a error. 2. El número de pasos es finito. Ejercicio 1 Intentar escribir una sucesión de pasos para alguna tarea cotidiana. Elementos básicos para describir algoritmos Marcadores de principio fin. Variables: espacios de memoria donde almacenar valores que pueden variar (de ahí su nombre) durante la ejecución del programa. Tienen un tipo y un valor. Asignaciones: I <- 3 Estructuras de control de flujo. Estructuras de control de flujo Su objetivo es ir señalando el orden en que tienen que sucederse los pasos de un algoritmo. Pueden ser 1. Secuenciales 2. Selectivas 3. Repetitivas Secuencias Una estructura de control secuencial, en realidad, no es más que escribir un paso del algoritmo detrás de otro, el que primero se haya escrito será el que primero se ejecute. inicio mostrar por pantalla 'dame el radio del circulo' leer del teclado la variable radio area <- 3.14159*radio mostrar por pantalla 'el area del circulo es:' mostrar por pantalla el contenido de la variable area fin Selección Son los conocidos "si... entonces". Se usan de la siguiente manera: yo quiero evaluar una condición, y si se cumple, entonces realizaré una serie de pasos. inicio mostrar por pantalla 'introduce un numero' leer del teclado la variable numero SI numero >= 0 ENTONCES: raiz <- raiz_cuadrada(numero) mostrar por pantalla 'la raiz cuadrada es:' mostrar por pantalla raiz fin del SI fin Bucles, estructuras repetitivas En este tipo de estructura, el cuerpo del buclese repite MIENTRAS se cumple una determinada condición, que especificamos entre paréntesis. Su estructura, genéricamente, es esta: mientras(condición) hacer acción 1 ........ acción N fin mientras Bucles, estructuras repetitivas (II) Una forma diferente de escribir una estructura “mientras”, que es más conveniente y resumida en ciertas ocasiones es el “for” o “desde”. inicio desde Contador<-300.000.000 hasta Contador=1 , decrementar, hacer mostrar por pantalla 'Prometo ser bueno O:-)' fin desde fin Ejercicio 2 Realizar un algoritmo para calcular la suma de los números del 1 al 10. Genial, ya tengo mi primer programa, ¿Y ahora? Una vez que tenemos un programa escrito en pseudocódigo (nombre que recibe esa forma en la que veníamos escribiendo los algoritmos en las slides anteriores), el primer paso es traducirlo a algún lenguaje de programación (más adelante podremos saltarnos este paso). Por suerte, esta traducción es, en general, bastante directa. Genial, ya tengo mi primer programa, ¿Y ahora? (II) A continuación tendremos que convertir el programa que acabamos de escribir en algo que pueda comprender la máquina. Este proceso se conoce con el nombre de compilación, y es automático ¿Eso es todo amigos? En general, si. Salvando un pequeño detalle: El ejecutable generado solo funcionará en la plataforma (combinación de hardware y sistema operativo) para la que fue compilado. ¿Y qué es eso del sistema operativo? Para facilitar aún más la comunicación entre el humano y la máquina, existen los sistemas operativos. Un sistema operativo es una pieza de software que simplifica el manejo de la computadora, desempeñando una serie de funciones básicas esenciales para la gestión del equipo. Windows, Linux, Symbian, Solaris, Mac OS, FreeBSD y Android, son algunos ejemplos de sistemas operativos. ¿Y Por qué no puedo hacer un programa que funcione en todas las plataformas? En el caso del hardware, la respuesta es sencilla y ya la vimos antes: las distintas máquinas no necesariamente hablan el mismo idioma. En el caso del sistema operativo, sucede que, dado que el sistema operativo realiza las operaciones de acceso al hardware, nuestro programa no necesitará rescribirlas, sino reutilizarlas (linkearlas). Pero cada sistema operativo realiza estas tareas en forma diferente. Parte 2: Java ¿Qué es Java? Java es un lenguaje de programación orientado a objetos desarrollado a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel. Es independiente de la plataforma. Las primeras implementaciones de Java rezaban:“write once, run anywhere”. Posee un sistema de administración de memoria automático. Un poco de historia Java se creó originalmente como una herramienta de programación para un proyecto set-top-box conocido como *7. Fue realizado por un equipo de 13 personas, dirigidas por James Gosling. Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Un poco de historia (II) En un principio, el sistema *7 no encontró un lugar en el mercado. A principios de los noventa, y sin un mercado para su herramienta, Gosling y su equipo se reunieron y notaron que “la nueva y popular Internet” tenia exactamente el tipo de configuración de red que ellos habían visionado para la industria de la TV por cable. Con esto en mente Gosling y su equipo crearon el navegador WebRunner y realizaron un demo que mostraba una molécula animada en una reunión de profesionales de la industria del entretenimiento e Internet. Todos sabemos como termina esta historia…. ¿Porqué Java? El lenguaje se denominó inicialmente “Oak”. Luego pasó a denominarse “Green” tras descubrir que Oak era ya una marca comercial registrada. El término “JAVA” fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo. No está claro si es un acrónimo o no, algunas hipotesis indican que podría tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otras abogan por “Just Another Vague Acronym”. La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café disponible en la cafetería. .java, .class, JVM??? En Java el código fuente se escribe en un archivo de texto plano con extensión .java. Luego, el código es compilado a archivos .class. Un archivo .class no contiene código nativo a un tipo de procesador, en cambio contiene bytecodes. Finalmente, la aplicación es interpretada por la maquina virtual de Java, transformando los bytecodes en código nativo en tiempo de ejecución. Bytecode El bytecode es lenguaje nativo de cualquier implementación de la maquina virtual de Java. De esta forma se logra que un programa Java corra en cualquier plataforma que disponga de una JVM. La plataforma Java Una plataforma es el ambiente de software o hardware en el que corre un programa. La plataforma Java consta de dos componentes La maquina virtual de Java La API de Java (Application Programming Interface) La API de Java es una vasta colección de componentes de software que proveen un conjunto de funciones útiles. Java en detalle Inicialización de Variables El lenguaje Java es fuertemente tipado, lo que significa que todas las variables deben ser declaradas antes de utilizarse. int unaVariable = 1; Java en detalle Tipos Primitivos Java en detalle Tipos Primitivos (II) La clase String Java provee soporte especial para las cadenas de caracteres a través de la clase java.lang.String No es un tipo primitivo. Sin embargo, mediante sobrecarga de operadores pueden realizarse operaciones como: String unString = “Juan” + “ ” + “Perez”; Java también provee un amplio conjunto de operaciones para manipular las instancias de esta clase. Operadores: precedencia y funcionalidad Operadores: precedencia y funcionalidad (II) Ejemplo con operadores arimeticos int i=2+3; // i vale 5 i=i+1; //i vale 6 i=6*2; //i vale 12 i=2+5*2%8; //i vale4 Ejemplo con operadores posfix y unarios int i=5; // i vale 5 System.out.println(i); //Imprime:5 System.out.println(++i); //Imprime:6 System.out.println(i++); //Imprime:6 System.out.println(i); //Imprime:7 Sentencias de control: if if(expr){ .... } if(expr) sentencia; if(expr){ .... } else { .... } Sentencias de control: switch Switch (num){ case num1:...break; case num2:...break; default:...break; } Sentencias de control: while y do-while while (expr){ .... } do { .... }while(expr); Sentencias de control: for for (exprInic; condCorte; pasoSig){ .... } for (int i=0; i<10; i++) { System.out.println(i); }//Imprime los numeros del 0 al 9 Estructura de un programa Java La programación orientada a objetos se basa en que cada programa es una simulación de un mundo real o virtual. Cada uno de estos mundos esta compuesto de objetos. Los objetos se comunican a través de mensajes Por lo tanto, un programa orientado a objetos no es mas que una configuración de un conjunto de objetos y los mensajes que se envían entre ellos. El “molde” que guarda la descripción de todos los objetos de un mismo tipo e lo que conocemos como clase. A su vez, las clases con propósitos similares pueden agruparse en paquetes. La ejecución de un programa comienza en el método “main” de una clase. Ejemplo de paquete Reglas para la creación de clases y paquetes Las clases Java se implementan en archivos separados. Cada clase se debe encontrar dentro de un paquete. El nombre del archivo de la implementación de clase debe ser igual al nombre de la clase. La estructura de paquete debe corresponderse a la estructura de directorio. Ej: edu.sun.Ejemplo seria mapeado al archivo .../edu/sun/Ejemplo.java Estructura de una clase Ejemplos de paquetes Java java.io El paquete de entrada/salida contiene las clases de acceso a archivos: FileInputStream y FileOutputStream, etc. java.lang Incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System, Integer, Float, Math, String, etc. java.util Miscelánea de clases útiles para muchas cosas en programación. Incluyen, Date (fecha), Dictionary (diccionario), Random (números aleatorios) y Stack (pila FIFO). ¿Y qué necesito para programar en Java? • El kit de desarrollo Java – obligatorio • Un ambiente de desarrollo - recomendado Java Development Kit (JDK) El JDK consiste de: El Java development tools, incluyendo el compilador, debugger y el intérprete Java. Las Java class libraries organizadas como una colección de paquetes. Un número importante de programas de demostración. Varias herramientas de soporte y componentes, incluyendo el código fuente de las clases en la biblioteca. URL: java.sun.com/javase/downloads Ambientes de desarrollo Java (IDEs) Un IDE (del inglés Integrated Development Enviroment) es un ambiente que integra un conjunto de herramientas (editor con prestaciones especiales, compilador, administración de proyectos, debugger,etc) que permiten realizar todo el proceso de desarrollo dentro del mismo. Si bien es posible escribir nuestros programas java en cualquier editor de texto y compilarlos desde una consola con javac, es mas cómodo y recomendable trabajar desde un IDE. ¿Y qué tiene un IDE que no tenga mi bloc de notas? En general, todos los editores de los IDEs mas modernos proveen: Un editor language aware: indentación de código, resaltador de sintáxis, matching de variables y llaves, etc. Parsing en tiempo de ejecución: corrección de errores, remarcado de ocurrencias, tips, arreglos sencillos, etc. Generación automática de código y funciones para completar código mientras escribimos. Administración de proyectos Debugger Múltiples opciones de configuración Algunos de los IDEs mas utilizados El IDE NetBeans es un ambiente de desarrollo de código abierto creado a partir de la plataforma homónima Originalmente desarrollado por Sun Microsystems, actualmente mantenido por la comunidad NetBeans (aunque aun recibe soporte de Sun como producto). Es multiplataforma Licencias CDDL y GPL 2. Todas las funciones en NetBeans son provistas por módulos. Proceso de instalación de NetBeans Bajar e instalar la última versión del JDK (requerido). Ingresar a http://download.netbeans.org y bajar la versión correspondiente a nuestro sistema operativo. Ejecutar el instalador (.sh, .exe, o .dmg dependiendo). Seguir el proceso de instalación y ejecutar la aplicación netbeans al finalizar el mismo. Ejemplo de aplicación en NetBeans Ejercicio 3 Repetir el ejercicio 2, esta vez en Java. Parte 3: herrmientas para enseñar Java GreenFoot GreenFoot es un editor especialmente diseñado para programadores novatos. Si bien soporta el lenguaje Java en su totalidad, es especialmente útil para programar ejercicios que tengan contenido visual. En GreenFoot la interacción y visualización de objetos son los componentes claves. Está dirigido a programadores de nivel secundario (13 años en adelante). Demo Greenfoot •www.greenfoot.org Alice Alice es un ambiente de programación que facilita la creación de animaciones para “contar historias”. Esta diseñado para ser el primer contacto de los estudiantes con la programación orientada a objetos. Permite a los estudiantes aprender programación mientras crean películas animadas y vídeo juegos sencillos. Demo Alice •www.alice.org BlueJ El ambiente de desarrollo BlueJ fue desarrollado como parte de un proyecto de investigación académico para enseñar programación orientada a objetos a principiantes. El objetivo de BlueJ es proveer un ambiente sencillo de utilizar para la enseñanza del lenguaje Java a estudiantes. Se ha puesto especial enfasis en las tecnicas de visualizacion e interacción para crear un ambiente interactivo que fomente la experimentación y exploración. Demo BlueJ •www.bluej.org Aprender Java en la web Sun's Java Tutorials http://java.sun.com/docs/books/tutorial/ Learning Connection http://learningconnection.sun.com Java Passion http://www.javapassion.com/ Un OSUM es un grupo de personas que comparten su interés por las tecnologías libres. Ya existe al menos un OSUM por cada universidad en donde hay un Campus Ambassador, y nuevos grupos se están formando día a día. Dentro de la red de OSUMs encontrarás respuestas a tus interrogantes técnicas y filosóficas sobre tecnologías libres, participarás de reuniones y proyectos, etc. Unirte es muy sencillo, http://osum.sun.com SAI - Iniciativa Academica de Sun Entrenamiento GRATIS vía web de JavaTM, SolarisTM y más. Página de la iniciativa: http://ar.sun.com/training/sai/index.jsp Cursos en: http://sailearningconnection.skillport.com/ Program name: SAI-Argentina Program ID: tbwg1fq8 SAI - Iniciativa Academica de Sun (II) Incrementá tu potencial de obtener salarios mayores con certificaciones Sun Sun Certified Associate/Programmer for the Java 2 Platform SE Sun Certified Web Component Developer for Java EE Sun Certified Mobile Application Developer for Java ME Sun Certified System/Network Admin for Solaris Operating System Exámenes de entrenamiento gratis Exámenes oficiales rebajados un 60% ¿Preguntas? MUCHAS GRACIAS! Ezequiel Aranda Ezequiel.Aranda@sun.com blogs.sun.com/argentina_ambassador twitter.com/ambassadorsarg twitter.com/fleko 80