Vous êtes sur la page 1sur 125

I

UNA REVISIN A LAS


TCNICAS DE
PROGRAMACIN

1
CAPITULO I
1.1 INTRODUCCIO

En trminos generales, podemos distinguir la siguiente curva de aprendizaje de alguien


que aprende a programar:

Programacin no Estructurada,
Programacin procedimental,
Programacin modular,
Programacin orientada a objetos

1.1.1 PROGRAMACIN ESTRUCTURADA

Se basa o divide en mdulos donde cada modelo tiene relacionado un conjunto de procesos.
El lenguaje base de la programacin estructurada es el Lenguaje C, cada proceso tiene una
entrada y una salida por lo que no se puede reutilizar el cdigo fuente generado en cada
proceso. En la programacin modular, los procedimientos con una funcionalidad comn
son agrupados en mdulos separados. Un programa por consiguiente, ya no consiste
solamente de una seccin. Ahora est dividido en varias secciones ms pequeas que
interactan a travs de llamadas a procedimientos y que integran el programa en su
totalidad.

datos
modulo1
programa procesos
principal
modulo2
procesos

Cada mdulo puede contener sus propios datos. Esto permite que cada mdulo maneje un
estado interno que es modificado por las llamadas a procedimientos de ese mdulo. Sin
embargo, solamente hay un estado por mdulo y cada mdulo existe cuando ms una vez
en todo el programa.

Procesos en C

Un proceso en C cumple con el determinado ciclo como se muestra en la figura 2, en


donde el cdigo fuente se convierte en lenguaje de maquina el cual va a depender de la
plataforma que se est trabajando (Turbo C, C++ Borland C, Visual).

2
COMPILACIN .C

ENCADENAR .obj

ARCHIVO .EXE

Fig 2.

1.1.2 PROGRAMACIN ORIENTADA A OBJETOS

La programacin orientada a objetos viene estrictamente relacionada con el concepto de


entidades (objetos) y atributos (caractersticas), donde cada entidad se puede relacionar
con otras. El lenguaje relacionado con objetos es JAVA y este permite que los
programadores reutilicen el cdigo generado por cada uno de los objetos

profesor estudiante

sistema
universidad
administracin

Procesos en Java

Un proceso en Java genera un archivo con extensin de java (.java), luego pasa al
compilador generando un archivo (.class) finalmente llega a la Maquina Virtual de Java
para generar el archivo ejecutable (.exe), este lenguaje no depende de la plataforma que se
est trabajando.

COMPILACIN .java

MVJ .class

ARCHIVO .EXE

3
1.2 INTRODUCCIN A JAVA

Java surgi en 1991 cuando un grupo de ingenieros de Sun Microsystems trataron de


disear un nuevo lenguaje de programacin destinado a electrodomsticos. La reducida
potencia de clculo y memoria de los electrodomsticos llev a desarrollar un lenguaje
sencillo capaz de generar cdigo de tamao muy reducido.

Debido a la existencia de distintos tipos de CPUs, era importante conseguir una


herramienta independiente del tipo de CPU utilizada. Desarrollaron un cdigo neutro
que no dependa del tipo de electrodomstico, el cual se ejecutaba sobre una mquina
hipottica o virtual denominada Java Virtual Machine (JVM).

Era la JVM quien interpretaba el cdigo neutro convirtindolo a cdigo particular de la


CPU utilizada. Esto permita lo que luego se ha convertido en el principal lema del
lenguaje: Write Once, Run Everywhere. A pesar de los esfuerzos realizados por sus
creadores, ninguna empresa de electrodomsticos se interes por el nuevo lenguaje.

Como lenguaje de programacin para computadores, Java se introdujo a finales de 1995.


La clave fue la incorporacin de un intrprete Java en la versin 2.0 del programa
Netscape Navigator, produciendo una verdadera revolucin en Internet.
El principal objetivo del lenguaje Java es llegar a ser el nexo universal que conecte a los
usuarios con la informacin, est sta situada en el ordenador local, en un servidor de
Web, en una base de datos o en cualquier otro lugar.

1.3 QU ES JAVA

Java 2 (antes llamado Java 1.2 o JDK 1.2) es la tercera versin importante del lenguaje de
programacin Java.

Los programas desarrollados en Java presentan diversas ventajas frente a los


desarrollados en otros lenguajes como C/C++. La ejecucin de programas en Java tiene
muchas posibilidades: ejecucin como aplicacin independiente (Stand-alone Application),
ejecucin como applet, ejecucin como servlet, etc. Un applet es una aplicacin especial
que se ejecuta dentro de un navegador o browser (por ejemplo Netscape Navigator o
Internet Explorer) al cargar una pgina HTML desde un servidor Web. El applet se
descarga desde el servidor y no requiere instalacin en el ordenador donde se encuentra el
browser. Un servlet es una aplicacin sin interface grfica que se ejecuta en un servidor de
Internet. La ejecucin como aplicacin independiente es anloga a los programas
desarrollados con otros lenguajes.

Adems de incorporar la ejecucin como Applet, Java permite fcilmente el desarrollo


tanto de arquitecturas cliente-servidor como de aplicaciones distribuidas, consistentes en
crear aplicaciones capaces de conectarse a otros ordenadores y ejecutar tareas en varios
ordenadores simultneamente, repartiendo por lo tanto el trabajo.

Aunque tambin otros lenguajes de programacin permiten crear aplicaciones de este tipo,
Java incorpora en su propio API estas funcionalidades.

4
1.4 EL ENTORNO DE DESARROLLO DE JAVA

Existen distintos programas que permiten desarrollar cdigo Java. La compaa Sun,
creadora de Java, distribuye gratuitamente el Java Development Kit (JDK). Se trata de un
conjunto de programas y libreras que permiten desarrollar, compilar y ejecutar
programas en Java.

Incorpora la posibilidad de ejecutar parcialmente el programa, deteniendo la ejecucin en


el punto deseado y estudiando en cada momento el valor de cada una de las variables (con
el denominado Debugger).

1.4.1 El compilador de Java

Se trata de una de las herramientas de desarrollo incluidas en el JDK. Realiza un anlisis


de sintaxis del cdigo escrito en los ficheros fuente de Java (con extensin *.java). Si no
encuentra errores en el cdigo genera los ficheros compilados (con extensin *.class).

En otro caso muestra la lnea o lneas errneas. En el JDK de Sun dicho compilador se
llama javac.exe. Tiene numerosas opciones, algunas de las cuales varan de una versin a
otra.

1.4.2 La Java Virtual Machine

La existencia de distintos tipos de procesadores y ordenadores llev a los ingenieros de


Sun a la conclusin de que era muy importante conseguir un software que no dependiera
del tipo de procesador utilizado. Se plante la necesidad de conseguir un cdigo capaz de
ejecutarse en cualquier tipo de mquina. Una vez compilado no debera ser necesaria
ninguna modificacin por el hecho de cambiar de procesador o de ejecutarlo en otra
mquina. La clave consisti en desarrollar un cdigo neutro el cual estuviera preparado
para ser ejecutado sobre una mquina hipottica o virtual, denominada Java Virtual
Machine (JVM). Es esta JVM quien interpreta este cdigo neutro convirtindolo a cdigo
particular de la CPU utilizada. Se evita tener que realizar un programa diferente para cada
CPU o plataforma.

La JVM es el intrprete de Java. Ejecuta los bytecodes (ficheros compilados con


extensin *.class) creados por el compilador de Java (javac.exe). Tiene numerosas opciones
entre las que destaca la posibilidad de utilizar el denominado JIT (Just-In-Time
Compiler), que puede mejorar entre 10 y 20 veces la velocidad de ejecucin de un
programa.

5
II
ABSTRACCIN Y
MODELADO

6
CAPITULO II
2.1 ABSTRACCIN Y MODELADO

En general, un programa es la descripcin abstracta de un procedimiento o fenmeno que


existe o sucede en el mundo actual y a nuestro alrededor.
En esencia, la abstraccin es la capacidad para encapsular y aislar la informacin del
diseo y ejecucin.

2.1.1 CARCTERISTICAS

La abstraccin sirve para simplificar nuestra opinin del mundo.


Organiza nuestros conocimientos o minimizar la cantidad de la informacin
jerrquicamente que tenemos que hacer juegos mentales en cualquier momento
La relacin de la abstraccin sirve para el desarrollo de software
Desafo en la implementacin de software de problemas de la vida real.

2.1.2 Simplificacin a travs de la abstraccin:

Si nos detenemos un momento para observar o notar el lugar en el cual nos encontramos,
observando con claridad los detalles de los objetos los cuales nos rodean. Enfocndonos en
los detalles y analizndolos, estaramos adquiriendo grandes cantidades de informacin.
Un ejemplo de anlisis para una mesa seria:

Quin construy la mesa?


De qu material es?
Cuntas partculas tienen?
Color?
Textura?
Etc.

Una de las habilidades innatas de los seres humanos es la abstraccin, la cual nos evita
procesar todos estos detalles de lo que nos rodea y se enfocan en obtener las
caractersticas importantes de los objetos o situaciones.

2.1.3 Generalizacin a travs de la abstraccin.

Se deben eliminar los suficientes detalles en el proceso de abstraccin tal que no


eliminemos las caractersticas claves del objeto o situacin tomando muy en cuenta el
propsito.

Generalizar consiste en abstraer las caractersticas comunes entre objetos o situaciones


enmarcadas en una temtica general, depender de las necesidades.

7
2.1.4 Organizacin de la abstraccin en una clasificacin de jerarqua

El cerebro humano no solo abstrae los detalles tambin los clasifica en forma sistemtica
por categoras de acuerdo a criterios establecidos. Este proceso es conocido como
clasificacin, la clasificacin nos permite organizar la informacin bajo ciertos parmetros,
as la informacin est relacionada.

Es importante dar reglas precisas para la clasificacin de lo contrario podramos dejar


fuera de sta a algunos objetos, se debe tener en cuenta que no sean redundantes, las
reglas no deben ser tan generales y tampoco tan restrictivas.

2.1.5 Abstraccin como la base para desarrollo de software

Se debe hacer en base a los propsitos del enfoque del sistema tomando en cuenta el
mantenimiento y expansin del mismo, para esto precisemos los detalles (Provedos por el
usuario y los que nosotros observamos) relevantes y esenciales para el desarrollo del
sistema.

Una vez determinados los aspectos esenciales para el sistema se deben modelar las
abstracciones; modelar es el proceso por el cual realizamos el esquema del sistema que
vamos a implementar.

2.1.6 Re-usar Abstracciones

Cuando realizamos la abstraccin de algn objeto o situacin nuestro cerebro busca en la


memoria un modelo previamente abstrado, y lo compara para ver si esta abstraccin
puede ser reutilizada para el caso y de esta manera se aumenta la eficacia y el desarrollo.

PARA RECORDAR

1. Abstraccin es una tcnica fundamental que las personas usan para percibir el
mundo real.
2. Desarrollar una Abstraccin del problema de ser automtica es un primer paso
necesario de todo el desarrollo de software.
3. Organizar la informacin en las jerarquas de clasificacin sobre la base de reglas
que cuidadosamente estructuramos ayuda para que no sean demasiado generales
o demasiado restrictivas.
4. Se vuelve a utilizar la Abstraccin a menudo cuando intentamos hacer un modelo
de un nuevo concepto.
5. Producir una Abstraccin de un sistema debe desarrollarse, conociendo un
modelo, en algunos sentidos las costumbre ligadas a nosotros, y con todo
paradjicamente es una de las cosas ms firmes de los desarrolladores de
software Tener en cuenta que el ciclo vital de un proyecto de sistemas de
informacin. Es tambin uno de los ms importantes.

8
2.2 Ejercicios:

1. Bosqueje una jerarqua de clase que relata todas las siguientes clases en una
manera razonable:

Apple Dairy product Pork


Banana Food Spinach
Beef Fruit Vegetable
Beverage Green bean
Cheese Meat
Consumable Milk

FOOD

CONSUMABLE

DAIRY

PRODUCT

MEAT VEGETABLE FRUIT MILK CHEESE BEVERAGE

GREEN
BEEF PORK SPINACH BANANA APPLE

BEAN

2. Que los aspectos de un set de la televisin podra ser importante para la


abstraccin de la perspectiva de:

Un consumidor desear comprar un?

Buena definicin.
Tamao de la tv.
La marca.
El precio.

Un ingeniero responsable para disear un?

La resolucin.
Niveles radiacin.
DVD, TV cable, video.
La frecuencia de operacin.
La operacin del voltaje.

Un comerciante que vende?

9
La marca
La resolucin
El tamao de la pantalla
El precio real y el precio comercial
La oferta y la demanda
Los nuevos modelos de TV

El Fabricante?

El precio de cada uno de los elementos


Los sueldos
La calidad de la TV
El costo de ensamblaje de la TV

3. Seleccione una rea problemtica que le gustara (a usted) trabajar de modelo de una
perspectiva orientada a objetos. Idealmente, ste ser un problema en el que usted est en
realidad yendo para estar trabajando en su lugar de empleo, o que usted tiene un inters
agudo. Suponga que usted va a escribir un programa de automatizacin un poco de
aspecto de esta rea problemtica; escribir una visin general una pgina de los requisitos
para este programa, despus de los requerimientos de sistema de registro del estudiante.
Asegrese que su primer prrafo resume el propsito del sistema, cuando el primer prrafo
en el SRS estudio de casos lo hace. Tambin, enfatice los requisitos funcionales - eso es,
que un usuario final un tcnico podra decir respecto a cmo debe actuar - y evitar decir
requerimientos tcnicos - por ejemplo el sistema, "Este sistema debe funcionar en una
plataforma de Windows NT, y debe usar protocolo de TCP/IP a ".

Requerimientos del usuario:

Nuestro usuario desea un juego de peleas que tenga varios personajes, armas y escenarios;
los personajes pueden realizar diferentes golpes, se les puede cambiar el nombre y se
pueden modificar sus caractersticas. Hay diferentes niveles de dificultades y hay la opcin
de multi-jugadores. El juego deber incluir detalles de erotismo, sangre y realismo. La
opcin de trucos y claves tambin deber estar disponible.
Como podemos cambiar las caractersticas del personaje lo primero es ver que
caractersticas dejaremos cambiar. Nosotros hemos escogido las siguientes: nombre, ropa,
color del pelo, armas y poderes.
Crearemos a partir de un escenario diferentes lugares para los encuentros, en los cuales
cada uno tenga su msica de fondo y dejaremos cambiar de los escenarios solamente los
horarios de las peleas.
Con respecto a los niveles de dificultades los poderes son nuestro punto de partida, puesto
que para niveles ms difciles le daremos al personaje contrincante la libertad de poderes.

Los detalles de erotismo, sangre y realismo lo vamos a hacer de la siguiente manera:

Erotismo: la ropa y movimientos de los personajes son los puntos importantes.


Sangre: animaciones en los golpes.
Realismo: en los movimientos y los golpes.

10
III
CLASES Y OBJETOS

11
CAPITULO III
3.1 Entidad del mundo Real:

Es todo objeto que tiene caractersticas propias y una funcionalidad.

3.2 Objeto:

Los objetos son la esencia fundamental de los sistemas orientados a objetos. Segn la
definicin del Diccionario de Merrian-Websters, un objeto es algo material que puede ser
percibido por nuestros sentidos.

Los objetos son la abstraccin de las cosas del mundo real, los cuales tienen ciertas
propiedades y funciones.

Una vez hecha la abstraccin de este objeto podemos definir qu representara un objeto
de software de la siguiente manera: Es una construccin que une los datos y las funciones
que juntas representan la abstraccin del mundo real de un objeto. Los valores de un
atributo para un objeto definen un estado.

Los atributos definen las caractersticas que tienen un objeto y las funciones muestran
como los objetos acceden a sus datos para modificar y mantener sus atributos.

Un objeto no es un dato simple, sino que contiene en su interior cierto nmero de


componentes bien estructurados. Cada objeto no es un ente aislado, sino que forma parte
de una organizacin jerrquica o de otro tipo.

Un objeto es una unidad que contiene los datos y las funciones que operan sobre esos
datos; en los objetos se encuentra toda la informacin que permite identificarlo frente a
otros objetos pertenecientes a otra clase.

Se puede decir de los objetos:

Es una entidad del mundo real que tiene propiedades, caractersticas y


funcionalidad.
Es una instancia de una clase.
Es una variable de una clase.
Lo que diferencia a un objeto son sus atributos.
Todos los objetos se comunican por medio de mensajes.
Todo lo que un objeto es capaz de hacer se le denomina funcionalidad.
Un sistema necesita la interaccin de los objetos.

Para poder describir todos los objetos de un programa, conviene agrupar stos en clases.

3.3 Atributos

Los atributos son las caractersticas individuales que diferencian un objeto de otro y
determinan su apariencia, estado u otras cualidades. Los atributos se guardan en variables

12
denominadas de instancia, y cada objeto particular puede tener valores distintos para estas
variables.

3.4 Descomposicin de un objeto

Junto con mantener sus caractersticas propias, un objeto se puede descomponer en un


conjunto de objetos funcionales, segn sea el propsito de tal abstraccin.
Por ejemplo para disear un auto virtual, se necesita empezar a descomponer el objeto
padre en objetos hijos como el motor, ruedas, volante, asientos, etc. A su vez el objeto
motor se puede descomponer en los objetos batera, tanque de gasolina, bugas entre otros.

La descomposicin podra llegar en este caso hasta el objeto tornillo o cable, segn sea la
profundizacin y detalle del diseo.

EJEMPLO:

Auto = Motor + Ruedas + Volante + Asientos + Acelerador + Freno + Caja de cambios +...
Motor = Batera + Tanque de gasolina + Bugas +...

3.5 Objetos como atributos

Algunos de los atributos de una clase pueden ser representados por tipos predeterminados
provedos por el lenguaje de Java, mientras que los tipos de algunas u otras clases son
dejados sin especificar temporalmente. Ahora se toma en cuenta los tipos definidos por
usuario con respecto a uno de estos atributos de una clase determinada. Por ejemplo:

13
Estudiante
ATRIBUTOS TIPO DE DATOS ORIGEN
nombre String primitivo
id_Estudiante String primitivo
fecha_Nacim Fecha Usuario
inspector Profesor Usuario

En este caso de la clase estudiante se observa que los atributos nombre, id_Estudiante son
tipos de datos primitivos (String) y los atributos fecha_Nacimiento e inspector son del tipo
de datos definidos por el usuario en este caso las clases Fecha y Profesor creadas
anteriormente para el uso de la clase Estudiante en donde podemos observar que pueden
ser atributos de esta clase.

3.6 Clase:

Una clase es una abstraccin que describe las caractersticas comunes de todos los
miembros en un grupo de objetos similares. En este punto de definicin, se incluye los
siguientes conceptos de formalizacin. A las caractersticas propias se les llamar atributos
y a las caractersticas funcionales se les llamar mtodos.

La estructura de datos, la cual est definida por los campos con sus respectivos
nombres y tipos de datos (ATRIBUTOS).
Los mtodos, que describen el comportamiento y las funcionalidades que tienen
cada objeto.

EJEMPLO:

Las siguientes clases estn definidas por cada uno de sus atributos y mtodos..

14
Las clases pueden ser diferenciadas de objetos de la siguiente manera por lo tanto:
Una clase define las caractersticas, los atributos, los mtodos que cada objeto que
pertenece a la clase debe poseer.

3.7 Instanciacin (Particularizacin):

El trmino instanciacin es usado para designar un objeto el cual est construido en base a
una clase ya definida.
De una definicin de clase sola por ejemplo, Estudiante - podemos crear muchos objetos
con las estructuras de datos idnticas y comportamientos. Otra manera de hacer
referencia a un objeto, es como un ejemplo de una clase especial por ejemplo, "Un objeto
estudiante es un ejemplo de la clase estudiante. " (Hablaremos del proceso fsico de
ejemplificar objetos cuando ocurre en Java).

3.8 Instanciando objetos:

Un objeto es una instancia de una clase entonces, se pueden crear muchas instancias de
una clase. La creacin de un objeto de una clase se llama creacin de una instancia de la
clase.

3.9 Objetos Vs. Bases de Datos:

Aqu se relacionan de forma analgica las propiedades de los objetos con los sistemas de
bases de datos relacionales de la siguiente forma:

Cada clase de un objeto es anloga a una tabla en una base de datos relacional.
Cada registro o fila en una tabla es anloga a diferentes objetos.
Cada columna en una tabla corresponde a diferentes atributos en un objeto.

Esta correspondencia entre objetos y registros tienen muchas fallas, sin embargo los
objetos tienen funcionalidad mientras un registro no necesariamente la tiene.

15
Clases como tipos de datos abstractos

As como se pueden declarar tipos de datos primitivos, de la misma forma se pueden crear
tipos de datos abstractos en funcin de una clase u objeto.

3.10 Composicin de clases:

Cuando tenemos una clase en la cual uno o ms atributos estos pueden ser referenciados a
otros objetos cuando nos referimos a la clase como una composicin de clases. Para que un
lenguaje sea considerado como orientado a objetos debe cumplir con las propiedades de
herencia y polimorfismo.

3.11 Encapsulacin:

Es una tcnica que permite localizar y ocultar los detalles de un objeto.


La encapsulacin previene que un objeto sea manipulado por operaciones distintas de las
definidas. La encapsulacin es como una caja negra que esconde los datos y solamente
permite acceder a ellos de forma controlada.

Las principales razones tcnicas para la utilizacin de la encapsulacin son:

1. Mantener a salvo los detalles de representacin, si solamente nos interesa el


comportamiento del objeto.
2. Modificar y ajustar la representacin a mejores soluciones algortmicas o a nuevas
tecnologas de software.

3.12 Abstraccin:

Una abstraccin es una representacin concisa de una idea o de un objeto complicado. En


un sentido ms especifico, la abstraccin localiza y oculta los detalles de un modelo o
diseo para generar y manipular objetos.

Una abstraccin tiene un significado ms general que la encapsulacin, pudiendo hablar de


abstraccin de datos en lugar de encapsulacin de datos.

Como resumen de los conceptos expuestos anteriormente podemos decir que:

1. Los objetos son encapsulaciones de abstracciones en la POO.


2. La unidad de encapsulacin en la POO es el objeto.

3.13 Polimorfismo:

Significa que un nombre se puede utilizar para especificar una clase genrica de acciones.

16
3.14 Herencia:

La herencia permite que se puedan definir nuevas clases basadas en clases existentes, lo
cual facilita reutilizar cdigo previamente desarrollado. Si una clase deriva de otra
(extends) hereda todas sus variables y mtodos. La clase derivada puede aadir nuevas
variables y mtodos y/o redefinir las variables y mtodos heredados.

En Java, a diferencia de otros lenguajes orientados a objetos, una clase slo puede derivar
de una nica clase, con lo cual no es posible realizar herencia mltiple en base a clases. Sin
embargo es posible simular la herencia mltiple en base a las interfaces.
Por lo tanto la herencia es un proceso mediante el cual un objeto puede adquirir las
propiedades de otro objeto.

3.15 Jerarqua:

Es una propiedad que nos permite ordenar las abstracciones.

3.16 Mtodos:

Es la interfaz de la clase y tiene restricciones.


El mtodo reside en el objeto y determina como acta el objeto cuando recibe un mensaje,
es decir el mtodo es la funcin que se invoca para actuar sobre un objeto.

3.17 Procedimientos para implementar un sistema

Para poder implementar un sistema podemos tener las siguientes prioridades o pasos a
seguir:

1. requerimientos
2. identificar los objetos
3. agrupar los objetos que tengan caracterstica y funcionalidades comunes.
4. abstraccin de los grupos de objetos.
5. encapsulamiento.
6. relaciones que se dan entre las clases.

3.18 Notacin preliminar

Todos los lenguajes de programacin orientados a objetos (OOPLs), incluyendo Java,


defienden las siguientes convenciones para dar nombre:

Cuando nombrar clases, comenzamos con una letra mayscula, pero usamos caso mezclado
para el nombre en general: estudiante, curso, catedrtico, etctera. Cuando el nombre de
una clase tiene una frase de ms de 1 palabra, como "Catlogo de curso", empezamos cada
palabra con una letra mayscula, y concatenamos las palabras sin usar espacios, correr, o
subrayarlos para separarlos por ejemplo, CatalogoCurso. Este estilo es sabido como
cubierta de Pascal.

17
Los mtodos y atributos debern cumplir con las siguientes restricciones de descripcin:

Incluir como dos ltimos caracteres a los smbolos ()

Ejemplo: encender() , apagar() , ascender() , ...

No dejar espacios si el nombre de la caracterstica es compuesto.


Para esto existen las siguientes soluciones.
Las palabras siguientes deben comenzar con mayscula
Usar el separador.

Forma Incorrecta Forma Correcta


subir volumen() subirVolumen() , subir_volumen()
obtener presion() obtenerPresion() , obtener_presion()

No pueden contener acentos

Forma Incorrecta Forma Correcta


obtenerPresin() obtenerPresion()
asignar_nmero() asignar_numero()

Empezar el nombre con minscula

Forma Incorrecta Forma Correcta


Vender() vender()
AumentarStock() aumentarStock()

Las caractersticas no funcionales o bien llamados atributos, siguen las mismas


restricciones preliminarmente), pero no llevan los smbolos (). Ejemplo: velocidad, x, a,
presion, primerNombre, numeroDeVentanas.

3.19 Procedimientos para implementar un sistema

Para poder implementar un sistema podemos tener las siguientes prioridades o pasos a seguir:

1. requerimientos
2. identificar los objetos
3. agrupar los objetos que tengan caracterstica y funcionalidades comunes.
4. abstraccin de los grupos de objetos.
5. encapsulamiento.
6. relaciones que se dan entre las clases.

18
19
PARA RECORDAR

1. Una clase es una abstraccin que describe las caractersticas comunes


de todos los miembros en un grupo de objetos similares.
2. Un objeto es una instancia de una clase.
3. Encapsulacin es una tcnica que permite localizar y ocultar los
detalles de un objeto.
4. Un objeto pueden tener objetos y son a los que se les asigna los
valores.
5. Jerarqua es una propiedad que nos permite ordenar las abstracciones.
6. La herencia permite que se puedan definir nuevas clases basadas en
clases existentes.
7. Se vuelve a utilizar la Abstraccin a menudo cuando intentamos hacer un modelo
de un nuevo concepto.
8. Una abstraccin es una representacin concisa de una idea o de un
objeto complicado.
9. Polimorfismo significa que un nombre se puede utilizar para
especificar una clase genrica de acciones.

3.19 Ejercicios:

1. Desde la perspectiva de los requerimientos de una academia (y no


necesariamente el estudio del caso SRS) piense acerca de cules atributos y
mtodos de las siguientes clases podran ser apropiados.

Aula
Departamento
Grado

Cules de los atributos de cada una de estas clases podran ser declaradas para
implementar tipo de datos en Java, y cules podran ser declarados como tipo de
datos abstractos. Explique su razn fundamental.

Classroom
Attributes:

String edificio
String piso
String nombre
integer capacidad
String tipo

20
Methods:

Classroom ()
Classroom (String, String, String, integer, String)
Classroom (Classroom)
getEdificio ()
getPiso ()
getNombre ()
getCapacidad ()
getTipo ()
setEdificio (String)
setNombre (String)
setPiso (String)
setTipo (String)
setCapacidad (int)
imprimir()

Department
Attributes

String coordinador
String nombreDepartamento
String edificio
String tipoformacion
String escuela

Methods:

Department ()
Department (String, String, String, String, String)
Department (Department)
getEdificio ()
getNombreDepartamento ()
getCordinador ()
getEscuela ()
getTipoFormacion ()
setEdificio (String)
setNombreDepartamento (String)
setCordinador(String)
setEscuela (String)
setTipoFormacion (String)
imprimir()

Degree
Attributes

String grado

21
String numeroAlumnos
String edificio
String jornada
String profesor

Methods:

Degree ()
Degree (String, String, String, String, String)
Degree (Degree)
getGrado ()
getNumeroAlumnos ()
getEdificio ()
getJornada()
getProfesor ()
setGrado (String)
setNumeroAlumnos (String)
setEdificio(String)
setJornada (String)
setProfesor (String)
imprimir()

Para el problema rea de que requerimientos tu definiste para el ejercicio 3 del


captulo 2, la lista de abstracciones, datos, tipos/clases, que t podras necesitar
para modelar

Personage
Attributes

String nombre
double estatura
String colorCabello
String traje

Methods:

Personaje ()
Personaje (String, double, String, String)
Personaje(Personaje)
getNombre ()
getEstatura ()
getColorCabello()
getTraje()
setNombre (String)
setEstatura (double)
setColorCabello(String)
setTraje(String)

22
Escenario
Attributes

String color
String tipo
String nombre

Methods:

Escenario ()
Escenario(String, String, String)
Escenario (Escenario)
getNombre ()
getColor ()
getTipo()
setNombre (String)
setColor (String)
setTipo (String)

Arma
Attributes

String color
String tipo
String nombre
double tamao
int nivelDeDao

Methods:

Armas ()
Armas (String, String, String,double,int)
Armas (Armas)
getNombre ()
getTamao ()
getColor ()
getTipo()
getNivelDeDao ()
setNombre (String)
setColor (String)
setTipo (String)
setTamao (double)
setNivelDeDao (int)

Golpe
Attributes

23
String clasificacion
String tipo
String nombre
int nivelDeDao

Methods:

Golpe ()
Golpe (String, String, String,int)
Golpe (Golpe)
getNombre ()
getClasificacion ()
getTipo()
getNivelDeDao()
setNombre (String)
setClasificacion (String)
setTipo(String)
setNivelDeDao(int)

24
IV
CONSTRUCTORES Y METODOS

25
CAPITULO IV
4.1 CONSTRUCTORES

Un punto clave de la Programacin Orientada Objetos es el evitar informacin incorrecta


por no haber sido correctamente inicializadas las variables. Java no permite que haya
variable que no estn inicializadas.

Java inicializa siempre con valores por defecto las variables miembros de clases y objetos.
El segundo paso en la inicializacin correcta de objetos es el uso de constructores.

Un constructor es una funcin especial denominada mtodo, tiene el mismo nombre de la


clase y que se llama automticamente cada vez que se crea un objeto de una clase. La
principal misin del constructor es reservar memoria e inicializar las variables, miembros
de la clase.

Los constructores no tienen valor de retorno (ni siquiera void) y su nombre es el mismo
que el de la clase. Su argumento implcito es el objeto que se est creando.

Una clase tiene varios constructores, que se diferencian por el tipo y nmero de sus
argumentos.

Son funciones que se ejecutan una sola vez cuando se crea el objeto.
Un constructor se crea y se ejecuta una sola vez.
El nmero de constructores depende de los requerimientos.
Un constructor inicializa los atributos de los objetos.
No tienen el concepto de retorno (nunca retornan valores).
Los constructores son del tipo Pblicos.
El constructor se llama de forma automtica cuando se crea un objeto, para situarlo
en memoria e inicializar los miembros dato declarados en la clase.

En la definicin hay que tener en cuenta el concepto de sobrecarga.

4.2 SOBRECARGA

La sobrecarga consiste en poder tener varios mtodos o constructores con el mismo


nombre dentro de una misma clase y que no hagan las mismas cosas

4.3 TIPOS DE CONSTRUCTORES

Constructor por defecto por no tener parmetros


Constructor por Parmetros
Constructores Copia

26
En la clase Punto se define los siguientes constructores:

Punto() Constructor por defecto


Punto(initialX : int, initialY : int ) Constructor por Parametros
Punto(initialPunto : Punto) Constructor copia

4.4 ACCESORIOS

MODFICADORES (SET), aquel que asigna un valor a la variable.


SELECTORES (GET), aquel que devuelve un valor de una variable.
Los accesorios de la Clase Punto son :

getX (): int


setX (valueX : int): void

4.5 MTODOS DE CLASE

Los mtodos de clase al igual que las variables de clase, se aplican a la clase como un todo
y no a sus instancias. Para acceder a las variables o mtodos de clase se utiliza el mismo
operador punto (.). Se puede acceder a las variables y mtodos de clase a travs de un
objeto, est permitido y se recomienda utilizar mejor el nombre de la clase

El operador new

El operador new crea una instancia de una clase (objetos) y devuelve una referencia a ese
objeto. Por ejemplo:

Punto h = new Punto (10, 20)

El operador punto (.)


El operador punto (.) se utiliza para acceder a las variables de instancia y los mtodos
contenidos en un objeto, mediante su referencia a objeto:

Int q = p.getX (); nos devuelve la coordenada en X del Punto

EJERCICIO DE APLICACIN

Realice el UML de un objeto circulo si es necesario aumente clases

27
Punto
-x : double -centro
-y : double
+Punto()
+Punto(entrada initialX : double, entrada initialY : double) *
+Punto(entrada initialPunto : Punto)
+getX() : double
+getY() : double
+setX(entrada valueX : double) : void *
+setY(entrada valueY : double) : void
+moverX(entrada incrementoX : double) : void
+moverY(entrada incrementoY : double) : void Circulo
+imprimirPunto() : void
-centro : Punto
-radio : double
+Circulo()
+Circulo(entrada initialCentro : Punto, entrada initialRadio : double)
+Circulo(entrada initialCirculo : Circulo)
+getRadio() : double
+getCentro() : Punto
+setRadio(entrada valueRadio : double) : void
+setCentro(entrada valueCentro : Punto) : void
+moverCentro(entrada incrementoCentro : Punto) : void

APLICACIN DE LAS CLASES

Creacin de objetos:

Circulo P = new Circulo ( );

Circulo: representa la clase


P: Variable u objeto de la clase Circulo
new : instancia (crea el objeto), reserva inmediatamente la memoria
Circulo( ) : inicializa los valores de P

Circulo q = new Circulo (3, 5, 7);

q es una referencia (alias) de la clase Crculo.


Circulo (3, 5, 7): inicializa los valores de q mediante el constructor por parmetros.

Punto h = new Punto (10, 20);

Circulo z =new Circulo (h, 30);

h es una referencia de la clase Punto


z es una referencia de la clase Circulo

28
Circulo (h, 30): inicializa los valores de z mediante el constructor por parmetros.

Circulo w =new Circulo (z);

w es una referencia de la clase Circulo


Circulo (h) inicializa los valores de w mediante el constructor copia.

Manipulacin de los mtodos de las Clases:

z. setRadio( 5 );

Cambia el radio del circulo z a 5

z. getCentro( )

Obtiene el centro del circulo z

z. getCentro( ). moverX ( 100);

Mueve la coordenada X del centro del Circulo z

double r = z. getCentro ( ). getX ( );

Obtiene la coordenada X del centro del Crculo z y lo asigna a una variable r.

29
V
TIPOS DE DATOS

30
CAPITULO V

Construyendo tipos de datos en Java


Java es un lenguaje de programacin enrgicamente escrito a mquina, en lo que respecta
a cuando una variable es declarada, su tipo tambin debe ser declarado. Entre otras cosas,
declarar el tipo de una variable dice al recopilador cunta memoria se asigna para la
variable al tiempo de ejecucin, y tambin restringe el contexto (s) en el que esa variable
puede ser usada en nuestro programa posteriormente.

El lenguaje de Java define ocho tipos primitivos (todos estos nombres de tipo son palabras
reservadas de Java), de la siguiente manera.

Cuatro tipos de datos numricos de entero:

Datos Tamao
Byte 8 bits
Short 16 bits
Int 32 bits
Long 64 bits

Dos tipos numricos de punto flotante:

Datos Tamao
float 32 bits
double 64 bits

Adems dos tipos primitivo adicionales:

Datos Tamao
char 16 bits
boolean ---------

Char: un carcter solo, almacena usando codificacin de Unicode 16-bit (versus la


codificacin de ASCII 8 bit), que permite que a Java trate con un rango de juegos de
caracteres internacionales.

Boolean: una variable que puede asumir uno de dos valores: verdadero o falso (ambos de
estos valores son palabras reservadas en Java) solamente. Las variables Boolean son
usadas como indicadores para marcar si un poco de cdigo debe ser llevado a cabo
condicionalmente, a menudo como en el siguiente fragmento de cdigo

Operadores aritmticos

31
El lenguaje de Java provee varios operadores aritmticos bsicos, como se muestra a
continuacin:

Operador Descripcin

+ Suma
- Resta
= Multiplicacin
/ Divisin
% Porcentaje (el porcentaje cuando el operando a la izquierda del
operador de % es dividido por el operando a la derecha; por ej. 3 =
1 10 %, porque 3 entra en 10 tres veces, dejando un restante de 1)

Los operadores (+) y (-) tambin pueden ser usados como operadores unarios para
demostrar los nmeros seguros o negativos: - 3.7, +42.

Adems de los operadores de asignacin simple, (=), hay varios operadores de asignacin
compuestos especializados, que combinan la asignacin variable con una operacin
aritmtica, como se indica a continuacin

Operador Descripcin

+= a += b es equivalente a = a + b
-= a -= b es equivalente a = a - b
*= a *= b es equivalente a = a * b
/= a /= b es equivalente a = a / b
%= a %= b es equivalente a = a % b

Los dos operadores aritmticos finales que miraremos son el incremento (++) y
decremento (--), que son usados para aumentar o reducir el valor de una variable int en 1
o de un punto flotante (float, double) el valor de 1.0. Son conocidos como los operadores
unarios porque son aplicados a una variable sola, mientras que los operadores de archivo
binario combinan los valores de dos expresiones como se habl.

Operadores lgicos y relacionales

Un lgico del que la expresin compara dos (fcil o complicado) exp1 de expresiones y
exp2 en una manera especificada, resolver a un valor de boolean verdadero o falso.

Para crear las expresiones lgicas, Java provee a los operadores relacionales

32
Operador Descripcin

exp2 == exp1 Exp2 verdadero si exp1 iguala exp2 (el uso de un signo igual doble
para evaluar la igualdad).
exp1 > exp2 Verdadero si exp1 es ms grande que exp2.
exp1 >= exp2 Verdadero si exp1 es ms grande o igual a lo exp2.
exp1 <= exp2 Verdadero si exp1 es inferior o igual a lo exp2.
exp1 != exp2 Verdadero si exp1 no es igual a lo exp2 (el signo! es ledo como
"Not").
!exp La expresin Lgica NOT Verdadero si exp es falso, y falso si
exp es verdadera.
exp1 || exp2 La expresin compuesta o Lgica OR es verdadera si exp1 o
exp2 es verdadero
exp1 && exp2 La expresin compuesta o Lgica AND es verdadera solamente
si tanto exp1 como exp2 son verdad.
!exp "Not"; el valor de una expresin lgica de verdadero a falso y Vice
versa

CLASES DE ENVOLTURA

En ocasiones es muy conveniente poder tratar los datos primitivos (int, boolean, etc.)
como objetos. Los contenedores definidos por el API en el package java.util (Arrays
dinmicos, listas enlazadas, colecciones, conjuntos, etc.) utilizan como unidad de
almacenamiento la clase Object. Object es la raz de toda la jerarqua de objetos en Java,
estos contenedores pueden almacenar cualquier tipo de objetos.

El API de Java incorpora las clases de envoltura (wrapper class), que no son ms que dotar
a los datos primitivos con un envoltorio que permita tratarlos como objetos.

Byte para byte.


Short para short.
Integer para int.
Long para long.
Boolean para boolean
Float para float.
Double para double y
Character para char.

Las clases de envoltura existentes son:

33
Las clases de envoltura tienen siempre la primera letra en maysculas.

LA CLASE String

La clase String es un envolvente para el tipo de datos primitivo de cadena que proporciona
mtodos y propiedades que le permiten manipular tipos de valores de cadena primitivos.

Un objeto String representa una cadena alfanumrica de un valor constante que no puede
ser cambiada despus de haber sido creada.

Un objeto StringBuffer representa una cadena cuyo tamao puede variar.

Los strings u objetos de la clase String se pueden crear explcitamente o implcitamente.


Para crear un string implcitamente se pone una cadena de caracteres entre comillas
dobles. Por ejemplo:

System.out.println("El primer programa");

Para crear un string explcitamente :

String str=new String("El primer programa");

Para crear un string nulo (aqul que no contiene caracteres) se puede hacer de estas dos
formas

String str = "";


String str = new String();

Cmo se obtiene informacin acerca del string

La funcin miembro length.

String str = "El primer programa";


int longitud = str.length();

34
Llamando al mtodo startsWith:

String str="El primer programa";


boolean
resultado=str.startsWith("El");

La funcin miembro endsWith:

String str="El primer programa";


boolean resultado=str.endsWith("programa");

Comparacin de strings

Nos permite distinguir entre el operador lgico == y la funcin miembro equals de la


clase String.

boolean equals( Object obj );


boolean equalsIgnoreCase( Object obj );
int compareTo( String str2 );

INTEGER

Mtodo Descripcin
Integer(int valor) Constructores a partir de int y String
Integer(String valor)
int intValue() / byte byteValue() / float Devuelve el valor en distintos formatos, int, long, float, etc.
floatValue() . . .
boolean equals(Object obj) Devuelve true si el objeto con el que se compara es un Integer y su valor es el
mismo.
static Integer getInteger(String s) Devuelve un Integer a partir de una cadena de caracteres. Esttico
static int parseInt(String s) Devuelve un int a partir de un String. Esttico.
static String toBinaryString(int i) Convierte un entero a su representacin en String en binario, octal,
static String toOctalString(int i) hexadecimal, etc. Estticos
static String toHexString(int i)
static String toString(int i)
String toString()
static Integer valueOf(String s) Devuelve un Integer a partir de un String. Esttico.

DOUBLE

Mtodo Descripcin
Double(int valor) Constructores a partir de int y String

35
Double(String valor)
double doubleValue() / byte byteValue() / Devuelve el valor en distintos formatos, int, long, float, etc.
float floatValue() . . .
boolean equals(Object obj) Devuelve true si el objeto con el que se compara es un Double y su valor es el
mismo.
boolean isInfinite(); Devuelve true a partir de una cadena de caracteres. Esttico
static double parseDouble(String s) Devuelve un double a partir de un String. Esttico.
Convierte un double a su representacin en String en hexadecimal, etc.
static String toHexString(double i) Estticos
static String toString(double i)
String toString()
static Double valueOf(String s) Devuelve un Double a partir de un String. Esttico.

La Clase Character

Declaraciones char c = a;
Character C;
Comprobaciones Booleanas: boolean q = Character.isLowerCase(c); :true
boolean w = Character.isUpperCase(c); :false
boolean qw = Character.isDigit(c); :false
boolean y = Character.isSpace(c); :false
Traslaciones de Caracteres char c2 = Character.toLowerCase(c); :a
char c3 = Character.toLowerCase(c); :A
Traslaciones de carcter/digito int i = Character.digit(c,base); :-1
char c = Character.forDigit(i,base); :
Mtodos de la Clase Character C = new Character(J); : J
char c = C.charValue(); : J
String s = C.toString(); :J

La Clase Float

Declaraciones float f, k;
Float F;
Valores de Float f = Float.POSITIVE_INFINITY; : infinity
g = Float.NEGATIVE_INFINITE; :-infinity
h = Float.NaN; : h = NaN
i = Float.MAX_VALUE; :3.4E38
j = Float.MIN_VALUE; 1.4E-45
Conversiones de Clase/Cadena k = Float.valueOf(3.14);
String s = Float.toString(k);
Comprobaciones boolean b = Float.isNaN(k); :False
boolean c = Float.isInfinite(k); :False

Conversiones de Objetos Float L = new Float(k); :3.14


String u = L.toString(); :3.14
int a = L.intValue; :3
long OP = L.longValue(); 3
float b = L.floatValue(); :3.14
double d = L.doubleValue(); 3.14000010

36
La Clase Long

Declaraciones long l;
Long L;
Valores de Long L = Long.MIN_VALUE;
l = Long.MAX_VALUE;
Mtodos de Long String a = Long.toString(l,base);
String b = Long.toString(l);
int c = L.intValue; :0
long d = L.longValue(); :-92233720
float e = L.floatValue(); :-9.22E18
double f = L.doubleValue(); :-9.223372E18
String g = L.toString(); -92233720
int h = L.hashCode(); -2147486348
boolean j = L.equals(L); :true

LA CLASE STRINGBUFFER

Es una clase que implanta un buffer dinmico y tiene mtodos que permiten su
manipulacin de una manera sencilla.
Esta clase tambin se encuentra definida en el package java.lang
Debido a la manipulacin de datos esta clase consume mas recursos del sistema

Creacion de un objeto stringBuffer

Al estar la mayora de las caractersticas de los StringBuffers basadas en su tamao


variable, se necesita un nuevo mtodo de creacin:

StringBuffer();
StringBuffer( int len );
StringBuffer( String str );

Se puede crear un StringBuffer vaco de cualquier longitud y tambin se puede utilizar un


String como punto de partida para un StringBuffer.

StringBuffer Dos = new StringBuffer( 20 );


StringBuffer Uno = new StringBuffer( "Hola Mundo" );

37
Metodos de la clase stringBuffer

Obtener informacion
El cambio de tamao de un StringBuffer necesita varias funciones especficas para
manipular el tamao de las cadenas:

int length();
char charAt( int index );
void getChars( int srcBegin,int srcEnd,char
dst[],intdstBegin );
String toString(); void setLength( int newlength );
void setCharAt( int index,char ch ); int capacity();
void ensureCapacity( int minimum );
void copyWhenShared();

Modificacion del contenido


Para cambiar el contenido de un StringBuffer,se pueden utilizar dos mtodos: append() e
insert() .

EJEMPLO

class CadAppend {
public static void main( String args[] ) {
// Crea un StringBuffer inicializado a un texto por defecto
StringBuffer str = new StringBuffer( "Hola" );

// Le concatena otro texto, String


str.append( " Mundo" );
// Imprime en consola el resultado de la concatenacin
System.out.println( str );
}
}

CLASE STRINGTOKENIZER

Esta clase nos ayuda a dividir un string en substrings o tokens, en base a otro string
separador denominado delimitador. Los delimitadores marcan la separacin entre los
smbolos que se encuentran en la cadena de entrada. El delimitador puede ser una coma,
un punto y coma o dos puntos. El conjunto de delimitadores por defecto son los caracteres
de espacio habituales: espacio, tabulador, lnea nueva y retorno de carro. Supongamos un
string consistente en el nombre, y los dos apellidos de una persona separados por espacios
en blanco. La clase StringTokenizer nos ayuda a romper dicho string en tres substrings
basado en que el carcter delimitador es un espacio en blanco. Cuando se usa la clase
StringTokenizer se pone al principio del cdigo fuente la siguiente sentencia import.

import java.util.*; o bien

38
import java.util.StringTokenizer;

Mtodo nextToken() : Para ir extrayendo los smbolos consecutivamente.


Mtodo hasMoreTokens(): Devuelve true cuando todava quedan smbolos por extraer.

package ejem;
import java.util.StringTokenizer;
Public class Ejemplo {
static String cadena = "titulo=Tutorial de
Java:" +
"idioma=castellano:" +
"autor=Agustn Froufe:" +
"e-mail=froufe@arrakis.es";
public static void main( String args[] ) {
StringTokenizer st = new StringTokenizer(
cadena,"=:" );
while( st.hasMoreTokens() ) {
String clave = st.nextToken();
String valor = st.nextToken();
System.out.println( clave + "\t" + valor
);
}
}
Para convertir un String a un} tipo primitivo, debemos usar una clase envoltura. Todo tipo
primitivo tiene asociada una clase envoltura. Estas clases nos permiten tratar a los tipos
primitivos como objetos. Adems, estas clases contienen mtodos que permiten la
manipulacin de estos objetos, apropiados para el tipo de datos.

En casi todos los casos, la clase envoltura tiene el mismo nombre que el tipo de datos
primitivo con la primera letra en maysculas.

byte Byte

char Character

float Float

short Short

double Double

int Integer

39
PARA RECORDAR

16. El lenguaje de Java define ocho tipos primitivos Cuando una clase deriva
de otra, hereda todas sus variables y mtodos.
17. En ocasiones es muy conveniente poder tratar los datos primitivos (int,
boolean, etc.) como objetos
18. Object es la raz de toda la jerarqua de objetos en Java, estos
contenedores pueden almacenar cualquier tipo de objetos.
19. Un objeto String representa una cadena alfanumrica de un valor
constante que no puede ser cambiada despus de haber sido creada.
20. El API de Java incorpora las clases de envoltura (wrapper class), que no
son ms que dotar a los datos primitivos con un envoltorio que permita
tratarlos como objetos

40
VI
EXCEPCIONES

41
CAPITULO VI
6.1 EXCEPCIONES

Este hecho asoma su desagradable cara con tanta frecuencia durante la ejecucin de
programas que los autores consideramos seriamente aadir, al ttulo de este captulo.

A diferencia de otros lenguajes de programacin orientados a objetos como C/C++, Java


incorpora en el propio lenguaje la gestin de errores. El mejor momento para detectar los
errores es durante la compilacin. Sin embargo prcticamente slo los errores de sintaxis
son detectados durante este periodo. El resto de problemas surgen durante la ejecucin de
los programas.

En el lenguaje Java, una Exception es un cierto tipo de error o una condicin anormal que
se ha producido durante la ejecucin de un programa. Algunas excepciones son fatales y
provocan que se deba finalizar la ejecucin del programa. En este caso conviene terminar
ordenadamente y dar un mensaje explicando el tipo de error que se ha producido. Otras,
como por ejemplo no encontrar un fichero en el que hay que leer o escribir algo, pueden
ser recuperables. En este caso el programa debe dar al usuario la oportunidad de corregir
el error (indicando una nueva localizacin del fichero no encontrado).

Error inesperado en tiempo de ejecucin. Al lanzar una excepcin se crea un objeto de tipo
excepcin. Al producirse un error se generar un mensaje el depender del propio error.
As tenemos varios mensajes, que conforman las subclases de la clase Exception.

6.2 SUBCLASES DE EXCEPTION


Dispersas en los paquetes de Java, existen 60 o ms clases relacionadas con excepciones.
Todas ellas se derivan de la clase Exception, que a su vez es subclase de Throwable, como
se ilustra en la figura. Adems, la clase Throwable es una superclase de la clase Error y las
subclases de esta ltima. No se comenta el manejo de errores, puesto que usualmente
resultan de situaciones, como la falta de disponibilidad de memoria, que rebasan el alcance
del programa.

42
Una parte de la jerarqua de la clase Throwable.

A continuacin, se enumeran algunas de las subclases ms comunes de Exception.

6.3 EXCEPCIONES ESTNDAR DE JAVA

java.lang.ArithmeticException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayStoreException
java.io.EOFException .
java.io.FileNotFoundException
java.lang.IllegalArgumentException
java.lang.IllegalThreadStateException
java.lang.IndexOutOfBoundsException
java.lang.InterruptedIOException
java.io.lOException
java.net.MalformedRLException
java.lang.NegativeArraySizeException
java.lang.NullPointerException
java.lang.NumberFormatException

43
java.lang.ArithmeticException: Indica que algo anda mal en una expresin
aritmtica, como sera la divisin entre cero.

java.lang.ArrayIndexOutOfBoundsException: Indica que se trat de tener


acceso a un elemento en un ndice invlido de una matriz (menor que 0 o mayor
o igual que la longitud de la matriz).

java.lang.ArrayStoreException: Indica que se intent colocar un elemento de


tipo incorrecto en una matriz.

java.io.EOFException: Indica que se lleg a una marca de fin de archivo. Los


archivos y el paquete java.io

java.io.FileNotFoundException: Indica que se hizo una referencia a un archivo


que no se pudo encontrar.

java.lang.IllegalArgumentException: Indica una llamada algn mtodo con


argumento invlido. Es la clase madre de IllegalThreadStateException y
NumberFormatException.

java.lang.IllegalThreadStateException: Indica que un subproceso tiene estado


inadecuado para una llamada a un mtodo.

java.lang.IndexOutOfBoundsException: Es la clase madre de


ArrayIndexOutOfBoundsException y de StringIndexOutOfBounds-Exception.
Indica que un ndice est fuera de lmites.

java.lang.InterruptedIOException: Indica que se interrumpi una operacin de


entrada o salida de datos.

java.io.lOException: Indica una excepcin de entrada/salida general.

java.net.MalformedRLException: Indica una URL formada incorrectamente.

java.lang.NegativeArraySizeException: Indica que se intent declarar una


matriz con especificacin de tamao negativo.

java.lang.NullPointerException: Indica que una instancia de un objeto que


actualmente es null llama a un mtodo de clase.

java.lang.NumberFormatException: Indica que se usa un formato de nmero


invlido, frecuentemente en el argumento de un mtodo.

44
java.lang.StringIndexOutOfBoundsException: Indica el intento de usar un
ndice String inapropiado. La clase Exception en s es muy sencilla.

Posee slo dos constructores:

Exception()

Exception(String message)

6.4 MTODOS QUE GENERAN EXCEPCIONES

Numerosos mtodos analizados hasta este punto generan excepciones. No se ha utilizado


tal hecho hasta el momento, por lo que est claro que un programa de Java no necesita
manejar excepciones; pero ya que el lector sabe que existen, a continuacin se presenta
una lista ms bien completa de los mtodos ya estudiados que generan excepciones.

6.5 MANEJO DE EXCEPCIONES

Aunque el proceso de manejar excepciones en Java comprende algunos detalles complejos,


la idea fundamental es muy sencilla: se indica la intencin de manejar una excepcin al
marcar un bloque, donde podra ocurrir la excepcin, y luego incluir el cdigo que se
usara, slo en caso de que sea necesario manejar la excepcin. Si no surge la excepcin,
Java simplemente hace caso omiso de ese cdigo adicional.

6.6 LAS PALABRAS CLAVE Y CATCH

La palabra clave try se usa antes de un bloque de instrucciones (es decir, un conjunto de
cero o ms instrucciones delimitadas con llaves) que podr generar una excepcin.
Anteceder un bloque de cdigo con try indica la intencin de manejar algunas de las
excepciones que se generen en el bloque o todas ellas. Si no surgen excepciones mientras
se ejecutan las instrucciones del bloque, no se emprenden acciones especiales, como si la
palabra try no se hubiera incluido.

6.7 SINTAXIS: BLOQUE TRY

Un bloque try se escribe como sigue:

45
{

//Cdigo que podra generar u excepcin

6.8 SINTAXIS: CLUSULA CATCH


Una clusula catch se escribe como sigue:

catch (TipoExcepcin variable)

//Cdigo para manejar la exepcin, quiz con uso de


variable

//La variable tiene significado slo en este bloque

Si no se generan excepciones durante la ejecucin de un bloque try, se omite la ejecucin


de las clusulas catch que le correspondan. Pero, cuando surge una excepcin en el bloque
try seguido de una clusula catch compatible con el tipo de excepcin, el control pasa
inmediatamente del bloque try a la clusula catch apropiada. Las instrucciones del bloque
catch se ejecutan en siguiente trmino, y luego el control se transfiere a la primera
instruccin que sigue al bloque try (y se hace caso omiso de las clusulas catch
subsiguientes). El ejemplo de divisin entre cero se manejara como sigue:

offset = x / n;

// todo lo siguiente se omite si n = 0.

catch (ArithmeticException
e) {

offset = 10;

// Aqu contina la ejecucin despus del manejo de la

// excepcin.

46
En este punto, vale la pena resaltar dos aspectos importantes. En primer trmino, ntese
que la semntica de try...catch permite suponer que si se ejecuta una instruccin del bloque
try, ninguna de las instrucciones previas gener excepciones, puesto que el control no
vuelve al bloque mencionado una vez que sale de l.2 En segundo lugar, las clusulas catch
se examinan de arriba abajo, hasta llegar a la primera que tiene un argumento compatible
con la excepcin generada (en el sentido usual de compatibilidad de argumentos), con
omisin de todas las clusulas subsiguientes. Ello significa que se deben enumerar tales
clusulas en orden decreciente de especificidad. Por ejemplo, el cdigo siguiente sera un
desperdicio de esfuerzo, ya que la segunda clusula catch nunca se ejecutara:

try
. .
{
...
}
catch (Exception e)

// Este tipo de argumento es una asignacin

// compatible con cada excepcin,

Salvo que el control vuelva al bloque desde arriba en un momento ulterior de la ejecucin
normal, como ocurrir, por ejemplo, en un ciclo.

Un bloque try debe ir seguido inmediatamente de una o ms clusulas catch, ya que el uno
no puede existir sin las otras, y a la inversa, no se puede escribir un bloque try sin al
menos una clusula catch subsiguiente, ni un conjunto de clusulas catch que no est
precedido inmediatamente de un bloque try.

6.9 GENERACIN DE EXCEPCIONES (LA INSTRUCCIN THROW)


Existen ocasiones en que conviene generar una excepcin de manera controlada, en vez de
reclinarse en el silln y esperar pasivamente a que Java la genere. Esto es posible con la
instruccin throw.

6.10 SINTAXIS: LA INSTRUCCIN THROW


La instruccin throw asume la forma siguiente:

throw instanciaExcepcin;

47
Cuando se ejecuta una instruccin throw, se enva exceptionInstance al ambiente en
tiempo de ejecucin, de igual modo que una excepcin generada por Java, por ejemplo, al
toparse con algo como una matriz fuera de lmites. Luego, el programa puede usar el par
try...catch para manejar la excepcin en la forma usual. A manera de ejemplo, supngase
que se tiene una secuencia de instrucciones, la cual requiere que la variable n sea par a fin
de funcionar correctamente. Podra manejarse este requisito al generar una excepcin
apropiada, como sigue:

// n recibe aqu cierto valor


try
{
if (n % 2 == 1) // n is odd
throw new ArithmeticException() ;
else
//El cdigo para el cual se requiere que n sea par est aqu
}
catch (ArithmeticException e)
{
// Aqu se manejan los valores nones de n.

6.11 SINTAXIS: CLUSULA THROWS

La clusula throws puede aadirse al encabezado de un mtodo en la forma siguiente:

Void myMethod() throws tipoExcepcinl, tipoExcepcin2


La clusula throws puede incluir los nombres de tantos tipos de Exception como sea
necesario, separados entre s mediante comas.

El siguiente es un ejemplo de un mtodo que indica la posibilidad de que surja uno de dos
tipos de excepciones, IllegalArgumentException, que genera en forma explcita una de las
instrucciones, o NullPointerException, que genera el mtodo equals(s) si la instancia de
String que realiza la llamada es null.

48
String wantCookie(String s) throws
IllegalArgumentExceptionNullPointerException

if (s.equals("Cookie"))

return "Thanksi";

else

throw new IllgalArgumenfcExcepton("Me want Cookie!");

// Es innecesario un return, puesto que es imposible llegar hasta aqu.

PARA RECORDAR

1. Exception es un cierto tipo de error o una condicin anormal que se ha


producido durante la ejecucin de un programa.
2. Al lanzar una excepcin se crea un objeto de tipo excepcin
3. Todas las excepciones se derivan de la clase Exception, que a su vez es
subclase de Throwable.
4. La clase Throwable es una superclase de la clase Error.
5. Un bloque try debe ir seguido inmediatamente de una o ms clusulas
catch.
6. Si no se generan excepciones durante la ejecucin de un bloque try, se
omite la ejecucin de las clusulas catch que le correspondan.
7. La clusula throws genera una excepcin de manera controlada de Java.
8. La clusula throws puede incluir los nombres de tantos tipos de Exception
como sea necesario

49
6.12 EJERCICIOS:

En el siguiente ejercicio se captura la excepcin que se produce al realizar una divisin


para cero y se la trata dentro del mtodo que realiza la divisin y cada vez que se
produzca un error lo capture en la divisin.

package exception;

public class Ejer2 {

public static void main(String[] args) {

int n = 10;
int d = 0;
int r = div(n,d);
System.out.println("Res "+r);
}

public static int div(int vn, int vd) {

try {

return vn/vd;
} catch(ArithmeticException e) {

return 0;
}
}
}

50
A continuacin capturamos la excepcin dentro de la funcin main que se produce al
hacer la divisin para cero

package exception;

public class Ejer {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int n = 5;
int d = 0;
int []a = {1,2,3};
int v = a[10];
int r = n/d;
} catch(ArithmeticException e) {

System.out.println("Error division pa
cero");
} catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Fuera de rango");
}

51
VII
HERENCIA

52
CAPITULO VII
Herencia
La herencia es una metodologa de clases, para que una clase hija pueda heredar las
caractersticas (propiedades y mtodos) de su clase padre. Se puede construir una clase a
partir de otra mediante el mecanismo de la herencia. Para indicar que una clase deriva de
otra se utiliza la palabra extends, como por ejemplo:

classCirculoGrafico extends Circulo{...}

Cuando una clase deriva de otra, hereda todas sus variables y mtodos. Estas funciones y
variables de miembro pueden ser redefinidas en la clase derivada, que puede tambin
definir o aadir nuevas variables y mtodos. En cierta forma es como si la sub-clase (la
clase derivada) contuviera un objeto de la super clase; en realidad lo ampla con nuevas
variables y mtodos.

Java permite mltiples niveles de herencia, pero no permite que una clase derive de varias
(no es posible la herencia mltiple). Se pueden crear tantas clases derivadas de una misma
clase como se quiera.

Todas las clases de Java creadas por el programador tienen una super-clase. Cuando no se
indica explcitamente una super-clase con la palabra extends, la clase deriva de
java.lang.Object, que es la clase raz de toda la jerarqua de clases de Java. Como
consecuencia, todas las clases tienen algunos mtodos que han heredado de Object.
La composicin (el que una clase contenga un objeto de otra clase como variable miembro)
se diferencia de la herencia en que incorpora los datos del objeto miembro, pero no sus
mtodos o interface (si dicha variable miembro se hace private).

La clase Object
Como ya se ha dicho, la clase Object es la raz de toda la jerarqua de clases de Java. Todas
las clases de Java derivan de Object. La clase Object tiene mtodos interesantes para
cualquier objeto que son heredados por cualquier clase. Entre ellos se pueden citar los
siguientes:

Mtodos que pueden ser redefinidos por el programador:

Clone() Crea un objeto a partir de otro objeto de la misma clase. El mtodo


original heredado de Object lanza una CloneNotSupportedException. Si se desea
poder clonar una clase hay que implementar la interface Cloneable y redefinir el
mtodo clone(). Este mtodo debe hacer una copia miembro a miembro del objeto
original. No debera llamar al operador new ni a los constructores.

53
equals(): Indica si dos objetos son o no iguales. Devuelve true si son iguales, tanto
si son referencias al mismo objeto como si son objetos distintos con iguales valores
de las variables miembro.

toString(): Devuelve un String que contiene una representacin del objeto como
cadena de caracteres, por ejemplo para imprimirlo o exportarlo.
finalize(): Este mtodo ya se ha visto al hablar de los finalizadores.

Mtodos que no pueden ser redefinidos (son mtodos final):

getClass() Devuelve un objeto de la clase Class, al cual se le pueden aplicar mtodos para
determinar el nombre de la clase, su super-clase, las interfaces implementadas, etc. Se
puede crear un objeto de la misma clase que otro sin saber de qu clase es.
notify(), notifyAll() y wait() Son mtodos relacionados con las threads

Redefinicin de mtodos heredados

Una clase puede redefinir (volver a definir) cualquiera de los mtodos heredados de su
super-clase que no sean final. El nuevo mtodo sustituye al heredado para todos los efectos
en la clase que lo ha redefinido.

Los mtodos de la super-clase que han sido redefinidos pueden ser todava accedidos por
medio de la palabra super desde los mtodos de la clase derivada, aunque con este sistema
slo se puede subir un nivel en la jerarqua de clases.

Los mtodos redefinidos pueden ampliar los derechos de acceso de la super-clase (por
ejemplo ser public, en vez de protected o package), pero nunca restringirlos.
Los mtodos de clase o static no pueden ser redefinidos en las clases derivadas.

Constructores en clases derivadas


Ya se coment que un constructor de una clase puede llamar por medio de la palabra this a
otro constructor previamente definido en la misma clase. En este contexto, la palabra this
slo puede aparecer en la primera sentencia de un constructor.

De forma anloga el constructor de una clase derivada puede llamar al constructor de su


super-clase por medio de la palabra super(), seguida entre parntesis de los argumentos
apropiados para uno de los constructores de la super-clase. De esta forma, un constructor
slo tiene que inicializar directamente las variables no heredadas.

La llamada al constructor de la super-clase debe ser la primera sentencia del constructor


excepto si se llama a otro constructor de la misma clase con this(). Si el programador no la
incluye, Java incluye automticamente una llamada al constructor por defecto de la super-
clase, super().

Esta llamada en cadena a los constructores de las super-clases llega hasta el origen de la
jerarqua de clases, esto es al constructor de Object.

54
Como ya se ha dicho, si el programador no prepara un constructor por defecto, el
compilador crea uno, inicializando las variables de los tipos primitivos a sus valores por
defecto, y los Strings y dems referencias a objetos a null. Antes, incluir una llamada al
constructor de la super-clase.

En el proceso de finalizacin o de liberacin de recursos (diferentes de la memoria


reservada con new, de la que se encarga el garbage collector), es importante llamar a los
finalizadores de las distintas clases, normalmente en orden inverso al de llamada de los
constructores.

Esto hace que el finalizador de la sub-clase deba realizar todas sus tareas primero y luego
llamar al finalizador de la super-clase en la forma super.finalize(). Los mtodos finalize()
deben ser al menos protected, ya que el mtodo finalize() de Object lo es, y no est
permitido reducir los permisos de acceso en la herencia.

Ejemplo:
Pondremos nuestra atencin sobre la abstraccin funcional del objeto Guitarra. Todas las
guitarras, ya sean Elctricas, ElectroAcsticas o normales, cumplen con caractersticas
similares como nmero de cuerdas, mtodo de afinacin, cambio de tono, cambio de
postura y rasgueo entre otras.
Si no se siguiera con una metodologa de herencia, por cada clase (Guitarra Electrica y
ElectroAcstica) se tendra que repetir la definicin de todos los atributos y mtodos que
pertenecen a la clase padre Guitarra, que corresponde a la abstraccin ms amplia del
concepto "Guitarra".

Modelo Independiente sin herencia

Clase: Guitarra

ATRIBUTOS

tono
numeroDeCuerdas

METODOS

afinar()
pulsarCuerda()
rasguear()
cambiarTono()
cambiarPostura()

Clase: GuitarraElectrica

ATRIBUTOS

tono

55
numeroDeCuerdas
numeroDeCapsulas
volumen
agudo
bajo

METODOS

afinar()
pulsarCuerda()
rasguear()
cambiarTono()
microAfinar()
conectarCable()
amplificar()

Clase: GuitarraElectroAcustica

ATRIBUTOS

tono
numeroDeCuerdas
numeroDeCapsulas
volumen
agudo
bajo

METODOS

nivelDeVolumen
afinar()
pulsarCuerda()
conectarCable()
amplificar()
cambiarTono()

Mediante el uso de la herencia, se puede definir una clase "Guitarra" que cumpla con todas
las caractersticas generales del concepto guitarra y sus evoluciones, con el fin de acotar el
nmero de especificaciones de las clases "GuitarraElectrica" y "ElectroAcstica", y
permitir la herencia a stas ltimas clases con las caractersticas del objeto padre.

56
Modelo dependiente con herencia

PARA RECORDAR

9. Se puede construir una clase a partir de otra mediante el mecanismo de la


herencia.
10. Cuando una clase deriva de otra, hereda todas sus variables y mtodos.
11. Todas las clases de Java creadas por el programador tienen una super-
clase.
12. Java permite mltiples niveles de herencia, pero no permite que una clase
derive de varias (no es posible la herencia mltiple)
13. Los mtodos redefinidos pueden ampliar los derechos de acceso de la
super-clase.
14. La llamada al constructor de la super-clase debe ser la primera sentencia
del constructor excepto si se llama a otro constructor de la misma clase
con this().
15. Constructor de una clase derivada puede llamar al constructor de su
super-clase por medio de la palabra super().

57
EJERCICIOS

PRODUCTO

package herencia2do;

public class Producto {

private String codigo;


protected String descripcion;
private double precio;

public Producto() {

codigo = "null";
descripcion = "null";
precio = 0.0;
}

public Producto(String codigo,String descripcion,double precio {

this.codigo = codigo;
this.descripcion = descripcion;
this.precio = precio;
}

public String getCodigo() {

return codigo;
}

public String getDescripcion() {

return descripcion;
}

public double getPrecio() {

return precio;
}
public void setCodigo(String codigo) {

this.codigo = codigo;
}

public void setDescripcion(String descripcion) {

this.descripcion = descripcion;
}

public void setPrecio(double precio) {

this.precio = precio;
}

public void imprimir() {

58
System.out.println("\t\tPRODUCTO");
System.out.println("\t\t\t\tCodigo : " + codigo);
System.out.println("\t\t\t\tDescripcion : " + descripcion);
System.out.println("\t\t\t\tPrecio : " + precio);
}
}

MOLDE

package herencia2do;

public class Licuadora extends Producto {

private int numeroRev;


private String tamao;

public Licuadora() {
super();
numeroRev = 0;
tamao = "";

}
public Licuadora(String codigo, String descripcion, double precio, int initialNr, String
initialTamao) {
super(codigo, descripcion, precio);

numeroRev = initialNr;
tamao = initialTamao;

}
public int getNumeroRev() {
return numeroRev;
}
public void setNumeroRev(int numeroRev) {
this.numeroRev = numeroRev;
}
public String getTamao() {
return tamao;
}
public void setTamao(String tamao) {
this.tamao = tamao;
}

public double CalcularImpuesto() {

return super.getPrecio()-0.5;
}

public void imprimirL() {

super.imprimir();
System.out.println("\t\t\t\tNumero de revoluciones : " + numeroRev);
System.out.println("\t\t\t\ttamao : " + tamao);
}

59
LICUADORA

package herencia2do;

public class Licuadora extends Producto {

private int numeroRev;


private String tamao;

public Licuadora() {
super();
numeroRev = 0;
tamao = "";

}
public Licuadora(String codigo, String descripcion, double precio, int initialNr, String
initialTamao) {
super(codigo, descripcion, precio);

numeroRev = initialNr;
tamao = initialTamao;

}
public int getNumeroRev() {
return numeroRev;
}
public void setNumeroRev(int numeroRev) {
this.numeroRev = numeroRev;
}
public String getTamao() {
return tamao;
}
public void setTamao(String tamao) {
this.tamao = tamao;
}

public double CalcularImpuesto() {

return super.getPrecio()-0.5;
}

public void imprimirL() {

super.imprimir();
System.out.println("\t\t\t\tNumero de revoluciones : " + numeroRev);
System.out.println("\t\t\t\ttamao : " + tamao);
}

60
CHOCOLATE

package herencia2do;

public class Chocolate extends Producto {

private String pais;


private String aroma;

public Chocolate() {

super();
aroma = "null";
pais = "null";
}

public Chocolate(String pais, String aroma) {

super();
this.pais = pais;
this.aroma = aroma;
}

public Chocolate(String initialCodigo, String initialDescrip, double initialPrecio,


String initialAroma, String initialPais) {

super(initialCodigo, initialDescrip, initialPrecio);


aroma = initialAroma;
pais = initialPais;
}

public String getAroma() {

return aroma;
}

public String getPais() {

return pais;
}

public void setAroma(String aroma) {

this.aroma = aroma;
}

public void setPais(String pais) {

this.pais = pais;
}

public void imprimirCh() {

imprimir();
System.out.println("\t\t\t\tAroma : " + aroma);
System.out.println("\t\t\t\tPais : " + pais);
}

61
public double CalcularImpuesto() {

return super.getPrecio()*1.1;

CATALOGO

package herencia2do;

import java.io.IOException;

public class Catalogo {

public static Producto p[] = new Producto[10];


private Producto productos[];
private String codigo;
private int max;
private int numeroProductos;
public static Catalogo b = new Catalogo();

public Catalogo() {

codigo = "123";
max = 100;
productos = new Producto[max];

public Catalogo(String codigo, int max) {


this.codigo = codigo;
this.max = max;
}

public String getCodigo() {


return codigo;
}

public void setCodigo(String codigo) {

this.codigo = codigo;
}

public Producto[] getProductos() {


return productos;
}

public void setProductos(Producto[] productos) {


this.productos = productos;

62
}

public int getCapacidad() {


return numeroProductos;
}

public void setCapacidad(int numeroProductos) {

this.numeroProductos = numeroProductos;
}

public int getMax() {

return max;
}

public void setMax(int max) {

this.max = max;
}

public void addProducto(Producto valueProducto) {

if(numeroProductos < max) {

productos[numeroProductos++] = valueProducto;
}
}

public boolean espacios() {

if(numeroProductos!=0) {

int total;
total = max - numeroProductos;
System.out.println("Total Catalogo de productos: " + total);
return true;
}
else
System.out.println("!No hay Productos en el catalogo");
return false;
}

public boolean nombreProductos() {

if(numeroProductos!=0) {
System.out.println("\n\t\tNOMBRE PRODUCTOS\n");
for(int i = 0; i < numeroProductos; i++) {

String a = productos[i].getCodigo();
System.out.println("\t\t\t" + a);
}
return true;
}
else {

System.out.println("!No hay Productos en el Catalogo");

63
return false;
}
}

public void Imprimir() {

System.out.println("\n\t\tCatalogo");
System.out.println("\t\tcodigo : " + codigo);
System.out.println("\t\tNumero productos : " + numeroProductos);
for(int i = 0; i < numeroProductos; i++) {
productos[i].imprimir();
}
}

public boolean Buscar(String DatoBuscar) {

int Indice=0;
for(int i=0;i<numeroProductos;i++)
{
if(productos[i].equals(DatoBuscar))
{
Indice=i;
return true;
}
}
return false;
}

public void Modificar() {

int Indice =0;


String DatoBuscar = " ";
System.out.println("digite el nombre que desea Modificar");
DatoBuscar=LeerT.Leer();
if (Buscar(DatoBuscar)) {
System.out.println("Dato Modificado.....");
Imprimir();
}
else
{
System.out.println("Dato no encontrado.....");
}
}

public static void AgregarProducto() throws IOException {

boolean saber=true;
do {
int j =0;
p[j]= new Producto();
System.out.println ("Ingrese codigo : ");
p[j].setCodigo(LeerT.Leer());
System.out.println ("Ingrese descripcion : ");
p[j].setDescripcion(LeerT.Leer());
System.out.println ("Ingrese precio : ");

64
p[j].setPrecio(Double.parseDouble(LeerT.Leer()));
b.addProducto(p[j]);
j++;
System.out.println ("Desea crear otro Producto(s/n):");
String opc =LeerT.Leer();
if(opc.equals ("n") || opc.equals ("N"))saber=false;
}while(saber);
}
}
BODEGA

package herencia2do;

import java.util.*;
public class Bodega {

private ArrayList <Producto> articulos;

public Bodega () {

articulos = new ArrayList<Producto>();

public void addArticulo(Producto valueProducto) {

if(!buscarArticuloCodigo(valueProducto)){
articulos.add(valueProducto);
System.out.println("Se agrego ");
}
else {

System.out.println("ya existe");
}
}

public boolean buscarArticulo(Producto p) {

if(articulos.size()!=0){
System.out.println("si existe el producto");
return articulos.contains(p);

}
System.out.println("NO existe el producto");
return false;
}

public boolean buscarArticuloCodigo(Producto valueP) {

for(Iterator<Producto> i = articulos.iterator(); i.hasNext();) {

if(i.next().equals(valueP)) {

}return true;
}return false;
}

65
/*Una funcin de todos los nombres*/

public ArrayList<String> getNombres() {

ArrayList<String> lista = new ArrayList<String>();


for(Producto item: articulos) {
lista.add(item.getDescripcion());
}
return lista;
}

public ArrayList<String> getAromas() {

ArrayList<String>aromas = new ArrayList<String>();

for(Producto p: articulos){

if(p instanceof Chocolate) {

aromas.add(((Chocolate)p).getAroma());
}
}
return aromas;
}

public double getPreciosCh() {

double suma = 0;

for(Producto p: articulos) {

if(p instanceof Chocolate){

suma += p.getPrecio();

}
}
return suma;

66
APLICA

package herencia2do;

public class Aplica {

public static void main(String[] args) {

Chocolate c = new Chocolate("co1","Chocolisto",12,"suave","ecu");


Licuadora l = new Licuadora("vo1","Lindustrial",100,1200,"grande");
Molde m = new Molde("lo1","moldechoco ",50,"aluminio");
Chocolate c1 = new Chocolate("ho2","Nestle",10,"Fuerte","col");
Chocolate c2 = new Chocolate("co1","Chocolisto",12,"suave","ecu");
Bodega almacen = new Bodega();

almacen.addArticulo(c);
almacen.addArticulo(l);
almacen.addArticulo(m);
almacen.addArticulo(c1);
almacen.addArticulo(c2);
almacen.buscarArticuloCodigo(c2);

System.out.println("Impuesto"+c.CalcularImpuesto());
System.out.println("Impuesto"+l.CalcularImpuesto());
System.out.println("Impuesto"+m.CalcularImpuesto());
if(almacen.buscarArticulo(c2)) {

System.out.println("Si existe");
}
else {
System.out.println("No existe");
}
}

67
Resultado

68
VIII
ARRAY LIST

69
CAPTULO VIII
8. ArrayList

8.1. Mtodos

//Devuelve el nmero de elementos del arreglo

int size()

//Determina si el arreglo est vaco

boolean isEmpty()

//Determina los elementos que tiene el arreglo

boolean contains(Object o)

//Aade un elemento al arreglo

void add(E o)

//Aade un elemento al arreglo en una ubicacin dada

void add(int index, E o)

//Obtiene un elemento dado un ndice

E get(int index)

//Reemplaza un elemento del arreglo dado por el ndice y el elemento

public E set(index, E o)

//Elimina un elemento del arreglo

public boolean remove(Object o)

//Devuelve el elemento eliminado

E remove(int index)

70
Ejemplo

En el siguiente ejemplo se muestra un ejemplo de ArrayList que se encuentra en la clase


Bus que tendr un arreglo de pasajeros.

Clase Bus

public void setMax(int valueMax) {

max = valueMax;
}

//Mtodo para aadir pasajeros al bus


public void addPasajero(Pasajero valuePasajero) {

if(numeroPasajeros < max) {

pasajeros[numeroPasajeros++] = valuePasajero;
}
}

//Mtodo para determinar el nmero de asientos libres en el bus


public boolean AsientosLibres() {

if(numeroPasajeros!=0) {

int total;
total = max - numeroPasajeros;
System.out.println("Asientos Libres : " + total);
return true;
}
else
System.out.println("!No hay Pasajeros en el Bus");
return false;
}

//Mtodo que devuelve los nombres de los pasajeros del Bus


public boolean nombrePasajeros() {

if(numeroPasajeros!=0) {
System.out.println("\n\t\tNOMBRE PASAJEROS\n");
for(int i = 0; i < numeroPasajeros; i++) {

String a = pasajeros[i].getNombre();
System.out.println("\t\t\t" + a);
}
return true;
}
else {

System.out.println("!No hay Pasajeros en el Bus");


return false;
}
}

//Funcin que imprime los datos del Bus, as tambin sus pasajeros
public void Imprimir() {

System.out.println("\n\t\tB U S");
System.out.println("\t\tPlaca : " + placa);
System.out.println("\t\tNumero Pasajeros : " + numeroPasajeros);
for(int i = 0; i < numeroPasajeros; i++) {

pasajeros[i].Imprimir();
}
}
}

71
Clase Pasajero
package manejoBus;

public class Pasajero {

//Atributos de la clase Pasajero


private String nombre;
private String cedula;
private double pasaje;

//Constructor por defecto


public Pasajero() {

nombre = "";
cedula = "";
pasaje = 0.0;
}

//Constructor con argumentos


public Pasajero(String nombre, String cedula, double pasaje) {

this.nombre = nombre;
this.cedula = cedula;
this.pasaje = pasaje;
}

//Accesorios de la clase Pasajero


public String getCedula() {

return cedula;
}

public String getNombre() {

return nombre;
}

public double getPasaje() {

return pasaje;
}

public void setCedula(String cedula) {

this.cedula = cedula;
}

public void setNombre(String nombre) {

this.nombre = nombre;
}

public void setPasaje(double pasaje) {

this.pasaje = pasaje;
}

//Funcin que imprime los datos de la clase Pasajero


public void Imprimir() {

System.out.println("\n\t\t\tPASAJERO");
System.out.println("\t\t\tNombre : " + nombre);
System.out.println("\t\t\tCedula : " + cedula);
System.out.println("\t\t\tPasaje : " + pasaje);
}
}

72
Clase para leer de Teclado

package manejoBus;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LeerT {

//Declaracin de las clases para leer por teclado


public static InputStreamReader isr = new InputStreamReader(System.in);
public static BufferedReader br = new BufferedReader(isr);

//Mtodo para leer datos del tipo String con posibles excepciones
public static String Leer(){

String Dato = " ";

try {

Dato = br.readLine();
br.skip(System.in.available());
}
catch( IOException e) {

System.out.println(e.getMessage());
}
return Dato;
}

//Mtodo para leer datos del tipo entero


public static int LeerEnt() {

int n = Integer.parseInt(Leer());
return n;
}

//Mtodo para leer datos del tipo flotante


public static float LeerDecF() {

Float f= new Float(Leer());


return (f.floatValue());
}

//Mtodo para leer datos del tipo char con posibles excepciones
public static char LeerTecla() {

try {

char n = (char)System.in.read();
return n;
}
catch(IOException e) {

System.out.println(e.getMessage());
}
return 0;
}
}

73
Aplicacin
package manejoBus;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Aplicacion {

//Instanciacin de las clases


public static Bus b = new Bus();
public static Pasajero p[] = new Pasajero[10];
private static BufferedReader stdIn = new
BufferedReader(new InputStreamReader(System.in));

public static void main(String[] args) throws IOException {

int continuar = 1;
//Men que permite manipular las clases
do {
try {
System.out.println("\t1. Ingresar Pasajero");
System.out.println("\t2. Ver Bus");
System.out.println("\t3. Asientos Libres");
System.out.println("\t4. Nombre Pasajeros");
System.out.println("\t5. Salir");

int opcion = LeerT.LeerEnt();

switch(opcion) {
case 1:
SubirPasajero();

break;
case 2:
b.Imprimir();
break;
case 3:
b.AsientosLibres();

break;
case 4:
b.nombrePasajeros();
case 5:
continuar = 0;
break;
default:
System.out.println("!Ingrese un numero
correcto");
}
if(opcion == 5) {

return;
}
}catch(NumberFormatException e) {

System.out.println("!Ingrese un numero vlido");

}
}while(true);
}

74
//Mtodo para ingresar pasajeros al Bus mediante un men
public static void SubirPasajero() throws IOException {

int j = 0;
int i = 1;
do {

System.out.println ("Ingrese nombre : ");


String a1 = (stdIn.readLine());
System.out.println ("Ingrese cedula : ");
String a2 = (stdIn.readLine());
System.out.println ("Ingrese pasaje : ");
double a3 = Double.parseDouble(stdIn.readLine());
p[j] = new Pasajero(a1, a2, a3);
b.addPasajero(p[j]);
j++;
System.out.println ("Desea crear otro Pasajero (s/n):");
String a5 = (stdIn.readLine());
if (a5.equals("s")){

i = 1;
}
else {

break;
}
}while (i == 1);
}
}

Resultado

Men

75
Opcin 1

Opcin 2

76
Opcin 3 y 4

77
IX
CLASES ABSTRACTAS

78
CAPTULO IX
9. CLASES Y MTODOS ABSTRACTOS

9.1. Clases:

Una clase abstracta (abstract) es una clase de la que no se pueden crear objetos.
Su utilidad es permitir que otras clases deriven de ella.
Las clases abstractas se declaran anteponindoles la palabra abstract.

9.2. Mtodos:

Una clase abstract puede tener mtodos declarados como abstract, en cuyo caso
no se da definicin del mtodo.
Si una clase tiene algn mtodo abstract es obligatorio que la clase sea abstract.
En cualquier sub-clase este mtodo deber bien ser redefinido, bien volver a
declararse como abstract (el mtodo y la sub-clase).
Una clase abstract puede tener mtodos que no son abstract. Aunque no se
puedan crear objetos de esta clase, sus sub-clases heredarn el mtodo
completamente a punto para ser utilizado.
Como los mtodos static no pueden ser redefinidos, un mtodo abstract no puede
ser static.

Ejemplo
Sistema para administrar Empleados de una empresa:

ESQUEMA DE LAS CLASES

Sistema de
Administracion

Empleado

ETC ETP

79
Implementacin de las Clases:

CLASE SISTEMA DE ADMINISTRACION

package administracion;

import java.util.ArrayList;

public class SistemaAdministracion {

//atributo de el sistema de administracin


private ArrayList<Empleado> empleados; //Arreglo de empleados

//Constructor por defecto


public SistemaAdministracion() {

empleados = new ArrayList<Empleado>();

//Aade empleados
public void addEmpleado(Empleado valueEmpleado) {

empleados.add(valueEmpleado);
}

//mtodo para calcular el sueldo de los empleados


public double calcularSueldo() {

double suma = 0;

for(Empleado e : empleados) {

suma += e.sueldo();

} return suma;

//Devuelve un arreglos de los empleados


public ArrayList<String> ListaEmpleados() {

ArrayList<String> a = new ArrayList<String>();

for (Empleado e : empleados) {

a.add(e.toString());

} return a;

//mtodo para imprimir los sueldos de los empleados


public void imprimirSueldos() {

for(Empleado e : empleados) {

System.out.println(e.sueldo());
}
}
}

80
CLASE EMPLEADO

package administracion;

public abstract class Empleado {

//Atributos de la clase Empleado


private String cedula;
private double sueldo;

//Constructor por defecto


public Empleado() {

cedula = "";
sueldo = 0.0;
}

//Constructor con parmetros


public Empleado(String cedula, double sueldo) {

this.cedula = cedula;
this.sueldo = sueldo;
}

//Accesorios
public String getCedula() {

return cedula;
}

public void setCedula(String cedula) {

this.cedula = cedula;
}

public double getSueldo() {

return sueldo;
}

public void setSueldo(double sueldo) {

this.sueldo = sueldo;
}

//Funcin para imprimir los datos de empleado


public void imprimir() {

System.out.println("E M P L E A D O");
System.out.println("La cedula es: " + cedula );
System.out.println("El sueldo " + sueldo );
}
//metodo abstracto
public abstract double sueldo();

//Redefinicin de la clase toString


public String toString(){

return " Cedula : " + cedula + "\nSueldo base: $" + sueldo;


}
}

81
CLASE EMPLEADO TIEMPO COMPLETO

package administracion;

public class EmpleadoTC extends Empleado {

//Atributos de la clase EmpleadoTC


private int anioIngreso;
private double bonificacion;

//Constructor por defecto


public EmpleadoTC() {

super();
anioIngreso = 0;
bonificacion = 0.0;
}

//Constructor con parmetros


public EmpleadoTC(String cedula, double sueldo,int anio,double bonificacion
) {

super(cedula, sueldo);
anioIngreso = anio;
this.bonificacion = bonificacion;
}

//Accesorios
public int getAoIngreso() {

return anioIngreso;
}

public void setAoIngreso(int anioIngreso) {

this.anioIngreso = anioIngreso;
}

public double getBonificacion() {

return bonificacion;
}

public void setBonificacion(double bonificacion) {

this.bonificacion = bonificacion;
}

//Mtodo que devuelve el sueldo del EmpleadoTC


public double sueldo() {

return super.getSueldo() + bonificacion;


}

//Funcin para imprimir los datos de EmpleadoTC


public void imprimir() {

super.imprimir();
System.out.println("E M P L E A D O C O M P L E T O");
System.out.println("El ao de ingreso es: " + anioIngreso );
System.out.println("La bonificacion es " + bonificacion );
}

82
//Redefinicin de la clase toString
public String toString(){

return "\nEmpleado Completo"+ "\n"+ super.toString() + " Ao ingreso


: " + anioIngreso + "\n"
+ " Bonificaion : " + bonificacion + "\n";
}
}

CLASE EMPLEADO TIEMPO PARCIAL

package administracion;

public class EmpleadoTP extends Empleado {

//Atributos de la clase EmpleadoTP


private int numeroHoras;
private double sueldoHoras;

//Constructor por defecto


public EmpleadoTP() {

super();
numeroHoras = 0;
sueldoHoras = 0.0;
}

//Constructor con parmetros


public EmpleadoTP(String cedula, double sueldo, int numeroHoras,
double sueldoHoras) {

super(cedula, sueldo);
this.numeroHoras = numeroHoras;
this.sueldoHoras = sueldoHoras;
}

//Accesorios
public int getNumeroHoras() {

return numeroHoras;
}

public void setNumeroHoras(int numeroHoras) {

this.numeroHoras = numeroHoras;
}

public double getSueldoHoras() {

return sueldoHoras;
}

public void setSueldoHoras(double sueldoHoras) {

this.sueldoHoras = sueldoHoras;
}

//Mtodo que devuelve el sueldo del EmpleadoTP


public double sueldo() {

83
return super.getSueldo() + numeroHoras*sueldoHoras;
}

//Funcin para imprimir los datos del EmpleadoTP


public void imprimir() {

super.imprimir();
System.out.println("EMPLEADO PARCIAL");
System.out.println("El numero horas es: " + numeroHoras );
System.out.println("El sueldo horas es " + sueldoHoras );
}

//Redefinicin de la clase toString


public String toString(){

return "\nEmpleado Parcial"+ "\n"+ super.toString() + "


numeroHoras : "
+ numeroHoras + "\n" + " sueldoHoras : " + sueldoHoras+ "\n";
}
}

CLASE APLICACIN

package administracion;

public class Aplica {

public static void main(String[] args) {

//Instanciacin de la clase SistemaAdministracion


SistemaAdministracion sa = new SistemaAdministracion();

//Instanciacin de la clase EmpleadoTC y EmpleadoTP


EmpleadoTP etp1 = new EmpleadoTP("12312432",12,5,8);

EmpleadoTP etp2 = new

EmpleadoTP("143312432",3,3,8);

EmpleadoTP etp3 = new EmpleadoTP("1412432",12,3,3);

EmpleadoTP etp4 = new

EmpleadoTP("145312432",11,3,5);

EmpleadoTC etc1 = new

EmpleadoTC("564512432",7,5,4);

EmpleadoTC etc2 = new EmpleadoTC("56312432",7,1,2);

//Aade los empleados al sistema


sa.addEmpleado(etp1);
sa.addEmpleado(etp2);
sa.addEmpleado(etp3);
sa.addEmpleado(etp4);
sa.addEmpleado(etc1);
sa.addEmpleado(etc2);
//Impresin del sueldo
System.out.println("Sueldo : "+ sa.calcularSueldo());

84
//Arreglo de los sueldos
sa.imprimirSueldos();
//Lista de los Empleados
System.out.println(sa.ListaEmpleados());
}
}

Resultado

Para recordar del Ejercicio anterior:

En el anterior ejemplo vemos la declaracin de una clase abstracta(Empleado) y un


mtodo abstracto(sueldo). En el caso de la clase abstracta; sta no puede instanciar un
objeto.
Mientras que el mtodo abstracto slo es declarado en la superclase, ya que el cuerpo de
del mtodo est en cada una de las subclases.

85
X
INTERFASES

86
CAPTULO X
10. INTERFACES

10.1. Concepto de interface

Una interface es un conjunto de declaraciones de mtodos (sin definicin).


Tambin puede definir constantes, que son implcitamente public, static y final,
y deben siempre inicializarse en la declaracin.
Todas las clases que implementan una determinada interface estn obligadas a
proporcionar una definicin de los mtodos de la interface, y en ese sentido
adquieren una conducta o modo de funcionamiento.
Una clase puede implementar una o varias interfaces.

Para indicar que una clase implementa una o ms interfaces se ponen los nombres de las
interfaces, separados por comas, detrs de la palabra implements, que a su vez va siempre a
la derecha del nombre de la clase o del nombre de la super-clase en el caso de herencia. Por
ejemplo,

public class CirculoGrafico extends Circulo implements Dibujable,


Cloneable {

...
}

10.2. Diferencias entre interfaces y clases abstractas

Cabe mencionar estas semejanzas y diferencias para que no existan problemas al momento
de implementar las clases. Entre las semejanzas que existen, es que ambas tienen en comn
que pueden contener varias declaraciones de mtodos (la clase abstract puede adems
definirlos).

Existen tambin algunas diferencias importantes:

Una clase no puede heredar de dos clases abstract, pero s puede heredar de una
clase abstract e implementar una interface, o bien implementar dos o ms
interfaces.
Una clase no puede heredar mtodos definidos de una interface, aunque s
constantes.
Las interfaces permiten mucha ms flexibilidad para conseguir que dos clases
tengan el mismo comportamiento, inpendientemente de su situacin en la jerarqua
de clases deJava.
Las interfaces tienen una jerarqua propia, independiente y ms flexible que la de
las clases, ya que tienen permitida la herencia mltiple.

87
10.3. Polimorfismo

El polimorfismo es la relacin que se establece entra la llamada aun mtodo y el


cdigo que se asocia con dicha llamada.
La relacin que existe se denomina vinculacin.
La vinculacin puede ser temprana que se da en tiempo de compilacin.
La vinculacin tambin puede ser tarda que en cambio se da en tiempo de
ejecucin.
Con funciones normales o sobrecargadas se utiliza la vinculacin temprana; en
cambio para funciones redefinidas se utiliza vinculacin tarda, excepto si el
mtodo es final.

Ejemplo:
Sistema para administrar un Puerto que tiene Contenedores, que ingresa contenedores
mediante un archivo de texto o de la manera comn.

ESQUEMA GRAFICO

IMPLEMENTACION DE LAS CLASES

Interface Requisito Aduanero

public interface RequisitoAduanero {

//mtodo abstracto en la interface


public abstract double calcularImp();
}

Interface Datos

public interface Datos {

88
//Declaracin de los mtodos abstractos
public abstract void leerArchivo(String valuepath);
public abstract ContenedorCU crearCCU(String valuel);
public abstract ContenedorCI crearCCI(String valuel);
}

Clase Puerto
//Mtodo para aadir contenedorCI mediante StringTokenizer
public ContenedorCI crearCCI(String datos){

StringTokenizer dt= new StringTokenizer(datos , "_");


double a = 0;
double b = 0;
if (dt.countTokens()== 3 ){

String tipo = dt.nextToken();


a = Double.parseDouble(dt.nextToken());
b = Double.parseDouble(dt.nextToken());
}
return new ContenedorCI (a , b);
}

//Mtodo que devuelve el total de impuesto de los contenedores


public double TotalImp(){

double total = 0;
for(Contenedor C : contenedores){
if (C instanceof ContenedorCU){

total += ((ContenedorCU)C).calcularImp();
}else if (C instanceof ContenedorCI){

total += ((ContenedorCI)C).calcularImp();
}
}
return total;
}

//Devuelve el total de CCU


public int totalCCU(){
int total = 0;
for (Contenedor C : contenedores){
if (C instanceof ContenedorCU){
total += 1;
}
}
return total;
}

//Funcin que imprime los datos de los contenedores


public void imprimir(){

for(Contenedor C : contenedores){
if ( C instanceof ContenedorCU ){
((ContenedorCU)C).imprimir();
}else if (C instanceof ContenedorCI){
((ContenedorCI)C).imprimir();
}
}
}
}

89
Clase Contenedor

package puerto;

public abstract class Contenedor implements RequisitoAduanero{

//Atributos de la clase Contenedor


protected double largo;
protected String tipo;

//Constructor por defecto


public Contenedor (){

largo = 0 ;
tipo = " " ;
}

//Constructor con argumentos


public Contenedor(double initiallargo) {

largo = initiallargo;
}

//Mtodo que calcula volumen del contenedor(Polimorfismo)


public abstract double calcularVolumen();

//Funcin que imprime los datos del Contenedor


public void imprimir(){

System.out.println("\nTipo :\t" + tipo);


System.out.println("Largo :\t" + largo);
}
}

Clase Contenedor Cuadrado

package puerto;

public class ContenedorCU extends Contenedor{

//Atributos de la clase ContendorCU


private double ancho;
private double profundidad;

//Constructor por defecto


public ContenedorCU(){

super();
ancho = 0;
profundidad = 0;
tipo = "Cuadrado";
}

//Constructor con argumentos


public ContenedorCU (double initiallargo ,
double initiancho, double initialprofundidad){

super(initiallargo);

90
tipo = "Cuadrado";
ancho = initiancho;
profundidad = initialprofundidad;
}

//Mtodo para calcular el volumen del CCU


public double calcularVolumen (){

return ancho*largo*profundidad;
}

//Mtodo que calcula el Impuesto del CCU


public double calcularImp (){

return this.calcularVolumen() * 0.1;


}

//Funcin para imprimir los datos del CCU


public void imprimir(){

super.imprimir();
System.out.println("Ancho :\t" + ancho);
System.out.println("Profundidad :\t" + profundidad);
}
}

Clase Contendor Cilndrico

package puerto;

public class ContenedorCI extends Contenedor{

//Atributo de la clase CCI


private double radio;

//Constructor por defecto


public ContenedorCI(){

super();
radio = 0;
tipo = "Cilindrico";
}

//Constructor con argumentos


public ContenedorCI (double initiallargo ,
double initiradio){

super(initiallargo);
tipo = "Cilindrico";
radio = initiradio;
}

//Devuelve el volumen del CCI


public double calcularVolumen (){

return 3.1416*largo*radio*radio;
}

//Devuelve el impuesto del CCI


public double calcularImp (){

91
return this.calcularVolumen() * 0.5;
}

//Funcin que imprime los datos del CCI


public void imprimir(){

super.imprimir();
System.out.println("Radio :\t" + radio);
}
}

Aplicacin

package puerto;

public class Aplicacion_cont {

public static void main(String[] args) {

//Instanciacin de las clases CCU y CCI


ContenedorCU CU1 = new ContenedorCU(12 , 8.3 , 9);
ContenedorCI CI1 = new ContenedorCI(8 , 6.3);
//Imprime CCU yCCI
CU1.imprimir();
CI1.imprimir();
//Instanciacin de la clase Puerto
Puerto P1 = new Puerto ("San Jose");
//Aade los contenedores al Puerto
P1.addContenedor(CU1);
P1.addContenedor(CI1);
//Imprime los contenedores del Puerto
P1.imprimir();
//Lee de un archivo de texto y aade al Puerto los contenedores
P1.leerArchivo("G:\\prueba.txt");
//Imprime los contenedores del Puerto
P1.imprimir();
//Imprime el total de CCU
System.out.println("Total de CCU en el Puerto = " +
P1.totalCCU());
}
}

92
Resultado

Para recordar del Ejercicio anterior:

En el anterior ejemplo vemos la declaracin de interfaces(Requisito Aduanero y Datos)


con sus mtodo abstractos(calcularImp, leerArchivo y crearCCU y crearCCI).
As tambin del polimorfismo que se da al declarar en Contenedor el mtodo
calcularVolumen, que el cuerpo de la funcin est tanto en ContenedorCU y
ContenedorCI.

93
XI
ARCHIVOS

94
CAPITULO XI
11.1 LECTURA Y ESCRITURA DE ARCHIVOS

Aunque el manejo de archivos tiene caractersticas especiales, se puede utilizar lo dicho


hasta ahora para las entradas y salidas estndar con pequeas variaciones. Java ofrece las
siguientes posibilidades:

Existen las clases FileInputStream y FileOutputStream (extendiendo InputStream y


OutputStream) que permiten leer y escribir bytes en archivos. Para archivos de texto son
preferibles FileReader (desciende de Reader) y FileWriter (desciende de Writer), que
realizan las mismas funciones. Se puede construir un objeto de cualquiera de estas cuatro
clases a partir de un String que contenga el nombre o la direccin en disco del archivo o
con un objeto de la clase File que representa dicho archivo. Por ejemplo el cdigo

FileReader fr1 = new FileReader("archivo.txt");

es equivalente a:

File f = new File("archivo.txt");


FileReader fr2 = new FileReader(f);

Si no encuentran el archivo indicado, los constructores de FileReader y FileInputStream


pueden lanzar la excepcin java.io.FileNotFoundException.

Los constructores de FileWriter y FileOutputStream pueden lanzar java.io.IOException.


Si no encuentran el archivo indicado, lo crean nuevo. Por defecto, estas dos clases
comienzan a escribir al comienzo del archivo. Para escribir detrs de lo que ya existe en el
archivo (append), se utiliza un segundo argumento de tipo boolean con valor true:

FileWriter fw = new FileWriter("archivo.txt", true);

Las clases que se explican a continuacin permiten un manejo ms fcil y eficiente que las
vistas hasta ahora.

11.2 CLASES FILE Y FILEDIALOG

Un objeto de la clase File puede representar un archivo o un directorio. Tiene los


siguientes constructores:

File(String name)
File(String dir, String name)
File(File dir, String name).

Se puede dar el nombre de un archivo, el nombre y el directorio, o slo el directorio, como


path absoluto y como path relativo al directorio actual. Para saber si el archivo existe se
puede llamar al mtodo boolean exists().

95
File f1 = new File("c:\\windows\\notepad.exe"); // La barra '\' se escribe '\\'
File f2 = new File("c:\\windows"); // Un directorio
File f3 = new File(f2, "notepad.exe"); // Es igual a f1

Si File representa un archivo que existe los mtodos de la Tabla 9.6 dan informacin de l.

Si representa un directorio se pueden utilizar los de la Tabla 9.7:

Por ltimo, otros mtodos incluidos en la Tabla 9.8 devuelven el path del archivo de
distintas maneras.

Una forma tpica de preguntar por un archivo es presentar un caja de dilogo. La clase
java.awt.FileDialog presenta el dilogo tpico de cada sistema operativo para guardar o
abrir ficheros. Sus constructores son:

FileDialog(Frame fr)
FileDialog(Frame fr, String title)
FileDialog(Frame fr, String title, int type)
donde type puede ser FileDialog.LOAD o FileDialog.SAVE segn la operacin que se desee

96
realizar.

Es muy fcil conectar este dilogo con un File, utilizando los mtodos String getFile() y
String getDirectory(). Por ejemplo:

FileDialog fd = new FileDialog(f, "Elija un archivo");


fd.show();
File f = new File(fd.getDirectory(), fd.getFile());

11.3 LECTURA DE ARCHIVOS DE TEXTO

Se puede crear un objeto BufferedReader para leer de un archivo de texto de la siguiente


manera:

BufferedReader br = new BufferedReader(new FileReader("archivo.txt"));

Utilizando el objeto de tipo BufferedReader se puede conseguir exactamente lo mismo que


en las secciones anteriores utilizando el mtodo readLine() y la clase StringTokenizer. En el
caso de archivos es muy importante utilizar el buffer puesto que la tarea de escribir en
disco es muy lenta respecto a los procesos del programa y realizar las operaciones de
lectura de golpe y no de una en una hace mucho ms eficiente el acceso. Por ejemplo:

// Lee un archivo entero de la misma manera que de teclado


String texto = new String();
try {
FileReader fr = new FileReader("archivo.txt");
entrada = new BufferedReader(fr);
String s;
while((s = entrada.readLine()) != null)
texto += s;
entrada.close();
}
catch(java.io.FileNotFoundException fnfex) {
System.out.println("Archivo no encontrado: " + fnfex);}
catch(java.io.IOException ioex) {}

11.4 ESCRITURA DE ARCHIVOS DE TEXTO

La clase PrintWriter es la ms prctica para escribir un archivo de texto porque posee los
mtodos print(cualquier tipo) y println(cualquier tipo), idnticos a los de System.out (de clase
PrintStream).

Un objeto PrintWriter se puede crear a partir de un BufferedWriter (para disponer de


buffer), que se crea a partir del FileWriter al que se la pasa el nombre del archivo. Despus,
escribir en el archivo es tan fcil como en pantalla.

97
El siguiente ejemplo ilustra lo anterior:

try {
FileWriter fw = new FileWriter("escribeme.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter salida = new PrintWriter(bw);
salida.println("Hola, soy la primera lnea");
salida.close();
// Modo append
bw = new BufferedWriter(new FileWriter("escribeme.txt", true));
salida = new PrintWriter(bw);
salida.print("Y yo soy la segunda. ");
double b = 123.45;
salida.println(b);
salida.close();
}
cacth(java.io.IOException ioex) { }

98
ANEXOS

99
UML

100
REPRESENTACION UML

Lenguaje Unificado de Modelado (UML)

Lenguaje Unificado de Modelado (UML, por sus siglas en ingls, Unified Modeling
Language) es el lenguaje de modelado de sistemas de software ms conocido y utilizado en
la actualidad; an cuando todava no es un estndar oficial, est apoyado en gran manera
por el OMG (Object Management Group). Es un lenguaje grfico para visualizar,
especificar, construir y documentar un sistema de software. UML ofrece un estndar para
describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como
procesos de negocios y funciones del sistema, y aspectos concretos como expresiones de
lenguajes de programacin, esquemas de bases de datos y componentes de software
reutilizables.
Es importante remarcar que UML es un "lenguaje" para especificar y no un mtodo o un
proceso, se utiliza para definir un sistema de software, para detallar los artefactos en el
sistema y para documentar y construir. Es el lenguaje en el que est descrito el modelo. Se
puede aplicar en una gran variedad de formas para soportar una metodologa de desarrollo
de software.

MODELO
Un modelo es una simplificacin de la realidad. El modelado es esencial en la construccin
de software para:

Comunicar la estructura de un sistema complejo.


Especificar el comportamiento deseado de un sistema.
Comprender mejor lo que se est construir.
Descubrir oportunidades de simplificacin y reutilizacin.

UML cuenta con varios tipos de diagramas, los cuales muestran diferentes aspectos de las
entidades representadas. En la programacin orientada a objetos se utiliza los diagramas
de clases.

Los diagramas de clases

Los diagramas de clases son utilizados durante el proceso de anlisis y diseo de los
sistemas informticos, donde se crea el diseo conceptual de la informacin que se
manejara en el sistema, y los componentes que se encargaran del funcionamiento y la
relacin entre uno y otro.

101
Atributos:
Propiedades tambin llamados atributos o caractersticas, son valores que corresponden a
un objeto, como color, material, cantidad, ubicacin. Generalmente se conoce como la
informacin detallada del objeto.

Mtodos:
Operaciones son aquellas actividades o verbos que se pueden realizar con o para este
objeto, como por ejemplo abrir, cerrar, buscar, cancelar, acreditar, cargar. De la misma
manera que el nombre de un atributo, el nombre de una operacin se escribe con
minsculas si consta de una sola palabra. Si el nombre contiene ms de una palabra, cada
palabra ser unida a la anterior y comenzar con una letra mayscula, a excepcin de la
primera palabra que comenzar en minscula.

Herencia:
Se define como la reutilizacin de un objeto padre ya definido para poder extender la
funcionalidad en un objeto hijo. Los objetos hijos heredan todas las operaciones y/o
propiedades de un objeto padre. Por ejemplo: Una persona puede subdividirse en
Proveedores, Acreedores, Clientes, Accionistas, Empleados; todos comparten datos bsicos
como una persona, pero adems tendr informacin adicional que depende del tipo de
persona, como saldo del cliente, total de inversin del accionista, salario del empleado, etc.

Al disear una clase debemos pensar en cmo podemos identificar un objeto real, como

102
una persona, un transporte, un documento o un paquete. Estos ejemplos de clases de
objetos reales, es sobre lo que un sistema se disea. Durante el proceso del diseo de las
clases tomamos las propiedades que identifican como nico al objeto y otras propiedades
adicionales como datos que corresponden al objeto

NOTACIN

Atributos:
[Visibilidad] nombre[multiplicidad][: tipo[=valor por defecto]]

1. Son generalmente de visibilidad privada, no se pueden acceder directamente.


2. Las funciones que se utilizan para acceder a los atributos deben ser privadas.
3. Los Atributos necesitan mtodos para asignar y devolver valores inciales pero no
son necesarios.

Mtodos
[visibilidad] nombre([[in|out]parmetro : tipo [, ]])[:tipo_devuelto].

1. Son generalmente de visibilidad pblica pero tambin pueden existir mtodos


privados.
2. Son aquellos que manejan los atributos de una clase.

Los corchetas indican partes opcionales


Visibilidad:
Privada(-)
Protegida(#)
Publica(+)
Multiplicidad entre corchetes [*], [1*], [1.1]
Parmetros de entrada (IN)
Parmetros de salida (OUT)

El diagrama de clases incluye mucha ms informacin como la relacin entre un objeto y


otro, la herencia de propiedades de otro objeto, conjuntos de operaciones/propiedades que
son implementadas para una interfaz, etc.

RELACIONES
La relacin o asociacin entre clases tiene una navegabilidad a la que se le da una direccin
y se puede realizar como se muestra en el siguiente diagrama de clases Estudiante y
Fecha.

103
Estudiante
-nombre : String
-numeroUnico : String
-cedula : String
-fechaNacimiento : Fecha
+Estudiante()
+Estudiante(entrada initialNombre : String, entrada initialNumUnico : String, entrada initialCedula : String, entrada initialFechaNac : Fecha)
+Estudiante(entrada initialEstudiante : Estudiante)
+getNombre() : String
+getNumUnico() : String *
+getCedula() : String
+getFecha() : Fecha
+setNombre(entrada valueNombre : String) : void
+setNumUnico(entrada valueNumUnico : String) : void
+setCedula(entrada valueCedula : String) : void
+setFecha(entrada valueFecha : Fecha) : void
+imprimirFecha() : void

Fecha
-dia : int
-mes : int
-anio : int
+Fecha()
+Fecha(entrada initialDia : int, entrada initialMes : int, entrada inittalAnio : int) *
+Fecha(entrada initialFecha : Fecha)
+getDia() : int
+getMes() : int -fechaNacimiento
+getAnio() : int
+setDia(entrada valueDia : int) : void
+setMes(entrada valueMes : int) : void
+setAnio(entrada valueAnio : int) : void
+imprimirFecha() : void

Como se puede observar en el diagrama la navegabilidad nos ayuda a reconocer que la


fecha de nacimiento es referencia de la clase Fecha a la clase Estudiante de otro modo un
objeto Estudiante tiene un objeto Fecha

104
EJEMPLO:

Punto
-x : int
-y : int
+Punto()
+Punto(entrada initialX : int, entrada initialY : int)
+Punto(entrada initialPunto : Punto)
+getX() : int
+getY() : int
+setX(entrada X : int) : void
+setY(entrada Y : int) : void
+moverX(entrada incrementoX : int) : void
+moverY(entrada incrementoY : int) : void
+imprimirPunto() : void

UNA CLASE CONSISTE EN:


Cabecera
Cuerpo de la clase:
Variables de la Clase
Listas de Atributos
Listas Mtodos

ELEMENTOS EN LA DEFINICIN DE SU CUERPO.

1. Declarar Variables
2. Definir Constructores
3. Definir Mtodos

Variables de clase
Son variables cuyos valores son los mismos para la clase y para todas sus instancias. Para
indicar que una variable es una variable de clase se utiliza la palabra clave static en la
declaracin de las variables. En el ejemplo de la clase Punto las variables estn definidas
como X y Y del tipo entero.

EJERCICIO DE APLICACIN

Realice el UML de un objeto circulo si es necesario aumente clases

105
Punto
-x : double -centro
-y : double
+Punto()
+Punto(entrada initialX : double, entrada initialY : double) *
+Punto(entrada initialPunto : Punto)
+getX() : double
+getY() : double
+setX(entrada valueX : double) : void *
+setY(entrada valueY : double) : void
+moverX(entrada incrementoX : double) : void
+moverY(entrada incrementoY : double) : void Circulo
+imprimirPunto() : void
-centro : Punto
-radio : double
+Circulo()
+Circulo(entrada initialCentro : Punto, entrada initialRadio : double)
+Circulo(entrada initialCirculo : Circulo)
+getRadio() : double
+getCentro() : Punto
+setRadio(entrada valueRadio : double) : void
+setCentro(entrada valueCentro : Punto) : void
+moverCentro(entrada incrementoCentro : Punto) : void

EJEMPLO:

Realizar el uml de la clase cilindro con su respectiva aplicacin

106
Punto
-x : double -centro
-y : double
+Punto()
+Punto(entrada initialX : double, entrada initialY : double) 1
+Punto(entrada initialPunto : Punto)
+getX() : double
+getY() : double
+setX(entrada valueX : double) : void
+setY(entrada valueY : double) : void
+moverX(entrada incrementoX : double) : void
+moverY(entrada incrementoY : double) : void
+imprimirPunto() : void
1

Circulo
* -centro : Punto
-radio : double
-base +Circulo()
+Circulo(entrada initialCentro : Punto, entrada initialRadio : double)
+Circulo(entrada initialCirculo : Circulo)
+getRadio() : double
+getCentro() : Punto
+setRadio(entrada valueRadio : double) : void
+setCentro(entrada valueCentro : Punto) : void
+moverCentro(entrada incrementoCentro : Punto) : void
+imprimirCirculo() : void

Cilindro
-baseInferior : Circulo
-baseSuperior : Circulo
-altura : double
+Cilindro()
+Cilindro(entrada initialBaseSuperior : Circulo, entrada initialBaseInferior : Circulo, entrada initialAltura : double)
+Cilindro(entrada initialCilindro : Cilindro)
+getAltura() : double
+getBaseSuperior() : Circulo
+getBaseInferior() : Circulo
+setAltura(entrada valueAltura : double) : void
+setBaseInferior(entrada valueCirculo : Circulo) : void
+setBaseSuperior(entrada valueCirculo : Circulo) : void
+calcularVolumen() : double
+calcularSuperficieLateral() : double
+imprimirVolumen() : void
+imprimirSuperficieLateral() : void
+imprimirCilindro() : void

107
ECLIPSE

108
PLATAFORMA PARA DESARROLLO ECLIPSE

En el presente curso se utilizara la herramienta de desarrollo conocida como:

Esta plataforma tpicamente ha sido usada para desarrollar entornos integrados de


desarrollo o IDE como el IDE de Java llamado Java Development Toolkit y el compilador
que se embarca como parte de Eclipse y que son usados tambin para desarrollar el mismo
Eclipse

Es un IDE (Ambiente Integrado de Desarrollo), que es utilizado por los desarrolladores de


sistemas para ayudarlos durante las diferentes fases del desarrollo de sistemas de cdigo
abierto que soporta muchos lenguajes de programacin.

Eclipse viene con un Ambiente de Desarrollo de Java (JDE) que incluye un editor de resalte
de sintaxis, un compilador, un depurador, un navegador de clases y un administrador de
archivo/proyecto. La funcionalidad de Eclipse puede ser extendido con plug-ins.

109
TRABAJANDO CON ECLIPSE

Crear un Proyecto

1. En el men File, clic en New y despus clic en Project.

2. Clic en Java Project en el panel derecho y despus da un clic en Next (siguiente).

110
3. En el cuadro Project name, se escribe el nombre del nuevo proyecto. Finalmente
hacemos click en Finish.

4. Para cambiar la perspectiva del proyecto. En el men Window, seleccionar Open


Perspective y elegir la perspectiva deseada. En este caso Java Browsing.

111
Se despliegan 4 ventanas que muestran los proyectos, paquetes, tipos de datos o
clases y los miembros de la clase (atributos y mtodos)

Crear un Package
1. En el proyecto click derecho, clic en nuevo y por ltimo click en package.

2. En source folder va el nombre del proyecto y en Name el nombre del package que
en minsculas y por ltimo clic en Finish.

112
Crear la Clase

1. En el men File, clic New y clic en Class o si se quiere que est dentro de un
package se pone clic de derecho en el package, se selecciona New y luego clic en
Class.

113
2. En New Java Class, se escribe el nombre e la clase en el cuadro Name despus
seleccionar Finish.

Si se desea que la clase sea principal se selecciona public static void main(String[]
args).

COMPILAR LA CLASE

Eclipse incluye un compilador de Java incremental. Cuando introduces una lnea de cdigo
que contiene un error, el editor desplegar, en la derecha, una marca roja junto a dicha
lnea de cdigo.

CORRIDA DE LA APLICACIN
Una clase que contiene a main se conoce como clase de aplicacin o clase ejecutable

1. Cuando se compila por primera vez una clase se selecciona el men Run, luego
Run as y por ltmo Java Aplication

114
2. La corrida del programa se ver en la consola.

115
HERRAMIENTA SOURCE

Nos permite crear automticamente los accesorios y constructores de una clase en la que
estemos trabajando.

En la barra de herramientas hacemos clic en la opcin de Source y generamos los


accesorios automticamente

En la nueva ventana sealamos los atributos pertenecientes a la clase generada y hacemos


clic en la opcin ok posteriormente se generan automticamente los accesorios de cada
clase en que utilicemos la opcin de source

116
Igualmente en la opcin Source de la barra de herramientas generamos automticamente
los constructores de la clase ya sean los constructores por defecto o por parmetros
dependiendo los requerimientos de cada problema. Podemos escoger el nmero de
parmetros de cada constructor haciendo clic en cada atributo de la clase.

117
118
IMPLEMENTACION DE CLASES EN JAVA

En la implementacin de una o ms clases en lenguaje de java se debe tomar en cuenta los


siguientes aspectos:

El nombre del archivo generado va a tener el mismo nombre de la clase con la


extensin de java por ejemplo Punto.Java.
Las clases siempre tienen que ser del tipo pblicas.
Si el archivo generado consta de una o varias clases el nombre del archivo llevara
el mismo nombre de la clase que sea del tipo pblica.
La clase que contiene el mtodo o funcin main se la llama clase principal.
La clase principal es aquella que hace que interacten todos los objetos.
Cuando un archivo contiene una clase principal y ms clases el nombre del archivo
ser el mismo que el de la clase principal.
Es recomendable que cada clase se defina en archivos diferentes.
El Package y Project nos permiten trabajar de una manera ms ordenada con
nuestras clases creadas.

PACKAGE
Se llama o define PACKAGE al conjunto de clases que tienen algo en comn por ejemplo.

Figuras
Geomtricas

Crculo

Rectngulo

Cilindro

Como se puede observar las clases Circulo, Rectngulo y Cilindro son figuras geomtricas
por lo tanto se la puede asociar en un Package llamado Figuras ya que cada clase
pertenece a esta.

119
PROJECT
Se define como PROJECT o PROYECTO al conjunto de Package, clases distintas a las
compuestas por un Package y a otros tipos de carpetas que contienen informacin del
proyecto.

IMPLEMENATACION DEL CDIGO

Al implementar el cdigo para crear una clase Java recomienda seguir la convencin de
Java DOC (CONVENCIN DE CODIFICACIN) la cual permite que se identifique de
una manera rpida cada una de las partes de una clase: Atributos, Constructores,
Accesorios y Mtodos.

Despus de definir la clase como publica la siguiente lnea es un espacio en


blanco.
La siguiente lnea para los atributos que se encuentre a partir de cuatro
espacios en blanco o un tabulador.
Cada definicin de un atributo es del tipo privada y terminar en punto y
coma sin ningn espacio que los separe.
A continuacin la siguiente lnea en blanco
Crear los constructores por defecto, por parmetros y copia
Cada constructor debe a estar definido entre llaves como se observa en el
ejemplo.
Cada fila debe contener un mximo de 80 columnas u espacios caso
contrario se debe cortar para continuar en la siguiente lnea.

ELEMPLO 1:

package figuras;//la clase Punto pertenece al Package figuras

public class Punto {


//espacio lnea en blanco
private double X;//tabulador al inicio o cuatro espacios en blanco
private double Y;//;al final sin espacio
//espacio lnea en blanco
public Punto() {//definicin del constructor Punto()
//espacio lnea en blanco
X = 0;
Y = 0;
}//finalizacin del constructor
}//finalizacin de la clase

120
El ejemplo anterior facilita para comprender como la convencin de java doc ayuda a que
la implementacin sea ms ordenada de tal manera que sea de fcil uso y entendimiento

EJEMPLO 2:

Implementar la clase punto y una aplicacin; con sus atributos, constructores, accesorios y mtodos
utilizando los primeros requerimientos de la convencin de java doc.

Clase Punto:
package figuras;

public class Punto {

private double X;
private double Y;

public Punto() {

X = 0;
Y = 0;
}

public Punto(double initialX,double initialY) {

X = initialX;
Y = initialY;
}

public Punto(Punto initialPunto) {

X = initialPunto.X;
Y = initialPunto.Y;
}

public void setX(double valueX) {

X = valueX;
}

public void setY(double valueY) {

121
Y = valueY;
}

public double getX() {

return X;
}

public double getY() {

return Y;
}

public void moverX(double incrementoX) {

X = X + incrementoX;
}

public void moverY(double incrementoY) {

Y = Y + incrementoY;
}

public void moverPunto(Punto incrementoPunto) {

X += incrementoPunto.X;
Y += incrementoPunto.Y;
}

public void moverPunto(double incrementoX,double incrementoY) {

X += incrementoX;
Y += incrementoY;
}

public void setPunto(Punto valuePunto) {

X = valuePunto.X;
Y = valuePunto.Y;

122
public void imprimirPunto() {

System.out.println("X = " + X);


System.out.println("Y = " + Y);
}

Clase AplicaPunto

package figuras;

public class AplicaPunto {

public static void main(String[] args) {

Punto a = new Punto();


Punto b = new Punto(10,20);
Punto c = new Punto(a);
b.imprimirPunto();
b.moverPunto(10, 10);
b.imprimirPunto();
double valor = a.getX();
System.out.println("valor de a = "+ valor);
b.moverPunto(a);
b.setPunto(a);
a.setX(2);
a.setY(5);
a.imprimirPunto();
b.imprimirPunto();
b.moverX(a.getX());
b.imprimirPunto();
System.out.println("x = "+c.getX());

Comentarios

123
En la clase punto se pueden generar los siguientes mtodos que ayudan a comprender la
asignacin por referencia entre los objetos, ya que en los objetos no puede existir
asignacin de variable por variable.

public void suma(Punto op1,Punto op2) {

X = op1.X +op2.X;
Y = op1.Y +op2.Y;
}
public Punto suma(Punto ope2) {

Punto res = new Punto();


res.X = X + ope2.X;
res.Y = Y + ope2.Y;
return res;
}

En estos dos mtodos se utiliza la asignacin por referencia para sumar dos puntos de la
clase Punto. En una operacin binaria el numero de parmetros utilizados siembre va a ser
uno para obtener un Punto de la clase, si se utiliza 2 parmetros el mtodo no tendr
ningn retorno.

c = a . suma (b);

El punto c va a ser el resultado de la suma de los puntos a y b, donde a va actuar como


llamada a la funcin como lo hace el operador this y b ser el argumento de la funcin.

La referencia this

Java incluye un valor de referencia especial llamado this, que se utiliza dentro de cualquier
mtodo para referirse al objeto actual. El valor this se refiere al objeto sobre el que ha sido
llamado el mtodo actual. Se puede utilizar this siempre que se requiera una referencia a
un objeto del tipo de una clase actual. Si hay dos objetos que utilicen el mismo cdigo,
seleccionados a travs de otras instancias, cada uno tiene su propio valor nico de this.
Un refinamiento habitual es que un constructor llame a otro para construir la instancia
correctamente.

public Punto(double initialX,double initialY) {

this.X = initialX;
this.Y = initialY;
}

124
La aplicacin

La aplicacin usa un mtodo main, desde donde arranca, en la aplicacin utilizamos


System.out.println para imprimir en la salida estndar.

public class AplicaPunto {

public static void main(String[] args) {

Punto a = new Punto();


double valor = a.getX();
System.out.println("valor de a = "+ valor);
}
}
Los mtodos estticos (static), son, como los atributos, mtodos de clase; si el mtodo no
es static es un mtodo de instancia. El significado es el mismo que para los atributos: un
mtodo static es compartido por todas las instancias de la clase.

Static: sirve para definir un atributo como de clase, o sea nico para todos los objetos de la
clase. Es decir puede tener varios objetos pero solo un main.

Declaracin de atributos

En Java no hay variables globales; todas las variables se declaran dentro del cuerpo de la
clase o dentro de un mtodo. Las variables declaradas dentro de un mtodo son locales al
mtodo; las variables declaradas en el cuerpo de la clase se dice que son miembros de la
clase y son accesibles por todos los mtodos de la clase. Por otra parte, adems de los
atributos de la propia clase se puede acceder a todos los atributos de la clase de la que
desciende.

Finalmente, los atributos miembros de la clase pueden ser atributos de clase o atributos de
instancia; se dice que son atributos de clase si se usa la palabra clave static: en ese caso la
variable es nica para todas las instancias (objetos) de la clase (ocupa un nico lugar en
memoria). Si no se usa static, el sistema crea un lugar nuevo para esa variable con cada
instancia (o sea que es independiente para cada objeto).

125

Vous aimerez peut-être aussi