386
Fundamentos de Programación APRENDIZAJE ACTIVO BASADO EN CASOS Jorge A. Villalobos S. Rubby Casallas G.

Fundamentos de Programacion

Embed Size (px)

DESCRIPTION

programación, fundamentos, algoritmos

Citation preview

  • Fundamentos de ProgramacinAPRENDIZAJE ACTIVO BASADO EN CASOS

    Jorge A. Villalobos S.

    Rubby Casallas G.

    Villalobos Casallas

    Fun

    dam

    ento

    s d

    e Pr

    og

    ram

    aci

    nA

    PREN

    DIZ

    AJE

    AC

    TIV

    O B

    ASA

    DO

    EN

    CA

    SOS

    Jorge A. Villalobos, Ph.DObtuvo un doctorado en la Universidad Joseph Fourier (Francia), un Master en Informtica en el Instituto Nacional Politcnico de Grenoble (Francia) y el ttulo de Ingeniero en la Universidad de los Andes (Colombia). Actualmente es profesor asociado del Departamento de Ingeniera de Sis-temas de la Universidad de los Andes, en donde coordina el grupo de investigacin en Construccin de Software y el proyecto Cupi2. Ha trabajado como investigador visitante en varias universidades europeas (Espaa y Francia) y es el autor de los libros Diseo y Manejo de Estructuras de Da-tos en C (1996) y Estructuras de Datos: Un Enfoque desde Tipos Abstractos (1990).

    Rubby Casallas, Ph.DObtuvo un doctorado en la Universidad Joseph Fourier (Francia), es Especialista en Sistemas de Informacin en la Organizacin 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 Tech-nology. Actualmente trabaja como profesora asociada del Departamento de Ingeniera de Sistemas de la Universidad de los Andes. Es coautora del libro Introduccin a la Pro-gramacin (1987).

    est dirigido a estudiantes que toman por primera vez un curso de programacin de computadores, sin importar el programa de estudios que estn siguiendo. Su objetivo es servir de herramienta fundamental en el proceso de enseanza/aprendizaje de un primer curso de programacin, usando un enfoque novedoso desde el punto de vista pedaggico y moderno desde el punto de vista tecnolgico.

    Son siete los ejes temticos que conforman el marco conceptual de la obra: Modelado y solucin de problemas Algortmica Tecnologa y programacin Herramientas de programacin Procesos de software Tcnicas de programacin y metodologas Elementos estructuradores y arquitecturas.

    Para cada uno se han definido tanto los conocimientos que el estudiante debera adquirir, como las habilidades que se deben generar de manera incremental.

    El modelo pedaggico del libro est basado en principios de aprendizaje activo y de aprendizaje por casos (los ejercicios) y responde a la necesidad de encontrar un equilibrio entre los ejes temticos y en mantener un alto grado de motivacin de los estudiantes hacia el curso.

    Ese equilibrio se ha logrado a travs de la nocin del ejercicio el cual, al ser un programa completo, permite familiarizar a los estudiantes con todos los conceptos de los ejes desde el comienzo del curso.

    El estudiante puede controlar lo que hace y puede reflexionar sobre los xitos y los inconvenientes que se le presentan.

    En el CD se encuentran cuatro tipos de elementos:1. los programas de los casos de estudio2. los programas de las hojas de trabajo3. los instaladores de algunas herramientas de desarrollo 4. los entrenadores sobre ciertos conceptos

    El CD ha sido construido de manera que sea fcil navegar por los elementos que lo constituyen y todo su contenido, al igual que otros materiales de apoyo al profesor, se puede encontrar en el sitio web: http://cupi2.uniandes.edu.co

    Fundamentosde

    Vistanos en:www.pearsoneducacion.net

    cubierta.indd 1 4/2/06 11:45:53 PM

    ISBN 970- 26- 0846- 5

    9 7 8 9 7 0 2 6 0 8 4 6 2

  • Programacion001_021.indd 1 3/30/06 11:00:08 PM

  • Programacion001_021.indd 1 3/30/06 11:00:08 PM

  • Programacion001_021.indd 2 3/30/06 11:00:08 PM

  • Fundamentos

    APRENDIZAJE ACTIVO BASADO EN CASOS

    de

    Un Enfoque Moderno Usando Java, UML, Objetos y Eclipse

    Programacion001_021.indd 3 4/6/06 11:20:23 PM

  • Programacion001_021.indd 4 3/30/06 11:00:09 PM

  • Fundamentos

    APRENDIZAJE ACTIVO BASADO EN CASOS

    de

    Un Enfoque Moderno Usando Java, UML, Objetos y Eclipse

    JORGE A. VILLALOBOS S.Universidad de los Andes

    Bogot Colombia

    RUBBY CASALLAS G.Universidad de los Andes

    Bogot Colombia

    COLOMBIA CHILE ARGENTINA BRASIL COSTA RICA ESPAA GUATEMALA MXICO PER PUERTO RICO VENEZUELA

    Programacion001_021.indd 5 4/6/06 11:21:32 PM

  • Autores: Jorge Villalobos, Rubby Casallas

    Editora: Mara Fernanda Castillo [email protected]

    Diseo y diagramacin: Piero Guerrero

    Correccin de estilo: Esteban Flamini

    PRIMERA EDICIN, 2006

    D.R. 2006 por Pearson Educacin de Mxico S. A. de C. V. Atlacomulco N 500 5 piso Col. Industrial Atoto 53519 Naucalpan de Jurez, Estado de Mxico.

    Prentice Hall es una marca registrada de Pearson Educacin de Mxico S. A. de C. V.

    Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden reproducirse, registrarse o transmitirse, por un sistema de recuperacin de informacin en ninguna forma ni por ningn medio, sea electrnico, mecnico, fotoqumico, magntico o electroptico, por fotocopia, grabacin o cualquier otro, sin permiso previo por escrito del editor.

    ISBN: 970-26-0846-5

    Impreso en Colombia / Printed in Colombia

    Datos de catalogacin bibliogrfica

    Villalobos, Jorge Casallas, Rubby

    Fundamentos de Programacin. Aprendizaje Activo Basado en Casos 1 edicin

    Pearson Educacin de Mxico S. A. de C. V., 2006

    ISBN: 970-26-0846-5

    Formato: 21 x 27 cm. Pginas: 384

    Programacion001_021.indd 6 3/30/06 11:00:09 PM

    Impreso por Quebecor World Bogot S.A.

  • A Vicky, por la alegra con la que me ha acostumbrado a vivir.

    JORGE

    A Irene y Jorge Esteban por el futuro que representan.

    RUBBY

    Programacion001_021.indd 7 3/30/06 11:00:09 PM

  • 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.

    Tambin queremos reconocer el trabajo de Mario Snchez y Pablo Barvo, nues-tros incansables colaboradores. Ellos nos ayudaron en la construccin de mu-chos de los ejercicios y ejemplos alrededor de los cuales gira este libro. Gracias por su ayuda y su permanente buen humor.

    Una mencin especial merecen los profesores y estudiantes que durante el ltimo ao participaron en las secciones de prueba, usadas para validar el en-foque pedaggico propuesto, y quienes utilizaron como material de trabajo los primeros borradores de este libro. En particular, queremos reconocer el trabajo de Marcela Hernndez, quien particip activamente en la revisin del borrador del libro y construy una parte del material de apoyo a profesores que se en-cuentra disponible en el sitio web del proyecto.

    Agradecemos la ayuda que recibimos de parte del LIDIE (Laboratorio de In-vestigacin en Informtica Educativa de la Universidad de los Andes), en las tareas de seguimiento, validacin y diseo de las estrategias pedaggicas que posibilitaron este libro.

    Programacion001_021.indd 8 4/7/06 12:03:50 AM

  • IX

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    Prefacio ............................................................................. XVII

    Nivel 1 - Problemas, Soluciones y Programas1. Objetivos Pedaggicos .................................................................................... 1

    2. Motivacin ....................................................................................................... 2

    3. Problemas y Soluciones ................................................................................... 23.1. Especifi cacin de un Problema ........................................................................................................ 3

    3.2. El Proceso y las Herramientas ......................................................................................................... 6

    3.3. La Solucin a un Problema ............................................................................................................. 7

    4. Casos de Estudio .............................................................................................. 84.1. Caso de Estudio N 1: Un Empleado ............................................................................................... 9

    4.2. Caso de Estudio N 2: Un Simulador Bancario ................................................................................. 9

    4.3. Caso de Estudio N 3: Un Tringulo ................................................................................................. 10

    5. Comprensin y Especifi cacin del Problema ................................................... 105.1. Requerimientos Funcionales ........................................................................................................... 10

    5.2. El Modelo del Mundo del Problema ................................................................................................ 15

    5.3. Los Requerimientos no Funcionales ................................................................................................. 22

    6. Elementos de un Programa .............................................................................. 236.1. Algoritmos e Instrucciones .............................................................................................................. 23

    6.2. Clases y Objetos ............................................................................................................................. 25

    6.3. Java como Lenguaje de Programacin ............................................................................................. 28

    Tabla de Contenido

    Programacion001_021.indd 9 4/2/06 9:08:38 AM

  • X

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. T

    ABL

    A D

    E C

    ON

    TEN

    IDO 6.4. Tipos de Datos ................................................................................................................................ 30

    6.5. Mtodos ........................................................................................................................................ 34

    6.6. La Instruccin de Retorno ............................................................................................................... 37

    6.7. La Instruccin de Asignacin ........................................................................................................... 38

    6.8. La Instruccin de Llamada de un Mtodo ........................................................................................ 39

    6.9. Llamada de Mtodos con Parmetros ............................................................................................. 43

    6.10. Creacin de Objetos ..................................................................................................................... 44

    7. Diseo de la Solucin ...................................................................................... 447.1. La Interfaz de Usuario .................................................................................................................... 45

    7.2. La Arquitectura de la Solucin ......................................................................................................... 45

    7.3. El Diseo de las Clases ................................................................................................................... 46

    8. Construccin de la Solucin ............................................................................ 468.1. Visin Global .................................................................................................................................. 46

    8.2. Tipos de Archivos ............................................................................................................................ 47

    8.3. Organizacin de los Elementos de Trabajo ....................................................................................... 48

    8.4. Eclipse: Un Ambiente de Desarrollo ................................................................................................. 53

    9. Glosario de Trminos ....................................................................................... 54

    10. Hojas de Trabajo ............................................................................................ 5610.1. Hoja de Trabajo N 1: Una Encuesta ............................................................................................ 56

    10.2. Hoja de Trabajo N 2: Una Alcanca ............................................................................................. 61

    Nivel 2 - Defi nicin de Situaciones y Manejo de Casos

    1. Objetivos Pedaggicos .................................................................................... 67

    2. Motivacin ....................................................................................................... 68

    3. El Primer Caso de Estudio ................................................................................ 683.1. Comprensin del Problema ............................................................................................................. 69

    3.2. Defi nicin de la Interfaz de Usuario ................................................................................................ 70

    4. Nuevos Elementos de Modelado ..................................................................... 714.1. Tipos Simples de Datos ................................................................................................................... 71

    4.2. Constantes para Defi nir el Dominio de un Atributo .......................................................................... 74

    4.3. Constantes para Representar Valores Inmutables ............................................................................ 75

    4.4. Manejo de Asociaciones Opcionales ................................................................................................ 76

    5. Expresiones ...................................................................................................... 785.1. Algunas Defi niciones ...................................................................................................................... 78

    5.2. Operadores Relacionales ................................................................................................................ 79

    5.3. Operadores Lgicos ........................................................................................................................ 80

    Programacion001_021.indd 10 4/2/06 9:08:38 AM

  • XI

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    5.4. Operadores sobre Cadenas de Caracteres ....................................................................................... 81

    5.5. Manejo de Variables ....................................................................................................................... 89

    5.6. Otros Operadores de Asignacin ..................................................................................................... 89

    6. Clases y Objetos .............................................................................................. 936.1. Diferencia entre Clases y Objetos .................................................................................................... 93

    6.2. Creacin de Objetos de una Clase .................................................................................................. 94

    7. Instrucciones Condicionales ........................................................................... 987.1. Instrucciones Condicionales Simples .............................................................................................. 98

    7.2. Condicionales en Cascada ............................................................................................................. 101

    7.3. Instrucciones Condicionales Compuestas ....................................................................................... 103

    8. Responsabilidades de una Clase ..................................................................... 1068.1. Tipos de Mtodo ............................................................................................................................ 106

    8.2. Cmo Identifi car las Responsabilidades? ...................................................................................... 106

    9. Eclipse: Nuevas Opciones ............................................................................... 109

    10. Glosario de Trminos .................................................................................... 110

    11. Hojas de Trabajo ........................................................................................... 11111.1. Hoja de Trabajo N 1: Juego de Triqui ......................................................................................... 111

    11.2. Hoja de Trabajo N 2: Un Estudiante .......................................................................................... 117

    Nivel 3 - Manejo de Grupos de Atributos

    1. Objetivos Pedaggicos ................................................................................... 125

    2. Motivacin ...................................................................................................... 126

    3. Caso de Estudio N 1: Las Notas de un Curso ................................................. 1263.1. Comprensin de los Requerimientos .............................................................................................. 127

    3.2. Comprensin del Mundo del Problema .......................................................................................... 127

    4. Contenedoras de Tamao Fijo ........................................................................ 1274.1. Declaracin de un Arreglo .............................................................................................................. 128

    4.2. Inicializacin de un Arreglo ............................................................................................................ 129

    4.3. Acceso a los Elementos del Arreglo ................................................................................................ 130

    5. Instrucciones Repetitivas ................................................................................ 1305.1. Introduccin .................................................................................................................................. 130

    5.2. Calcular el Promedio de las Notas .................................................................................................. 131

    5.3. Componentes de una Instruccin Repetitiva ................................................................................... 133

    5.4. Patrones de Algoritmo para Instrucciones Repetitivas ..................................................................... 137

    Programacion001_021.indd 11 3/30/06 11:00:11 PM

  • XII

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. T

    ABL

    A D

    E C

    ON

    TEN

    IDO 6. Caso de Estudio N 2: Reservas en un Vuelo ................................................... 146

    6.1. Comprensin de los Requerimientos .............................................................................................. 147

    6.2. Comprensin del Mundo del Problema .......................................................................................... 148

    6.3. Diseo de la Solucin .................................................................................................................... 148

    6.4. La Clase Pasajero .......................................................................................................................... 149

    6.5. La Clase Silla ................................................................................................................................. 150

    6.6. La Clase Avion ............................................................................................................................... 151

    7. Caso de Estudio N 3: Tienda de Libros .......................................................... 1577.1. Comprensin de los Requerimientos .............................................................................................. 158

    7.2. Comprensin del Mundo del Problema .......................................................................................... 158

    8. Contenedoras de Tamao Variable ................................................................. 1598.1. Declaracin de un Vector ............................................................................................................... 160

    8.2. Inicializacin y Tamao de un Vector .............................................................................................. 161

    8.3. Acceso a los Elementos de un Vector .............................................................................................. 162

    8.4. Agregar Elementos a un Vector ...................................................................................................... 163

    8.5. Remplazar un Elemento en un Vector ............................................................................................. 164

    8.6. Eliminar un Elemento de un Vector ................................................................................................. 165

    8.7. Construccin del Programa del Caso de Estudio ............................................................................. 166

    9. Uso de Ciclos en Otros Contextos .................................................................. 170

    10. Creacin de una Clase en Java ..................................................................... 171

    11. Consultar el Javadoc de una Clase ............................................................... 172

    12. Glosario de Trminos .................................................................................... 173

    13. Hojas de Trabajo ........................................................................................... 17413.1. Hoja de Trabajo N 1: Un Parqueadero ....................................................................................... 174

    13.2. Hoja de Trabajo N 2: Lista de Contactos ................................................................................... 179

    Nivel 4 - Defi nicin y Cumplimiento de Responsabilidades

    1. Objetivos Pedaggicos ................................................................................... 187

    2. Motivacin ...................................................................................................... 188

    3. El Caso de Estudio N 1: Un Club Social ......................................................... 1903.1. Comprensin de los Requerimientos .............................................................................................. 191

    3.2. Comprensin del Mundo del Problema .......................................................................................... 192

    3.3. Defi nicin de la Arquitectura .......................................................................................................... 193

    3.4. Declaracin de las Clases ............................................................................................................... 194

    Programacion001_021.indd 12 3/30/06 11:00:12 PM

  • XIII

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    4. Asignacin de Responsabilidades ................................................................... 1944.1. La Tcnica del Experto ................................................................................................................... 194

    4.2. La Tcnica de Descomposicin de los Requerimientos ..................................................................... 195

    5. Manejo de las Excepciones ............................................................................. 1975.1. Anunciar que puede Producirse una Excepcin ............................................................................... 199

    5.2. La Instruccin try-catch .................................................................................................................. 199

    5.3. La Construccin de un Objeto Exception y la Instruccin throw ....................................................... 200

    5.4. Recuperacin de una Situacin Anormal ........................................................................................ 202

    6. Contrato de un Mtodo .................................................................................. 2036.1. Precondiciones y Postcondiciones ................................................................................................... 203

    6.2. Documentacin de los Contratos con Javadoc ................................................................................ 205

    7. Diseo de las Signaturas de los Mtodos ....................................................... 210

    8. Caso de Estudio N 2: Un Brazo Mecnico ...................................................... 2118.1. Comprensin y Construccin del Mundo en Java ............................................................................ 212

    8.2. Comprender la Asignacin de Responsabilidades y los Contratos .................................................... 214

    8.3. La Tcnica de Dividir y Conquistar .................................................................................................. 216

    9. Glosario de Trminos ...................................................................................... 226

    10. Hojas de Trabajo ........................................................................................... 22710.1. Hoja de Trabajo N 1: Venta de Boletas en una Sala de Cine ....................................................... 227

    10.2. Hoja de Trabajo N 2: Un Sistema de Prstamos ......................................................................... 235

    Nivel 5 - Construccin de la Interfaz Grfi ca

    1. Objetivos Pedaggicos ................................................................................... 243

    2. Motivacin ...................................................................................................... 244

    3. El Caso de Estudio .......................................................................................... 2453.1. Comprensin de los Requerimientos .............................................................................................. 247

    3.2. Comprensin del Mundo del Problema .......................................................................................... 247

    3.3. Defi nicin de los Contratos ............................................................................................................ 249

    4. Construccin de Interfaces Grfi cas ............................................................... 251

    5. Elementos Grfi cos Estructurales ................................................................... 2545.1. Creacin de la Ventana Principal .................................................................................................... 254

    5.2. Distribucin Grfi ca de los Elementos ............................................................................................ 257

    5.3. Divisiones y Paneles ....................................................................................................................... 259

    5.4. Etiquetas y Zonas de Texto ............................................................................................................. 263

    Programacion001_021.indd 13 3/30/06 11:00:13 PM

  • XIV

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. T

    ABL

    A D

    E C

    ON

    TEN

    IDO 5.5. Validacin y Formateo de Datos ..................................................................................................... 265

    5.6. Seleccin de Opciones .................................................................................................................... 266

    6. Elementos de Interaccin ............................................................................... 267

    7. Mensajes al Usuario y Lectura Simple de Datos ............................................. 2727.1. Mensajes en la Consola ................................................................................................................. 272

    7.2. Mensajes en una Ventana .............................................................................................................. 273

    7.3. Pedir Informacin al Usuario .......................................................................................................... 273

    8. Arquitectura y Distribucin de Responsabilidades ......................................... 2748.1. Por dnde Comienza la Ejecucin de un Programa? ...................................................................... 274

    8.2. Quin Crea el Modelo del Mundo? .............................................................................................. 275

    8.3. Qu Mtodos Debe Tener un Panel? ............................................................................................. 275

    8.4. Quin se Encarga de Hacer Qu? ................................................................................................. 277

    8.5. Cmo Hacer que los Paneles Conozcan la Ventana? ..................................................................... 279

    8.6. Cmo Implementar los Requerimientos Funcionales? ................................................................... 280

    9. Ejecucin de un Programa en Java ................................................................. 281

    10. Glosario de Trminos .................................................................................... 282

    11. Hojas de Trabajo ........................................................................................... 28311.1. Hoja de Trabajo N 1: Traductor de Palabras ............................................................................... 283

    11.2. Hoja de Trabajo N 2: Diccionario de Sinnimos ......................................................................... 288

    Nivel 6 - Manejo de Estructuras de dos Dimensiones y Persistencia

    1. Objetivos Pedaggicos ................................................................................... 293

    2. Motivacin ...................................................................................................... 294

    3. Caso de Estudio N 1: Un Visor de Imgenes .................................................. 2943.1. Comprensin del Mundo del Problema .......................................................................................... 295

    4. Contenedoras de dos Dimensiones: Matrices ................................................. 2964.1. Declaracin de una Matriz ............................................................................................................. 296

    4.2. Inicializacin de una Matriz ........................................................................................................... 297

    4.3. Acceso a los Elementos de una Matriz ............................................................................................ 297

    4.4. Comparar los Elementos de una Matriz .......................................................................................... 300

    4.5. Patrones de Algoritmo para Recorrido de Matrices ......................................................................... 302

    5. Caso de Estudio N 2: Campeonato de Ftbol ................................................ 3105.1. Comprensin de los Requerimientos .............................................................................................. 310

    Programacion001_021.indd 14 3/30/06 11:00:13 PM

  • XV

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    5.2. Comprensin del Mundo del Problema .......................................................................................... 311

    5.3. Diseo de las Clases ...................................................................................................................... 312

    6. Persistencia y Manejo del Estado Inicial ........................................................ 3136.1. El Concepto de Archivo .................................................................................................................. 313

    6.2. Leer Datos como Propiedades ........................................................................................................ 314

    6.3. Escoger un Archivo desde el Programa ........................................................................................... 316

    6.4. Inicializacin del Estado de la Aplicacin ........................................................................................ 318

    6.5. Manejo de los Objetos de la Clase Properties ................................................................................. 320

    7. Completar la Solucin del Campeonato ......................................................... 3217.1. Registrar el Resultado de un Partido .............................................................................................. 321

    7.2. Construir la Tabla de Posiciones ..................................................................................................... 322

    7.3. Implementacin de otros Mtodos sobre Matrices .......................................................................... 324

    8. Proceso de Construccin de un Programa ...................................................... 3268.1. Anlisis del Problema .................................................................................................................... 326

    8.2. Diseo de la Solucin .................................................................................................................... 327

    8.3. Construccin de la Solucin ........................................................................................................... 327

    8.4. Una Visin Grfi ca del Proceso ...................................................................................................... 327

    9. Glosario de Trminos ...................................................................................... 330

    10. Hojas de Trabajo ........................................................................................... 33110.1. Hoja de Trabajo N 1: Sopa de Letras ......................................................................................... 331

    10.2. Hoja de Trabajo N 2: Asignacin de Tareas ................................................................................ 337

    Anexo A - El Lenguaje Java

    1. Instalacin de las Herramientas ..................................................................... 3451.1. Qu se Necesita para Empezar? ................................................................................................... 345

    1.2. Dnde Encontrar los Instaladores de las Herramientas? ................................................................ 345

    1.3. Cmo Instalar las Herramientas? .................................................................................................. 346

    2. Diagramas de Sintaxis del Lenguaje Java ....................................................... 347

    Anexo B - Resumen de Comandos Windows

    1. Comandos Ejecutables de Windows ............................................................... 355

    Anexo C - Tabla de Cdigos UNICODE

    1. Tabla de Cdigos ............................................................................................. 359

    Programacion001_021.indd 15 3/30/06 11:00:14 PM

  • Programacion001_021.indd 16 4/2/06 9:14:59 AM

  • XVII

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    Objetivos

    Este libro es uno de los resultados del proyecto Cupi2, un proyecto de actualizacin curricular de la Universidad de los Andes (Bogot, Colombia), cuyo principal propsito es encontrar mejores formas de ensear/aprender a resolver problemas usando como herramienta un lenguaje de programacin de com-putadores.

    Este libro tiene como objetivo servir de herramienta fundamental en el proceso de enseanza/aprendi-zaje de un primer curso de programacin, usando un enfoque novedoso desde el punto de vista pe-daggico y moderno desde el punto de vista tec-nolgico.

    Queremos que el libro sea una herramienta de tra-bajo dentro de un proceso de aprendizaje, en el que el lector debe ser su principal protagonista. Por esta razn, a lo largo de los niveles que conforman el li-bro, se le ir pidiendo al lector que realice pequeas tareas a medida que se presenta la teora y, luego, que resuelva problemas completos directamente so-bre el libro.

    El Pblico Destinatario

    El libro est dirigido a estudiantes que toman por prime-ra vez un curso de programacin de computadores, sin importar el programa de estudios que estn siguiendo. Esto quiere decir que para utilizar el libro no se necesita ninguna formacin especfi ca previa, y que las compe-tencias generadas con este texto se pueden enmarcar fcilmente dentro de cualquier perfi l profesional.

    El Enfoque del Libro

    La estrategia pedaggica diseada para este libro gira alrededor de cinco pilares, los cuales se ilustran en la siguiente fi gura.

    Prefacio

    Programacion001_021.indd 17 4/2/06 9:15:02 AM

  • XVIII Aprendizaje activo: La participacin activa

    del lector dentro del proceso de aprendizaje es un elemento fundamental en este tema, puesto que, ms que presentar un amplio conjunto de conocimientos, el libro debe ayudar a generar las competencias o habilidades necesarias para utili-zarlos de manera efectiva. Una cosa es entender una idea, y otra muy distinta lograr utilizarla para resolver un problema.

    Desarrollo incremental de habilidades: Mu-chas de las competencias necesarias para resolver un problema con un lenguaje de programacin se generan a partir del uso reiterado de una tcnica o metodologa. No es sufi ciente 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 con-textos.

    Equilibrio en los ejes temticos: La solucin de un problema con un lenguaje de programa-cin incluye un conjunto de conocimientos y ha-bilidades de varios dominios. Dichos dominios son los que en la siguiente seccin denominamos ejes conceptuales. Este curso intenta mantener un equilibro entre dichos ejes, mostrando as al lector que es en el adecuado uso de las herra-mientas y tcnicas 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 solucin requiere el uso del conjunto de conceptos y tcnicas pre-sentadas en el libro. La mitad de los problemas se utilizan como casos de estudio y la otra mitad, como hojas de trabajo.

    Actualidad tecnolgica: En este libro se uti-lizan los elementos tecnolgicos actuales, en-tre los cuales se encuentran el lenguaje de pro-gramacin Java, el lenguaje de modelado UML, el ambiente de desarrollo de programas Eclipse y las tcnicas de la programacin orientada a objetos.

    Los Ejes Conceptuales de la Programacin

    Para resolver un problema utilizando como herramien-ta un lenguaje de programacin, se necesitan conoci-mientos y habilidades en siete dominios conceptuales (llamados tambin ejes temticos), los cuales se resu-men en la siguiente fi gura:

    Modelado y solucin de problemas: Es la ca-pacidad de abstraer la informacin de la realidad relevante para un problema, de expresar dicha realidad en trminos de algn lenguaje y propo-ner una solucin en trminos de modifi caciones de dicha abstraccin. Se denomina anlisis al proceso de crear dicha abstraccin a partir de la realidad, y especifi cacin del problema al resul-tado de expresar el problema en trminos de dicha abstraccin.

    Algortmica: Es la capacidad de utilizar un con-junto de instrucciones para expresar las modifi ca-ciones que se deben hacer sobre la abstraccin de la realidad, para llegar a un punto en el cual el problema se considere resuelto. Se denomina di-seo de un algoritmo al proceso de construccin de dicho conjunto de instrucciones.

    Tecnologa y programacin: Son los elementos tecnolgicos necesarios (lenguaje de programa-cin, lenguaje de modelado, etc.) para expresar, en un lenguaje comprensible por una mquina, la abs-traccin de la realidad y el algoritmo que resuelve

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. P

    REFA

    CIO

    Programacion001_021.indd 18 3/30/06 11:00:26 PM

  • XIX

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    un problema sobre dicha abstraccin. Programar es la habilidad de utilizar dicha tecnologa para que una mquina sea capaz de resolver el problema.

    Herramientas de programacin: Son las herra-mientas computacionales (compiladores, editores, depuradores, gestores de proyectos, etc.) que per-miten a una persona desarrollar un programa. Se pueden considerar una implementacin particular de la tecnologa.

    Procesos de software: Es el soporte al proceso de programacin, que permite dividir el trabajo en etapas claras, identifi car las entradas y las salidas de cada etapa, garantizar la calidad de la solucin y la capacidad de las personas involucradas y estimar en un futuro el esfuerzo de desarrollar un progra-ma. Aqu se incluye el ciclo de vida de un programa, los formularios, la defi nicin de los entregables, el estndar de documentacin y codifi cacin, el con-trol de tiempo, las tcnicas de inspeccin de cdigo, las tcnicas de pruebas de programas, etc.

    Tcnicas de programacin y metodologas: Son las estrategias y guas que ayudan a una persona a crear un programa. Se concentran en el cmo hacer las cosas. Defi nen un vocabulario sobre la manera de trabajar en cada una de las facetas de un programa, y estn constituidas por un conjunto de tcnicas, m-tricas, consejos, patrones, etc. para que un programa-dor sea capaz de pasar con xito por todo el ciclo de vida de desarrollo de una aplicacin.

    Elementos estructuradores y arquitecturas: Defi nen la estructura de la aplicacin resultante, en trminos del problema y de los elementos del mundo del problema. Se consideran elementos es-tructuradores las funciones, los objetos, los compo-nentes, los servicios, los modelos, etc. Este eje se concentra en la forma de la solucin, las responsa-bilidades de cada uno de los elementos, la manera en que esos elementos se comunican, etc.

    La Estructura del Libro

    El libro sigue una estructura de niveles, en el cual se introducen los conceptos de manera gradual en los distintos ejes alrededor de los cuales gira la progra-macin. Para hacerlo, se utilizan diversos casos de estudio o problemas, que le dan contexto a los temas y permiten ayudar a generar las habilidades necesa-rias para que el lector utilice de manera adecuada los conceptos vistos.

    Los 6 niveles en los cuales se encuentra dividido el libro se muestran en la siguiente fi gura:

    Nivel 1. Problemas, Soluciones y Programas

    Nivel 2. Defi nicin de Situaciones y Manejo de Casos

    Nivel 3. Manejo de Grupos de Atributos

    Nivel 4. Defi nicin y Cumplimiento de Responsabilidades

    Nivel 5. Construccin de la Interfaz Grfi ca

    Nivel 6. Manejo de Estructuras de dos Dimensiones y Persistencia

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

    Nivel 1

    Nivel 2

    Nivel 3

    Nivel 4

    Nivel 5

    Nivel 6

    Programacion001_021.indd 19 3/30/06 11:00:29 PM

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

    Nivel 1. Problemas, Soluciones y Programas:Se explica el proceso global de solucin 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 solucin. Se analizan problemas simples a travs de la especifi cacin de los servicios que el programa debe ofrecer y a travs de un modelo conceptual del mundo del problema. Se explica la estructura de un programa de computador y el papel que desempea cada uno de los elementos que lo componen. Se introduce el lenguaje de programacin Java y los elementos necesarios para que el estudiante complete un programa utilizando expresiones simples, asignaciones y llamadas de mtodos. Se utiliza un ambiente de desarrollo de programas y un espacio de trabajo predefi nido, para completar una solucin parcial a un problema.

    Nivel 2. Defi nicin de Situaciones y Manejo de Casos:Se extienden los conceptos de modelado de las caractersticas de un objeto, utilizando nuevos tipos simples de datos y la tcnica de defi nir constantes para representar los valores posibles de un atributo. Se utilizan expresiones como medio para identifi car una situacin posible en el estado de un objeto y para indicar la manera de modifi car dicho estado. Se explican las instrucciones condicionales simples y compuestas como parte del cuerpo de un mtodo, de manera que sea posible considerar distintos casos posibles en la solucin de un problema. Se presenta de manera informal, una forma de identifi car los mtodos de una clase, utilizando para esto la tcnica de agrupar los mtodos por tipo de responsabilidad que tienen: construir, modifi car o calcular.

    Nivel 3. Manejo de Grupos de Atributos:Se explica la forma de utilizar las estructuras contenedoras de tamao fi jo como elementos de modelado de una caracterstica de un elemento del mundo, que permiten almacenar una secuencia de valores (simples u objetos) y las estructuras contenedoras de tamao 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 documentacin de un conjunto

    de clases escritas por otros y la forma de servirse de dicha documentacin para poder incorporar y usar adecuadamente dichas clases en un programa que se est construyendo.

    Nivel 4. Defi nicin y Cumplimiento de Responsabilidades:En este nivel se hace nfasis en la asignacin de responsabilidades a las clases que representan la solucin de un problema, utilizando tcnicas simples. Se explica la tcnica metodolgica de dividir y conquistar para resolver los requerimientos funcionales de un problema y realizar la asignacin de responsabilidades. Se estudia el concepto de contratos de los mtodos tanto para poderlos defi nir como para poderlos utilizar en el momento de invocar el mtodo. Se ensea la forma de utilizar la clase Exception de Java para manejar los problemas asociados con la violacin de los contratos. Se presenta la forma de documentar los contratos de los mtodos utilizando la sintaxis defi nida por la herramienta javadoc. Se profundiza en el manejo del ambiente de desarrollo y el lenguaje Java, con el propsito de que el estudiante pueda escribir una clase completa del modelo del mundo, siguiendo una especifi cacin dada en trminos de un conjunto de contratos.

    Nivel 5. Construccin de la Interfaz Grfi ca:El tema principal de este nivel es la construccin de interfaces de usuario simples. Se presenta la importancia que tiene la interfaz de usuario dentro de un programa de computador, teniendo en cuenta que es el medio de comunicacin entre el usuario y el modelo del mundo. Se propone una arquitectura para un programa simple, repartiendo de manera adecuada las responsabilidades entre la interfaz de usuario, el modelo del mundo y las pruebas unitarias. Se enfatiza la importancia de mantener separadas las clases de esos tres dominios.

    Nivel 6. Manejo de Estructuras de dos Dimensiones y Persistencia:Se explica cmo utilizar el concepto de matriz como elemento de modelado que permite agrupar los elementos del mundo en una estructura contenedora de dos dimensiones de tamao fi jo. Se identifi can los patrones de algoritmo para manejo de matrices, dada la especifi cacin de un mtodo. Se presenta la manera de utilizar un esquema simple de persistencia para el manejo del estado inicial de un problema. Por ltimo, se resume el proceso de construccin de programas seguido en el libro.

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. P

    REFA

    CIO

    Programacion001_021.indd 20 3/30/06 11:00:30 PM

  • XXI

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    Las Herramientas y Recursos de Apoyo

    Este libro es un libro de trabajo para el estudiante, don-de puede realizar sus tareas y ejercicios asociados con cada nivel. Consideramos el CD que acompaa el libro como parte integral del mismo. Todos los casos de es-tudio que se utilizan en los distintos niveles estn re-sueltos e incluidos en dicho CD, as como las hojas de trabajo. Adems, cada una de estas soluciones contiene puntos de extensin para que el profesor pueda disear ejercicios adicionales con sus estudiantes. Es importante que el profesor motive a los estudiantes a consultar el CD al mismo tiempo que leen el libro.

    En el CD se encuentran cuatro tipos de elementos: (1) los programas de los casos de estudio, (2) los progra-mas de las hojas de trabajo, (3) los instaladores de algunas herramientas de desarrollo y (4) los entrena-dores sobre ciertos conceptos. El CD ha sido construi-do de manera que sea fcil navegar por los elementos que lo constituyen.

    Todo el contenido del CD de apoyo, lo mismo que otros materiales de apoyo al profesor, se puede encontrar en el sitio web del proyecto: http://cupi2.uniandes.edu.co

    Licencias de Uso y Marcas Registradas

    A lo largo de este libro hacemos mencin a distintas herramientas y productos comerciales, todos los cuales tienen sus marcas registradas. Estos son: Microsoft Win-dows, Microsoft Word, Rational ROSE, Java, Mozilla Firefox, Eclipse, JUnit.

    En el CD que acompaa el libro el lector hallar las li-cencias de uso de las herramientas que all incluimos.

    Todas las herramientas, programas, entrenadores y dems materiales desarrollados como soporte y complemento del libro (los cuales se encuentran en el CD), se distribu-yen bajo la licencia Academic Free License v. 2.1 que se rige por lo defi nido en: http://opensource.org/licenses/

    Iconos y Convenciones Tipogrfi cas

    En esta seccin presentamos los iconos utilizados a lo largo del libro y el signifi cado que queremos asociarles.

    Usamos las siguientes convenciones tipogrfi cas:

    Negrita. Se usa para resaltar un concepto importante que se acaba de introducir en el texto.

    Itlica. Las palabras en itlica corresponden a trminos en ingls, cuya traduccin a espaol consideramos innecesaria, debido a que el lector va a encontrar esas palabras en dicho idioma en las herramientas de desarrollo. En algunos casos, al lado del trmino en espaol, colocamos tambin la traduccin en ingls.

    Courier. Este tipo de letra lo usamos en los programas que aparecen en el libro y, dentro del texto, para hacer referencia a los elementos de un programa. Dichas palabras no respetan, en algunos casos, las reglas del idioma espaol, puesto que es una cita textual de un elemento de un programa, el cual tiene reglas distintas de escritura (no acepta tildes o el caracter ).

    Courier.Dentro de los programas, este tipo de letra en negrita lo usamos para identifi car las palabras reservadas del lenguaje Java.

    Es una referencia a algo que se puede encontrar en el CD que acompaa el libro o en el sitio web del proyecto.

    Es una tarea que se deja al lector. Toda tarea tiene un objetivo y un enunciado. El primero establece la intencin, mientras que el segundo contiene las instrucciones que el lector debe seguir para resolver la tarea.

    Este es el smbolo que usamos para introducir un ejemplo. En los ejemplos siempre se hace explcito su objetivo y su alcance.

    Peridicamente hacemos una sntesis de las principales ideas que se han presentado en cada nivel y usamos este smbolo para indicar cules son las defi niciones e ideas que el lector debe retener.

    Este smbolo de advertencia lo asociamos a puntos en los cuales el lector debe tener cuidado, ya sea porque son una fuente frecuente de problemas o porque son conceptos que se prestan a distintas interpretaciones.

    El uso incorrecto de alguno de los conceptos o de las instrucciones del lenguaje puede producir errores de compilacin o de ejecucin. Con este smbolo identifi camos los principales errores que se puede encontrar el lector al escribir sus programas, lo mismo que las posibles causas.

    Este smbolo lo usamos para pedir al lector que verifi que alguna cosa.

    Al fi nal de cada nivel hay dos hojas de trabajo, cada una sobre un problema distinto. Cada hoja de trabajo est estructurada como una secuencia de tareas, las cuales deben ayudar a reforzar los conceptos y tcnicas introducidos a lo largo del nivel.

    El glosario es una seccin presente al fi nal de cada nivel, donde se le pide al lector que escriba las principales defi niciones que se han visto en el captulo. Esto permite al lector explicar en sus propias palabras los principales trminos estudiados.

    Usamos este smbolo para resumir las convenciones que se recomienda seguir al escribir un programa en el lenguaje Java. Una convencin es una regla que, sin ser obligatoria, ayuda a escribir programas de mejor calidad.

    Programacion001_021.indd 21 3/30/06 11:00:34 PM

  • XXII

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. N

    IVEL

    1

    Programacion022_087.indd 22 4/2/06 9:18:27 AM

  • 1. Objetivos Pedaggicos

    Al final de este nivel el lector ser capaz de:

    Explicar el proceso global de solucin de un pro-blema 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 solucin.

    Analizar un problema simple que se va a resolver usando un programa de computador, construyen-do 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 compu-tador y el papel que desempea cada uno de los elementos que lo componen.

    Completar una solucin parcial a un problema (un programa incompleto escrito en el lenguaje Java), usando expresiones simples, asignaciones e invo-caciones a mtodos. Esto implica entender los con-ceptos de parmetro y de creacin de objetos.

    Utilizar un ambiente de desarrollo de programas y un espacio de trabajo predefinido, para completar una solucin parcial a un problema.

    Problemas, Soluciones

    y Programas

    Programacion022_087.indd 1 4/2/06 9:18:30 AM

  • 2

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. N

    IVEL

    1 2. Motivacin

    La computacin es una disciplina joven comparada con las matemticas, la fsica o la ingeniera civil. A pesar de su juventud, nuestra vida moderna depende de los computadores. Desde la nevera de la casa, hasta el au-tomvil y el telfono celular, todos requieren de progra-mas de computador para funcionar. Se ha preguntado alguna vez, cuntas lneas de cdigo tienen los pro-gramas que permiten volar a un avin? La respuesta es varios millones.

    El computador es una herramienta de trabajo, que nos permite aumentar nuestra productividad y tener acceso a grandes volmenes de informacin. Es as como, con un computador, podemos escribir documentos, consul-tar los horarios de cine, bajar msica de Internet, jugar o ver pelculas. Pero an ms importante que el uso per-sonal que le podemos dar a un computador, es el uso que hacen de l otras disciplinas. Sera imposible sin los computadores llegar al nivel de desarrollo en el que nos encontramos en disciplinas como la biologa (qu sera del estudio del genoma sin el computador?), la medicina, la ingeniera mecnica o la aeronutica. El computador nos ayuda a almacenar grandes cantidades de informacin (por ejemplo, los tres mil millones de pares de bases del genoma humano, o los millones de pxeles que conforman una imagen que llega desde un satlite) y a manipularla a altas velocidades, para poder as ejecutar tareas que hasta hace slo algunos aos eran imposibles para nosotros.

    El usuario de un programa de computador es aqul que, como parte de su trabajo o de su vida personal, utiliza las aplicaciones desarrolladas por otros para re-solver un problema. Todos nosotros somos usuarios de editores de documentos o de navegadores de Internet, y los usamos como herramientas para resolver proble-mas. 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 re-suelva (o los ayude a resolver). Vista de esta manera, la programacin 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 compu-tador.

    Cuando el problema es grande (como el sistema de informacin de una empresa), complejo (como crear una visualizacin tridimensional de un diseo) o crti-co (como controlar un tren), la solucin la construyen equipos de ingenieros de software, entrenados espe-cialmente para asumir un reto de esa magnitud. En ese caso aparecen tambin los arquitectos de software, capaces de proponer una estructura adecuada para co-nectar los componentes del programa, y un conjunto de expertos en redes, en bases de datos, en el negocio de la compaa, en diseo de interfaces grfi cas, etc. Cuanto ms grande es el problema, ms interdiscipli-naridad se requiere. Piense que en un proyecto grande, puede haber ms de 1000 expertos trabajando al mis-mo tiempo en el diseo y construccin de un programa, y que ese programa puede valer varios miles de millo-nes de dlares. No en vano, la industria de construccin de software mueve billones de dlares al ao.

    Independiente del tamao de los programas, podemos afi rmar que la programacin es una actividad orientada a la solucin de problemas. De all surgen algunos de los interrogantes que sern resueltos a lo largo de este primer nivel: Cmo se defi ne un problema? Cmo, a partir del problema, se construye un programa para resolverlo? De qu est conformado un programa? Cmo se construyen sus partes? Cmo se hace para que el computador entienda la solucin?

    Bienvenidos, entonces, al mundo de la construccin de programas. Un mundo en constante evolucin, en don-de hay innumerables reas de aplicacin y posibilidades profesionales.

    3. Problemas y Soluciones

    Sigamos el escenario planteado en la fi gura 1.1, el cual resume el ciclo de vida de construccin de un programa y nos va a permitir introducir la terminologa bsica que necesitamos:

    Programacion022_087.indd 2 3/30/06 11:06:02 PM

  • 3

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    Paso 1: Una persona u organizacin, denominada el cliente, tiene un problema y necesita la cons-truccin de un programa para resolverlo. Para esto contacta una empresa de desarrollo de software que pone a su disposicin un programador.

    Paso 2: El programador sigue un conjunto de eta-pas, denominadas el proceso, para entender el problema del cliente y construir de manera orga-nizada una solucin 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 pro-blema. Fjese 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 produccin de una fbrica y, el usuario, un ope-rario de la misma.

    3.1. Especifi cacin de un Problema

    Partimos del hecho de que un programador no puede resolver un problema que no entiende. Por esta razn, la primera etapa en todo proceso de construccin de software consiste en tratar de entender el problema que tiene el cliente, y expresar toda la informacin que l suministre, de manera tal que cualquier otra persona del equipo de desarrollo pueda entender sin difi cultad

    lo que espera el cliente de la solucin. Esta etapa se de-nomina anlisis y la salida de esta etapa la llamamos la especifi cacin del problema.

    Para introducir los elementos de la especifi cacin, vamos a hacer el paralelo con otras ingenieras, que comparten problemticas 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 especifi car el problema que le

    En la primera seccin nos concentramos en la defi nicin del problema, en la segunda en el proceso de construccin de la solucin y, en la tercera, en el contenido y estructura de la solucin misma.

    Fig. 1.1 Proceso de solucin de un problema

    Programacion022_087.indd 3 3/30/06 11:06:05 PM

  • 4

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. N

    IVEL

    1 plantean. Para eso debe tratar de identifi car al menos tres aspectos del problema: (1) los requerimientos del usuario (entre qu puntos quiere el cliente la carrete-ra, cuntos carriles debe tener, para qu tipo de trfi co debe ser la carretera), (2) el mundo en el que debe re-solverse el problema (el tipo de terreno, la cantidad de lluvia, la temperatura), y (3) las restricciones y condicio-nes que plantea el cliente (el presupuesto mximo, que las pendientes no sobrepasen el 5%). Sera una prdida de tiempo y de recursos para el ingeniero civil, intentar construir la carretera si no ha entendido y defi nido cla-ramente los tres puntos antes mencionados. Y ms que tiempo y recursos, habr perdido algo muy importante en una profesin de servicio como es la ingeniera, que es la confi anza del cliente.

    En general, todos los problemas se pueden dividir en estos tres aspectos. Por una parte, se debe identifi car lo que el cliente espera de la solucin. Esto se denomina un requerimiento funcional. En el caso de la progra-macin, 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 es-tructura y funcionamiento de la empresa. Por ejemplo, si hay un requerimiento funcional de calcular el salario de un empleado, la descripcin del problema debe in-cluir las normas de la empresa para calcular un salario. El tercer aspecto que hay que considerar al defi nir 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. Fjese que estos ltimos se utilizan para limitar las solu-ciones posibles. En el caso del programa de una empre-sa, una restriccin podra ser el tiempo de entrega del programa, o la cantidad de usuarios simultneos que lo deben poder utilizar. En la fi gura 1.2 se resumen los tres aspectos que conforman un problema.

    Fig. 1.2 Aspectos que hacen parte del anlisis de un problema

    Analizar un problema es tratar de entenderlo. Esta etapa busca garantizar que no tratemos de resolver un problema diferente al que tiene el cliente.

    Descomponer el problema en sus tres aspectos fundamentales, facilita la tarea de entenderlo: en cada etapa nos podemos concentrar en slo uno de ellos, lo cual simplifi ca el trabajo.

    Esta descomposicin se puede generalizar para estudiar todo tipo de problemas, no slo se utiliza en problemas cuya solucin sea un programa de computador.

    Adems de entender el problema, debemos expresar lo que entendemos siguiendo algunas convenciones.

    Al terminar la etapa de anlisis debemos generar un conjunto de documentos que contendrn nuestra comprensin del problema. Con dichos documentos podemos validar nuestro trabajo, presentndoselo al cliente y discutiendo con l.

    Programacion022_087.indd 4 3/30/06 11:06:09 PM

  • 5

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    Objetivo: Identifi car los aspectos que hacen parte de un problema.El problema: una empresa de aviacin quiere construir un programa que le permita buscar una ruta para ir de una ciudad a otra, usando nicamente los vuelos de los que dispone la empresa. Se quiere utilizar este programa desde todas las agencias de viaje del pas.

    La empresa de aviacin.

    Las agencias de viaje del pas.

    R1: dadas dos ciudades C1 y C2, el programa debe dar el itinerario para ir de C1 a C2, usando los vuelos de la empresa. En este ejemplo slo hay un requerimiento funcional explcito. Sin embargo, lo usual es que en un problema haya varios de ellos.

    En el enunciado no est explcito, pero para poder resolver el problema, es necesario conocer todos los vuelos de la empresa y la lista de ciudades a las cuales va. De cada vuelo es necesario tener la ciudad de la que parte, la ciudad a la que llega, la hora de salida y la duracin del vuelo. Aqu debe ir todo el conocimiento que tenga la empresa que pueda ser necesario para resolver los requerimientos funcionales.

    El nico requerimiento no funcional mencionado en el enunciado es el de distribucin, ya que las agencias de viaje estn geogrfi camente dispersas y se debe tener en cuenta esta caracterstica al momento de construir el programa.

    Ejemplo 1

    Cliente

    Usuario

    Requerimiento funcional

    Mundo del problema

    Requerimiento no funcional

    Objetivo: Identifi car los aspectos que forman parte de un problema.El problema: un banco quiere crear un programa para manejar sus cajeros automticos. Dicho programa slo debe permitir retirar dinero y consultar el saldo de una cuenta.

    Identifi que y discuta los aspectos que constituyen el problema. Si el enunciado no es explcito con respecto a algn punto, intente imaginar la manera de completarlo.

    Tarea 1

    Cliente

    Usuario

    Requerimiento funcional

    Mundo del problema

    Requerimiento no funcional

    Programacion022_087.indd 5 3/30/06 11:06:11 PM

  • 6

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. N

    IVEL

    1

    3.2. El Proceso y las Herramientas

    Entender y especificar el problema que se quie-re resolver es slo la primera etapa dentro del proceso de desarrollo de un programa. En la figu-ra 1.3 se hace un resumen de las principales eta-pas que constituyen el proceso de solucin de un problema. Es importante que el lector entienda que si el problema no es pequeo (por ejemplo,

    el sistema de informacin de una empresa), o si los requerimientos no funcionales son crticos (por ejem-plo, el sistema va a ser utilizado simultneamente por cincuenta mil usuarios), o si el desarrollo se hace en equipo (por ejemplo, veinte ingenieros trabajando al mismo tiempo), es necesario adaptar las etapas y la manera de trabajar que se plantean en este li-bro. En este libro slo abordamos la problemtica de construccin de programas de computador para resolver problemas pequeos.

    Analizar un problema signifi ca entenderlo e identifi car los tres aspectos en los cuales siempre se puede descomponer: los requerimientos funcionales, el mundo del problema y los requerimientos no funcionales. Esta divisin es vlida para problemas de cualquier tamao.

    Fig. 1.3 Principales etapas del proceso de solucin de problemas

    La primera etapa para resolver un problema es analizarlo. Para facilitar este estudio, se debe descomponer el problema en sus tres partes.

    Una vez que el problema se ha entendido y se ha expresado en un lenguaje que se pueda entender sin ambigedad, pasamos a la etapa de diseo. Aqu debemos imaginarnos la solucin y defi nir las partes que la van a componer. Es muy comn comenzar esta etapa defi niendo una estrategia.

    Cuando el diseo est terminado, pasamos a construir la solucin.

    El proceso debe ser entendido como un orden en el cual se debe desarrollar una serie de actividades que van a permitir construir un programa. El proceso planteado tiene tres etapas principales, todas ellas apoyadas por herramientas y lenguajes especiales:

    Anlisis del problema: el objetivo de esta etapa es entender y especifi car el problema que se quiere re-solver. Al terminar, deben estar especifi cados los

    requerimientos funcionales, debe estar establecida la informacin del mundo del problema y deben estar defi nidos los requerimientos no funcionales.

    Diseo de la solucin: el objetivo es detallar, usan-do algn lenguaje (planos, dibujos, ecuaciones, diagramas, texto, etc.), las caractersticas que ten-dr la solucin antes de ser construida. Los dise-os nos van a permitir mostrar la solucin antes de

    Programacion022_087.indd 6 3/30/06 11:06:14 PM

  • 7

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    comenzar el proceso de fabricacin propiamente dicho. Es importante destacar que dicha especifi -cacin es parte integral de la solucin.

    Construccin de la solucin: tiene como objetivo implementar el programa a partir del diseo y probar su correcto funcionamiento.

    Cada una de las etapas de desarrollo est apoyada por herramientas y lenguajes, que van a permitir al progra-mador expresar el producto de su trabajo. En la etapa de construccin de la solucin es conveniente contar con un ambiente de desarrollo que ayuda, entre otras cosas, a editar los programas y a encontrar los errores de sintaxis que puedan existir.

    3.3. La Solucin a un Problema

    La solucin a un problema tiene varios componentes, los cuales se ilustran en la fi gura 1.4. El primero es el diseo (los planos de la solucin) que debe defi nir la estructura del programa y facilitar su posterior manteni-miento. El segundo elemento es el cdigo fuente del programa, escrito en algn lenguaje de programa-cin como Java, C, C# o C++. El cdigo fuente de un programa se crea y edita usando el ambiente de desa-rrollo mencionado en la seccin anterior.

    Las etapas iniciales del proceso de construccin de un programa son crticas, puesto que cuanto ms tarde se detecta un error, ms costoso

    es corregirlo. Un error en la etapa de anlisis (entender mal algn aspecto del problema) puede implicar la prdida de mucho tiempo y dinero en un proyecto. Es importante que al fi nalizar cada etapa, tratemos de asegurarnos de que vamos avanzando correctamente en la construccin de la solucin.

    Fig. 1.4 Elementos que forman parte de la solucin de un problema

    Programacion022_087.indd 7 3/30/06 11:06:19 PM

  • 8

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. N

    IVEL

    1 Existen muchos tipos de lenguajes de programacin, entre los cuales los ms utilizados en la actualidad son los llamados lenguajes de programacin orientada a objetos. En este libro utilizaremos Java que es un lenguaje orientado a objetos muy difundido y que ire-mos presentando poco a poco, a medida que vayamos necesitando sus elementos para resolver problemas.

    El tercer elemento de la solucin son los archivos de construccin del programa. En ellos se explica la ma-nera de utilizar el cdigo fuente para crear el cdigo ejecutable. Este ltimo es el que se instala y ejecuta en el computador del usuario. El programa que permite traducir el cdigo fuente en cdigo ejecutable se deno-mina compilador. Antes de poder construir nuestro primer programa en Java, por ejemplo, tendremos que conseguir el respectivo compilador del lenguaje.

    El ltimo elemento que forma parte de la solucin son las pruebas. All se tiene un programa que es capaz de probar que el programa que fue entregado al cliente funciona correctamente. Dicho programa funciona so-bre un conjunto predefi nido de datos, y es capaz de validar que para esos datos predefi nidos (y que simulan datos reales), el programa funciona bien.

    Si por alguna razn el problema del cliente evoluciona (por ejemplo, si el cliente pide un nuevo requerimiento funcional), cualquier programador debe poder leer

    y entender el diseo, aadirle la modifi cacin pedida, ajustar el programa y extender las pruebas para verifi -car la nueva extensin.

    La fi gura 1.5 muestra dos mapas conceptuales (parte a y parte b) que intentan resumir lo visto hasta el momen-to en este captulo.

    4. Casos de Estudio

    Los tres casos de estudio que se presentan a conti-nuacin sern utilizados en el resto del captulo para ilustrar los conceptos que se vayan introduciendo. Se recomienda leerlos detenidamente antes de continuar y tratar de imaginar el funcionamiento de los programas que resuelven los problemas, utilizando para esto las fi guras que se muestran. Al fi nal del captulo encontra-r otros casos de estudio diferentes, con las respectivas hojas de trabajo para desarrollarlos.

    Un programa es la secuencia de instrucciones (escritas en un lenguaje de programacin) que debe ejecutar un computador para resolver un problema.

    La solucin de un problema tiene tres partes: (1) el diseo, (2) el programa y (3) las pruebas de correccin del programa. Estos son los elementos que

    se deben entregar al cliente. Es comn que, adems de los tres elementos citados anteriormente, la solucin incluya un manual del usuario, que explique el funcionamiento del programa.

    Fig. 1.5 (a) Mapa conceptual de la solucin

    de un problema con un computador

    Fig. 1.5 (b) Mapa conceptual de la

    construccin de un programa

    Programacion022_087.indd 8 3/30/06 11:06:23 PM

  • 9

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    4.1. Caso de Estudio N 1: Un Empleado

    Para este caso de estudio vamos a considerar un pro-grama que administra la informacin de un empleado.

    El empleado tiene un nombre, un apellido, un gnero (mas-culino o femenino), una fecha de nacimiento y una imagen asociada (su foto). Adems, tiene una fecha de ingreso a la empresa en la que trabaja y un salario bsico asignado.

    Desde el programa se debe poder cambiar el salario del empleado, lo mismo que hacer los siguientes clculos con la informacin disponible: (1) edad actual, (2) anti-gedad en la empresa y (3) prestaciones a las que tiene derecho en la empresa.

    4.2. Caso de Estudio N 2: Un Simulador Bancario

    Una de las actividades ms comunes en el mundo fi -nanciero es la realizacin de simulaciones que permitan a los clientes saber el rendimiento de sus productos a travs del tiempo, contemplando diferentes escenarios y posibles situaciones que se presenten.

    Se quiere crear un programa que haga la simulacin en el tiempo de la cuenta bancaria de un cliente. Un cliente tiene un nombre y un nmero de cdula el cual identifi -ca la cuenta. Una cuenta, por su parte, est constituida por tres productos fi nancieros bsicos: (1) una cuenta de

    ahorro, (2) una cuenta corriente y (3) un certifi cado de depsito a trmino (CDT). Estos productos son indepen-dientes y tienen comportamientos particulares.

    El saldo total de la cuenta es la suma de lo que el clien-te tiene en cada uno de dichos productos. En la cuenta corriente el cliente puede depositar o retirar dinero. Su principal caracterstica es que no recibe ningn inters por el dinero que se encuentre all depositado. En la cuenta de ahorro, se paga un inters mensual del 0,6% sobre el saldo. Cuando el cliente abre un CDT, defi ne la cantidad de dinero que quiere invertir y negocia con el banco el inters mensual que va a recibir. A diferencia de la cuenta corriente o la cuenta de ahorro, en un CDT no se puede consignar ni retirar dinero. La nica ope-racin posible es cerrarlo, en cuyo caso, el dinero y sus intereses pasan a la cuenta corriente.

    Se quiere que el programa permita a una persona si-mular el manejo de sus productos bancarios, dndole las facilidades de: (1) hacer las operaciones necesarias sobre los productos que conforman la cuenta, y (2) avanzar mes por mes en el tiempo, para que el cliente pueda ver el resultado de sus movimientos bancarios y el rendimiento de sus inversiones.

    Con el botn marcado como >> el usuario puede avanzar mes a mes en el simulador y ver los resultados de sus inversiones.

    Con los seis botones de la parte inferior de la ventana, el usuario puede simular el manejo que va a hacer de los productos que forman parte de su cuenta bancaria.

    En la parte media de la ventana, aparecen el saldo que tiene en cada producto y el inters que est ganando en cada caso.

    Programacion022_087.indd 9 3/30/06 11:06:25 PM

  • 10

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. N

    IVEL

    1 4.3. Caso de Estudio N 3: Un Tringulo

    En este caso se quiere construir un programa que per-mita manejar un tringulo. Esta fi gura geomtrica est defi nida por tres puntos, cada uno de los cuales tie-ne dos coordenadas X, Y. Un tringulo tiene adems un color para las lneas y un color de relleno. Un color por su parte, est defi nido por tres valores numricos entre 0 y 255 (estndar RGB por Red-Green-Blue). El primer valor numrico defi ne la intensidad en rojo, el segundo en verde y el tercero en azul. Ms informacin sobre esta manera de representar los colores la puede encontrar por Internet. Cul es el cdigo RGB del color negro? Y del color blanco?

    El programa debe permitir: (1) dibujar el tringulo en la pantalla, (2) calcular el permetro del tringulo, (3) calcular el rea del tringulo y (4) calcular la altura del tringulo.

    5. Comprensin y Especifi cacin del Problema

    Ya teniendo claras las defi niciones de problema y sus distintos componentes, en esta seccin vamos a traba-jar en la parte metodolgica de la etapa de anlisis. En particular, queremos responder las siguientes pregun-tas: cmo especifi car un requerimiento funcional?, cmo saber si algo es un requerimiento funcio-nal?, cmo describir el mundo del problema? Dado que el nfasis de este libro no est en los requerimien-tos no funcionales, slo mencionaremos algunos ejem-plos sencillos al fi nal de la seccin.

    La frase anterior resume la importancia de la etapa de anlisis dentro del proceso de solucin de problemas. Si no entendemos bien el problema que queremos resol-ver, el riesgo de perder nuestro tiempo es muy alto.

    A continuacin, vamos a dedicar una seccin a cada uno de los elementos en los cuales queremos des-componer los problemas, y a utilizar los casos de estudio para dar ejemplos y generar en el lector la habilidad necesaria para manejar los conceptos que hemos ido introduciendo. No ms teora por ahora y manos a la obra.

    5.1. Requerimientos Funcionales

    Un requerimiento funcional es una operacin que el programa que se va a construir debe proveer al usuario, y que est directamente relacionada con el problema que se quiere resolver. Un requerimiento funcional se describe a travs de cuatro elementos:

    Un identifi cador y un nombre.

    Un resumen de la operacin.

    Con los tres botones de la izquierda, el usuario puede cambiar los puntos que defi nen el tringulo, el color de las lneas y el color del fondo.

    En la zona marcada como Informacin, el usuario puede ver el permetro, el rea y la altura del tringulo (en pxeles).

    En la parte derecha aparece dibujado el tringulo descrito por sus tres puntos.

    Es imposible resolver un problema que no se entiende.

    Programacion022_087.indd 10 3/30/06 11:06:27 PM

  • 11

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    Las entradas (datos) que debe dar el usuario para que el programa pueda realizar la operacin.

    El resultado esperado de la operacin. Hay tres tipos posibles de resultado en un requerimiento

    funcional: (1) una modifi cacin de un valor en el mundo del problema, (2) el clculo de un valor, o (3) una mezcla de los dos anteriores.

    Objetivo: Ilustrar la manera de documentar los requerimientos funcionales de un problema. En este ejemplo se documenta uno de los requerimientos funcionales del caso de estudio del empleado. Para esto se describen los cuatro elementos que lo componen.

    Ejemplo 2

    Nombre

    Resumen

    Entradas

    Resultado

    Es conveniente asociar un identifi cador con cada requerimiento, para poder hacer fcilmente referencia a l. En este caso el identifi cador es R1.

    Es aconsejable que el nombre de los requerimientos corresponda a un verbo en infi nitivo, para dar una idea clara de la accin asociada con la operacin. En este ejemplo el verbo asociado con el requerimiento es actualizar.

    El resumen es una frase corta que explica sin mayores detalles el requerimiento funcional.

    Las entradas corresponden a los valores que debe suministrar el usuario al programa para poder resolver el requerimiento. En el requerimiento del ejemplo, si el usuario no da como entrada el nuevo salario que quiere asignar al empleado, el programa, no podr hacer el cambio.

    Un requerimiento puede tener cero o muchas entradas.

    Cada entrada debe tener un nombre que indique claramente su contenido. No es buena idea utilizar frases largas para defi nir una entrada.

    El resultado del requerimiento funcional de este ejemplo es una modifi cacin de un valor en el mundo del problema: el salario del empleado cambi.

    Un ejemplo de un requerimiento que calcula un valor podra ser aqul que informa la edad del empleado. Fjese que el hecho de calcular esta informacin no implica la modifi cacin de ningn valor del mundo del problema.

    Un ejemplo de un requerimiento que modifi ca y calcula a la vez, podra ser aqul que modifi ca el salario del empleado y calcula la nueva retencin en la fuente.

    R1: actualizar el salario bsico del empleado

    Permite modifi car el salario bsico del empleado

    El salario del empleado ha sido actualizado con el nuevo salario

    Nuevo salario

    Programacion022_087.indd 11 3/30/06 11:06:28 PM

  • 12

    FUN

    DA

    MEN

    TOS

    DE

    PRO

    GRA

    MA

    CI

    N. N

    IVEL

    1 En la etapa de anlisis, el cliente debe ayudarle al pro-gramador a concretar esta informacin. La responsabi-lidad del programador es garantizar que la informacin est completa y que sea clara. Cualquier persona que lea la especifi cacin del requerimiento debe entender lo mismo.

    Para determinar si algo es o no un requerimiento fun-cional, es conveniente hacerse tres preguntas:

    Poder realizar esta operacin es una de las razones por las cuales el cliente necesita construir un pro-grama? Esto descarta todas las opciones que estn relacionadas con el manejo de la interfaz (poder cambiar el tamao de la ventana, por ejemplo) y todos los requerimientos no funcionales, que no corresponden a operaciones sino a restricciones.

    La operacin no es ambigua? La idea es descartar que haya ms de una interpretacin posible de la operacin.

    La operacin tiene un comienzo y un fi n? Hay que descartar las operaciones que implican una respon-sabilidad continua (por ejemplo, mantener actua-lizada la informacin del empleado) y tratar de buscar operaciones puntuales que correspondan a acciones que puedan ser hechas por el usuario.

    Un requerimiento funcional se puede ver como un servicio que el programa le ofrece al usuario para resolver una parte del problema.

    Objetivo: Ilustrar la manera de documentar los requerimientos funcionales de un problema.A continuacin se presenta otro requerimiento funcional del caso de estudio del empleado, para el cual se especifi can los cuatro elementos que lo componen.

    Ejemplo 3

    Asociamos el identifi cador R2 con el requerimiento. En la mayora de los casos el identifi cador del requerimiento se asigna siguiendo alguna convencin defi nida por la empresa de desarrollo.

    Utilizamos el verbo ingresar para describir la operacin que se quiere hacer.

    Describimos la operacin, dando una idea global del tipo de informacin que se debe ingresar y del resultado obtenido.

    En este caso se necesitan seis entradas para poder realizar el requerimiento. Esta informacin la debe proveer el usuario al programa.

    Note que no se defi ne la manera en que dicha informacin ser ingresada por el usuario, puesto que eso va a depender del diseo que se haga de la interfaz, y ser una decisin que se tomar ms tarde en el proceso de desarrollo. Fjese que tampoco se habla del formato en el que va a entrar la informacin. Por ahora slo se necesita entender, de manera global, lo que el cliente quiere que el programa sea capaz de hacer.

    La operacin corresponde de nuevo a una modifi cacin de algn valor del mundo, puesto que con la informacin obtenida como entrada se quieren modifi car los datos del empleado.

    Nombre

    Resumen

    Entradas

    Resultado

    R2: ingresar la informacin del empleado

    Permite al usuario ingresar la informacin del empleado: datos personales y datos de vinculacin a la empresa.

    Nombre del empleado

    Apellido del empleado

    Sexo del empleado

    Fecha de nacimiento

    Fecha de ingreso a la compaa

    Salario bsico

    Nuevo salario

    Programacion022_087.indd 12 3/30/06 11:06:30 PM

  • 13

    JORG

    E A

    . VIL

    LALO

    BOS

    S. /

    RU

    BBY

    CA

    SALL

    AS

    G.

    En el CD que acompaa el libro, puede encontrar el formulario que debe llenar un programador para especifi car los requerimientos funcionales de un problema.

    Objetivo: Crear habilidad en la identifi cacin y especifi cacin de requerimientos funcionales.Para el caso de estudio 2, un simulador bancario, identifi que y especifi que tres requerimientos funcionales.

    Tarea 2

    Requerimiento funcional 1

    Nombre

    Resumen

    Entradas

    Resultado

    Requerimiento funcional 2

    Nombre

    Resumen

    Entradas

    Resultado

    Requerimiento funcional 3

    Nombre

    Resumen

    Entradas

    Resultado

    Programacion022_087.indd 13 3/30/06 11:06:32 PM

  • 14

    FUN

    DA