fasciculo 1
DESCRIPTION
sTRANSCRIPT
1
Fascículo No. 1
Semestre 3
Laboratorio de programación III
Laboratorio de
programación III
Presentación general de la asignatura
El objetivo de estos laboratorios es hacer una introducción a las estruc-
turas de datos básicas, que permita almacenar la información de un
problema de una forma adecuada, teniendo en cuenta criterios como
eficiencia y facilidad de evolución.
Se incluyen temas de manejos de estructuras lineales enlazadas (listas),
estructuras recursivas simples (arboles binarios y arboles n-arios) y
archivos de texto, se hace especial énfasis en las herramientas de apoyo a
la construcción de programas correctos, y en algunos elementos de la
programación orientada a objetos que facilitan la reutilización y desaco-
plamiento de los distintos componentes de un programa. Esto nos permite
dar una visión integral de la problemática de representar y manipular la
información de un problema, como parte de un proceso de desarrollo de
software.
La metodología a implementar consiste en Laboratorios prácticos desarro-
llados en Java, para los cuales es necesario un conocimiento básico en el
lenguaje al igual que UML y conceptos de programación orientada a
objetos.
La estrategia pedagógica diseñada gira alrededor de cinco pilares:
Aprendizaje activo: La participación activa dentro del proceso de
aprendizaje es un elemento fundamental en este tema, puesto que, más
que presentar un amplio conjunto de conocimientos, lo que se busca es
ayudar a generar las competencias o habilidades necesarias para
utilizarlos de manera efectiva, el objetivo es lograr utilizar una idea, y
otra muy distinta lograr utilizarla para resolver un tema.
Desarrollo incremental de habilidades: Muchas de las competencias
necesarias para resolver un problema usando un lenguaje de progra-
2
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
mación se generan a partir del uso reiterado de una técnica o una
metodología.
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.
Basado en problemas: Todo el proceso gira alrededor de problemas
completos.
Actualidad tecnológica: se utilizan elementos metodológicos actuales.
Competencias generales de la asignatura
El curso pretende desarrollar las siguientes competencias:
Desarrollar las clases y los métodos necesarios para implementar las
pruebas unitarias automáticas, que ayudan a comprobar el correcto
funcionamiento de un programa.
Entender la importancia de construir programas correctos y la manera
como los invariantes, los contratos de los métodos y las pruebas
unitarias son fundamentales en ese propósito
Implementar, adaptar y utilizar algunos algoritmos clásicos de búsqueda
de información sobre estructuras ordenadas o desordenadas.
3
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Contenido mínimo de la asignatura
Fascículo 1
Problemas, Soluciones y Programas
Especificación de un Problema
El proceso y las herramientas
La solución a un problema
El modelo del mundo del problema
Identificar las Entidades
Modelar las características
Las relaciones entre las entidades
Los Requerimientos no funcionales
Algoritmos e Instrucciones
Laboratorio 1
Caso de estudio empleado:
Hoja de trabajo: un estudiante Fascículo 2
Definiendo Situaciones y Manejando Casos
Comprensión del problema
Definición de la Interfaz del usuario
Nuevos elementos de modelado
Tipos simples de datos
Constatntes para definir el dominio de un atributo
Constatntes para representar valores inmutables
Manejo de asociaciones opcionales
Expresiones
Definiciones
Operadores relacionales
Operadores Lógicos
4
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Operadores sobre cadenas de caracteres
Manejo de variables
Otros operadores de asignación
Clases y Objetos
Diferencia entre clase y objeto
Creación de objetos de una clase
Instrucciones Condicionales
Instrucciones condicionales simples
Condicionales en cascada
Condicionales compuestas
Responsabilidades de una clase
Tipos de Método
Cómoidentificar las responsabilidades?
Laboratorio 2
Caso de estudio: Un simulador bancario
Hoja de Trabajo: Una encuesta Fascículo 3
Manejando Grupos de Atributos
Comprension del modelo del problema
Contenedoras de tamaño fijo
Declaración de un arreglo
Inicialización de un arreglo
Acceso a los elementos de un arreglo
Instrucciones repetitivas
Patrones de algoritmos para instrucciones repetitivas
Contenedoras de tamaño variable
Declaración de un vector
Inicialización y tamaño de un vector
Laboratorio 3
5
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Caso de estudio: Notas de un curso
Hoja de Trabajo: un estudiante Fascículo 4
Definiendo y Asumiendo Responsabilidades
Comprensión de los requerimientos
Comprensión del mundo del problema
Definiendo la arquitectura
Asignación de las responsabilidades
La técnica del experto
La técnica de descomposición de los requerimientos
Manejo de las excepciones
Anunciar que puede producirse una excepción
La instrucción try-catch
La construcción de un objeto excepción
Recuperación de una situación anormal
Contrato de un método
Precondiciones y Postcondiciones
Documentación de los contratos
Laboratorio 4
Caso de estudio: Reservas de vuelo
Hoja de Trabajo: Juego de triqui Fascículo 5
Construyendo la Interfaz Gráfica
Elementos Gráficos Estructurales
Creación de la ventana principal
Distribución gráfica de los elementos
División y paneles
Etiquetas y zonas de texto
Validación y formateo de datos
6
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Selección de Opciones
Elementos de Interacción
Mensajes al usuario y lectura simple de datos
Mensajes en la consola
Mensajes en una ventana
Pedir información al usuario
Arquitectura y distribución de responsabilidades
Porque comienza la ejecución de un programa
Quién crea el modelo del mundo
Laboratorio 5
Caso de estudio: Tienda de libros
Hoja de trabajo: Un parqueadero Fascículo 6
Manejando Estructuras de dos Dimensiones y Persistencia
Contenedoras de dos dimensiones:matrices
Inicialización de una matriz
Acceso a los elementos de una matriz
Comparar los elementos de una matriz
Patrones de algoritmos para recorridos de Matrices
Recorrido parcial
Otros algoritmos de recorridos
Persistencia y manejo del estado inicial
El concepto de archivo
Leer datos como propiedades
Escoger el archivo desde el programa
Laboratorio 6
Caso de estudio: un brazo mecánico
Hoja de trabajo: Un sistema de prestamos
7
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Fascículo 7
Busquedas, Ordenamiento y Pruebas automaticas
Invariantes de clase y noción de corrección del modelo
Asignaciones de responsabilidades e implementación de métodos
Pruebas unitarias automáticas
Algoritmos de ordenamiento en memoria principal
Ordenamiento por selección
Ordenamiento por intercambio
Ordenamiento por inserción
Algoritmos de búsqueda en memoria principal
Búsqueda de un elemento
Búsqueda en estructuras ordenadas
Generación de datos y medición de tiempos
Pruebas unitarias automáticas
Laboratorio 7
Caso de estudio: Un club social
Hoja de trabajo: un sistema de préstamos Fascículo 8
Archivos, Serialización y tipos de excepción
Manipulación básica de archivos
Lectura de archivos
Manipualación de cadenas de caracteres
Reportes y otras salidas en archivos
Importación de datos desde archivos.
Laboratorio 8
Caso de estudio: una central de pacientes
Hoja de trabajo: un manejador de ADN
8
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
9
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Introducción al fascículo 1
En este fascículo se explica el proceso global de solución de un problema
utilizando un programa de computador. Esto incluye las etapas que deben
seguirse para resolverlo y los distintos elementos que se deben ir produ-
ciendo 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 rol que juega
cada uno de los elementos que lo componen. Se trabaja 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. Básicamente este fascículo es un repaso y refuerzo a lo que
ya ha trabajado en semestres anteriores.
Conceptos previos
La computación es una disciplina joven comparada con las matemáticas,
la física o la ingeniería civil. A pesar de nuestra 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. Un programador, es la persona 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 lo ayude a resolver).
10
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Mapa conceptual fascículo 1
Al final de este laboratorio el estudiante estará en capacidad 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 rol que juega 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 el concepto de parámetro y de creación de objetos.
Utilizar un ambiente de desarrollo de programas y un espacio de trabajo prede-finido, para completar una solución parcial a un problema.
LogrosLogrosLogros
11
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Problemas, Soluciones y Programas
El proceso determinado para la solución de un problema, se denomina el
ciclo de vida de construcción de programas, el cual nos permite introducir
la terminología básica que necesitamos.
Paso 1: Una persona u organización tiene un problema que necesita
resolver, para lo cual contacta a una empresa desarrolladora de software
que pone a su disposición un programador.
Paso 2: El programador sigue un conjunto de etapas denominadas
proceso para entender el problema del cliente y construir de forma
organizada la solución denominada programa.
Paso 3: El programador instala el programa que resuelve el problema.
Especificación de un Problema
Un programador no puede resolver un problema que no entiende. Por
consiguiente la primera etapa consiste en tratar de entender en qué consis-
te el problema del cliente y expresar toda la información que obtiene de tal
forma que cualquier otra persona del equipo de desarrollo pueda enten-
derla, esta etapa se denomina análisis y genera como salida la espe-
cificación del problema.
En el análisis de un problema se pueden identificar tres aspectos.
1. Los requerimientos funcionales
2. El mundo del problema
3. Los requerimientos no funcionales (restricciones del cliente)
El proceso y las herramientas
La primera etapa para resolver un problema es analizarlo. Para facilitar este
estudio, se debe descomponer el problema en sus tres partes.
12
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Cuanto más tarde se detecta un error, más costoso es corregirlo.
Una vez el problema se ha entendido y se ha expresado en un lenguaje
que se pueda entender sin ambigüedad, pasamos a la etapa de diseño.
Aquí debemos imaginarnos la solución y definir las partes que la van a
componer. Es muy común definir esta etapa definiendo una estrategia.
Cuando el diseño está terminado, pasamos a construir la solución.
La solución a un problema
Los elementos que forman parte de la solución de un problema son: Diseño del programa: Donde se muestra la estructura de la solución,
sus partes y sus relaciones.
Código fuente: Es el programa escrito en un lenguaje de programa-
ción.
Archivos de construcción: Explican la manera de crear el código
ejecutable a partir del código fuente.
Código ejecutable: Es lo que se instala en el computador del usuario.
El último elemento que forma parte de la solución del problema son las
pruebas, que son los programas que ayudan a mostrar que la solución
es correcta.
El modelo del mundo del problema
En este segundo componente del análisis, el objetivo es entender el
mundo en el que ocurre el problema y recopilar toda la información
necesaria para que el programador pueda escribir el programa. Como
salida de este proceso se debe producir lo que se denomina un modelo
del mundo. Esta actividad se basa en un proceso de observación ya que
el problema como tal ya existe y nuestro objetivo es entenderlo para
describirlo de forma sencilla.
13
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
En programación orientada a objetos, las entidades del mundo se denominan clases.
Identificar las Entidades
Esta actividad busca identificar los elementos del mundo que intervienen
en el problema. Dichos elementos pueden ser concretos (una persona, un
vehículo) o abstractos (una cuenta bancaria). El objetivo de esta etapa es
identificar dichos elementos y asociarles un nombre significativo.
Modelar las características
Una vez identificadas las entidades del mundo del problema, el siguiente
caso es identificar y modelar sus características, a cada característica se le
asocia un nombre significativo y una descripción del conjunto de valores
que puede tomar.
Las relaciones entre las entidades
En esta actividad debemos tratar de identificar las relaciones que existen
entre las distintas entidades del mundo y asignarles un nombre. El diagra-
ma en UML en la cual se incluye la representación de todas las entidades y
sus relaciones se denomina modelo conceptual.
Los Requerimientos no funcionales
Es importante tener en cuenta las restricciones definidas por el cliente, ya
que dependen en gran medida de la ejecución del programa. Los requerí-
mientos no funcionales muchas veces están relacionados con las res-
tricciones sobre la tecnología el volumen de los datos, la cantidad de
usuarios, etc.
Algoritmos e Instrucciones
Los algoritmos son unos de los elementos esenciales en un programa. Un
algoritmo en general, es una secuencia ordenada de pasos para realizar
una actividad. Cuando transcribimos el algoritmo a un lenguaje generamos
un programa, el lenguaje es restringido y limitado pero poderoso dado lo
14
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
que se puede hacer. Todo lenguaje de programación tiene su propio con-
junto de reglas, para decir las cosas, denominado la sintaxis del lenguaje.
Laboratorio 1
Caso de Estudio – Empleado
Aplicación para la administración de la información de un empleado.
Enunciado
Se quiere una aplicación que permita manejar la información de un
empleado. El empleado tiene nombre, apellido, sexo, fecha de nacimiento
y una imagen asociada. Además, como trabaja en una determinada
compañía tiene una fecha de ingreso a la misma y un salario básico
asignado.
En la aplicación se puede (1) modificar el salario del empleado y (2)
realizar algunos cálculos con la información disponible: (a) edad actual, (b)
antigüedad en la empresa y (c) prestaciones a las que tiene derecho. Para
el cálculo de las prestaciones se utiliza la fórmula p = (a * s)/12 (p:
prestaciones, a: antigüedad, s: salario).
Interfaz
15
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Requerimientos
Nombre R1 – ingresar la información del empleado
Resumen Se requiere recibir la información básica de un empleado. Dicha información comprende datos personales y de vinculación a la empresa.
Entradas
Nombre del empleado
Apellido del empleado
Sexo del empleado
Fecha de Nacimiento del empleado
Fecha de ingreso del empleado a la compañía
Salario básico del empleado
Resultados
La información básica del empleado ha sido admitida
Nombre R2 – actualizar el salario básico del empleado
Resumen Permitir la modificación del salario básico de un empleado y actualizar dicha información
Entradas
Nuevo salario básico
Resultados
Nuevo Salario básico del empleado
Nombre R3 – Calcular la edad del empleado
Resumen Calcular e informar los años cumplidos del empleado
Entradas
La fecha de nacimiento del empleado
Resultados
Edad calculada del empleado
Nombre R4 – Calcular de la antigüedad del empleado
Resumen Calcular e informar la cantidad de años que ha trabajado el empleado para la compañía
Entradas
Fecha de ingreso del empleado a la compañía
Resultados
Antigüedad o años que lleva el empleado en la compañía
Nombre R5 – Calcular las prestaciones de un empleado
Resumen A partir del salario básico, deducir el valor de las prestaciones del empleado. La fórmula para hacerlo es Prestaciones = antigüedad * 1/12 (salario básico)
Entradas
Fecha de ingreso del empleado a la compañía
Salario básico del empleado
Resultados
Valor calculado de las prestaciones
16
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Modelo Conceptual
1.1
Desarrolle la aplicación empleado cuya interfaz debe ser igual a la pre-sentada en el laboratorio, garantice que la aplicación cumpla con el mo-delo conceptual (desarrolle las clases apropiadas), garantice también que cumple con los requerimientos definidos.
Hoja de Trabajo – El Estudiante
Analice el siguiente enunciado e identifique el mundo del problema, lo que
se quiere que haga el programa y las restricciones para desarrollarlo.
Enunciado
Se quiere construir una aplicación para el manejo de cursos de un estu-
diante. Los datos personales del estudiante son nombre, apellido y código.
El estudiante toma sólo 5 cursos en el semestre. Cada uno de los cursos
tiene un nombre, un código y un número de créditos. Al finalizar el curso,
al estudiante se le asigna una nota que está entre 1.5 y 5.0.
17
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
El estudiante entra en prueba académica si su promedio es inferior a 3.25.
Dicho promedio se calcula con las notas de las materias que ha concluido,
según los créditos de las mismas: suma de las multiplicaciones de los cré-
ditos de la materia por la nota obtenida, dividida entre el total de créditos.
Por ejemplo: el estudiante ha terminado dos materias Cálculo 1 y Física 1,
la primera de 4 créditos y la segunda de tres. Las notas del estudiante son:
Cálculo 1: 4.5
Física 1: 3.5
Por lo tanto, el promedio del estudiante se calcula con:
(4.5*4+ 3.5*3)/ 7 = 4.07
La aplicación debe permitir registrar al estudiante, registrarle los 5 cursos
al estudiante, decir si un curso está en el pensum del estudiante, asignar
las notas de los cursos del estudiante, calcular el promedio con aquellas
materias que tienen nota e indicar si está en prueba académica.
Interfaz
La interfaz del programa debe es la siguiente
18
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Requerimientos
Especifique los seis requerimientos funcionales descritos en el enunciado
Modelo Conceptual
Estudie el siguiente modelo conceptual
Complete la declaración de las clases de acuerdo al modelo conceptual Public class Estudiante
{
//-----------------------------------------------------
---------- //Atributos
//-----------------------------------------------------
----------
}
Public class Curso
{
//-----------------------------------------------------
---------- //Atributos
//-----------------------------------------------------
----------
}
19
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Escriba el código de los métodos indicados Clase: Curso – Retorna el código del curso Public String darCodigoCurso( )
{
}
Clase: Curso – Indica si el curso ya fue calificado (tiene una nota distinta de cero) Public boolean estaCalificado( )
{
} Clase: Estudiante – retorna el nombre del estudiante Public String darNombre( )
{
}
Clase: Estudiante – indica si el estudiante ya tiene los cinco cursos registrados Public String tieneCursosCompletos( )
{
}
En este fascículo hicimos una introducción a la programación como
solución a un problema planteado por un cliente. Para construir dicho pro-
grama, se presentaron y utilizaron los elementos metodológicos y meto-
dológicos necesarios para enfrentar problemas triviales. Se hizo especial-
mente énfasis en la importancia del análisis del problema y como repre-
sentar un modelo conceptual para ese mundo del problema sin dejar de
lado ningún tema y así lograr llevarlo a un lenguaje de programación.
VILLALOBOS Jorge. “Diseño y Manejo de Estructuras de Datos en C”
Santa Fé de Bogota. Edición McGraw – Hill Interamericana Primera
Edición. 1996. (Texto Guia).
20
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
ROBERT L Kruse. “Estructura de Datos y Diseño de Programas”. Prentice-
Hall, 1988.
TENENBAUM Aaron M.; LANGSAM Yedidyah. “Estructura de Datos en
C”México. Prentice Hall Hispanoamericana Primera Edición. 1993.
En el siguiente laboratorio se reforzaran los conceptos de los tipos simples
de datos y el manejo de estados.
21
Laboratorio de programación III
Laboratorio de
programación III
Fascículo No. 1
Semestre 3
Seguimiento al autoaprendizajeSeguimiento al autoaprendizajeSeguimiento al autoaprendizaje
Laboratorio de Programación III- Fascículo No. 1 Nombre_______________________________________________________
Apellidos ________________________________ Fecha: _________________
Ciudad___________________________________Semestre: _______________
1. En el caso de estudio identifique los tipos de datos que está usando.
2. Cuál es el correspondiente tipo de dato de máquina para los tipos de datos usados en java.
3. Para el caso de estudie enumere ejemplos de datos e información. 4. Para los datos identificados en el punto 1, identifique la entrada, el proceso y la
salida de cada uno de ellos.