Sei sulla pagina 1di 114

Programacin Orientada a Objetos

Ingeniera en Tecnologas de la Informacin y Comunicaciones


Objetivo del curso o Competencia a desarrollar:
Aplica el paradigma orientado a objetos para el desarrollo de aplicaciones que solucionen
problemas del entorno.
Competencias previas

Para cursar esta asignatura se requiere de conocimientos bsicos y lgicos de


programacin como las reglas de diagramacin, pseudocdigo, uso de
expresiones de declaracin, asignacin, condicionales y estructuras cclicas que
son adquiridos en la asignatura de Fundamentos de Programacin.

Aportacin del curso al perfil profesional:


Esta asignatura aporta al perfil del egresado habilidades para analizar, modelar
desarrollar e implementar sistemas de informacin para la gestin de procesos y apoyo en
la toma de decisiones que aumenten la productividad y competitividad de las
organizaciones utilizando metodologas basadas en estndares internacionales.
La asignatura incluye los conceptos y metodologa orientada a objetos que permiten la
creacin y optimizacin de aplicaciones basadas en clases y objetos, que propicien un
desarrollo gil a travs de la reutilizacin de cdigo y aplicacin de control de errores.
Temario:
1. Entorno de desarrollo
1.1. Estructura de un proyecto
1.2. Proceso de desarrollo de aplicaciones
1.2.1. Compilacin
1.2.2. Archivos que crea el entorno de desarrollo
1.2.3. Depuracin
2. Clases y objetos
2.1. Definicin de una clase
2.2. Declaracin de clases
2.3. Miembros de una clase
2.4. mbito referente a una clase
2.5. Especificadores de acceso
2.6. Creacin de objetos
2.7. Clases predefinidas
2.8. Definicin, creacin y reutilizacin de paquetes/libreras
2.9. Manejo de excepciones
3. Mtodos
3.1. Definicin de un mtodo.
3.2. Estructura de un mtodo.
3.3. Valor de retorno.

3.4. Declaracin de un mtodo.


3.4.1. De clase
3.4.2. De Instancia
3.5. mbito y tiempo de vida de variables.
3.6. Argumentos y paso de parmetros
3.7. Puntero this.
3.8. Sobrecarga de mtodos.
3.9. Constructores y destructores
4. Herencia y polimorfismo
4.1. Concepto de herencia y polimorfismo.
4.2. Definicin de una clase base.
4.3. Definicin de una clase derivada.
4.4. Clases abstractas.
4.5. Interfaces.
4.5.1. Definicin
4.5.2. Implementacin.
4.5.3. Variable polimrficas
4.6. Reutilizacin de la definicin de paquetes/libreras
5. Arreglos
5.1. Unidimensional
5.2. Multidimensionales
6. Archivos
6.1. Definicin de Archivos de texto y archivos binarios.
6.2. Operaciones bsicas en archivos texto y binario.
6.3. Manejo de excepciones en archivos.

Bibliografa
1.
2.
3.
4.

Ceballos J. (2007) Java 2 Lenguaje y aplicaciones. Espaa: Alfaomega.


Ceballos J. (2012) Microsoft C# -Curso de Programacin. Espaa: Alfaomega.
Dean J. y Dean R. (2009) Introduccin a la programacin con Java: McGraw Hill
Doyle, B (2013) C# Programming: From Problem Analysis to Program Design.
Cengage Learning
5. Eckel, B. (2009) Piensa en Java. Espaa: Prentice Hall.
6. Froufe, A. (2008) Java 2 Manual de usuario y tutorial. Espaa: Alfaomega
7. Groussard, T. (2011) Recursos Informticos C#4 Los fundamentos del lenguajedesarrollar con visual estudio 2010. Espaa: Eni Ediciones
8. Joyanes, L. y Zahonero, I. (2011) Programacin en Java 6. Espaa: McGraw Hill
9. Sierra, K. (2008) SCJP Sun Certified Programmer for Java 6. USA: McGraw Hill.
10. Wu T. (2008) Programacin en Java. Introduccin a la Programacin Orientada a
Objetos. Espaa: McGrawHill

Fechas de Exmenes
Examen

Fecha

1er

Unidades

Ensayo/Producto de
Aprendizaje

24 de Agosto

2.

13 de Octubre

2y3

(Unidad 2) 28 de Septiembre
(Unidad 3) 13 de Octubre

3er

4 de Noviembre

4 de Noviembre

4.

01 de Diciembre

5y6

(Unidad 5) 23 de Noviembre
(Unidad 6) 01 de Diciembre

2 Oportunidad

07 de Diciembre de 09:00 a 13:00

Calificacin Final

09 de Diciembre

Criterios de evaluacin y acreditacin

Exmenes 60%
Productos de Aprendizaje 40% (Ensayos, Productos de Aprendizaje, etc.)
Portada
ndice *
Contenido
Conclusiones
Bibliografa*

Notas:
* Puede ir o no, depende del tipo de documento
2. Oportunidad de los Ensayos, Productos de Aprendizaje, etc.

Otras Observaciones:

Hora de entrada
Asistencia a clase
2 Oportunidad
Revisin equitativa
Solicitud de Amistad a la cuenta de Facebook Arturo Lpez Ponce
Solicitar que los agrege al grupo AEB-1054-TC1 Ago-Dic 2016
Foto para el Face.

1. Entorno de desarrollo
Existen diversos IDEs (Integrated Development Environment/Entorno de Desarrollo
Integrado) para Java, entre los que se encuentran:
a)
b)
c)
d)
e)

Eclipse
NetBeans
BlueJ
JBuilder
JCreator

1.1. Estructura de un proyecto


Crear proyectos en Eclipse Neon
https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/eclipse-instwin64.exe&mirror_id=272
1. Entra al programa Eclipse Neon
Cuando se corre por primera vez solicitar un directorio de espacio de trabajo:

2. Haga clic en el icono (o Alt + Shift + N), posteriormente selecciona la opcin


Java Project o haga clic en File/New/
Java Project.
3. Luego mostrar la siguiente ventana:

4. Teclee el nombre del proyecto y posteriormente Finish.


5. Para crear una clase principal expanda el rbol del nuevo proyecto en el Package
Explorer y en la carpeta
src haga clic al botn secundario, posteriormente
seleccione New y aparecer la siguiente ventana:

6. Seleccione la opcin

Class y mostrar la siguiente ventana:

7. Teclee el nombre de la clase principal y active la casilla public static void


main(String [] args) y posteriormente hacer clic en Finish.

Crear proyectos en NetBeans:


https://netbeans.org/downloads/index.html
1. Entrar al programa de NetBeans
2. Haga clic en el icono
o Archivo/Proyecto Nuevo o Ctrl + Maysculas + N
3. Luego mostrar la siguiente ventana:

4. En la seccin Categoras de la izquierda selecciona Java, y en la seccin


Proyectos de la derecha selecciona Java Application. Luego Clik en Siguiente>.
Les mostrar la siguiente ventana:

5. Ahora solo colocar el nombre al proyecto. Finalmente clic en el botn Terminar.

Luego de cargar los componentes necesarios para nuestra aplicacin, vern en la parte
superior izquierda:

Crear un proyecto en Bluej:


1. Ejecute el programa de BlueJ
http://www.bluej.org/
2. Haga clic el men Project/New Project

3. Posteriormente proporcione la ruta y el nombre del proyecto.

4. Para elaborar un programa haga clic en el botn


y teclee el nombre
de clase por ejemplo HolaMundo, para continuar haga clic en Ok.

5. Para comenzar la edicin haga clic en la clase


, despus aparecer
un ejemplo predefinido en BlueJ, elimine todo el cdigo, dejando solo la
declaracin de la clase principal y las llaves.

1.2. Proceso de desarrollo de aplicaciones


1.2.1. Compilacin
Eclipse:

Run/
Run
Ctrl + F11

NetBeans

Ejecutar/
F6

Ejecutar Project

BlueJ:

Dentro de la edicin, hacer clic en


O en la clase, hacer clic en el botn secundario y seleccionar la opcin Compile
del men contextual:

1.2.2. Archivos que crea el entorno de desarrollo


Eclipse:

Carpeta .settings.- El .settings contiene las preferencias y configuracin de eclipse


Carpeta bin.- En esta carpeta se generarn los archivos .class (Bytecode).
Carpeta src.- Contiene todos los archivos de cdigo fuente .java
Archivos .classpath y .project.- Contienen informacin sobre el proyecto.

NetBeans

Dentro de un proyecto en NetBeans genera algunas carpetas y archivos, de los


cuales solo nos interesa:
src se encuentran los archivos fuente
build es donde se guardan los archivos compilados (.class).

BlueJ:

En la carpeta del proyecto se guardan los archivos fuente (.java) y los compilados
(.class).
1.2.3. Depuracin

La depuracin (debug) permite examinar las aplicaciones para buscar errores, ya que
posibilita observar las lneas que se van ejecutando, as como los valores que van
tomando las variables en cada paso.
Eclipse:
Lo primero que hay que hacer es definir en qu punto o puntos del cdigo queremos que
la ejecucin del programa se detenga. Para ello, definiremos puntos de ruptura
(breakpoints) en las lneas de cdigo donde queramos que la ejecucin se detenga o
pause.
Para definir un punto de ruptura (o para eliminar uno existente), nos situamos en la lnea
que queramos y seleccionamos "Run -> Toggle breakpoint" o Ctrl + Shift + B.

Una vez tenemos definidos los puntos de ruptura que queramos, iniciamos el depurador
seleccionando desde una clase ejecutable "Run -> Debug" o, alternativamente, dando al
botn con el bicho:

Lo primero que vemos es que el Eclipse cambia de la perspectiva Java, a la Perspectiva


Debug. En esta perspectiva, adems de el cdigo fuente, el esquema o la consola,
podemos ver la informacin de las variables y una ventana donde se muestran los hilos
de ejecucin.
En la siguiente imagen podemos ver cmo la ejecucin se ha detenido en la lnea 14 del
main (donde habamos definido el punto de ruptura) y cmo dicha lnea aparece marcada
en el cdigo fuente. En la figura podemos ver el contenido de las variables y objetos que
existen en el momento en que se ha pausado la ejecucin, lo cual nos va a ayudar mucho
en la depuracin.

Adems, podemos indicar que la ejecucin siga o se detenga a nuestro gusto utilizando
los botones de la vista Debug (o las opciones del men "Run"). A continuacin explicamos
las bsicas.
Resume. Contina la ejecucin del programa hasta el prximo punto de ruptura o
hasta que finaliza la ejecucin.
Terminate. Finaliza la ejecucin del programa.
Step into. Se ejecuta la lnea actual y, en caso de ser una llamada a un mtodo, la
ejecucin contina dentro del mtodo.
Step over. Se ejecuta la lnea actual y se pasa a la lnea siguiente sin entrar en los
mtodos.
Step return. Se sigue ejecutando hasta que se ejecute un return. Es decir, se
ejecuta por completo el mtodo en el que estemos y se pasa a la lnea siguiente a la
invocacin del mtodo.

NetBeans
Al igual que en Eclipse, en NetBeans se tiene que establecer un punto de ruptura
(breakpoints), esto se realiza mediante:
1. Depurar -> Debug Main Project (Ctrl. + F5)
Tambin pulsando con el botn derecho sobre un proyecto en explorador de proyectos y
seleccionar Debug. El programa se ejecuta hasta llegar al primer breakpoint.

Continuar ejecucin (F8) Ejecuta una lnea de cdigo. Si la instruccin es una llamada
a un mtodo, ejecuta el mtodo sin entrar dentro del cdigo del mtodo.
Paso a paso (F7) Ejecuta una lnea de cdigo. Si la instruccin es una llamada a un
mtodo, salta al mtodo y contina la ejecucin por la primera lnea del mtodo.
Entra en el siguiente mtodo (Ctrl + F7) Ejecuta una lnea de cdigo. Si la lnea de
cdigo actual se encuentra dentro de un mtodo, se ejecutarn todas las instrucciones
que queden del mtodo y se vuelve a la instruccin desde la que se llam al mtodo.
Ejecuta hasta el cursor (F4) Se ejecuta el programa hasta la instruccin donde se
encuentra el cursor.
Continuar (F5) La ejecucin del programa contina hasta el siguiente breakpoint. Si
no existe un breakpoint se ejecuta hasta el final.
Finaliza sesin del depurador (Maysculas + F5). Termina la depuracin del
programa.

BlueJ:
El depurador de BlueJ realiza estas tres tareas:

Poner puntos de ruptura


Avanzar paso a paso por el cdigo
Inspeccionar variables.

Para poner un punto de ruptura:

Pulsar en el rea de puntos de ruptura que est a la


izquierda del texto en el editor.

Una vez puesto el punto de ruptura, ejecute el programa y tan pronto como se alcanza el
punto de ruptura, emerge la ventana del editor, mostrando la lnea de cdigo actual y
emerge una ventana de depurador. Esto tiene un aspecto semejante a la siguiente figura:

Paso a paso. Ejecuta una lnea de cdigo. Si la instruccin es una llamada a un


mtodo, salta al mtodo y contina la ejecucin por la primera lnea del mtodo.
Entra en el siguiente mtodo. Ejecuta una lnea de cdigo. Si la lnea de cdigo
actual se encuentra dentro de un mtodo, entra al mtodo y se sita en la primera lnea
del mtodo.

Continuar. La ejecucin del programa contina hasta el siguiente breakpoint. Si no


existe un breakpoint se ejecuta hasta el final.
Finaliza sesin del depurador. Termina la depuracin del programa.

Producto de aprendizaje 1.
Elaborar un Ensayo donde indique cual IDE es el mejor, resaltando sus ventajas,
desventajas de dada uno.
Qu es un ensayo?
En el ensayo, el autor expone de manera libre sus argumentos que respaldan una
posicin personal ante un determinado tema. Por eso, el ensayo puede incluir o no citas
bibliogrficas, se pueden citar trabajos acadmicos, artculos periodsticos, otros ensayos,
incluir frases o refranes, ofrecer ejemplos, exponer propuestas, contar ancdotas,
experiencias o vivencias, etc.
El gnero de ensayo puede ser tanto de carcter acadmico como as tambin literario,
por lo cual es en esta caracterstica donde radica de manera ms notable su esencia de
gnero libre.
Los ensayos, a diferencias de textos acadmicos como las tesis de investigacin o
monografas, no requieren de seguir un mtodo cientfico de investigacin para ser
realizados, pero s de una gran habilidad de expresin y argumentacin por parte de su
autor.
En general, el ensayo consta de tres partes en su estructura. La primera, es la de
presentacin del tema, contextualizacin y exposicin de una hiptesis (una suposicin
planteada por el autor acerca de determinado tema o problema) o posicin personal
acerca del tema central. En la segunda parte, llamada comnmente desarrollo, el autor
expone argumentos a travs de distintos recursos para sostener su hiptesis o posicin
personal presentada al principio. Estos recursos pueden ser: comparaciones, ejemplos,
datos, estadsticas, citas bibliogrficas, etc.
Por ltimo, en su conclusin, el autor intentar reforzar su hiptesis o posicin emitida al
comienzo del escrito. Como vemos, toda la estructura del ensayo se apoya entonces en la
argumentacin alrededor de una posicin personal sostenida por el autor. La clave est
en la habilidad de exposicin del autor para presentar sus argumentos reforzando as todo
el tiempo o al menos el que dura la lectura- su posicin, sin caer en la redundancia y en
la repeticin.

2. Clases y objetos
Antes de que un programa pueda crear objetos de cualquier clase, sta debe ser definida.
La definicin de una clase significa que se debe dar un nombre, as como tambin un
nombre a los elementos que almacenan sus datos, as como describir los mtodos que
realizarn las acciones o tareas de la clase.
2.1. Definicin de una clase
En el Lenguaje Unificado de Modelado (UML, Unifield Modeling Language), una clase es
representada por un rectngulo que posee tres divisiones:

Nombre de la clase
Atributos

Comportamiento

En donde:

La parte superior:
La intermedia:

La parte Inferior:

Contiene el nombre de la Clase


Contiene los atributos (o variables de instancia) que
caracterizan a la Clase.
Contiene los mtodos u operaciones, los cuales son la forma
como interacta el objeto con su entorno.

La representacin grfica de un objeto en UML:

Objeto : Clase X
Atributo1 = Expresin

Mtodo ()

(a) Notacin completa de un objeto

Objeto : Clase X
(b) Notacin reducida de un objeto

Porsche911 : Carro
Color = Amarillo

ArrancarMotor ()

Marco : Alumno
(d) Objeto Marco de la clase Alumno

(c) Objeto Porsche911 de la clase


Carro

2.2. Declaracin de clases


class NombreClase {
Declaracin de variables miembro
Constructores
Gets
Sets
Otros mtodos
}
En general, las declaraciones de clase pueden incluir estos componentes:
a) Modificadores de acceso para las clases public y por defecto.
b) El nombre de la clase con la primera letra en maysculas, por convencin.
c) El cuerpo de la clase, entre llaves, { }.
2.3. Miembros de una clase
Los miembros de una clase pueden ser:

Variables:

Constantes:

Mtodos:

A las variables de una clase se les conoce tambin como


caractersticas, atributos, variables de instancia o variables de
clase.
Otro miembro que se puede declarar dentro de una clase son las
constantes.
Tambin conocidos como comportamiento o mtodos de clase o
funciones.

2.4. mbito referente a una clase


El mbito determina en qu partes del programa una entidad puede ser usada y es
aplicable principalmente a las variables declaradas en las clase.
Si una variable es declarada dentro de un bloque (mtodo/funcin/procedimiento), sta
ser vlida solo dentro de ese bloque y se destruir al terminar el bloque. Adicionalmente,
la variable no podr verse ni usarse fuera del bloque (en el exterior del bloque). La

variable dentro del bloque es una variable local y solo tiene alcance dentro del bloque que
se cre, una variable definida fuera de cualquier bloque es una variable global y cualquier
bloque puede acceder a ella y modificarla.
2.5. Especificadores de acceso
Atributos y Mtodos:
Atributos:
Los atributos o caractersticas de una Clase pueden ser de tres tipos, los que definen el
grado de comunicacin y visibilidad de ellos con el entorno, estos son:

public (+,

):

Indica que el atributo ser visible tanto dentro como fuera de


la clase, es decir, es accesible desde todos lados.

private (-,

):

Indica que el atributo slo ser accesible desde dentro de la


clase (slo sus mtodos lo pueden accesar).

protected (#,

defecto

):

Indica que el atributo no ser accesible desde fuera de la


clase, pero si podr ser accesado por mtodos de la clase
adems de las subclases que se deriven (herencia).
Si no especifica ningn tipo de acceso, se utiliza el acceso
por defecto, esto significa que la variable es accesible a
todas las clases contenidas en le mismo paquete.

Mtodos:
Cada mtodo tiene asociado un tipo que se utiliza para controlar el acceso al mtodo.
Entre estos se encuentra:

public (+,

private (-,

protected (#,

defecto

):

Indica que el mtodo ser visible tanto dentro como fuera de


la clase, es decir, es accesible desde todos lados.
):

Indica que el mtodo slo ser accesible desde dentro de la


clase (slo otros mtodos de la clase lo pueden accesar).
):

Indica que el mtodo no ser accesible desde fuera de la


clase, pero si podr ser accesado por mtodos de la clase
adems de mtodos de las subclases que se deriven
(herencia).
Si no especifica ningn tipo de acceso, se utiliza el acceso
por defecto, esto significa que el mtodo es accesible a
todas las clases contenidas en el mismo paquete.

Modificador
public
private
protected
por defecto

Clase

Package

Subclase

Todos

S
S
S
S

S
No
S
S

S
No
S
No

S
No
No
No

En la siguiente tabla presentamos los 8 tipos de dato primitivos de Java, el nmero de bits
que ocupan y el rango de valores que pueden tomar.

Tipo

Tamao en bits

Rango de valores

boolean
char

1
16

true o false Nota: El No. de bits puede variar segn la plataforma

byte

short

16

int

32

long

64

float

32

double

64

\u0000 hasta \uFFFF' Conjunto Unicode de ISO


128 a +127
27 a 27 1
32,768 a +32,767
215 a 215 1
2,147,483,648 a +2,147,483,647
231 a 231 1
9,223,372,036,854,775,808 a
+9,223,372,036,854,775,807
263 a 263 1
3.4028234663852886E+38 hasta
1.40129846432481707E-45
1.797693134862157E+308 hasta
4.94065645841246544E-324

2.6. Creacin de objetos


Al proceso de crear objetos se le llama instanciacin. Y se puede realizar de dos formas:
1.- Primero se declara la referencia al objeto:
NombreDeClase identificadorObjeto;
Posteriormente se instancia el objeto:
identificadorObjeto = new NombreDeClase(Lista de Argumentos);
2.- Declarar la referencia y realizar la instanciacin en una sola lnea:
NombreDeClase identificadorObjeto = new NombreDeClase(Lista de Argumentos);
Ejercicio 2.1: Elabore una clase llamada Fecha, con tres variables miembro tipo int, que
representan el da, (d), el mes (m) y el ao (a), el constructor por defecto inicializa la
variables con 1 para el da, 1 para el mes y 1900 para el ao, el constructor alternativo
contara con tres parmetros, Sets y Gets, adems se sobre carga el mtodo toString el

cual regresa la fecha bajo el formato dd/mm/aaaa (para lograr esto utilice la clase
DecimalFormat que se encuentra en el paquete java.text).
La clase principal Ejercicio_1_1 se deben de instanciar dos objetos (fechaInicial y
fechaNacimiento), al crear el objeto fechaInicial invoca al constructor por defecto, mientras
que el objeto fechaNacimiento invoca al constructor alternativo y con los valores 20 a da,
09 al mes y 2016 al ao. Finalmente despliega los datos invocando de forma implcita el
mtodo toString().
Fecha
- int d;
- int m;
- int a;

+ Fecha()
+ Fecha(int vd, int vm, int va)
+ void cambiaDia(int vd)
+ void cambiaMes(int vm)
+ void cambiaAo(int va)
+ int regresaDia()
+ int regresaMes()
+ int regresaAo()
+ String toString()

import java.text.DecimalFormat;
public class Fecha {
private int d;
private int m;
private int a;
private DecimalFormat formato_dym = new DecimalFormat("00");
private DecimalFormat formato_a = new DecimalFormat("0000");
public
d =
m =
a =
}

Fecha() {
1;
1;
1900;

public
d =
m =
a =
}

Fecha(int vd, int vm, int va) {


vd;
vm;
(va < 1900 ? 1900: va);

public void cambiaDia(int vd) {


d = vd;
}

public int regresaDia() {


return d;
}
public void cambiaMes(int vm) {
m = vm;
}
public int regresaMes() {
return m;
}
public void cambiaAo(int va) {
a = va;
}
public int regresaAo() {
return a;
}
public String toString() {
return
formato_dym.format(d) + "/" +
formato_dym.format(m) + "/" +
formato_a.format(a);
}
}

Clase Principal

Ejercicio 2.2: Elabore una clase llamada rbol, con dos variables miembro, la primera se
llamar Tipo que representa el tipo de rbol (Naranjo, Manzano, Pino, etc.) y Fruto
(Naranja, Manzana, Sin Fruto, etc.). Con dos constructores, el por defecto le pondr los
valores de Sin Tipo a la variable Tipo y Sin Fruto a la variable Fruto, el constructor
alternativo se le mandaran dos parmetros que sern asignados a Tipo y Fruto, adems
deber tener los mtodos Sets y Gets; la clase principal se debe de llamar
Ejemplo_Arbol, instancie dos objetos, el primero con el constructor por defecto, el
segundo con el constructor alternativa, los valores tendrn que ser capturados y
finalmente despliegue contenido en pantalla de cada objeto.

Ejercicio 2.3: Elabore una clase llamada Hora, con tres variables miembro, Horas,
Minutos y Segundos. Contar con cuatro constructores, el constructor por defecto le
pondr los valores cero a las tres variables, el primer constructor alternativo recibir un
valor y se lo asignar a las horas, mientras que a minutos y segundo le asignara cero, el
siguiente constructor alternativo recibir dos parmetros los cuales se asignarn a las
variables hora y minutos; mientras que a segundos le podr cero, al tercer constructor
alternativo recibir tres parmetros los cuales se asignarn a horas, minutos y segundos,
tambin debe de tener los mtodos Sets y Gets. Adems debe sobrecargara el mtodo
toString el cual regresara los valores almacenados bajo el formato HH:MM:SS. La clase
principal se debe de llamar Ejemplo_Hora y deben instanciar cuatro objeto (cada uno
creado con un constructor diferente) y desplegando el contenido de los objetos en
pantalla.
2.7. Clases predefinidas
Estos son los paquetes ms importantes de la API de Java:
Paquete

java.applet
java.awt
java.io
java.lang

java.net
java.util
javax.swing

Descripcin

Contiene clases para la creacin de applets.


Contiene clases para crear interfaces de usuario con
ventanas.
Contiene clases para manejar la entrada/salida.
Contiene clases variadas pero imprescindibles para el
lenguaje, como Object, Math, String, Wrappers, etc.
El paquete java.lang es importado por defecto.
Contiene clases para soportar aplicaciones que
acceden a redes TCP/IP.
Contiene clases que permiten el acceso a recursos del
sistema, etc.
Contiene clases para crear interfaces de usuario
mejorando la AWT.

Clase Math
La Clase Math proporciona una gran variedad de mtodos matemticos al igual que
algunas constantes tiles.
Campos

Descripcin

final static double E

Constante e: 2.7182818284590452354

final static double PI

Constante pi: 3.14159265358979323846

Mtodos

Descripcin

static double abs(double d)


static float abs(float f)
static long abs(long l)
static int abs(int i)

Regresa el valor absoluto especificado.

static double acos(double d)

Regresa el inverso del coseno del ngulo


especificado en radianes.

static double asin(double d)

Regresa el inverso del seno del ngulo


especificado en radianes.

static double atan(double d)

Regresa el inverso de la tangente del


nmero especificado.

static double atan2(double d1, double d2)

Regresa el ngulo definido por las


coordenadas rectangulares (d1, d2)

static double cos(double d)

static double sen(double d)

static double tan(double d)

Regresa el coseno del ngulo especificado en


radianes.
double angulo = 45.0 * Math.PI/180.0;
System.out.println("cos(" + angulo + ") es " +
Math.cos(angulo));

Regresa el seno del ngulo especificado en


radianes.
double angulo = 45.0 * Math.PI/180.0;
System.out.println("sen(" + angulo + ") es " +
Math.sen(angulo));

Regresa la tangente del ngulo especificado en


radianes.
double angulo = 45.0 * Math.PI/180.0;
System.out.println("tan(" + angulo + ") es " +
Math.tan(angulo));

Regresa ed. Ejemplo:


static double exp(double d)

System.out.println("exp(1.0) es " +
Math.exp(1.0));
System.out.println("exp(10.0) es " +
Math.exp(10.0));
System.out.println("exp(0.0) es " +
Math.exp(0.0));

Regresa el logaritmo natural de d (base e).


Ejemplo:
static double log(double d)

System.out.println("log(1.0) es " +
Math.log(1.0));
System.out.println("log(10.0) es " +
Math.log(10.0));
System.out.println("log(Math.E) es " +
Math.log(Math.E));

Mtodos

Descripcin

static double max(double d1, double d2)


static float max(float f1, float f2)
static long max(long l1, long l2)
static int max(int i1, int i2)

Regresa el valor ms grande. Ejemplo:


Math.max(2.3,12.7)
12.7
Math.max(-2.3,-12.7)
-2.3

static double min(double d1, double d2)


static float min(float f1, float f2)
static long min(long l1, long l2)
static int min(int i1, int i2)

Regresa el valor ms pequeo. Ejemplo:


Math.min(2.3,12.7)
2.3
Math.min(-2.3,-12.7)
-12.7

static double sqrt(double r)

Regresa la raz cuadrada del valor r


espesificado. Math.sqrt(25) 5.0

static double pow(double base, double exp)


throws AritmeticException

Regresa baseexp. Ejemplo:


System.out.println("pow(10.0, 3.5) es " +
Math.pow(10.0,3.5));

Regresa un nmero aleatorio comprendido


entre 0.0 y 1.0. 0.0 <= Math.random() <= 1.0

static double random()

Funcin
matemtica

abs
atan
sin
cos
tan
exp
log
pow
round
random
max
min

Significado

Valor absoluto
Arcotangente
Seno
Coseno
Tangente
Exponenciacin
neperiana
Logaritmo neperiano
Potencia
Redondeo
Nmero aleatorio
Nmero mximo
Nmero mnimo

System.out.println("Nmero aleatorio: " +


Math.random());
System.out.println("Otro nmero aleatorio: " +
Math.random());

Ejemplo de uso

Resultado

double x = Math.abs(-2.3);
double x = Math.atan(1);
double x = Math.sin(0.5);
double x = Math.cos(0.5);
double x = Math.tan(0.5);
double x = Math.exp(1);

x = 2.3;
x = 0.78539816339744;
x = 0.4794255386042;
x = 0.87758256189037;
x = 0.54630248984379;
x = 2.71828182845904;

double x = Math.log(2.7172);
double x = Math.pow(2,3);
double x = Math.round(2.5);
double x = Math.ramdom();
double x = max(12.5, 3.3);
double x = min(12.5, 3.3);

x = 0.99960193833500;
x = 8.0;
x = 3;
x = 0.20614522323378;
x = 12.5;
x = 3.3

Ejercicio 2.4: El siguiente programa genera 10 nmeros aleatorios, adems cada valor
generado lo transforma en un nmero entre 15 y 35 por medio de clculos; y
posteriormente los imprime.

Clase String

La Clase String proporciona los mecanismos para el manejo de cadenas.


Ya que no se puede cambiar el valor de un String una vez que se ha
creado, esta clase se usa principalmente para analizar, manipular y
obtener los valores de las cadenas. Aunque hay mtodos que permiten
modificar y aadir al valor de la cadena, estos mtodos no modifican el
String en s, sino que regresan un nuevo String con los valores deseado.
Mtodos

Descripcin

String()

Crea un Objeto String.

String(char ch[])

Crea un Objeto String basado en el arreglo


ch[].

String(String s)

Crea un Objeto String con el valor s


especificado.

Mtodos

Descripcin

char charAt(int pos)

Regresa el carcter que se encuentra en la


posicin pos.

int compareTo(String otroString)

Regresa un int donde:


<0
El valor del String es menor al
otroString.
0
El valor del String es igual a
otroString
>0
El valor del String es mayor a
otroString.

String concat(String str)

Regresa la concatenacin del String y el str.

boolean equals(Object otroObjeto)

Regresa true si otroObjeto es String y tiene


el mismo valor.

boolean equalsIgnoreCase(String OtroString)

Compara el String con otroString sin


importar las maysculas y minsculas.

int length()

Regresa la longitud del String

int indexOf(String str)

Regresa la posicin donde se encuentra str


en el String, en caso de no encontrarlo
regresa -1.

int indexOf(String str, int ini)

Regresa la posicin donde se encuentra str en


el String comenzando en la posicin ini.

int indexOf(char ch)

Regresa la primera posicin donde se


encuentra ch en el String.

int indexOf(char ch, int ini)

Regresa la primera posicin donde se


encuentra ch en el String comenzando en
la posicin ini.

int lastIndexOf(String str)

Regresa la ltima posicin donde se


encuentra str en el String.

int lastIndexOf(String str, int ini)

Regresa la ltima posicin donde se


encuentra str en el String que se encuentre
antes de la posicin ini.

Mtodos

Descripcin

String replace(char viejoch, char nuevoch)

Remplaza todos los caracteres viejoch por


el carcter nuevoch.

String substring(int inicio, int fin)

Regresa una subcadena desde inicio hasta


fin.

String substring(int inicio)

Regresa una subcadena desde inicio hasta


final de la cadena.

String toLowerCase()

Regresa el valor del String en minsculas

String toString()

Regresa el valor del String.

String toUpperCase()

Regresa el valor del String en maysculas.

String trim()

Regresa la String sin los espacios a la izq y


der.

Static String valueOf(double d)


static String valueOf(float f)
static String valueOf(long l)
static String valueOf(int i)
static String valueOf(char ch)
static String valueOf(boolean b)

Regresa un String que contiene el valor del


tipo de dato especificado.

Static String valueOf(Object obj)

Regresa un String que representa una


cadena del Object.

Ejercicio 2.5:

Elabore un programa que lea su nombre, lo imprima Normal y en forma


de espejo.

Ejemplo:
Dame tu nombre: Jos Prez
Jos Prez-zerP seJ
Ejercicio 2.6:

Elabore un programa que lea su nombre y lo despliegue por palabra.

Ejercicio 2.7:

Elabore un programa que lea su nombre y despliegue cuantas vocales,


literales y espacios tiene.

Clases contenedoras o wrappers


En Java existen una serie de clases predefinidas equivalentes a los tipos primitivos
denominadas wrappers, clases contenedoras o envoltorios. El identificador de cada una
de estas clases es el mismo que el del tipo primitivo correspondiente pero con la letra
inicial en maysculas (salvo int - Integer y char - Character). Cada una de estas clases
declaran un conjunto de mtodos de gran utilidad.
Tipo primitivo

Clase contenedora

boolean
char
byte
short
int
long
float
double

Boolean
Character
Byte
Short
Integer
Long
Float
Double

2.8. Definicin, creacin y reutilizacin de paquetes/libreras


Un paquete en Java es lo que su nombre lo indica, un paquete o conjunto de clases,
lgicamente, que tienen cosas en comn. Lgicamente un programado puede agruparlas
con o sin criterio, pero lo ideal es que se dediquen a funciones especficas. Tambin los
paquetes definen una jerarqua de directorios, que permiten igualmente agrupas las
clases, cosa de desplegar los archivos ms ordenadamente.
Cuando necesitamos libreras de java, estamos llamando a una clase especfica o a todo
un paquete. Por ejemplo, cuando ponemos esto:
import System.io.*;
Estamos importando todas las clases del paquete System.io.
Paquetes en los diferentes IDEs:
Por medio de la sentencia package se pueden establecer paquetes. Para poder hacer
esto, se tiene que poner dentro de los programas .java esta sentencia y el nombre del
paquete que pertenece la clase.
Por ejemplo, supongamos que las clases Lapiz.java, Boligrafo.java y Goma.java, se van a
organizar para formar el paquete Escritorio, las clases quedaran de la siguiente forma:
package Escritorio;

package Escritorio;

public class Lapiz {


public Lapiz () {
System.out.println("Lpiz");
}
}

package Escritorio;

public class Goma {


public Goma() {
System.out.println("Goma");
}
}

public class Boligrafo {


public Boligrafo() {
System.out.println("Bolgrafo");
}
}

Ahora para utilizar estas clases debemos tener un programa que las utilice por ejemplo:
package Escritorio;
public class Ejemplo_Escritorio {
public static void main(String[] args) {
Lapiz l = new Lapiz();
Boligrafo b = new Boligrafo();
Goma g = new Goma();
}
}

Eclipse:

NetBeans

BlueJ
Para crear los paquetes seleccionamos el men Edit -> New package, y escribimos el
nombre del package. Nos aparece un icono y haciendo doble click sobre l se nos abre la
ventana del package creado:

Donde el icono tipo carpeta go up nos sirve para subir de nivel en la jerarqua de
packages. Situados en la ventana del package repetiremos la operacin creando el

package usuarios. Ahora desde el package entradas podemos hacer dos cosas: subir de
nivel hacia la raz, o profundizar nivel hacia usuarios.

Al ejecutar el programa EjemploDePaquetes tendremos:

2.9. Manejo de excepciones


Una excepcin en trminos de lenguaje de programacin es la indicacin de un problema
que ocurre durante la ejecucin de un programa. Sin embargo la palabra excepcin se
refiere que este problema ocurre con poca frecuencia generalmente cuando existe algn
dato o instruccin que no se apega al funcionamiento del programa por lo que se produce
un error. El manejo de excepciones permite al usuario crear aplicaciones tolerantes a
fallas y robustos (resistentes a errores) para controlar estas excepciones y que pueda
seguir ejecutando el programa sin verse afectado por el problema. En lenguaje Java estas
excepciones pueden manejarse con las clases que extienden el paquete Throwable de
manera directa o indirecta, pero existen diversos tipos de excepciones y formas para
manejarlas.
El trmino excepcin es una forma corta da la frase suceso excepcional y puede
definirse de la siguiente forma:
Definicin:

Una excepcin es un evento que ocurre durante la ejecucin del programa


que interrumpe el flujo normal de las sentencias.

Las excepciones permiten definir un bloque de cdigo que se tratar de ejecutar, y un


segundo bloque alternativo que se ejecuta si dentro del bloque anterior se dispara una
excepcin.
Estos bloques se conocen como bloques try y catch. Las excepciones se manejan
mediante un bloque try-catch de la siguiente forma:
try {
// Cdigo que puede generar una excepcin

}
catch (TipoDeExcepcion excepcion) {
// Cdigo que maneja el error

Ejercicio 2.8: El siguiente programa captura dos valores tipo entero mediante la clase
JOptionPane, posteriormente se cual calcula la divisin del numerador entre el
denominador y finalmente se despliega en pantalla los valores del numerador,
denominador y el resultado.

Al ejecutar el programa tenemos:

Qu pasara si el valor del denominador es cero:

Ocurre una terminacin anmala de divisin por cero.

Tambin puede ocurrir un error al convertir el dato a entero por medio del mtodo parseInt
de la clase envoltorio Integer.

Ocurre un error de Formato de nmero.

Ejercicio 2.9: Para subsanar estos problemas se utilizaran Excepciones. En el siguiente


programa se utiliza el bloque try-catch, en la seccin try se ponen las sentencias que
podra generar una excepcin y tiene dos secciones catch, la primera que captura o cacha
la excepcin de formato numrico (NumberFormatException) y la segunda es una
excepcin aritmtica o de divisin por cero (ArithmeticException).
import javax.swing.JOptionPane;
public class Ejercicio_2_9 {
public static void main(String args[]){
boolean Continua = true;
do {
try {
int numerador = Integer.parseInt(
JOptionPane.showInputDialog("Introduzca un numerador entero:"));
int denominador = Integer.parseInt(
JOptionPane.showInputDialog("Introduzca un denominador entero: "));
int resultado = numerador/denominador;
JOptionPane.showMessageDialog(null, "Resultado: " + numerador + " / " +
denominador + " = " +
resultado);
System.exit ( 0 );
Continua = false;

}
catch (NumberFormatException errorDeFormatoNumerico) {
JOptionPane.showMessageDialog(null, "Teclee un dato tipo entero.\nIntente
nuevo");
}
catch (ArithmeticException errorAritmetico) {
JOptionPane.showMessageDialog(null, "Divisin por cero.\nIntente de nuevo");
}
} while (Continua);
}
}

de

Adems utiliza un ciclo en caso de que ocurra una excepcin regrese a solicitar los datos
hasta que la variable Continuar = false.
Clases de excepciones, excepciones predefinidas por el lenguaje.
En la siguiente figura se muestra una extraccin de la jerarqua de herencia de la clase
Throwable:

Throwable

Exception

RuntimeException

Error

IOException

AWTError

ArithmeticException

EOFException

ThreadDeath

ArrayStoreException

FileNotFoundException

OutOfMemoryError

ClassCastException

MalformedURLException

La clase Error est relacionada con errores de la mquina virtual de Java y no el cdigo,
generalmente estos errores no dependen del programador por lo que no debe
preocuparse por tratarlos.

En la clase Exception se encuentran las excepciones RuntimeException, producidas por


errores de programacin. El compilador de Java obliga a corregirlas.
En resumen las excepciones son generadas de tres formas diferentes.
1.

La mquina Virtual de Java puede generar una excepcin como producto de un


error interno que est fuera de su control. Estas excepciones generalmente no
pueden ser manejadas por el programa.

2.

Excepciones estndar: Son excepciones que deben ser manipuladas, se


producen cuando se ejecuta una divisin por cero o se trata de acceder a un
arreglo con un ndice fuera de lmites son generadas por errores en el cdigo del
programa.

3.

El programador puede generar una excepcin manualmente utilizando la


estructura Throw. Sin importar cmo se produjo la excepcin, se maneja de la
misma forma.

Descripcin de algunas excepciones:


ArithmeticException:

Se produce cuando una condicin aritmtica excepcional, se


ha producido. Por ejemplo, un nmero entero "divisin por
cero" genera una instancia de esta clase.

ArrayStoreException:

Lanzada para indicar que se ha intentado hacer para


almacenar el tipo equivocado de objeto en una matriz de
objetos. Por ejemplo, el cdigo siguiente genera un
ArrayStoreException:

Objeto x [] = new String [3];


x [0] = new Integer (0);
ClassCastException:

Lanzada para indicar que el cdigo ha tratado de convertir un


objeto a una subclase de la cual no es una instancia. Por
ejemplo, el siguiente cdigo genera una ClassCastException:

Objeto x = new Integer (0);


System.out.println ((String) x);
NegativeArraySizeException:
Se produce si una aplicacin intenta crear una matriz
con el tamao del negativo.
IllegalMonitorStateException:

NullPointerException:

Lanzada para indicar que un hilo ha intentado que


esperar en el monitor de un objeto o para notificar a
otros subprocesos que esperan en el monitor de un
objeto sin tener que poseer el monitor especificado.

Se produce cuando una aplicacin intenta utilizar nulo en el


caso de que se requiere un objeto. Estos incluyen:

Llamar al mtodo de instancia de un objeto nulo.


El acceso o modificar el campo de un objeto nulo.
Tomando la longitud de nulo como si se tratara de una matriz.
El acceso o la modificacin de las ranuras de cero como si se tratara de una
matriz.
Lanzar nulo como si se tratara de un valor Throwable.
Las solicitudes deben generar instancias de esta clase para indicar otros usos
ilegales del objeto nulo.

SecurityException:

Lanzado por el gerente de seguridad para indicar una


violacin de seguridad.

StringIndexOutOfBoundsException: Producidas por los mtodos de cadena para


indicar que un ndice es negativo o mayor que el
tamao de la cadena. Para algunos mtodos
tales como el mtodo charAt, esta excepcin
tambin se produce cuando el ndice es igual al
tamao de la cadena.
ArrayIndexOutOfBoundsException:

NumberFormatException:

Lanzada para indicar que una serie ha sido


visitada con un ndice ilegal. El ndice es negativo
o mayor que o igual al tamao de la matriz.

Producida para indicar que la aplicacin ha intentado para


convertir una cadena a uno de los tipos numricos, pero
que la cadena no tiene el formato adecuado.

IllegalThreadStateException: Producida para indicar que un hilo no est en un estado


apropiado para la operacin solicitada. Vase, por
ejemplo, la suspensin y reanudacin mtodos en la clase
Thread.
Propagacin:
Consideremos el siguiente caso:

main() llama al mtodo primero()


primero() llama al mtodo segundo()
En segundo() se produce una excepcin
main()primero()segundo()

Si segundo() no captura la excepcin con un catch, se propaga a primero(); si ste


tampoco la trata, se propaga a main(). Por ltimo, si en main() tampoco se gestiona, se
termina el programa con un error de ejecucin.

Clausula finally
try{
// Cdigo protegido que puede provocar excepciones

}
catch (TipoDeExcepcion excepcion) {
// Cdigo que maneja el error

}
finally{
// Cdigo que se ejecuta siempre al final

La clusula finally define un bloque que se ejecuta siempre independientemente


de que se haya capturado, o no, la excepcin.

Si dentro de try hay alguna sentencia return, se ejecuta final y antes de devolver
el valor

Ejemplo de bloque try-catch-finally


try {
abrirGrifo();
regarCesped();
}
catch (MangueraRotaException e) {
darAlarma();
avisarFontanero();
}
finally{
cerrarGrifo();
}

En el ejemplo anterior en el caso de que ocurra una excepcin de manguera rota se


invocara darAlarma() y posteriormente avisarFontanero(), al final se ejecutar el finally en
donde se cerraraGrifo() dado que en el try se abri. En caso de que no ocurra ningn
error, de todos modos se ejecutar finally cerrando el grifo.
Ejercicio 2.10: Elabore un programa que solicite su nombre y posteriormente solicite por
teclado un valor numrico, a continuacin imprima el carcter que este en esa posicin,
en
caso
de
que
no
exista
ese
carcter
cachar
la
excepcin
StringIndexOutOfBoundsException y mandar un mensaje de error.
Excepciones definidas por el usuario.
Si desea que los usuarios puedan distinguir, mediante programacin, ciertas condiciones
de error de otras, puede crear sus propias excepciones, a esto se le llama excepciones
definidas por el usuario. Para lograr esto a una clase derivada extindala de la clase base
Exception. Cada una de estas clases define una excepcin especfica, por lo que en
muchos casos slo hay que detectar la excepcin.

Todas las excepciones tienen como clase base la clase Throwable, que est incluida en el
paquete java.lang, y sus mtodos son:

Throwable( String mensaje );


Constructor. La cadena es opcional
Throwable fillInStackTrace();
Llena la pila de traza de ejecucin.
String getLocalizedMessage();
Crea una descripcin local de este objeto.
String getMessage();
Devuelve la cadena de error del objeto.
void printStackTrace( PrintStream_o_PrintWriter s );
Imprime este objeto y
su traza en el flujo del parmetro s, o en la
salida estndar (por defecto).
String toString;
Devuelve una breve descripcin del objeto.

Creacin de una clase derivada del tipo excepcin.


Podemos hacer que un mtodo nuestro lance excepciones y lo especificaremos as:
public
void
writeList()
throws
IOException,
ArrayIndexOutOfBoundsException {

}
Todos los mtodos Java utilizan la sentencia throw para lanzar una excepcin. Esta
sentencia requiere un slo argumento, un objeto Throwable. En el sistema Java, los
objetos lanzables son ejemplares de la clase Throwable definida en el paquete java.lang,
como por ejemplo:
throw new EmptyStackException();
Cuando se crea una nueva excepcin, derivando de una clase Exception ya existente, se
puede cambiar el mensaje que lleva asociado. La cadena de texto puede ser recuperada
a travs de un mtodo.
Normalmente, el texto del mensaje proporcionar informacin para resolver el problema o
sugerir una accin alternativa.
En el siguiente ejemplo se declara una clase llamada EdadFueradeRango que se
extiende de la clase Exception. Contiene dos constructores, el primero es el de por
defecto el cual invoca al sper constructor sin argumentos, el segundo (constructor
alternativo) recibe como parmetro un String el cual es invocado al sper constructor.
class EdadFueradeRango extends Exception {
public EdadFueradeRango() {
super();
}
public EdadFueradeRango( String s ) {
super( s );
}
}

Manejo de una excepcin definida por el usuario.


Continuando con el ejemplo de la excepcin fueran de rango, se declara una clase
Persona con el atributo Edad del tipo entero, adems cuenta con un constructor por
defecto que le asigna cero a Edad y un constructor alternativo que recibe un argumento
entero y el cual utiliza un bloque try-catch, en la seccin try invoca el mtodo cambiaEdad
enviando como parmetro el valor entero e, en caso de ocurrir un error lo cachara
mediante la instruccin catch y desplegar un mensaje de error donde indicar que la
edad est fuera de rango.
class Persona {
int Edad;
public Persona() {
Edad = 0;
}
public Persona(int e) {
try {
cambiaEdad(e);
}
catch (EdadFueradeRango EdadErronea) {
System.out.println(EdadErronea);
}
}
El mtodo cambiaEdad valida si la edad est entre 0 y 120 ao si es as se la asigna a la
variable Edad, en caso contrario lanza una excepcin de EdadFueradeRango.
private void cambiaEdad(int e) throws EdadFueradeRango {
if (e >= 0 && e <= 120)
Edad = e;
else
throw new EdadFueradeRango("Edad fuera de rango");
}
}
Mediante la clase principal Ejemplo_Excepcion se instancia un objeto Persona
mandndole una edad negativa que al validarse marcara un error de edad fuera de rango.
public class Ejemplo_ Excepcion {
public static void main(String args[]) {
Persona Manuel = new Persona(-1);
}
}

Producto de Aprendizaje 2: Realice lo que se le indica.


1.

Elabore una clase llamada Persona, con los siguientes variables miembro:

Nombre (String)
Edad (int)
Altura (double)
Peso (double)
Sexo (String)
EstadoCivil (String)

El constructor por defecto asignara los siguientes valores a las variables:

Nombre = Sin Nombre


Edad = -1
Altura = -1
Peso == -1
Sexo = Hombre
EstadoCivil = Soltero

El constructor alternativo recibir seis parmetros y asignara los valores a las


variables correspondientes.
Adems tendr los mtodos Sets y Gets. Por ltimo tendr un mtodo Despliega
que regresara un Cadena bajo el siguiente formato:
Nombre = Nombre de la persona
Edad = 99
Altura = 99.99
Peso == 99.999
Sexo = Hombre/Mujer
EstadoCivil = Soltero/Casado/Viudo/Unin Libre
La clase principal se debe de llamar Ejemplo_Persona, donde se deben de
instanciar dos objetos tipo Persona, el primero objeto deber ser creado con el
constructor por defecto y el segundo objeto con datos debern ser capturados
desde teclado y al final despliegue el contenido de los objetos en pantalla.
2.

Elabore una clase llamada Estudiante, que maneje la siguiente informacin:

No de Control
Nombre
Carrera
Semestre
Promedio

Metodos:

Constructores (por defecto y alternativo)


Sets y Gets
Sobrecargar toString

Para la clase principal (llamada Ejemplo_Estudiante), instancie cinco elementos de tipo


estudiante, capturar los datos de 5 amigos y al final despliege en pantalla la siguiente
informacin:

3.

El estudiante con mayor promedio


El estudiante con el nombre o apellido ms largo
El estudiante del semestre ms bajo
Elabore un programa que controle las fallas de los vehculos que llegan al Taller
Mecnico Tubos y Mofles Galgo. Los datos que se quieren manejar son:

Placas
Marca
Modelo
Nombre del dueo
Tipo de falla:
1.
2.
3.
4.
5.
6.
7.
8.

Sistema elctrico
Motor
Ruedas, direccin, suspensin y frenos
Transmisin
Sistema de inyeccin y carburacin
Sistema de escape
Encendido
Sevicio de mantenimiento

Costo estimado de reparacin


o Refacciones
o Mano de obra
Pagos realizados
Fecha de entrega
Porcentaje de avance

Implemente este programa mediante clases, intancia cinco objetos tipo vehculo con
diferentes datos, al final imprima la siguiente informacin:

Porcentaje de tipo de fallas


Resumen de pagos y costos estimados (Placa, Dueo, Costo estimado y Pagos
realizados)
Resumen de vehculos en reparacin (Placa, Dueo, Tipo de falla y Porcentaje de
avance)

4.

Modifique el ejercicio 1, para que valide el estado civil por medio de excepciones,
el cual solo puede ser Soltero, Casado, Viudo o Unin Libre.

5.

Implemente un programa donde ejemplifique la utilizacin de la excepcin


NegativeArraySizeException

3. Mtodos
3.1. Definicin de un mtodo.
Un mtodo es un conjunto de instrucciones a las que se les da un determinado nombre de
tal manera que sea posible ejecutarlas en cualquier momento sin tenerlas que reescribir
sino usando slo su nombre. A estas instrucciones se les denomina cuerpo del mtodo, y
a su ejecucin a travs de su nombre se le denomina llamada al mtodo.
La ejecucin de las instrucciones de un mtodo puede producir como resultado un objeto
de cualquier tipo. A este objeto se le llama valor de retorno del mtodo y es
completamente opcional, pudindose escribir mtodos que no devuelvan ninguno.
La ejecucin de las instrucciones de un mtodo puede depender del valor de unas
variables especiales denominadas parmetros del mtodo, de manera que en funcin del
valor que se d a estas variables en cada llamada la ejecucin del mtodo se pueda
realizar de una u otra forma y podr producir uno u otro valor de retorno.
Al conjunto formado por el nombre de un mtodo y el nmero y tipo de sus parmetros se
le conoce como firma del mtodo. La firma de un mtodo es lo que verdaderamente lo
identifica, de modo que es posible definir en un mismo tipo varios mtodos con idntico
nombre siempre y cuando tengan distintos parmetros. Cuando esto ocurre se dice que el
mtodo est sobrecargado.
3.2. Estructura de un mtodo.
La sintaxis es:

acceso static tipo NombreDelMtodo ([Lista de Argumentos]) {


Declaracin de variables del mtodo
Sentencias del mtodo
[return tipo;]
}

Dnde:
acceso

Cada mtodo tiene asociado un tipo que se utiliza para controlar el acceso al
mtodo. Entre estos se encuentran:
public

Este mtodo pblico se puede llamar de cualquier cdigo que


tenga acceso a la clase.

private

Este mtodo privado solo puede ser llamado desde otros mtodos
dentro de la clase en que se defini el mtodo privado.

protected Este mtodo protegido se puede llamar desde otros mtodos de la


clase en que el mtodo est definido y por cualquier otro mtodo
de las clases que heredan de la clase en que est definido el
mtodo. Tambin est disponible en cualquier objeto de las clases
pertenecientes al mismo paquete en donde est definida la clase.

defecto

Si no especifica ningn tipo de acceso, se utiliza el acceso por


defecto, esto significa que el mtodo es accesible a todas las
clases contenidas en el mismo paquete, pero no est accesible
fuera de ese paquete.

static

Declara el mtodo como mtodo de la clase y no como mtodo del objeto (no
hereda el mtodo).

Nota:

Un mtodo declarado como static solo puede ser llamado por otro mtodo
static y hacer referencia a variables static.

tipo

Es el tipo de datos que regresara el mtodo. Si se estipula un tipo de dato void


indica el mtodo no regresa ningn valor (void indica ausencia de valor).
Dentro del mtodo para retornar el valor se utiliza la palabra reservada return y
posteriormente el valor, si el tipo de dato del mtodo se declara void no es
necesario utilizar la sentencia return.

NombreDelMtodo
Lista de Argumentos

Es el nombre que distingue al mtodo y debe estar formado por


un identificador.
Son los valores que se pasarn al mtodo para que realice su
tarea. Para cada argumento se tiene que declarar su tipo de dato.
Por ejemplo, el siguiente mtodo se llama suma2Numeros, recibe
como argumento dos valores tipo long y regresa un valor long
con la suma de los valores que recibe como parmetro.

public static long suma2Numeros( long a, long b ) {


return (a + b);
}

3.3. Valor de retorno.


En Java es imprescindible que a la hora de la declaracin de un mtodo, se indique el tipo
de dato que ha de devolver. Si no devuelve ningn valor, se indicar el tipo void como
retorno.
Los mtodos pueden devolver una variable u objeto, bien sea por valor (se devuelve una
copia), por puntero o por referencia. Java no soporta punteros, as que no puede devolver
nada por puntero. Todos los tipos primitivos en Java se devuelven por valor y todos los
objetos se devuelven por referencia. El retorno de la referencia a un objeto en Java es
similar a devolver un puntero a un objeto situado en memoria dinmica en C++, excepto
que la sintaxis es mucho ms simple en Java, en donde el item que se devuelve es la
direccin de la posicin en memoria dinmica donde se encuentra almacenado el objeto.
Para devolver un valor se utiliza la palabra clave return. La palabra clave return va
seguida de una expresin que ser evaluada para saber el valor de retorno. Esta
expresin puede ser compleja o puede ser simplemente el nombre de un objeto, una
variable de tipo primitivo o una constante.

public static long suma2Numeros( long a, long b ) {


return (a + b);
}
public static long suma2Numeros( long a, long b ) {
int c;
c = a + b;
return c;
}

3.4. Declaracin de un mtodo.


3.4.1. De clase
Mtodos de clase
Un mtodo de clase es aquel que puede ser invocado sin existir una instancia. Para
declarar un mtodo como Mtodo de la clase se utiliza la palabra reservada static:
acceso static tipo nombreMetodoClase (Lista de Argumentos) {
Declaracin de variables del mtodo
Sentencias del mtodo
[return tipo;]

Para acceder a las variables o mtodos de clase se utiliza el operador punto (.). Primero
se pone el nombre de la clase, un punto (.) y posteriormente el nombre de la variable de
clase o nombre del mtodo de clase.
nombreClase.nombreVarClase;
nombreClase.nombreMetodoClase();
3.4.2. De Instancia
Mtodos de instancia
Un mtodo de instancia es el que se invoca siempre sobre una instancia (objeto) de una
clase. Para declarar un mtodo de instancia se declara sin la palabra reservada static:
acceso tipo nombreMetodoInstancia (Lista de Argumentos) {
Declaracin de variables del mtodo
Sentencias del mtodo
[return tipo;]

Para acceder a las variables o mtodos de instancia se utiliza el operador punto (.).
Primero se pone el nombre del objeto, un punto (.) y posteriormente el nombre de la
variable de instancia (solo para cuando se declara como public o tipo de acceso amigable)
o nombre del mtodo de instancia.

Objeto.nombreVarInstancia;
Objeto.nombreMetodoInstancia();
Ejercicio 3.1: Implemente la clase Punto; posteriormente instancie dos objetos tipo Punto,
el primero con los valores del constructor por defecto y el segundo con los valores de 5
para x y 10 para y, finalmente despliegue los valores de x y y por medio del mtodo
regresaXY().

Punto
- int x;
- int y;

+ Punto()
+ Punto(int valorX, int Valory)
+ int regresaX()
+ int regresaY()
+ void asignaX(int valorX)
+ void asignaY(int valorY)
+ String regresaXY()

Que pasara se deseamos saber cuntos objetos tipo Punto se han creado, para ello se
debe de implementar una variable de clase e incrementarla cada vez que se instancia un
objeto tipo Punto.
Ejercicio 3.2: Se modificar el Ejercicio 3.1, al cual se agregarn una variable de clase
llamada NoObjetosPunto, en cuanto a la clase principal se instanciaran dos objetos tipo
Punto, el primero con los valores del constructor por defecto y el segundo con valores
capturados desde teclado, finalmente despliegue los valores de x y y por medio del
mtodo toString() y se indicarn cuantos objetos tipo Punto se han creado.

Punto
- int x;
- int y;
- static int NoObjetosPunto;
+ Punto()
+ Punto(int valorX, int Valory)
+ int regresaX()
+ int regresaY()
+ void asignaX(int valorX)
+ void asignaY(int valorY)
+ String toString()
+ int regresaNoObjetosPunto()

Ejercicio 3.3: El siguiente programa lee un valor en grados Celsius y por medio de un
mtodo llamado (esttico) convierteAFahrenheit convierte los grados Celsius a grados
Fahrenheit.
9
Fahrenheit = C + 32
5

Ejercicio 3.2: Elabore un programa que leean del teclado un dato numrico que
representan los mentros y por medio de los mtodos conversionAPies y
converionApulgadas cambia el valor en metros a pies y a pulgadas (donde 1 metro =
39.37 pulgadas y 1 pie = 12 pulgadas)
Ejercicio 3.3: Una tonelada mtrica equivale a 35,273.92 onzas. Elabore un programa
que lea desde teclado, el peso que le cabe a una caja en onzas y mediante el mtodo
calculaCajas determine cuantas cajas se pueden llenar con una tonelada mtrica de
cereal.
3.5. mbito y tiempo de vida de variables.
El mbito de una variable define su alcance de uso, o lo que es lo mismo, en que
secciones de cdigo una variable estar disponible. Fuera de este mbito, una variable no
podr ser accedida (no existe).
Tipos de mbito
En Java tenemos tres tipos de mbito que pueden aplicar a una variable:

Local
Global
Esttico

Veamos un fragmento de cdigo donde aparecen los tres tipos, antes de pasar a explicar
con un mnimo de detalle cada uno de ellos:
public class Punto {
private int x;
private int y;
private static int NoObjetosPunto;
public Punto() {
x=0;
y=0;
}

public Punto(int vx, int vy) {


x= vx;
y= vy;
}
public int regresaX() { return x; }
public int regresaY() { return y; }
public void asignaX(int vx) { x=vx; }
public void asignaY(int vy) { y=vy; }
public String toString() {
return "[ " + x + ", " + y + " ]";
}
public int regresaNoObjetosPunto() {
return NoObjetosPunto;
}
}
Variables de mbito local.- Las variables de mbito local, o de bloque, son aquellas que
slo pueden ser accedidas desde el bloque de cdigo en el que han sido declaradas (que
no inicializadas).
Variables de mbito global.- Las variables de mbito global, o de instancia, son aquellas
que pertenecen a cada instancia concreta de la clase donde han sido declaradas, y
dependiendo del modificador de visibilidad usado (ms tarde hablaremos sobre sto)
podran ser slo accedidas desde la propia instancia a la que pertenecen:
Variables estticas.- Las variables estticas, o de clase, son aquellas que pertenecen a
la propia clase donde han sido declaradas, y dependiendo del modificador de visibilidad
usado podran ser slo accedidas desde la propia clase en la que han sido declaradas:
3.6. Argumentos y paso de parmetros
Los argumentos son los valores que se pasan al mtodo para que realice un proceso o
tarea y el mtodo recibe estos argumentos en los parmetros designados (variables).
En el paso de parmetros a funciones hay dos aproximaciones clsicas: el paso por valor
y paso por referencia.

Por valor:
En el paso por valor se realiza una copia de los valores que se
pasan, trabajando dentro del mtodo con la copia. Es por ello que cualquier
cambio que sufran dentro, no repercute fuera del mtodo.

Por referencia:
En el paso por referencia no se realiza dicha copia, por lo que
las modificaciones de dentro de los mtodos afectan a los parmetros y esos
cambios permanecen al final del mtodo.

En Java el paso por parmetro es por valor, aunque los efectos son de paso por
referencia cuando los argumentos son objetos. Cmo sucede eso? Pues es muy fcil, si
un mtodo tiene como argumento un tipo primitivo (int, float, etc...), en Java se realiza una
copia para la funcin y cualquier cambio a dicho argumento no afecta a la variable
original. Este paso de parmetros en Java est orientado a utilizar el valor de la variable
para otros clculos.
En el caso de los objetos es distinto. En realidad lo que sucede es que en Java siempre
tenemos referencias a los objetos. Por eso al pasar a un mtodo como argumento un
objeto, pasamos la referencia al mismo, es decir, aunque se hace una copia para el paso
por valor, como lo que se copia es una referencia, los cambios al objeto referenciado s
son visibles y afectan fuera de mtodo.
La nica excepcin es la clase String, cuyos objetos no son mutables. Cualquier
modificacin de un objeto String lleva aparejada la creacin de una nueva instancia del
objeto. Si deseamos el mismo comportamiento para el paso de parmetros del resto de
objetos, tenemos que recurrir al objeto StringBuffer.
Ejercicio 3.4: En el siguiente programa se declaran 2 variables, la primera es un arreglo
de caracteres (char) y el segundo es un dato tipo int, dentro del mtodo main se
despliegan los datos antes de enviar las variables como parmetros al mtodo Cambia.
En el mtodo Cambia, se modifica el arreglo en el subndice 2 por el carcter @ y se
multiplica el valor de la variable int por 4. Cuando termina de ejecutar el mtodo Cambia
se vuelven a desplegar las variables y se puede observar que el arreglo cambi en el
subndice 2 debido a que fue enviado como por referencia, sin embargo la variable tipo int
no sufri cambios, debido a que se mando por valor.

3.7. Puntero this.


Fundamentalmente this tiene dos usos:

Seleccionar explcitamente un miembro de una clase con el fin de evitar colisin de


identificadores. Por ejemplo:

class Punto {
private int x;
private int y;
...
Punto (int x, int y) {
this.x = x;
this.y = y;
}
class Triangulo {
private double base;
private doble altura;
public void datosTriangulo (double base, double altura) {
this.base = base;
this.altura = altura;
}

Qu un mtodo devuelva el mismo objeto que le llam. De esta manera se puede


hacer llamadas en cascada a mtodos de la misma clase.

class Circulo {
Punto centro;
int radio;
. . .
public Circulo elMayor(Circulo c) {
if (radio > c.radio)
return this;
else
return c;
}
}
3.8. Sobrecarga de mtodos.
En programacin orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos
o ms mtodos con el mismo nombre pero funcionalidad diferente. Es decir, dos o ms
mtodos con el mismo nombre realizan acciones diferentes. El compilador usar una u
otra dependiendo de los parmetros usados. A esto se llama tambin sobrecarga de
mtodos.
La firma de un mtodo es la combinacin del tipo de dato que regresa, su nombre y su
lista de argumentos.
La sobrecarga de mtodos es la creacin de varios mtodos con el mismo nombre pero
con diferentes firmas y definiciones. Java utiliza el nmero y tipo de argumentos para
seleccionar cul definicin de mtodo ejecutar.
Java diferencia los mtodos sobrecargados con base en el nmero y tipo de argumentos
que tiene el mtodo y no por el tipo que devuelve.
En Java es posible definir dos o ms mtodos dentro de una misma clase que compartan
el mismo nombre y que las declaraciones de sus argumentos sean diferentes. En este
caso se dice que los mtodos estn sobrecargados y el fenmeno se conoce como
sobrecarga de mtodos. La sobrecarga es uno de los procedimientos mediante el cual se
implementa el polimorfismo.
En la llamada a los mtodos sobrecargados, el compilador determina cual es el mtodo
involucrado basndose en el nmero o tipo de argumentos. Por consiguiente los mtodos
sobrecargados deben diferenciarse en el nmero o tipos de argumentos. Cuando Java
encuentra una llamada a un mtodo sobrecargado, ejecuta la versin del mtodo cuyos
argumentos (nmero y tipo) coincidan con los argumentos utilizados en la llamada.
Nota:

La declaracin de los mtodos sobrecargados no deben ser ambigua, de modo


que el compilador pueda decidir inequvocamente cul mtodo ejecutar.

Ejercicio 3.5: El siguiente programa declara una clase llamada Sobrecarga con cuatro
mtodos llamados despliega que se encuentran sobrecargados. El primer mtodo no
recibe parmetros, el segundo recibo solo un parmetro tipo int, el tercero recibo dos
parmetros tipo int y por ltimo el cuarto mtodo recibe dos parmetros tipo float. El
funcionamiento de cada mtodo depende de los parmetros que reciba, desplegando en

pantalla el nmero de argumentos recibidos, los tipos y valores (con excepcin del
mtodo sin parmetros, el cual solo despliega en pantalla un mensaje).

El programa principal Ejercicio_3_5 instancia un objeto, llamado Sob1, posteriormente


invoca a los mtodos despliega enviando varios nmeros y tipos de argumentos
diferentes.

Ejercicio 3.6: El siguiente programa declara una clase principal llamada Ejercicio_3_6,
con cuatro mtodos llamados Area que se encuentran sobrecargados. El primer y
segundo mtodo calcula el rea de un cuadrado y reciben un argumento cada uno, el
primer de ellos recibe un tipo int y el segundo lo recibe tipo float. El tercer y cuarto mtodo
calcula en rea de un rectngulo, reciben dos argumentos, los parmetros del tercer
mtodo son de tipo int y el cuarto mtodo sus parmetros son de tipo float. Regresan un
valor tipo long (primer y tercer mtodo) y un valor tipo double (el segundo y cuarto
mtodo). Adems se utiliza la clase DecimalFormat para formatear los datos de salida.

Ejercicio_3_6
+ Area (int L): long
+ Area (float l): double
+ Area (int b, int a): long
+ Area (float b, float a): double

Ejercicio 3.7: Elabore una clase principal que tenga 6 mtodos sobrecargados llamado
areaTriangulo, que realizaran el clculo del rea de un triangulo en base a lo siguiente:

Con un parmetro, se asume que es un triangulo Equiltero y el rea se


calcula:

3 2
4

Donde a es el lado del triangulo

Con dos parmetros, el rea se calcula:


=

Donde b es la base y a es la altura del triangulo


Con tres parmetros, el rea se calcula::
= ( ) ( ) ( )

Donde a, b y c son los valores de las longitudes de los lados del triangulo y
p se calcula as:
=

( + + )
2

Los primeros 3 mtodos sobrecargados recibirn datos tipo int y los restantes 3,
datos tipo double. El valor de retorno de todos los mtodos ser double.
Mande a imprimir a pantalla los resultados de todos los mtodos.
3.9. Constructores y destructores
Un constructor es un mtodo miembro de propsito especfico que se ejecuta
automticamente cuando se crea un objeto de una clase. Un constructor sirve para
inicializar los miembros de datos o variables de clase.
Los constructores tienen el mismo nombre que la clase, adems no tienen valor de
retorno (ni void) y estn clasificados en constructores por defecto y
alternativos/sobrecargados.
Constructores
Los constructores tienen el mismo nombre que la clase, adems no tienen valor de
retorno (ni incluso void) y estn clasificados en constructores por defecto y
alternativos/sobrecargados.
Constructor por defecto
Un constructor que no tiene parmetros se le llama constructor por defecto. Un
constructor por defecto normalmente inicializa las variables con un valor por defecto, por
ejemplo: En el siguiente cdigo se declara la clase Punto, con dos variables miembro tipo
int, el constructor por defecto inicializa las variable x y y con cero, esto ocurrir cuando se
instancie un objeto tipo Punto.
public class Punto {
private int x;
private int y;

// Coordenada x
// Coordenada y

public Punto() {
x=0;
y=0;
}

// Constructor por defecto

public Punto(int valorX, int valorY) {


x= valorX;
y= valorY;
}

// Coordinador alternativo

public int regresaX() {


return x;
}

// Get de x

public int regresaY() {


return y;
}

// Get de Y

public void asignaX(int valorX) {


x=valorX;
}

// Set de x

public void asignaY(int valorY) {


y=valorY;
}

// Set de y

Regla:

Java crea automticamente un constructor por defecto cuando no existe otro


constructor. Tal constructor inicializa las variables tipo int, float, double, long con
cero, las booleanas con false y las referencias con null.

Constructor alternativo/sobrecargado
A un constructor con parmetros se le denomina constructor alternativo y su funcin es
modificar las variables de la clase, con los valores que recibe como parmetros:

public class Punto {


private int x;
private int y;

// Coordenada x
// Coordenada y

public Punto() {
x=0;
y=0;
}

// Constructor por defecto

public Punto(int valorX, int valorY) {


x= valorX;
y= valorY;
}

// Coordinador alternativo

Precaucin:

Tenga cuidado con la declaracin de una clase que slo tenga un


constructor con argumentos. En ese caso si se omite un constructor sin
parmetros no ser posible utilizar el constructor por defecto.

Ejemplo:

El cdigo que se muestra a continuacin declara una clase llamada Punto


con dos variables miembro tipo int (x y y), adems tiene un constructor
alternativo (debido a que tiene parmetros), el cual asigna los valores que
se le envan como parmetros a las variables x y y, dado que no tiene un

constructor por defecto (sin argumentos), al querer instanciar un objeto


del tipo punto (que en este ejemplo lo llamamos primerPunto) marcar
error, debido a que dicho mtodo constructor no existe.
public class Punto {
private int x;
private int y;

// Coordenada x
// Coordenada y

public Punto(int valorX, int valorY) {


x= valorX;
y= valorY;
}

// Coordinador alternativo

Al instanciar un objeto tipo Punto, marcara un error debido a que se est invocando al
constructor por defecto, sin embargo esta clase no lo tiene.
Punto primerPunto = new Punto();

//

no es posible utilizar este


constructor

Producto de Aprendizaje 3: Elabore los siguientes ejercicios utilizando mtodos.


1. Escriba un programa que dado el total a pagar de la compra de X productos y la
cantidad de dinero entregada, calcule el vuelto que hay que dar al cliente por
medio de un mtodo.
2. Escriba un programa que mediante un mtodo determine si una cadena es
palndromo (un palndromo es una palabra que se lee igual en sentido directo
como inverso, por ejemplo radar).
3. Escriba un programa que lea dos enteros positivos n y b que llame a un mtodo
cambiarBase para calcular y visualizar la representacin del nmero n en la base
b.
4. Escriba un programa que mediante un mtodo que tome como argumentos las
longitudes de los tres lados de un triangulo (a, b y c), devuelva el rea del
triangulo.

Area

p( p a)( p b)( p c)

donde

abc
2

5. Elabore una clase principal que tenga 6 mtodos sobrecargados llamado


areaCuadrilatero, que realizaran el clculo del rea de un cuadriltero en base a lo
siguiente:

Dos parmetros, rea de un romboide y se calcula:


=
Donde b es la base y a es la altura del romboide

Tres parmetros, rea de un trapezoide o cualquier cuadriltero y se


calcula as:

Donde
y
son las diagonales y es el ngulo que lo conforma (Ver
figura).

O seis parmetros y se calcula as:


=

+
2

Siendo:
ngulo comprendido entre los lados .
ngulo comprendido entre los lados
Los primeros 3 mtodos sobrecargados recibirn datos tipo long y los restantes 3,
datos tipo double. El valor de retorno de todos los mtodos ser double.
Mande a imprimir a pantalla los resultados de todos los mtodos.

4. Herencia y polimorfismo
4.1. Concepto de herencia y polimorfismo.
La idea de la herencia es permitir la creacin de nuevas clases basadas en clases
existentes. Cuando heredamos de una clase existente, reusamos (o heredamos) mtodos
y campos, y agregamos nuevos campos y mtodos para cumplir con la situacin nueva.
4.2. Definicin de una clase base.
Al crear una clase, en vez de declarar miembros (variables y mtodos) completamente
nuevos, el programador puede designar que la nueva clase herede los miembros de una
clase existente. Esta clase existente se conoce como superclase, y la nueva clase se
conoce como subclase.
4.3. Definicin de una clase derivada.
En otros lenguajes de programacin, como C++ se refieren a la superclase como clase
base y a la subclase como clase derivada. Una vez creada, cada subclase se puede
convertir en superclase de futuras subclases. Una subclase generalmente agrega sus
propias variables y mtodos, por lo tanto, una subclase es ms especfica que una
superclase y representa un grupo ms concreto de objetos.

Superclase
Prstamo

Hipotecario

Personal

Prendario

Subclases
A veces es difcil decidir cul es la relacin de herencia ms ptima entre el diseo de
clases. Consideremos por ejemplo el caso de empleados de una empresa, existen
diferentes tipos de clasificacin segn sea el criterio de discriminacin, por ejemplo por
tipo de empleado:

Empleado

Directivo

Administrativo

Obrero

Por tipo de percepcin:

Empleado

Confianza

Comisin

Asalariado

Por tiempo de dedicacin laboral:

Empleado

Discontinuo

TiempoFijo

Horas

Por tipo de contratacin:

Empleado

Base

Anual

Mensual

Como se darn cuenta es difcil establecer cul de estos modelos es el ms adecuado, lo


mejor es decidirse hasta que tenga la aplicacin real y el usuario le diga cul es la mejor
forma de organizacin de su empresa y as trasladarla al diseo jerrquico de clases.
Declaracin.
Una clase derivada (o subclase) es una clase que hereda los atributos y comportamiento
de una clase base (o superclase). Sintaxis:
public class Subclase extends Superclase {
acceso nuevoMiembro
...
public tipo NuevoMtodo (Lista de Parmetros)

}
Herencia-Redefinicin.- Es cuando un mtodo de una sper clase se redefine en las
subclases. En el siguiente ejemplo se asume que todos los animales duermen (sper
clase Animal), pero al heredar a una clase Len el mtodo (dormir) se redefine indicando
que el Len duerme sombre el vientre, mientras que en el Oso duerme sobre la espalda y
el tigre duerme sobre un rbol, a esto se le conoce como redefinicin de mtodos.

Animal

dormir()

dormir (){
System.out.println(Zzzzz);
}

Len

Oso

Tigre

dormir()

dormir()

dormir()

dormir (){
System.out.println(Sobre el vientre);
}

dormir (){
System.out.println(Sobre la espalda);
}

dormir (){
System.out.println(En un rbol);
}

Ejercicio 4.1: En el siguiente ejemplo tenemos la sper clase Prstamo, que contiene las
variables miembro Monto e Inters que son del tipo float con tipo de acceso privado (-),
adems cuenta con los siguientes mtodos los cuales todos son pblicos (+):

Constructores (por defecto y alternativo)


calculaIntereses() que no recibe ningn parmetro y regresa el clculo de los
inters (Monto por Intereses) del tipo float.
actualizaMonto() que recibe un parmetro tipo float y se lo asigna a Monto.
actualizaIntereses() que recibe un float como parmetro y se lo asigna a Intereses.

Muestra() que regresa un String con el Monto: 99999 un salto de lnea y el Interes:
99999
Prestamo
- float Monto
- float Interes
+ Presamo()
+ Prestamo (float M, float I)
+ float calculaIntereses()
+ void actualizaMonto(float M)
+ void actualizaInteres(float I)
+ String muestra()

Hipotecario

Personal

Prendario

-String Inmueble
-int AniosHipo

-String TipoDocumento
-String FechaVen

-String Prenda
- float ValorPrenda

+ Hipotecario()
+ Hipotecario(float M,
float I, String In, int A)
+ String muestra()

+ Personal()
+ Personal(float M, float I,
String D, String F)
+ String muestra()

+ Prendario()
+ Prendario(float M,
float I, String P, float V)
+ String muestra()

Como se puede observar en la jerarqua de clases, la flecha indica que la clase


Hipotecario hereda las caractersticas y comportamiento de Prstamo, adems define las
variables miembro Inmueble del tipo String que representa el bien inmueble que se
hipotecara para obtener el prstamo y la variable AniosHipo del tipo entera (int) que
representa los aos de hipoteca. Estas dos variables tienen el tipo de acceso privado (por
el signo negativo que las precede). Adems cuenta con los siguientes mtodos pblicos
(+):

Constructores (por defecto y alternativo)


muestra() que regresa un String con el Prstamo Hipotecario, salto de lnea, Bien
Inmueble:XXXXXXXXXX, salto de lnea, Aos de Hipoteca. 99 y lo que regresa
muestra del a sper clase.

Tambin la clase Personal hereda las caractersticas y comportamiento de Prstamo,


adems define las variables miembro TipoDocumento del tipo String que representa el
documento que se firma (pagare, letra de cambio, etc.) para obtener el prstamo y la
variable FechaVen del String que representa la fecha de vencimiento del documento.
Estas dos variables tienen el tipo de acceso privado (por el signo negativo que las
precede). Adems cuenta con los siguientes mtodos pblicos (+):

Constructores (por defecto y alternativo)


muestra() que regresa un String con el Crdito Personal, salto de lnea, Tipo de
Documento: XXXXXXXXXX, salto de lnea, Fecha de Vencimiento: XXXXXXXXX y
lo que regresa muestra del a sper clase.

La clase Prendario hereda las caractersticas y comportamiento de Prstamo, adems


define las variables miembro Prenda del tipo String que representa el la prenda que se
deja en garanta (Joyas, Pinturas, etc.) para obtener el prstamo y la variable ValorPrenda
del tipo entera (int) que representa el valor de la prenda. Estas dos variables tienen el tipo
de acceso privado (por el signo negativo que las precede). Adems cuenta con los
siguientes mtodos pblicos (+):

Constructores (por defecto y alternativo)


muestra() que regresa un String con el Crdito Prendario, salto de lnea, Prenda:
XXXXXXXXXX, salto de lnea, Valor de la prenda: 999999999 y lo que regresa
muestra del a sper clase.

Una vez implementado en BlueJ se tendr un diseo as:

Elabore las clases Prestamo, Hipotecario, Personal y Prendarios, as como tambin


elabore la clas principal Ejemplo_Prestamo para que obtenga el siguiente resultado:

4.4. Clases abstractas.


Cuando pensamos en un tipo de clase, suponemos que los programas crearn objetos de
ese tipo, sin embargo, existen casos en los que es conveniente declarar clases para las
cuales el programador no pretende instanciar objetos. Dichas clases se denominan clases
abstractas, debido a que estas solo se utilizan como superclases en la jerarqua de
herencias, nos referiremos a ellas como superclases abstractas. Estas clases no pueden
utilizarse para instanciar objetos, porque las clases abstractas se declaran incompletas,
las subclases deben declarar las partes faltantes.
El propsito de una clase abstracta es proporcionar una superclase apropiada, a partir de
la cual se puedan heredar otras clases. Las clases que pueden usarse para instanciar
objetos se conocen como clases concretas, dichas clases proporcionan implementaciones
de todos los mtodos que declaran. Podramos tener una superclase llamada
Bidimensional y derivar a partir de ella clases concretas como Cuadrado, Circulo y
Triangulo. Tambin podramos tener una superclase abstracta llamada Tridimensional y
derivar de ella clases concretas como Cubo, Esfera y Tetraedro. Las clases abstractas
son demasiado genricas como para crear objetos reales; slo especifican lo que las
subclases tienen en comn. Necesitamos ser ms especficos antes de poder crear
objetos. Por ejemplo, si alguien le dice dibuje una figura, Qu figura dibujara?. Las
clases especficas proporcionan los aspectos especficos que hacen que sea razonable el
crear instancias de objetos.

Una jerarqua de clases no necesita contener clases abstractas, sin embargo,


comnmente se utilizan jerarquas de clases encabezadas por superclases abstractas
para reducir las dependencias de cdigo cliente en un tipos de subclases especficas. Por
ejemplo considere la siguiente jerarqua de clases:

Figura

Bidimensional

Circulo

Cuadrado

Tridimensional

Triangulo

Esfera

Cubo

Tetraedro

En este jerarqua de clases la superclase abstracta Figura, en el siguiente nivel tenemos


otros dos clases abstractas Bidimensional y Tridimensional y en el ltimo nivel se declaran
clases concretas las cuales son para las figuras bidimensionales Circulo, Cuadrado y
Triangulo, mientras que las figuras tridimensionales son Esfera, Cubo y Tetraedro.
Definicin
Para que una clase sea abstracta se debe declarar con la palabra reservada abstract.
Una clase abstracta por lo general tiene uno o ms mtodos abstractos (los mtodos
static no pueden ser abstractos). Un mtodo abstracto es un mtodo con la palabra
reservada abstract en su declaracin.
public abstract class NombreDeClase {
public abstract tipo Mtodo ();

}
Los mtodos abstractos no proporcionan implementaciones. Una clase que contiene
mtodos abstractos debe declararse como clase abstracta. Cada subclase concreta de
una clase abstracta debe proporcionar implementaciones concretas de los mtodos
abstractos de la superclase. Los constructores no se heredan, por los que no pueden
declararse como abstractos.
Aunque no podemos crear instancias de objetos de superclases abstractas, podemos
utilizar superclases abstractas para crear variables que puedan guardar referencias de
subclases concretas derivadas de la superclases.

Redefinicin
Considere la siguiente jerarqua de clases:

Figura

Punto

Circulo

Cilindro
Comenzaremos con la superclase abstracta Figura, la cual declara la interfaz para la
jerarquas (es decir, el conjunto de mtodos que puede invocar un programa en todos los
objetos Figura), observe tambin que en el diagrama de clases, el nombre de la clase
abstracta Figura aparece en cursivas.
Mtodos
regresaArea

regresaVolumen

regresaNombre

Figura

0.0

0.0

abstract

Punto
Circulo

0.0
r2

0.0
0.0

Punto
Circulo

Cilindro

2 r h + 2 r2

r2 h

Cilindro

toString
Predeterminado
de Object
[x,y]
[x,y]; Radio = r
[x,y]; Radio = r;
Altura = h

La clase Figura proporciona los mtodos regresaArea, regresaVolumen y regresaNombre,


adems como es una extensin de la clase Object, hereda los 11 mtodos, entre ellos se
encuentran toString, por lo que tendr que ser redefinido.

Ejercicio 4.2: Implemente las clases


Figura, Punto, Circulo, Cilindro y
PruebaHerenciaAbstracta:

La clase Punto se extiende de Figura heredando todo los mtodos pblicos. Dentro de la
clase Punto se declaran dos variables miembro tipo int llamada x y y, las cuales tienen
tipo de acceso es privado, contiene dos constructores (uno por defecto y otro alternativo),
adems tiene los mtodos regresaX(), regresaY() que regresan el valor de su
correspondiente variable, cambiaX() y cambiaY() que cambian los valores de sus
correspondientes variables, tambin se redefine el mtodo abstracto regresaNombre(), el
cual regresa el nombre de la figura Punto, con esto deja de ser abstracta y se vuelve
concreta. Finalmente se redefina el mtodo toString().

La clase Crculo se extiende de Punto heredando todo los mtodos pblicos. Dentro de la
clase Crculo se declara la variable miembro radio del tipo double donde el tipo de acceso
es privado. Contiene dos constructores, uno por defecto y otro alternativo, los cuales al
utilizar el mtodo sper() el cual invocan al sper constructor de la sper clase Punto,
adems tiene los mtodos regresaRadio() y cambiaRadio() que regresan y cambian el
valor del radio, en este ltimo mtodo se utiliza la seleccin simple lineal (?), en donde si
la condicin es verdadera regresa el primer valor despus del signo de interrogacin, en
caso de ser falso regresa el valor que se encuentra despus de los dos puntos, esto se
realiza para asegurarse que no existan radios negativos. El mtodo regresaDiametro()

devuelve el doble del radio. Y Finalmente se redefine el mtodo regresaNombre(), el cual


regresa el nombre de la figura Crculo, se redefine el mtodo regresaArea() y toString().

La clase Cilindro se extiende de Crculo heredando todo los mtodos pblicos. Dentro de
la clase Cilindro se declara la variable miembro altura del tipo doubl, donde el tipo de
acceso es privado. Contiene dos constructores, uno por defecto y otro alternativo, los
cuales tambin utilizan el mtodo sper() invocan al sper constructor de la sper clase
Crculo, adems tiene los mtodos regresaAltura() y cambiaAltura() que regresan y
cambian el valor de la altura. Y se redefine los mtodos regresaNombre(), regresaArea(),
regresaVolumen() y toString().

En la clase principal PruebaHerenciaAbstracta se instancias tres objetos, uno tipo Punto,


otro tipo Circulo y un tercero tipo Cilindro asignando los valores a las variables miembro
por medio de la invocacin a los constructores alternativos. Se declara una variable tipo
String llamada salida en la cual se acumulan los datos que se mostrarn como resultados,
adems se declara un arreglo de tipo Figuras que es ah donde se realiza el polimorfismo,
debido a que soporta los mtodos de cada uno de los objetos mostrando la ejecucin de
cada mtodo toString, regresaArea() y regresaVolumne().

4.5. Interfaces.
4.5.1. Definicin
El concepto de Interface lleva un paso ms adelante la idea de las clases abstractas. En
Java una interface es una clase abstracta pura, es decir una clase donde todos los
mtodos son abstractos (no se implementa ninguno). Permite al diseador de clases
establecer la forma de una clase (nombres de mtodos, listas de argumentos y tipos de
retorno, pero no bloques de cdigo). Una interface puede tambin contener datos
miembro, pero estos son siempre static y final. Una interface sirve para establecer un
'protocolo' entre clases.
Para crear una interface, se utiliza la palabra clave interface en lugar de class. La
interface puede definirse public o sin modificador de acceso, y tiene el mismo significado
que para las clases. Todos los mtodos que declara una interface son siempre public.
Para indicar que una clase implementa los mtodos de una interface se utiliza la palabra
clave implements. El compilador se encargar de verificar que la clase efectivamente
declare e implemente todos los mtodos de la interface. Una clase puede implementar
ms de una interface.
4.5.2. Implementacin.
Una interface se declara:
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
Y una clase que implementa la interface:
class InstrumentoViento extends Object implements InstrumentoMusical {
void tocar() { . . . };
void afinar() { . . .};
String tipoInstrumento() {}
}
class Guitarra extends InstrumentoViento {
String tipoInstrumento() {
return "Guitarra";
}
}

La clase InstrumentoViento implementa la interface, declarando los mtodos y escribiendo


el cdigo correspondiente. Una clase derivada puede tambin redefinir si es necesario
alguno de los mtodos de la interface.
Es posible crear referencias a interfaces, pero las interfaces no pueden ser instanciadas.
Una referencia a una interface puede ser asignada a cualquier objeto que implemente la
interface. Por ejemplo:
InstrumentoMusical instrumento = new Guitarra();
instrumento.play();
System.out.prinln(instrumento.tipoInstrumento());
InstrumentoMusical i2 = new InstrumentoMusical(); //error.No se puede instanciar
Extensin de interfaces
Las interfaces pueden extender otras interfaces y, a diferencia de las clases, una interface
puede extender ms de una interface. La sintaxis es:
interface nombre_interface extends nombre_interface1, nombre_interface2, {
tipo_retorno nombre_metodo ( lista_argumentos ) ;

}
Agrupaciones de constantes
Dado que, por definicin, todos los datos miembros que se definen en una interface son
static y final, y dado que las interfaces no pueden instanciarse resulta una buena
herramienta para implantar grupos de constantes. Por ejemplo:
public interface Meses {
int ENERO = 1 , FEBRERO = 2 . . . ;
String [ ] NOMBRES_MESES = { " " , "Enero" , "Febrero" , . . . };
}
Esto puede usarse simplemente:
System.out.println(Meses.NOMBRES_MESES[ENERO]);
Ejercicio 4.3: Implemente la interfaz de Meses e imprime el mes de Enero como lo indica
la instruccin.
El ejemplo que se muestra a continuacin es una simplificacin de cmo funciona
realmente la gestin de eventos en el sistema grfico de usuario soportado por el API de
Java (AWT o swing). Se han cambiado los nombres y se ha simplificado para mostrar un
caso real en que el uso de interfaces resuelve un problema concreto.
Supongamos que tenemos una clase que representa un botn de accin en un entorno
grfico de usuario (el tpico botn de confirmacin de una accin o de cancelacin). Esta
clase pertenecer a una amplia jerarqua de clases y tendr mecanismos complejos de

definicin y uso que no son objeto del ejemplo. Sin embargo podramos pensar que la
clase Boton tiene miembros como los siguientes.
class Boton extends . . . {
protected int x , y, ancho, alto; // posicion del boton
protected String texto; // texto del boton
Boton(. . .) {
...
}
void dibujar() { . . .}
public void asignarTexto(String t) { . . .}
public String obtenerTexto() { . . .)
...
}
Lo que aqu nos interesa es ver lo que sucede cuando el usuario, utilizando el ratn pulsa
sobre el botn. Supongamos que la clase Boton tiene un mtodo, de nombre por ejemplo
click(), que es invocado por el gestor de ventanas cuando ha detectado que el usuario ha
pulsado el botn del ratn sobre l. El botn deber realizar alguna accin como dibujarse
en posicin 'pulsado' (si tiene efectos de tres dimensiones) y adems, probablemente,
querr informar a alguien de que se ha producido la accin del usuario. Es en este
mecanismo de 'notificacin' donde entra el concepto de interface. Para ello definimos una
interface Oyente de la siguiente forma:
interface Oyente {
void botonPulsado(Boton b);
}
La interface define un nico mtodo botonPulsado. La idea es que este mtodo sea
invocado por la clase Boton cuando el usuario pulse el botn. Para que esto sea posible
en algn momento hay que notificar al Boton quien es el Oyente que debe ser notificado.
La clase Boton quedara:
class Boton extends . . . {
...
private Oyente oyente;
void registrarOyente(Oyente o) {
oyente = o;
}
void click() {
...
oyente.botonPulsado(this);
}
}
El mtodo registrarOyente sirve para que alguien pueda 'apuntarse' como receptor de las
acciones del usuario. Obsrvese que existe una referencia de tipo Oyente. A Boton no le
importa que clase va a recibir su notificacin. Simplemente le importa que implante la
interface Oyente para poder invocar el mtodo botonPulsado. En el mtodo click se
invoca este mtodo. En el ejemplo se le pasa como parmetro una referencia al propio

objeto Boton. En la realidad lo que se pasa es un objeto 'Evento' con informacin


detallada de lo que ha ocurrido.
Con todo esto la clase que utiliza este mecanismo podra tener el siguiente aspecto:
class miAplicacion extends . . . implements Oyente {
public static main(String [] args) {
new miAplicacion(. . .);
...
}
...
miAplicacion(. . .) {
...
Boton b = new Boton(. . .);
b.registrarOyente(this);
}
...
void botonPulsado(Boton x) {
// procesar click
...
}
}
Obsrvese en el mtodo registrarOyente que se pasa la referencia this que en el lado de
la clase Boton es recogido como una referencia a la interface Oyente. Esto es posible
porque la clase miAplicacion implementa la interface Oyente. En trminos clsicos de
herencia miAplicacion ES un Oyente.
Ejercicio 4.4: Empleando intefaces implemente una calculadora que realice las
operaciones bsicas de suma (+), resta (-), multiplicacin (*) y divisin (/) de dos nmeros
que se capturaren desde teclado y que tenga el siguiente diseo:

Analizando el diseo, tendremos que, por cada elemento se emplearn los siguientes
componentes de Java:

Titulo de la ventana

JTextField

JLabel

JButton
4.5.3. Variable polimrficas
En Java, las variables que contienen objetos son variables polimrficas. El trmino
polimrfico (literalmente: muchas formas) se refiere al hecho de que una misma variable
puede contener objetos de diferentes tipos (del tipo declarado o de cualquier subtipo del
tipo declarado). El polimorfismo aparece en los lenguajes orientados a objetos en
numerosos contextos, las variables polimrficas constituyen justamente un primer
ejemplo.
public class CD {
private String titulo;
private String artista;
private String comentario;
public CD() {
titulo = "Sin Titulo";
artista = "Sin Artista";
comentario = "";
}
public CD(String titulo, String artista, String comentario) {
this.titulo = titulo;
this.artista = artista;
this.comentario = comentario;
}
public String regresaTitulo() {
return titulo;
}
public void asignaTitulo(String titulo) {
this.titulo = titulo;
}

public String regresaArtista() {


return artista;
}
public void asignaArtista(String artista) {
this.artista = artista;
}
public String regresaComentario() {
return comentario;
}
public void asignaComentario(String comentario) {
this.comentario = comentario;
}
public String toString() {
return "CD" + "\ntitulo=" + titulo +
"\nartista=" + artista +
"\ncomentario=" + comentario;
}
}
public class DVD {
private String titulo;
private String director;
private String comentario;
public DVD() {
titulo = "Sin Titulo";
director = "Sin Director";
comentario = "";
}
public DVD(String titulo, String director, String comentario) {
this.titulo = titulo;
this.director = director;
this.comentario = comentario;
}
public String regresaTitulo() {
return titulo;
}
public void asignaTitulo(String titulo) {
this.titulo = titulo;
}
public String regresaDirector() {
return director;
}
public void asignaArtista(String director) {
this.director = director;
}

public String regresaComentario() {


return comentario;
}
public void asignaComentario(String comentario) {
this.comentario = comentario;
}
public String toString() {
return "DVD" + "\ntitulo=" + titulo +
"\ndirector=" + director +
"\ncomentario=" + comentario;
}
}
public class Ejemplo_Opticos {
public static void main(String[] args) {
CD ObjetoCD =
new CD("Def Jam Recordings", "Justin Bieber", "Bueno");

DVD ObjetoDVD =
new DVD("The Revenant", "Alejandro Gonzlez Irritu", "Excelente");

Object ObjetoX;
ObjetoX = ObjetoCD;
System.out.println(ObjetoX);
ObjetoX = ObjetoDVD;
System.out.println(ObjetoX);
}
}

4.6. Reutilizacin de la definicin de paquetes/libreras


Un paquete en Java es lo que su nombre lo indica, un paquete o conjunto de clases,
lgicamente, que tienen cosas en comn. Lgicamente un programado puede agruparlas
con o sin criterio, pero lo ideal es que se dediquen a funciones especficas. Tambin los
paquetes definen una jerarqua de directorios, que permiten igualmente agrupas las
clases, cosa de desplegar los archivos mas ordenadamente. Tambin, cuando
necesitamos libreras de java, igualmente estamos llamando a una clase especfica o a
todo un paquete. Por ejemplo, cuando ponemos esto:
import System.io.*;
Estamos importando todas las clases del paquete System.io. Ahora, si hacemos esto:
import javax.swing.JOptionPane;
Estamos importando la clase JOptionPane del paquete javax.swing.
Para definir un paquete solo tenemos que incluir antes que los paquetes a importar, la
definicin del paquete al que pertenece la clase, de la forma siguiente:

package org.ruta.del.paquete;
Producto de Aprendizaje 4:

1. El Instituto tecnolgico de Aguascalientes desea un programa que controle a


sus Estudiantes de Licenciatura, Maestra y Doctorado. Los estudiaantes de
Licenciatura tiene los Atributos: Nombre, Domicilio, Telfono, Edad,
Especialidad y Promedio, mientras que los estudiantes de Maestra tiene los
siguientes variables miembro: Nombre, Domicilio, Telfono, Edad,
Investigacin Maestra y Fecha de entrega. Los estudiantes de Doctorado
tiene las siguientes variables: Nombre, Domicilio, Telfono, Edad, Proyecto
de Doctorado y Monto de la Investigacin. Modele las clases empleando
herencia. Adems elabore un programa en Java que implemente las clases e
instancie un objeto de cada una, capturando los datos desde teclado.
2. Modifique el ejercicio 4.4 agregando las operaciones de seno, coseno,

tangente, x, x , 1, x! y CE; y darle el nombre de Calculadora Cientfica.

5. Arreglos
Los arreglos se pueden definir como objetos en los que podemos guardar ms de un
valor, es decir, al tener una estructura organizada en un arreglo se puede guardar
mltiples valores de acuerdo a su tamao o capacidad, es importante recordar que los
valores a guardar deben ser del mismo tipo, por ejemplo: Si tenemos un arreglo de tipo
Numrico que puede almacenar 10 valores, solo podr almacenar 10 nmeros diferentes,
no otros tipos de valores como podran ser datos tipo String, char, boolean, etc.
5.1. Unidimensional
Los arreglos de una unidimensionales (tambin llamados vector o tablas), son estructuras
de datos de una sola dimensin (de ah viene su nombre). Un arreglo unidimensional est
constituido por una secuencia de objetos del mismo tipo. A los objetos se les llama
elementos del arreglo y se enumeran del 0 al n-1.
En la siguiente figura se muestra un arreglo llamado Numero, que contiene 5 elementos
(longitud igual a 5), enumerados del 0 a 4.

Numero
0
1
2
3
4

10
15
25
50
21

Operaciones.
Las operaciones bsicas sobre un arreglo unidimensional son:

Declaracin del arreglo,


Creacin del arreglo,
Inicializacin de los elementos del arreglo, y
Acceso a los elementos del arreglo.

Declaracin del arreglo


La declaracin de un arreglo unidimensional consiste en establecer las caractersticas del
arreglo y sus elementos, por medio de la siguiente sintaxis:
Al igual que con cualquier variable en Java, los arreglos se deben declarar antes de ser
utilizados.

Tipo [ ]

identificador

identificador [ ]

Tipo

,
Donde el Tipo, corresponde al tipo de dato del arreglo, el cual pude ser cualquiera de los
8 bsicos de Java o de alguna clase.
Los corchetes pueden colocarse de dos formas:
o
o

Los corchetes colocados despus del tipo de dato, esto indica que todos los
identificadores son arreglos.
Los corchetes colocados despus del identificador, indica que solo el
identificador que tenga los corchetes es un arreglo.

Identificador: Es el nombre del Arreglo.


Ejemplo:
int enteros[ ], x, y;
float [ ] cal1, cal2, cal3, prom;

char [ ] letra1, letra2[ ], letra3;

enteros en un arreglos unidimensional de tipo int, x y


y son variables tipo int.
cal1,
cal2,
cal3
y
prom
son
arreglos
unidimensionales.
letra1 y letra3 son arreglos de una dimensin del
tipo char y mientras que letra2 es una arreglo de
arreglos de tipo char (es decir una matriz).

Creacin del arreglo


Esto solo est declarando el nombre del arreglo y el tipo de datos que se van a almacenar
(a esto se le llama tambin referencia), para declarar el nmero de elementos del arreglo,
se realiza por medio del operador new.
Ejemplo:
float [ ] CalificacionFinal;
CalificacionFinal = new float [45];

La primera sentencia declara un arreglo unidimensional llamado CalificacionFinal que


manejara tipos de datos float. La segunda sentencia declara que tendr 45 elementos
(enumerado del 0 al 44). Otra forma de hacer la declaracin del arreglo, as como de sus
elementos es:
float [ ] CalificacionFinal = new float [45];
Acceso a los elementos del arreglo
Para almacenar datos en un arreglo basta con poner el nombre del arreglo, el subndice
(encerredo entre corchetes), el smbolo igual, la expresin que se quiere almacenar y
finalmente punto y coma.
CalificacionFinal[5] = 70;
System.out.println(La Calificacin Final 6 es: + CalificacionFinal[5]);
Ejercicio 5.1: El siguiente programa declara un arreglo de 6 elementos llamado Nombres.
Posteriormente por medio de una instruccin for captura las cadena de y asigna los datos
capturados a cada elemento del arreglo y finalmente por medio una instruccin while
despliega el contenido cada elemento del arreglo Nombres.

Ejercicio 5.2: El programa declara un arreglo de 10 elementos llamado Valores.


Posteriormente por medio del mtodo random() de la clase Math y utilizando una
instruccin for carga de manera automtica cada elemento del el arreglo. Finalmente
despliega el contenido del arreglo por medio de una instruccin do while.

Ejercicio 5.3: Elabore un programa que lea de teclado 10 calificaciones numricas entre
0 a 100, posteriormente imprima cada calificacin con su correspondiente Nota en base a
la siguiente tabla:
Lmite
Inferior Superior
93
100
90
92
87
89
83
86
80
82
77
79
73
76
70
72
0
69

Nota
A+
AB+
BC+
CD+
DF

Ejercicio 5.4: Elabore un programa que genere declare y cargue de forma aleatoria un
arreglos de 100 elementos y posteriormente calcule e imprima el rango (valor mayor
menos valor menor).
Inicializacin de de los elementos del arreglo
Otra forma de introducir datos en un arreglos es inicializndolo desde la declaracin.

Numero

int numero[] = {10, 15, 25, 50, 21};

0
1
2
3
4

10
15
25
50
21

Tamao de los arreglos (length)


Java considera cada arreglo un objeto, debido a ello se pude conocer el nmero de
elementos de un arreglo por medio del campo length.
Por ejemplo con la siguiente instruccin imprime La longitud es 5.
System.out.println(La longitud es + numero.length);
Ejercicio 5.5: El siguiente ejemplo declara un arreglo de 10 elementos llamado enteros, y
le asigna datos desde la declaracin. Posteriormente por medio de un ciclo for recorre los
elementos del arreglo y determina el elemento menor y mayor; al final los imprime.

Ejercicio 5.6: Como se ha venido diciendo los arreglos son referencias, y podemos tener
dos variables apuntando a un mismo arreglo.

Instruccin for mejorada


En los ejemplos anteriores demostramos cmo las instrucciones for controladas por un
contador intera a travs de los elementos del arreglo. Ahora veremos la instruccin for
mejorada, la cual itera a travs de los elementos de un arreglo o coleccin sin utilizar un
contador.
Sintaxis de la instruccin for mejorada:
for(parmetro: nombreArreglo)
Instruccin;
Donde parmetro tiene dos partes: un tipo y un identificador (por ejemplo int valor), y
nombreArreglo es el arreglo a travs del cual se iterar. El tipo del parmetro debe
concordar con el tipo de los elementos en el arreglo.

Ejercicio 5.7: Muestra el contenido el arreglo numero utilizando el for mejorado.

Mtodo de ordenamiento por Burbuja:


La Ordenacin de burbuja (Bubble Sort en ingls) es un sencillo algoritmo de
ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el
siguiente, intercambindolos de posicin si estn en el orden equivocado. Es necesario
revisar varias veces toda la lista hasta que no se necesiten ms intercambios, lo cual
significa que la lista est ordenada. Este algoritmo obtiene su nombre de la forma con la
que suben por la lista los elementos durante los intercambios, como si fueran pequeas
"burbujas". Tambin es conocido como el mtodo del intercambio directo. Dado que solo
usa comparaciones para operar elementos, se lo considera un algoritmo de comparacin,
siendo el ms sencillo de implementar.
Algoritmo:
Realiza
Movimientos = 0
Para I=0 hasta Arreglo.longitud 1
Si Arreglo[I+1] < Arreglo[I]
Arreglo[I] <-> Arreglo[I+1] // Intercambiar
Movimiento++
Fin_Si
Fin_para
Mientras (Movimiento != 0)

Dnde:
El smbolo <-> Significa intercambio, es decir el valor que se encuentra en Arreglo[I] se
intercambia a Arreglo[I+1] y el valor que est en Arreglo[I+1] se intercambia e la posicin
Arreglo[I].
Ejemplo: Se tiene el siguiente arreglo cargado con los datos:

Ejercicio 5.8: Elabore un programa en Java que genere 10 nmeros aleatorios (entre 100
y 999), ordnelos en forma ascendente mediante el mtodo de la burbuja y presente los
datos como se muestra en la siguiente figura.

Mtodo de ordenamiento por Seleccin


Los mtodos de ordenacin por seleccin se basan en dos principios bsicos:
Seleccionar el elemento ms pequeo (o ms grande) del arreglo. Colocarlo en la
posicin ms baja (o ms alta) del arreglo. A diferencia del mtodo de la burbuja, en este
mtodo el elemento ms pequeo (o ms grande) es el que se coloca en la posicin final
que le corresponde.
Algoritmo:
Para I=0 hasta Arreglo.longitud 1
Para J= I+1 hasta Arreglo.longitud
Si Arreglo[J] < Arreglo[I]
Arreglo[I] <-> Arreglo[I+1] // Intercambiar
Fin_Si
Fin_para
Fin_para

Ejercicio 5.9: Elabore un programa en Java que genere 10 nmeros aleatorios (entre 100
y 999), ordnelos en forma ascendente mediante el mtodo seleccin y presente los datos
como se muestra en la siguiente figura.

5.2. Multidimensionales
Los arreglos vistos anteriormente se conocen como arreglos unidimensionales y se
caracterizan por tener un solo subndice. Los arreglos multidimensionales son aquellos
que tienen ms de una dimensin y, en consecuencia, ms de un ndice (o subndice).
Los arreglos ms usuales son los de dos dimensiones, conocidos como matrices.
Un arreglo de dos dimensiones equivale a una tabla con filas y columnas:
n

0
1
2
3
4

m
Operaciones.
Las operaciones bsicas sobre un arreglo bidimensional son:

Declaracin del arreglo,


Creacin del arreglo,
Inicializacin de los elementos del arreglo, y
Acceso a los elementos del arreglo.

Declaracin de arreglos bidimensionales (matriz)

identificador

Tipo [ ] [ ]

,
Tipo

identificador [ ] [ ]

,
Ejemplo:
int puestos[ ][ ], x, y;

puestos en un arreglos de dos dimensiones del tipo


int, x y y son variables tipo int.

float [ ][ ] cal1, cal2, cal3, prom;

cal1,
cal2,
cal3
bidimensionales.

prom

son

arreglos

Creacin del arreglo


Como ya se mencion estas declaraciones son simplemente referencias, para declarar el
nmero de elementos del arreglo se hace por medio del operador new.
Ejemplo:
float [ ][ ] Calificaciones;
Calificaciones = new float [45][4];
La primera sentencia declara un arreglo Calificaciones que manejara tipos de datos float.
La segunda sentencia crea el arreglo e indica que manejara 45 filas (del 0 al 44) y 4
columnas (del 0 al 3). Otra forma de hacer la declaracin y creacin del arreglo es:
float [ ][ ] Calificaciones = new float [45][3];
Inicializacin de los elementos del arreglo
Al igual que los arreglos unidimensionales, los arreglos multidimensionales se pueden
inicializar desde la declaracin.
Ejemplo:
int tabla1[][] = { {51, 24, 33}, {32, 23, 45} };
Se define una matriz de 2 filas por 3 columnas

Tambin se puede utilizar otros formatos como los siguientes:


int tabla1[ ][ ] = { {51, 24, 33},
{32, 23, 45} }
tabla1[ ][ ]
int tabla1[ ][ ] = {
{51, 24, 33},
{32, 23, 45}
};

int tabla2[ ][ ] = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 12}
};

51

24

33

32

23

45

10

11

12

tabla2[ ][ ]

Java trata los arreglos de dos o ms dimensiones como un arreglo de arreglos, por tanto
puede crear arreglos no proporcionales.
Por ejemplo:
a)

double datos[ ][ ] = { {1.5, -2.5}, {5.0, 0.0, 1.5} };

Se ha creado un arreglo con dos filas, la 1 con dos columnas y la 2. con 3.

b)

int [ ] a = { 1, 3, 5 }, b = { 2, 4, 6, 8, 10 };
int z[ ][ ] = { a, b };

Primero se defini el arreglo a con 3 elementos y despus el arreglos b con 5 elementos,


posteriormente se define la matriz z con dos filas, la primera con 3 elementos (los del
arreglo a) y la segunda con 5 elementos (los del arreglo b).
Mtodo length con los arreglos bidimensionales
Para saber la longitud de la ltima dimensin se debe especificar los subndices
precedentes,
Ejercicio 5.10: Para el siguiente ejemplo se declara una matriz f no proporcional, donde
el primer subndice tiene 4 elementos, el segundo 2 y el ltimo 6.

Acceso a los elementos del arreglo bidimensional


Por ejemplo si tenemos la siguiente matriz:
int [ ][ ] a = new int [3][4];
a
Columna 0
Fila 0
a[0][0]
Fila 1
a[1][0]
Fila 2
a[2][0]

Columna 1
a[0][1]
a[1][1]
a[2][1]

Columna 2
a[0][2]
a[1][2]
a[2][2]

Columna 3
a[0][3]
a[1][3]
a[2][3]

ndice de la columna
ndice de la fila
Nombre del arreglo

Para almacenar datos en una matriz basta con poner el nombre del arreglo, el subndice
de las filas y el subndice de las columnas, el smbolo igual y la expresin que se quiere
almacenar y finalmente despus punto y coma. Por ejemplo:
a[1][3] = Expresin;
Ejercicio 5.11: El siguiente programa lee una matriz de enteros de n renglones y m
columnas y calcule la suma de los elementos de cada rengln.

Ejercicio 5.12: Elabore un programa que declare y cargue en forma aleatoria una matriz
de 5 por 5 y obetenga la suma los elementos de la diagonal principal e imprime el
resultado.
x
x
x
x
x
Ejercicio 5.13: Elabore un programa que declare y carga en forma aleatoria una matriz de
6 por 6 y obtienga el producto de la diagonal invertida e imprime el resultado
O
O
O
O
O
O

Ejercicio 5.14: Elabore un programa que lea una matriz de n X m y la escriba poniendo
las columnas como renglones y los renglones como columnas.
Por ejemplo, si la matriz que da el usuario es:
4
2
3

7
0
1

1
6
2

3
9
6

5
7
4

Entonces el programa debe escribir la matriz transpuesta:


4
7
1
3
5

2
0
6
9
7

3
1
2
6
4

Multidimensionales.
Java proporciona la probabilidad de almacenar varias dimensiones, aunque raramente los
problemas del mundo real se manejan ms tres dimensiones, esto porque para los seres
humanos es difcil representar grficamente arreglos con ms de tres dimensiones. Para
representar un arreglo de tres dimensiones lo haremos por medio de un cubo.
int cubo [ ][ ][ ] = new int [4][5][3];

z
x
5
Operaciones.
Las operaciones bsicas sobre un arreglo bidimensional son:

Declaracin del arreglo,


Creacin del arreglo,
Inicializacin de los elementos del arreglo, y
Acceso a los elementos del arreglo.

Declaracin de arreglos multidimensional


Para el siguiente ejemplo se tomara un arreglo de tres dimensiones

Tipo [ ] [ ] [ ]

identificador

Tipo

identificador [ ] [ ] [ ]

,
Ejemplo:
int cubo[ ][ ];

cubo en un arreglos de tres dimensiones del tipo int.

String [ ][ ][ ] Edificio1, Edificio2;

Edificio1
y
Edificio2
son
multidimensionales de 3 dimensiones.

arreglos

Creacin del arreglo


Como ya se mencion estas declaraciones son simplemente referencias, para declarar el
nmero de elementos del arreglo se hace por medio del operador new.
Ejemplo:
int cubo[ ][ ][ ];
cubo = new int [5][4][3];
La primera sentencia declara un arreglo de tres dimensiones llamado cubo que manejara
tipos de datos int. La segunda sentencia crea el arreglo e indica que manejara 5 filas, con
4 columnas y 3 de profundidad. Otra forma de hacer la declaracin y creacin del arreglo
es:
int [ ][ ] [ ] cubo = new int [5][4][3];
Almacenar datos en el arreglo multidimensional:
Al igual que en los anteriores arreglos, se deben poner los subndices al cual se quiere
acceder y posteriormente la expresin a asignar.
cubo[2][3][1] = 15;

Clases para el manejo de arreglos.


La clase Arrays proporciona mtodos estticos para manipular arreglos. Esta clase
maneja arreglos a alto nivel, como los mtodos: sort para ordenar arreglos, binarySearch
para buscar en un arreglo ordenado, equals para comparar arreglos y fill guardar valores
en todos los elementos de un arreglo.
Mtodos

Descripcin

static int binarySearch(char[ ] a, char bu)


static int binarySearch(double[ ] a, double bus)
static int binarySearch(float[ ] a, float bus)
static int binarySearch(int[ ] a, int bus)
static int binarySearch(Object[ ] a, Object bus)

Busca en el arreglo a el elemento bus y


regresa la posicin donde lo encontr, si
regresa -1 es que no fue localizado. El
arreglo debe estar ordenado.

static boolean equals(char[ ] a, char[ ] a2)


static boolean equals(double[ ] a, double[ ] a2)
static boolean equals(float[ ] a, float[ ] a2
static boolean equals(int[ ] a, int[ ] a2)
static boolean equals(Objeto[ ] a, Object[ ] a2)

Regresa true si los dos arreglos son


iguales uno a uno y false en caso contrario.

static void fill(boolean[ ] a, boolean val)


static void fill(char[ ] a, char val)
static void fill(double[ ] a, double val)
static void fill(float[ ] a, float val)
static void fill(int[ ] a, int val)
static void fill(Object[ ] a, Object val)

A cada elemento del arreglo le asigna el


val.

Mtodos

Descripcin

static void sort(char[ ] a)


static void sort(double[ ] a)
static void sort(float[ ] a)
static void sort(int[ ] a)
static void sort(Object[ ] a)

Ordena ascendentemente el arreglo


especificado.

static void sort(char[ ] a, int inicio, int fin)


static void sort(double[ ] a, int inicio, int fin)
static void sort(float[ ] a, int inicio, int fin)
static void sort(int[ ] a, int inicio, int fin)
static void sort(Object[ ] a, int inicio, int fin)

Ordena ascendentemente de inicio a fin el


arreglo especificado.

Producto de Aprendizaje 5:
1.

Elabore un programa en Java que declare y cargue una arreglos con 1000
elementos enteros de forma aleatoria (los valores deben de estar entre 100 y 999),
ordnelo ascendentemente mediante el mtodo de la burbuja y seleccin,
contabilizando el nmero de movimientos por cada mtodo y presente los resultados
y determine que mtodo es mejor en base al menor nmero de movimientos.
Mtodo de la Burbuja: 99999 movimientos
Mtodo Seleccin: 99999 movimientos
El mejor mtodo de ordenacin fue XXXXXX debido a que tuvo menor nmero de
movimientos.

2.

Elabore un programa que lea los nombres y tres calificaciones de los alumnos de la
materia Programacin Orientada a Objetos (20 Alumnos). Para cada alumno calcule
el promedio, el promedio general de la materia e imprima en pantalla el nombre,
calificaciones, promedio de todos los alumnos y al final despliegue cuantos
aprobaron, reprobaron y el promedio general.

Nombre
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx

Aprobados: 99
Reprobados: 99
Promedio general: 99

Cal 1
99
99
99
99
99

Cal 2
99
99
99
99
99

Cal 3
99
99
99
99
99

Promedio
99
66
77
88
55

3.

El cuadro mgico.
Un cuadrado mgico es una matriz cuadrada con un nmero impar de renglones y
columnas. En dicha matriz, los nmeros de cada rengln, de cada columna y de
cada una de las diagonales, suman el mismo valor. Por ejemplo:
6
7
2

1
5
9

8
3
4

Note que los nmeros de todos los renglones, columnas y diagonales suman 15.
Una tcnica a travs de la cual se puede generar un cuadrado mgico es la
siguiente:
a) Se comienza asignando un valor de 1 al elemento central de la primera fila.
b) A continuacin se escriben los valores sucesivos (2,3, etc.) desplazndose
desde la posicin actual una fila hacia arriba y una columna hacia la
izquierda. Estos cambios se realizan tratando a la matriz como si fuera
circular, de forma que moverse una posicin hacia arriba desde la fila
superior lleva a la inferior, y moverse una posicin hacia la izquierda desde
la primera columna conduce a la ltima.
c) Si la nueva posicin ya est ocupada, en lugar de desplazarse hacia arriba
y a la izquierda, se mover slo una posicin hacia abajo.
Escriba un programa que muestre un cuadro mgico de dimensin n, donde n
puede estar entre los valores 3, 5, 7 y 9.
4.

Elabore un programa para controlar los asientos de un teatro el cual consta de tres
niveles, cada nivel tiene 50 filas y cada fila tiene 35 butacas. Debe de controlar si la
butaca est ocupada o disponible.

6. Archivos
El almacenar datos en variables o arreglos es temporal; los datos se pierden cuando una
variable local queda fuera de alance o cuando el programa termina su ejecucin. Los
archivos son utilizados para la retencin a largo plazo de grandes cantidades de datos.
Los datos almacenados en archivo existen ms all de la duracin de un programa. Los
archivos se almacenan en memoria secundaria (discos magnticos, discos pticos, USB,
etc.).
Un flujo (stream) es una abstraccin que se refiere a un flujo o corriente de datos que
fluye entre un origen o fuente hacia un destino. Entre el origen y el destino debe de existir
una conexin o canal por donde circulen los datos. Al abrir un archivo se crean
automticamente tres objetos flujo o canales. Estos objetos estn definidos en la clase
System y son:
System.in
System.out
System.err

Objeto de entrada estndar; permite la entrada desde teclado.


Objeto de salida estndar, permite la salida de datos a pantalla.
Objeto de salida a errores estndar, enva los errores a pantalla.

Estos tres objetos se crean al comenzar la ejecucin de un programa y sirven para


administrar la secuencia de caracteres en modo texto.
En Java, un archivo es, un flujo externo o secuencia de bytes almacenada en un
dispositivo externo (generalmente disco). Si el archivo se abre de lectura o escritura el
flujo ser de entrada o salida, respectivamente. El paquete java.io agrupa el conjunto de
clases para el manejo de entrada y salida; siempre que vaya a procesar un archivo se
tiene que utilizar este paquete, por lo que debe importarlo.
Los flujos de datos se clasificar en flujos de entrada (InputStream) y flujos de salida
(OutputStream). Por ello Java declara dos clases que derivan directamente de la clase
Object: InputStream y OutputStream. Ambas son clases abstractas que declaran mtodos
que deben redefinirse en sus clases derivadas. Adems InputStream es la clase base de
todas las clases definidas para stream de entrada, y OutputStream es la clase base de
todas las clases de stream de salida.

InputStream
FileInputStream
ByteArrayInputStream
PipeInputStream
SequenceInputStream
StringBufferInputStream
FilterInputStream

OutputStream
FileOutputStream
ByteArrayOutputStream
PipeOutputStream
FilterOutputStream

6.1. Definicin de Archivos de texto y archivos binarios.


El elemento ms pequeo de almacenamiento es un bit (binary digit/dgito binario), que
est representado por un 0 (cero) o un 1 (uno). Las computadoras procesan los datos en
forma binaria y al formar conjunto de bit representa un carcter, los caracteres de Java
son caracteres Unicode, compuestos por dos bytes, cada byte est compuesto por ocho

bits. As como los caracteres estn formados por bits, los campos estn formados por un
conjunto de caracteres y por lo general un conjunto de campos forman un registro.

Julia

Julia

Sandra

Ruz

Roma # 100

Tomas

Prez

Sol # 120

Julia

Ramos

Nayarit # 320

Ramiro

Esparza

Pera # 240

Ramos

Archivo

Nayarit # 320 Registro

Campo

01001010 Byte (Carcter ASCII de la J)

1 Bit

Ejemplo: Establezca el registro de una empresa para sus empleados.

Archivo de texto: Un archivo de texto o archivo de texto simple es un archivo


informtico compuesto nicamente por texto sin formato, slo caracteres, lo que lo hace
tambin legible por humanos. En texto que contienen estos archivos carecen de
propiedades es decir no tienen negritas, subrayado, cursiva, tamao, tipo de letra, etc.,
tambin es llamada archivo de texto plano, este trmino proviene de la traduccin literal
en ingles de Plain Text.
Archivo binario:
Un archivo binario es un archivo informtico que contiene
informacin de cualquier tipo codificada en binario para el propsito de almacenamiento y
procesamiento mediante una computadora. Por ejemplo los archivos informticos que
almacenan texto formateado o fotografas, as como los archivos ejecutables que
contienen programas.
Operaciones bsicas en archivos texto y binario.
Las operaciones bsicas con archivos son:
Creacin
Apertura
Lectura
Escritura
Recorrido
Cierre

Con la clase FileOutputStream se pueden escribir bytes en un flujo de salida asociado a


un archivo.
Mtodos

Descripcin

FileOutputStream(String nombre) throws


IOException

Crea un Objeto FileOutputStream que


escribe el archivo con el nombre
especificado.

FileOutputStream(File nombre) throws


IOException

Crea un Objeto FileOutputStream que


escribe el archivo administrado por el
Objeto File especificado.

FileOutputStream(String nombre, boolean


sw) throws IOException

Crea un Objeto FileOutputStream que


escribe el archivo con el nombre
especificado. En caso de que sw = true los
bytes se agregan al final del archivo.

FileOutputStream(File nombre, boolean sw)


throws IOException

Crea un Objeto FileOutputStream que


escribe el archivo administrado por el
Objeto File especificado. En caso de que
sw = true los bytes se agregan al final del
archivo.

FileOutputStream(FileDescriptor nombre)
throws IOException

Crea un Objeto FileOutputStream que


escribe el archivo referido por el objeto
FileDescriptor especificado.

void close() throws IOException

Cierra el archivo.

void write() throws IOException

Escribe un solo byte en el flujo del archivo.

void write(byte b[]) throws IOException

Escribe todos los bytes de b en el flujo del


archivo.

void write(byte b[], int pos, int len) throws


IOException

Escribe len bytes en el flujo del archivo


comenzando de la posicin pos dentro de
b.

Ejercicio 6.1: El siguiente programa solicita el nombre de un archivo, posteriormente se


teclean varias lneas, las cuales se agregan a el archivo y hasta que se teclea la palabra
fin termina la ejecucin.

import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio_6_1 {
public static void main( String args[] ) {
String nombreArchivo, linea;
nombreArchivo = JOptionPane.showInputDialog(
"Dame el nombre del archivo:" );
try {
FileOutputStream archivoLogico = archivoLogico =
new FileOutputStream(nombreArchivo);
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir" );
while (!linea.equals("fin")) {
archivoLogico.write(linea.getBytes());
archivoLogico.write( (byte) '\n');
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir"
);
}
archivoLogico.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo" +
e );
}
System.exit( 0 );
}
}

Abrir.
La clase FileInputStream se utiliza para leer bytes desde un archivo. Proporciona
operaciones bsicas para leer una byte o una secuencia de bytes.

Mtodos
FileInputStream(String nombre) throws
FileNotFoundException

Mtodos

Descripcin
Crea un Objeto FileInputStream que lee el
archivo con el nombre especificado.

Descripcin

FileInputStream(File nombre) throws


FileNotFoundException

Crea un Objeto FileInputStream que lee el


archivo fsico administrado por el objeto
File especificado.

FileInputStream(FileDescriptor nombre)
throws FileNotFoundException

Crea un Objeto FileInputStream que lee el


archivo referido por el objeto FileDescriptor
especificado.

int available() throws IOException

Regresa el nmero de bytes que pueden


ser ledos en el archivo.

void close() throws IOException

Cierra el archivo.

int read() throws IOException

Lee y regresa un solo byte del flujo.


Regresa el valor -1 si llega al final del
archivo.

int read(byte b[]) throws IOException

Lee una secuencia de bytes y los almacena


en el arreglo b. Regresa -1 si llega al final
del archivo.

int read(byte b[], int pos, int len) throws


IOException

Lee como mximo len bytes y los coloca en


la posicin pos dentro de b. Regresa -1 si
llega al final del archivo.

long skip(long n) throws IOException

Salta n bytes del flujo.

Ejercicio 6.2: El siguiente programa solicita el nombre de un archivo texto y despliega en


pantalla su contenido.

import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio_6_2 {
public static void main( String args[]) {
int c;
String nombreArchivo, salida = "";
nombreArchivo = JOptionPane.showInputDialog(
"Dame el nombre del archivo:");
try {
FileInputStream archivoLogico =
new FileInputStream(nombreArchivo);
while ((c = archivoLogico.read()) != -1)
salida += (char) c;
JOptionPane.showMessageDialog( null, salida,
"Contenido del archivo:" +
nombreArchivo, JOptionPane.PLAIN_MESSAGE);
archivoLogico.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo"
+ e );
}
System.exit( 0 );
}
}

Cerrar.
Cada vez que habr un archivo tendr que cerrarlo por medio del mtodo close() de la
siguiente forma:
nombreDeArchivo.close();

Lectura y escritura.
Ejercicio 6.3: Ahora modificaremos el Ejercicio 8.1 para que aada texto al final del
archivo y muestre su contenido.

import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio_6_3 {
public static void main( String args[]) {
String nombreArchivo, linea, salida = "";
int c;
nombreArchivo = JOptionPane.showInputDialog(
"Dame el nombre del archivo:");
try {
FileOutputStream archivoSalida =
new FileOutputStream(nombreArchivo, true);
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir");
while (!linea.equals("fin")) {
linea += "\n";
archivoSalida.write(linea.getBytes());
linea = JOptionPane.showInputDialog(
"Tecleea una Linea o \"fin\" para salir");
}
archivoSalida.close();
FileInputStream archivoEntrada =
new FileInputStream(nombreArchivo);
while ((c = archivoEntrada.read()) != -1)
salida += (char) c;
JOptionPane.showMessageDialog( null, salida,
"Contenido del archivo:" + nombreArchivo,
JOptionPane.PLAIN_MESSAGE);
archivoEntrada.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo"
+ e );
}
System.exit( 0 );
}
}

6.2. Operaciones bsicas en archivos texto y binario.


Archivo binario
Ejercicio 6.4: El siguiente programa crear un archivo binario, el cual almacenara
registros de Estudiantes, para ello se declara una clase llamada Registro la cual contiene
los campos de Nmero de control, Nombre del estudiante, tres calificaciones y el
promedio. En la clase principal solicita el nombre del archivo, instanciando una variable
tipo FileOutputStream y posteriormente instancia un objeto tipo DataOutputStream para
crear un flujo de salida de datos. Utiliza dos mtodos uno para leer los datos y otro para
escribir los datos en el archivos.
import java.io.*;
import javax.swing.JOptionPane;
class Registro {
public String nControl;
public String nombre;
public byte
cal1;
public byte
cal2;
public byte
cal3;
public byte
promedio;
}
public class Ejercicio_6_4 {
public static void main( String args[] ) {
int opcion = 0;
Object[] options = { "Si", "No" };
Registro reg = new Registro();
String nombreArchivo;
nombreArchivo = JOptionPane.showInputDialog
("Dame el nombre del archivo:");
try {
FileOutputStream archivo =
new FileOutputStream(nombreArchivo);
DataOutputStream salida = new DataOutputStream(archivo);
while (opcion == 0) {
leerDatos(reg);
escribirDatos(salida, reg);
opcion = JOptionPane.showOptionDialog(null,
"Dar de alta otro Alumno", "Otra alta",

JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, options, options[0]);
}
archivo.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog( null,"Error en el flujo" +
e );
}
System.exit( 0 );
}
static void leerDatos(Registro r) {
r.nControl
=
JOptionPane.showInputDialog("No.
de
control:");
r.nombre = JOptionPane.showInputDialog("Nombre:");
r.cal1
=
Byte.parseByte(JOptionPane.showInputDialog("Calificacin 1:"));
r.cal2
=
Byte.parseByte(JOptionPane.showInputDialog("Calificacin 2:"));
r.cal3
=
Byte.parseByte(JOptionPane.showInputDialog("Calificacin 3:"));
r.promedio = (byte) ((r.cal1 + r.cal2 + r.cal3)/3);
}
static void escribirDatos(DataOutputStream f, Registro r) {
try {
f.writeUTF(r.nControl);
f.writeUTF(r.nombre);
f.writeByte(r.cal1);
f.writeByte(r.cal2);
f.writeByte(r.cal3);
f.writeByte(r.promedio);
}
catch (IOException io) {
JOptionPane.showMessageDialog(
null,"Error
escritura" + io );
}
}
}

de

Recorrer.
Al recorrer un archivo tipo texto, la salida se establece cuando se lee un dato -1. En el
caso de los archivos binarios se establece por medio de una excepcin, al ocurrir la
excepcin se establece un falso para dejar de realizar el recorrido, como se muestra en el
siguiente ejercicio.
Ejercicio 6.5: El siguiente programa muestra el contenido del archivo binario creado por
medio del Ejercicio 6.4. Dado que el archivo es binario, se tiene que declarar la estructura
del Registro. En la clase principal solicita el nombre del archivo, instanciando una variable
tipo FileInputStream y posteriormente instancia un objeto tipo DataInputStream para crear
un flujo de entrada de datos.

import java.io.*;
import javax.swing.JOptionPane;
class Registro {
public String
public String
public byte
public byte
public byte
public byte
}

nControl;
nombre;
cal1;
cal2;
cal3;
promedio;

public class Ejercicio_6_5 {


public static void main( String args[] ) {
String salida = new String("");
Registro reg = new Registro();
String nombreArchivo;
boolean otro = true;
nombreArchivo = JOptionPane.showInputDialog
("Dame el nombre del archivo:");
try {
FileInputStream archivo =
new FileInputStream(nombreArchivo);
DataInputStream entrada = new DataInputStream(archivo);
while (otro) {
try {
reg.nControl = entrada.readUTF();
reg.nombre
= entrada.readUTF();
reg.cal1
= entrada.readByte();
reg.cal2
= entrada.readByte();
reg.cal3
= entrada.readByte();
reg.promedio = entrada.readByte();
salida += "No. Control:" + reg.nControl + "
" +
"Nombre:"
+ reg.nombre
+ "
" +
"Cal 1:"
+ reg.cal1
+ "
" +
"Cal 2:"
+ reg.cal2
+ "
" +
"Cal 3:"
+ reg.cal3
+ "
" +
"Promedio:"
+ reg.promedio +
"\n";
}
catch (IOException io) {
JOptionPane.showMessageDialog( null,salida );
otro = false;
}
}
archivo.close();
}

catch (IOException e) {
JOptionPane.showMessageDialog(
archivo: "

null,"Error

al

abrir

el

+ nombreArchivo );
}
System.exit( 0 );
}
}

Aplicaciones
Encriptacin/Cifrado.- Una manera de codificar la informacin de un Archivo.
El cifrado es un mtodo que permite aumentar la seguridad de un mensaje o de un
archivo mediante la codificacin del contenido, de manera que slo pueda leerlo la
persona que cuente con la clave de cifrado adecuada para descodificarlo.
Mtodos y Tcnicas de Cifrado.
Cifrado de sustitucin
El cifrado de sustitucin consiste en reemplazar una o ms entidades (generalmente
letras) de un mensaje por una o ms entidades diferentes.
Por ejemplo: Existe un juego llamado encriptacin del murcilago. La palabra murcilago
es una palabra que contiene las 5 vocales y la tcnica de encriptacin consiste en
enumerar las vocales de esta palabra por lo que la vocal u le corresponde el nmero 1,
la vocal i el 2, la vocal e el 3, la letra a el 4 y la vocal o el 5. Para encriptar el texto o
archivo se sustituye cada vocal por el valor numrico que le corresponde:
Ejemplo de encriptacin del murcilago.
3j3mpl5 d3 3ncr2pt4c25n d3l m1rc23l4g5.
Otra tcnica de encriptacin se llama Sucesor, la cual consiste en cambiar cada letra del
texto o archivo por la letra que le sucede, es decir si se tiene la letra a se cambiar por la
letra b que es la que le sigue, as sucesivamente hasta que se termine el texto:

Este es un ejemplo de encriptacin en base a sucesor.


Ftuf!ft!vo!fkfnqmp!ef!fodsjqubdjo!fo!cbtf!b!tvdftps/
Existen tambin su contraparte llamada tcnica de encriptado predecesor, la cual consiste
en cambiar cada letra del texto o archivo por la letra que le precede, es decir si se tiene la
letra b se cambia por la letra a, as sucesivamente hasta que se termina el texto:
Este es un ejemplo de encriptacin en base a predecesor.
Drsddrtmdidlokncddmbqhos`bhmdma`rd`oqdcdbdrnqDe estas dos ltimas tcnicas se puede hacer una combinacin, la cual es llamada
sucesor/predecesor, la cual consiste en cambiar la primer letra en base a suceror y la
siguiente cambiarle por su predecesor, as sucesivamente hasta que se termine el texto:
Este es un ejemplo de encriptacin en base a sucesor/predecesor.
Dtsffr!tofiflqkped!dobshqsbbjofm!abrfbttddtns.qqfcfbfrpq/
6.3. Manejo de excepciones en archivos.
Producto de Aprendizaje 6:
1. Elabore un programa que lea de teclado oraciones las encripte en base a
sucesor/predecesor y las guarde en un archivo.
2. Elabore un programa que lea de un archivo las oraciones encriptadas en base a
sucesor/predecesor y las muestre en pantalla desencriptadas.
3. Elabore un programa que se le manden dos nombres de archivo y el contenido del
primero archivo lo agregue al final del segundo archivo.
4. Del programa del Ejercicio 6.4, elabore un programa en java que solicite el No de
Control y busque el registro en el archivo indicado y si lo encuentra despliegue la
informacin en caso contrario mostrar Registro no localizado.

Potrebbero piacerti anche