Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Ensato de tecnología programatica, Monografías, Ensayos de Tecnologías de la Información y la Comunicación

Un estudio del camino a recorrer en el arte de la programación

Tipo: Monografías, Ensayos

2019/2020

Subido el 18/04/2020

luis-alvarado-13
luis-alvarado-13 🇲🇽

1 documento

1 / 656

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Ensato de tecnología programatica y más Monografías, Ensayos en PDF de Tecnologías de la Información y la Comunicación solo en Docsity!

Tabla de contenido

Prefacio

Nivel 1: Problemas, Soluciones y Programas

Objetivos Pedagógicos Motivación Problemas y Soluciones Casos de Estudio Comprensión y Especificación del Problema Elementos de un Programa Diseño de la Solución Construcción de la Solución Hojas de Trabajo

Nivel 2: Definición de Situaciones y Manejo de Casos

Objetivos Pedagógicos Motivación El Primer Caso de Estudio Nuevos Elementos De Modelado Expresiones Clases y Objetos Instrucciones Condicionales Responsabilidades de una Clase Eclipse: Nuevas Opciones Hojas de trabajo

Nivel 3: Manejo de Grupos de Atributos

Objetivos Pedagógicos Motivación Caso de Estudio Nº 1: Las Notas de un Curso Contenedoras de Tamaño Fijo Instrucciones Repetitivas Caso de Estudio Nº 2: Reservas en un Vuelo Caso de Estudio Nº 3: Una Tienda de Libros

Hojas de trabajo

Anexos

A. El Lenguaje Java B. Resumen de Comandos de Windows C. Tabla de Códigos UNICODE

Fundamentos de Programación

Prefacio

Aprendizaje activo: La participación activa del lector dentro del proceso de aprendizaje es un elemento fundamental en este tema, puesto que, más que presentar un amplio conjunto de conocimientos, el libro debe ayudar a generar las competencias o habilidades necesarias para utilizarlos de manera efectiva. Una cosa es entender una idea, y otra muy distinta lograr utilizarla para resolver un problema.

Desarrollo incremental de habilidades: Muchas de las competencias necesarias para resolver un problema usando un lenguaje de programación se generan a partir del uso reiterado de una técnica o metodología. No es suficiente con que el lector realice una vez una tarea aplicando los conceptos vistos en el curso, sino que debe ser capaz de utilizarlos de distintas maneras en distintos contextos.

Equilibrio en los ejes temáticos: La solución de un problema usando un lenguaje de programación incluye un conjunto de conocimientos y habilidades de varios dominios. Dichos dominios son los que en la siguiente sección denominamos ejes conceptuales. Este curso intenta mantener un equilibro entre dichos ejes, mostrando así al lector que es en el adecuado uso de las herramientas y técnicas que provee cada uno de los ejes, donde se encuentra la manera correcta de escribir un programa de computador.

Basado en problemas: El libro gira alrededor de 24 problemas completos, cuya solución requiere el uso del conjunto de conceptos y técnicas presentadas en el libro. La mitad de los problemas se utilizan como casos de estudio y la otra mitad, como hojas de trabajo.

Actualidad tecnológica: En este libro se utilizan los elementos tecnológicos actuales, entre los cuales se encuentran el lenguaje de programación Java, el lenguaje de modelado UML, el ambiente de desarrollo de programas Eclipse y las técnicas de la programación orientada por objetos

Prefacio

Los Ejes Conceptuales de la Programación

Para resolver un problema utilizando como herramienta un lenguaje de programación, se necesitan conocimientos y habilidades en siete dominios conceptuales (llamados también ejes temáticos), los cuales se resumen en la siguiente figura:

Modelado y solución de problemas: Es la capacidad de abstraer la información de la realidad relevante para un problema, de expresar dicha realidad en términos de algún lenguaje y proponer una solución en términos de modificaciones de dicha abstracción. Se denomina "análisis" al proceso de crear dicha abstracción a partir de la realidad, y "especificación del problema" al resultado de expresar el problema en términos de dicha abstracción.

Algorítmica: Es la capacidad de utilizar un conjunto de instrucciones para expresar las modificaciones que se deben hacer sobre la abstracción de la realidad, para llegar a un punto en el cual el problema se considere resuelto. Se denomina "diseño de un algoritmo" al proceso de construcción de dicho conjunto de instrucciones.

Tecnología y programación: Son los elementos tecnológicos necesarios (lenguaje de programación, lenguaje de modelado, etc.) para expresar, en un lenguaje comprensible por una máquina, la abstracción de la realidad y el algoritmo que resuelve un problema sobre dicha abstracción. Programar es la habilidad de utilizar dicha tecnología para que una máquina sea capaz de resolver el problema.

Prefacio

En cada uno de dichos niveles, se presentan de manera trasversal los elementos de los siete ejes conceptuales, dando lugar a una estructura como la que se presenta a continuación:

El contenido de cada uno de los niveles se resume de la siguiente manera:

Nivel 1. Problemas, Soluciones y Programas:

Prefacio

Se explica el proceso global de solución de un problema con un programa de computador. Esto incluye las etapas que deben seguirse para resolverlo y los distintos elementos que se deben ir produciendo a medida que se construye la solución. Se analizan problemas simples a través de la especificación de los servicios que el programa debe ofrecer y a través de un modelo conceptual del mundo del problema. Se explica la estructura de un programa de computador y el papel que desempeña cada uno de los elementos que lo componen. Se introduce el lenguaje de programación Java y los elementos necesarios para que el estudiante complete un programa utilizando expresiones simples, asignaciones y llamadas de métodos. Se utiliza un ambiente de desarrollo de programas y un espacio de trabajo predefinido, para completar una solución parcial a un problema.

Nivel 2. Definiendo Situaciones y Manejando Casos:

Se extienden los conceptos de modelado de las características de un objeto, utilizando nuevos tipos simples de datos y la técnica de definir constantes para representar los valores posibles de un atributo. Se utilizan expresiones como medio para identificar una situación posible en el estado de un objeto y para indicar la manera de modificar dicho estado. Se explican las instrucciones condicionales simples y compuestas como parte del cuerpo de un método, de manera que sea posible considerar distintos casos posibles en la solución de un problema. Se presenta de manera informal, una forma para identificar los métodos de una clase, utilizando para esto la técnica de agrupar los métodos por tipo de responsabilidad que tienen: construir, modificar o calcular.

Nivel 3: Manejando Grupos de Atributos:

Se explica la forma de utilizar las estructuras contenedoras de tamaño fijo como elementos de modelado de una característica de un elemento del mundo, que permiten almacenar una secuencia de valores (simples u objetos) y las estructuras contenedoras de tamaño variable como elementos de modelado que permiten manejar atributos cuyo valor es una secuencia de objetos. Se introducen las instrucciones repetitivas en el contexto del manejo de secuencias. Se extienden conceptos sobre el ambiente de desarrollo, en particular, se explica la forma de crear una clase completa en Java utilizando Eclipse. Se expone la forma de utilizar la documentación de un conjunto de clases escritas por otros y la forma de servirse de dicha documentación para poder incorporar y usar adecuadamente dichas clases en un programa que se está construyendo.

Nivel 4: Definición y Cumplimiento de Responsabilidades:

En este nivel se hace énfasis en la asignación de responsabilidades a las clases que representan la solución de un problema, utilizando técnicas simples. Se explica la técnica metodológica de dividir y conquistar para resolver los requerimientos funcionales de un problema y realizar la asignación de responsabilidades. Se estudia el concepto de contratos de los métodos tanto para poderlos definir como para poderlos utilizar en el momento de

Prefacio

Licencias de Uso y Marcas Registradas

A lo largo de este libro hacemos mención a distintas herramientas y productos comerciales, todos los cuales tienen sus marcas registradas. Estos son: Microsoft Windows®, Microsoft Word®, Enterprise Architect®, Java®, Mozilla Firefox®, Eclipse®, JUnit®, Adobe Acrobat Reader®, Mac Apple Inc.®.

Todas las herramientas, programas, entrenadores y demás materiales desarrollados como soporte y complemento del libr, se distribuyen bajo la licencia “Academic Free License v. 2.1” que se rige por lo definido en: http://opensource.org/licenses/

Agradecimientos

Agradecemos a todas las personas, profesores y estudiantes, que han ayudado a que este libro se vuelva una realidad. En particular, queremos agradecer a Katalina Marcos por su valiosa ayuda y apoyo a todo lo largo del proceso.

También queremos reconocer el trabajo de Mario Sánchez y Pablo Bravo, nuestros incansables colaboradores. Ellos nos ayudaron en la construcción de muchos de los ejercicios y ejemplos alrededor de los cuales gira este libro. Gracias por su ayuda y su permanente buen humor. Una mención especial merecen los profesores y estudiantes que durante el último año participaron en las secciones de prueba, usadas para validar el enfoque pedagógico propuesto, y quienes utilizaron como material de trabajo los primeros borradores de este libro. En particular, queremos reconocer el trabajo de Marcela Hernández, quien participó activamente en la revisión del borrador del libro y quien construyó una parte del material de apoyo a profesores que se encuentra disponible en el sitio WEB del proyecto.

Agradecemos la ayuda que recibimos de parte de LIDIE (Laboratorio de Investigación en Informática Educativa de la Universidad de los Andes), en las tareas de seguimiento, validación, diseño de las estrategias pedagógicas y diseño de los iconos y figuras que ilustran este libro.

Sobre los Autores

Jorge A. Villalobos, Ph.D

Obtuvo un doctorado en la Universidad Joseph Fourier (Francia), un Master en Informática en el Instituto Nacional Politécnico de Grenoble (Francia) y el título de Ingeniero en la Universidad de los Andes (Colombia). Actualmente es profesor asociado del Departamento

Prefacio

de Ingeniería de Sistemas de la Universidad de los Andes, en donde coordina el grupo de investigación en Construcción de Software y el proyecto Cupi2. Ha trabajado como investigador visitante en varias universidades europeas (España y Francia) y es el autor de los libros “Diseño y Manejo de Estructuras de Datos en C” (1996) y “Estructuras de Datos: Un Enfoque desde Tipos Abstractos” (1990).

Rubby Casallas, Ph.D

Obtuvo un doctorado en la Universidad Joseph Fourier (Francia), es Especialista en Sistemas de Información en la Organización de la Universidad de los Andes e Ingeniera de Sistemas de la misma Universidad. Ha sido profesora de la Universidad del Valle y del Rochester Institute Of Technology. Actualmente trabaja como profesora asociada del Departamento de Ingeniería de Sistemas de la Universidad de los Andes. Es coautora del libro “Introducción a la Programación” (1987).

Dedicatoria

A Vicky, por la alegría con la que me ha acostumbrado a vivir.

-Jorge

A Irene y Jorge Esteban por el futuro que representan.

-Rubby

Prefacio

1. Objetivos Pedagógicos

Al final de este nivel el lector será capaz de:

Explicar el proceso global de solución de un problema usando un programa de computador. Esto incluye las etapas que debe seguir para resolverlo y los distintos elementos que debe ir produciendo a medida que construye la solución. Analizar un problema simple que se va a resolver usando un programa de computador, construyendo un modelo con los elementos que intervienen en el problema y especificando los servicios que el programa debe ofrecer. Explicar la estructura de un programa de computador y el papel que desempeña cada uno de los elementos que lo componen. Completar una solución parcial a un problema (un programa incompleto escrito en el lenguaje Java), usando expresiones simples, asignaciones e invocaciones a métodos. Esto implica entender los conceptos de parámetro y de creación de objetos. Utilizar un ambiente de desarrollo de programas y un espacio de trabajo predefinido, para completar una solución parcial a un problema.

Objetivos Pedagógicos

2. Motivación

La computación es una disciplina joven comparada con las matemáticas, la física o la ingeniería civil. A pesar de su juventud, nuestra vida moderna depende de los computadores. Desde la nevera de la casa, hasta el automóvil y el teléfono celular, todos requieren de programas de computador para funcionar. Se ha preguntado alguna vez, ¿cuántas líneas de código tienen los programas que permiten volar a un avión? La respuesta es varios millones.

El computador es una herramienta de trabajo, que nos permite aumentar nuestra productividad y tener acceso a grandes volúmenes de información. Es así como, con un computador, podemos escribir documentos, consultar los horarios de cine, bajar música de Internet, jugar o ver películas. Pero aún más importante que el uso personal que le podemos dar a un computador, es el uso que hacen de él otras disciplinas. Sería imposible sin los computadores llegar al nivel de desarrollo en el que nos encontramos en disciplinas como la biología (¿qué sería del estudio del genoma sin el computador?), la medicina, la ingeniería mecánica o la aeronáutica. El computador nos ayuda a almacenar grandes cantidades de información (por ejemplo, los tres mil millones de pares de bases del genoma humano, o los millones de píxeles que conforman una imagen que llega desde un satélite) y a manipularla a altas velocidades, para poder así ejecutar tareas que hasta hace sólo algunos años eran imposibles para nosotros.

El usuario de un programa de computador es aquél que, como parte de su trabajo o de su vida personal, utiliza las aplicaciones desarrolladas por otros para resolver un problema. Todos nosotros somos usuarios de editores de documentos o de navegadores de Internet, y los usamos como herramientas para resolver problemas. Un programador, por su parte, es la persona que es capaz de entender los problemas y necesidades de un usuario y, a partir de dicho conocimiento, es capaz de construir un programa de computador que los resuelva (o los ayude a resolver). Vista de esta manera, la programación se puede considerar fundamentalmente una actividad de servicio para otras disciplinas, cuyo objetivo es ayudar a resolver problemas, construyendo soluciones que utilizan como herramienta un computador.

Cuando el problema es grande (como el sistema de información de una empresa), complejo (como crear una visualización tridimensional de un diseño) o crítico (como controlar un tren), la solución la construyen equipos de ingenieros de software, entrenados especialmente para asumir un reto de esa magnitud. En ese caso aparecen también los arquitectos de software, capaces de proponer una estructura adecuada para conectar los componentes del programa, y un conjunto de expertos en redes, en bases de datos, en el

Motivación

3. Problemas y Soluciones

Sigamos el escenario planteado en la figura 1.1, el cual resume el ciclo de vida de construcción de un programa y nos va a permitir introducir la terminología básica que necesitamos:

Paso 1 : Una persona u organización, denominada el cliente , tiene un problema y necesita la construcción de un programa para resolverlo. Para esto contacta una empresa de desarrollo de software que pone a su disposición un programador. Paso 2 : El programador sigue un conjunto de etapas, denominadas el proceso , para entender el problema del cliente y construir de manera organizada una solución de buena calidad, de la cual formará parte un programa. Paso 3 : El programador instala el programa que resuelve el problema en un computador y deja que el usuario lo utilice para resolver el problema. Fíjese que no es necesario que el cliente y el usuario sean la misma persona. Piense por ejemplo que el cliente puede ser el gerente de producción de una fábrica y, el usuario, un operario de la misma.

Fig. 1.1 Proceso de solución de un problema

Problemas y Soluciones

En la primera sección nos concentramos en la definición del problema, en la segunda en el proceso de construcción de la solución y, en la tercera, en el contenido y estructura de la solución misma.

3.1. Especificación de un Problema

Partimos del hecho de que un programador no puede resolver un problema que no entiende. Por esta razón, la primera etapa en todo proceso de construcción de software consiste en tratar de entender el problema que tiene el cliente, y expresar toda la información que él suministre, de manera tal que cualquier otra persona del equipo de desarrollo pueda entender sin dificultad lo que espera el cliente de la solución. Esta etapa se denomina análisis y la salida de esta etapa la llamamos la especificación del problema.

Para introducir los elementos de la especificación, vamos a hacer el paralelo con otras ingenierías, que comparten problemáticas similares. Considere el caso de un ingeniero civil que se enfrenta al problema de construir una carretera. Lo primero que éste debe hacer es tratar de entender y especificar el problema que le plantean. Para eso debe tratar de identificar al menos tres aspectos del problema: (1) los requerimientos del usuario (entre qué puntos quiere el cliente la carretera, cuántos carriles debe tener, para qué tipo de tráfico debe ser la carretera), (2) el mundo en el que debe resolverse el problema (el tipo de terreno, la cantidad de lluvia, la temperatura), y (3) las restricciones y condiciones que plantea el cliente (el presupuesto máximo, que las pendientes no sobrepasen el 5%). Sería una pérdida de tiempo y de recursos para el ingeniero civil, intentar construir la carretera si no ha entendido y definido claramente los tres puntos antes mencionados. Y más que tiempo y recursos, habrá perdido algo muy importante en una profesión de servicio como es la ingeniería, que es la confianza del cliente.

En general, todos los problemas se pueden dividir en estos tres aspectos. Por una parte, se debe identificar lo que el cliente espera de la solución. Esto se denomina un requerimiento funcional. En el caso de la programación, un requerimiento funcional hace referencia a un servicio que el programa debe proveer al usuario. El segundo aspecto que conforma un problema es el mundo o contexto en el que ocurre el problema. Si alguien va a escribir un programa para una empresa, no le basta con entender la funcionalidad que éste debe tener, sino que debe entender algunas cosas de la estructura y funcionamiento de la empresa. Por ejemplo, si hay un requerimiento funcional de calcular el salario de un empleado, la descripción del problema debe incluir las normas de la empresa para calcular un salario. El tercer aspecto que hay que considerar al definir un problema son los requerimientos no funcionales , que corresponden a las restricciones o condiciones que impone el cliente al programa que se le va a construir. Fíjese que estos últimos se utilizan para limitar las

Problemas y Soluciones