Professional Documents
Culture Documents
Tabla de contenidos
A OBJETOS..............................................................3
BSQUEDA........................................................................30
DE DATOS...........................................................................31
OBJETOS..........................................................32
NDICE.............................................................................................34
Captulo I
Fundamentos de la Programacin orientada a objetos
1 Introduccin
1.1 Un poco de historia Pero slo un poco!
En sus inicios, lo que hoy conocemos como Ciencias de la Computacin no era tal, es decir, no era una ciencia. En otras lenguas, tales como el francs, se refieren a esta ciencia utilizando la palabra informtica. En Espaa se les llama a los computadores ordenadoras, por que su principal objetivo es permitir la organizacin de la informacin de manera eficiente. La computacin giraba nicamente en torno a la informacin y a cmo manejarla de manera eficiente. Por supuesto, en aquella poca no era correcto referirse a la informtica como una ciencia. DEFINICIN I.1 CIENCIA DE LA COMPUTACIN La ciencia de la computacin es el estudio de las fundaciones tericas de la informacin y la computacin y sus implementaciones y aplicaciones en sistemas computacionales. La computacin es el acto de computar, de calcular, de estimar. La computacin ha estado fuertemente relacionada con lo que significa el realizar una serie de clculos de manera automatizada. La ciencia de la
computacin se refiere entonces a dos conceptos principales: el manejo de la informacin y la realizacin de clculos.
Ninguno de los aparatos computacionales anteriores fueron realmente computadores en el sentido moderno de la palabra. Tom un avance considerable en matemticas y teora antes que los primeros computadores modernos fueran diseados.
1.1.2 Algoritmos
En el sptimo siglo, el matemtico hind Brahmagupta dio la primera explicacin del sistema numrico Hind-Arbico y utiliz el cero tanto como comodn y como un dgito decimal. Cerca del ao 835 D.C., el matemtico persa Al-Khwarizmi escribi el libro Sobre el clculo con nmeros Hinds que fue principalmente responsable por la difusin del sistema de numeracin Hind en el Medio-oriente y luego en Europa. Cerca del siglo XII, se tradujo este libro al latn: Algoritmi de numero Indorum. Estos libros presentaron nuevos conceptos para realizar una serie de pasos para lograr una tarea tal como la aplicacin sistemtica de la aritmtica al lgebra. Por la derivacin de su nombre se obtiene el trmino algoritmo.
La frase mquina computacional se convirti gradualmente, despus de los fines de 1940, a slo computador en la medida que el principio de maquinaria electrnica fue comnmente utilizado. Estos computadores fueron capaces de realizar clculos que eran realizados anteriormente por los operadores humanos. Ya que los valores almacenados por mquinas digitales no estaban relacionados con propiedades fsicas como los aparatos anlogos, un computador lgico, basado en equipos digitales, fue capaz de hacer cualquier cosa que pudiera ser descrita como puramente mecnica. Alan Turing, conocido como el padre de la ciencia de la computacin, invent este tipo de computadores lgicos conocido como la Mquina de Turing, que evolucion posteriormente al computador moderno. Estos nuevos computadores tambin eran capaces de realizar computaciones no numricas, como la msica. Desde el tiempo cuando los procesos computacionales eran realizados por operadores humanos, el estudio de la computabilidad provoc el inicio de una ciencia cuyo objetivo consista en hacer evidente algo que no estaba explcitamente definido.
La Unidad Central de Procesamiento es una palabra cuyo origen es ingls: Central Process Unit, cuyo acrnimo es conocido universalmente: CPU.
2
El conjunto de instrucciones arquitecturales es conocido en ingls como Instructio Set Architecture, cuyo acrnimo es popularmente conocido como ISA.
diseadas para ser entendidas directamente por el procesador del computador. Una instruccin de mquina es representada por un nmero binario, es decir, una secuencia de 1s y 0s. Una parte de la instruccin, llamada opcode3, designa la instruccin que debe ser ejecutada por el procesador. Dado que el valor numrico de un opcode no es significativo para los humanos, los programadores pueden usar una breve abreviacin en vez del valor numrico para programar. EJEMPLO 1.1 INSTRUCCIN
EN
ASSEMBLER
La siguiente lnea de cdigo representa una instruccin perteneciente al conjunto de instrucciones para una arquitectura x86:
SHL AX, 01
La operacin se llama SHL, y AX, 01 son los llamados operandos. AX es el nombre de un registro de memoria, y 01 es una constante. En este ejemplo, SHL es una abreviacin mnemotcnica para Shift Left. Esta instruccin tiene como finalidad modificar el valor almacenado en el registro AX desplazndolo a la izquierda en el valor binario del segundo operando, es decir, 014. Arquitecturas x86 x86 o 80x86 es el nombre genrico de la primera arquitectura de un microprocesador desarrollada y manufacturada por Intel. La arquitectura x86 domina actualmente el mercado de los computadores de escritorio, computadores porttiles, y pequeos servidores. La arquitectura es llamada x86 porque los procesadores anteriores en esta familia fueron identificados por nmeros de modelos que terminaban con la secuencia 86: el 8086, el 80186, el 80286, el 386, y el 486. Debido a que Luego, habiendo construido un computador con un conjunto especfico de instrucciones, lo nico que queda es indicarle a la computadora lo que tiene que hacer en trminos de este conjunto de instrucciones. Las instrucciones que la computadora deba ejecutar eran especificadas una
3
La palabra opcode es la abreviacin de operation code, que hace referencia al cdigo de una operacin.
4
No es necesario entender el significado concreto de esta operacin, lo importante es comprender que las instrucciones tienen un valor que define la operacin y operandos.
despus de las otras, constituyendo una secuencia de instrucciones que recibe el nombre de programa. Como las computadoras modernas eran en un inicio construidas por distintos fabricantes no exista un estndar que indicara ni el nombre de las instrucciones ni la manera en que stas eran especificadas al computador. En consecuencia, cada computadora defina su propio conjunto de instrucciones y la manera en que stas podan ser utilizadas. Al proceso que permita especificarle al computador las instrucciones y el orden en que ste deba ejecutarlas se le llam programacin. Como este conjunto de instrucciones permitan hablar de cierta manera con la computadora, programndola, a fin de indicarle lo que deba realizar, a este conjunto de instrucciones se le llam: lenguaje de programacin. DEFINICIN I.2 LENGUAJE DE PROGRAMACIN Un lenguaje de programacin es una tcnica de comunicacin estandarizada para describir instrucciones que sern ejecutadas por un computador. Cada lenguaje de programacin es definido por un conjunto de reglas sintcticas y semnticas utilizadas para definir programas. Los primeros lenguajes de programacin, que consistan en el conjunto de instrucciones que la mquina saba ejecutar, eran de muy bajo nivel. Esto significa que las instrucciones realizaban operaciones muy especficas con respecto a la computadora para la que fueron construidos. Como vimos en el Ejemplo 1.1, una instruccin puede especificar, por ejemplo, espacios de memoria especficos, que son propios de una arquitectura de computadora particular. Por supuesto, un programa escrito para una computadora iba difcilmente a funcionar en otra computadora con una arquitectura diferente. Este fenmeno ocurra seguido puesto que existan pocas computadoras y stas eran hechas por diversos fabricantes. Dado que en un comienzo las computadoras eran capaces de realizar operaciones muy elementales, realizar ciertos clculos era realmente una tarea difcil y compleja que requera a personal especializado para realizarlas. Por ejemplo, la multiplicacin fue una operacin que no eran capaces de hacer las computadoras sino hasta muchos aos despus de haber sido inventadas. La multiplicacin era una funcionalidad que deba ser programa para ser utilizada. Los primeros lenguajes de programacin consistan en miles y miles de instrucciones. Por la naturaleza especfica del lenguaje utilizado para programar, en relacin a la mquina en que se ejecutaba el programa, se deca que estos lenguajes eran lenguajes de bajo nivel.
La extrema complejidad y altos costos que significaba escribir un programa sencillo, motiv a los cientficos de la poca a inventar lenguajes de programas que tuvieran un cierto nivel de abstraccin respecto a las caractersticas particulares de la computadora en donde las instrucciones eran ejecutadas. En otras palabras, se quera definir un programa que realizara instrucciones que no requirieran especificar por ejemplo los espacios de memoria en que se almacenaban o escriban los datos. Se habl entonces de lenguajes de programacin de ms alto nivel. Estos lenguajes no exigan al programador que indicara el lugar en la memoria donde se deba almacenar cierta informacin, sino que la computadora misma se encargaba de administrarlo. Los lenguajes fueron evolucionando hasta el punto en que el programador ya no programaba utilizando instrucciones de la mquina, sino lenguajes cada vez de ms alto nivel que le permitan escribir los mismos programas con un nmero considerablemente menor de instrucciones. Esto se logr gracias a un traductor cuya tarea consista en traducir el programa escrito por el programador con un lenguaje de alto nivel, en un programa equivalente en el lenguaje de la mquina. Este traductor recibe el nombre hoy de compilador. El proceso de transformar un programa escrito en un lenguaje especfico al lenguaje de mquina se llamaba recibe el nombre de compilacin. La Figura 1 ilustra este proceso. En la figura, el proceso comienza con un programa escrito en un lenguaje particular, como por ejemplo C o Java. El compilador procesa este programa y lo transforma en un programa de ms bajo nivel, como por ejemplo Assembler o lenguaje de mquina.
Programa escrito en C
Compilador
Computador
Figura 1: El proceso de compilacin transforma un programa escrito en un lenguaje en otro programa, equivalente escrito en el lenguaje de la mquina donde se ejecutara.
Los lenguajes de programacin comenzaron a evolucionar rpidamente y surgieron en gran variedad y con distintos fines. En funcin del tipo de programa que se deseaba escribir los lenguajes eran ms especficos al dominio de aplicacin. Hoy en da, los programadores escriben programas en lenguajes de alto nivel, que hacen abstraccin casi total
10
11
la
programacin
Tomemos como ejemplo a los economistas, que modelan el mundo bajo un paradigma de economa donde todas las cosas son representadas en trminos de costos. Bajo este paradigma todos los elementos deben llevarse a trminos de costos. La construccin de una plaza es separada en sus partes y a cada parte le es asociado un costo de realizarlo. Paralelamente, la construccin de la plaza es un beneficio para la sociedad, puesto que la gente es ms feliz. Esta felicidad se traduce en un costo de beneficio que compensa los costos de construccin de una plaza. En general, los lenguajes de programacin responden a un paradigma de programacin en particular. Tal es el caso de la programacin funcional donde el mundo es modelado en trminos de funciones y valores. En la programacin lgica los modelos son hechos a partir de proposicin lgicas y valores de verdad. En la programacin orientada a objetos cada parte del mundo real es modelado como un objeto
mientras que las acciones son modeladas como mensajes enviados a los objetos. Objetos y mensajes son los pilares fundamentales de la programacin orientada a objetos. A lo largo de estos apuntes consideraremos de manera transversal el juego de ajedrez para estudiarlo y aplicar lo aprendido. En el paradigma orientado a objetos, un juego de ajedrez se modela como un conjunto de objetos que interactan entre s. Para escribir un programa de ajedrez, utilizando un lenguaje orientado a objetos, se debe modelar el problema en trminos de objetos que interactan entre s. La primera etapa de este proceso consiste en reconocer cada uno de los objetos que son parte del problema y que tienen una participacin relevante para el problema estudiado. Una vez que se han identificado los objetos relevantes del problema, se debe determinar la manera en que stos interactan, pues es la precisamente la interaccin entre stos lo que define un sistema como dinmico. EJEMPLO 2.3 LOS
OBJETOS Y MENSAJES DEL JUEGO DE AJEDREZ
Un juego de ajedrez est constituido por numerosos objetos que interactan entre s. Entre ellos se encuentran los dos jugadores, el tablero de ajedrez, los peones (cada uno de ellos), las torres, los caballos, los alfiles, las reinas, los reyes, etc. Estos objetos fciles de distinguir son los objetos fsicos de nuestro mundo, pero tambin existen objetos intangibles tales como la partida de ajedrez, el turno, las jugadas realizadas, una jugada en particular, una movida como un enroque, etc. Luego de haber identificado los objetos relevantes de un juego de ajedrez se debe identificar la manera en que stos interactan. Por ejemplo, un jugador hace una mueve una pieza durante su turno, una pieza se mueve de una posicin del tablero a otra, el rey y la torre pueden enrocar, etc. Las acciones realizadas por los objetos definen los mensajes que stos reciben. Existen otras acciones implcitas del juego de ajedrez tales como cuando la partida determine que es el \emph{turno} de otro jugador, o cuando hay un ganador y la partida debe \emph{terminar}. Un objeto se comunica con otro objeto mediante \emph{acciones}, que en el paradigma orientado a objetos se traduce en \emph{envos de mensajes}. El primer paso que se debe realizar al modelizar un sistema del mundo real al mundo de los objetos es de distinguir cada objeto
del sistema y cada accin que stos puedan realizar. A continuacin se describir con ms profundidad lo que es un objeto y las principales caractersticas del paradigma orientado a objetos.
Captulo II
El lenguaje Java
1 Introduccin
JAVA es un lenguaje multiplataforma orientado a objetos. La palabra multiplataforma hacer referencia a los distintos sistemas operativos que corren en distintas arquitecturas, como por ejemplo: LINUX, WINDOWS, MACINTOSH, etc. Una vez compilado, un programa Java debiera poder en cualquier sistema que cuente con una mquina virtual Java. AGREGAR MAS BLABLA
JAVA?
Un programa escrito en Java consiste en un conjunto de instrucciones que se almacenan en distintas unidades modulares. Para dar una pequea idea digamos que para escribir un programa en JAVA es necesario definir unos mdulos llamados clases que son guardadas en archivos de texto, cuya extensin es .java. Las clases definen tipos de datos abstractos que van a permitir la creacin de objetos. En consecuencia, se dice que JAVA es basado en clases5. Se revisarn estos conceptos en detalles ms adelante a lo largo de estos apuntes. Dado que JAVA es un lenguaje de alto nivel, una vez que se han definido todas las clases, los archivos son compilados, es decir, son transformados a un lenguaje de ms bajo nivel llamado JAVA BYTECODE. El JAVA BYTECODE es un lenguaje de ms bajo nivel que JAVA, que puede ser interpretado por una Mquina Virtual de Java. La Mquina Virtual de Java es un concepto importante puesto que propone una plataforma en la
cual escribir programas que hace abstraccin de la arquitectura bajo la cual se ejecutar. La Mquina Virtual de Java es abreviada popularmente como JVM. Para hacerse una idea ms clara, el BYTECODE se parece bastante al lenguaje de mquina, pero no contiene informacin especfica de la arquitectura del sistema donde ser ejecutado. La Mquina Virtual de JAVA es capaz de leer e interpretar el BYTECODE para indicar a la mquina donde se encuentra lo que debe hacer. Esta mquina virtual, hace entonces posible que un programa pueda ser ejecutado en cualquier plataforma donde existe una mquina virtual de Java que la interprete.
http://java.sun.com/j2se/1.5.0/download.jsp
lograr desplegar al usuario una cadena de caracteres con el mensaje Hola Mundo. Para comenzar, es necesario crear un archivo en donde se escribirn el programa. Se definir una clase llamada Programa que utilizaremos para escribir las instrucciones que compondrn el programa que nos interesa hacer. El archivo que contenga esta clase debe tener el mismo nombre que la clase seguido por .java, es decir, el archivo debe llamarse Programa.java. Es muy importante poner atencin a las minsculas o maysculas por que una diferencia de este tipo har que el programa no funcione. Ms adelante se ver que este detalle pierde importancia cuando se trabaja con IDEs, sin embargo, es importante realizar este ejercicio para entender cabalmente como suceden las cosas detrs del teln. Como se trata de un programa de prueba, El contenido del archivo es como se lista a continuacin:
public class Programa { /* Metodo principal para ejecutar el programa*/ public static void main(String args[ ]) { System.out.println("Hola Mundo!"); } }
Este programa, que imprime la cadena de caracteres Hola Mundo!, se ve particularmente complejo de entender, pero pierda cuidado, es slo una primera impresin. Una vez que avance en la lectura podr apreciar la simpleza del programa. Por ahora, nos conformaremos con saber que la clase se define con un nombre, Programa, en la lnea public class Programa, y que esta contiene un mtodo llamado main cuyo alcance est determinado por los smbolos { y }. El paso siguiente es compilar el archivo para obtener un segundo archivo que contiene el BYTECODE correspondiente a la definicin que se escribi del programa. Para esto es necesario abrir una lnea de comandos y ubicarse en el mismo directorio donde se encuentra el archivo Programa.java y ejecutar el siguiente comando7:
c:\javac Programa.java
Para este ejemplo suponemos que el archivo se encuentra en la raz del disco C.
El compilador de JAVA es un programa que se llama javac, abreviacin de java compiler. Al ejecutar este programa se genera como resultado, si la compilacin se desarroll sin errores, un nuevo archivo llamado Programa.class que contiene la definicin de la clase en BYTECODE, que no miraremos ahora. Este proceso es similar para cualquier archivo JAVA, es decir, se genera un archivo con el mismo nombre del archivo .java cuya extensin es .class. Slo queda el ltimo paso: ejecutar el programa. Para esto utilice la misma lnea de comando que abri hace algunos momentos y escriba la siguiente lnea de comando:
C:\java Programa
Acto seguido, podr verificar que en la consola comandos se ha desplegado el siguiente mensaje:
Hello World
de
trabajo
para
Java:
Existen muchos ambientes integrados de desarrollo IDE que permiten desarrollar aplicaciones en Java ms fcilmente, como por ejemplo Eclipse, JBuilder, NetBeans, etc. Durante este curso utilizaremos un IDE llamado ECLIPSE8. ECLIPSE es una aplicacin open source, y se puede obtener de manera gratuita desde el sitio oficial de eclipse9 y obtener la ultima versin estable (en ingls, latest release). ECLIPSE es distribuido en un archivo comprimido (que eventualmente puede estar firmado electrnicamente), que generalmente es de extensin .zip. Para instalarlo es necesario descomprimir el contenido del archivo y ejecutar el archivo eclipse.exe. Dado que ECLIPSE esta escrito en JAVA, es necesario tener una distribucin de JAVA instalada. La versin actual de eclipse (3.1.3) almacena la informacin del ambiente de trabajo en un directorio por defecto al interior del directorio de eclipse llamado workspace. Es posible tener
8
ms de un workspace y pueden estar ubicados en cualquier lugar accesible a travs del sistema de archivos.
2 Tipos en java
Los tipos en JAVA permiten definir abstracciones. El lenguaje JAVA provee entonces dos tipos de abstracciones: los tipos primitivos y los tipos referenciados. Los tipos primitivos pueden ser utilizados para definir tipos referenciados. Los tipos referenciados sirven para poder definir tipos de datos abstractos, es decir, entidades con estado interno y operaciones. JAVA provee dos clases de tipos referenciados: las interfaces y las clases. Tanto los tipos primitivos como los tipos referenciados sern estudiados en detalle durante el transcurso de esta seccin.
\begin{itemize}
\item \mycode{boolean}. Una variable de tipo boolean puede contener solamente dos valores: \mycode{true} o \mycode{false}. Para este tipo de datos existen ciertos operadores:
\begin{itemize}
\item \emph{Negacin \mycode{!bool}}. Cuando esta expresin es evaluada, su valor corresponde a la negacin del valor de \mycode{bool}. \mycode{!true} es evaluado como \mycode{false} y \mycode{!false} es evaluado como \mycode{true}.
\item \emph{Comparacin \mycode{bool == bool}}. Este operador compara los valores de dos expresiones buleanas y se evala en verdadero (\mycode{true}) si los valores son iguales y en falso (\mycode{false}) sino. El operador \mycode{!=} es utilizado para evaluar si dos expresiones son diferentes (el contrario del operador \mycode{==}).
\item \emph{Conjuncin \mycode{bool \&\& bool}}. Este operador compara los valores de dos expresiones buleanas y se evala en verdadero (\mycode{true}) si los valores son verdaderos y en falso (\mycode{false}) sino. Este operador evala primero la expresin buleana de la izquierda, si sta no se evala en \mycode{false} entonces procede a evaluar la expresin buleana de la derecha.
\item \emph{Disyuncin \mycode{bool || bool}}. Este operador compara los valores de dos expresiones boleanas y se evala en verdadero (\mycode{true}) si al menos una de las expresiones buleanas es verdadera (\mycode{true}) y false si ambas expresiones son falsas. Este operador evala primero la expresin buleana de la izquierda, si sta no se evala en \mycode{verdadera} entonces procede a evaluar la expresin buleana de la derecha.
\end{itemize}
\item \mycode{int}. El tipo \mycode{int} es utilizado para definir variables pudiendo contener nmeros enteros que pueden ir desde 2147483648 hasta el 2147483647. Una variable de tipo entero es almacenada en la memoria en un espacio de 32 bits. Para nmero ms grandes es necesario usar otro tipo de datos, como por ejemplo los tipos primitivos \mycode{long} (de 64 bits) y double o bien los tipos \mycode{Ingeger}, \mycode{LongInteger}. El lenguaje \Java{} provee un conjunto de operadores para el tipo \mycode{int}, entre los cuales podemos destacar (para una lista extensiva referirse a \cite{Gosling-all00Java1.4}):
\begin{itemize}
de los
comparacin: operadores
\mycode{<}, y
\mycode{<=}, \mycode{!=}
\mycode{==}
para la igualdad).
\end{itemize}
\item \mycode{float}. El tipo \mycode{float} es utilizado para definir variables pudiendo contener nmeros flotantes que pueden ir desde ... hasta el .... Cada variable de tipo \mycode{float} es almacenada en la memoria en un espacio de 32 bits. Para almacenar nmeros mas grandes se puede usar el tipo de datos \mycode{double} (de 64 bits) o bien el tipo \mycode{BigDecimal}. El lenguaje \Java{} provee un conjunto de operadores para el tipo \mycode{int}: \mycode{+}, \mycode{-}, \mycode{*} y \mycode{/}.
\end{itemize}
Es interesante notar sin embargo, que en JAVA, para cada tipo primitivo existe un tipo referenciado cuyas instancias representan elementos de esos tipos. Por ejemplo, y como veremos posteriormente, para el tipo primitivo int existe el tipo referenciado Integer.
3 Excepciones
3.1 Introduccin
Ms de alguna vez debe haber presenciado algn cajero electrnico que se encuentra inoperante y con una pantalla azul. En algunos casos se trata de un error que ha ocurrido en el programa del cajero y ste ha de ser reiniciado para poder volver a funcionar. Por qu suceden estas situaciones? Por qu es necesario que el programa sea iniciado para poder funcionar nuevamente? Cul es la causa de que un programa deje de funcionar como se supone que funciona? La mayora de las veces la razn por la que un programa interrumpe abruptamente su ejecucin se debe a errores de programacin. Al escribir un programa, el programador trabaja en general con ciertos supuestos sobre la utilizacin del programa. A veces el programador no ha sido informado adecuadamente de los supuestos, y otras veces simplemente no son tomados en cuenta. Cuando un programa est siendo ejecutado y algo pasa que produce un error en ste, se habla de un error de ejecucin. Un error de ejecucin se puede producir por diversas razones, por ejemplo, si el usuario ingresa un nmero donde se esperaba una palabra, si el programa intenta abrir un archivo que no existe, si intenta guardar un archivo en una unidad de almacenamiento que no posee el espacio libre necesario, etc. Suponiendo que en general no es posible prever todos los errores de ejecucin que pudieran ocurrir mientras que se ejecuta un programa, algunos lenguajes de programacin permiten interceptar estos errores y proveen mecanismos que permiten atraparlos y realizar acciones para evitar que el programa termine abruptamente su ejecucin. Si se produce un error de ejecucin y el programa es capaz de continuar su ejecucin, se dice que el programa se ha recuperado del error. Si un programa es capaz de recuperarse de errores de ejecucin se dice que el programa es tolerante a fallas.
En Java es posible incluir instrucciones en un programa que permiten atrapar los errores que se producen en tiempo de ejecucin, reaccionar ante ellos. En esta seccin se explicar el concepto de excepcin, que representa un error de ejecucin, y como manejarlas en Java.
El principal objetivo de instanciar las excepciones, es decir, de tener una representacin de ellas en un objeto, es de poder agregar informacin sobre el error que ha ocurrido durante la ejecucin de un programa. Una excepcin puede ocurrir nicamente durante la ejecucin de una instruccin que se encuentra en un mtodo o un constructor de una clase. Cuando se dice que la ejecucin del mtodo o del constructor es interrumpida, se debe entender que el mtodo o constructor no terminan su ejecucin. Si se trata de un mtodo que debe retornar un valor, entonces ningn valor ser retornado.
mtodos
que
lanzan
Si se detecta que un error ha sucedido y se crea una excepcin para almacenar la informacin relativa a este error, es posible detener la ejecucin del mtodo o constructor en ese punto y lanzar esta excepcin al objeto que ha invocado el mtodo donde ocurri el error. Para lanzar una excepcin es necesario realizar dos pasos: declarar que el mtodo en donde puede ocurrir la excepcin lanza ese tipo de excepciones, y lanzar la excepcin propiamente tal. Para declarar que un mtodo lanza una excepcin se debe indicar en el encabezado del mtodo el tipo de la excepcin que lanza precedido por
la palabra reservada throws, que en espaol significa justamente lanzar10. EJEMPLO 2.4 EXCEPCIN
DEL MTODO PARSEINT
En Java para obtener un nmero entero, representado por un objeto de tipo int, es posible invocar el mtodo parseInt(String) de la clase Integer que recibe un objeto de tipo String con la representacin del entero. La cadena 15383 seria convertida al entero 15383. La declaracin de este mtodo es: public int parseInt(String number) throws NumberFormatException Esto significa que si la cadena pasada como argumento al mtodo no es un nmero entero, entonces la ejecucin del mtodo ser interrumpida y una excepcin de tipo NumberFormatException ser lanzada. Como la ejecucin del mtodo ha sido interrumpida ningn valor ser retornado. Es natural preguntarse en este momento: cmo hace un mtodo para lanzar una excepcin? El lenguaje Java provee una instruccin que permite lanzar una excepcin, deteniendo as la ejecucin del programa. La sintaxis de esta instruccin es la siguiente: throw unaExcepcion Donde throw es una palabra reservada del lenguaje y unaExcepcion representa a un objeto de tipo Exception. En el siguiente ejemplo vemos como es posible utilizar esta instruccin para lanzar una excepcin. EJEMPLO 2.5 LANZANDO
UNA EXCEPCION
Supongamos que se desea escribir un mtodo que reciba dos arreglos de enteros y deje el contenido del primero en el segundo. Definiremos como precondicin de este mtodo que el segundo arreglo debe ser al menos del mismo tamao del primero, de manera de poder dejar en el segundo todos los enteros que se encuentran en el primer arreglo. Si esta precondicin no llegara a satisfacerse, el mtodo lanzara una excepcin indicando el error.
10
Notemos que throws es el verbo lanzar conjugado para la tercera persona singular (he, she e it). Esto es debido a que se quiere expresar que es el mtodo lanza una excepcin.
En consecuencia con lo anunciado anteriormente, la declaracin de este mtodo sera: public void copiaArreglo(int[] arreglo1, int[] arreglo2) throws Exception Por otro lado, en el cuerpo del mtodo ser necesario verificar si se cumple la precondicin y en caso de no ser as, arrojar la excepcin:
1 public void copiaArreglo(int[] arreglo1, int[] arreglo2) throws Exception { if (arrego1.length > arreglo2.lenght) { Excepcion laExcepcion = new Excepcion(Destino menor que origen); throw laExcepcion; } }
3.5 Ejercicios
3.5.1 Propuestos
Problema 1.1 Captura NumberFormatException de excepcin
Escriba un programa que usando excepciones pida un nmero de la pantalla y sea tolerante a fallas, es decir, si el usuario no ingresa un nmero el programa debe pedrselo nuevamente. Para esto, utilice el mtodo readLine() de la clase Console para leer lo ingresado por el usuario y el mtodo parseInt(String s) de la clase Integer para transformarlo a entero.
Problema 1.2
Escriba un programa tolerante a fallas que pida al usuario dos nmeros enteros desde la consola y despliegue la suma de los nmeros ingresados. Para esto, utilice el mtodo readLine() de la clase Console para leer lo ingresado por el usuario y el mtodo parseInt(String s) de la clase Integer para transformarlo a entero. El siguiente texto ejemplifica la manera en que el programa debe comportarse:
Ingrese el primer nmero: 10 Ingrese el segundo nmero: tres No en palabras por favor, Ingrese el segundo nmero: 3 Suma de los nmeros ingresados: 13
Captulo III
Algoritmos de bsqueda
Captulo IV
Estructuras de datos
1 Introduccin 2 Listas
Una lista es (textual del Larousse): Catlogo, enumeracin. (SINN. Cuadro, estado, ndice, inventario, tabla, etc.). Sirvi? Bueno, en palabras ms ingenieriles podemos decir que una lista es un conjunto de elementos (ordenados o no) que tienen asignada una posicin que les caracteriza. Por ejemplo, en una lista de alumnos, el primer alumno ocupa el lugar uno (por muy trivial que parezca), el segundo alumno ocupa el lugar nmero dos y as sucesivamente.
Captulo V
Tcnicas avanzadas de Programacin Orientadas a Objetos
1 Envo doble de mensajes
El envo doble de mensajes, conocido en ingls como double dispatch es una tcnica de programacin que permite aprovechar el mecanismo de seleccin de mtodos para ejecutar un mtodo especfico en funcin del tipo dinmico de alguno de los argumentos del mensaje recibido. El siguiente ejemplo describe la problemtica que se desea abordar.
EJEMPLO 1.6
DESCUENTO
EN EL
CINE
Supongamos que se quiere modelar un cine en el cual la cajera debe aplicar un descuento a cada cliente, dependiendo si el cliente es estudiante, socio del cine o simplemente una persona. El modelo de clases considerado en este ejemplo es descrito en la Figura 2.
Boleteria - cola : Cola - precioTicket (Persona cliente) : int + atenderCola () : void 0..1 0..* Persona
Estudiante
Socio
La clase Boletera define un mtodo de instancia pblico llamado atenderCola() que procesa la cola de gente para comprar entradas. El mtodo atenderCola() tiene el siguiente cuerpo:
ndice
A
Algoritmo.....................................................5
L
Lenguaje de programacin.........................9 Lenguajes de alto nivel.............................10 Lenguajes de bajo nivel..............................9
C
Ciencia de la computacin..........................3 Compilacin..............................................10
M
Mquina Virtual de Java............................15
D
Double dispatch........................................32
P
Paradigma de programacin.....................12
E
Error de ejecucin.....................................25 Excepcin..................................................26
S
Salida estndar.........................................16 Sistema numrico binario...........................5
J
JVM............................................................16
T
Tipos primitivos.........................................20 Tolerancia a fallas.....................................25