Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca CAPÍTULO 1: INTRODUCCIÓN A LA PROGRAMACIÓN Estimado(a) estudiante, iniciamos el estudio de la asignatura abordando temas fundamentales que se requiere conocer dentro del maravilloso mundo de la programación; teniendo claro que la actividad de crear programas es un ejercicio mental que se debe cultivar a través de la práctica. Apoyado, en etapas iniciales, de estrategias adicionales como: diagramas de flujo y pseudocódigo. Muchas personas consideran que la programación es un arte, en donde muchos son los llamados, pero pocos los elegidos. En nuestra experiencia personal, podemos afirmar que no es un arte, sino una técnica que todos podemos aprender, pero que exige de nosotros dedicación y sobre todo constancia. La estrategia que tomaremos para aprender a programar es resolver muchos problemas a través de la implementación de programas en pseudocódigo, pero, con el afán de que no se convierta en una actividad “aburrida”, asociaremos lo aprendido (en pseudocódigo) con la construcción de nuestros primeros programa usando Java y NetBeans. Esta estrategia les permitirá a ustedes, no solamente aprender un lenguaje de programación, sino que también contarán con un mecanismo de comprobación del correcto funcionamiento de sus programas escritos en pseudocódigo; porque un lenguaje de programación no dejará pasar algún error que podemos haber cometido y que en papel es difícil de encontrar. Comencemos revisando los conceptos básicos de programación porque las dificultades que suelen presentarse en temas más avanzados surgen por la falta de comprensión de los principios básicos de la materia. 1.1 Conceptos básicos de programación Iniciamos el desarrollo de la materia y es necesario, como en toda actividad del conocimiento, fundamentar nuestras acciones analizando una serie de conceptos básicos, en este caso particular, de Programación. Estos conceptos se desarrollan en el Capítulo 1 del texto básico. Los invitamos a analizar los conceptos generales que menciona el texto básico en las páginas 20 a la 24. Es necesario poner énfasis en la Figura 1.1 “Diagrama que describe la organización funcional de una computadora”, en donde se describe la organización funcional de un computador, ya que ella les ayudará a entender como funcionan los diferentes programas que se ejecutan en un computador. Los demás conceptos son Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca ya conocidos y de uso cotidiano. Desde la página 24 hasta el final del capítulo se analizan los conceptos más importantes para la materia y posiblemente para la carrera. Los conceptos son: Programa, lenguaje de programación y sus características (que nos ayudan a comprender los diferentes tipos de error que se presentan cuando se programa), programación y características de un buen programa (ponga especial énfasis en este listado ya que eso buscamos – elaborar buenos programas), el proceso de programación y el algoritmo. No es necesario que memorice los conceptos, es necesario que los entienda y los pueda explicar con sus propias palabras y términos. Es necesario llamar su atención y profundizar en la explicación de un par de conceptos, empezando por el apartado 2 “Análisis del problema” del proceso de programación (página 27 del texto básico). En la materia de Lógica de la programación se explica como a través de la identificación de 3 elementos se puede resolver un problema: entrada (materia prima), proceso y salida (información); aunque posiblemente el orden de ejecución que muestra el texto básico es diferente, son los mismos conceptos que usted ya domina, y que también los aplicará en esta materia. Observe como construir un programa va más allá del hecho de escribirlo, se incluyen acciones previas y posteriores al proceso de escribir un programa (paso 4 de la lista que se muestra en el texto básico). En esta materia se ejecutaran los pasos 1, 2, 3 y 4 dejando de lado los últimos ya que ellos implican otras acciones que se encuentran fuera del alcance de la materia. Otro de los conceptos que detallaremos un poco más es el de algoritmo (página 29 del texto básico) y sobre todo en su diferencia con el concepto de programa (página 24 básico) ya que en principio generan cierta confusión por su similitud; pero la clave para poder diferenciarlos es su “proximidad” al computador. Un programa está mucho más pegado a un computador ya que es un conjunto de instrucciones que un computador puede ejecutar; mientras que las instrucciones de un algoritmo no pueden ser ejecutadas por un computador. Generalmente se usan algoritmos como paso previo a la creación de un programa, inclusive existen algoritmos no computacionales. Avancemos y ahora centremos nuestra atención en las páginas 30 y 31 del texto básico, existen 2 ejercicios que debe analizarlos, aunque les puedan parecer triviales, ellos nos muestran como elaborar un algoritmo y nos proporcionan nociones básicas de una estructura de control que poseen los lenguajes de programación, los ciclos repetitivos (Revisar la nota de la página 33 en el texto básico). Recuerden que dentro de la materia vamos a resolver problemas Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca computacionales, por lo tanto vamos a continuar nuestro estudio analizando los elementos que permiten resolver un problema y expresar la solución en pseudocódigo. 1.2 Elementos para solucionar problemas en pseudocódigo Acuda nuevamente al texto básico y realice una lectura comprensiva del Capítulo 2 “Elementos para solucionar problemas en pseudocódigo”, a partir de la página 35 hasta la 47. Revise detalladamente las explicaciones que ahí se hacen. ¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos ciertos elementos de la lectura anterior. Los elementos que nos permitirán diseñar algoritmos son: las estructuras de datos, los datos numéricos enteros y reales, datos carácter, cadena de caracteres; las operaciones primitivas elementales: declaraciones de variables, constantes y tipos, lectura de datos (entrada), escritura de datos (salida); operaciones aritméticas fundamentales (sumar, restar, multiplicar y dividir) y las estructuras de control. En el texto básico se explica, muy bien, el uso a través de pseudocódigo, mientras que aquí, en la guía, lo haremos con código Java. Es necesario recordarles que es importante que primero se entienda el pseudocódigo, por lo que les invitamos a leer por completo el capítulo 2 del texto básico y luego se pase a esta sección de la guía para encontrar algunas explicaciones adicionales y sobre todo la relación con Java. Analicemos el primer elemento, las estructuras de datos y veamos su equivalente en el lenguaje de programación Java. 1.2.1 Estructura de datos Recurra una ocasión más al texto básico y revise el apartado en la página 36. Ahí se exponen la fundamentación teórica relacionada con el pseudocódigo, mientras que aquí vamos a desarrollar los conceptos relacionados con Java. La siguiente imagen sintetiza los tipos de datos que posee Java. Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 1 Tipos de datos en Java Los últimos rectángulos (empezando desde abajo hacia arriba) muestran los nombres de los tipos de datos en Java, mientras que los intermedios muestran los nombres que usa el texto básico. Si observamos los tipos de datos enteros, vemos que existen una gran cantidad de tipos de datos, la diferencia está en la cantidad de bytes que cada tipo de dato usa para su representación interna, lo que implica que cada uno de ellos trabaje con un segmento de los números enteros así por ejemplo, el tipo byte comprende desde el -128 hasta el 127. El tipo de dato byte es el más pequeño y el long es el más grande. Igual sucede con los tipos de datos reales, la única diferencia son los bytes que utilizan cada uno de ellos. Una observación final, vemos como dentro de los tipos de datos enteros se incluye el tipo de dato carácter, pero en el texto básico ese tipo de dato puede ser una letra, un número o un símbolo especial ¿por qué la diferencia? Dentro de Java un tipo carácter (char) se representa como un número entero, luego veremos algunos ejemplos prácticos que nos ayudarán a despejar esta y cualquier duda. Generalmente en Java, cuando se trabaja con números enteros se usa el tipo int, mientras que para números reales se usa double, para empezar esta bien y por ahora, no nos preocuparemos demasiado en la selección del mejor tipo de dato. Es decir que cuando estemos “traduciendo” un programa en pseudocódigo a lenguaje Java el tipo de dato entero corresponderá a int y el tipo de dato real corresponderá a double. Es necesario que revise con detalle los apartados 2.1.2 “Variables” y 2.1.3 “Constantes” del texto básico en especial el tema de las variables ya que son elementos esenciales en la construcción de programas (en pseudocódigo o cualquier lenguaje de programación). Una vez hecha la lectura trate de responder en sus propias palabra a la pregunta ¿cuál es la principal diferencia entre una variable y una constante? La siguiente ilustración muestra como se hacen las declaraciones en Java, Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca primer punto del tema 2.2 “Operaciones primitivas elementales”, página 39 del texto básico. Ilustración 2 Declaraciones en Java En la imagen anterior se muestra un programa escrito en Java. El programa tiene otros elementos a los que se menciona en el texto básico, pero es importante mostrarlos para conocer la ubicación de las declaraciones de las constantes (línea 16), tipos (líneas 18-20), objetos (línea 24) y variables (líneas 26 y 27). También podemos observar como existen líneas de código que empiezan con // (líneas 15, 17, 23 y 25) a estas líneas se las denomina comentarios y su propósito es documentar un programa. Existen otros tipos de comentarios que los iremos estudiando más adelante. Podemos observar también como existen diferencias entre el pseudocódigo y el código Java. Así tenemos que para la declaración de variables primero se ubica el tipo de dato, luego el nombre o identificador de la variable. De la misma manera existe una marcada diferencia entre la declaración en pseudocódigo para las constantes y tipos (que en Java se denominan enumeraciones). Mientras que la declaración de objetos, en pseudocódigo y Java son iguales. Entre Java y el pseudocódigo no solamente existen diferencias, ya que si analizamos las reglas para asignar nombres a las variables, página 37 del texto básico, las 4 reglas se aplican de igual manera a los nombres de las variables en Java, aunque para la regla número 4, el conjunto de palabras reservadas en Java es mucho más amplia. Una palabra reservada (generalmente en Inglés) tiene un significado especial para el lenguaje de programación y que el programador no puede usar en Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca ninguna de las declaraciones que haga. Otros elementos fundamentales para elaborar programas son el ingreso y la escritura o salida de datos. Para explicar como se hace el ingreso y salida de datos en Java, usaremos un programa que pide al usuario que ingrese su nombre, edad y estatura, presentando como salida los mismos datos. En la Ilustración 3 puede observar un programa sencillo que muestra como trabajar con la entrada y salida de datos. Ilustración 3 Entrada y escritura (salida) de datos en Java Si revisan los programas Java que se encuentran en el CD del texto básico, encontrarán que para las tareas de lectura y salida de datos se usan otros mecanismos. Les recomendamos usar los mecanismos expuestos en este documento, ya que son sencillos, fáciles de aprender y recordar; y son mucho más actuales que los usados en el texto básico. Analizando la imagen anterior, podemos ver que: para realizar el ingreso de datos, necesitamos declarar un objeto del tipo Scanner, línea 22; luego y tal como se muestra en la página 43 del texto básico, debemos solicitar el ingreso de los datos (líneas 25, 29 y 32) a través de mensajes impresos en pantalla. Una buena práctica de programación es solicitar el ingreso de los valores para las variables de una en una y no en un solo mensaje, como muchas veces se hace en el texto básico. Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca La lectura de datos se podría decir que es asignar el valor que ingresa el usuario a una variable; y en Java se lo hace como se muestra en las líneas 27, 30 y 33. Vemos también que para cada tipo de dato existe una forma diferente de leerlo, así que next() lee cadenas de caracteres (String en Java); nextInt() lee valores enteros (int en Java) y nextDouble() lee valores reales (double en Java). Es importante señalar que para hacer uso de la clase Scanner es necesario indicarle al compilador de Java en donde se encuentra dicha clase. Esto se logra con el código que se encuentra en la línea 15, por ahora no entraremos en detalles. Para la escritura de datos o también denominada salida, en Java se usa el método printf, si analizamos las líneas 36 y 37 vemos como se realiza la escritura. Podemos decir que el método printf tiene 2 partes. La primera, todo lo encerrado entre comillas dobles, es el texto a mostrar. La segunda parte que es una lista de variables separadas por comas. Veamos una imagen de la ejecución del programa. Ilustración 4 Ejecución del programa que muestra la Ilustración 2 En la sentencia System.out.printf que se muestra en la línea 36 de la Ilustración 3 Entrada y escritura (salida) de datos en Java, lo encerrado entre comillas dobles, podemos ver que existen elementos como: %s, %d y %f, dichos elementos señalan las posiciones que ocuparan los valores de las variables. Pero ¿por qué %s, %d y %f? Porqué son variables de diferente tipo de dato, entonces %s se usa para mostrar variables tipo String (cadena de caracteres), %d para mostrar variables tipo int (entero) y %f para mostrar variables tipo double (real). También podemos ver un elemento \n, este se conoce como secuencia de escape y cuando se ejecute el programa, será reemplazado por un salto de línea. Existen otras secuencias de escape, una de las más usadas es \t, que será reemplazado por un tabulador hacia la derecha. La segunda parte muestra las variables cuyos valores reemplazarán los elementos %s, %d y %f. Es importante ubicar las variables en el mismo orden en el que se dispusieron el o los elementos que empiezan por %, sino es así podemos encontrarnos con resultados inesperados o con errores, especialmente porque cada elemento que inicia con % representa un tipo de dato diferente, como se mencionó anteriormente. No existe ninguna relación en el orden de lectura de los datos y el orden que Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca ocupan en la escritura o salida. El orden depende exclusivamente de las necesidades del programa. Hasta aquí hemos cubierto el primer capítulo de nuestra materia y lo hicimos analizando conceptos generales de computación, para luego analizar conceptos básicos de programación y relacionarlos con el lenguaje de programación Java. Finalmente los invitamos a revisar los Anexos A – Cómo Instalar Java y NetBeans; y Anexo B - Cómo crear nuestro primer programa en NetBeans. Para ampliar el tema expuesto, le proponemos que lea detenidamente el siguiente material. Material adicional: En el CD que se adjuntó en la guía didáctica (programación-en-javai\Contenidos\LecturaObligatoria\), revisar el archivo: 1-Introducción.pdf – Hasta el punto 1.1 Una vez estudiado el capítulo es necesario comprobar que ha asimilado lo explicado hasta ahora, por lo que proponemos que realice la siguiente autoevaluación. Recuerde que las respuestas a todas las autoevaluaciones las puede encontrar en las secciones finales de la guía didáctica. Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).