• No se han encontrado resultados

Manual Fundamentos de Programación 1.1(1)

N/A
N/A
Protected

Academic year: 2021

Share "Manual Fundamentos de Programación 1.1(1)"

Copied!
148
0
0

Texto completo

(1)
(2)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Manual para la asignatura de Fundamentos de Programación Versión 1.0. Santiago Marzo de 2012

Este material ha sido diseñado para el uso de los alumnos y profesores de la asignatura de Análisis y Diseño Orientado a Objetos de las carreras del área informática. Queda estrictamente prohibido el uso en otros cursos ya sean en línea o presenciales sin el consentimiento explícito de INACAP.

(3)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Agradecimientos.

Agradecemos a todas las personas que de forma directa o indirecta han colaborado en la elaboración de este manual.

De forma significativa agradecemos a los docentes de las sedes que nos han apoyado y colaborado con ejercicios y propuestas durante la presentación de este proyecto. Vayan nuestros sinceros agradecimientos a los siguientes docentes:

Cristian Leiva Marín, Miguel Palma Esquivel, Marcelo Montecinos Cabrera, Rodrigo Toledo de los Santos, Paola Cifuentes Berrios, Servando Campillay Briones, Emerson Ilaja Villarroel, Hugo Herrera Valenzuela, Fernando Santolaya, Manuel Morales, Roberto Pérez Fuentes, Fernando Neyra Castro, Victor Bórquez, Francisco Andrés Díaz Rojas, Ademar Araya Fuentes, Ricardo Vera Muñoz, Mauricio Torres Pizarro, Ernesto Ramos Vega, Alberto Garrido Burgos, Helton Bustos Sáez, Beatriz Contreras Guajardo, José Landeta Parra, Luis Pacheco Toro, Patricio Araya Castro, Iván Torres, Hinojoza Vega Mauricio, Yasna Hernández, Víctor Orellana, Rene Valderas Aros, Ricardo Toledo Barría, Cesar Eduardo Arce Jara, Luis Ponce Cuadra, Javier Miles Avello, Carolina Ehrmantraut Caballero, Pedro Alfonso Fuentealba Martínez, Jorge Hormazabal Valdés, Pedro Ernesto Ulloa Morales, María del Pilar Gallego Martínez, Claudio Fuenzalida Medina, María Encarnación Sepúlveda, Francisco San Martin, Christian Sarmiento Zampillo, Román Gajardo Robles, Ricardo

(4)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Hidalgo Hidalgo, Nelson Fredy Ganga Calderón, Manuel Reveco Cabellos, Jacqueline San Martin Grandon, Sergio Vergara Salvatierra, Pablo López Chacón, Cinthya Acosta, Jocelyn Oriana González Cortés, Carlos Felipe Alten López, Francisco Prieto Rossi, Giannina Costa Lizama, Christian Silva, Sebastián Pastén Díaz.

El aporte realizado por ustedes durante las jornadas de capacitación ha significado mejorar enormemente la calidad del material entregado.

(5)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Contenidos

Fundamentos del procesamiento de datos. ... 8

Conceptos básicos. ... 8

Dato ... 10

Proceso ... 10

Información. ... 12

Entrada y Salida. ... 12

Proceso manual de datos. ... 13

Proceso computacional de datos. ... 13

Estructura funcional de un computador. ... 14

Dispositivos de entrada y salida. ... 14

Unidades Internas. ... 15

Unidades externas de almacenamiento secundario. ... 16

Elementos o componentes de un procesamiento computacional de datos. ... 18

Plantilla para prueba manual o seguimiento de ejecución de una secuencia lógica. ... 22

Técnicas de algoritmos para el diseño de procesos computacionales. ... 26

Conceptos básicos. ... 26

Algoritmo. ... 26

Programa. ... 32

Etapas en la creación de programas. ... 32

Características de la programación. ... 39 Estructura descendente. ... 39 Modularidad. ... 40 Cohesión. ... 40 Acoplamiento. ... 41 Descomposición. ... 42 Estructura de un algoritmo. ... 43

Conceptos de variables y constantes. ... 44

Definición de variables y constantes. ... 44

(6)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Operadores Aritméticos. ... 60

Operadores unarios y de auto asignación ... 61

Operadores Lógicos ... 62

Introducción a lenguajes formales de Programación. ... 66

Estructura de un programa. ... 66

Sentencia condicionales ... 67

Anidada. ... 75

Múltiple ... 77

Sentencias de ciclo iterativo ... 79

While ... 80

For ... 81

Do … While. ... 85

Concepto de función ... 86

Estructura de una función ... 89

Procedimientos ... 89

Función ... 95

Llamada a una función ... 97

Arreglos ... 108

Unidimensionales ... 108

Arreglos de dos dimensiones. ... 111

Arreglos de arreglos. ... 113

Introducción a la Programación Orientada a Objeto. ... 117

Características generales de la programación orientada a objetos. ... 117

Qué es la programación orientada a objetos ... 117

Atributos ... 119 Comportamientos ... 120 Estados ... 121 Clase ... 122 Abstracción ... 126 Encapsulación ... 127 Herencia ... 128 Asociación. ... ¡Error! Marcador no definido.

(7)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Aplicaciones básicas ... 129 Seguridad en una clase ... 138 Get y Set. ... 142

(8)
(9)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Fundamentos del

procesamiento de datos.

A continuación vamos emprender un viaje sólo de ida, no te preocupes no se trata de un trágico final, es sólo de ida porque luego que conozcas todo lo que hay preparado para tí en las páginas venideras no querrás volver atrás. Durante este manual nos encargaremos, con tu ayuda y por supuesto la de tu profesor, de dar los primeros pasos para convertirte en un desarrollador de proyectos de tecnologías de la información, este manual es el primero de varios y en cada uno iremos agregando más dificultad, mayores novedades y elementos cada vez más sorprendentes.

Conceptos básicos.

Ahora nos referiremos a los fundamentos del procesamiento de datos, todos los programas computacionales tienen el mismo objetivo, primero obtener datos de entrada (por lo general desde un usuario), luego los almacena, después realiza algún procesamiento (cálculos, ordenamientos, etc) con ellos y finalmente entrega el resultado. El proceso es muy similar a cuando un detective está interrogando a un sospechoso en las películas, imagina esas típicas salas de interrogatorio y un detective como el de las series de los años ochenta, el cual está de pie y al frente el sospechoso sentado en una silla, cuando el detective se acerque a él, lo mire a los ojos y le diga “smith

(10)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

anderson”, el sospechoso recibirá esta información y realizará una búsqueda interna para luego de unos segundos de silencio dar el paradero de Smith y otra información relevante para su detención al detective, en este caso lo que el detective hace es recolectar datos durante su caso, pero estos datos por si sólo no permitirán resolverlo, por otra parte los datos son en realidad alguna característica de algo o alguien, Smith por ejemplo, es el nombre de una persona, pelo negro, 34 años, 1.72 metros son también datos que representan a una entidad, pero para que el detective resuelva el caso necesita del sospechoso a quien le dio los datos como una entrada para que así el sospechoso haga algún tipo de procesamiento con los datos, los cuales pueden ser una suma, restas o alguna otra operatoria como por ejemplo una búsqueda, a partir de este procesamiento interno, el sospechoso logró obtener la dirección de Smith la cual generó como una salida hacia el detective. Lo que ha recibido el detective a cambio de la entrega de datos es información relevante para él. Así como esta situación el software se comporta de forma muy similar piensa los últimos software que has usado, un ejemplo de ello es la calculadora de Windows a la cual le entregas datos de entrada, luego solicitas una operación y presiones el botón igual, esto da como resultado que la calculadora procese los datos y finalmente entregue el resultado. Veamos ahora otro ejemplo, en el caso de un videojuego, el cual parece ser tan distinto a una calculadora sigue los mismos principios, a través del

(11)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

joystick el usuario ingresa datos de entrada con los cuales especifica la dirección en la que desea moverse, el software recibe estos datos los almacena y los procesa, al final el software presenta al usuario la información solicitada en la cual el personaje se encuentra ahora en una posición distinta pero de acuerdo a lo que el usuario ha ingresado.

Este modelo es muy simple y consta de tres partes, dato, proceso e información, las cuales se definen a continuación.

Dato

Corresponde a un par ordenado de atributo con valor (atributo, valor) que representan el registro de un hecho importante para la organización en un momento determinado.

Un dato esta compuesto de dos partes, un atributo y un valor, el atributo define que es lo que deseo guardar y el valor define el tipo de valor asociado, es decir el tipo de datos y sus valores máximos y mínimos. Los datos siempre están formados por un par ordenado, ya que, sus partes por separado carecen de sentido.

Proceso

Corresponde a la aplicación de cálculos aritméticos, ordenamientos o algún otro tipo de manipulación de los datos y que a partir de ello genera información.

(12)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Veámoslo a través de un ejemplo, supongamos que tienes en tu closet una caja de películas, la forma en la que se han guardado las películas en la caja no ha sido mediante ningún orden, muy por el contrario han sido guardadas en el mismo orden que las has adquirido, por lo que hay dentro de la caja es un completo desorden que hace juego con el resto del closet. Para poder ver la película que tanto anhelas vas a tener que buscarla, este proceso comienza con un dato de entrada, para el cual vas a necesitar el nombre de la película (un dato), el cual puede ser por ejemplo:

Nombre película = hoy si estudiaré.

A partir de este dato el proceso que debes llevar puede variar según tu forma de hacer las cosas, un posible camino es hacer una comparación, proceso que consiste en tomar las películas una por una e ir comparando su nombre con el de la película que buscas hasta dar con ella, otro camino puede ser verificar si ellas se encuentran ordenadas, de ser así bastará con realizar una búsqueda basado en el alfabeto para dar con ella, de no estar ordenadas entonces podrías ordenarlas, así este proceso será más simple la próxima vez, el resultado de esta búsqueda será la película que deseas ver, adicionalmente un buen consejo será considerar mantener tu closet ordenado.

(13)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Información.

Mensaje válido para un receptor resultante del procesamiento de datos.

Debes considerar que no todo lo resultante de un proceso es información si esta no va dirigida a quien corresponde, por ejemplo, si vas caminando por afuera del aeropuerto y un mensaje que dice “se informa que el vuelo 345 tiene un retraso de 45 minutos”, sin duda eso es información y ha nacido desde el cálculo de la posición del vuelo, la distancia con el aeropuerto y la velocidad que lleva, sin embargo para ti que sólo buscas un taxi, esa información no te sirve, por ende deja de ser información para ti.

Entrada y Salida.

Como lo mencionamos al inicio los software llevan a cabo principalmente cuatro acciones: recibir datos de entrada, almacenarlos, procesarlos y entregar un resultado.

Muchas veces la palabra dato e información son utilizadas indistintamente, pero sin embargo en este contexto son muy distintas. Cuando un usuario interactúa con un software es el usuario el que provee de datos al programa, estos datos como la definición lo dice son la representación de una entidad, es decir son datos que representan el valor de una entidad, cuando estos datos son recibidos por el software este los almacena en la memoria, luego los toma, los procesa, es decir realiza algún tipo de cálculo en ellos para luego depositarlos nuevamente en la memoria. Podemos decir entonces que

(14)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

dato e información no son lo mismo, debido a que para que los datos se conviertan en información deben haber pasado primero por un procesamiento. En general los datos por si solos no sirven para tomar una decisión en cambio la información sí sirve para tomar decisiones.

Proceso manual de datos.

El procesamiento manual ha existido desde siempre y corresponde a toda transformación o cálculo que se realice con datos mediante cálculos mentales o con la utilización de lápiz y papel, esta técnica es muy propensa a errores sobre todo cuando se trata de realizar grandes cálculos o la clasificación y ordenación de un conjunto muy numeroso de datos. Adicionalmente el proceso se lleva a cabo de forma lenta, lo que produce que muchas veces sea una técnica poco viable para las empresas de hoy, las cuales procesan los datos de millones de personas.

Proceso computacional de datos.

El proceso computacional en cambio corresponde a la automatización de procesos comunes que en su comienzo solían hacerse con lápiz y papel, las operaciones aritméticas básicas fueron un comienzo y así la técnica ha ido refinándose hasta llegar a lo que hoy nos rodea: planillas de Excel, sistemas bancarios para llevar las cuentas de miles de clientes y reconocimiento facial o procesamiento de imágenes son algunos ejemplos, esto nace de la necesidad de que la información debe estar en el momento en que se necesita, imagina qué sucedería si

(15)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

tratásemos de llevar el censo de nuestro país utilizando el proceso manual, es probable que cuando los resultado estén listos la información generada no represente en lo absoluto la realidad nacional y por ello lo que en un momento hubiese sido información vital hoy es sólo un dato que no sirve.

Estructura funcional de un

computador.

Dispositivos de entrada y salida.

Si bien un software se basa en el procesamiento computacional de datos con el fin de entregar información no olvidemos que estos software se almacenan y ejecutan dentro de un computador, es por ello que los computadores deben proveer alguna forma en la que podamos comunicarnos con ellos, todo los computadores poseen lo que se conoce como periféricos los cuales podemos dividir en entrada y salida.

Los periféricos de entrada son todos aquellos dispositivos que permiten ingresar información, algunos ejemplos de ello son el teclado a través del cual digitamos, el mouse, un escáner el cual nos permite digitalizar las fotos o alguna imagen, el micrófono que utilizamos para chatear, o dictar un documento a nuestro computador.

Los periféricos de salida en cambio son todos aquellos dispositivos que permiten al computador emitir información que ha procesado producto de los datos que

(16)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

hemos ingresado, probablemente el más utilizado de todos sea el monitor, en la cual el computador nos muestra la información requerida, otros ejemplos son la impresora, la que nos permite obtener la información en papel o los parlantes, que emiten sonidos según lo que le pidamos o hagamos.

Unidades Internas.

En un computador el encargado de procesar toda la información es la Unidad Central de Proceso CPU (Central Processing Unit). Esta unidad es la encargada del control y de la ejecución de las operaciones del sistema, también lo conocemos como el microprocesador.

Las actividades que realiza la CPU son:

 Ejecutar las instrucciones de los programas

almacenados en la memoria.

 Controlar la transferencia entre la CPU y la memoria.  Responder a las peticiones realizadas por algún periférico.

Unidad de control.

Coordina las actividades del computador y determina qué operaciones se deben realizar y en qué orden; así mismo controla todo el proceso del equipo.

(17)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Unidad Aritmética-lógica

Realiza operaciones aritméticas y lógicas, entre las operaciones aritméticas se encuentras las sumas o restas y en las lógicas las comparaciones del tipo mayor, menor, igual, etc.

Unidad de almacenamiento principal.

Es la parte de la CPU en la que se encuentran almacenadas las instrucciones y todos los datos que necesarios para llevar a cabo un proceso, esta memoria es temporal, esto quiere decir que si apagas el equipo toda la información alojada ahí es eliminada, el procesador usa esta memoria debido a que es un lugar a la que puede acceder más rápido, es por esto que los datos son cargados aquí como paso previo a su ejecución. La unidad de almacenamiento principal es popularmente conocida como memoria RAM.

Unidades externas de

almacenamiento secundario.

Adicional a los datos que el computador almacena de forma temporal para su procesamiento, existen dispositivos de almacenamiento que permiten que la información perdure en el tiempo y que se encuentran fuera del equipo, algunos ejemplo de ellos son el CD, DVD, blueray o memorias flash, en ellos se almacenan datos que podrán ser procesados más adelante y su almacenamiento es permanente e independiente de si el computador está prendido o apagado.

(18)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Para ayudarte a comprender mejor cómo el computador utiliza los dispositivos de almacenamiento veámoslo con una simple analogía. Supongamos que tú eres el procesador y tu misión hoy es recolectar un conjunto de datos históricos para procesarlos y crear con ellos un resumen de historia, el cual contiene información relevante para quien lo solicitó, muy lejos de la silla y el escritorios donde te encuentras hay un estante llenos de libro, los cuales siempre están allí, este estante es el equivalente al disco duro de tu computador, pero imagina tuvieses que levantarte de la silla, ir hasta el estante, tomar un libro, volver a tu silla, buscar lo que necesitas y luego volver a dejarlo al estante para luego complementar el informe con otro libro ¿lento verdad? Entonces al igual que tú, el computador necesita traer un conjunto de datos para mantenerlos temporalmente más cerca, entonces ese rol lo jugará el escritorio, de esta forma te acercarás al estante y traerás en uno o más viajes todos los libros que necesites y lo dejarás sobre tu escritorio, de esta forma no necesitarás levantarte tan seguido, nuestro escritorio es el equivalente a la memoria RAM, por lo que también podemos afirmar que mientras más memoria RAM tengamos mejor rendimiento tendremos, ya que podremos almacenar y dejar más información allí, ahora que mantenemos los datos cerca, para que puedas leer y producir un resumen con tu cerebro (equivalente al procesador de tu PC), necesitarás acercar los libros que tienes en tu escritorio, lo recogerás con la mano para de esta forma logrado acercar más la

(19)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

información, así estará lista para ser leída y procesada por tí, tu mano en esta analogía es el equivalente a la memoria cache de tu procesador, cuando hayas finalizado tu informe todo lo que se encuentra en tu mano y escritorio desaparecerá, pero volverá a quedar de forma permanente en tu estante, esto se debe a que tu mano y el escritorio almacenan información sólo de forma temporal, en el computador la RAM y la CACHE se comportan de la misma forma y existen con el fin de acercar la información hacia el procesador, dado que es más rápida su lectura desde allí, sin embargo este tipo de memoria mientras más rápida suele ser más pequeña, al igual que la proporción entre tu mano, escritorio y estante, que adicionalmente va desde la más asequible a la más distante, siendo la mano la unidad de almacenamiento más pequeña y el estante la más grande.

Elementos o componentes de

un procesamiento

computacional de datos.

Cuando analices un proceso o un sistema, siempre debes prestar atención a las etapas o acciones que se ejecutan en el sistema que estás analizando. Recuerda que los sistemas están compuestos de una serie de elementos que interactúan entre sí para lograr un propósito. Para lograr este propósito cada uno de los objetos detectados en el proceso realizan un conjunto de acciones. Para

(20)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

poder realizar estas acciones, las partes componentes necesitan datos de entrada. Estos datos son la materia prima con la cual los objetos realizan sus acciones. Una vez que reciben los datos, los objetos realizan las acciones para las cuales fueron creados, generando un resultado que se conoce como dato de salida. Podemos analizar las acciones que realiza un objeto como una caja negra es decir sabemos lo que entra y el resultado del proceso pero no lo que sucede adentro. Por ejemplo si utilizo un reproductor de DVD, los datos de entrada están contenidos en el disco que ingreso al equipo, y la salida será la imagen y el audio, pero el proceso es desconocido y por lo demás no me interesa, pues sólo quiero ver el DVD no construir un reproductor.

Ahora si mi necesidad aumenta y además de usar un reproductor de DVD ahora quiero construir uno, entonces debo conocer qué es lo que hace el dispositivo con los datos que están en el disco para generar la imagen y el audio, esto se conoce como procesamiento de los datos, el cual básicamente consiste en leer los datos, ordenarlos y guardarlos, procesarlos y finalmente generar una salida.

El procesamiento de los datos está asociado a la toma de decisiones, que se estructuran básicamente siguiendo una serie de reglas y condiciones que en lenguaje informático se conocen como reglas del negocio. Estas reglas y condiciones se basan en la definición de cómo se debe comportar el sistema para tratar los datos que entran a ser procesados. Veamos un ejemplo,

(21)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

supongamos que tienes un teléfono celular de prepago y debes cargarle dinero cada cierto tiempo para poder realizar llamadas. Analicemos el proceso de carga de dinero con un poco más de detalle ¿Qué datos de entrada necesitamos?, si dices que lo que necesitas es solamente el dinero que vas a cargar, es correcto, pero ¿eso es todo?, pensemos un poco más en detalle y pongámonos en algunos casos especiales, ¿es tu teléfono el único teléfono en el sistema?, claramente no por lo tanto es necesario identificar a qué teléfono quieres cargar el dinero, ahí aparece un nuevo dato que es el número de teléfono. Por lo tanto ahora ya tenemos los siguientes datos de entrada, el número de teléfono y el monto de dinero que vas a cargar. Ahora la pregunta es la siguiente, ¿que hace el sistema con los datos de entrada?, una respuesta acertada sería decir que suma al saldo anterior el valor que se está cargando, pero ¿a cual de todos los teléfonos que existen lo carga?, entonces ahí determinamos que primero hay que buscar la información asociada al teléfono y luego sumar el valor al saldo de dinero que tiene el teléfono. Así determinamos que el proceso se define en dos pasos:

1. Buscar los datos del teléfono usando el número. 2. Sumar el valor a cargar al saldo existente.

Si te fijas ya estamos avanzando, pero ahora comienzan a surgir algunos inconvenientes, supongamos que buscas los datos del teléfono y te das cuenta que no es un teléfono de prepago sino que uno con plan, entonces ¿Qué haces?, si te fijas debes tomar un decisión usando

(22)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

una regla, pensemos que hacer, ¿todos los teléfonos tienen el mismo plan?, la respuesta es no, de hecho existen básicamente tres planes, prepago, cuenta controlada y plan ilimitado, sólo a los dos primeros se les puede cargar dinero, pero bajo circunstancias distintas, al plan de cuenta controlada sólo le puedes cargar más dinero cuando se ha acabado el dinero anterior, mientras que al de prepago se le puede cargar en cualquier momento y si tienes plan ilimitado no le puedes cargar dinero. Con estos datos del proceso completo podemos definir que las condiciones son las siguientes:

1. Buscar los datos del teléfono usando el número. 2. Identificar si el teléfono tiene plan ilimitado. 3. Si lo tiene no se le puede cargar dinero.

4. Si no tiene plan ilimitado entonces hay que saber si el teléfono tiene plan de cuenta controlada.

5. Si tiene plan de cuenta controlada, debemos fijarnos en el saldo y ver si aún tiene.

6. Si tiene plan de cuenta controlada y tiene saldo no podemos cargar dinero.

7. Si tiene plan de cuenta controlada y no tiene saldo, entonces podemos cargar el dinero.

8. Si no tiene plan de cuenta controlada entonces sumamos inmediatamente el dinero al saldo anterior. Ahora sólo nos queda analizar cuál es la salida resultante de este proceso. Si analizamos con detención el objetivo del proceso es cargar dinero a tu teléfono celular, así podríamos definir dos posibles salidas, que son:

(23)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

a) Un mensaje que diga que el proceso se realizó de forma correcta o incorrecta.

b) El nuevo saldo luego de realizada la carga.

Analicemos el primer caso, si el proceso nos devuelve un mensaje ¿Podremos conocer el nuevo saldo?, la respuesta en este caso es no.

Si devolvemos el nuevo saldo ¿Podemos saber si el proceso se realizó de forma correcta?, la respuesta en este caso es si, pero depende de un factor que es el conocer de antemano el saldo que tenía, así si al iniciar el proceso tenía 0 peso y luego de cargar 2000, tengo en mi saldo 2000 es que se realizó el proceso son éxito.

Cabe destacar que ninguna de las soluciones es correcta y ninguna es incorrecta, pues ambas dependen de datos que faltan en la definición del contexto del problema.

Plantilla para prueba manual o

seguimiento de ejecución de

una secuencia lógica.

Si bien la resolución de problemas simples como el planteado anteriormente pudiera parecer una tarea sencilla y libre de complejidades a veces es necesario corroborar si el proceso que hemos definido está correcto y podemos obtener el resultado deseado a través de lo que se conoce como una traza, es decir el seguimiento de los valores que nos interesa controlar y el comportamiento que vaya a tener el sistema en función de estos valores.

(24)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Para hacer la traza de un programa se van anotando los valores que nos interesa controlar y qué es lo que sucede cuando esos valores cambian asociándolos a las decisiones que se realizan durante el proceso. Muchas veces se elabora una tabla para hacer la traza y registrar los valores de forma ordenada asociados a cada uno de los procesos y además se realiza una tabla para cada uno de los distintos cursos que pueda tomar la operación. Por ejemplo si hacemos la traza del ejemplo anterior de carga del teléfono podríamos dibujar la siguiente tabla:

Datos de control

Acciones Nro de

teléfono

Valor a cargar Tipo Plan Saldo Buscar los datos

del teléfono

84480965 3500 Ilimitado 0 ¿El teléfono tiene

plan ilimitado? Ilimitado 0 Salida 0 Datos de control Acciones Nro de teléfono

Valor a cargar Tipo Plan Saldo Buscar los datos

del teléfono 84480965 3500 Cuenta Controlada 0 ¿El teléfono tiene plan ilimitado? Cuenta Controlada 0 ¿Tiene cuenta controlada y su saldo es 0? Cuenta Controlada 3500 Salida 3500 Datos de control Acciones Nro de teléfono

Valor a cargar Tipo Plan Saldo Buscar los datos del

teléfono

(25)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES ¿El teléfono tiene

plan ilimitado? Prepago 1000 ¿Tiene cuenta controlada y su saldo es 0? Prepago 1000 ¿Tiene cuenta controlada y su saldo es mayor a 0? Prepago 1000

¿Es de prepago? Prepago

Salida 4500

Si te fijas en las tablas anteriores hay un conjunto de preguntas que generan una respuesta basándose en los valores proporcionados a la función. Para cada grupo de preguntas y respuestas se realiza alguna acción o acciones que llevan al resultado expresado en la salida.

Datos de control

Acciones Nro de teléfono Valor a cargar Tipo Plan Saldo Buscar los datos

del teléfono

84480965 3500 Cuenta

Controlada

1000 ¿El teléfono tiene

plan ilimitado?

Cuenta Controlada

1000 ¿Si tiene cuenta

controlada su saldo es 0? Cuenta Controlada 1000 Salida 1000

(26)
(27)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Técnicas de algoritmos para

el diseño de procesos

computacionales.

Conceptos básicos.

Algoritmo.

La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX.

Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir para dar solución a un problema específico.

Otra definición más específica es: Conjunto de pasos finitos no ambiguos que permitan dar solución a un problema específico.

A simple vista la definición formal de algoritmo puede no ser tan clara por si sola, pero verás que un algoritmo es algo que ya conoces y lo mejor es que durante toda tu vida has ejecutado varios algoritmos sin darte cuenta, comencemos con un ejemplo básico, ¿has jugado alguna vez a encontrar el tesoro pirata siguiendo un mapa? Aquel papelito de color café que dando un par de pasos en varias direcciones te lleva a un lugar que marca una X, pues aquel papel lo que tiene escrito dentro en realidad es un algoritmo. veamos por qué: primero el

(28)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

papel nos señala el lugar de inicio, luego de ello las instrucciones que sigues dicen algo así como “dos pasos a la derecha”, “un paso a la izquierda”, este tipo de instrucciones son un conjunto de pasos finitos, dado que no son interminables, tiene un punto de comienzo (donde obliga a ubicarte) y un final (donde marca la X), tampoco son ambiguos por que no hay doble interpretación para cada una de ellas, finalmente si sigues todas las instrucciones en orden encontrarás el lugar donde esta la X, entonces también podemos aseverar que estos pasos sirven para resolver un problema especifico, el cual nos indica el camino desde un punto hasta otro, donde debajo de la gran X probablemente nos esperen algunas monedas de oro.

Sin embargo y siguiendo este criterio muchas actividades van a comenzar a parecer un algoritmo y de hecho es muy probable que lo sean, sin embargo no todo es un algoritmo y es bueno que también sepamos reconocer lo que no lo es, supongamos que estas viendo un programa de televisión donde están dictando una receta para cocinar un rico pastel bañado en chocolate, esta receta será entonces un algoritmo si los pasos de la preparación especifican los factores de tiempo y material que se deben utilizar en cada uno de ellos, si en determinado momento entre el listado de actividades que hay que realizar existe alguno que diga algo así como “agregue azúcar a gusto” el conjunto de instrucciones dejará de ser un algoritmo, debido a que existe un paso ambiguo.

(29)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

En informática el algoritmo es una de las piezas fundamentales en el desarrollo de software ya que el computador responderá a algoritmos que nosotros diseñemos y pediremos a él que ejecute, para ello lo haremos a través de los lenguajes que el computador entiende, los cuales irás aprendiendo durante el desarrollo de tu carrera.

Todo lo que ejecuta el computador son algoritmos, un buen diseño de un algoritmo hace mejor y más rápido a un programa, ¿te has detenido alguna vez a pensar ¿cómo la calculadora resuelve las operaciones encomendadas?, es probable que no, pero de lo que sí podemos estar seguros es que la calculadora es una gran ejecutora de algoritmos, ya que cada calculo matemático es resuelto mediante algoritmos, es decir pasos que ya están definidos para resolver una operación, de ellos podemos destacar el cálculo del potencial, el cual es un algoritmo muy popular, que da solución a cálculos como por ejemplo 24 =16. Otro algoritmo famoso es el de Dijkstra, este algoritmo es el encargado de encontrar la ruta más corta entre dos puntos, es muy posible que lo hayas visto sin saberlo en los video juegos, ya que este algoritmo es el encargado de hacer que tus tropas avancen desde un punto hacia otro buscando el mejor camino en muchos juegos de estrategia

Hacer buenos algoritmos no es una tarea sencilla, requiere de práctica y mucha lógica, durante este manual vas aprender a desarrollar tu lógica y comprender qué partes componen el problema que deseas solucionar,

(30)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

cuáles son los datos de entrada y cuál es el conjunto de pasos que debes aplicar sobre los datos para generar el resultado deseado, el cuál no es otra cosa que información para la persona que lo solicita, también aprenderás a cómo optimizar los algoritmos, para que tengas una idea, la optimización corresponde a la capacidad de lograr reducir la cantidad de pasos para solucionar el mismo problema, una de las cosas interesantes que tienen los algoritmos es que existe muchas formas de solucionar un mismo problema, con el tiempo te darás cuenta que incluso habrán ocasiones en las que para un ejercicio dado todos tu compañeros tendrán eventualmente una solución distinta.

Tipos de Algoritmos

Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.

Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.

Lenguajes Algorítmicos. Es una serie de símbolos y reglas que se utilizan para describir de manera explícita un proceso. Hay dos tipos:

Gráficos: Es la representación gráfica de las operaciones que realiza un algoritmo. Ejemplo: Diagrama De Flujo, DFD.

No Gráficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo. Ejemplo: Pseudocódigo.

(31)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Características de un buen algoritmo.

 Debe tener un punto único de inicio.

 Debe ser definido, no debe permitir dobles

interpretaciones.

 Debe ser general, es decir, soportar la mayoría de las variantes que se puedan presentar en la definición del problema.

 Debe ser finito en tamaño y tiempo de ejecución. Es decir, debe tener un fin.

Diagrama de flujo

Para el diseño de algoritmos se utilizan técnicas de representación. Una de estas técnicas son los Diagramas de Flujo (DDF), que se definen como la representación gráfica que mediante el uso de símbolos estándar unidos mediante líneas de flujo, muestran la secuencia lógica de las operaciones o acciones que debe realizar un computador, así como la corriente o flujo de datos en la resolución de problema.

Pseudocódigo.

El escribir aplicaciones computacionales se necesita entregar al computador una serie de instrucciones las cuales serán ejecutadas por este. Para realizar este proceso se inventaron los lenguajes de programación mediante los cuales el programador escribe las instrucciones para que el computador realice las acciones correspondientes, el programador escribe estas

(32)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

instrucciones las cuales son interpretadas y luego compiladas (transformadas en un lenguaje que entiende el computador llamado lenguaje de máquina), para que con el resultado de este proceso pueda ejecutar las instrucciones.

Ahora como los lenguajes de programación a veces son muy complejos de aprender, existe un subconjunto de lenguajes más básicos que se llaman pseudolenguajes, los cuales permiten generar pseudocódigo. El pseudolenguaje generalmente es un subconjunto de un lenguaje de programación que es muy extenso, o a veces también se trata de un lenguaje que ocupa expresiones que son más cercanas al lenguaje de las personas, pues en todos los lenguajes de programación las instrucciones están en inglés. Si bien existe una cercanía mayor con el lenguaje con el que hablas (en este caso español), existe la complejidad posterior de tener que aprender de nuevo otro lenguaje de programación. Para efectos de este manual, ocuparemos un lenguaje de programación llamado java el cual tiene una sintaxis relativamente simple. Adicionalmente la sintaxis de java esta basada en un lenguaje de programación denominado C que es el padre de los lenguajes más utilizados: C++, javascript, java, c#, actionscript, php, entre otros, que utilizarás durante el desarrollo de tu carrera.

(33)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Programa.

Conjunto de órdenes o instrucciones capaces de manipular un conjunto de datos. Estas órdenes pueden ser divididas en tres grandes bloques claramente diferenciables, estos son:

• Entrada de datos: En este bloque se engloban todas aquellas instrucciones que toman datos de un dispositivo o periférico externo, depositándolos en la memoria principal del computador para ser procesados.

• Proceso: Engloban todas aquellas instrucciones encargadas de modificar los datos que previamente habían sido depositados en la memoria principal. Todos los resultados obtenidos en el tratamiento de dichos datos son depositados nuevamente en la memoria principal quedando de esta manera disponible.

• Salida de resultados: Es el conjunto de instrucciones que toman los resultados finales desde la memoria principal y lo envían a dispositivos externos.

Etapas en la creación de

programas.

Durante el desarrollo hay un conjunto de etapas que sin importar el tipo de software que desee crearse siempre se repiten, ya sea desde un programa muy simple como una calculadora con las operaciones básicas, hasta completos sistemas de cálculos en tiempo real. Estas

(34)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

etapas serán definidas y explicadas en forma lineal, sin embargo en el desarrollo real no significa que este sea un orden estricto y que no haya vuelta atrás, muy por el contrario, en muchas ocasiones cuando ya se piensa que se ha superado por completo una etapa es necesario volver atrás, agregar o corregir algo que se nos pasó para luego volver a la etapa siguiente. Otra cosa importante, es que en algunas ocasiones también se da que las etapas se solapan, vale decir, que antes de finalizar una es posible avanzar en algunos puntos de la que viene, esto suele ser útil para comenzar a dimensionar si lo que estamos haciendo esta correcto.

Requisitos.

Los requisitos de software son especificaciones claras y puntuales sobre lo que debe contener un software para cumplir con algún requerimiento.

Es habitual que las personas confundan requisito con requerimiento, incluso una discusión de ello se encuentra en el manual de análisis y diseño orientado a objetos dentro del capitulo de ingeniería de requerimientos, pues bien, en ese capítulo se habla de la necesidad de extraer la información sobre los procesos que realizan los clientes los cuales luego queremos construir como software más adelante, dichas necesidades son requerimientos y están asociados a las necesidades que tiene la empresa y que luego resolveremos o apoyaremos con un software, un requisito en cambio está más bien asociado a lo que debe

(35)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

hacer un software para que en su funcionamiento cumpla con lo que deseamos construir, veámoslo con un ejemplo: si deseas construir un software para apoyar el proceso de venta de juguetes, estamos hablando de un requerimiento, sin embargo, cuando dices que tu software necesita validar que el método de pago sea sólo en pesos chilenos, entonces estamos hablando de un requisito del software, los cuales en su conjunto debiesen alinearse con los requerimientos.

Una forma fácil de recordar la diferencia es mirar la contratapa de algún software que hayas comprado alguna vez, allí veras los requisitos mínimos necesarios para se ejecución y que por tanto están absolutamente ligado a una pre condición del software, no del proceso que desea resolver.

Análisis.

En la etapa de análisis es en la que recopilamos todos los requisitos necesarios para desarrollar el software, los analizamos y buscamos restricciones que deban ser aplicadas por el software. Este análisis es recomendable hacerlo en equipo, para ello los encargados cuentan con un conjunto de diagramas que les permiten dibujar los procesos que desean construir antes de comenzar a desarrollar la aplicación. Esta etapa es fundamental en el ciclo de desarrollo de un software, un mal análisis de los requisitos podría tirar por la borda el esfuerzo de mucho tiempo.

(36)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Diseño de la solución.

En el diseño de la solución es el momento en el que se planifica la arquitectura de lo que se desea construir, el diseño de una aplicación abarca varios temas, algunos mucho más complejos que otros, donde todo dependerá del tipo de aplicación que deseamos construir.

Durante esta asignatura el diseño que abarcaremos estará principalmente enfocado a cómo organizaremos el código dentro de una sola aplicación, tal vez por ahora sea complicado de comprender, pero pequeñas rutinas de código con el tiempo las iremos organizando y agrupando en métodos, donde cada uno de estos métodos representa un proceso, es decir una entrada de datos, algún conjunto de operaciones aritméticos y lógicos que aplicaremos sobre ellos, para luego generar una salida. En la medida que vayamos aprendiendo resolveremos ejercicios más complejos donde para llegar a una solución necesitaremos crear varios procesos, los cuales agruparemos en una entidad mayor llamada clase, dichas clases y sus métodos (o comportamientos) dibujaremos en un diagrama llamado “diagrama de clases”.

El diseño no sólo se refiere a cómo organizaremos los componentes internos de un programa, hay ocasiones en que una solución consta de más de un programa, por ejemplo, hay redes sociales que tienen un componente Web y otro en equipos móviles, en este caso el diseño

(37)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

también debe incorporar la forma en que ambos software se comunicarán.

Otro aspecto que también se refiere al diseño, es la forma en que los componentes se instalarán. Muchas veces los software están diseñados para recibir grandes cargas de datos o altos niveles de tráfico de usuarios y están ejecutándose sobre más de un equipo, por lo que en estas ocasiones, el diseño también esta ligado al hardware en el que se ejecutará. Conocer esto a tiempo, nos dará una pauta de la forma lógica en la que debemos construirlo.

Codificación.

Esta etapa se refiere a la construcción del software, es el equivalente a comenzar a levantar los cimientos de una casa luego de que ha sido diseñada. La codificación es un proceso que no debiese generar problemas si el análisis de requisitos ha sido realizado correctamente y si los programadores están guiándose por un diseño (diagrama de clases) que ha sido discutido y aprobado por el equipo responsable.

Durante esta etapa los programadores deberán idear los algoritmos que permitan solucionar cada uno de los objetivos planteados en el diseño de la solución y la comunicación entre las partes.

Durante la codificación utilizaremos algún lenguaje de programación que nos permita comunicarnos con la

(38)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

máquina, la elección del lenguaje es una conversación que da para mucho, pero por lo general depende de las prestaciones que nos da la tecnología que la rodea, de las restricciones y aunque no debiese ser una limitante, muchas veces influye su valor.

Prueba.

Las pruebas corresponden a la etapa de la post construcción, aquí es donde probamos lo que hemos construido. Para iniciar las pruebas no es necesario terminar el software completo, los programadores suelen hacer muchas pruebas de cada método que han construido con el fin de determinar si sus algoritmos hacen lo que se espera de ellos. A estas pruebas se les llama prueba unitaria y consiste básicamente en ingresar datos de entrada y verificar que la salida sea la esperada, además suelen hacerse durante todo el periodo de codificación.

Adicionalmente, existen otros tipos de pruebas que tienen relación con la cantidad de recursos que un software utiliza, esta tarea por lo general realizada por el departamento de “aseguramiento de la calidad” realiza tareas como la revisión de la carga del procesador y los tiempos de respuesta de la aplicación.

(39)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Mantención.

La mantención del software es un proceso que se realiza post entrega y corresponde a modificaciones posteriores. Las mantenciones siempre nacen a causa del cambio de un proceso en la organización del cliente que lo ha solicitado. Las mantenciones pueden ser una buena fuente de ingreso posterior a la venta, ya que casi siempre las mantenciones son realizadas por la misma empresa desarrolladora, sin embargo en otras pueden convertirse en un gran dolor de cabeza cuando el software ha sido construido de forma poco modular (divididos en sub programas), la mantención se vuelve muy dificultosa y los cambios en una parte comienzan a provocar errores en otros. Algunos paradigmas de programación como la programación orientada a objetos (POO) aporta mucho a la facilidad de mantener sistemas, ya que divide los procesos en procesos más pequeños y luego los agrupa con un nombre que los represente, de esta forma es más sencillo ubicar donde hay que realizar el cambio y cuales son los datos de entrada y salida esperados.

(40)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Características de la

programación.

Estructura descendente.

En la etapa de análisis se determina que hace el programa, en la etapa de diseño se determina cómo hace el programa la tarea solicitada. Con el objetivo de hacer el proceso de la resolución de problemas más eficaz es que se utiliza el proceso de diseño conocido como “divide y vencerás”. Esto quiere decir que la resolución de problemas complejos se realizan dividiendo dicho problema en subproblemas y a continuación dividir dichos subproblemas en otros de nivel más bajo hasta que pueda ser implementada la solución. La solución de estos subproblemas se realiza con subalgoritmos. Los subalgoritmos son unidades de programa o módulos que están diseñados para ejecutar alguna tarea específica. Estas unidades (las que distinguiremos como “Funciones” y “Procedimientos” y que estudiaremos en profundidad más adelante) se escriben sólo una vez, pero pueden ser invocadas o referenciadas en diferentes puntos del programa o “módulo principal” con el objeto de no duplicar el código innecesariamente. Este método de diseñar algoritmos con el proceso de “romper” el problema subdividiéndolo en varios subproblemas se denomina “diseño descendente”, “TOP-DOWN” o “Modular” y en cada etapa, expresar cada paso en forma más detallada se denomina “refinamiento sucesivo” . Cada subprograma es resuelto en un módulo que tiene

(41)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

un único punto de entrada y un solo punto de salida. Los módulos pueden ser planeados, codificados, comprobados y depurados de forma individual (hasta por programadores distintos) y combinarlos mas tarde lo que implica la combinación de los siguientes pasos:

 Programar un módulo.  Comprobar el módulo.  Depurar el módulo

 Combinar el módulo con los demás.

Esta técnica es utilizada hoy en casi todas las disciplinas, en programación existe más de un paradigma (una forma o modelo de cómo hacer las cosas).

Modularidad.

El concepto de modularidad en programación esta directamente asociado al divide y vencerás. Este concepto hoy está fuertemente asociado al paradigma de programación orientado a objetos, el cual tiene como principio dividir la funcionalidad de un programa en programas más pequeños de manera en que ellos sean lo más independientes posible.

Cohesión.

Este término tiene relación con la capacidad de unir las partes, la palabra cohesión es sinónimo de adhesión, por lo tanto estamos hablando de la unión de partes. En la

(42)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

programación siempre se busca hacer todo modular, es decir tomar un gran software y construirlo de pequeñas partes que ojalá fuesen funcionales de forma independiente, sin embargo si vamos a programar de esa manera hay que pensar después en como unir todo, a este concepto se le llama cohesión y se dice que un software tiene una alta cohesión cuando la llamada a una de esas partes la realiza una que contiene toda la información para ello.

Acoplamiento.

El acoplamiento esta muy ligado a la cohesión, cuando un software se encuentra dividido en partes y estas partes son unidas de forma correcta estamos hablando de una alta cohesión entre las partes, cuando esto esta presente en un software de forma automática decimos entonces que nuestro programa tiene un bajo nivel de acoplamiento, lo que es muy bueno, ya que esto quiere decir que las partes no son dependientes entre sí, por tanto, una modificación en un proceso sólo afectará a alguna de las piezas del software y no al 100%, evitando volver a modificar partes que si funcionan y cuya función no se ve alterada.

(43)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Descomposición.

La descomposición es una característica que permite “desarmar” un problema complejo en una serie de subproblemas que por el hecho de ser partes reducidas de un todo, pierden complejidad. Esta pérdida de complejidad nos permite concentrarnos en una parte específica del problema utilizando el concepto de “divide y vencerás”.

(44)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Estructura de un algoritmo.

Los algoritmos se definen como una serie de pasos bien definidos y finitos que permiten solucionar un problema para cualquier tipo de valores.

Básicamente un algoritmo permite definir las acciones que se deben realizar para solucionar un problema.

Existe una serie de acciones que acciones que se realizan para dar solución a un problema, por ejemplo declarar variables, leer datos desde teclado, mostrar datos en una pantalla, etc. Esta serie de acciones se ordenan

lógicamente para solucionar un problema. Un ejemplo de la definición de la estructura de un algoritmo es el

siguiente:

1. Leer el pedido.

2. Examinar el historial de crédito del cliente. 3. Si el cliente es solvente, entregar el pedido. 4. En caso contrario, rechazarlo.

5. Fin.

Si te fijas en el ejemplo anterior, existe una serie de

pasos formales para dar solución a un problema que en el caso anterior es tomar una decisión respecto a si se

entrega o no un pedido a un cliente utilizando el historial de crédito que posee.

(45)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Conceptos de variables y

constantes.

Definición de variables y

constantes.

Cuando creamos software, los datos que van a ser procesados, se deben guardar de forma temporal para ser procesados por la aplicación. El programa por lo tanto debe solicitar al sistema operativo que defina un espacio en la memoria donde guardar estos datos. Para esto los lenguajes de programación definen una forma de reservar este espacio y es mediante la declaración de variables y constantes. Cuando se declara una variable o una constante, se realiza el proceso de solicitar un espacio en la memoria del computador para almacenar valores que representan datos que queremos procesar. El problema surge cuando nos damos cuenta que el espacio en la memoria del computador es limitado, por lo tanto el sistema operativo para proteger la ejecución de múltiples programas nos solicita que pidamos un espacio específico, en función de lo que vamos a guardar, por ejemplo si tengo que construir un lugar para guardar mi auto, no construyo un galpón para guardar un avión, porque lo más probable es que no ocupe todo el espacio y quede con mucho espacio sin utilizar, de la misma forma que no construyo un galpón para guardar una moto, pues lo que necesito guardar es un auto. Por lo tanto para indicar al sistema operativo cual es el espacio

(46)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

que se debe dejar disponible para guardar datos, los lenguajes de programación definen los tipos de datos. Un tipo de dato por lo tanto permite definir el espacio en la memoria que el sistema operativo reservará para guardar datos que serán procesados por un software. En java los tipos de datos se pueden catalogar básicamente en dos grupos, los primitivos (o simples) y las referencias a objetos.

Primitivos

Los tipos de datos primitivos son aquellos que pueden utilizarse directamente en un programa sin necesidad de utilizar POO, dado que no son objetos, los tipos de datos primitivos aportan un uso más eficiente en el almacenamiento de datos y pueden ser divididos en dos grupos, los booleanos y numéricos, los cuales se subdividen en dos grupos, los enteros (byte, short, int, long y char) y los reales (float y double).

(Importante) la declaración de una variable utiliza la siguiente sintaxis: Tipo de dato identificador = [valor][, identificador] [=valor]… ;

En java los identificadores también tienen una norma. La forma correcta de declarar una variable es escribiéndola con minúsculas y las mayúsculas sólo se utilizan en la primera letra a partir de la segunda palabra si es que la hay, por ejemplo el identificador “miVariable” lleva la letra “V” con mayúscula debido a que es una palabra

(47)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

escrita después de “mi” lo mismo sucede con “miPrimeraVariable”, donde tanto P como V van con mayúsculas

byte:

El byte es una variable que tiene una capacidad de 8 bits y permite almacenar un valor de tipo entero (sin decimales) entre el -128 y + 127. El siguiente ejemplo declara la variable y luego le asigna el valor de cero, cuando un valor es dado de forma inicial recibe el nombre de inicialización de la variable.

byte dia=0;

(Importante) las variables pueden ser inicializadas con un valor (cero en este caso) o una expresión. Se entiende por expresión un conjunto de operadores que dan un resultado, pudiendo así declarar byte (o cualquier otro tipo de dato) de la siguiente forma:

byte a = 1+1*2; también debes tener en cuenta que las variables numéricas no inicializadas comienzan en cero.

Short:

El short tiene una capacidad de 16 bits y permite almacenar un valor entero entre -32768 y +32767 (al igual que el entero en C). La siguiente línea de código declara e inicializa dos variables.

(48)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Int:

El tipo de dato entero tiene una capacidad de 32 bits y permite almacenar un valor entero entre -2147483648 y +2147483647.

Long:

El tipo de dato long tiene una capacidad de 64 bits y permite almacenar un valor entero entre

-9.223.372.036.854.775.808 y

+9.223.372.036.854.775.809

Float:

El tipo de dato float tiene una capacidad de 32 bits y permite almacenar un valor real en coma flotante (decimales) entre -3,4*10-38 hasta 3,4*1038 . Los valores expresados en float deben ir acompañados de una letra f minúscula al final.

(49)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

Double:

El tipo double tiene una capacidad de 64 bits y permite almacenar un valor real entre -1,7*10-308 y +1,7*10308. El double es el tipo de dato que asume Java al escribir un real, por ello no va acompañado de ningún carácter como en el caso del float.

Boolean:

El tipo de dato booleano es utilizado para conocer el resultado de una evaluación booleana, los dos posibles valores son true y false (verdadero y falso).

Si su valor de inicio no es especificado, el valor por defecto es false.

Char:

El tipo char, es un tipo de datos que permite almacenar un caracter, sin embargo el valor que en realidad almacena es un entero equivalente entre los valores del 0 al 127 de la tabla de caracteres ASCII, la forma de declarar un char es la siguiente:

(Importante) Para el caso de la variable letra1 el valor es el caracter a, el cual sebe ir entre comillas, sin embargo en letra2, las comillas no existen, porque no se le está asignando un carácter, el número 97 representa la letra a

(50)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

en la tabla ASCII, esto significa que la variable letra1 y letra2 tienen en realidad la misma letra almacenada.

Tipo de objetos.

Los tipos de objetos incluyen todos los objetos que pueden ser instanciados a partir de las clases provenientes con java y todas las que sean desarrolladas por el programador. Si bien ambos tópicos serán vistos más adelante, en este capítulo se mostrará el String, la cual es una clase de mucha utilidad y que a veces tratada como un tipo primitivo, aunque no lo sea.

String

Un String (con su letra “s” mayúscula) no es un tipo de dato primitivo, sin embargo se trata en este apartado debido a que su uso es muy habitual en los programas y adicionalmente se puede utilizar de la misma forma en la que se declaran los tipos primitivos. Un String es un tipo de dato que permite almacenar una cantidad de caracteres variables. Su declaración y asignación es de la siguiente forma:

(Importante) String, es en realidad una clase, que almacena como atributo un arreglo de caracteres. Tanto las clases como los arreglos serán estudiados con mayor detalle más adelante. El siguiente ejemplo muestra la

(51)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

declaración de variables bajo el paradigma de la programación estructurada dentro del método main.

La siguiente imagen, presenta un ejemplo de la utilización de los tipos vistos en declaración de atributos de nuestra clase Persona.

(52)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

(Importante) private representa el nivel de accesibilidad y será estudiado más adelante.

Vida y ámbito de una variable

Las variables cuando son declaradas, tienen lo que se conoce como un ámbito, el cual define las fronteras dentro de las cuales las variables pueden ser utilizadas. Tradicionalmente la programación estructurada tiene dos niveles de visibilidad distintos: las variables locales y globales, sin embargo en la programación orientada el ámbito de una variable dentro de una clase es algo más

(53)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

complejo y será tratado a lo largo de este manual. Las variables siempre deben ir dentro de una estructura que los contenga, para cada estructura existe un inicio y cierre de bloque que la delimita. Como ejemplo la siguiente imagen muestra una clase con su respectivo inicio y cierre de bloque.

Fíjate que ahora la clase Persona posee además un comportamiento llamado correr y descansar, los cuales también tienen limitado su bloque. Podemos decir entonces que la clase Persona contiene dentro un comportamiento llamado correr y descansar.

(54)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

En este caso, la variable cansancio es una variable de instancia debido a que está definida dentro de la clase, pero fuera de sus comportamientos, por ende los métodos descansar y correr (que también son parte de la clase) tienen visibilidad sobre cansancio, aumentando en este caso su valor al correr y disminuyéndola al descansar.

(55)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

El ámbito de una variable siempre dependerá de del lugar donde se produzca su declaración, por ejemplo, ya vimos que si declaramos la variable dentro de los bloques que limitan la clase persona, pero fuera de correr o descansar, la variable se denomina una variable de instancia y está disponible para todos los métodos que la clase contenga. En el siguiente ejemplo la variable cansancio es ahora una variable declarada dentro de del comportamiento correr, esto se denomina variable local

del método. Para este caso la visibilidad de dicha

variable son los límites donde fue declarada, vale decir el inicio y bloque de correr, el siguiente ejemplo causa un

(56)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

error debido a que descansar no tiene una visibilidad sobre la variable cansancio.

(Importante) las variables de instancia son capaces de mantener el valor durante toda la vida de un objeto, sin embargo las declaradas dentro de un comportamiento son creadas, utilizadas y eliminadas al finalizar la ejecución del comportamiento que la contiene. También es posible crear límites dentro de los comportamientos correr, si bien la técnica que se presenta en el siguiente no es muy común, es reconocida por el lenguaje Java.

(57)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

En el segmento de código anterior se muestran dos casos a considerar. En el interior del método correr existe una delimitación dentro que contiene la declaración de una variable entera cuyo identificador es “a”, sin embargo al

(58)

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

terminar el límite donde fue declarada la variable ha vuelto a ser declarada, a primera vista da la idea de que correr tiene dos variables llamadas “a”, pero sabemos que eso es imposible. Recordemos que el identificador de una variable debe ser único en un mismo ámbito, lo que en realidad sucede es que la variable que se declara primero tiene una vida útil desde que se declara hasta el cierre de bloque en el que fue declarada, por ende al ser declarada la segunda variable llamada “a”, la primera ya ha sido eliminada. En descansar en cambio se produce un error debido a que se declara primero una variable entera dentro de los límites del comportamiento descansar, lo que provoca que también esté disponible para el ámbito que existe en el interior del método, por lo tanto, en el ámbito interior, no es posible declarar la variable entera con el identificador “a”, debido a que ya existe en él.

Conversión entre tipos.

En Java existen dos tipos de conversiones, la implícita y explicita. La implícita es aquella que no necesita de alguna intervención por parte del programador para que se lleve a cabo, siendo Java el encargado de realizarla. El ejemplo más común es la operación aritmética de dos tipos de datos distintos, ¿en una variable de qué tipo debo almacenar el resultado entre la suma entre un float y un double?

Referencias

Documento similar

Sentido y relación con otros temas: Tema de ampliación de gran importancia para la fruticultura, introductorio y complementario de los temas 11, 12, 13, 14, 15 y del bloque

CB3 - Que los estudiantes tengan la capacidad de reunir e interpretar datos relevantes (normalmente dentro de su área de estudio) para emitir juicios que incluyan una reflexión

Actividades de carácter práctico mediante la utilización de las tecnologías de la información y las comunicaciones. Las TIC suponen un excelente soporte y canal para el tratamiento

Tal y como se hace constar en el artículo 29 del Real Decreto 412/2014, las solicitudes de plazas de estudiantes con estudios universitarios oficiales españoles parciales que deseen

Emisión de informe sobre la adecuación entre las competencias y conocimientos adquiridos de acuerdo con el plan de estu- dios del título de origen, o la experiencia laboral

Algunos ejemplos fueron el caso de los Temas Transversales relacionados con la Educación Ambiental que comenzaron a aparecer en la cultura escolar con la LOGSE

- Un curso formativo para los técnicos de laboratorio de la UPV sobre la prevención de los residuos en los laboratorios, que se llevará a cabo los días 23, 24, 25, 26 y 27

Las personas solicitantes deberán incluir en la solicitud a un investigador tutor, que deberá formar parte de un grupo de investigación. Se entiende por investigador tutor la