Professional Documents
Culture Documents
Presentacin..3
Modulo A
Semana 1: Arreglos Lineales y Matrices ...4
Semana 2: Ordenamiento de datos y Bsqueda de Datos..28
Semana 3: Programacin Orientada a Objetos 38
Semana 4: Manejo de la Clase String 65
Semana 5: Manejo de Archivos .....74
Semana 6: Clases Primitivas .92
Semana 7: Mtodos propios 109
Semana 8: Ejercicios de Aplicacin115
Semana 9: Manejo de Capas en una aplicacin en escritorio121
Bibliografa:
TcnicadeProgramacinOrientadaaObjetos 3
PRESENTACIN
Esta gua didctica es un material de ayuda institucional, perteneciente a las
especialidades de computacin, Ingeniera de Software e Ingeniera de Redes y
Comunicaciones tiene por finalidad proporcionar los conocimientos de la
programacin orientada a Objetos a los estudiantes del segundo ciclo de estudios.
La Organizacin SISE, lder en la enseanza tecnolgica a nivel superior, promueve
la elaboracin de materiales educativos, en concordancia a las exigencias de las
tecnologas de estos tiempos, que permiten la creacin de nuevas herramientas de
aprendizaje con el objetivo de facilitar el acceso de los estudiantes a la educacin en
el marco del desarrollo tecnolgico de la informtica u de las telecomunicaciones.
Esta gua se divide en 2 mdulos y cada una de ellas en 9 semanas. Permite conocer
las herramientas indispensables para la elaboracin de aplicaciones con el uso de la
tcnica O.O. Se inicia con el uso de tcnica en manejo de datos en memoria y en el
manejo de capas donde estas tcnicas bsicas se necesitan para dar solucin a una
determinada proposicin o problema.
En este proceso el alumno aprender instrucciones que le permitirn evaluar
expresiones para luego procesar un conjunto de sentencias. Tambin aprender el
manejo de una aplicacin a nivel de contenedores, de la misma forma el manejo del
lenguaje de programacin orientada a objetos.
La implementacin y uso de Capas dentro de la aplicacin en escritorio permitirn que
el alumno aplique la programacin Orientada a objetos.
Todas estas herramientas darn un soporte solido al alumno para aprender a
programar en cualquier lenguaje de programacin Orientada a Objetos(J AVA, .NET,
Visual C,etc).
Este material en su primera edicin, servir para ayudar a nuestros estudiantes
SISESINOS a tener una formacin solida para resolver problemas.
Tcni
Arre
Cont
-
-
-
-
-
-
-
-
_____
Un a
conse
eleme
cual e
icadeProgra
eglos
tenidos
Concepto d
Acceso Se
Arreglos co
Uso del J L
Definicin d
Operacione
Uso de
getSelected
___________
arreglo es u
ecutivas de
ento de un a
especifica la
Los arr
Unidimen
Bidimens
Multidime
amacinOrie
de Arreglos :
cuencial y A
on uso de Es
ist (defaultLis
de matrices:
es con Matriz
el J Table
dColum(), ch
___________
una colecci
memoria y
arreglo se d
posicin rel
reglos pue
nsionales (ve
sionales (mat
ensionales (t
entadaaObj
Declaracin
Aleatorio. Agr
structuras Co
stModel)
Acceso a el
z
e(DefatultTab
hangeSelect
___________
n de datos
y reciben un
eber utiliza
ativa en que
eden ser:
ectores).
trices, tablas
tres dimensio
jetos
, asignacin
regar Datos d
ondicionales:
ementos de
bleModel),
ion(), addRo
___________
del mismo
n nombre c
ar el nombre
se encuentr
s).
ones o ms).
e inicializac
de Arreglo.
: Uso de Con
una matriz:
(setEleme
ow(),etc).
___________
ARRE
tipo, que s
omn. Para
e del arreglo
ra el element
.
in de memo
ntadores y A
Asignacin d
entAt(), g
___________
EGLOS
se almacena
a referirse a
acompaad
to.
oria a un arre
Acumuladores
de Datos:
getSelectedR
___________
LINEAL
an en posic
a un determ
do de un nd
4
eglo
s.
Row(),
_____
LES
ciones
minado
dice el
TcnicadeProgramacinOrientadaaObjetos 5
Declarar de un arreglo:
Con esto diremos que se est definiendo un atributo de tipo arreglo y estamos
determinando el tipo de dato y el tamao de registros.
Ejemplos:
Entero: Numeros[10]
Decimal: talla [5]
Carcter nombres [8]
Asignacin de datos hacia a un arreglo:
Esta instruccin asigna el valor asociado de la expresin a la posicin ndice del
arreglo nombre_variable. El ndice debe ser una expresin del tipo entero en el rango
[0, longitud-1].
Ejemplos: Estableciendo Datos a los Arreglos
Numero[2]=152 talla[4]=170.5 nombre[6]=Vernica
Numero[5]=115 talla[0]=168.52 nombre[3]=William
Numero[10]=652 talla[2]=102.62 nombre[1]=Angie
Numero[0]=52 talla[1]=85.62 nombre[8]=Sebastian
Los datos establecidos en Memoria serian as:
ArregloNumero
ndice 0 1 2 3 4 5 6 7 8 9 10
Valores 52 0 152 0 0 115 0 0 0 0 652
ArregloTalla
ndice 0 1 2 3 4 5
Valores
168.52 85.62 102.6 0 170.5 0
Arreglo
Nombres
ndice 0 1 2 3 4 5 6 7 8
Valores null Angie null William null null Vernica null Sebastin
<tipo de dato>: nombre_variable [Tamao]
nombre_variable[ndice] =<expresin del tipo>
TcnicadeProgramacinOrientadaaObjetos 6
Nota: las posiciones que no se le asignaron datos quedaran vacios (0) en el
caso de ser numero y null en el caso de carcter.
Acceso al contenido de un arreglo:
Para poder acceder al contenido:
a. Mostrar: Obtener el dato de acuerdo al ndice establecido, para ello se deber mostrar
dicho dato, lo cual se podr utilizar una variable o mostrarlo directamente.Aqu tambin
vale la aclaracin de que el ndice debe estar dentro del rango de definicin del arreglo.
Variable=nombre_Arreglo[ndice]
Mostar(Variable) o Mostar(nombre_Arrgelo[indice)
Ejemplo:
X=nombre[1]
Mostrar(X) el resultado ser Angie
_________________________________________________________
Mostrar(nombre[8]) el resultado ser Sebastin
b. Lectura: se podr ingresar datos al arreglo en forma contigua de acuerdo al ndice. Es
por ello que se usara a una estructura iterativa que puede ser Mientras(while), Desde
(do) o Repetir(do..while).
Leer(Arreglo[indice])
Nota Para que esta lectura se repita hasta el total de tamao del arreglo se deber de
usar a una estructura Iterativa.
Un Ejemplo con l Desde
desde(x=0 hasta 10-1)
leer(Arreglo[x])
mostrar(Arreglo[x)
fin_desde
TcnicadeProgramacinOrientadaaObjetos 7
TcnicadeProgramacinOrientadaaObjetos 8
Ejemplos:
1. Crear un Arreglo que permita ingresar 10 Apellidos.
Carcter: Apellidos[10]
desde(i =0 hasta 10-1)
leer(Apellidos[i] )
mostrar (Apellidos [i] )
fin_desde
2. Crear un Arreglo que permita ingresar 15 promedios del aula 307 del curso de
fundamentos de programacin
decimal: Promedios[15]
desde(i =0 hasta 15-1)
leer(Promedios[i] )
mostrar (Promedios [i] )
fin_desde
3. Crear un Arreglo que permita ingresar 20 Nombres de Institutos y Zona de
ubicacin.
Constante N=20
Carcter: Institutos[N]
Carcter: Zonas[N]
desde(i =0 hasta N-1)
leer(Institutos[i] )
leer(Zonas[i] )
mostrar(Institutos[i])
mostrar (Zonas[i] )
fin_desde
TcnicadeProgramacinOrientadaaObjetos 9
4. Crear un Arreglo que ingrese 50 datos numricos enteros.
Constante N=50
entero: Numeros[N]
desde(i =0 hasta N-1)
leer(Numeros[i] )
mostrar(Numeros[i])
fin_desde
5. Crear un Arreglo que ingrese 10 promedios y mostrar cuantos estn aprobados y
cuantos desaprobados.
Constante N=10
decimal: Promedios[N]
desde(i =0 hasta N-1)
leer(Promedios[i] )
mostrar (Promedios [i] )
si(Promedios[i]>=10.5)
ca=ca+1
sino
cd=cd+1
fin_si
fin_desde
mostrar(Total de Aprobados: +ca)
mostrar(Total de Desaprobados: +cd)
TcnicadeProgramacinOrientadaaObjetos 10
6. Crear un Arreglo que ingrese 15 reas y sus respectitos Sueldos y mostrar cuantos
estn son del rea Sistemas, Contabilidad, y cuantos sueldos superan al sueldo
mnimo y cuntos de ellos ganan entre 1000 y 2500.
Constante N=15
entero:Sueldo[N]
Carcter:Area[N]
desde(i =0 hasta N-1)
leer(Sueldo[i] , Area[i] )
mostrar (Sueldo[i] , Area[i] )
si(Area[i]=Sistema)
cs=cs+1
fin_si
si(Area[i]=Contabilidad)
cc=cc+1
fin_si
si(Sueldo[i]>650)
csum=csum+1
fin_si
si(Sueldo[i]>=1000 y Sueldo[i]<=2500)
cr=cr+1
fin_si
fin_desde
mostrar(Total del rea de Sistemas: +cs)
mostrar(Total del rea de Contabilidad: +cc)
mostrar(Total de Empleados que ganan ms que el sueldo mnimo: +csum)
mostrar(Total de Empleados que ganan entre 1000 y 2500: +cr)
TcnicadeProgramacinOrientadaaObjetos 11
TcnicadeProgramacinOrientadaaObjetos 12
Otro Ejemplo:
String [ ] Coordinadores={Vernica Escobar, Vctor Snchez,Rogelio Tello,Carlos Monge};
O Tambin:
Coordinadores [0] =" Vernica Escobar ";
Coordinadores [1] =" Vctor Snchez ";
Coordinadores [2] =" Rogelio Tello ";
Coordinadores [3] ="Carlos Monge";
Casos Prcticos
1. Ejemplo ingresando valores aleatorios al arreglo:
private void btnAgregar_actionPerformed(ActionEvent e) {
modLstf.clear();
int Numeros[]=new int[10];
for( int i=0; i <10; i++){
Numeros[i] =(int)(Math.random()*100)+1;
modLstf.addElement((i+1)+".- "+Numeros[i] );
}
}
Seusaraelrandompara
poderestablecernmeros
aleatoriosenestecaso
serdesde1al100.
TcnicadeProgramacinOrientadaaObjetos 13
2. Almacenar los votos obtenidos por los 20 candidatos. Estos son ingresados por el usuario.
private void btnAgregar_actionPerformed(ActionEvent e) {
int votos[]=new int[20]; //Declara el Arreglo en forma Local
modLstf.clear(); //Limpia todo el contenido de la lista
for( int i=0; i <20; i++){
votos[i] =Integer.parseInt(J OptionPane.showInputDialog("Ingresar Cantidad de
Votos - "+(i+1)));
modLstf.addElement((i+1)+".- "+votos[i] );
}
}
TcnicadeProgramacinOrientadaaObjetos 14
3. Se tiene una lista llamado Amigos donde son Vernica E., Gelnda D., Victor S., Rogelio T.,
Waldir C., Eduardo A., Carlos M., Henrry Q., Miguel F., Manue T, J uan C.. Se necesita
almacenarlo en un Arreglo y mostrarlo.
private void btnAgregar_actionPerformed(ActionEvent e) {
String Amigos[]={"Vernica E.","Glenda D.","Victor S.","Waldir C.","Rogelio R.",
"Eduardo A.","Carlos M.","Henrry Q.","Miguel F.","Manuel T.","J uan C."};
for( int i=0; i <Amigos.length; i++){
modLstf.addElement((i+1)+".- "+Amigos[i] );
}
}
4. Se pide crear una lista que almacene 10 registros: estos datos sern Apellidos, edades y
distritos del aula 307.
private void btnAgregar_actionPerformed(ActionEvent e) {
final int t=10;
int edades[]=new int[t];
String apellidos[]=new String[t];
String distritos[]=new String[t];
for( int i=0; i < t; i++ ){
apellidos[i] =J OptionPane.showInputDialog("Registro nro. "+(i+1)+"\n"+"Ingresar Apellidos:");
Estemtodolength
devuelveunvalor
numricoentero
Ellengthseusaparavereltotalde
elementosquetieneelarreglo.
TcnicadeProgramacinOrientadaaObjetos 15
TcnicadeProgramacinOrientadaaObjetos 16
private void btnAgregar_actionPerformed(ActionEvent e) {
for( int i=0; i <t; i++){
apellidos[i] =J OptionPane.showInputDialog("Registro nro. "+(i+1)+"\n"+"Ingresar Apellidos:");
edades[i] =Integer.parseInt(J OptionPane.showInputDialog("Ingresar Edades"));
distritos[i] =J OptionPane.showInputDialog("Ingresar Distrito:");
modLstf.addElement((i+1)+".- "+apellidos[i] );
modLstE.addElement(edades[i]);
ModLstD.addElement(distritos[i]);
}
private void btnReporte_actionPerformed(ActionEvent e) {
int cc=0,cmay=0,cme=0;
for( int i=0; i <t; i++){
if(distritos[i].equalsIgnoreCase("Surco") | distritos[i].equalsIgnoreCase("Chorrillos"))
cc=cc+1;
if(edades[i]>31)
cmay=cmay+1;
else
cme=cme+1;
}
txtsalida.append("* Total del Distrito de "+"\n"+"Surco o de Chorrillos son: "+cc+"\n");
txtsalida.append("* Total de Mayores de 31 Aos son: "+cmay+"\n");
txtsalida.append("* Total de Menores o iguales a 31 Aos son: "+cme+"\n");
}
TcnicadeProgramacinOrientadaaObjetos 17
TcnicadeProgramacinOrientadaaObjetos 18
0 1 2
0
1
2
3
0 1 2
0
1
2
3
4
0 1 2 3 4
0
1
ARREGLOS BIDIMENSIONALES
MATRICES
La utilizacin de matrices constituye actualmente una parte esencial de los lenguajes de
programacin, ya que la mayora de los datos se introducen en los ordenadores como tablas
organizadas en filas y columnas: hojas de clculo, bases de datos, Archivos, etc.
Se llama matriz de orden mn a todo conjunto rectangular de elementos Matriz(m)(n)
dispuestos en m lneas horizontales (filas) y n verticales (columnas) de la forma:
Definir una matriz
<tipo de dato>: nombre_variable[Filas][Columnas]
Ejemplo:
a) Entero: Numeros[5][3]
Cuando se define este espacio en memoria para las matrices establece este espacio.
b) Caracter: Letras[2][5]
Filas
Columnas
Recordemosquelos
ArreglosoMatrices
empiezandesdela
posicincerotantopara
lasfilasycolumnas.
TcnicadeProgramacinOrientadaaObjetos 19
TcnicadeProgramacinOrientadaaObjetos 20
b. Lectura: se podr ingresar datos al arreglo en forma contigua de acuerdo al ndice. Es
por ello que se usara a una estructura iterativa anidad que puede ser Mientras(while),
Desde (do) o Repetir(do..while).
Leer(Matriz[ndiceFila] [ndiceColumna])
Nota: Para que esta lectura se repita hasta el total de tamao del arreglo se deber de
usar a una estructura Iterativa anidada que permitir realizar el recorrido de filas y de las
columnas o viceversa(Columnas o Filas).
Llenar datos a la matriz:
Ejemplo. Recorriendo la Matriz dndole nuevos valores:
desde(f=0 hasta Filas-1)
desde(c =0 hasta Columnas-1)
leer( numeros[f][c] )
fin_desde
fin_desde
4. Manipular la informacin guardada en la Matriz. Para esto es necesario recorrer dicha
estructura y se puede hacer de la siguiente manera.
desde(f =0 hasta Filas-1)
desde(c =0 hasta Columnas-1)
mostrar( numeros[f][c] )
fin_desde
fin_desde
Tambin se puede leer y a la vez escribir los datos ingresados al arreglo
desde(f =0 hasta Filas-1)
desde(c =0 hasta Columnas-1)
leer( numeros[f][c] )
mostrar( numeros[f][c] )
fin_desde
fin_desde
TcnicadeProgramacinOrientadaaObjetos 21
TcnicadeProgramacinOrientadaaObjetos 22
TcnicadeProgramacinOrientadaaObjetos 23
TcnicadeProgramacinOrientadaaObjetos 24
TcnicadeProgramacinOrientadaaObjetos 25
Ejemplo 02:
Mostrar los resultados de las tablas de multiplicar hasta el 10.
Realizar el procedimiento de creacin y enlace del J table.
private void btnAgregar_actionPerformed(ActionEvent e) {
final int MAXT =11;
int [] [] tabla =new int [MAXT][MAXT];
//Se inicializan los valores de tabla
for (int i =0; i <MAXT; i++)
for (int j =0; j <MAXT; j++)
tabla [i][j] =i*j;
//Se imprime tabla
//se muestran los resultados que tenga la matriz
for (int i =0; i <MAXT; i++) {
for (int j =0; j <MAXT; j++)
modTbDatos.setValueAt(tabla [i][j],i,j);
}
}
Ejemplo 03:
Crear 2 vectores Apellidos y Edades que almacenen 15 registros y debern ser
presentados en el J Table por columnas.
private void btnAgregar_actionPerformed(ActionEvent e) {
final int filas=15;
int Edad[]=new int[filas];
String apellidos[]=new String[filas];
for (int i =0; i <filas; i++){
apellidos[i]=J OptionPane.showInputDialog("Ingresar Apellidos");
Edad[i]=Integer.parseInt(J OptionPane.showInputDialog("Ingresar Edad"));
modTbDatos.setValueAt(apellidos[i],i,0);
TcnicadeProgramacinOrientadaaObjetos 26
modTbDatos.setValueAt(Edad[i],i,1);
}
}
TcnicadeProgramacinOrientadaaObjetos 27
TcnicadeProgramacinOrientadaaObjetos 28
Contenidos
- Definir Ordenamientos de Datos: Mtodo de Burbuja, Mtodo Shell.
- Definicin de Bsqueda: Tipos Bsqueda de Datos dentro de un Arreglo.
- Tipos de Bsquedas: Bsqueda Lineal - Bsqueda Binaria.
____________________________________________________________________________
Algoritmos de Ordenamiento
Ordenar es simplemente colocar informacin de una manera especial basndonos en un
criterio de ordenamiento.
Mtodos de ordenamientos.
Existen diferentes mtodos de ordenamiento entre ellas tenemos por Seleccin, Insercin,
Quick Sort, Burbuja, Shell, etc. Dentro de las cuales hablaremos de los mtodos:
El hecho de que la informacin est ordenada, nos sirve para poder encontrarla y accesarla de
manera ms eficiente ya que de lo contrario se tendra que hacer de manera secuencial.
A continuacin se describirn 4 grupos de algoritmos para ordenar informacin:
Algoritmos de insercin:
En este tipo de algoritmo los elementos que van a ser ordenados son considerados uno a la
vez. Cada elemento es INSERTADO en la posicin apropiada con respecto al resto de los
elementos ya ordenados.
Entre estos algoritmos se encuentran el de INSERCION DIRECTA, SHELL SORT, INSERCION
BINARIA y HASHING.
Algoritmos de intercambio:
En este tipo de algoritmos se toman los elementos de dos en dos, se comparan y se
INTERCAMBIAN si no estn en el orden adecuado. Este proceso se repite hasta que se ha
analizado todo el conjunto de elementos y ya no hay intercambios.
Entre estos algoritmos se encuentran el BURBUJ A y QUICK SORT.
Algoritmos de seleccin:
TcnicadeProgramacinOrientadaaObjetos 29
TcnicadeProgramacinOrientadaaObjetos 30
El mtodo se basa en tomar como salto N/2 (siendo N el nmero de elementos) y luego se va
reduciendo a la mitad en cada repeticin hasta que el salto o distancia vale 1.
Procedimiento Shell Sort;
Ejemplo:
Para el arreglo a =[6, 1, 5, 2, 3, 4, 0]
Tenemos el siguiente recorrido:
Recorrido Salto Lista Ordenada Intercambio
1 3 2,1,4,0,3,5,6 (6,2), (5,4), (6,0)
2 3 0,1,4,2,3,5,6 (2,0)
3 3 0,1,4,2,3,5,6 Ninguno
4 1 0,1,2,3,4,5,6 (4,2), (4,3)
5 1 0,1,2,3,4,5,6 Ninguno
Procedimiento SHELL(variables Vector:A; entero:n)
variables
entero: aux,i,int
logico: band
Incio
int=n+1;
Mientras (int>1)
int=1mod(int div 2)
band=true
Mientras (band=true )
band=false
i=1
Mientras ((i+int)<=n)
si(a[i] > a[i+int]) entonces
aux=a[i]
a[i]=a[i+int]
a[i+int]=aux
band=true
fin_si
i=i+1
Fin_Mientras
Fin_Mientras
Fin_Mientras
Fin
TcnicadeProgramacinOrientadaaObjetos 31
TcnicadeProgramacinOrientadaaObjetos 32
Bsqueda
Un algoritmo de bsqueda es aquel que est diseado para localizar un elemento concreto
dentro de una estructura de datos. Consiste en solucionar un problema de existencia o no de
un elemento determinado en un conjunto finito de elementos, es decir, si el elemento en
cuestin pertenece o no a dicho conjunto, adems de su localizacin dentro de ste.
Este problema puede reducirse a devolver la existencia de un nmero en un vector.
Bsqueda secuencial
Permite localizar el dato dentro del arreglo desde la posicin inicial hasta la posicin final, la
existencia se puede asegurar desde el momento que el elemento es localizado (pero no
podemos asegurar la no existencia hasta no haber analizado todos los elementos del arreglo).
Bsqueda binaria
Se utiliza cuando el vector en el que queremos determinar la existencia o no de un elemento
est ordenado, o puede estarlo, este algoritmo reduce el tiempo de bsqueda
considerablemente, ya que disminuye exponencialmente con el nmero de iteraciones.
Datos de Entrada:
vec: nombre de la coleccin de todos los datos
tam: tamao del vector
dato: elemento que se quiere buscar.
Variables
entero: pos
Inicio
leer(dato)
pos =0
Mientras(pos <tam)
Si (vec[pos]=dato) entonces
Devolver=verdadero
sino
pos =pos +1
fin_si
fin_Mientras
TcnicadeProgramacinOrientadaaObjetos 33
Ejemplos
Caso 01
Dentro de una lista de 10 nombres, verifique si el nombre ingresado existe o no.
Caso 02
Dentro de una lista de 25 distritos muestre si existe o no el distrito de Villa el Salvador.
Caso 03
Crear una Aplicacin donde permita llenar datos a los vectores Nombres, Apellidos Ao de
Nacimiento y edad. Permitir hasta 20 registros.
La edad se calcula de acuerdo al Ao de Nacimiento
El programa permitir :
o Ordenar por Apellido
o Buscar Datos por Nombres y decir cuntos Nombres son iguales.
public class FrmEjem01 extends JFrame {
final int filas=20;
String nom[]=new String[filas];
String ape[]=new String[filas];
int edad[]=new int[filas];
int anac[]=new int[filas];
Sedefineladimensiny
losnombresdelos
Arreglos
TcnicadeProgramacinOrientadaaObjetos 34
int Reg;
private void jbInit() throws Exception {
------------------------------------------------------
//llenando el combo con las fechas
for(int g=1970;g<=2010;++g)
cboAnac.addItem(g);
void LeerDatos(){
if(Reg<filas){
nom[Reg]=txtNom.getText();
ape[Reg]=txtApe.getText();
}
else
J OptionPane.showMessageDialog(null,"Ya no puede ingresar mas registros");
}
void llenarRegistros(){
modTbDatos.setValueAt((Reg+1),Reg,0);
modTbDatos.setValueAt(nom[Reg],Reg,1);
modTbDatos.setValueAt(ape[Reg],Reg,2);
modTbDatos.setValueAt(anac[Reg],Reg,3);
modTbDatos.setValueAt(edad[Reg],Reg,4);
++Reg;
}
private void btnAceptar_actionPerformed(ActionEvent e) {
LeerDatos();
llenarRegistros();
}
private void cboAnac_actionPerformed(ActionEvent e) {
anac[Reg]=Integer.parseInt(cboAnac.getSelectedItem().toString());
edad[Reg]=2010-anac[Reg];
lbledad.setText(""+edad[Reg]);
}
void OrdenarB(){
String tempA,tempN;
int tempAn,tempE;
for (int i =0; i <Reg - 1; i++) {
for (int j =0; j <Reg - 1; j++) {
if ((ape[j].compareTo(ape[j+1]))>0) {
tempA =ape[j];
ape[j] =ape[j+1];
ape[j+1] =tempA;
SedefineelContador
delRegistro
SeEstablecevalores
alCombo
PreguntandosielRegistroes
menoraltotaldeFilas.
LlenalosdatosalosArreglos
Muestralosdatosquetieneel
Arreglo
IncrementoelRegistropara
controlareltotaldedatos
ingresados.
Calculalaedadsegnelao
seleccionado.
OrdenamientoBurbuja.
PormediodelApellido
TcnicadeProgramacinOrientadaaObjetos 35
//
tempN =nom[j];
nom[j] =nom[j+1];
nom[j+1] =tempN;
//
tempAn =anac[j];
anac[j] =anac[j+1];
anac[j+1] =tempAn;
//
tempE =edad[j];
edad[j] =edad[j+1];
edad[j+1] =tempE;
}
}
}
// visualizar datos ordenados
modTbDatos.setRowCount(15);
for(int g=0;g<Reg;++g){
modTbDatos.setValueAt((g+1),g,0);
modTbDatos.setValueAt(nom[g],g,1);
modTbDatos.setValueAt(ape[g],g,2);
modTbDatos.setValueAt(anac[g],g,3);
modTbDatos.setValueAt(edad[g],g,4);
}
}
private void BtnOrdenart_actionPerformed(ActionEvent e) {
modTbDatos.setRowCount(0);
OrdenarB();
}
Elrestodelosvectorestambien
debenderealizarsoloel
intercambioparaseguirelorden.
Establecereltotaldefilas
segnaltotalderegistros.
MostrarlosDatosOrdenados.
Eliminartodoslasfilasdela
tabla.
LlamaralOrdenamientoy
volveramostrarlosdatos.Y
seVisualizaraenlatabla
ordenadoporApellido.
TcnicadeProgramacinOrientadaaObjetos 36
TcnicadeProgramacinOrientadaaObjetos 37
TcnicadeProgramacinOrientadaaObjetos 38
Contenidos
- Introduccin a la programacin Orientada a Objetos POO.
- Caracteristicas de la programacin orientada a objetos.
- Definicin de Clases
- Constructores, Estructura de una clase
- Nivel de acceso(public, private, protected)
- Uso de atributo static.
- Interfaces, definicin.
- Paquete, distribucin, mencionar la razn de trabajar en capas, manejo de capas
(Lgica y Presentacin )
- Encapsulacin (get y set de los atributos)
- Herencia: extends, Polimorfismo
- Sobrecarga de Mtodos
____________________________________________________________________________
Programacin Orientada a Objetos
Es un paradigma de programacin que usa objetos y sus interacciones, para disear
aplicaciones y programas de ordenador. Est basado en varias tcnicas, incluyendo herencia,
modularidad, polimorfismo y encapsulamiento. Su uso se populariz a principios de la dcada
de 1990. En la actualidad, existe variedad de lenguajes de programacin que soportan la
orientacin a objetos.
Un objeto es en realidad un conjunto de funciones y procedimientos, todos ellos relacionados
con un determinado concepto del mundo real. Los objetos son entidades que combinan estado
(atributo), comportamiento (mtodo) e identidad:
El estado est compuesto de datos, ser uno o varios atributos a los que se habrn
asignado unos valores concretos (datos).
El comportamiento est definido por los procedimientos o mtodos con que puede
operar dicho objeto, es decir, qu operaciones se pueden realizar con l.
La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras
palabras, es su identificador (concepto anlogo al de identificador de una variable o
una constante).
TcnicadeProgramacinOrientadaaObjetos 39
TcnicadeProgramacinOrientadaaObjetos 40
TcnicadeProgramacinOrientadaaObjetos 41
Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a
continuacin. Dentro de los parntesis podramos colocar parmetros con los que inicializar el
objeto de la clase coche.
Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un
coche la propiedad color tomar un valor en concreto, como por ejemplo rojo o gris metalizado.
El valor concreto de una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador
punto.
miCoche.color =rojo
El objeto es miCoche, luego colocamos el operador punto y por ltimo el nombre e la propiedad
a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la
propiedad del objeto a rojo con una simple asignacin.
Mensajes en objetos
Un mensaje en un objeto es la accin de efectuar una llamada a un mtodo. Por ejemplo,
cuando le decimos a un objeto coche que se ponga en marcha estamos pasndole el mensaje
ponte en marcha.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del mtodo que
deseamos invocar.
miCoche.ponerseEnMarcha()
En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar parntesis igual
que cualquier llamada a una funcin, dentro iran los parmetros.
Otras cosas
Hay mucho todava que conocer de la POO ya que slo hemos hecho referencia a las cosas
ms bsicas. Tambin existen mecanismos como la herencia y el polimorfismo que son unas
de las posibilidades ms potentes de la POO.
La herencia sirve para crear objetos que incorporen propiedades y mtodos de otros objetos.
As podremos construir unos objetos a partir de otros sin tener que reescribirlo todo.
El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos
trabajando, y abstraernos para definir un cdigo que sea compatible con objetos de varios
tipos.
Son conceptos avanzados que cuesta explicar en las lneas de ese informe. No hay que olvidar
que existen libros enteros dedicados a la POO y aqu solo pretendemos dar un repaso a
algunas cosas para que os suenen cuando tengis que poneros delante de ellas en los
lenguajes de programacin que debe conocer un desarrollador del web.
TcnicadeProgramacinOrientadaaObjetos 42
TcnicadeProgramacinOrientadaaObjetos 43
Ejemplo 02: mostrar datos personales ingresado por el usuario desde una clase
Main.
public class ClassEjecutar2 {
public static void main(String[] args) {
//referencia de la clase
ClassEjecutar2 Ejecutar =new ClassEjecutar2();
String nombres=J OptionPane.showInputDialog("Ingresar Nombre");
String ape=J OptionPane.showInputDialog("Ingresar Apellido");
String espe=J OptionPane.showInputDialog("Ingresar Especialidad");
JOptionPane.showMessageDialog(null,"Nombres: "+nombres+"\n"+"Apellidos:"+ape
+"\n" +"Especialidad: "+espe,"Datos Personales",1);
}
}
Ejemplo 03: ingresar 2 nmeros y mostrar las 4 operaciones bsicas.
public class ClassEjecutar3 {
public static void main(String[] args) {
int num1, num2, sum,res,mul;
double divi;
num1=Integer.parseInt(J OptionPane.showInputDialog("Ingrece el #1"));
num2=Integer.parseInt(J OptionPane.showInputDialog("Ingrece el #2"));
sum=num1+num2;
res=num1-num2;
mul=num1*num2;
divi=num1/num2;
J OptionPane.showMessageDialog(null,"La suma de\t"+num1+"+"+num2+"="+
sum,"Operacin de Suma",2);
J OptionPane.showMessageDialog(null,"La resta de\t"+num1+"-"+num2+"="+
res,"Operacin de Resta",2);
J OptionPane.showMessageDialog(null,"La multiplicacion de\t"+num1+"*"+num2+"="+
mul,"Operacin de Multiplicacin",2);
J OptionPane.showMessageDialog(null,"La Divisin de\t"+num1+"/"+num2+"="+
Usandoconsola
UsandoMessage
TcnicadeProgramacinOrientadaaObjetos 44
divi,"Operacin de Divisin",2);
}
}
Aplicando Herencia entre Clases
Ejemplo 01: ingresar 2 nmeros y mostrar las 4 operaciones bsicas usando
herencia.
public class SubClaseHija1 {
//Metodos
public int Suma(int a,int b){
return(a+b);
}
public int Resta(int a,int b){
return(a-b);
}
public int Multiplica(int a,int b){
return(a*b);
}
public int divi(int a,int b){
return(a/b);
}
}
package prjcaso1;
import javax.swing.JOptionPane;
public class ClassEjecutar extends SubClaseHija1 {
//Atributos Globales
public static void main(String[] args) {
//referencia de la clase
ClassEjecutar Ejecutar =new ClassEjecutar();
//atributos Locales
int num1, num2;
num1=Integer.parseInt(J OptionPane.showInputDialog("Ingrece el #1"));
num2=Integer.parseInt(J OptionPane.showInputDialog("Ingrece el #2"));
J OptionPane.showMessageDialog(null,"La suma de\t"+num1+"+"+num2+"="+
Ejecutar.Suma(num1,num2),"Operacion de Suma",2);
TcnicadeProgramacinOrientadaaObjetos 45
TcnicadeProgramacinOrientadaaObjetos 46
TcnicadeProgramacinOrientadaaObjetos 47
Los constructores
Un objeto de una clase se crea llamando a una funcin especial denominada constructor de la
clase. El constructor se llama de forma automtica cuando se crea un objeto, para situarlo en
memoria e inicializar los miembros datos declarados en la clase. El constructor tiene el mismo
nombre que la clase. Lo especfico del constructor es que no tiene tipo de retorno.
public class ClassConstructor {
public ClassConstructor() {
System.out.println("Alumno SISE");
}
public ClassConstructor(String Esp) {
System.out.println("Su Especialidad " +Esp);
}
public ClassConstructor(int Costo) {
System.out.println("El Costo " +Costo +" Soles");
}
public ClassConstructor(int Costo,String Esp) {
double de=0,neto;
if(Esp.equalsIgnoreCase("Sistemas"))
de=0.15*Costo;
if(Esp.equalsIgnoreCase("Contabilidad"))
de=0.10*Costo;
neto=Costo-de;
System.out.println("Descuento " +de);
System.out.println("Neto " +neto );
}
Llamando al constructor desde una clase Main
public static void main(String args[]) {
ClassConstructor Alum1 =new ClassConstructor();
String espe=J OptionPane.showInputDialog("Ingresar Especialidad");
int costo=Integer.parseInt(J OptionPane.showInputDialog("Ingresar Costo"));
ClassConstructor Alum2 =new ClassConstructor(espe);
ClassConstructor Alum3 =new ClassConstructor(costo,espe);
}
}
TcnicadeProgramacinOrientadaaObjetos 48
TcnicadeProgramacinOrientadaaObjetos 49
TcnicadeProgramacinOrientadaaObjetos 50
TcnicadeProgramacinOrientadaaObjetos 51
Interfaces
El concepto de Interface lleva un paso ms adelante la idea de las clases abstractas. En J ava
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.
Declaracin y uso
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.
TcnicadeProgramacinOrientadaaObjetos 52
Referencias a Interfaces
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_interface , . . . {
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 resultan 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]);
Un ejemplo casi real
TcnicadeProgramacinOrientadaaObjetos 53
Los paquetes
Los paquetes son una forma de organizar grupos de clases. Un paquete contiene un
conjunto de clases relacionadas bien por finalidad, por mbito o por herencia.
Los paquetes resuelven el problema del conflicto entre los nombres de las clases. Al
crecer el nmero de clases crece la probabilidad de designar con el mismo nombre a
dos clases diferentes.
Las clases tienen ciertos privilegios de acceso a los miembros dato y a las funciones
miembro de otras clases dentro de un mismo paquete.
En el Entorno Integrado de Desarrollo (IDE) J Builder de Borland, un proyecto nuevo se crea en
un subdirectorio que tiene el nombre del proyecto. A continuacin, se crea la aplicacin, un
archivo .java que contiene el cdigo de una clase cuyo nombre es el mismo que el del archivo.
Se pueden agregar nuevas clases al proyecto, todas ellas contenidas en archivos .java
situadas en el mismo subdirectorio. La primera sentencia que encontramos en el cdigo fuente
de las distintas clases que forman el proyecto es package o del nombre del paquete.
La palabra reservada import
Para importar clases de un paquete se usa el comando import. Se puede importar una clase
individual
import java.awt.Font;
o bien, se puede importar las clases declaradas pblicas de un paquete completo, utilizando un
arterisco (*) para reemplazar los nombres de clase individuales.
import java.awt.*;
Para crear un objeto fuente de la clase Font podemos seguir dos alternativas
import java.awt.Font;
Font fuente=new Font("Monospaced", Font.BOLD, 36);
O bien, sin poner la sentencia import
java.awt.Font fuente=new java.awt.Font("Monospaced", Font.BOLD, 36);
Normalmente, usaremos la primera alternativa, ya que es la ms econmica en cdigo, si
tenemos que crear varias fuentes de texto.
Se pueden combinar ambas formas, por ejemplo, en la definicin de la clase BarTexto
import java.awt.*;
public class BarTexto extends Panel implements java.io.Serializable{
//...
}
Panel es una clase que est en el paquete java.awt, y Serializable es un interface que est en
el paquete java.io
TcnicadeProgramacinOrientadaaObjetos 54
Los paquetes estndar
Paquete Descripcin
java.applet
Contiene las clases necesarias para crear applets que se ejecutan en
la ventana del navegador
java.awt
Contiene clases para crear una aplicacin GUI independiente de la
plataforma
java.io Entrada/Salida. Clases que definen distintos flujos de datos
java.lang
Contiene clases esenciales, se importa impcitamente sin necesidad de
una sentencia import.
java.net
Se usa en combinacin con las clases del paquete java.io para leer y
escribir datos en la red.
java.util Contiene otras clases tiles que ayudan al programador
Herencia
La herencia es uno de los conceptos ms cruciales en la POO. La herencia bsicamente
consiste en que una clase puede heredar sus variables y mtodos a varias subclases (la clase
que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de
los atributos y mtodos propios, tiene incorporados los atributos y mtodos heredados de la
superclase. De esta manera se crea una jerarqua de herencia.
Por ejemplo, imaginemos que estamos haciendo el anlisis de un Sistema para una tienda que
vende y repara equipos celulares.
Tcni
En el
Esas
utiliza
En ge
grfic
E
El en
gene
los de
Los t
enca
Una v
icadeProgra
l grfico vem
2 Clases n
amos el com
eneral, pode
co:
ENCAPSU
ncapsulamien
rar compone
etalles de la
rminos md
psulado de s
vez encapsu
amacinOrie
mos 2 Clases
nuevas se c
portamiento
mos tener un
LAMIENT
nto es la cara
entes autno
implementac
dulo, compon
software.
ulada, una en
entadaaObj
s ms que p
construirn a
de la Super
na gran jerar
O
acterstica de
omos de softw
cin al mund
nente o bean
ntidad de sof
jetos
osiblemente
a partir de la
Clase.
rqua de Clas
e autonoma
ware tomand
do exterior.
n se suelen u
ftware se pue
necesitemo
a Clase Cel
ses tal y com
de la OO. E
do una parte
utilizan en lug
ede visualiza
os para crear
lular existen
mo vemos en
Esta caracter
de funciona
gar de comp
ar como una
r nuestro Sis
te. De esa
n el siguiente
stica permi
lidad y oculta
ponente
caja negra.
55
stema.
forma
e
te
ando
TcnicadeProgramacinOrientadaaObjetos 56
Sobrecarga
En programacin orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos o
ms funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o ms
funciones 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 funciones.
Tambin existe la sobrecarga de operadores que al igual que con la sobrecarga de funciones
se le da ms de una implementacin a un operador.
Sobrecarga es la capacidad de un lenguaje de programacin, que permite nombrar con el
mismo identificador diferentes variables u operaciones
El mismo mtodo dentro de una clase permite hacer cosas distintas en funcin de los
parmetros
J ava no permite al programador implementar sus propios operadores sobrecargados, pero s
utilizar los predefinidos como el + del ejemplo anterior. C++, por el contrario si permite
hacerlo.
Sobrecarga de Mtodos y de Constructores
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. J ava utiliza el nmero y tipo de argumentos para seleccionar
cul definicin de mtodo ejecutar.
J ava diferencia los mtodos sobrecargados con base en el nmero y tipo de argumentos que
tiene el mtodo y no por el tipo que devuelve.
Tambin existe la sobrecarga de constructores: Cuando en una clase existen constructores
mltiples, se dice que hay sobrecarga de constructores.
Algunos mtodos en una clase pueden tener el mismo nombre. Estos mtodos deben contar
con diferentes argumentos. El compilador decide qu mtodo invocar comparando los
argumentos. Se generara un error si los mtodos slo varan en el tipo de retorno.
TcnicadeProgramacinOrientadaaObjetos 57
Ejemplos
Caso 01
Crear una sobrecarga que permita sumar 2 nmeros y ser llamado de acuerdo al tipo
de dato que se le envie.
public class ClassSobreCalculos {
public int Totales(int a,int b){
return(a+b);
}
public double Totales(double a, double b){
return(a+b);
}
public long Totales(long a, long b){
return(a+b);
}
}
Caso 02
Crear una sobrecarga de mtodos donde permita hallar el sueldo, descuento y el neto.
El sueldo depender del costo y cantidad de horas
El descuento segn el estado de Honorarios o Planilla
Neto segn el sueldo y el descuento.
package pckLogico;
public class ClassSobre {
public double Calcular(int ch,int costo){
return(ch*costo);
}
public double Calcular(int sueld, String estado){
double de=0;
if(estado.equalsIgnoreCase("Planilla"))
de=0.12*sueld;
if(estado.equalsIgnoreCase("Honorarios"))
de=0.07*sueld;
return(de);
}
public double Calcular(int sueld,double de){
return(sueld-de);
}
}
Package pckLogico;
public class ClassEncapsular {
TcnicadeProgramacinOrientadaaObjetos 58
int sueldo,costo,ch;
double desc,neto;
String estado;
public int getSueldo() { return sueldo; }
public void setSueldo(int sueldo) { this.sueldo =sueldo; }
public int getCosto() { return costo; }
public void setCosto(int costo) { this.costo =costo; }
public int getCh() { return ch; }
public void setCh(int ch) { this.ch =ch; }
public double getDesc() { return desc; }
public void setDesc(double desc) { this.desc =desc; }
public double getNeto() { return neto; }
public void setNeto(double neto) { this.neto =neto; }
public String getEstado() { return estado; }
public void setEstado(String estado) { this.estado =estado; }
}
Llamando las clases Encapsulada y sobrecarga en el JFRAME
package pclPrincipal;
public class FrmDatos extends JFrame {
ClassSobre metodos=new ClassSobre();
ClassEncapsular atri=new ClassEncapsular();
private void btnAceptar_actionPerformed(ActionEvent e) {
atri.setCh(Integer.parseInt(txtch.getText()));
atri.setCosto(Integer.parseInt(txtcosto.getText()));
atri.setSueldo(metodos.Calcular(atri.getCh(),atri.getCosto()));
lblSuel.setText(""+atri.getSueldo());
atri.setDesc(metodos.Calcular(atri.getSueldo(),atri.getEstado()));
atri.setNeto(metodos.Calcular(atri.getSueldo(),atri.getDesc())) ;
lblDes.setText(""+atri.getDesc());
lblN.setText(""+atri.getNeto());
Object valores[]={c,atri.getCh(),atri.getCosto(),atri.getSueldo(),atri.getDesc(),atri.getEstado(),
atri.getNeto()};
ModDatos.addRow(valores);
++c; // contador de registros
}
private void rbtPla_actionPerformed(ActionEvent e) {
atri.setEstado("Planilla");
}
private void rbtHo_actionPerformed(ActionEvent e) {
atri.setEstado("Honorarios");
}
}
TcnicadeProgramacinOrientadaaObjetos 59
Caso 03
Crear una sobrecarga de mtodos donde permita hallar el sueldo, descuento y el neto.
El sueldo depender del costo y cantidad de horas
El descuento ser del 10% si el sueldo supera a los 1500
Neto segn el sueldo y el descuento.
public class ClassMetodos extends ClassEncapsular{
public int pago(int ch,int cst){
return(ch*cst);
}
public double pago(int sueldo){
double d=0;
if(sueldo>1500)
d=0.10*sueldo;
return(d);
}
public double pago(int sueldo,double dsct){
return(sueldo-dsct);
}
}
//Campos encapsulado
public class ClassEncapsular {
int c,cs,suel;
double np,des;
public int getC() {
return c;
}
public void setC(int c) {
this.c =c;
}
public int getCs() {
return cs;
}
public void setCs(int cs) {
this.cs =cs;
}
public int getSuel() {
return suel;
}
public void setSuel(int suel) {
this.suel =suel;
}
public double getNp() {
return np;
}
public void setNp(double np) {
this.np =np;
}
public double getDes() {
return des;
TcnicadeProgramacinOrientadaaObjetos 60
}
public void setDes(double des) {
this.des =des;
}
}
// Frame:
public class FrmVentana extends JFrame {
Class1 x = new Class1();
*****
public FrmVentana() {
try {
jbInit();
}catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
*******
******
******
}
private void btnCalcular_actionPerformed(ActionEvent e) {
x.setC(Integer.parseInt(txtch.getText()));
x.setCs(Integer.parseInt(txtcst.getText()));
x.setSuel(x.pago(x.getC(),x.getCs()));
x.setDes(x.pago(x.getSuel()));
x.setNp(x.pago(x.getSuel(),x.getDes()));
lblSueldo.setText(""+x.getSuel());
lblDesc.setText(""+x.getDes());
lblnp.setText(""+x.getNp());
}
private void btnLlamar_actionPerformed(ActionEvent e) {
FrmResultados j=new FrmResultados();
j.setVisible(true);
j.lblr.setText(""+x.getNp());
}
}
// Clase Main
public class Class1 extends ClassMetodos{
public static void main(String[] args) {
FrmVentana ven=new FrmVentana();
ven.setVisible(true);
}
TcnicadeProgramacinOrientadaaObjetos 61
}
Caso 04
Crear una sobrecarga de mtodos donde permita hallar el precio, total, igv y el neto.
Segn el articulo saldr el precio. El total ser deacuerdo a la cantidad y precio y el neto ser
deacuero al total y a la seleccin del Igv.
// Clase encapsulada
package pckLogico;
public class ClassEncapsular {
int precio,cantidad;
double total,igv;
String articulo;
public int getPrecio() {
TcnicadeProgramacinOrientadaaObjetos 62
return precio;
}
public void setPrecio(int precio) {
this.precio =precio;
}
public int getCantidad() {
return cantidad;
}
public void setCantidad(int cantidad) {
this.cantidad =cantidad;
}
public String getArticulo() {
return articulo;
}
public void setArticulo(String articulo) {
this.articulo =articulo;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total =total;
}
public double getIgv() {
return igv;
}
public void setIgv(double igv) {
this.igv =igv;
}
}
// clase sobrecarga
package pckLogico;
public class ClassSobreCarga {
public int Calcular(String articulo){
int pre =0;
if(articulo.equalsIgnoreCase("Monitor"))
pre=259;
if(articulo.equalsIgnoreCase("Teclado"))
pre=15;
if(articulo.equalsIgnoreCase("Memorias"))
pre=175;
if(articulo.equalsIgnoreCase("Case"))
TcnicadeProgramacinOrientadaaObjetos 63
pre=550;
if(articulo.equalsIgnoreCase("Lectora"))
pre=25;
return(pre);
}
public double Calcular(int cantidad, int precio){
return(cantidad*precio);
}
public double calcular(double total){
return(total*0.19);
}
public double calcular(double total,double igv){
return(total+igv);
}
}
//Frame
public class FrmDatos extends JFrame {
ClassEncapsular atributo =new ClassEncapsular();
ClassSobreCarga metodos =new ClassSobreCarga();
String Titulos[]={"registro","articulo","precio","cantidad","total"};
String valores[][]={};
int c=1;
*************
***************
private void jbInit() throws Exception {
*********************
*********************
*********************
cboArticulo.addItem("Seleccionar");
cboArticulo.addItem("Monitor");
cboArticulo.addItem("Teclado");
cboArticulo.addItem("Memorias");
cboArticulo.addItem("Case");
cboArticulo.addItem("Lectora");
}
private void cboArticulo_actionPerformed(ActionEvent e) {
lblTotal.setText("");
txtCantidad.setText("");
atributo.setArticulo(cboArticulo.getSelectedItem().toString());
lblPrecio.setText(""+metodos.Calcular(atributo.getArticulo()));
atributo.setPrecio(metodos.Calcular(atributo.getArticulo()));
lblPrecio.setText(""+atributo.getPrecio());
}
private void btnAgregar_actionPerformed(ActionEvent e) {
atributo.setCantidad(Integer.parseInt(txtCantidad.getText()));
atributo.setPrecio(atributo.getPrecio());
atributo.setTotal(metodos.Calcular(atributo.getCantidad(),atributo.getPrecio()));
lblTotal.setText(""+atributo.getTotal());
TcnicadeProgramacinOrientadaaObjetos 64
if(chkIGV.isSelected())
atributo.setIgv(metodos.calcular(atributo.getTotal()));
else
atributo.setIgv(0);
lblIGV.setText(""+atributo.getIgv());
lblneto.setText(""+metodos.calcular(atributo.getTotal(),atributo.getIgv()));
Object
valores[]={c,atributo.getArticulo(),atributo.getPrecio(),atributo.getCantidad(),atributo.getTotal()};
ModDatos.addRow(valores);
++c;
}
private void btnLimpiar_actionPerformed(ActionEvent e) {
txtCantidad.setText("");
cboArticulo.setSelectedIndex(0);
lblIGV.setText("");
lblneto.setText("");
lblPrecio.setText("");
lblTotal.setText("");
}
}
TcnicadeProgramacinOrientadaaObjetos 65
Contenidos
- Manejo de Paneles(J Panel)
- Clase GregorianCalendar
- Clase String: Uso de la Clase String String.valueOf(), length(), charAt(), toString(),
substring(), indexOf(), lastIndexOf(), equalsIgnoreCase(), compareTo(),
- Uso de la Clase String: concat(), replace(), toLowerCase(), toUperCase().
____________________________________________________________________________
PANEL
Construir directamente programas o aplicaciones directamente en un FRAME, produce
rpidamente un amontonamiento de controles o componentes en la propia forma.
Es ms conveniente usar componentes de agrupamiento visuales que faciliten la separacin
fsica y lgica de las diversas partes que componen un programa o aplicacin.
Estos controles de agrupamiento son conocidos como paneles, aunque en visual basic se
conocen como frames (no confundirlos con frame de java).
J ava tiene los siguientes tipos de paneles, PANEL, SPLITPANE, SCROLLPANE,
TABBEDPANE, TOOLBAR.
Recordar adems que los panels pueden y deben usar su propio layout para acomodar los
componentes visuales que contendr.
En particular frame usando su layout acomoda sus paneles y panel usando su layout acomoda
los componentes.
El panel es un rea de J ava Desktop System en la que se pueden ejecutar aplicaciones y
realizar otras tareas.
La clase Panel es el ms simple de los Contenedores de Componentes grficos. En realidad,
se trataba de crear una clase no-abstracta (Container s lo es) que sirviera de base a los
applet y a otras pequeas aplicaciones. La clase Panel consta de dos mtodos propios: el
constructor, cuyo fin es crear un nuevo Panel con un LayoutManager de tipo FlowLayout (el de
defecto), y el mtodo addNotify() que, sobrecargando la funcin del mismo nombre en la clase
Container, llama al mtodo createPanel() del Toolkit adecuado, creando as un PanelPeer. El
AWT enviar as al Panel (y por tanto al applet) todos los eventos que sobre l ocurran. Esto
que puede parecer un poco rebuscado, obedece al esquema arquitectnico del AWT; se trata
del bien conocido esquema de separacin interface/implementacin que establece por un lado
TcnicadeProgramacinOrientadaaObjetos 66
una clase de interface y por otras distintas clases de implementacin para cada una de las
plataformas elegidas.
TcnicadeProgramacinOrientadaaObjetos 67
GregorianCalendar
Segn la documentacin del API de java, la clase Calendar es una clase abstracta base para
convertir entre un objeto de tipo Date (java.util.Date) y un conjunto de campos enteros como
YEAR (ao), MONTH (mes), DAY (da), HOUR (hora), etc.
Una subclase de Calendar representa una fecha de acuerdo a las reglas de un calendario
especfico. La plataforma provee una subclase concreta de Calendar: GregorianCalendar.
Futuras subclases podran representar varios tipos de calendarios lunares usados en diferentes
lugares del mundo.
La clase Calendar tiene mucho del comportamiento que esperaramos de la clase
java.util.Date, es decir, cuando obtenemos una instancia de la clase Calendar obtenemos un
instante de tiempo especfico con gran precisin similar a lo que obtenemos con la clase date.
S es cierto, podemos decir aqu que los milisegundos juegan un papel fundamental en esta
clase; pero el verdadero sentido de la clase Calendar no es obtener un instante de tiempo sino
extraerle datos.
Recordemos que la clase java.util.Date tiene mtodos que permiten obtener el ao, mes y da,
pero estos mtodos estn obsoletos precisamente por que para eso existe Calendar y de
hecho cuando usamos el mtodo getYear() de la clase java.util.Date esta recurre a las
funcionalidades que posee la clase Calendar.
Hay que mencionar tambin que obtener un instante de tiempo especfico y diferente del actual
es supremamente sencillo con esta clase, indicndole simplemente el da, mes y ao con que
se desea trabajar, o se puede especificar an ms dando hora, minuto y segundo deseado.
Veamos:
El mtodo getInstance() de la clase nos devuelve una subclase de Calendar con el tiempo
ajustado a la hora actual, y usamos el mtodo set(args) para forzarlo a tomar la fecha
deseada:
Calendar ahoraCal =Calendar.getInstance();
System.out.println(ahoraCal.getClass());
ahoraCal.set(2004,1,7);
System.out.println(ahoraCal.getTime());
ahoraCal.set(2004,1,7,7,0,0);
System.out.println(ahoraCal.getTime());
Extraer los datos
La clase Calendar tiene un nico mtodo get para obtener todos sus datos para lo cual se
ayuda de una serie de atributos constantes que permiten obtener o ajustar un atributo
determinado de la fecha; los ms importantes son (al lado los valores que representan):
YEAR: Ao.
MONTH: Mes.
DATE, DAY_OF_MONTH: Da del mes.
DAY_OF_WEEK: Da de la semana entre 1 (MONDAY) y 7 (SATURDAY).
HOUR: Hora antes o despus del medio da (en intervalos de 12 horas).
HOUR_OF_DAY: Lo hora absoluta del da (en intervalos de 24 horas).
MINUTE: El minuto dentro de la hora.
SECOND: El segundo dentro del minuto.
Estn tambin los atributos que representan los meses, como: J ANUARY, MARCH, J UNE,
DECEMBER, etc. que van desde 0 (J ANUARY) hasta 11 (DECEMBER).
TcnicadeProgramacinOrientadaaObjetos 68
Tambin hay atributos que representan los das: SUNDAY, TUESDAY, SATURDAY, etc. estos
empiezan con 1 (SUNDAY) y van hasta 7 (SATURDAY).
Hay ms atributos pero con estos es suficiente para los objetivos de este artculo, si deseas
conocerlos todos recurre a la documentacin del lenguaje.
Para extraer algn atributo se usa el mtodo get pasndole como parmetro alguna de las
constantes que vimos anteriormente y el mtodo devuelve siempre un dato de tipo int; as para
obtener el ao, mes, da y hora, usaramos el siguiente cdigo:
System.out.println("ANYO: "+ahoraCal.get(Calendar.YEAR));
System.out.println("MES: "+ahoraCal.get(Calendar.MONTH));
System.out.println("DIA: "+ahoraCal.get(Calendar.DATE));
System.out.println("HORA: "+ahoraCal.get(Calendar.HOUR));
if (ahoraCal.get(Calendar.MONTH) ==Calendar.J UNE){
System.out.println("ES J UNIO");
}else{
System.out.println("NO ES J UNIO");
}
Si el objeto tiene la fecha equivalente a 5:30 p.m. del 22 de junio de 2004 se ve la siguiente
salida:
AO:2010
MES:Mayo
DIA:02
HORA:5
ES J UNIO
Modificar Un Atributo
Modificar un atributo de Calendar es tan sencillo como obtenerlo, solamente es necesario usar
el mtodo set(int atributo, int valor), en donde atributo es una de las constante mencionadas
anteriormente y valor es la cantidad que se le quiere asignar. Por ejemplo:
ahoraCal.set(Calendar.MONTH,Calendar.J ANUARY) o ahoraCal.set(Calendar.YEAR, 1980)
ajustaran la fecha almacenada en el objeto ahoraCal a enero o al ao 1980 sin modificar
ninguno de los otros atributos.
Aclaremos esto con un ejemplo. Mi cumpleaos es en octubre 27 :-), y deseo saber qu da lo
celebrar en el 2010; para eso obtengo una instancia de Calendar (que siempre devuelve un
objeto del tipo GregorianCalendar) y la ajusto hasta el 27 de octubre de 2010, luego obtengo el
nombre del da, veamos:
Calendar cumpleCal =Calendar.getInstance();
cumpleCal.set(2010,9,27); //La hora no me interesa y recuerda que los meses van de 0 a 11
int dia =cumpleCal.get(Calendar.DAY_OF_WEEK);
System.out.println(dia); //Da 4 =WEDNESDAY =MIRCOLES
La salida es: 4, lo que quiere decir que en el 2010 el 27 de octubre ser un da mircoles (as
que probablemente lo celebre el viernes 29 :-));
TcnicadeProgramacinOrientadaaObjetos 69
TcnicadeProgramacinOrientadaaObjetos 70
hoy.add(Calendar.YEAR, -5);
hoy.add(Calendar.DATE, -50);
System.out.println(hoy.getTime());
TcnicadeProgramacinOrientadaaObjetos 71
Clase String
J ava posee gran capacidad para el manejo de cadenas dentro de sus clases String y
StringBuffer. Un objeto String representa una cadena alfanumrica de un valor constante que
no puede ser cambiada despus de haber sido creada. Un objeto StringBuffer representa una
cadena cuyo tamao puede variar.
Los Strings son objetos constantes y por lo tanto muy baratos para el sistema. La mayora de
las funciones relacionadas con cadenas esperan valores String como argumentos y devuelven
valores String.
Hay que tener en cuenta que las funciones estticas no consumen memoria del objeto, con lo
cual es ms conveniente usar Character que char. No obstante, char se usa, por ejemplo, para
leer ficheros que estn escritos desde otro lenguaje.
MTODOS PRINCIPALES:
Para poder aplicar estos mtodos es necesario crear un objeto String. Adems de estos
mtodos, la clase String cuenta con otros muchos.
int length(): devuelve la longitud de la String, incluyendo espacios en blanco.
La longitud siempre es una unidad mayor que el ndice asociado al ltimo
carcter de la String.
Ejemplo:
int indexOf(String str, int indice): devuelve el ndice en el que aparece por
primera vez la String del primer argumento en la que se aplica el mtodo, a
partir del ndice especificado en el segundo argumento. Recordar que una
String est indexada. Si el ndice a partir del que se inicia la bsqueda no
existe o la String no aparece, devuelve -1. MUY USADO.
Ejemplo:
int indexOf(char ch): devuelve el ndice en el que aparece por primera vez el
carcter que se le pasa al argumento. Si no se encuentra el carcter devuelve -
1. Se observa que el nombre de este mtodo es igual al anterior aunque su
nmero de argumentos es distinto adems de su tipo. A esto, en J ava, se le
llama sobrecarga de mtodos: mismo nombre pero distinto n de
String s= SISE tiene 27 aos..! ;
int longitud=str.length();
String s= Sebastian Aquino ;
Cad=s.indexOf( t ,s.length());
TcnicadeProgramacinOrientadaaObjetos 72
TcnicadeProgramacinOrientadaaObjetos 73
boolean endsWith(String str): devuelve true si la String sobre la que se aplica acaba
en la del argumento; false si esto no ocurre.
String trim(): devuelve una String en base a la que se le pasa al argumento, pero sin
espacios en blanco al principio ni al final. No elimina los espacios en blanco situados
entre las palabras.
Ejemplo:
String substring(int indiceIni, int indiceFin): devuelve una String obtenida a partir
del ndice inicial incluido y del ndice final excluido; es decir, se comporta como un
intervalo semiabierto [indiceIni, indiceFin). Si el ndice final sobrepasa la longitud de la
String, lanza una IndexOutOfBoundsException. MUY USADO.
Ejemplo:
char charAt (int indice): devuelve el carcter asociado al ndice que se le pasa como
argumento de la String sobre la que se aplica el mtodo. Si el ndice no existe se lanza
una StringIndexOutOfBoundsException que hereda de IndexOutOfBoundsException.
MUY USADO.
String s= Hola William ;
//primero visualicemos la longitud
Int l=s.length();
J OptionPane.showMessageDialog(null,I)
//quitemos el espacio en blanco
Cad=s.trim();
//vuelve a mostrar la longitud
Int l=s.length();
J OptionPane.showMessageDialog(null,I)
String s=Docentes de Programacion;
Cad=s.substring(4,9);
TcnicadeProgramacinOrientadaaObjetos 74
Contenidos
- Clase String: Definicin de Archivos
- Archivos de Textos: Lectura / Escritura.
- Aplicar la capa de Datos con Manejo de Archivos.
- Manejo de Excepciones y try catch,
- Manejo de las clases BufferedReader, BufferedWriter, PrintWriter, FileReader,
readLine, StringTokenizer, nextToken.
- Apertura de Archivos, Grabar Datos a un archivo.
____________________________________________________________________________
Definicin de ARCHIVOS.
Los archivos tambin denominados ficheros (file); es una coleccin de informacin (datos
relacionados entre s), localizada o almacenada como una unidad en alguna parte de la
computadora.
Los archivos son el conjunto organizado de informaciones del mismo tipo, que pueden
utilizarse en un mismo tratamiento; como soporte material de estas informaciones.
Introduccin a los archivos.
Los archivos como coleccin de datos sirve para la entrada y salida a la computadora y son
manejados con programas.
Los archivos pueden ser contrastados con Arrays y registros; Lo que resulta dinmico y por
esto en un registro se deben especificar los campos, l nmero de elementos de un arrays (o
arreglo), el nmero de caracteres en una cadena; por esto se denotan como "Estructuras
Estticas".
En los archivos no se requiere de un tamao predeterminado; esto significa que se pueden
hacer archivos de datos ms grandes o pequeos, segn se necesiten.
Cada archivo es referenciado por su identificador (su nombre).
TcnicadeProgramacinOrientadaaObjetos 75
TcnicadeProgramacinOrientadaaObjetos 76
Histricos: Contienen informacin acumulada a lo largo del tiempo de archivos que han sufrido
procesos de actualizacin, o bien acumulan datos de variacin peridica en el tiempo.
Archivos de Movimiento o Transacciones: Son aquellos que se utilizan
conjuntamente con los maestros (constantes), y contienen algn campo comn en sus
registros con aquellos, para el procesamiento de las modificaciones experimentados
por los mismos.
Archivos de Maniobra o Transitorios: Son los archivos auxiliares creados durante la
ejecucin del programa y borrados habitualmente al terminar el mismo.
Acceso a los Archivos
Se refiere al mtodo utilizado para acceder a los registros de un archivo prescindiendo de su
organizacin. Existen distintas formas de acceder a los datos:
Secuenciales; los registros se leen desde el principio hasta el final del archivo, de tal forma
que para leer un registro se leen todos los que preceden.
Directo; cada registro puede leerse / escribirse de forma directa solo con expresar su direccin
en el fichero por l numero relativo del registro o por transformaciones de la clave de registro
en l numero relativo del registro a acceder.
Por ndice; se accede indirectamente a los registros por su clave, mediante consulta
secuenciales a una tabla que contiene la clave y la direccin relativa de cada registro, y
posterior acceso directo al registro.
Dinmico; es cuando se accede a los archivos en cualquier de los modos anteriormente
citados.
La eleccin del mtodo est directamente relacionada con la estructura de los registros del
archivo y del soporte utilizado.
Tipos de accesos
Acceso Secuencial. Exige el tratamiento de elemento, para esto es necesario una exploracin
secuencial comenzando desde el primer momento (Pascal permite este acceso)
Secuenciales: archivo de texto que debe ser ledo del principio hasta el final.
Acceso Directo. Permite procesar o acceder a un elemento determinado y referencia
directamente por su posicin en el soporte de almacenamiento (Turbo Pascal permite este
acceso.
Aleatorios: Es un archivo con registros de un mismo largo. Un programa puede accesar
directamente cualquier registro sin tener que leer los registros previos.
Binarios: Es un archivo que lee byte por byte sin asumir ninguna estructura.
Los archivos Binarios no son un nuevo tipo de archivo, pero si una nueva forma de manipular
cualquier tipo de archivo. Las tcnicas de archivo binarios permiten leer o cambiar cualquier
byte de un archivo. Son herramientas extremadamente potentes, pero como toda herramienta
potente debe manejarse con cuidado
Operaciones generales que se realizan sobre un archivo.
Las operaciones generales que se realizan son:
Creacin. Escritura de todos sus registros.
Consulta. Lectura de todos sus registros.
Actualizacin. Insercin supresin o modificacin de algunos de sus registros
TcnicadeProgramacinOrientadaaObjetos 77
Clasificacin. Reubicacin de los registros de tal forma que queden ordenados segn
determinados criterios.
Borrado. Eliminando total del archivo, dejando libre el espacio del soporte que ocupaba.
Excepciones
Excepcion es, o sencillamente problemas. En la programacin siempre se producen errores,
ms o menos graves, pero que hay que gestionar y tratar correctamente. Por ello en java
disponemos de un mecanismo consistente en el uso de bloques try/catch/finally . La tcnica
bsica consiste en colocar las instrucciones que podran provocar problemas dentro de un
bloque try, y colocar a continuacin uno o ms bloques catch, de tal forma que si se provoca un
error de un determinado tipo, lo que haremos ser saltar al bloque catch capaz de gestionar
ese tipo de error especfico. El bloque catch contendr el codigo necesario para gestionar ese
tipo especfico de error. Suponiendo que no se hubiesen provocado errores en el bloque try,
nunca se ejecutaran los bloques catch.
Veamos ahora la estructura del bloque try/catch/finally:
try {
//Cdigo que puede provocar errores
}catch(Tipo1 var1) {
//Gestin del error var1, de tipo Tipo1
}
[ ...
catch(TipoN varN) {
//Gestin del error varN, de tipo TipoN
}]
[
finally {
//Cdigo de finally
}
Como podemos ver es obligatorio que exista la zona try, o zona de pruebas, donde pondremos
las instrucciones problemticas. Despus vienen una o ms zonas catch, cada una
especializada en un tipo de error o excepcin. Por ltimo est la zona finally, encargada de
tener un cdigo que se ejecutar siempre, independientemente de si se produjeron o no
errores.
TcnicadeProgramacinOrientadaaObjetos 78
Se puede apreciar que cada catch se parece a una funcin en la cul slo recibimos un objeto
de un determinado tipo, precisamente el tipo del error. Es decir slo se llamar al catch cuyo
argumento sea coincidente en tipo con el tipo del error generado
Archivos de Texto
Archivos necesarios:
Los archivos nos permiten guardar nuestro trabajo para que no perdamos datos una vez que
cerremos la aplicacin. Existen dos tipos de archivos en J ava, en este trial veremos los
primeros. Los archivos de texto en J ava se manejan mediante la clase BufferedReader y la
clase PrintWriter. Estas dos clases nos permiten manejar los archivos de texto como podemos
ver en la presentacin a continuacin:
Archivos de Texto
Adems de los ejemplos y ejercicios de la presentacin puedes basarte en el siguiente archivo
para aprender a manejar archivos de texto:
Cmo guardar en archivos de texto?
En la computadora, los archivos son un bitstream o "flujo de bits". Esto es para que se puedan
construir fcilmente programas que puedan escribir a cualquier tipo de flujo, ya sean archivos,
la pantalla, la impresora o una red. La clase que nos srive para imprimir bits a un bitstream es
PrintWriter. En la imagen de la izquierda podemos ver que el constructor del PrintWriter recibe
un FileWriter, esto se debe a que el PrintWriter sabe escribir a un flujo, pero no sabe a cul, la
clase FileWriter le permite escribir a un flujo de archivos.
El constructor de FileWriter es muy importante, puede recibir uno o dos parmetros, el primer
parmetro es el nombre del archivo o un objeto de la clase File que represente el archivo que
queremos abrir, el segundo (que es opcional) es un boolean que indica si se debe sobreescribir
el archivo o escribir al final.
Hay dos maneras de escribir a un archivo una vez que ya tenemos el PrintWriter, pero primeor
tenemos que entender una cosa de esta clase. El PrintWriter es un buffer, como una caja en la
que se guarda lo que se va a escribir al archivo y una vez que ya est todo listo se manda al
archivo.
Para mandar un String a un archivo de texto podemos utilizar dos mtodos, el primero es
println() que recibe una lnea de texto y la imprime en el archivo con un cambio de lnea ("\n") al
final, el segundo mtodo que se utiliza frecuentemente es el mtodo print que funciona
bsicamente de la misma manera, pero no pone un salto de lnea al final y no imprime los
TcnicadeProgramacinOrientadaaObjetos 79
datos al archivo sino nicamente los deja en el buffer, por lo que tenemos que utilizar el mtodo
flush() para que lo imprima al archivo.
Es muy importante recordar que debemos cerrar el archivo al terminar de utilizarlo, ya que en
caso contrario no estamos seguros de que todos los cambios se guarden en el archivo. Para
poder cerrar el archivo utilizamos el mtodo close() del PrintWriter.
Es muy importante recordar que debemos cerrar el archivo al terminar de utilizarlo, ya que en
caso contrario no estamos seguros de que todos los cambios se guarden en el archivo. Para
poder cerrar el archivo utilizamos el mtodo close() del PrintWriter.
Cmo leer de archivos de texto?
El bitstream que creamos al guardar un archivo podemos leerlo mediante la clase
BufferedReader. Pero al igual que la clase PrintWriter esta clase no sabe qu tipo de archivo
est leyendo por lo que hay que especificarle queobtenga el bitstream desde un archivo
utilizando la clase FileReader.
Para construir un FileReader lo nico que tenemos que hacer es utilizar el constructor que
recibe el nombre de archivo o un objeto de la clase File representando el archivo que queremos
leer. Una vez que ya tenemos el FileReader debemos utilizarlo para construir un
BufferedReader, de la manera que se ve a la izquierda.
Una vez que tengamos el BufferedReader podemos utilizar varios mtodos que nos permiten
escribir a archivos de texto. El primero que vamos a ver es el mtodo read(), que nos devuelve
un int con el cdigo Unicode del carcter ledo, para poder convertir este cdigo en un carcter
debemos utilizar un cast a char. Para hacer un cast de un tipo de dato a otro tenemos que
poner la variable que queremos que reciba el valor, un smbolo de igual, el tipo de dato al que
queremos convertir y el valor que queremos convertir, como se ve en la imagen de la izquierda.
El otro mtodo del BufferedReader que nos va a ser muy til es el mtodo readLine(), este
mtodo nos permite leer todo un archivo mucho ms rpido y nos es muy til cuando queremos
obtener datos de un archivo de inicio ya que podemos leer una lnea cada vez y utilizarla de la
manera que nos convenga.
TcnicadeProgramacinOrientadaaObjetos 80
Al igual que cuando utilizamos el PrintWriter debemos cerrar el archivo al terminarlo de utilizar
utilizando el mtodo close() del BufferedReader ya que aunque en este caso no se pierden
datos, otros programas no van a poder utilizar el archivo hasta que lo cerremos.
Por ltimo vamos a darle un rpido vistazo a la clase File que nos es muy til siempre que
trabajamos con archivos.
El constructor de File recibe un String con la ruta del archivo, una vez que creamos el
objeto tipo File podemos utilizar los siguientes mtodos:
f.canRead(): Devuelve un boolean verdadero en caso de que se pueda leer el archivo,
falso en caso de que no se pueda leer.
f.canWrite(): Devuelve un boolean verdadero en caso de que se pueda escribir el
archivo, falso en caso de que no se pueda escribir.
f.delete(): Intenta borrar el archivo, devuelve true si pudo hacerlo, false en caso de que
no lo haya borrado.
f.deleteOnExit(): Borra el archivo al terminar el programa, muy til cuando
necesitamos un lugar para guardar muchos datos y no queremos saturar la memoria
porque nos permite crear un archivo temporal en el que se guarden los datos.
TcnicadeProgramacinOrientadaaObjetos 81
Para poder leer archivos de texto en J ava debemos crear un objeto de tipo
BufferedReader. BufferedReader es una clase que contiene mtodos predefinidos para
poder leer de una secuencia de bits.
Para poder guardar archivos de texto en J ava debemos crear un objeto de tipo
PrintWriter. PrintWriter es una clase que contiene mtodos predefinidos para meter
datos a una secuencia de bits.
Puedes hacer click en los nombres para ver el API que contiene muchos mtodos
tiles.
BufferedReader
El constructor que vamos a utilizar para crear un BufferedReader es:
BufferedReader fileIn =new BufferedReader(new
FileReader(fileName);
Ya que tenemos el objeto tipo BufferedReader podemos utilizar varios mtodos para
leer, l ms comn es: fileIn.readLine();
Este mtodo lee una lnea y la devuelve o devuelve null si llegamos al final del archivo
y no hay nada que leer.
Es importante recordar cuando trabajamos con archivos que cada que leemos o
escribimos a un archivo debemos hacerlo dentro de un try.
Un try es un manejador de excepciones, cuando sucede un error en la ejecucin de
nuestro programa ejecuta ciertas instrucciones dependiendo del tipo de error que
sucedi.
Otro mtodo muy importante es el mtodo: fileIn.read();
Este mtodo nos permite leer un solo carcter del flujo de datos. El mtodo regresa un
nmero (int) del 1 al 65535 si puede leer del archivo o regresa -1 si no.
TcnicadeProgramacinOrientadaaObjetos 82
try {
BufferedReader fileIn =new BufferedReader(
new FileReader(fileName));
int i =fileIn.read(); //Iniciamos una variable a la que
//vamos a leer
char c =(char) i; //Como lo que leimos es un int debemos
// hacer un cast a char
}catch (IOException ioe) {
}catch (FileNotFoundException fnfe) {
}
PrintWriter
El constructor que vamos a utilizar para crear un PrintWriter es:
PrintWriter fileOut =new PrintWriter(new FileWriter(fileName);
Ya que tenemos el objeto PrintWriter podemos utilizar varios mtodos para escribir, los
ms comunes son:
fileOut.print(String);
fileOut.println(String);
Estos dos mtodos reciben un String y lo imprimen en el archivo, el segundo mtodo le
pone un carcter de fin de lnea al final.
Al igual que al leer debemos recordar utilizar un try. Cuando utilizamos el PrintWriter
todo entra a un buffer y una vez que terminemos de escribir los datos debemos
recordar utilizar el mtodo flush() del PrintWriter para escribir todo al archivo.
Al terminar de usar el archivo tambin debemos recordar que debemos cerrarlo
mediante el mtodo close() del PrintWriter.
String fileName ="Texto.txt";
PrintWriter fileOut =null;
try {
fileOut =new PrintWriter(new FileWriter(fileName));
String s ="Una linea de texto";
fileOut.println(s);
fileOut.flush();
}catch (IOException ioe) {
System.out("Error, disco protegido contra lectura");
}catch (FileNotFoundException fnfe) {
System.out("Error, no se encuentra el archivo");
}finally {
if (fileIn !=null) {
try {
fileIn.close();
}catch (IOException ioe) {
}
}
}
TcnicadeProgramacinOrientadaaObjetos 83
Ejemplos:
Caso 01
package prjarchivos;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.J Frame;
public class ArchivoApp2{
public static void main(String[] args) {
FileReader entrada=null;
StringBuffer str=new StringBuffer();
try {
entrada=new FileReader("VERARCHI01.txt");
int c;
while((c=entrada.read())!=-1){
str.append((char)c);
}
System.out.println(str);
System.out.println("--------------------------------------");
}
catch (IOException ex) {
System.out.println("El archivo no existe");
}
finally{
//cerrar los flujos de datos
if(entrada!=null){
try{
entrada.close();
}
catch(IOException ex){}
}
System.out.println("el bloque finally siempre se ejecuta");
}
}
}
Caso 02
package prjrarchivos2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.J OptionPane;
import pckPrincipal.FrmLlamar;
TcnicadeProgramacinOrientadaaObjetos 84
public class Class1 extends FrmLlamar{
public Class1() {
String nombre=" VERARCHI02.txt";
BufferedReader entrada;
try {
entrada =new BufferedReader(new FileReader(nombre));
String texto="";
while(true){
texto =entrada.readLine();
//J OptionPane.showMessageDialog(null,texto);
if(texto==null) break;
System.out.println(texto);
this.txt.append(texto+"\n");
}
entrada.close();
this.setVisible(true);
}catch(FileNotFoundException f){
}catch (IOException e) {
// TODO
}
}
}
Caso 03
package pckClase;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;
import javax.swing.J Frame;
import javax.swing.J OptionPane;
import pckAplica.FrmArchivo3;
public class ClassAr3 {
public String datos[]=new String[50];
public int i,pos,tam;
public ClassAr3() {
}
public void llamar(){
String subStr="";
String nombre="ArchivoApp2.txt";
BufferedReader entrada;
try {
entrada =new BufferedReader(new FileReader(nombre));
TcnicadeProgramacinOrientadaaObjetos 85
String texto="";
while(true){
texto =entrada.readLine();
/* tam=texto.length();
for(int g=0;g<tam;++g){
String j=String.valueOf(texto.charAt(g));
//J OptionPane.showMessageDialog(null,j);
if(j.equals(",")){
datos[i]=subStr;
++i;
}
else
subStr=subStr+j;
} */
if(texto==null) break;
System.out.println(texto);
}
entrada.close();
}catch(FileNotFoundException f){
}catch (IOException e) {
// TODO
}
}
}
TcnicadeProgramacinOrientadaaObjetos 86
TcnicadeProgramacinOrientadaaObjetos 87
public void setApe(String ape) {
this.ape =ape;
}
public int getP() {
return p;
}
public void setP(int p) {
this.p =p;
}
public int getReg() {
return reg;
}
public void setReg(int reg) {
this.reg =reg;
}
public String getCod() {
return cod;
}
public void setCod(String cod) {
this.cod =cod;
}
}// fin de la clase encapsulada
package pckLogico;
public class ClassMetodos {
int x=11,dv,pag;
GregorianCalendar formato=new GregorianCalendar();
int devNV(char letra){
switch(letra){
case 'a':case 'A':dv=1;break;
case 'e':case 'E':dv=2;break;
case 'i':case 'I':dv=3;break;
case 'o':case 'O':dv=4;break;
case 'u':case 'U':dv=5;break;
default : dv=x;
++x;
}
return(dv);
}
public String genera(String cadN,String cadA){
int ao=formato.get(formato.YEAR);
int mes=formato.get(formato.MONTH)+1;
//Datos del Nombre
char n1=cadN.charAt(0);
TcnicadeProgramacinOrientadaaObjetos 88
int largoN=cadN.length();
char n2=cadN.charAt(largoN-1);
//datos del Apellido
char a1=cadA.charAt(0);
int largoA=cadA.length();
char a2=cadA.charAt(largoA-1);
String cad=(""+ao+devNV(n1)+devNV(n2)+devNV(a1)+devNV(a2)+mes);
return(cad);
}
public int pago(int index){
switch(index){
case 1: pag=850;break;
case 2: pag=750;break;
case 3: pag=600;break;
case 4: pag=700;break;
case 5: pag=750;break;
case 6: pag=680;break;
}
return(pag);
}
}// fin de la clase Metodos
Uso de los paneles: disee todo este formato
package pckPaneles;
public class pnlContenido extends JPanel {
ClassMetodos llamar=new ClassMetodos();
ClassEncapsulada atri=new ClassEncapsulada();
ClassArchivo datos=new ClassArchivo();
int dv,c=1,x=11;
String titulos[]={"Registro","Codigo","Nombres","Apellidos","Categoria","Pago"};
String contenido[][]={};
private J TextField TXTNOM =new J TextField();
private J TextField TXTAPE =new J TextField();
private J ComboBox cboespe =new J ComboBox();
private J Label lblp =new J Label();
private J Separator jSeparator1 =new J Separator();
private J Separator jSeparator2 =new J Separator();
private J Button btnaadir =new J Button();
private J Button btnsalir =new J Button();
private J ScrollPane jScrollPane1 =new J ScrollPane();
private J Table jTable1 =new J Table();
private DefaultTableModel modtbdatos =new DefaultTableModel(contenido,titulos);
private J Button btnLsitaAr =new J Button();
*******************
private void jbInit() throws Exception {
************************
TcnicadeProgramacinOrientadaaObjetos 89
modtbdatos.setColumnCount(6);
***************************
jTable1.setModel(modtbdatos);
cboespe.addItem("Seleccionar cat");
cboespe.addItem("Sistemas");
cboespe.addItem("Redes");
cboespe.addItem("Diseo Grafico");
cboespe.addItem("Contabilidad");
cboespe.addItem("Administracion");
cboespe.addItem("Otros");
}
private void btnaadir_actionPerformed(ActionEvent e) {
atri.setReg(c);
x=11;
atri.setNom(TXTNOM.getText());
atri.setApe(TXTAPE.getText());
atri.setCod(llamar.genera(atri.getNom(),atri.getApe()));
Object
valores[]={atri.getReg(),atri.getCod(),atri.getNom(),atri.getApe(),cboespe.getSelectedItem(),atri.
getP()};
modtbdatos.addRow(valores);
datos.Grabar(atri.getReg(),atri.getCod(),atri.getNom(),atri.getApe(),atri.getCod(),atri.getP());
++c;
}
private void cboespe_actionPerformed(ActionEvent e) {
atri.setCod(cboespe.getSelectedItem().toString());
lblp.setText(""+atri.getP());
atri.setP(llamar.pago(cboespe.getSelectedIndex()));
}
private void btnListaAr_actionPerformed(ActionEvent e) {
Frmlectura x=new Frmlectura();
x.setVisible(true);
}
}//fin del panel contenido
TcnicadeProgramacinOrientadaaObjetos 90
// Panel Pie
package pckPaneles;
public class pnlPie extends JPanel {
GregorianCalendar formato=new GregorianCalendar();
************************
privatevoidjbInit()throwsException{
********************************
int dia=formato.get(formato.DAY_OF_MONTH);
int mes=formato.get(formato.MONTH)+1;
int ao=formato.get(formato.YEAR);
lblf.setText(""+dia+"/"+mes+"/"+ao);
lblf.setFont(new Font("Dialog", 1, 11));
int hora=formato.get(formato.HOUR_OF_DAY);
int min=formato.get(formato.MINUTE);
int seg=formato.get(formato.SECOND);
lblh.setFont(new Font("Dialog", 1, 11));
lblh.setText(""+hora+":"+min+":"+seg);
}
}//fin del panel pie
// estableciendo los paneles al Frame
package pckPresentacion;
public class FrmPresenta extends JFrame {
int dv=0;
ClassEncapsulada atri=new ClassEncapsulada();
GregorianCalendar formato=new GregorianCalendar();
private pnlPie pnlPie1 =new pnlPie();
private pnlContenido pnlEncabezado1 =new pnlContenido();
public FrmPresenta() {
try {
jbInit();
}catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize(new Dimension(400, 408));
this.setResizable(false);
this.setTitle("Usando Archivos");
TcnicadeProgramacinOrientadaaObjetos 91
TcnicadeProgramacinOrientadaaObjetos 92
Contenidos
- Definicin de la Clase Vector.
- Definicin de la Clase ArrayList.
- Diferencias entre ellas
- Mtodos de la clase Vector y ArrayList
- Aplicando atributos encapsulados usando estas clases
- Definicin de la la Clase Hashtable.
- Mtodos get y put
____________________________________________________________________________
Vector
Es una clase que permite crear matrices dinmicas, es decir matrices que varan en cantidad
de elementos durante la ejecucin del programa, lo cual no se puede hacer en java con la clase
Array que es la clase que generalmente se utiliza para crear matrices.
En un Vector, puedo agregar cualquier cosa, incluso puedo agregar diferentes tipos de objetos
a un mismo vector, esto se debe a que Vector almacena objetos de tipo Object que es la clase
base de J ava. Esto no puedo hacerlo con un Array ya que todos sus elementos deben ser del
mismo tipo.
Por este motivo, cuando accedo a un elemento de un Vector, debo moldearlo a su tipo
especfico de datos, de lo contrario obtendr un objeto de tipo Object.
La clase Enumeration se utiliza con un vector o mejor dicho, se crea a partir de la cantidad de
elementos de un vector, ya que lo nico que hace Enumeration es enumerar los elementos de
un vector. Enumeration lo nico que hace es recorrer los elementos de un vector hacia
adelante mediante el mtodo nextElement (), asegurando que nunca se pasar del ndice del
vector, esto lo hace mediante el mtodo hasMoreElements().
Solo para eso sirve Enumeration, pero asegura que no habr error por salirse del ndice del
vector. Este es un ejemplo de cmo utilizar ambas clases juntas:
TcnicadeProgramacinOrientadaaObjetos 93
Crear un vector
Para usar la clase Vector hemos de poner al principio del archivo del cdigo fuente la siguiente
sentencia import
import java.util.*;
import java.util.Vector;
Cuando creamos un vector u objeto de la clase Vector, podemos especificar su dimensin
inicial, y cuanto crecer si rebasamos dicha dimensin.
Tenemos un vector con una dimensin inicial de 20 elementos. Si rebasamos dicha
dimensin y guardamos 21 elementos la dimensin del vector crece a 25.
Al segundo constructor, solamente se le pasa la dimensin inicial.
Si se rebasa la dimensin inicial guardando 21 elementos, la dimensin del vector se
duplica.
El programador ha de tener cuidado con este constructor, ya que si se pretende
guardar un nmero grande de elementos se tiene que especificar el incremento de la
capacidad del vector, si no se quiere desperdiciar intilmente la memoria el ordenador.
Con el tercer constructor, se crea un vector cuya dimensin inicial es 10.
La dimensin del vector se duplica si se rebasa la dimensin inicial, por ejemplo,
cuando se pretende guardar once elementos.
Aadir elementos al vector
Hay dos formas de aadir elementos a un vector. Podemos aadir un elemento a continuacin
del ltimo elemento del vector, mediante la funcin miembro addElement.
Podemos tambin insertar un elemento en una determinada posicin, mediante
insertElementAt. El segundo parmetro o ndice, indica el lugar que ocupar el nuevo objeto.
Si tratamos de insertar un elemento en una posicin que no existe todava obtenemos una
excepcin del tipo ArrayIndexOutOfBounds. Por ejemplo, si tratamos de insertar un elemento
en la posicin 9 cuando el vector solamente tiene cinco elementos.
Vector VecDatos=new Vector(20, 5);
Vector VecDatos =new Vector(20);
Vector VecDatos =new Vector();
VecDatos.addElement(" uno" );
TcnicadeProgramacinOrientadaaObjetos 94
Ejemplo: Para insertar el string "tres" en la tercera posicin del vector v, escribimos
En la siguiente porcin de cdigo, se crea un vector con una capacidad inicial de 10 elementos,
valor por defecto, y se le aaden o insertan objetos de la clase String.
private void btnAgregar_actionPerformed(ActionEvent e) {
Vector vecDatos =new Vector();
vecDatos.addElement("Veronica");
vecDatos.addElement("William");
vecDatos.addElement("Sebastian");
vecDatos.addElement("Angie");
vecDatos.addElement("Victor");
vecDatos.addElement("Carlos");
vecDatos.addElement("Henrry");
vecDatos.addElement("Eduardo");
//vecDatos.insertElementAt("Tres", 2);
//se crea una enumeracion de acuerdo a los elementos del vector
Enumeration enume =vecDatos.elements();
//mientras queden elementos en la enumeracion
while(enume.hasMoreElements())
modLstDatos.addElement(enume.nextElement());
}
VecDatos.insertElementAt("tres", 2);
TcnicadeProgramacinOrientadaaObjetos 95
Para saber cuntos elementos guarda un vector, se llama a la funcin miembro size. Para
saber la dimensin actual de un vector se llama a la funcin miembro capacity.
Agregue esta 2 lneas al cdigo anterior.
Podemos eliminar todos los elementos de un vector, llamando a la funcin miembro
removeAllElements. O bien, podemos eliminar un elemento concreto, por ejemplo el que
guarda el string "tres".
Podemos eliminar dicho elemento, si especificamos su ndice.
Acceso a los elementos de un vector
El acceso a los elementos de un vector no es tan sencillo como el acceso a los elementos de
un array. En vez de dar un ndice, usamos la funcin miembro elementAt. Por ejemplo,
vecDatos.elementAt(4) sera equivalente a vecDatos [4], si vecDatos fuese un array.
Para acceder a todos los elementos del vector, escribimos un cdigo semejante al empleado
para acceder a todos los elementos de un array.
for(int i=0; i<v.size(); i++){
System.out.print(vecDatos.elementAt(i)+"\t");
}
Existe otra alternativa, que es la de usar las funciones del interface Enumeration. Este
interface declara dos funciones pero no implementa ninguna de ellas. Una Enumeration nos
permite acceder a los elementos de una estructura de datos de forma secuencial, como ya lo
hemos mostrado en el ejemplo anterior.
lblT.setText(" " +vecDatos.size());
lblD.setText(" " +vecDatos.capacity());
vecDatos.removeElement(" Angie" );
vecDatos.removeElementAt(2);
TcnicadeProgramacinOrientadaaObjetos 96
public interface Enumeration {
boolean hasMoreElements();
Object nextElement();
}
La funcin miembro elements de la clase Vector devuelve un objeto de la clase
VectorEnumerator que implementa el interface Enumeration y tiene que definir las dos
funciones hasMoreElements y nextElement.
final class VectorEnumerator implements Enumeration {
Vector vector;
int count;
VectorEnumerator(Vector vecDatos) {
vector =vecDatos;
count =0;
}
public boolean hasMoreElements() {
//...
}
public Object nextElement() {
//...
}
}
El objeto enum devuelto por la funcin miembro elements es de la clase VectorEnumerator, sin
embargo no podemos escribir
VectorEnumerator enum=vecDatos.elements();
porque VectorEnumerator no es una clase pblica. Como podemos ver en su definicin, no
tiene la palabra reservada public delante de class. Sin embargo, podemos guardar un objeto
de la clase VectorEnumerator en una variable enum del tipo Enumeration, por que la clase
implementa dicho interface.
Enumeration enum=vecDatos.elements();
while(enum.hasMoreElements()){
System.out.print(enum.nextElement()+"\t");
}
TcnicadeProgramacinOrientadaaObjetos 97
Desde el objeto enum devuelto por la funcin miembro elements de la clase Vector llamamos a
las funciones miembro hasMoreElements y nextElement de la clase VectorEnumerator. La
funcin hasMoreElements devuelve true mientras haya todava ms elementos que se
puedan acceder en el vector v. Cuando se ha llegado al ltimo elemento del vector, devuelve
false. La funcin nextElement devuelve una referencia al prximo elemento en la estructura de
datos. Esta funcin devuelve una referencia a un objeto de la clase base Object, que el
programador precisar en ciertos casos, como veremos ms abajo, promocionar (casting) a la
clase adecuada.
Para buscar objetos en un vector se puede usar una Enumeration y hacer una comparacin
elemento por elemento mediante equals, tal como vemos en la siguiente porcin de cdigo
Algunos de los mtodos de la clase Vector se muestran a continuacin:
Vector ( )
Constructor: crea un vector inicialmente vaco
void addElement (Objet obj)
Inserta el objeto especificado al final del vector
void setElementAt (Object obj, int indce)
Inserta el objeto especficado en el vector en la posicin especficada
Object remove (int indce)
Elimina el objeto que se encuentra en la posicin especficada y lo regresa
boolean removeElement (Object obj)
Elimina la primera occurencia del objeto especficado en el vector
void removeElementAt (int indce)
Elimina el objeto especficado en el ndice del vector
void clear ( )
Elimina todos los objetos del vector
boolean contains (Object obj)
Enumeration enum=vecDatos.elements();
while(enum.hasMoreElements()){
String elemento=(String)enum.nextElement();
if(elemento.equals("William")){
lblEnc.setText("Encontrado William");
break;
}
}
TcnicadeProgramacinOrientadaaObjetos 98
TcnicadeProgramacinOrientadaaObjetos 99
Si se necesitan aadir valores de datos primitivos a un Vector se pueden utilizar las clases
conocidas como envoltorios que son: Integer, Long, Double y Float. Sus mtodos de
conversin respectivos son: intValue ( ), longValue ( ), doubleValue ( ) y floatValue ( ).
Ejercicio:
Complemente la siguiente clase, escribiendo las instrucciones necesarias donde se muestran
los subguiones(__), guate del ejemplo anterior:
import java.util.*;
/**
* Uso de las clases Vector e Integer
*/
public class EjercicioVector
{
public static void main ()
{
Vector vecDatos =new Vector ();
vecDatos.add (new Integer (1));
vecDatos.add (new Integer (3));
vecDatos.add (new Integer (5));
for (int i =0; i <v.size (); i++) {
Integer iI =(Integer) v.get (i);
ModLstDatos.addElement(iI.______________() +" ");
}
// Insertar un nuevo Objeto de tipo Integer cuyo valor sea 10
______________________
//El nuevo vector es
__________________
____________________
// Insertar un nuevo Objeto de tipo Integer cuyo valor sea 6 en la pos.3
System.out.println ("Se inserta un nuevo objeto cuyo valor es 6 en la posicin 3");
___________________________
//El nuevo vector es
_______________________________________
// Eliminar el objeto que contiene al Integer cuyo valor es 3
____________________
//El nuevo vector es
_______________________________
// Escribir el valor del segundo objeto
txtArea.append("El valor del segundo objeto es: " +_____________+ \n );
// Determinar el nmero de objetos del vector
txtArea.append ("El tamao del vector es: " +_____________+ \n );
// Eliminar el tercer objeto y escribir su valor
txtArea.append ("En la tercera posicin haba un: " +_____________+ \n );
TcnicadeProgramacinOrientadaaObjetos 100
TcnicadeProgramacinOrientadaaObjetos 101
La clase ArrayList
Las aplicaciones frecuentemente necesitan almacenar un grupo de datos en un slo objeto.
Los arrays sirven bien para este propsito, pero algunas veces necesitamos incrementar o
reducir dinmicamente el nmero de elementos del array, o hacer que contenga distintos tipos
de datos
Esto es comn entre las aplicaciones como las tiendas online. Un cliente aade una mercanca
a su carro de la compra, y detrs de la escena, los tems son almacenados y eliminados
automticamente.
Para esta clase de grupos de datos crecientes y menguantes, podemos usar la clase Vector , o
la reciente clase ArrayList del paquete java.util .
Un ArrayList contiene tantos objetos como necesitemos.
ArrayList tiene varios constructores, dependiendo de cmo necesitemos construir el ArrayList
Los siguientes dos constructores nos ayudarn a empezar:
Un objeto ArrayList slo contiene referencias a objetos. Para almacenar tipos primitivos como
double long o float ,
Si necesitamos circular a travs de los elementos del ArrayList , usamos la clase
Iterator y sus mtodos hasNext y next :
ArrayList es una de las muchas clases del Collection Framework , que proporciona un
conjunto de interfaces y clases bien-diseados para almacenar y manipular grupos de datos
como una sola unidad, una coleccin.
Es una Lista volcada en un Array. Se debe utilizar en lugar de Vector como almacenamiento
de objetos de propsito general. Permite un acceso aleatorio muy rpido a los elementos, pero
realiza con bastante lentitud las operaciones de insertado y borrado de elementos en medio de
la Lista. Se puede utilizar un ListIterator para moverse hacia atrs y hacia delante en la Lista,
pero no para insertar y eliminar elementos.
Ventajas
Un ArrayList es un array dinmico. No tiene restricciones de capacidad. Su tamao se ajusta
de forma dinmica.
ArrayList() construye un ArrayList con capacidad cero
por defecto, pero crecer segn le vayamos
aadiendo:
ArrayList al =new ArrayList();
ArrayList(int initialCapacity) construye un ArrayList
vaco con una capacidad inicial especificada:
ArrayList al2 =new ArrayList(5);
Iterator alIt =al.iterator();
while (alIt.hasNext()){
ModLstDatos(alIt.next() +" ");
}
TcnicadeProgramacinOrientadaaObjetos 102
TcnicadeProgramacinOrientadaaObjetos 103
txtArea.append(\n+suma);
}
}
import java.util.*;
public class ArrayListString {
public static void main(String[] args) {
ArrayList Saludo =new ArrayList();
Saludo.add("Sise");
Saludo.add("te");
Saludo.add("da la");
Saludo.add("Bienvenidaa");
Saludo.add("..");
for (int i=0;i<Saludo.size();i++)
Object objecto =Saludo.get(i);
String cadena =objecto.toString();
cadena =cadena.toUpperCase();
txtSalida.append(cadena+" ");
}
}
Ms Mtodos de ArrayList
void set(index, obj): Sustituye el elemento en la posicin index por el objeto obj.
(index tiene que ser entre 0 y size()-1) dentro del ArrayList, sustituyendo el elemento
previamente almacenado a la posicin N. Es equivalente a A[N] =obj para un array A.
Object remove(index) -- Elimina el elemento a la posicin index (index entre 0 y size()-1).
ArrayList remplaza a Vector y Iterator remplaza a Enumeration:
Se puede crear un objeto ArrayList y moldearlo a una Collection. Al utilizar mtodos de
Collection, cualquier objeto de una clase derivada de Collection debera funcionar, pero se crea
un ArrayList porque es el caballo de batalla de las colecciones y viene a tomar el relevo al
Vector.
El mtodo add(), como su nombre sugiere, coloca un nuevo elemento en la coleccin. Sin
embargo, la documentacin indica claramente que add() "asegura que la coleccin contiene el
elemento indicado". Esto es para que un Set tenga significado, ya que solamente aadir el
elemento si no se encuentra en la coleccin. Para un ArrayList, o cualquier otra lista ordenada,
add() significa siempre "colocarlo dentro".
Todas las colecciones pueden producir un Iterator invocando al mtodo iterator(). Un Iterator
viene a ser equivalente a una Enumeration, a la cual reemplaza, excepto en los siguientes
puntos:
Utiliza un nombre que est histricamente aceptado y es conocido en toda la literatura de
programacin orientada a objetos
Utiliza nombres de mtodos ms cortos que la Enumeration: hasNext() en vez de
hasMoreElements(), o next() en lugar de nextElement().
TcnicadeProgramacinOrientadaaObjetos 104
Crear el siguiente Caso utilizando la clase primita ArrayList.
// Clase Encapsulada
package PckLogico;
public class ClassEncapsulada {
String nombre,apellido,condicion;
int reg,nota1,nota2,nota3,nota4;
double promedio;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre =nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido =apellido;
}
public int getNota1() {
return nota1;
}
public void setNota1(int nota1) {
this.nota1 =nota1;
}
public int getNota2() {
return nota2;
}
public void setNota2(int nota2) {
this.nota2 =nota2;
}
TcnicadeProgramacinOrientadaaObjetos 105
public int getNota3() {
return nota3;
}
public void setNota3(int nota3) {
this.nota3 =nota3;
}
public int getNota4() {
return nota4;
}
public void setNota4(int nota4) {
this.nota4 =nota4;
}
public String getCondicion() {
return condicion;
}
public void setCondicion(String condicion) {
this.condicion =condicion;
}
public int getReg() {
return reg;
}
public void setReg(int reg) {
this.reg =reg;
}
public double getPromedio() {
return promedio;
}
public void setPromedio(double promedio) {
this.promedio =promedio;
}
}//fin de la clase encapsulada
// ClassMetodos
package PckLogico;
import java.util.ArrayList;
public class ClassMetodo{
static ArrayList Registros;
public ClassMetodo(){
Registros=new ArrayList();
}
public void AddRegistro(ClassEncapsulada Datos){
Registros.add(Datos);
}
public ClassEncapsulada getEncapsulada(int i){
return((ClassEncapsulada)Registros.get(i));
}
public int tamao(){
return(Registros.size());
}
}
TcnicadeProgramacinOrientadaaObjetos 106
//ClassEjecutar
package PckPrincipal;
import PckPresentacion.FrmAcceso;
import PckPresentacion.FrmDatos;
public class ClassEjecutar {
public static void main(String[] args) {
FrmAcceso prin=new FrmAcceso();
prin.setVisible(true);
// Cerrar una ventana
}
}
// uso del FRAME
public class FrmDatos extends JFrame {
//inicializacion
ClassEncapsulada atri;
ClassMetodo metodos;
String valores[][]={};
Stringnombres[]={"Reg","Nombre","Apellido","Nota 1","Nota 2","Nota 3","Nota 4",
"Promedio","Condicion"};
int R=1;
**********************************
**********************************
private void jbInit() throws Exception {
**********************************
**********************************
**********************************
**********************************
lblreg.setText(""+R);
atri=new ClassEncapsulada();
metodos=new ClassMetodo();
}
void datos(){
atri.setNombre(txtnom.getText());
atri.setApellido(txtape.getText());
atri.setNota1(Integer.parseInt(txtN1.getText()));
atri.setNota2(Integer.parseInt(txtN2.getText()));
atri.setNota3(Integer.parseInt(txtN3.getText()));
atri.setNota4(Integer.parseInt(txtN4.getText()));
atri.setPromedio((atri.getNota1()+atri.getNota2()+atri.getNota3()+atri.getNota4())/4.0);
lblPromedio.setText(""+atri.getPromedio());
if(atri.getPromedio()>=10.5) atri.setCondicion("Aprobado");
else atri.setCondicion("Desaprobado");
lblCondicion.setText(atri.getCondicion());
}
TcnicadeProgramacinOrientadaaObjetos 107
void Eliminar(){
int fila=tbl_d.getSelectedRow();
modTDatos.removeRow(fila);
}
private void btnAgregar_actionPerformed(ActionEvent e) {
datos();
Object valores[]={R,atri.getNombre(),atri.getApellido(),atri.getNota1(),atri.getNota2(),
atri. getNota3(),atri.getNota4(),atri.getPromedio(),atri.getCondicion()};
modTDatos.addRow(valores);
++R;
}
private void jButton1_actionPerformed(ActionEvent e) {
//Ir al Inicio del registro de la Tabla
tbl_d.setRowSelectionInterval (0,0);
}
private void jButton2_actionPerformed(ActionEvent e) {
//Ir al Siguiente Registro de la Tabla
if ( tbl_d.getSelectedRow() !=0 ) {
tbl_d.setRowSelectionInterval (tbl_d.getSelectedRow()+1, tbl_d.getSelectedRow() +1);
}
}
private void jButton3_actionPerformed(ActionEvent e) {
//Ir al Anterio de la Tabla
if ( tbl_d.getSelectedRow() !=0 ) {
tbl_d.setRowSelectionInterval (tbl_d.getSelectedRow()-1, tbl_d.getSelectedRow() -1);
}
}
private void jButton4_actionPerformed(ActionEvent e) {
//Implementa para ir al final del registro de la tabla
}
private void btnSalir_actionPerformed(ActionEvent e) {
System.exit(0);
}
private void btnEliminar_actionPerformed(ActionEvent e) {
Eliminar();
}
private void btnBuscar_actionPerformed(ActionEvent e) {
/* Implementa Este boton
}
}// fin del Frame
TcnicadeProgramacinOrientadaaObjetos 108
//Frame Acceso
private void btnAceptar_actionPerformed(ActionEvent e) {
String Nombre, clave;
Nombre=txtNombre.getText();
clave=txtClave.getText();
if(Nombre.equalsIgnoreCase("SISE")&&clave.equalsIgnoreCase("2010")){
FrmDatos prin=new FrmDatos();
prin.setVisible(true);
this.dispose();
}
}
TcnicadeProgramacinOrientadaaObjetos 109
Contenidos
- Uso de mens(J Menu)
- J ProgressBar,
- J ColorChooser, J FileChooser,
- InternalFrame
- Implementacin de Libreras
- Creacin de Archivos J ar Ejecutables
____________________________________________________________________________
Mens
Un men en una aplicacin no es ms que un MenuBar en el que hay varios mens.
Pensemos en un programa cualquiera con las voces de men File Edit y Help. Estas tres voces
en J ava son unos objetos de la clase Men y se tienen que aadir a un objeto de la clase
MenuBar que se une a la ventana. Cada men tiene varias voces. Por ejemplo, el men
Archivo tendr las voces: Abrir, Cerrar, Guarda y Salir. stos en J ava son unos objetos de la
clase MenuItem (o tambin Men si incluyen otros submens).
Por lo tanto, si a una aplicacin le quisieramos aadir un men tendramos hacer las siguientes
cosas siguiendo un rden cualquiera:
Crear los objetos MenuItem
Crear los objetos men y pegarles los MenuItem
Crear una MenuBar y pegarles los Mens
Adems, como siempre, tenemos que escribir unos gestores para los sucesos de los mens y
asociarlos a los mens.
Los sucesos de los MenuItem son los que tenemos que gestionar nosotros a diferencia de los
sucesos de los mens que los gestiona el sistema. Mientras los segundos sirven para que
aparezcan y desaparezcan las voces del men, los primeros son los clicks sobre la orden
correspondiente al Item.
Por lo tanto, para stos tendremos que escribir unos ActionListener, como para los botones.
Realmente no son otra cosa que unos botones especiales. Los constructores son tres:
TcnicadeProgramacinOrientadaaObjetos 110
TcnicadeProgramacinOrientadaaObjetos 111
TcnicadeProgramacinOrientadaaObjetos 112
J FileChooser
JFileChooser es una clase java que nos permite mostrar fcilmente una ventana para la
seleccin de un fichero.
Si queremos abrirlo para leer el fichero, podemos llamarlo as
A la vuelta, en seleccion tendremos
JFileChooser.CANCEL_OPTION Si el usuario le ha dado al botn cancelar.
JFileChooser.APPROVE_OPTION Si el usuario le ha dado al botn aceptar
JFileCHooser.ERROR_OPTION Si ha ocurrido algn error.
Comprobando que se ha dado al botn aceptar, podemos obtener el fichero seleccionado por
el usuario as
Para seleccionar un fichero para guardar datos, el mecanismo es igual, pero se llama al
mtodo showSaveDialog()
La nica diferencia entre uno y otro es la etiqueta del dilogo y de los botones. Uno pondr
"Abrir" y otro "Guardar"
Filtrar los ficheros visibles
Si no queremos que el JFileChooser muestre todos los ficheros del directorio, podemos
aadirle un filtro. Bsicamente hay que hacer una clase que herede de FileFilter y definir el
mtodo accept(). Este mtodo recibe un parmetro File y nosotros debemos decidir si pasa o
no el filtro, devolviendo true o false. Por ejemplo, si slo queremos ver fichero .jpg, podemos
hacer este filtro.
J FileChooser fileChooser =new J FileChooser();
int seleccion =fileChooser.showOpenDialog(areaTexto);
if (seleccion ==J FileChooser.APROVE_OPTION){
File fichero =fileChooser.getSelectedFile();
// Aqu debemos abrir y leer el fichero.
...
}
J FileChooser fileChooser =new J FileChooser();
int seleccion =fileChooser.showSaveDialog(areaTexto);
if (seleccion ==J FileChooser.APPROVE_OPTION){
File fichero =fileChooser.getSelectedFile();
// Aqu debemos abrir el fichero para escritura
// y salvar nuestros datos.
...
}
TcnicadeProgramacinOrientadaaObjetos 113
Debemos definir ambos mtodos. La descripcin puede ser cualquier cadena de texto que nos
sirva como descripcin del filtro. Finalmente, debemos pasar este filtro al J FileChooser
fileChooser.setFilter(new FiltroDeJ PG());
Sin embargo, una de las bondades ofrecidas por el J DK 1.6, es el ahorro en la codificacin de
una clase filtro, pues este, ya viene con una incluida a la cual solo necesitamos invocarla, la
sintaxis es la siguiente:
Tenes definir un FileFilter , es decir, creas una clase que herede de FileFilter y le das las
propiedades que deseas. Por ejemplo:
Import javax.swing.filechooser.FileFilter;
...
public class FiltroDeJ PG extends FileFilter{
public boolean accept (File fichero) {
if (tieneExtensionJ PG (fichero))
return true;
else
return false;
}
public String getDescription() {
return ("Filtro J PGs");
}
}
J FileChooser jf =new J FileChooser();
FileNameExtensionFilter filter =new
FileNameExtensionFilter("J PG & GIF", "jpg", "gif");
jf.setFilter(filter);
J FileChooser chooser =new J FileChooser();
ExampleFileFilter filter =new ExampleFileFilter();
File fichero =null;
filter.addExtension("txt");
filter.addExtension("bat");
filter.setDescription("Ficheros de texto");
chooser.setFileFilter(filter);
int returnVal =chooser.showOpenDialog(this);
if(returnVal ==J FileChooser.APPROVE_OPTION)
fichero =chooser.getSelectedFile();
TcnicadeProgramacinOrientadaaObjetos 114
Si queres trabajar con directorios tenes que cambiar el modo de seleccin usando la constante
J FileChooser.DIRECTORIES_ONLY. El modo de seleccin tambin puede ser cambiado para
permitir elegir mas de un fichero o directorio a la vez:
chooser.setFileSelectionMode(J FileChooser.DIRECTOR IES_ONLY);
TcnicadeProgramacinOrientadaaObjetos 115
Contenidos
Threads
____________________________________________________________________________
Una thread es un nico flujo de contrrol dentro de un programa. Algunnaas veces es llammado
contexto de ejecucin porque cada thread debe tenner sus propios recurssos, como el
prrogram counter y el stack de ejecucin, como el contexto dee ejecucin. Sin embargo, toda
thread en un programa aun comparte muchos recursos, tales como espacio de memoria y
archivvos abiertos. Threads tambien son llamadas procesos livianos (lightweight prrocess).
Comparticin de datos
Todos los hilos de proceso que pertenecen a un mismo proceso comparten un rea comn de
datos que sirve para intercambiar informacin entre ellos. No es necesario acudir a tcnicas de
comunicacin entre procesos tales como paso de mensajes, ya que todos los hilos son
capaces de acceder directamente a los datos compartidos.
Por otro lado, la conmutacin entre hilos de un mismo proceso es muy rpida, puesto que la
cantidad de informacin que ha de ser salvada y/o restaurada por el sistema es mucho menor.
Por eso, cuando se trata con hilos siempre se habla de cambios de contexto ligeros, en
contraposicin a los cambios de contexto pesados, que implican el manejo de procesos.
TcnicadeProgramacinOrientadaaObjetos 116
Ejemplo 01
Crear una Aplicacin que presente la hora del sistema usando hilos.
public class PanelReloj extends JPanel{
J Label reloj;
public PanelReloj(){
reloj=new J Label("", J Label.CENTER);
reloj.setForeground(Color.blue);
reloj.setFont(new Font("Arial", Font.BOLD, 30));
add(reloj, BorderLayout.CENTER);
MiReloj hilo=new MiReloj(reloj);
hilo.start();
try {
jbInit();
}catch (Exception e) {
e.printStackTrace();
}
}
}
public class MiReloj extends Thread{
J Label lblReloj;
// constructor
public MiReloj(J Label lblReloj){
this.lblReloj=lblReloj;
}
// puesta en marcha del hilo
public void run() {
while(true) {
Date hoy=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("hh:mm:ss");
lblReloj.setText(sdf.format(hoy));
try {sleep(1000); }catch (Exception ex) {}
}
}
}
TcnicadeProgramacinOrientadaaObjetos 117
TcnicadeProgramacinOrientadaaObjetos 118
p.add(barrera);
add(p, BorderLayout.CENTER);
add(b, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
lblJ 1.setLocation(0, lblJ 1.getLocation().y);
lblJ 2.setLocation(0, lblJ 2.getLocation().y);
ClassCarreraHilo st1=new ClassCarreraHilo(lblJ 1, this);
ClassCarreraHilo st2=new ClassCarreraHilo(lblJ 2, this);
st1.start();
st2.start();
}
}
// creacin de la clase Hilo
class ClassCarreraHilo extends Thread{
J Label eti;
PanelCarrera p;
//contructor de la clase
public ClassCarreraHilo(JLabel eti, PanelCarrera p){
this.eti=eti;
this.p=p;
}
// meto de inicializacion de la clase Threads
public void run() {
int c1, c2;
while(true){
//usando un un Try
try {
//usando sleep de la clase threads
sleep((int)(Math.random() * 1000));
c1=p.lblJ 1.getLocation().x;
c2=p.lblJ 2.getLocation().x;
if(c1<290 && c2<290){
eti.setLocation(eti.getLocation().x +10, eti.getLocation().y);
//usando el panel
p.repaint();
}
else break;
}catch (InterruptedException e) {}
}
TcnicadeProgramacinOrientadaaObjetos 119
TcnicadeProgramacinOrientadaaObjetos 120
Ejemplo 03
Muestre la palabra SISEpuede cada cierto tiempo
public class ClassBlink implements Runnable {
Thread Blink=new Thread(this);
J Label tiempo=new J Label();
public ClassBlink() {
J Frame ventana =new J Frame("Visualizar Palabra");
ventana.setSize(250,100);
ventana.setVisible(true);
ventana.add(tiempo);
//Blink=new Thread(this);
Blink.start();
try {
jbInit();
}catch (Exception e) {
e.printStackTrace();
}
}
public void run(){
try {
while(true){
tiempo.setText("Sise puede..");
Blink.sleep(1000);
tiempo.setText(" ");
Blink.sleep(1000);
}
}catch (InterruptedException ex) {
System.out.println("Error...");
}
}
public static void main(String[] args) {
new ClassBlink();
}
private void jbInit() throws Exception {
tiempo.setBackground(new Color(0, 0, 165));
tiempo.setForeground(new Color(247, 255, 214));
tiempo.setOpaque(true);
tiempo.setFont(new Font("Dialog", 1, 21));
}
}
TcnicadeProgramacinOrientadaaObjetos 121
Proyecto Final: Caso Practico.
Crear un Proyecto final donde aplique la Tecnica de programacin orientada a Objetos
(herencias, sobrecarga de mtodos, encapsulamiento), uso de mtodos, paneles establecer
archivos, uso de imgenes, hilo para el reloj activo, etc.
Todos los datos estarn guardados dentro de un Archivo llama Datos.txt
La estructura a trabajar seria:
Agregue al Proyecto una Interface llamada intImpleMetodoso en el Paquete pckInterface
donde defina todos los metodos a utilizar por el proyecto
TcnicadeProgramacinOrientadaaObjetos 122
Ademas Agregue 2 Frame en la capa Presentacion:
Para el Acceso de Usuario: Que estarn registrados dentro un Archivo.
Para el reporte de Datos: donde mostrara, el total de sueldos desembolsados por la
empresa, total de descuentos, aumentos y netos, cuantos tuvieron aumentos y cuantos
descuentos
Presentacin Final
Panel Encabezado
Panel Pie: use la Clase GregorianCalendar y Hilos
TcnicadeProgramacinOrientadaaObjetos 123