Cibertec - Manual Java (2do Ciclo)
Cibertec - Manual Java (2do Ciclo)
Cibertec - Manual Java (2do Ciclo)
Estructura de
Datos - TI
Ciclo: 2014 - 1
Mendo Paz
CARRERAS PROFESIONALES
CIBERTEC
NDICE
Presentacin
Red de contenidos
Sesiones de aprendizaje
UNIDAD DE APRENDIZAJE 1
SEMANA 1
SEMANA 2
7
13
UNIDAD DE APRENDIZAJE 2
SEMANA 3
21
SEMANA 4
SEMANA 5
37
SEMANA 6
58
SEMANA 7
: Semana Integradora
SEMANA 8
85
SEMANA 9
90
UNIDAD DE APRENDIZAJE 3
SEMANA 10
: Semana Institucional
SEMANA 11
99
UNIDAD DE APRENDIZAJE 4
SEMANA 12
114
SEMANA 13
118
relacin es-un.
SEMANA 14
124
abstractos.
UNIDAD DE APRENDIZAJE 5
SEMANA 15
SEMANA 16
137
dinmico
SEMANA 17
SEMANA 18
: Semana Integradora
SEMANA 19
ANEXO
: Caso Prctico
CIBERTEC
150
162
CARRERAS PROFESIONALES
CARRERAS PROFESIONALES
CIBERTEC
PRESENTACIN
MP
CARRERAS PROFESIONALES
CIBERTEC
RED DE CONTENIDOS
A
Manejo de arreglos
Arreglos Unidimensionales
Modificador static y referencia this
Arreglos Bidimensionales
Arreglo de Objetos
Herencia y Polimorfismo
Relacin es-un
Clases abstractas, Relacin tiene-un
Tcnicas de casting, Polimorfismo
Interfaces
Creacin de interfaces y Herencia mltiple
MP
CARRERAS PROFESIONALES
CIBERTEC
UNIDAD DE
APRENDIZAJE
1
SEMANA
1-2
ENCAPSULAMIENTO
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos crean clases clasificadas en paquetes, crean
objetos, emplean los modificadores de acceso: public y private as como la referencia
this en Java. Finalmente, entienden el concepto de encapsulamiento.
TEMARIO
Creacin de paquetes
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
// Constructor
public NombreClase(parmetros) {
}
CARRERAS PROFESIONALES
CIBERTEC
Si una Clase no define un Constructor, Java asume uno por defecto que no
tiene parmetros y que no realiza ninguna inicializacin especial.
public class NombreClase {
}
1.2 OBJETO
Un objeto es una instancia, es decir, un ejemplar de la Clase.
La JVM (Java Virtual Machine) carga a la memoria el cdigo de bytes de una Clase
en el primer momento en que la Clase sea mencionada durante la ejecucin del
programa. En adelante, la Clase cargada, ser utilizada como una fbrica de
objetos.
1.2.1 Declaracin
Un objeto se declara de la siguiente manera:
NombreClase
nombreObjeto;
CIBERTEC
CARRERAS PROFESIONALES
10
Ejercicio 2: Declare y crree un objeto de tipo Alumno e ingrese datos fijos a sus
atributos. Finalmente muestre los datos completos del alumno indicando tambin
su promedio.
void procesar() {
Alumno a = new Alumno();
a.codigo = 12345;
a.nombre = "Juan";
a.nota1 = 13;
a.nota2 = 15;
imprimir("cdigo
imprimir("nombre
imprimir("nota 1
imprimir("nota 2
imprimir("promedio
:
:
:
:
:
"
"
"
"
"
+
+
+
+
+
a.codigo);
a.nombre);
a.nota1);
a.nota2);
a.promedio());
}
2.1 PAQUETE
Un paquete es un conjunto de clases agrupadas que guardan una relacin entre s.
Los paquetes se declaran utilizando la palabra package seguida del nombre del
paquete. Esta instruccin tiene que colocarse al inicio del archivo y es la primera
sentencia en ejecutarse. Ejemplo:
package semana_01;
public class Alumno {
...
}
Al crearse un paquete se crea una carpeta con el mismo nombre del paquete. Si
coloca la misma instruccin package al inicio de otras clases lograr agrupar varias
clases en el mismo paquete. Todo nombre de package debe comenzar con una
letra minscula.
A partir de ahora debemos anteponer el nombre de la carpeta y a continuacin el
smbolo punto para poder acceder a la Clase desde afuera del paquete. Ejemplo:
semana_01.Alumno
a = new semana_01.Alumno();
CARRERAS PROFESIONALES
CIBERTEC
11
CIBERTEC
CARRERAS PROFESIONALES
12
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
13
15
14.0
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
19
18
18.5
CARRERAS PROFESIONALES
CIBERTEC
13
especificador
de acceso
public
private
protected
sin especificador
desde la
misma
Clase
si
si
si
si
desde el
exterior de la
misma Clase
si
no
no
no
La primera columna indica si la propia Clase tiene acceso al miembro definido por
el especificador de acceso. La segunda columna indica si las SubClases de la
Clase (sin importar dentro de que paquete se encuentren estas) tienen acceso a
los miembros. La tercera columna indica si las clases del mismo paquete que la
Clase (sin importar su parentesco) tienen acceso a los miembros. La cuarta
columna indica si todas las clases tienen acceso a los miembros.
3.2 ENCAPSULAMIENTO
Es la capacidad de ocultar los detalles internos del comportamiento de una clase y
exponer o dar a conocer slo los detalles que sean necesarios para el resto de
clases. Este ocultamiento nos permite restringir y controlar el uso de la Clase.
Restringir porque habrn ciertos atributos y mtodos privados o protegidos y
controlar porque habrn ciertos mecanismos para modificar el estado de nuestra
Clase, como por ejemplo los mtodos de acceso.
Ejercicio 6: Haga que las variables miembro de la Clase Alumno sean de uso
privado y declare sus respectivos mtodos de acceso set/get.
package semana_02;
public class Alumno {
// Atributos privados
private int
codigo, nota1, nota2;
private String nombre;
// Constructor
public Alumno(int cod, String nom, int n1, int n2) {
codigo = cod;
nombre = nom;
nota1 = n1;
nota2 = n2;
}
// Mtodos de acceso: set/get
public void setCodigo(int cod) {
codigo = cod;
}
public void setNombre(String nom) {
nombre = nom;
}
CIBERTEC
CARRERAS PROFESIONALES
14
{
:
:
:
:
:
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
13
15
14.0
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
19
18
18.5
CARRERAS PROFESIONALES
"
"
"
"
"
+
+
+
+
+
x.getCodigo);
x.getNombre());
x.getNota1());
x.getNota2());
x.promedio());
CIBERTEC
15
CIBERTEC
CARRERAS PROFESIONALES
16
// Operaciones
public double promedio() {
return (nota1 + nota2) / 2.0;
}
public Alumno mejorAlumno(Alumno x) {
if (this.promedio() > x.promedio())
return this;
else
return x;
}
}
Ejercicio 9: En el mtodo procesar declare, cree e inicialice los atributos de dos
objetos y visualice luego el nombre del alumno que obtiene el mejor promedio.
void procesar() {
Alumno a = new
b = new
listado(a);
listado(b);
Alumno mejor =
imprimir("Mejor
}
Alumno(12345,"Juan",13,15),
Alumno(67890,"Pedro",12,13);
a.mejorAlumno(b);
alumno : " + mejor.getNombre());
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
13
15
14.0
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
67890
Pedro
12
13
12.5
Mejor alumno :
Juan
Una buena enseanza es aquella que nos conduce hacia un gran cambio.
MP
CARRERAS PROFESIONALES
CIBERTEC
17
Ejercicios
CIBERTEC
CARRERAS PROFESIONALES
18
Grupo 1:
import java.awt.*;
package miPaquete;
class MiClase { }
Grupo 2:
package miPaquete;
import java.awt.*;
class MiClase { }
Grupo 3:
/*This is a comment */
package miPaquete;
import java.awt.*;
class MiClase { }
5. Indique qu grupo de instrucciones arrojar errores. Justifique su respuesta.
Grupo 1:
public class A {
public void A(int x) { }
}
A objeto = new A(777);
Grupo 2:
public class A {
}
A
Grupo 3:
public class A {
public A(int x) { }
}
A
6. Cree la Clase Empleado dentro del paquete semana_02 y declare los siguientes
atributos como privados: codigo (int), nombre (String), horas (int), tarifa (double) e
implemente lo siguiente:
a)
b)
c)
d)
e)
CARRERAS PROFESIONALES
CIBERTEC
19
CIBERTEC
CARRERAS PROFESIONALES
20
x = new Auto(20);
CARRERAS PROFESIONALES
CIBERTEC
21
UNIDAD DE
APRENDIZAJE
2
SEMANAS
3-4
ARREGLO UNIDIMENSIONAL
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos manipulan arreglos unidimensionales y
bidimensionales con tipos primitivos, as como arreglo de objetos en diversas aplicaciones.
Adicionalmente emplean el modificador static.
TEMARIO
Arreglos unidimensionales
Operaciones variadas.
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
22
1. ARREGLO UNIDIMENSIONAL
Un arreglo es un conjunto de elementos dispuestos uno a continuacin de otro, donde
cada elemento conserva su propio espacio (tamao en bytes).
El espacio ocupado por cada elemento es igual para todos y en l se pueden
almacenar diferentes valores pero del mismo tipo de dato.
El tipo ms simple de un arreglo es el lineal o unidimensional.
1.1 DECLARACION
Con la declaracin slo se crea la variable que hace referencia al arreglo y su
contenido es null.
Forma 1:
tipoDato nombreArreglo[];
Ejemplos:
int
n[];
double sueldos[];
String apellidos[];
Forma 2:
tipoDato[] nombreArreglo;
Ejemplos:
int[]
n;
double[] sueldos;
String[] apellidos;
1.2 DECLARACION E INICIALIZACION
Con la declaracin slo se crea la variable que hace referencia al arreglo y su
contenido es null.
Se puede inicializar un arreglo directamente siempre y cuando se haga al momento
de su declaracin.
tipoDato
Ejemplo:
int
n[] = {25,27,22,24,29,20,23};
Grficamente:
n
25
0
27
22
24
29
20
23
CARRERAS PROFESIONALES
CIBERTEC
23
n[pos] = valor;
Ejemplos:
n[0] = 73;
n[1] = 98;
n[2] = 65;
Grficamente:
n
73
0
98
65
24
29
20
23
CASO PRACTICO
Implemente la Clase Arreglo en el paquete semana_03 con el atributo privado:
- Arreglo lineal n de tipo int con los nmeros asignados: 25,27,22,24,29,20,23
Implemente como pblicos:
- Un Constructor que no haga nada
- Un mtodo longitud que retorne la capacidad mxima del arreglo n.
- Un mtodo obtener que reciba la posicin y retorne el nmero registrado en dicha
posicin.
- Un mtodo sumaNumeros que retorne la suma de los nmeros.
- Un mtodo promedio que retorne el promedio de los nmeros.
- Un mtodo numeroMenor que retorne el menor de los nmeros.
- Un mtodo numeroMayor que retorne el mayor de los nmeros.
- Un mtodo generar que remplace los nmeros actuales por otros aleatorios de 3
cifras.
Implemente como privado:
- Un mtodo aleatorio que reciba como parmetros los valores enteros mnimo y
mximo. Retorne luego un nmero al azar comprendido en ese intervalo cerrado.
CIBERTEC
CARRERAS PROFESIONALES
24
CARRERAS PROFESIONALES
CIBERTEC
25
java.awt.*;
java.awt.event.*;
javax.swing.*;
semana_03.Arreglo;
lblArreglo;
btnReportar, btnListar, btnGenerar;
txtS;
scpScroll;
CIBERTEC
CARRERAS PROFESIONALES
26
"
"
"
"
"
+
+
+
+
+
a.longitud());
a.sumaNumeros());
a.promedio());
a.numeroMenor());
a.numeroMayor());
a.obtener(i));
CARRERAS PROFESIONALES
CIBERTEC
27
2. OPERACIONES VARIADAS
2.1 DECLARACION Y RESERVA
Con la reserva le indicamos a Java la cantidad de elementos que va a tener el
arreglo (tamao del bloque de elementos) y la variable que hace referencia al
arreglo almacena la direccin del primer elemento del arreglo.
tipoDato
Ejemplo:
int
Grficamente:
n
0
0
0
1
0
2
0
3
0
4
Java, por defecto inicializa a cada uno de los elementos del arreglo. Un
arreglo de tipo int con el valor 0, un arreglo de tipo double con 0.0, un
arreglo de tipo boolean con false y un arreglo de tipo String con null.
Ejemplo:
int
int
Grficamente:
n
0
0
indice
0
1
0
2
0
3
0
4
0
5
0
6
0
7
CIBERTEC
CARRERAS PROFESIONALES
28
Grficamente:
n
25
0
27
1
22
2
24
3
29
4
20
5
23
6
8
indice
aux = n[pos1];
n[pos1] = n[pos2];
n[pos2] = aux;
Ejemplo:
aux = n[2];
n[2] = n[4];
n[4] = aux;
Grficamente:
n
25
0
CARRERAS PROFESIONALES
27
1
24
29
2
20
22
4
23
6
8
indice
CIBERTEC
29
Grficamente:
n
23
0
20
1
22
2
24
3
29
4
27
5
25
6
8
indice
CIBERTEC
CARRERAS PROFESIONALES
30
3. OPERACIONES ESPECIALES
3.1 HERRAMIENTA DE BUSQUEDA
Recibe un valor a buscar y recorre el arreglo de izquierda a derecha. Si lo
encuentra retorna la posicin de ubicacin. Si no lo encuentra retorna -1.
Ejercicio 9: Disee una herramienta de bsqueda que reciba un nmero y retorne
la posicin de ubicacin en el arreglo.
private int busqueda(int numero) {
for (int i=0; i<indice ; i++)
if (n[i] == numero)
return i;
return -1;
}
Ejemplo:
int
int
pos1 = busqueda(24);
pos2 = busqueda(123);
Grficamente:
n
23
0
20
1
22
2
24
3
29
4
27
5
25
6
8
indice
pos1 es iagual a 3
pos2 es iagual a -1
CARRERAS PROFESIONALES
CIBERTEC
31
Ejemplo:
eliminacion(3);
Grficamente:
n
23
0
20
1
22
2
29
3
27
4
25
5
25
6
7
indice
0
8
Ejercicio 12: Disee un mtodo que reciba un nmero y si existe lo elimine del
arreglo.
public void buscarEliminar(int numero) {
int pos = busqueda(numero);
if (pos != -1)
eliminacion(pos);
}
3.3 HERRAMIENTA DE INSERCION
Recibe una posicin del arreglo y un nuevo valor. En esa posicin se inserta el
nuevo valor. El contador ndice aumenta una unidad.
Ejercicio 13: Disee una herramienta que reciba una posicin, un nuevo nmero y
luego lo inserte en el arreglo en dicha ubicacin.
private void insercion(int pos, int numero) {
if (indice == n.length)
ampliacion();
for (int i=indice ; i>pos; i--)
n[i] = n[i-1];
n[pos] = numero;
indice++;
}
Ejemplo:
insercion(2,987);
Grficamente:
n
23
0
20
987
22
3
29
4
27
5
25
6
8
indice
Grficamente:
CIBERTEC
CARRERAS PROFESIONALES
32
20
0
987
1
22
2
29
3
27
4
25
5
23
6
8
indice
Grficamente:
n
23
0
20
987
22
3
29
4
27
5
25
6
8
indice
Ejemplo:
buscarPriorizar(29);
Grficamente:
n
29
0
23
1
20
2
987
3
22
4
27
5
25
6
8
indice
CARRERAS PROFESIONALES
CIBERTEC
33
Ejemplo:
buscarRezagar(20);
Grficamente:
n
29
0
23
987
22
3
27
4
25
5
20
6
8
indice
Ejercicio 18: Disee un mtodo que ordene los nmeros de menor a mayor.
public void ordenarEnAscenso() {
int aux;
for (int i=0; i<indice-1; i++)
for (int j=i+1; j<indice; j++)
if (n[i] > n[j]) {
aux = n[i];
n[i] = n[j];
n[j] = aux;
}
}
Grficamente:
n
20
0
22
1
23
2
25
3
27
4
29
5
987
6
8
indice
Ejercicio 19: Disee un mtodo que adicione un nmero al arreglo de tal manera
que siempre quede ordenado en ascenso.
public void adicionarOrdenando(int numero) {
int pos = 0;
while (pos < indice && n[pos] < numero)
pos++;
insercion(pos,numero);
}
Ejemplo:
adicionarOrdenando(24);
Grficamente:
n
20
0
22
1
23
2
25
24
3
27
5
29
6
987
8
9
indice
Grficamente:
n
20
0
CIBERTEC
22
1
23
2
24
3
25
4
27
5
29
987
8
ndice
CARRERAS PROFESIONALES
34
cadena
i
J a v a e s m e j o r
0
METODO
length()
10
11
12
caracter = cadena.charAt(8);
caracter 'm'
s = "Java";
b = cadena.equals(s);
b false
String
boolean
compareTo(String)
longitud = cadena.length();
longitud 13
String
boolean
equalsIgnoreCase(String)
char
equals(String)
DESCRIPCION
int
charAt(int)
s = "java Es MeJOR";
b = cadena.equalsIgnoreCase(s);
b true
String
s1 = "Java es lo mximo",
s2 = "Java es mejor",
s3 = "Java es ok";
int
i = cadena.compareTo(s1),
j = cadena.compareTo(s2),
k = cadena.compareTo(s3);
i 1 // cadena mayor que s1 alfabticamente
j 0 // cadena contiene lo mismo que s2
k -2 // cadena menor que s3 alfabticamente
CARRERAS PROFESIONALES
CIBERTEC
startsWith(String)
35
String
boolean
endsWith(String)
String
boolean
indexOf(char)
i = cadena.indexOf("va");
i 2
int
lastIndexOf(char)
lastIndexOf(char,int)
lastIndexOf(String)
lastIndexOf(String,int)
i = cadena.indexOf('e',6);
i 9
int
indexOf(String,int)
i = cadena.indexOf('e');
i 5
int
indexOf(String)
i = cadena.indexOf("ej",5);
i 9
String
int
toLowerCase()
String
CIBERTEC
s = "e";
i = cadena.lastIndexOf(s);
i 9
String
toUpperCase()
s = "mejor";
b = cadena.endsWith(s);
b true
int
indexOf(char,int)
s = "JavaX";
b = cadena.startsWith(s);
b false
CARRERAS PROFESIONALES
36
trim()
String
substring(int)
substring(int,int)
String
replace(char,char)
String.valueOf(boolean)
String.valueOf(int)
String.valueOf(long)
String.valueOf(float)
String.valueOf(double)
String.valueOf(Object)
String.valueOf(char[])
String.valueOf(char[],
int,int)
linea = "123;Ana;20;55.0",s[];
s = linea.split(";");
s[0] "123"
s[1] "Ana"
s[2] "20"
s[3] "55.0"
arreglo = cadena.toCharArray();
double
String
r = 3.1416;
s = String.valueOf(r);
s "3.1416"
CARRERAS PROFESIONALES
s = "biba el Per";
s = s.replace('b','v');
s "viva el Per"
char[]
= "Viva el Per",
= s1.substring(5),
= s1.substring(3,9);
"el Per"
"a el P"
String
toCharArray()
s1
s2
s3
s2
s3
String
split(String)
s = "
CiberJava
Lima ";
s = s.trim();
s "CiberJava
Lima"
c[] = {'C','i','b','e','r','J','a','v','a'};
s = String.valueOf(c,3,5);
s "erJav"
CIBERTEC
37
UNIDAD DE
APRENDIZAJE
2
SEMANA
5
ASIGNACION DIRECTA Y MODIFICADOR STATIC
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos manipulan arreglos unidimensionales con tipos
primitivos, as como arreglo de objetos en diversas aplicaciones. Adicionalmente emplean
el modificador static.
TEMARIO
Sobrecarga
Modificador static
Inicializadores estticos
Mtodos estticos
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
38
Ejemplo:
Cilindro
Cilindro
ra = new Cilindro(2,5);
rb;
ra
objeto Cilindro
rb
null
rb = ra;
Al asignar directamente la variable referencia ra a la variable referencia rb, se asigna
la direccin de memoria contenida en ra. A partir de este momento, tanto rb como ra
se refieren al mismo objeto.
ra
radio : 2
altura : 5
objeto Cilindro
rb
rb.setRadio(8);
Se cambia por 8 el valor del radio del objeto a travs de la variable referencia rb.
ra
radio : 8
altura : 5
objeto Cilindro
rb
imprimir("radio : " + ra.getRadio());
Muestra el valor del radio del objeto a travs de la referencia ra. Imprime 8.
CARRERAS PROFESIONALES
CIBERTEC
39
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
13
15
14.0
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
19
18
18.5
2. SOBRECARGA
La sobrecarga consiste en crear varios constructores o mtodos con el mismo nombre
siempre y cuando no coincidan sus parmetros en orden de tipologa.
Cuando una Clase implementa ms de un constructor, es probable que alguno de sus
atributos se quede sin inicializacin al momento de crear el objeto. Por tanto es
recomendable inicializar por defecto sus atributos.
Ejercicio 2: Implemente ms de un constructor en la Clase Alumno.
package semana_05;
public class Alumno {
// Atributos privados
private int
cdigo = 88888, nota1 = 88, nota2 = 88;
private String nombre = "ninguno";
// Constructores
public Alumno(int codigo, String nombre,
int nota1, int nota2) {
}
public Alumno(int codigo, String nombre) {
}
public Alumno() {
CIBERTEC
CARRERAS PROFESIONALES
40
{
new Alumno(12345,"Juan",13,15),
new Alumno(67890,"Pedro"),
new Alumno();
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
12345
Juan
13
15
14.0
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
67890
Pedro
88
88
88.8
cdigo
nombre
nota 1
nota 2
promedio
:
:
:
:
:
88888
ninguno
88
88
88.8
3. MODIFICADOR static
Se utiliza para crear variables de clase. Las variables de clase se crean en el momento
en que la Clase se carga a la memoria, lo que ocurre antes de crear cualquier objeto.
Esto significa que las variables de clase pueden existir an cuando no exista objeto de
dicha Clase.
Una variable de clase es una variable de la que se crea una sola copia para todos los
objetos de ese tipo. Para ello hay que preceder su declaracin con la palabra
reservada static. Este mecanismo permite implementar contadores y acumuladores
desde el interior de una Clase.
As como existen variables de clase existen mtodos de clase. Para declarar un
mtodo de clase hay que anteponer a su tipo la palabra static.
Un mtodo de clase puede operar nicamente sobre variables de clase y/o mtodos
de clase y no puede usar la referencia this.
Se puede acceder a un mtodo static a travs de un objeto de la Clase o mediante el
nombre de la Clase.
Ejercicio 4: Adicione una variable que cuente la cantidad de objetos creados.
CARRERAS PROFESIONALES
CIBERTEC
41
package semana_05;
public class Alumno {
// Variable de clase
private static int cantidad = 0;
// Constructor
public Alumno(int codigo, String nombre,
int nota1, int nota2) {
cantidad++;
}
}
Ejercicio 5: En el mtodo procesar declare, cree e inicialice tres objetos de tipo
Alumno y visualice la cantidad de objetos creados.
void procesar()
Alumno a =
b =
c =
{
new Alumno(12345,"Juan",13,15),
new Alumno(67890,"Pedro",16,17),
new Alumno(38214,"Mara",14,20);
" + Alumno.getCantidad());
# objetos creados :
}
Este bloque de cdigo se utiliza para darle valores iniciales a las variables estticas.
Tambin se utilizan para invocar a mtodos nativos, es decir, mtodos escritos por
ejemplo en lenguaje C. En una Clase se pueden definir varios inicializadores estticos,
los cuales se ejecutan en el orden en el que han sido definidos.
Ejercicio 6: Inicialice la variable de clase cantidad a travs de un inicializador static.
CIBERTEC
CARRERAS PROFESIONALES
42
package semana_05;
public class Alumno {
// Variable de clase
private static int cantidad;
// Inicializador static
static {
cantidad = 0;
}
}
3.2 CREACION DE LIBRERIAS
Una aplicacin interesante donde empleamos Mtodos de Clase es cuando creamos
una librera, es decir, una Clase que contenga mtodos a los cuales podemos invocar
desde cualquier otra Clase de un proyecto sin necesidad de crear un objeto.
Ejercicio 7: Implemente en la Clase Librera un mtodo de clase que reciba dos
nmeros enteros y retorne un valor entero al azar comprendido en ese intervalo
cerrado.
package semana_05;
public class Libreria {
// Constructor
public Libreria() {
}
// Mtodo de clase
public static int aleatorio(int min, int max) {
return (int)((max - min + 1) * Math.random()) + min;
}
}
Ejercicio 8: En un mtodo procesar muestre tres nmeros enteros aleatorios de una,
dos y tres cifras respectivamente.
void procesar() {
imprimir("# aleatorio de 1 cifra : " +
Libreria.aleatorio(0,9));
imprimir("# aleatorio de 2 cifras : " +
Libreria.aleatorio(10,99));
imprimir("# aleatorio de 3 cifras : " +
Libreria.aleatorio(100,999));
}
# aleatorio de 1 cifra :
# aleatorio de 2 cifras :
# aleatorio de 3 cifras :
CARRERAS PROFESIONALES
7
25
418
CIBERTEC
43
Este bloque de cdigo se utiliza para darle valores iniciales a las variables estticas.
Tambin se utilizan para invocar a mtodos nativos, es decir, mtodos escritos por
ejemplo en lenguaje C. En una Clase se pueden definir varios inicializadores estticos,
los cuales se ejecutan en el orden en el que han sido definidos.
Ejercicio 6: Inicilice la variable de clase cantidad a travs de un inicializador static.
Ejemplo 1
Haga que la clase Alumno cuente la cantidad de objetos creados.
CIBERTEC
CARRERAS PROFESIONALES
44
private LibNumeros(){
}
}
El constructor de la clase tiene un acceso privado para que no pueda ser invocado y
de esta forma no podr crear un objeto de tipo LibNumeros.
Descripcin de los mtodos de la clase LibNumeros:
-
CARRERAS PROFESIONALES
CIBERTEC
45
int tam=cad.length();
for(int i=tam; i<num; i++)
cad+=' ';
return cad;
}
public static String extrae(String cad, int pos){
// pos en el rango de 1 .. longitud de la cadena.
cad=cad.trim();
int tam = cad.length();
if(pos>=1 && pos<=tam)
return ""+cad.charAt(pos-1);
else
return "Verifique los parmetros";
}
public static String extrae(String cad, int posIni,
int posFin){
// pos en el rango de 1 .. longitud de la cadena.
int tam=cad.length();
if(posIni>=1 && posFin<=tam)
return cad.substring(posIni-1,posFin);
else
return "Verifique los parmetros";
}
}
Descripcin de los mtodos de la clase LibCadenas:
-
CIBERTEC
CARRERAS PROFESIONALES
46
CARRERAS PROFESIONALES
CIBERTEC
47
Ejemplo 7
Cree la clase Empleado en el paquete semana5 y declare los siguiente atributos
como privados: cod (int), nom (String) y horas (double). La clase debe tener las
siguientes variables estticas con acceso privado: tarifa, porcentaje de descuento (la
tarifa como el porcentaje de descuento deben ser variables estticas porque se va
aplicar la misma tarifa y porcentaje de descuento a todos los empleados), contador de
empleados y el sueldo neto acumulado de todos los empleados.
Implemente los siguientes mtodos:
a)
b)
c)
d)
e)
CIBERTEC
CARRERAS PROFESIONALES
48
CARRERAS PROFESIONALES
CIBERTEC
49
return horas;
}
// Mtodos de clculo
public double sbruto(){
return horas*tarifa;
}
public double descuento(){
return sbruto()*(pordscto/100);
}
public double sneto(){
return sbruto()-descuento();
}
// Mtodos de clase o estticos tipo void
public static void setTarifa(double t){
tarifa=t;
}
public static void setPordscto(double p){
pordscto=p;
}
public static void mostrar(String cad){
JOptionPane.showMessageDialog(null,cad);
}
// Mtodos de clase o estticos con valor de retorno
public static double getTarifa(){
return tarifa;
}
public static double getPordscto(){
return pordscto;
}
public static int getContador(){
return cont;
}
public static double getSnetoAcum(){
return snetoAcum;
}
}
CIBERTEC
CARRERAS PROFESIONALES
50
java.awt.event.*;
java.awt.*;
javax.swing.*;
semana5.Empleado;
// txtCodigo
txtCodigo=new JTextField();
txtCodigo.setBounds(120,10,100,20);
getContentPane().add(txtCodigo);
// txtNombre
txtNombre=new JTextField();
txtNombre.setBounds(120,30,100,20);
getContentPane().add(txtNombre);
// txtHoras
txtHoras=new JTextField();
txtHoras.setBounds(120,50,100,20);
getContentPane().add(txtHoras);
CARRERAS PROFESIONALES
CIBERTEC
51
// btnProcesar
btnProcesar = new JButton("Procesar");
btnProcesar.setBounds(250, 10, 100, 20);
btnProcesar.addActionListener(this);
getContentPane().add(btnProcesar);
// btnBorrar
btnBorrar = new JButton("Borrar");
btnBorrar.setBounds(250, 30, 100, 20);
btnBorrar.addActionListener(this);
getContentPane().add(btnBorrar);
// btnModificar
btnModificar = new JButton("Modificar");
btnModificar.setBounds(250, 50, 100, 20);
btnModificar.addActionListener(this);
getContentPane().add(btnModificar);
// txtS
txtS = new JTextArea();
txtS.setFont(new Font("monospaced", 0, 12));
// scpScroll
scpScroll=new JScrollPane(txtS);
scpScroll.setBounds(10, 90, 350, 240);
getContentPane().add(scpScroll);
}
// Procesa eventos de tipo ActionEvent
public void actionPerformed( ActionEvent e ){
if( e.getSource() == btnProcesar )
procesar();
if( e.getSource() == btnModificar )
modificar();
if( e.getSource() == btnBorrar )
borrar();
}
void procesar(){
Empleado emp = new
Empleado(getCodigo(),getNombre(),getHoras());
listar(emp);
imprimir("Cantidad de empleados creados:" +
Empleado.getContador());
imprimir("Sueldo neto acumulado:" +
Empleado.getSnetoAcum());
imprimir("");
}
CIBERTEC
CARRERAS PROFESIONALES
52
CARRERAS PROFESIONALES
CIBERTEC
53
String getNombre(){
return txtNombre.getText();
}
double getHoras(){
return Double.parseDouble(txtHoras.getText());
}
}
Importante:
Cabe resaltar que una vez que la clase se carga en la memoria (esto ocurre al
crearse el primer objeto o al utilizar una variable o mtodo static) primero se ejecutan
los inicializadores static y luego el constructor de la clase.
CIBERTEC
CARRERAS PROFESIONALES
54
Ejercicios
c)
d)
e)
Cree un objeto de tipo vendedor cada vez que se pulse el botn Procesar.
Los datos sern capturados de la GUI.
Cree un mtodo listar que imprima todos los atributos del vendedor, el
porcentaje de comisin, el sueldo basico, la comisin en soles y el sueldo
bruto del vendedor.
Imprima la cantidad de vendedores creados.
Imprima el sueldo bruto acumulado de todos los vendedores.
Cree un mtodo modificar que permita ingresar el nuevo porcentaje de
comisin para los vendedores. Este mtodo debe ser llamado al pulsar el
botn Modificar.
CARRERAS PROFESIONALES
CIBERTEC
55
CIBERTEC
CARRERAS PROFESIONALES
56
CARRERAS PROFESIONALES
CIBERTEC
57
Question
Question
Question
Question
Question
CIBERTEC
a
a
a
a
a
=
=
=
=
=
new
new
new
new
new
Question();
Question(3.2);
Question(4,2);
Question(8);
Question("ff");
CARRERAS PROFESIONALES
58
Ejercicios
1) Cree la Clase ArregloSueldos en el paquete semana_03 y declare los siguientes
atributos como privados:
- Un arreglo de sueldos de tipo double
- Una variable indice de tipo int que almacene la cantidad de sueldos
Implemente los siguientes mtodos:
- Un constructor que cree el arreglo
- Un mtodo que genere 10 sueldos en el rango: 500 .. 3000
- Un mtodo que calcule el sueldo promedio.
- Un mtodo que retorne la cantidad de sueldos mayores a 2000
En la ClasePrincipal debe programar los botones: generar, sueldo promedio y
cantidad de sueldos de tal forma que al pulsar estos botones se llamen a los
mtodos creados en ArregloSueldos.
2) Cree la clase ArregloNumeros en el paquete semana_04 y declare los siguientes
atributos como privados:
- Un arreglo de nmeros de tipo int
- Una variable indice de tipo int que almacene la cantidad de nmeros
Implemente lo siguiente:
- Un constructor que cree el arreglo
- Un mtodo que genere 15 numeros en el rango: 10 .. 99
- Un mtodo que calcule el nmero mayor
- Un mtodo que retorne la cantidad de nmeros impares
- Un mtodo que retorne la cantidad de nmeros capicuas
En la ClasePrincipal debe programar los botones:
- generar, que al pulsarlo se genere los 15 nmeros en el arreglo
- reportar, que al pulsarlo imprime el nmero mayor, la cantidad de nmeros
impares y la cantidad de nmeros capicuas.
3) Asuma la existencia del siguiente arreglo unidimensional:
CARRERAS PROFESIONALES
CIBERTEC
59
Problema_1: Disee un mtodo que reemplace el nmero mayor del arreglo por la
suma de todos los nmeros pares.
Problema_2: Disee un mtodo que reemplace el segundo nmero impar por la
suma de todos los nmeros que empiezan con el dgito 2.
Problema_3: Disee un mtodo que retorne la suma del tercer nmero impar con
el penltimo nmero mltiplo de 3.
Problema_4: Disee un mtodo que busque un nmero y retorne la suma de
todos los nmeros del arreglo desde la posicin cero hasta el nmero encontrado.
Si el nmero no existe muestre un mensaje de error.
Problema_5: Disee un mtodo que busque y elimine el nmero menor del
arreglo.
Problema_6: Disee un mtodo que busque y elimine el nmero mayor del
arreglo.
Problema_7: Disee un mtodo que elimine el segundo nmero par del arreglo si
es que existe de lo contrario muestre un mensaje de error.
Problema_8: Intercambie el primer nmero par por el ltimo nmero impar.
Problema_9: Intercambie el segundo nmero par por el penltimo nmero impar.
Problema_10: Intercambie el primer nmero mltiplo de 3 por el ltimo nmero
mltiplo de 7.
En todos los casos considere los mensajes de error pertinentes. Asuma la
existencia de los mtodos: mensaje y listar.
CIBERTEC
CARRERAS PROFESIONALES
60
Ejemplo Especial
Este ejemplo est compuesto de 2 clases: ArregloEdades (Clase que maneja el
arreglo) y ClasePrincipal (Clase que interacta con el usuario atravs de la GUI).
Cdigo de ArregloEdades
package semana_04;
public class ArregloEdades {
// Atributos privados
private int edades[];
private int indice;
// Constructor
public ArregloEdades() {
edades = new int[10];
indice = 0;
}
// Operaciones
public int longitud() {
return edades.length;
}
public int tamao() {
return indice;
}
public int obtener(int i) {
return edades[i];
}
public void adicionar(int edad) {
if (indice == longitud())
ampliacion();
edades[indice] = edad;
indice++;
}
public int sumaEdades() {
int suma = 0;
for (int i=0; i<indice; i++)
suma += edades[i];
return suma;
}
CARRERAS PROFESIONALES
CIBERTEC
61
CIBERTEC
CARRERAS PROFESIONALES
62
Cdigo de ClasePrincipal
import
import
import
import
java.awt.*;
java.awt.event.*;
javax.swing.*;
semana_04.ArregloEdades;
ae = new ArregloEdades();
CARRERAS PROFESIONALES
CIBERTEC
63
CIBERTEC
CARRERAS PROFESIONALES
64
}
void ingresar() {
int edad = leerEdad();
if (edad > 0) {
ae.adicionar(edad);
listar();
}
else
mensaje("error de ingreso");
}
void listar() {
txtS.setText("");
if (ae.longitud() > 0)
for (int i=0; i<ae.tamao(); i++)
imprimir("edad[" + i + "] : " + ae.obtener(i));
else
mensaje("arreglo vaco");
}
void reportar() {
if (ae.longitud() > 0) {
txtS.setText("");
imprimir("Suma de edades
imprimir("Edad menor
imprimir("Edad mayor
imprimir("Promedio de edades
}
else
mensaje("arreglo vaco");
}
:
:
:
:
"
"
"
"
+
+
+
+
ae.sumaEdades());
ae.edadMenor());
ae.edadMayor());
ae.edadPromedio());
void reinicializarArreglo() {
if (ae.tamao() > 0) {
txtS.setText("");
ae.reinicializar();
mensaje("arreglo reinicializado");
}
else
mensaje("arreglo vaco");
}
void generar() {
ae.generar();
listar();
}
void buscar() {
int edad = leerEdad();
if (edad > 0) {
int pos = ae.busqueda(edad);
if (pos == -1)
mensaje("edad no existe");
else
mensaje(edad + " se encuentra en la posicin: "
+ pos);
}
else
mensaje("error de ingreso");
}
CARRERAS PROFESIONALES
CIBERTEC
65
void limpieza() {
txtEdad.setText("");
txtEdad.requestFocus();
}
// Mtodos tipo void (con parmetros)
void imprimir(String s) {
txtS.append(s + "\n");
}
void mensaje(String s) {
JOptionPane.showMessageDialog(this,s);
}
// Mtodos que retornan valor (sin parmetros)
int leerEdad() {
int edad;
try {
edad = Integer.parseInt(txtEdad.getText().trim());
}
catch(Exception e) {
edad = -1;
}
return edad;
}
}
CIBERTEC
CARRERAS PROFESIONALES
66
Ejemplo 2
Cree un mtodo que permita ordenar en forma ascendente el arreglo de edades.
En ArregloEdades:
En ClasePrincipal:
void ordenar() {
ae.ordenarAscendente();
listar();
}
CARRERAS PROFESIONALES
CIBERTEC
67
UNIDAD DE
APRENDIZAJE
2
SEMANA
8
ARREGLO BIDIMENSIONAL
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos manipulan arreglos unidimensionales y
bidimensionales con tipos primitivos, as como arreglo de objetos en diversas aplicaciones.
Adicionalmente emplean el modificador static.
TEMARIO
Arreglo Bidimensional
Operaciones variadas.
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
68
1. ARREGLO BIDIMENSIONAL
Un arreglo bidimensional es una matriz donde cada elemento es referenciado atravs
de una fila y una columna. El espacio ocupado por cada elemento es igual para todos
y en l se pueden almacenar diferentes valores pero del mismo tipo de dato.
Arreglo bidimensional (dos direcciones)
Ej:
int
COLUMNAS
00
01
02
03
04
10
11
12
13
14
20
21
22
23
24
CARRERAS PROFESIONALES
CIBERTEC
69
INGRESO:
Elabore un mtodo que genere nmeros de dos cifras.
void generarNumeros() {
for (int i=0; i<FILAS; i++)
for (int j=0; j<COLUMNAS; j++)
n[i][j] = aleatorio(10,99);
}
j
60
57
14
78
75
00
01
02
03
04
80
65
61
41
84
10
11
12
13
14
14
72
73
66
57
20
21
22
23
24
LISTADO:
Visualice los nmeros generados.
void listar() {
for (int i=0; i<FILAS; i++) {
for (int j=0; j<COLUMNAS; j++)
txtS.append("n[" + i + "][" + j + "] : " +
n[i][j] + "\t");
txtS.append("\n");
}
}
CIBERTEC
n[0][0]:60
n[1][0]:80
n[2][0]:14
n[0][1]:57
n[1][1]:65
n[2][1]:72
n[0][2]:14
n[1][2]:61
n[2][2]:73
n[0][3]:78
n[1][3]:41
n[2][3]:66
n[0][4]:75
n[1][4]:84
n[2][4]:57
CARRERAS PROFESIONALES
70
2. OPERACIONES VARIADAS
Ejemplo 1
Disee un programa que genere aleatoriamente un arreglo bidimensional de nmeros
en funcin de la cantidad de filas y columnas que el usuario ingrese. Los nmeros
deben estar en el rango de 10 a 99. Luego, al pulsar el botn Procesar que calcule lo
siguiente:
a) La cantidad de nmeros.
b) La suma de los nmeros.
c) El nmero mayor.
d) El nmero menor.
e) El promedio de los nmeros.
f) La suma de los nmeros de la fila 2.
g) La suma de los nmeros de la columna 3.
El arreglo Bidimensional se debe crear en la clase ArregloBidimensional dentro del
paquete semana8 y la GUI se debe controlar desde la clase Principal.
Cdigo de la clase ArregloBidimensional
package semana8;
public class ArregloBidimensional {
//Atributos privados
private int fil, col;
private int n[][];
//Constructor
public ArregloBidimensional(int fil, int col){
n = new int[fil][col];
this.fil=fil;
this.col=col;
generar();
}
//Mtodos pblicos
public int getFilas(){
return fil;
}
public int getColumnas(){
return col;
}
public int getLongitud(){
return fil*col;
}
public int obtener(int posFil, int posCol){
return n[posFil][posCol];
}
CARRERAS PROFESIONALES
CIBERTEC
71
CIBERTEC
CARRERAS PROFESIONALES
72
}
private int aleatorio(int min, int max){
return (int)((max-min+1)*Math.random()+min);
}
}
Cdigo de la clase Principal
import
import
import
import
java.awt.event.*;
java.awt.*;
javax.swing.*;
semana8.ArregloBidimensional;
CARRERAS PROFESIONALES
CIBERTEC
73
txtS=new JTextArea();
scpScroll=new JScrollPane(txtS);
scpScroll.setBounds(30,100,400,220);
getContentPane().add(scpScroll);
}
// Procesa eventos de tipo ActionEvent
public void actionPerformed( ActionEvent e ){
if(e.getSource()==btnGenerar)
generar();
if(e.getSource()==btnProcesar)
procesar();
}
void generar(){
int filas=getFilas();
int col=getColumnas();
if(filas>0 && col>0){
a = new ArregloBidimensional(filas,col);
listar();
}
else
mensaje("datos incorrectos");
}
void listar(){
txtS.setText("");
for(int i=0; i<a.getFilas(); i++){
for(int j=0; j<a.getColumnas(); j++){
int x = a.obtener(i,j);
txtS.append("n["+i+"]["+j+"]="+x+"\t");
}
txtS.append("\n");
}
}
void procesar(){
imprimir("");
imprimir("a) Cantidad de nmeros:"+a.getLongitud());
imprimir("b) Suma de nmeros:"+a.suma());
imprimir("c) Nmero mayor:"+a.mayor());
imprimir("d) Nmero menor:"+a.menor());
imprimir("e) Promedio de nmeros:"+a.promedio());
imprimir("f) Suma de nmeros fila 2:"+a.sumaFila(2));
imprimir("g) Suma de nmeros columna 3:"+
a.sumaColumna(3));
}
int getFilas() {
int num;
try {
num = Integer.parseInt(txtFilas.getText());
CIBERTEC
CARRERAS PROFESIONALES
74
}
catch(Exception e) {
num = 0;
}
return num;
}
int getColumnas() {
int num;
try {
num = Integer.parseInt(txtColumnas.getText());
}
catch(Exception e) {
num = 0;
}
return num;
}
void imprimir(String cad){
txtS.append(cad + "\n");
}
void mensaje(String cad){
JOptionPane.showMessageDialog(this,cad);
}
}
GUI :
CARRERAS PROFESIONALES
CIBERTEC
75
Ejemplo 2
Disee un programa para encuestar a un grupo de personas de diferentes edades
sobre sus preferencias en bebidas gaseosas entre: Pepsi Cola, Coca Cola, Fanta y
Crush. La empresa encuestadora desea saber lo siguiente:
1) Cuntas personas en total, prefieren cada tipo de gaseosa.
2) Cuntas personas fueron encuestadas en cada rango de edades
El arreglo Bidimensional se debe crear en la clase ArregloEncuestas dentro del
paquete semana8 y la GUI se debe controlar desde la clase Principal.
Cdigo de la clase ArregloEncuestas
package semana8;
public class ArregloEncuestas {
//Atributos privados
private final int filas =5,col= 4;
private int encuestas[][];
//Constructor
public ArregloEncuestas() {
encuestas=new int[filas][col];
}
//Mtodos pblicos
public int getFilas(){
return filas;
}
public int getColumnas(){
return col;
}
public void registrar(int per, int gas){
encuestas[per][gas]++;
}
public int obtener(int posFila, int posCol){
return encuestas[posFila][posCol];
}
}
Cdigo de la clase Principal
import
import
import
import
CIBERTEC
java.awt.event.*;
java.awt.*;
javax.swing.*;
semana8.ArregloEncuestas;
CARRERAS PROFESIONALES
76
CARRERAS PROFESIONALES
CIBERTEC
77
listar();
}
// Procesa eventos de tipo ActionEvent
public void actionPerformed( ActionEvent e ){
if(e.getSource()==btnEncuestar)
encuestar();
if(e.getSource()==btnCalcular)
calcular();
}
void encuestar(){
int per,gas;
per=cboPersonas.getSelectedIndex();
gas=cboGaseosas.getSelectedIndex();
a.registrar(per,gas);
listar();
}
void calcular(){
pregunta1();
pregunta2();
}
void pregunta1(){
int tot;
for(int j=0; j<a.getColumnas(); j++){
tot=0;
for(int i=0; i<a.getFilas(); i++)
tot+=a.obtener(i,j);
imprimir("Total gaseosa "+
(String)cboGaseosas.getItemAt(j)+":"+tot);
}
}
void pregunta2(){
int tot;
for(int i=0; i<a.getFilas(); i++){
tot=0;
for(int j=0; j<a.getColumnas(); j++)
tot+=a.obtener(i,j);
imprimir("Total personas "+
(String)cboPersonas.getItemAt(i)+":"+tot);
}
}
void imprimir(String cad){
txtS.append(cad + "\n");
}
void listar(){
txtS.setText("");
CIBERTEC
CARRERAS PROFESIONALES
78
CARRERAS PROFESIONALES
CIBERTEC
79
Ejercicios
CIBERTEC
CARRERAS PROFESIONALES
80
Determinar:
- La ubicacin del alumno con el nmero 1.
- La ubicacin del ltimo alumno de la lista.
- La ubicacin del alumno con el nmero 20.
Utilice la siguiente figura como gua. La distribucin de alumnos en el aula que
aqu se muestra es slo referencial.
Columnas
Filas
CARRERAS PROFESIONALES
1
2
3
4
5
4
11
13
22
5
1
15
21
6
14
10
20
2
16
18
12
7
19
8
24
9
17
23
25
3
CIBERTEC
81
UNIDAD DE
APRENDIZAJE
2
SEMANA
9
ARREGLO DE OBJETOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos manipulan arreglos unidimensionales y
bidimensionales con tipos primitivos, as como arreglo de objetos en diversas aplicaciones.
Adicionalmente emplean el modificador static.
TEMARIO
Arreglo de objetos
Operaciones variadas.
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
82
1. ARREGLO DE OBJETOS
Un arreglo de objetos es un conjunto de variables de referencia que controlan objetos
del mismo tipo.
a) Creacin de un arreglo de objetos:
alib
i
null
null
null
alib
i
Codigo: 901
Titulo: Programacin en Java
Ao: 2006
Precio: 90
Codigo: 903
Titulo: Estadstica descriptiva
Ao: 2005
Precio: 78
Codigo: 902
Titulo: Matemtica Aplicada
Ao: 2004
Precio: 85
CARRERAS PROFESIONALES
CIBERTEC
83
2. OPERACIONES VARIADAS
El siguiente ejemplo esta compuesto de 3 clases: la clase Libro (clase que maneja los
atributos de los objetos de tipo libro y mtodos de acceso set y get), la clase
ArregloLibros (clase que maneja el arreglo de objetos) y la clase Principal (clase que
interacta con el usuario atravs de la GUI).
La aplicacin consiste en un mantenimiento de libros, es decir se consideran las
opciones de ingresar, consultar, modificar, eliminar y listar libros. Adicionalmente, se
realiza un aumento de 15% al precio de todos los libros cuyo ao de publicacin sea
mayor al 2003 y se muestra la siguiente informacin estadstica:
- El ttulo del libro ms caro
- El ttulo del libro ms barato.
Cdigo de la clase Libro
package semana9;
public class Libro {
// Atributos privados
private int codigo, ao;
private String titulo;
private double precio;
// Constructor
public Libro( int codigo, String titulo, int ao, double
precio){
this.codigo = codigo;
this.titulo = titulo;
this.ao = ao;
this.precio = precio;
}
//Mtodos de acceso
public void setCodigo( int codigo ){
this.codigo = codigo;
}
public void setTitulo( String titulo ){
this.titulo = titulo;
}
public void setAo( int ao ){
this.ao = ao;
}
public void setPrecio( double precio ){
this.precio = precio;
}
public int getCodigo(){
return codigo;
}
CIBERTEC
CARRERAS PROFESIONALES
84
CARRERAS PROFESIONALES
CIBERTEC
85
CIBERTEC
CARRERAS PROFESIONALES
86
java.awt.event.*;
java.awt.*;
javax.swing.*;
semana9.*;
CARRERAS PROFESIONALES
CIBERTEC
87
CIBERTEC
CARRERAS PROFESIONALES
88
estadisticas();
}
//--------------------------------------------------------public void itemStateChanged(ItemEvent e){
if( e.getSource() == cboOpcion )
seleccionar();
}
//--------------------------------------------------------void seleccionar(){
switch(cboOpcion.getSelectedIndex()){
case 0:
case 1:
lblCodigo.setVisible(true);
txtCodigo.setVisible(true);
lblTitulo.setVisible(true);
txtTitulo.setVisible(true);
lblAno.setVisible(true);
txtAno.setVisible(true);
lblPrecio.setVisible(true);
txtPrecio.setVisible(true);
break;
case 2:
case 3:
lblCodigo.setVisible(true);
txtCodigo.setVisible(true);
lblTitulo.setVisible(false);
txtTitulo.setVisible(false);
lblAno.setVisible(false);
txtAno.setVisible(false);
lblPrecio.setVisible(false);
txtPrecio.setVisible(false);
break;
default:
lblCodigo.setVisible(false);
txtCodigo.setVisible(false);
lblTitulo.setVisible(false);
txtTitulo.setVisible(false);
lblAno.setVisible(false);
txtAno.setVisible(false);
lblPrecio.setVisible(false);
txtPrecio.setVisible(false);
}
}
//--------------------------------------------------------void borrar(){
txtCodigo.setText("");
txtTitulo.setText("");
txtAno.setText("");
txtPrecio.setText("");
txtCodigo.requestFocus();
}
//--------------------------------------------------------void procesar(){
switch(cboOpcion.getSelectedIndex()){
case 0 :
CARRERAS PROFESIONALES
CIBERTEC
89
ingresar();
break;
case 1:
modificar();
break;
case 2:
consultar();
break;
case 3:
eliminar();
break;
default:
listar();
}
}
//--------------------------------------------------------int getCodigo(){
return Integer.parseInt(txtCodigo.getText());
}
//--------------------------------------------------------String getTitulo(){
return txtTitulo.getText();
}
//--------------------------------------------------------int getAo(){
return Integer.parseInt(txtAno.getText());
}
//--------------------------------------------------------double getPrecio(){
return Double.parseDouble(txtPrecio.getText());
}
//--------------------------------------------------------void imprimir(){
txtS.setText("");
}
//--------------------------------------------------------void imprimir( String s ){
txtS.append( s + "\n");
}
//--------------------------------------------------------void mensaje( String s){
JOptionPane.showMessageDialog(this,s);
}
//--------------------------------------------------------void listar(){
imprimir();
if(a.tamao()>0){
imprimir("Cdigo \t Ttulo \t Ao \t Precio");
for(int i=0; i<a.tamao(); i++){
Libro x =a.obtener(i);
CIBERTEC
CARRERAS PROFESIONALES
90
imprimir(x.getCodigo()+"\t"+x.getTitulo()+"\t"+
x.getAo()+"\t"+x.getPrecio());
}
}
else
mensaje("No hay Libros");
}
//--------------------------------------------------------void ingresar(){
int pos =a.buscar(getCodigo());
if(pos == -1){
Libro x = new Libro(getCodigo() ,getTitulo(),
getAo(),getPrecio());
a.adicionar(x);
listar();
mensaje("Libro agregado");
}
else
mensaje("Cdigo ya existe");
}
//--------------------------------------------------------void modificar(){
int pos =a.buscar(getCodigo());
if(pos!=-1){
Libro x =a.obtener(pos);
x.setTitulo(getTitulo());
x.setAo(getAo());
x.setPrecio(getPrecio());
listar();
mensaje("Libro modificado");
}
else
mensaje("Cdigo no existe");
}
//--------------------------------------------------------void consultar(){
int pos =a.buscar(getCodigo());
if(pos!=-1){
Libro x =a.obtener(pos);
imprimir();
imprimir("Cdigo:"+x.getCodigo());
imprimir("Ttulo:"+x.getTitulo());
imprimir("Ao:"+x.getAo());
imprimir("Precio:"+x.getPrecio());
}
else
mensaje("Cdigo no existe");
}
//--------------------------------------------------------void eliminar(){
int pos =a.buscar(getCodigo());
if(pos!=-1){
a.eliminar(pos);
CARRERAS PROFESIONALES
CIBERTEC
91
mensaje("Libro eliminado");
listar();
}
else
mensaje("Cdigo no existe");
}
//--------------------------------------------------------void aumento(){
a.aumento();
listar();
}
//--------------------------------------------------------void estadisticas(){
imprimir();
imprimir("El ttulo del libro ms caro:" +
a.masCaro());
imprimir("El ttulo del libro ms barato:" +
a.masBarato());
}
}
CIBERTEC
CARRERAS PROFESIONALES
92
Ejercicios
CARRERAS PROFESIONALES
CIBERTEC
93
4) Asuma la existencia de la clase Celular que cuenta con los siguientes atributos
privados: codigo (entero), marca (cadena), modelo (cadena) y precio unitario
(real). Considere que la clase cuenta con un constructor que inicializa los
atributos y los mtodos de acceso set y get para cada atributo. Disee las
opciones de ingresar, consultar, modificar, eliminar y listar del mantenimiento
de celulares. Para ello implemente las clases ArregloCelulares (clase que
maneja el arreglo de objetos) y la clase Principal (clase que controla la GUI)
Adicionalmente implemente en la clase ArregloCelulares los siguientes
mtodos:
a) Disee un mtodo que retorne el precio unitario acumulado de todos los
celulares de la marca Nokia.
b) Disee un mtodo que aumente en 10% el precio unitario de los
celulares cuyo modelo se ingrese desde la GUI.
c) Disee un mtodo que elimine a todos los celulares cuyo precio unitario
sea inferior a 120 soles y que la marca empiece con la letra M
5) Asuma la existencia de la clase Alumno que cuenta con los siguientes atributos
privados: codigo (entero), nombre (cadena), apellidos (cadena), ciclo (entero) y
promedio ponderado (real). Considere que la clase cuenta con un constructor
que inicializa los atributos y los mtodos de acceso set y get para cada atributo.
Disee las opciones de ingresar, consultar, modificar, eliminar y listar del
mantenimiento de alumnos. Para ello implemente las clases ArregloAlumnos
(clase que maneja el arreglo de objetos) y la clase Principal (clase que controla
la GUI)
Adicionalmente implemente en la clase ArregloAlumnos los siguientes
mtodos:
a) Disee un mtodo que retorne el nombre y los apellidos del alumno que
tiene mejor promedio ponderado.
b) Disee un mtodo que retorne la cantidad de alumnos que se
encuentran en segundo ciclo con un promedio ponderado inferior a 13.
CIBERTEC
CARRERAS PROFESIONALES
94
UNIDAD DE
APRENDIZAJE
3
SEMANA
10
TEMARIO
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
95
1. CLASE ARRAYLIST
Mtodos de la clase ArrayList
Esta Clase dispone de diversos mtodos para manipular una coleccin de objetos
dinmicamanete. Para crear un ArrayList se utiliza la siguiente instruccin:
ArrayList <nombre_clase> var_referencia = new ArrayList < nombre_clase > ();
Ejemplo:
ArrayList <Producto> prod = new ArrayList <Producto> ();
prod es un objeto de tipo ArrayList que va a manipular un arreglo de objetos de
tipo Producto.
Es necesario importar el paquete:
java.util.ArrayList;
MTODOS
DESCRIPCIN
Agrega un elemento al final.
add(Object)
add(int, Object)
clear()
get(int)
indexOf(Object)
CIBERTEC
CARRERAS PROFESIONALES
96
remove(Object)
set(int, Object)
public void modificar(int pos, Producto x){
prod.set(pos,x);
}
Devuelve la cantidad de elementos agregados.
size()
CARRERAS PROFESIONALES
CIBERTEC
97
// Fija el cdigo
public void setCodigo( int codigo ){
this.codigo = codigo;
}
// Fija la descripcin
public void setDescripcion( String descripcion ){
this.descripcion = descripcion;
}
// Fija el precio unitario
public void setPu( double pu ){
this.pu = pu;
}
// Fija el stock
public void setStock( int stock ){
this.stock = stock;
}
// Retorna el cdigo
public int getCodigo(){
return codigo;
}
// Retorna la descripcin
public String getDescripcion(){
return descripcion;
}
// Retorna el precio unitario
public double getPu(){
return pu;
}
// Retorna el stock
public int getStock(){
return stock;
}
}
Paso 2
Disee la clase ArregloProductos en el paquete semana10 que tenga como atributo
privado un objeto de tipo ArrayList. Luego implemente los siguientes mtodos:
- Un constructor sin parmetros que cree el objeto ArrayList
- Un mtodo adicionar que reciba un producto y lo adicione al ArrayList
- Un mtodo eliminar que reciba un producto y lo elimine del ArrayList
- Un mtodo obtener que reciba una posicin y retorne el producto de esa posicin
- Un mtodo buscar que reciba un cdigo y retorne el producto con ese cdigo
- Un mtodo tamao que retorne la cantidad de productos ingresados al ArrayList
- Un mtodo mayorprecio que retorne el producto ms caro
- Un mtodo menorprecio que retorne el producto ms barato
package semana10;
CIBERTEC
CARRERAS PROFESIONALES
98
import java.util.ArrayList;
public class ArregloProductos{
private ArrayList <Producto> prod;
public ArregloProductos(){
prod=new ArrayList <Producto> ();
}
public void adicionar(Producto x){
prod.add(x);
}
public void eliminar(Producto x){
prod.remove(x);
}
public Producto obtener(int pos){
return prod.get(pos);
}
public Producto buscar(int codigo){
for(int i=0; i<prod.size(); i++)
if(codigo==prod.get(i).getCodigo())
return prod.get(i);
return null;
}
public int tamao(){
return prod.size();
}
public double mayorPrecio(){
double max=prod.get(0).getPu();
for(int i=1; i<prod.size(); i++)
if(prod.get(i).getPu()>max)
max=prod.get(i).getPu();
return max;
}
public double menorPrecio(){
double min=prod.get(0).getPu();
for(int i=1; i<prod.size(); i++)
if(prod.get(i).getPu()<min)
min=prod.get(i).getPu();
return min;
}
}
CARRERAS PROFESIONALES
CIBERTEC
99
Paso 3
Una vez desarrollada las clases: Producto y ArregloProductos implemente los
siguientes mtodos del programa principal: ingreso, consulta, modificacin, eliminacin
y listado.
En todo momento el programa mostrar un listado como el siguiente:
Cdigo
Descripcin
P_Unitario
Stock
901
Lavadora
600
10
902
Equipo
450
12
903
Refrigerador
1550
8
--------------------------------------------------------------------------------Total de Productos
:3
Producto ms caro
: 1550
Producto ms barato
: 450
GUI:
CIBERTEC
CARRERAS PROFESIONALES
100
import
import
import
import
java.awt.event.*;
java.awt.*;
javax.swing.*;
semana10.*;
CARRERAS PROFESIONALES
CIBERTEC
101
getContentPane().add(txtCodigo);
txtDescripcion = new JTextField();
txtDescripcion.setBounds(105,63, 150, 23);
getContentPane().add(txtDescripcion);
txtPrecio = new JTextField();
txtPrecio.setBounds(105, 87, 150, 23);
getContentPane().add(txtPrecio);
txtStock = new JTextField();
txtStock.setBounds(105, 111, 150, 23);
getContentPane().add(txtStock);
btnProcesar = new JButton("Procesar");
btnProcesar.setBounds(365, 15, 101, 23);
btnProcesar.addActionListener(this);
getContentPane().add(btnProcesar);
btnBorrar = new JButton("Borrar");
btnBorrar.setBounds(365, 39, 101, 23);
btnBorrar.addActionListener(this);
getContentPane().add(btnBorrar);
txtS = new JTextArea();
txtS.setFont(new Font("courier", Font.PLAIN, 12));
scpScroll=new JScrollPane(txtS);
scpScroll.setBounds(15, 140, 450, 227);
getContentPane().add(scpScroll);
}
//--------------------------------------------------------public void actionPerformed( ActionEvent e ){
if( e.getSource() == btnProcesar )
procesar();
if( e.getSource() == btnBorrar )
borrar();
}
//--------------------------------------------------------public void itemStateChanged(ItemEvent e){
if( e.getSource() == cboOpcion )
seleccionar();
}
//--------------------------------------------------------void seleccionar(){
int opcion=cboOpcion.getSelectedIndex();
if( opcion == 1 || opcion == 3 ){
lblDescripcion.setVisible(false);
txtDescripcion.setVisible(false);
lblPrecio.setVisible(false);
txtPrecio.setVisible(false);
lblStock.setVisible(false);
txtStock.setVisible(false);
}
CIBERTEC
CARRERAS PROFESIONALES
102
else{
lblDescripcion.setVisible(true);
txtDescripcion.setVisible(true);
lblPrecio.setVisible(true);
txtPrecio.setVisible(true);
lblStock.setVisible(true);
txtStock.setVisible(true);
}
}
//--------------------------------------------------------void borrar(){
txtCodigo.setText("");
txtDescripcion.setText("");
txtPrecio.setText("");
txtStock.setText("");
txtCodigo.requestFocus();
}
//--------------------------------------------------------void procesar(){
switch(cboOpcion.getSelectedIndex()){
case 0 :
ingresar();
break;
case 1:
consultar();
break;
case 2:
modificar();
break;
default:
eliminar();
}
}
//--------------------------------------------------------int getCodigo(){
return Integer.parseInt(txtCodigo.getText());
}
//--------------------------------------------------------String getDescripcion(){
return txtDescripcion.getText();
}
//--------------------------------------------------------double getPrecio(){
return Double.parseDouble(txtPrecio.getText());
}
//--------------------------------------------------------int getStock(){
return Integer.parseInt(txtStock.getText());
}
//--------------------------------------------------------void mensaje( String m, String tipo ){
JOptionPane.showMessageDialog(this,
m,tipo,JOptionPane.INFORMATION_MESSAGE);
}
//--------------------------------------------------------String rellena(String cad){
CARRERAS PROFESIONALES
CIBERTEC
103
int longitud=cad.length();
for(int i=longitud; i<15; i++)
cad+=" ";
return cad;
}
//--------------------------------------------------------void imprimir(){
txtS.setText("");
}
//--------------------------------------------------------void imprimir(String s){
txtS.append( s + "\n");
}
//--------------------------------------------------------// Ingresa un producto evitando que el cdigo se repita
void ingresar(){
Producto prod=p.buscar(getCodigo());
if(prod==null){
prod=new Producto(getCodigo(),
getDescripcion(),getPrecio(),getStock());
p.adicionar(prod);
listar();
mensaje("Producto Ingresado", "Mensaje de
confirmacin");
}
else
mensaje("Codigo ya existe", "Mensaje de error");
}
//--------------------------------------------------------// Muestra el listado solicitado
void listar(){
imprimir();
if(p.tamao()>0){
imprimir("Codigo \t Descripcin \t\t P_Unitario
\t Stock");
for(int i=0; i<p.tamao(); i++){
Producto prod=p.obtener(i);
imprimir(prod.getCodigo()+"\t" +
rellena(prod.getDescripcion())+"\t\t"+
prod.getPu() + "\t\t"+prod.getStock());
}
imprimir("");
imprimir("Total de Productos:"+p.tamao());
imprimir("Producto mas caro:"+p.mayorPrecio());
imprimir("Producto mas barato:"+
p.menorPrecio());
}
else
imprimir("No hay productos");
}
//--------------------------------------------------------// Consulta la descripcin, precio y stock de un producto
dado su cdigo
CIBERTEC
CARRERAS PROFESIONALES
104
void consultar(){
imprimir();
Producto prod=p.buscar(getCodigo());
if(prod!=null){
imprimir("Cdigo
: "+
prod.getCodigo());
imprimir("Descripcin
: "+
prod.getDescripcion());
imprimir("Precio Unitario
: "+prod.getPu());
imprimir("Stock
: "+
prod.getStock());
}
else
mensaje("Producto no existe", "Mensaje de
error");
}
//--------------------------------------------------------// Modifica la descripcin, precio y stock de un producto
dado su cdigo
void modificar(){
Producto prod=p.buscar(getCodigo());
if(prod!=null){
prod.setDescripcion(getDescripcion());
prod.setPu(getPrecio());
prod.setStock(getStock());
listar();
mensaje("Producto Modificado", "Mensaje de
confirmacin");
}
else
mensaje("Producto no existe", "Mensaje de
error");
}
//--------------------------------------------------------// Elimina un producto dado su cdigo
void eliminar(){
Producto prod=p.buscar(getCodigo());
if(prod!=null){
p.eliminar(prod);
listar();
mensaje("Producto Eliminado", "Mensaje de
confirmacin");
}
else
mensaje("Producto no existe", "Mensaje de
error");
}
}
CARRERAS PROFESIONALES
CIBERTEC
105
CIBERTEC
CARRERAS PROFESIONALES
106
2) Disee un mtodo que muestre los productos que terminen con la letra a cuyo
stock sea cero.
void mostrar(){
imprimir("Codigo \t Descripcin \t P_Unitario \t Stock");
for(int i=0; i<p.tamao(); i++){
Producto x = p.obtener(i);
int pos = x. getDescripcion().length()-1;
char letra = x. getDescripcion().charAt(pos);
if(letra==a && x. getStock()==0)
imprimir(x.getCodigo()+"\t"+x.getDescripcion()+"\t"+
x.getPu()+"\t"+x.getStock());
}
}
4) Disee un mtodo que elimine a los productos cuyo stock sea menor al stock
ingresado desde la GUI.
void eliminarVarios(){
for(int i=0; i<p.tamao(); i++){
Producto x = p.obtener(i);
if(x.getStock()<getStock()){
p.eliminar(x);
i--;
}
}
listar();
}
CARRERAS PROFESIONALES
CIBERTEC
107
Ejercicios
1) Asuma la existencia de la clase Celular que cuenta con los siguientes atributos
privados: codigo (entero), marca (cadena), modelo (cadena) y precio unitario
(real). Considere que la clase cuenta con un constructor que inicializa los
atributos y los mtodos de acceso set y get para cada atributo. Disee las
opciones de ingresar, modificar y listar del mantenimiento de celulares. Para ello
implemente las clases ArregloCelulares (clase que maneja un objeto privado de
tipo ArrayList) y la clase Principal (clase que controla la GUI)
Adicionalmente implemente en la clase ArregloCelulares los siguientes mtodos:
a) Disee un mtodo que aumente en 8% el precio unitario de los
celulares cuya marca termine con la letra a
b) Disee un mtodo que retorne la cantidad de celulares de la marca
enviada como parmetro.
2) Asuma la existencia de la clase Video que cuenta con los siguientes atributos
privados: codVideo (entero), nombre de pelcula (cadena), codGenero
(0=comedia, 1=suspenso, 2=terror) y precio unitario (real). Considere que la
clase cuenta con un constructor que inicializa los atributos y los mtodos de
acceso set y get para cada atributo. Disee las opciones de ingresar, consultar y
eliminar del mantenimiento de videos. Para ello implemente las clases
ArregloVideos (clase que maneja un objeto privado de tipo ArrayList) y la clase
Principal (clase que controla la GUI)
Adicionalmente implemente en la clase Principal los siguientes mtodos:
a) Disee un mtodo que imprima el precio unitario promedio de aquellos
videos del gnero suspenso.
b) Disee un mtodo que elimine los videos del gnero ingresado desde la
GUI.
3) Asuma la existencia de la clase Vendedor que cuenta con los siguientes
atributos privados: codigo (entero), nombre (cadena), y monto vendido (real).
Considere que la clase cuenta con un constructor que inicializa los atributos y
los mtodos de acceso set y get para cada atributo. Disee las opciones de
ingresar, consultar, modificar, eliminar y listar del mantenimiento de
vendedores. Para ello implemente las clases ArregloVendedores (clase que
maneja un objeto privado de tipo ArrayList) y la clase Principal (clase que
controla la GUI)
Adicionalmente implemente en la clase Principal los siguientes mtodos:
a) Disee un mtodo que imprima el monto promedio de aquellos
vendedores cuyo nombre empiece con J
b) Disee un mtodo que imprima el nombre del vendedor que vendi que
gener ms ingresos.
CIBERTEC
CARRERAS PROFESIONALES
108
UNIDAD DE
APRENDIZAJE
3
SEMANA
11
ARCHIVOS DE TEXTO
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos utilizan los mtodos de la clase ArrayList para
efectuar operaciones con objetos (ingresar, consultar, eliminar, modificar, listar entre
otras). Utilizan las clases BufferedReader, FileReader, PrintWriter, FileWriter y
StringTokenizer para almacenar la data en archivos de texto.
TEMARIO
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
109
CIBERTEC
CARRERAS PROFESIONALES
110
CARRERAS PROFESIONALES
CIBERTEC
111
5.
6.
7.
8.
9.
dele Aceptar.
10. Por ltimo cierre la ventana.
Recomendaciones:
java.io.*;
Todo cdigo que involucre manejo de archivos debe estar en una estructura
try-catch ya que podra producirse algn error, por ejemplo si no existe el
archivo.
CIBERTEC
CARRERAS PROFESIONALES
112
"archivo.txt"
00011001 br
00011011
00010110
00011000
00011101
00010100
00010111
null
br
PrintWriter.- es la clase que permite bajar una data de la memoria hacia un archivo
(output). Para ser usada debemos asociar una variable (pw) y aplicar un constructor.
Adems como parmetro el nombre del archivo antepuesto por FileWriter, que
permite abrir el archivo slo para escritura. Tan luego lo abre destruye ntegramente
su contenido. En caso de no encontrar el archivo, lo crea.
Una vez abierto el archivo, pw apunta al inicio.
El mtodo println(data) asociado a pw graba como cadena de bits la data
indicada y genera un salto de lnea en el archivo.
El mtodo close() cierra el acceso al archivo.
CARRERAS PROFESIONALES
CIBERTEC
PrintWriter
113
"archivo.txt"
00011001 pw
00011011
00010110
00011000
00011101
00010100
00010111
null
pw
CIBERTEC
CARRERAS PROFESIONALES
114
CARRERAS PROFESIONALES
CIBERTEC
115
CIBERTEC
CARRERAS PROFESIONALES
116
java.awt.event.*;
java.awt.*;
javax.swing.*;
semana11.*;
CARRERAS PROFESIONALES
CIBERTEC
117
CIBERTEC
CARRERAS PROFESIONALES
118
}
//--------------------------------------------------------public void actionPerformed( ActionEvent e ){
if( e.getSource() == btnProcesar )
procesar();
if( e.getSource() == btnBorrar )
borrar();
}
//--------------------------------------------------------public void itemStateChanged(ItemEvent e){
if( e.getSource() == cboOpcion )
seleccionar();
}
//--------------------------------------------------------void seleccionar(){
switch(cboOpcion.getSelectedIndex()){
case 0:
case 1:
lblCodigo.setVisible(true);
txtCodigo.setVisible(true);
lblNombre.setVisible(true);
txtNombre.setVisible(true);
lblCiclo.setVisible(true);
txtCiclo.setVisible(true);
lblPension.setVisible(true);
txtPension.setVisible(true);
break;
case 2:
case 3:
lblCodigo.setVisible(true);
txtCodigo.setVisible(true);
lblNombre.setVisible(false);
txtNombre.setVisible(false);
lblCiclo.setVisible(false);
txtCiclo.setVisible(false);
lblPension.setVisible(false);
txtPension.setVisible(false);
break;
default:
lblCodigo.setVisible(false);
txtCodigo.setVisible(false);
lblNombre.setVisible(false);
txtNombre.setVisible(false);
lblCiclo.setVisible(false);
txtCiclo.setVisible(false);
lblPension.setVisible(false);
txtPension.setVisible(false);
}
}
//--------------------------------------------------------void borrar(){
txtCodigo.setText("");
txtNombre.setText("");
CARRERAS PROFESIONALES
CIBERTEC
119
txtCiclo.setText("");
txtPension.setText("");
txtCodigo.requestFocus();
}
//--------------------------------------------------------void procesar(){
switch(cboOpcion.getSelectedIndex()){
case 0 :
ingresar();
break;
case 1:
modificar();
break;
case 2:
consultar();
break;
case 3:
eliminar();
break;
default:
listar();
}
}
//--------------------------------------------------------int getCodigo(){
return Integer.parseInt(txtCodigo.getText());
}
//--------------------------------------------------------String getNombre(){
return txtNombre.getText();
}
//--------------------------------------------------------int getCiclo(){
return Integer.parseInt(txtCiclo.getText());
}
//--------------------------------------------------------double getPension(){
return Double.parseDouble(txtPension.getText());
}
//--------------------------------------------------------void imprimir(){
txtS.setText("");
}
//--------------------------------------------------------void imprimir(String s){
txtS.append( s + "\n");
}
//--------------------------------------------------------void mensaje(String cad){
JOptionPane.showMessageDialog(this,cad);
}
CIBERTEC
CARRERAS PROFESIONALES
120
//--------------------------------------------------------void listar(){
imprimir();
if(a.tamao()>0){
imprimir("Codigo \t Nombre \t Ciclo \t
Pensin");
for(int i=0; i<a.tamao(); i++){
Estudiante e =a.obtener(i);
imprimir(e.getCodigo()+"\t" +
e.getNombre()+"\t"+e.getCiclo()+
"\t"+e.getPension());
}
}
else
imprimir("No hay estudiantes");
}
//--------------------------------------------------------void ingresar(){
Estudiante e =a.buscar(getCodigo());
if(e == null){
e = new Estudiante( getCodigo(),getNombre(),
getCiclo(),getPension());
a.adicionar(e);
a.grabar();
listar();
mensaje("Estudiante Ingresado");
}
else
mensaje("Codigo ya existe");
}
//--------------------------------------------------------void modificar(){
Estudiante e =a.buscar(getCodigo());
if(e!=null){
e.setNombre(getNombre());
e.setCiclo(getCiclo());
e.setPension(getPension());
a.grabar();
listar();
mensaje("Estudiante Modificado");
}
else
mensaje("Estudiante no existe");
}
//--------------------------------------------------------void consultar(){
imprimir();
Estudiante e =a.buscar(getCodigo());
if(e!=null){
imprimir("Cdigo : "+e.getCodigo());
imprimir("Nombre : "+e.getNombre());
imprimir("Ciclo
: "+e.getCiclo());
imprimir("Pensin : "+e.getPension());
}
CARRERAS PROFESIONALES
CIBERTEC
121
else
mensaje("Estudiante no existe");
}
//--------------------------------------------------------void eliminar(){
Estudiante e =a.buscar(getCodigo());
if(e!=null){
a.eliminar(e);
a.grabar();
listar();
mensaje("Estudiante Eliminado");
}
else
mensaje("Estudiante no existe");
}
}
GUI:
CIBERTEC
CARRERAS PROFESIONALES
122
Ejercicios
CARRERAS PROFESIONALES
CIBERTEC
123
UNIDAD DE
APRENDIZAJE
4
SEMANA
12
HERENCIA Y POLIMORFISMO
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos entienden el concepto de herencia y
polimorfismo, la relacin de generalizacin/especializacin entre clases, se emplean
las tcnicas de casting y clases abstractas en casos prcticos.
TEMARIO
Conceptos bsicos.
Relacin es-un
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
124
Subclases
Superclase
Docente
Persona
Apellidos
Nombre
Edad
Persona ()
generarCorreo()
Horas
Tarifa
Docente()
calcularSueldo()
Alumno
Nota1
Nota2
Nota3
RUC
Alumno()
calcularPromedio()
Las subclases heredan caractersticas de las clases de las que se derivan y aaden
caractersticas especficas que las diferencian. Las clases se organizan en una
estructura jerarquica.
CARRERAS PROFESIONALES
CIBERTEC
125
2. HERENCIA
La herencia es el mecanismo mediante el cual se puede definir una clase (subclase)
en base a otra clase (superclase) heredando aquellos miembros de la superclase
(atributos y mtodos) que hayan sido declarados como public, protected o sin
especificador de acceso. Una superclase declara un miembro como protected para
permitir el acceso al miembro desde el interior de sus subclases y desde una clase
que se encuentra en el mismo paquete a la vez que impide el acceso al miembro
desde el exterior de la superclase. El constructor no es un miembro por lo que no es
heredado por las subclases.
La nueva clase puede aadir nuevos miembros e incluso puede redefinir miembros de
la superclase. Redefinir un miembro de la superclase implica definir en la subclase un
miembro con el mismo nombre que el de la superclase. Esto hace que el miembro de
la superclase quede oculto en la subclase. A la redefinicin de mtodos se denomina
tambin sobrescritura de mtodos.
La forma general de la declaracin de una clase que hereda de otra clase es la
siguiente:
public class nombreDeSubclase extends nombreDeSuperclase {
// Cuerpo de la clase
}
La herencia permite establecer una jerarqua de especializacin mediante la
relacin "es-un" o "es-una".
Ejemplo 1:
Un Mamifero es un Animal.
Un Ave es un Animal.
Una Vaca es un Mamifero.
Un Pato es un Ave.
Animal { ... }
Mamifero extends Animal { ... }
Vaca extends Mamifero { ... }
Ave extends Animal {... }
Pato extends Ave {... }
CIBERTEC
CARRERAS PROFESIONALES
126
La clase Object define e implementa un comportamiento requerido por todas las clases
dentro del Sistema Java.
//no se hereda
// Mtodos de acceso
public int getv2(){ // se hereda
return v2;
}
CARRERAS PROFESIONALES
CIBERTEC
127
// se hereda
}
Define una subclase
package hijo;
import padre.A;
public class B extends A{
// Atributo
public int v4;
// Constructor
public B(int v1, int v2, int v3, int v4){
//super invoca al constructor de la superclase
super(v1,v2,v3);
this.v4=v4;
}
public int suma(){
return v1+getv2()+v3+v4;
}
}
Ejemplo de uso
import hijo.B; //hay que importar la clase B del paquete
//hijo
// procesar es un mtodo de la clase principal que esta
//fuera de los paquetes padre y hijo
void procesar(){
B r = new B(1,3,5,7);
imprimir("Objeto r de tipo B:"+r);
imprimir("V1:"+r.v1);
imprimir("V2:"+r.getv2());
// utilizamos el mtodo getv3() heredado ya que no se
//puede emplear v3 por tener acceso protejido
imprimir("V3:"+r.getv3());
imprimir("V4:"+r.v4);
imprimir("Suma:"+r.suma());
}
CIBERTEC
CARRERAS PROFESIONALES
128
Ejemplo 3:
Implemente la clase Persona en el paquete padre con los siguientes miembros:
- Atributos protegidos: apellidos, nombres y edad
- Constructor que inicializa los atributos de la clase.
- Un mtodo generarCorreo() que retorna el correo formado por el primer carcter del
nombre, el primer carcter del apellido, la edad y al final @cibertec.edu.pe.
Luego, implemente dos subclases de Persona: Docente y Alumno en el paquete
hijo.
Docente presenta los siguientes miembros:
- Atributos privados: horas que dicta por semana y tarifa.
- Constructor con parmetros para inicializar los atributos: apellidos, nombres, edad
horas y tarifa.
- Mtodo calcularSueldo() que retorna horasXtarifa.
Alumno presenta los siguientes miembros:
- Atributos privados: tres notas de tipo double.
- Constructor con parmetros para inicializar los atributos: apellidos, nombres, edad y
las tres notas.
- Mtodo calcularPromedio() que retorna el promedio simple de las tres notas.
Por ltimo, implemente el mtodo Procesar de la clase Principal que contiene el
actionPerformed() para crear los objetos de Docente y Alumno e invocar a sus
mtodos y a los de su superclase.
Clase Persona:
package padre;
public class Persona {
protected String apellido,nombre;
protected int edad;
public Persona(String ape, String nom, int ed) {
apellido=ape;
nombre=nom;
edad=ed;
}
public String generarCorreo(){
return ""+nombre.charAt(0)+apellido.charAt(0)+
edad+"@cibertec.edu.pe";
}
}
Subclase Docente:
package hijo;
import padre.Persona;
public class Docente extends Persona{
private double horas,tarifa;
CARRERAS PROFESIONALES
CIBERTEC
129
CIBERTEC
CARRERAS PROFESIONALES
130
En la clase Principal:
import hijo.*;
...
...
void procesar(){
Docente obj1 = new Docente("Rojas","Juan",25,100,35);
imprimir("Datos: \n"+obj1.mostrarDatos());
imprimir("su correo es:"+obj1.generarCorreo());
imprimir("Sueldo:"+obj1.calcularSueldo()+"\n");
Alumno obj2 = new Alumno("Salazar","Sandra",20,14,
16,13);
imprimir("Datos: \n"+obj2.mostrarDatos());
imprimir("su correo es:"+obj2.generarCorreo());
imprimir("Promedio:"+obj2.calcularPromedio()+"\n");
}
GUI :
CARRERAS PROFESIONALES
CIBERTEC
131
Ejercicios
CIBERTEC
CARRERAS PROFESIONALES
132
CARRERAS PROFESIONALES
CIBERTEC
133
UNIDAD DE
APRENDIZAJE
4
SEMANA
13
HERENCIA Y POLIMORFISMO
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos entienden el concepto de herencia y
polimorfismo, la relacin de generalizacin/especializacin entre clases, se emplean
las tcnicas de casting y clases abstractas en casos prcticos.
TEMARIO
Sobreescritura de mtodos.
Relacin tiene-un.
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
134
1) Sobreescritura de mtodos
En una jerarqua de clases, cundo un mtodo de una subclase tiene el mismo
nombre, los mismos parmetros y el mismo tipo de retorno que un mtodo de su
superclase, se dice que el mtodo de la subclase sobrescribe al mtodo de la
superclase. Cundo se llama a un mtodo sobrescrito dentro de una subclase,
siempre se refiere a la versin del mtodo definida en la subclase. La versin del
mtodo definida por la superclase queda oculta.
Uso de super para acceder a una variable oculta o a un mtodo sobrescrito
Si desde la subclase se quiere acceder a una variable oculta de la superclase o a un
mtodo sobrescrito de la superclase se usa la palabra super de la siguiente forma:
super.nombreDeLaVariableOculta
super.nombreDelMetodoSobreescrito (lista de argumentos)
Ejemplo 1:
// Superclase
package semana13;
public class A {
//Atributos
public int i, j;
//Constructor
public A (int pi, int pj) {
i = pi;
j = pj;
}
//Mtodo
public int suma() {
return i + j;
}
}
// Subclase
package semana13;
public class B extends A {
//Atributo
public int k;
//Constructor
public B (int pi, int pj, int pk) {
super(pi,pj);
k = pk;
}
//Mtodo
public int suma() {
return super.suma() + k;
}
CARRERAS PROFESIONALES
CIBERTEC
135
}
// Ejemplo de uso
import semana13.*;
...
...
void procesar(){
A obj1 = new A(2,4);
B obj2 = new B(1,3,5);
imprimir(obj1.i + " + " + obj1.j + " = " + obj1.suma());
imprimir(obj2.i + " + " + obj2.j + " + " + obj2.k + " = " +
obj2.suma());
}
Figura
Atributos: x,y
Mtodos:
Figura(constructor)
ubicacion()
area()
Cuadrado
Atributo: lado
Mtodos:
Cuadrado(constructor)
area()
Circulo
Atributo: radio
Mtodos:
Circulo(constructor)
area()
Figura es una clase abstracta porque no tiene sentido calcular su rea, pero s la de
un cuadrado o un crculo. Si una subclase de Figura no redefine o sobre-escribe
area(), deber declararse tambin como clase abstracta.
CIBERTEC
CARRERAS PROFESIONALES
136
Ejemplo 2:
Cdigo de la clase Figura:
package padre;
public abstract class Figura {
protected int x;
protected int y;
public Figura(int x, int y) {
this.x = x;
this.y = y;
}
public String ubicacion(){
return x+","+y;
}
public abstract double area();
}
CARRERAS PROFESIONALES
CIBERTEC
137
CIBERTEC
CARRERAS PROFESIONALES
138
// Subclase
package hijo;
import padre.Vehiculo;
public class Carro extends Vehiculo{
public Carro(int cap) {
super(cap);
}
// Sobre-escritura
public String caracteristicas(){
return "Tengo una capacidad de "+capacidad+ "
pasajeros \n"+
"Tengo 4 ruedas y una buena velocidad \n"+
"pero no puedo volar";
}
}
// Subclase
package hijo;
import padre.Vehiculo;
public class Avion extends Vehiculo{
public Avion(int cap) {
super(cap);
}
// Sobre-escritura
public String caracteristicas(){
return "Tengo una capacidad de "+capacidad+ "
pasajeros \n"+
"Puedo volar, tengo una velocidad enorme \n"+
"pero consumo mucho combustible";
}
}
// Ejemplo de uso Clase Principal
import hijo.*;
...
...
void procesar(){
Carro obj1 = new Carro(6);
imprimir("Objeto Carro:");
imprimir(obj1.caracteristicas());
Avion obj2 = new Avion(300);
imprimir("\nObjeto Avin:");
imprimir(obj2.caracteristicas());
}
CARRERAS PROFESIONALES
CIBERTEC
139
3) Relacin tiene-un
La relacin tiene-un consiste en que la clase A tenga una referencia a un objeto de la
clase B por ejemplo:
package semana13;
public class A {
//Atributo privado
private B obj;
}
De tal forma, que atravs de la referencia obj se puede acceder a los miembros de la
clase B.
Ejemplo 4:
Disee un programa que a la pulsacin del botn Procesar permita aperturar la cuenta
de un cliente. Para ello, considere que la cuenta tiene los siguientes datos: nmero de
la cuenta, saldo de la cuenta, fecha de apertura (fecha del sistema en el formato:
dd/mm/aaaa) y titular de la cuenta.
El titular de la cuenta es un cliente que tiene los siguientes datos: cdigo de cliente,
nombre, apellidos y telfono.
Cdigo de la clase Cuenta:
package semana13;
public class Cuenta {
//Atributos privados
private int nro;
private Cliente titular;
private double saldo;
private String fecApertura;
private Fecha fec;
//Constructor
public Cuenta(int nro, Cliente titular, double saldo) {
this.nro = nro;
this.titular = titular;
this.saldo = saldo;
fec = new Fecha();
fecApertura = fec.getFecha();
}
//Mtodos de acceso: get
public int getNro(){
return nro;
}
public String getDatosTitular(){
return "Codigo Cliente:"+titular.getCodigo()+"\n"+
"Nombre Cliente:"+titular.getNombre()+"\n"+
"Apellidos Cliente:"+ titular.getApellidos()+
CIBERTEC
CARRERAS PROFESIONALES
140
CARRERAS PROFESIONALES
CIBERTEC
141
gc;
//Constructor
public Fecha() {
gc = new GregorianCalendar();
dd = gc.get(Calendar.DAY_OF_MONTH);
mm = gc.get(Calendar.MONTH);
aa = gc.get(Calendar.YEAR);
}
//Mtodo
public String getFecha(){
return dd+"/"+(mm+1)+"/"+aa;
}
}
Cdigo de la clase Principal:
import semana13.*;
...
...
void procesar(){
Cliente cli = new Cliente(100,"Rodolfo","Garcia","4451234");
Cuenta cta = new Cuenta(925671,cli,3500);
listar(cta);
}
void listar(Cuenta x){
imprimir("Codigo de cuenta:"+x.getNro());
imprimir("Titular de la cuenta:");
imprimir(x.getDatosTitular());
imprimir("Saldo de la cuenta:"+x.getSaldo());
imprimir("Fecha de apertura de la cuenta:" +
x.getFechaApertura());
}
Importante:
La clase Cuenta tiene un objeto de tipo Cliente por lo que podemos acceder
a los mtodos de la clase Cliente con el mtodo getDatosTitular()
La clase Cuenta tiene un objeto de tipo Fecha por lo que podemos acceder
al mtodo getFecha() de la clase Fecha cuando hacemos fec.getFecha()
La clase Fecha tiene un objeto de tipo GregorianCalendar por lo que
podemos obtener el dia, mes y ao del sistema.
CIBERTEC
CARRERAS PROFESIONALES
142
Ejemplo 5:
Dada la clase Cuadrado que permite calcular el rea de un cuadrado, se le pide
disear una clase CuadradoRelleno que herede de la clase Cuadrado y que adems
de permitir obtener el rea del cuadrado permita dibujar el cuadrado con un carcter
de relleno especificado.
Use luego la clase CuadradoRelleno para implementar el programa DibujoCuadrado
que lea el lado y el carcter de relleno y dibuje y muestre el rea del cuadrado.
EJEMPLO:
Datos ingresados:
Lado : 4
Carcter : &
Salida de resultados:
---------------------------&&&&
&&&&
&&&&
&&&&
Area : 16
---------------------------public class Cuadrado {
// Atributo
private int lado;
// Constructor
public Cuadrado( int lado ){
this.lado = lado;
}
// Fija el lado
public void setLado( int lado ){
this.lado = lado;
}
// Retorna el lado
public int getLado(){
return lado;
}
// Retorna el rea
public int area(){
return lado*lado;
}
}
CARRERAS PROFESIONALES
CIBERTEC
143
Programa DibujoCuadrado:
Tenemos los mtodos para obtener los datos de la GUI
//--------------------------------------------------------int getLado(){
return Integer.parseInt(txtLado.getText());
}
//--------------------------------------------------------char getCaracter(){
return txtCaracter.getText().charAt(0);
}
En el mtodo Procesar se crea el objeto de tipo CuadradoRelleno y se llama a los
mtodos dibujar() y area()
void procesar(){
int area;
CuadradoRelleno c = new CuadradoRelleno
(getLado(),getCaracter(),this);
c.dibujar();
area = c.area();
txtS.append("\nEl Area es:"+area);
}
CIBERTEC
CARRERAS PROFESIONALES
144
Ejercicios
CARRERAS PROFESIONALES
CIBERTEC
145
CIBERTEC
CARRERAS PROFESIONALES
146
UNIDAD DE
APRENDIZAJE
4
SEMANA
14
HERENCIA Y POLIMORFISMO
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos entienden el concepto de herencia y
polimorfismo, la relacin de generalizacin/especializacin entre clases, se emplean
las tcnicas de casting y clases abstractas en casos prcticos.
TEMARIO
Operador instanceof
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
147
Upcasting : Interpretar un objeto de una clase derivada como del mismo tipo
que la clase base. Tambin se puede ver como la conversin de un tipo en
otro superior en la jerarquia de clases. No hace falta especificarlo
Downcasting: Interpretar un objeto de una clase base como del mismo tipo que
su clase derivada. Tambin se puede ver como la conversin de un tipo en otro
inferior en la jerarquia de clases. Se especifica precediendo al objeto a
convertir con el nuevo tipo entre parntesis.
Ejemplo1:
Clase Animal
package semana14;
public class Animal {
public String hacerRuido(){
return "no definido";
}
}
Clase Mamifero
package semana14;
public class Mamifero extends Animal{
public String mensaje(){
return "soy mamfero";
}
}
Clase Perro
package semana14;
public class Perro extends Mamifero{
public String mensaje(){
return "Soy perro";
}
public String hacerRuido(){
return "Guau";
}
}
CIBERTEC
CARRERAS PROFESIONALES
148
Clase Principal
Aplicando Upcasting:
void procesar(){
Mamifero m1 = new Perro();
imprimir(m1.mensaje());
imprimir(m1.hacerRuido());
}
Se esta creando un objeto de tipo Perro. Pero, m1 es de tipo Mamfero (clase
superior en la jerarqua de clases del ejemplo). Los mtodos mensaje() y
hacerRuido() deben existir en la clase Mamifero o se deben heredar de una clase
superior (clase Animal) para que compile. Como el objeto es un Perro y los
mtodos mensaje() y hacerRuido() se estan sobre-escribiendo en la clase Perro la
salida es:
Soy perro
Guau
Pero, si en la clase Perro no se hubier sobre-escrito el mtodo mensaje() la salida
hubier sido:
soy mamfero
Guau
Y si no se hubier sobre-escrito ni el mtodo mensaje() ni el mtodo hacerRuido()
la salida hubier sido:
soy mamfero
no definido
Al ejecutar un mtodo, se busca su implementacin de abajo hacia arriba en la
jerarqua de clases. Los casting no modifican al objeto. Slo su tipo, por lo que se
siguen ejecutando sobre el mismo objeto.
Aplicando Downcasting:
void procesar(){
Animal a = new Perro();
Perro p = (Perro)a;
imprimir(p.hacerRuido());
}
Se esta creando un objeto de tipo Perro que se almacena en la variable de
referencia a de tipo Animal (clase superior en la jerarquia de clases del ejemplo).
Luego, la referencia a se convierte a tipo Perro y atravs de p se accesa al
objeto. Se entender su aplicacin con el ejemplo completo de polimorfismo que se
ver en las siguientes pginas.
CARRERAS PROFESIONALES
CIBERTEC
149
CIBERTEC
CARRERAS PROFESIONALES
150
Clase Gato
package hijo;
import padre.Mamifero;
public class Gato extends Mamifero{
public String hacerRuido(){
return "Miau";
}
public String mensaje(){
return "soy gato";
}
}
Clase Principal
import padre.Mamifero;
import hijo.*;
...
...
void procesar(){
Gato g = new Gato();
listar(g);
Perro p = new Perro();
listar(p);
}
// listar es un mtodo polifrmico
void listar( Mamifero x ){
imprimir(x.hacerRuido());
imprimir(x.mensaje());
}
Salida:
Miau
soy gato
Guau
soy mamfero
CARRERAS PROFESIONALES
CIBERTEC
151
3) Operador instanceof
Se utiliza el operador instanceof para determinar si el objeto es de la clase esperada
antes de realizar el casting.
Ejemplo 3:
Implemente la clase abstracta Persona en el paquete semana14 con los siguientes
miembros:
- Atributos protegidos: apellidos, nombres y edad
- Constructor que inicializa los atributos de la clase.
- Un mtodo abstracto mostrarDatos() para mostrar los datos de la persona creada.
- Un mtodo generarCorreo() que retorna el correo formado por el primer carcter del
nombre, el primer carcter del apellido, la edad y al final @cibertec.edu.pe.
Luego, implemente dos subclases de Persona: Docente y Alumno en el paquete
semana14.
Docente presenta los siguientes miembros:
- Atributos privados: horas que dicta por semana y tarifa.
- Constructor con parmetros para inicializar los atributos: apellidos, nombres, edad
horas y tarifa.
- Redefina o sobrescriba el mtodo mostrarDatos()
- Mtodo calcularSueldo() que retorna horasXtarifa.
Alumno presenta los siguientes miembros:
- Atributos privados: tres notas de tipo double.
- Constructor con parmetros para inicializar los atributos: apellidos, nombres, edad y
las tres notas.
- Redefina o sobrescriba el mtodo mostrarDatos()
- Mtodo calcularPromedio() que retorna el promedio simple de las tres notas.
Por ltimo, implemente el mtodo Procesar de la clase Principal que contiene el
actionPerformed() para crear los objetos de Docente y Alumno e invoque al
mtodo listar para mostrar los datos de los objetos creados.
Clase Persona
package semana14;
public abstract class Persona {
protected String apellido,nombre;
protected int edad;
public Persona(String ape, String nom, int ed) {
apellido=ape;
nombre=nom;
edad=ed;
}
public abstract String mostrarDatos();
CIBERTEC
CARRERAS PROFESIONALES
152
CARRERAS PROFESIONALES
CIBERTEC
153
CIBERTEC
CARRERAS PROFESIONALES
154
Clase Figura
package semana14;
public abstract class Figura {
protected int x;
protected int y;
public Figura(int x, int y) {
this.x=x;
this.y=y;
}
public abstract double area();
public abstract String mostrarDatos();
}
Clase Rectngulo
package semana14;
public class Rectangulo extends Figura{
private double ancho, alto;
public Rectangulo(int x, int y, double ancho, double alto){
super(x,y);
this.ancho=ancho;
this.alto=alto;
}
CARRERAS PROFESIONALES
CIBERTEC
155
CIBERTEC
CARRERAS PROFESIONALES
156
void procesar(){
Figura[] fig = new Figura[4];
fig[0]
fig[1]
fig[2]
fig[3]
=
=
=
=
new
new
new
new
listar(fig);
Figura fMayor = figuraMayor(fig);
imprimir("El rea mayor es " + fMayor.area());
}
void listar(Figura[] x){
for(int i=0; i<x.length; i++){
imprimir("Datos del "+x[i].getClass().getName());
imprimir(x[i].mostrarDatos());
}
}
Importante:
-
CARRERAS PROFESIONALES
CIBERTEC
157
Ejercicios
CIBERTEC
CARRERAS PROFESIONALES
158
CARRERAS PROFESIONALES
CIBERTEC
159
UNIDAD DE
APRENDIZAJE
5
SEMANA
15
INTERFACES
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, los alumnos entienden el concepto de herencia mltiple.
Crean e implementan interfaces.
TEMARIO
Herencia mltiple
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
160
1) Creacin de Interfaces
Una interfaz es una clase completamente abstracta, es decir es una clase sin
implementacin.
Una interfaz es cuando lo nico que puede tener son declaraciones de mtodos y
definiciones de constantes simblicas. En Java, las interfaces se declaran con la
palabra reservada interface.
La clase que implementa una o ms interfaces utiliza la palabra reservada
implements. Para ello, es necesario que la clase implemente todos los mtodos
definidos por la interfaz.
Una interfaz podr verse, simplemente, como una forma, es como un molde,
solamente permite declarar nombres de mtodos y en este caso no es necesario
definirlos como abstractos puesto que lo son implcitamente. Y si adicionalmente tiene
miembros datos, stos sern constantes, es decir, static y final.
Al utilizar implements para el interfaz es como si se hiciese una accin de copiar y
pegar del cdigo del interfaz, con lo cual no se hereda nada, solamente se pueden
usar los mtodos.
La ventaja principal del uso de interfaces es que puede ser implementada por
cualquier nmero de clases, permitiendo a cada clase compartir el interfaz de
programacin sin tener que ser consciente de la implementacin que hagan las otras
clases que implementen el interfaz.
La principal diferencia entre interface y clase abstracta es que un interfaz
proporciona un mecanismo de encapsulacin de los protocolos de los mtodos sin
forzar al usuario a utilizar la herencia.
Ejemplo 1
Cdigo de la interfaz: Constantes
package interfaces;
public interface Constantes {
double pi = 3.14;
int constanteInt = 5;
}
Cdigo de la interfaz: Interfaz1
package interfaces;
public interface Interfaz1 {
void put( int dato );
int get();
}
Cdigo de la clase: ClaseA
package clases;
import interfaces.*;
CARRERAS PROFESIONALES
CIBERTEC
161
CIBERTEC
CARRERAS PROFESIONALES
162
Dibujable
Mtodo:
dibujar()
Figura
Atributos: x,y
Mtodos:
Figura(constructor)
ubicacion()
area()
Cuadrado
Atributo: lado
Mtodos:
Cuadrado(constructor)
area()
dibujar()
Rotable
Mtodo:
rotar()
Circulo
Atributo: radio
Mtodos:
Circulo(constructor)
area()
dibujar()
rotar()
CARRERAS PROFESIONALES
CIBERTEC
163
package interfaces;
public interface Rotable {
String rotar();
}
package clases;
public abstract class Figura{
protected int x;
protected int y;
public Figura(int x, int y) {
this.x = x;
this.y = y;
}
public String ubicacion(){
return "figura ubicada en: "+x+", "+y;
}
public abstract double area() ;
}
package clases;
import interfaces.Dibujable;
public class Cuadrado extends Figura implements Dibujable{
private double lado;
public Cuadrado(int x, int y, double lado) {
super(x, y);
this.lado = lado;
}
//Sobre-escritura
public double area() {
return lado*lado;
}
//Sobre-escritura
public String dibujar() {
return "El cuadrado puede ser dibujado";
}
}
package clases;
import interfaces.*;
public class Circulo extends Figura implements Dibujable,
Rotable {
private double radio;
CIBERTEC
CARRERAS PROFESIONALES
164
CARRERAS PROFESIONALES
CIBERTEC
165
Aplicacin 1:
Disee una aplicacin que muestre las operaciones de avanzar, detener, retroceder,
subir y bajar que puede hacer los siguientes medios de transporte: Auto, Bicicleta,
Moto, Avin y Helicptero. Considere que hay vehculos que son terrestres y otros que
son aereos. Por lo tanto, hay operaciones que por ejemplo un avin puede hacer pero
no un auto. En la solucin emplee interfaces, clases abstractas y subclases.
package interfaces;
public interface Movimiento{
String avanzar();
String detener();
String retroceder();
}
package interfaces;
public interface Volar{
String subir();
String bajar();
}
package clases;
import interfaces.Movimiento;
public abstract class Transporte implements Movimiento{
protected int capacidad;
public Transporte(int capacidad){
this.capacidad=capacidad;
}
public abstract String mostrarCapacidad();
public String avanzar(){
return "no hay mensaje";
}
public String detener(){
return "no hay mensaje";
}
public String retroceder(){
return "no hay mensaje";
}
}
CIBERTEC
CARRERAS PROFESIONALES
166
package clases;
public class Auto extends Transporte{
public Auto(int capacidad){
super(capacidad);
}
public String mostrarCapacidad(){
return "Capacidad de pasajeros del Auto:"+capacidad;
}
public String avanzar(){
return "el auto esta avanzando";
}
}
package clases;
public class Bicicleta extends Transporte{
public Bicicleta(int capacidad){
super(capacidad);
}
public String mostrarCapacidad(){
return "Capacidad de pasajeros de la Bicicleta:"+capacidad;
}
public String avanzar(){
return "la bicicleta esta avanzando";
}
public String detener(){
return "la bicicleta se detuvo";
}
}
package clases;
public class Moto extends Transporte{
public Moto(int capacidad){
super(capacidad);
}
public String mostrarCapacidad(){
return "Capacidad de pasajeros de la Moto:"+capacidad;
}
public String avanzar(){
return "la moto esta avanzando";
}
CARRERAS PROFESIONALES
CIBERTEC
167
CIBERTEC
CARRERAS PROFESIONALES
168
Clase Principal:
import
import
import
import
java.awt.event.*;
java.awt.*;
javax.swing.*;
clases.*;
CARRERAS PROFESIONALES
CIBERTEC
169
scpScroll.setBounds(20,60,430,420);
getContentPane().add(scpScroll);
}
// Procesa eventos de tipo ActionEvent
public void actionPerformed( ActionEvent e ){
if(e.getSource()==btnProcesar){
procesar();
}
}
void procesar(){
Auto auto1=new Auto(5);
listar(auto1);
Moto moto1=new Moto(2);
listar(moto1);
Bicicleta bici1=new Bicicleta(1);
listar(bici1);
Avion avion1=new Avion(300);
listar(avion1);
imprimir(avion1.subir());
imprimir(avion1.bajar());
Helicoptero heli1=new Helicoptero(10);
listar(heli1);
imprimir(heli1.subir());
imprimir(heli1.bajar());
}
void listar(Transporte x){
imprimir(x.mostrarCapacidad());
imprimir(x.avanzar());
imprimir(x.detener());
imprimir(x.retroceder());
}
void imprimir(String cad){
txtS.append(cad + "\n");
}
}
CIBERTEC
CARRERAS PROFESIONALES
170
CARRERAS PROFESIONALES
CIBERTEC
171
ANEXO
CASO INMOBILIARIA
OBJETIVO ESPECFICO
Solucin de un caso prctico donde se emplea la tcnica POO
TEMARIO
CIBERTEC
CARRERAS PROFESIONALES
172
Caso Inmobiliaria:
Una inmobiliaria desea que le desarrollen una aplicacin que le permita dar una
informacin adecuada sobre las propiedades que renta a sus clientes, para lo cual
se debe desarrollar lo siguiente:
Mantenimiento de propiedades que renta, es decir debe considerar las
siguientes opciones: Ingresos, Consultas, Modificacin y Eliminacin.
Diariamente acuden muchos clientes a la inmobiliaria buscando Informacin sobre
casas y departamentos que estn disponibles y que cubra sus expectativas, por lo
tanto se desea que la aplicacin realice las siguientes bsquedas:
- Bsqueda segn un intervalo de rea.
- Bsqueda segn un intervalo de precio.
- Bsqueda segn un intervalo de rea y un intervalo de precio.
- Bsqueda de la propiedad ms barata.
- Bsqueda de la propiedad ms cara.
De cada propiedad se conoce:
Cdigo
Ancho
Largo
Precio
Habitaciones
Disponibilidad
Piso
Jardn
: entero y nico
: real en metros
: real en metros
: real en soles
: entero
: true (no rentado) y false (rentado)
: entero (slo en el caso de departamentos, se refiere a la
ubicacin del departamento dentro del edificio)
: true (con jardn) y false (sin jardn), slo para casas.
CARRERAS PROFESIONALES
CIBERTEC
173
CIBERTEC
CARRERAS PROFESIONALES
174
CARRERAS PROFESIONALES
CIBERTEC
175
CIBERTEC
CARRERAS PROFESIONALES
176
CARRERAS PROFESIONALES
CIBERTEC
177
CIBERTEC
CARRERAS PROFESIONALES
178
Clase Departamento
package renta;
public class Departamento extends Propiedad {
private int piso;
public Departamento( int codigo, int hab, double ancho,
double largo, double precio, boolean disp, int piso){
CARRERAS PROFESIONALES
CIBERTEC
179
super(codigo,hab,ancho,largo,precio,disp);
this.piso=piso;
}
public void setPiso( int piso ){
this.piso = piso;
}
public int getPiso(){
return piso;
}
public String comoCadena(){
return codigo + "\t" + ancho + "\t" + largo + "\t" +
precio + "\t" + area() + "\t"+ piso;
}
}
Clase ArregloCasas
package arreglos;
import java.util.*;
import java.io.*;
import renta.Casa;
public class ArregloCasas{
private ArrayList <Casa> aCasas;
public ArregloCasas(){
aCasas=new ArrayList <Casa> ();
}
public void agregar(Casa x){
aCasas.add(x);
}
public Casa obtener(int pos){
return aCasas.get(pos);
}
public int tamao(){
return aCasas.size();
}
public Casa buscar(int cod){
for(int i=0; i<aCasas.size(); i++){
int pcod=obtener(i).getCodigo();
if(pcod==cod)
return obtener(i);
}
return null;
}
public void eliminar(Casa x){
aCasas.remove(x);
CIBERTEC
CARRERAS PROFESIONALES
180
}
public double precioMenor(){
double menor = Double.MAX_VALUE;
for( int i = 0; i < aCasas.size(); i++ )
if( aCasas.get(i).getPrecio() < menor &&
aCasas.get(i).getDisp() )
menor = aCasas.get(i).getPrecio();
return menor;
}
public double precioMayor(){
double mayor = Double.MIN_VALUE;
for( int i = 0; i < aCasas.size(); i++ )
if( aCasas.get(i).getPrecio() > mayor &&
aCasas.get(i).getDisp() )
mayor = aCasas.get(i).getPrecio();
return mayor;
}
public void cargarCasas(){
try{
BufferedReader br = new BufferedReader(new
FileReader("casas.txt"));
String linea;
while( (linea = br.readLine()) != null ){
StringTokenizer tokens = new
StringTokenizer(linea,",");
int codigo = Integer.parseInt(
tokens.nextToken().trim());
int hab
= Integer.parseInt(
tokens.nextToken().trim());
double ancho = Double.parseDouble(
tokens.nextToken().trim());
double largo = Double.parseDouble(
tokens.nextToken().trim());
double precio = Double.parseDouble(
tokens.nextToken().trim());
boolean disp = Boolean.parseBoolean(
tokens.nextToken().trim());
boolean jardin = Boolean.parseBoolean(
tokens.nextToken().trim());
aCasas.add(new Casa(codigo,hab,ancho,
largo,precio,disp,jardin));
}
br.close();
}
catch( Exception x ){
System.out.println("Error: " + x);
}
}
public void grabarCasa(){
try{
PrintWriter pw = new PrintWriter(new
FileWriter("casas.txt"));
CARRERAS PROFESIONALES
CIBERTEC
181
String linea;
for(int i=0; i<aCasas.size(); i++){
linea =aCasas.get(i).getCodigo()+ ","+
aCasas.get(i).getHab()+ ","+
aCasas.get(i).getAncho()+ ","+
aCasas.get(i).getLargo()+ ","+
aCasas.get(i).getPrecio()+ ","+
aCasas.get(i).getDisp()+ ","+
aCasas.get(i).getJardin();
pw.println(linea);
}
pw.close();
}
catch( Exception x ){
}
}
}
Clase ArregloDepartamentos
package arreglos;
import java.util.*;
import java.io.*;
import renta.Departamento;
public class ArregloDepartamentos{
private ArrayList <Departamento> aDptos;
public ArregloDepartamentos(){
aDptos=new ArrayList <Departamento> ();
}
public void agregar(Departamento x){
aDptos.add(x);
}
public Departamento obtener(int pos){
return aDptos.get(pos);
}
public int tamao(){
return aDptos.size();
}
public Departamento buscar(int cod){
for(int i=0; i<aDptos.size(); i++){
int pcod=obtener(i).getCodigo();
if(pcod==cod)
return obtener(i);
}
return null;
}
CIBERTEC
CARRERAS PROFESIONALES
182
CARRERAS PROFESIONALES
CIBERTEC
183
java.awt.*;
java.applet.*;
javax.swing.*;
arreglos.*;
CIBERTEC
CARRERAS PROFESIONALES
184
CARRERAS PROFESIONALES
CIBERTEC
185
CIBERTEC
CARRERAS PROFESIONALES
186
}
Clase PFormulario
import javax.swing.*;
import java.awt.*;
public class PFormulario extends JPanel{
protected JComboBox cboOpcion;
protected JLabel lblTitulo,lblOpcion,lblCodigo,
lblAncho,lblLargo,lblPrecio,lblHab, lblFoto1,
lblFoto2,lblFoto3;
protected JTextField txtCodigo,txtAncho, txtLargo,
txtPrecio,txtHab;
protected JCheckBox chkDispo;
protected JButton btnAceptar,btnCancelar,
btnModificar,btnEliminar;
public PFormulario() {
setLayout(null);
setBackground(Color.lightGray);
lblTitulo=new JLabel("",JLabel.CENTER);
lblTitulo.setFont(new Font("Arial",Font.BOLD,20));
lblTitulo.setBounds(0,20,600,20);
add(lblTitulo);
lblOpcion=new JLabel("Opcin:");
lblOpcion.setBounds(10,70,150,20);
add(lblOpcion);
lblCodigo=new JLabel("Codigo:");
lblCodigo.setBounds(10,92,150,20);
add(lblCodigo);
lblAncho=new JLabel("Ancho:");
lblAncho.setBounds(10,112,150,20);
add(lblAncho);
lblLargo=new JLabel("Largo:");
lblLargo.setBounds(10,132,150,20);
add(lblLargo);
lblPrecio=new JLabel("Precio:");
lblPrecio.setBounds(10,152,150,20);
add(lblPrecio);
lblHab=new JLabel("Habitaciones:");
lblHab.setBounds(10,172,150,20);
add(lblHab);
cboOpcion=new JComboBox();
cboOpcion.setBounds(150,70,150,20);
cboOpcion.addItem("Ingresos");
CARRERAS PROFESIONALES
CIBERTEC
187
cboOpcion.addItem("Consultas");
cboOpcion.addItem("Modificacin");
cboOpcion.addItem("Eliminacin");
add(cboOpcion);
txtCodigo=new JTextField();
txtCodigo.setBounds(150,92,150,20);
add(txtCodigo);
txtAncho=new JTextField();
txtAncho.setBounds(150,112,150,20);
add(txtAncho);
txtLargo=new JTextField();
txtLargo.setBounds(150,132,150,20);
add(txtLargo);
txtPrecio=new JTextField();
txtPrecio.setBounds(150,152,150,20);
add(txtPrecio);
txtHab=new JTextField();
txtHab.setBounds(150,172,150,20);
add(txtHab);
chkDispo=new JCheckBox("Disponibilidad");
chkDispo.setBounds(400,152,150,20);
chkDispo.setBackground(Color.lightGray);
add(chkDispo);
btnAceptar = new JButton("Aceptar");
btnAceptar.setBounds(400,80,100,25);
add(btnAceptar);
btnCancelar = new JButton("Cancelar");
btnCancelar.setBounds(400,110,100,25);
add(btnCancelar);
btnModificar = new JButton("Modificar");
btnModificar.setBounds(400,80,100,25);
btnModificar.setVisible(false);
add(btnModificar);
btnEliminar = new JButton("Eliminar");
btnEliminar.setBounds(400,80,100,25);
btnEliminar.setVisible(false);
add(btnEliminar);
lblFoto1=new JLabel(new ImageIcon("foto1.jpg"));
lblFoto1.setBounds(50,260,150,100);
add(lblFoto1);
lblFoto2=new JLabel(new ImageIcon("foto2.jpg"));
lblFoto2.setBounds(220,260,150,100);
add(lblFoto2);
CIBERTEC
CARRERAS PROFESIONALES
188
java.awt.*;
java.awt.event.*;
javax.swing.*;
compartido.LibGUI;
renta.Casa;
CARRERAS PROFESIONALES
CIBERTEC
189
pri=x;
lblTitulo.setText("Mantenimiento de Casas");
btnAceptar.addActionListener(this);
btnCancelar.addActionListener(this);
cboOpcion.addItemListener(this);
chkDispo.addItemListener(this);
btnModificar.addActionListener(this);
btnEliminar.addActionListener(this);
chkJardin=new JCheckBox("Jardin");
chkJardin.setBounds(400,172,150,20);
chkJardin.setBackground(Color.lightGray);
chkJardin.addItemListener(this);
add(chkJardin);
pri.aCas.cargarCasas();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==btnAceptar)
aceptar();
if(e.getSource()==btnCancelar)
cancelar();
if(e.getSource()==btnModificar)
modificarCasa();
if(e.getSource()==btnEliminar)
eliminarCasa();
}
public void itemStateChanged(ItemEvent e){
if(e.getItemSelectable()==chkDispo){
flagDispo=!flagDispo;
}
if(e.getItemSelectable()==chkJardin){
flagJardin=!flagJardin;
}
if(e.getSource()==cboOpcion){
int indice=cboOpcion.getSelectedIndex();
if(indice==1 || indice==3)
desabilitarControles();
else
habilitarControles();
}
}
protected void habilitarControles(){
super.habilitarControles();
CIBERTEC
CARRERAS PROFESIONALES
190
chkJardin.setEnabled(true);
}
protected void desabilitarControles(){
super.desabilitarControles();
chkJardin.setEnabled(false);
}
protected void limpiarControles(){
super.limpiarControles();
chkJardin.setSelected(false);
}
public void aceptar(){
int indice=cboOpcion.getSelectedIndex();
switch(indice){
case 0: ingresar(); break;
case 1: consultar(); break;
case 2: modificar(); break;
default: eliminar();
}
}
public void cancelar(){
pri.pnlCasa.setVisible(false);
pri.pnlPrincipal.setVisible(true);
habilitarControles();
limpiarControles();
existe=false;
cambio();
}
public void ingresar(){
int cod=LibGUI.getInteger(txtCodigo);
Casa Ocasa=pri.aCas.buscar(cod);
if(Ocasa==null){
double ancho=LibGUI.getDouble(txtAncho);
double largo=LibGUI.getDouble(txtLargo);
double precio=LibGUI.getDouble(txtPrecio);
int hab=LibGUI.getInteger(txtHab);
Ocasa=new Casa(cod,hab,ancho,largo,
precio,flagDispo,flagJardin);
pri.aCas.agregar(Ocasa);
pri.aCas.grabarCasa();
JOptionPane.showMessageDialog(this,"Casa
Agregada");
}
else
JOptionPane.showMessageDialog(this,"Cdigo ya
existe");
limpiarControles();
}
public void consultar(){
CARRERAS PROFESIONALES
CIBERTEC
191
int cod=LibGUI.getInteger(txtCodigo);
Casa Ocasa=pri.aCas.buscar(cod);
if(Ocasa!=null){
txtAncho.setText(""+Ocasa.getAncho());
txtLargo.setText(""+Ocasa.getLargo());
txtPrecio.setText(""+Ocasa.getPrecio());
txtHab.setText(""+Ocasa.getHab());
boolean flag1=Ocasa.getDisp();
boolean flag2=Ocasa.getJardin();
if(flag1)
chkDispo.setSelected(true);
else
chkDispo.setSelected(false);
if(flag2)
chkJardin.setSelected(true);
else
chkJardin.setSelected(false);
existe=true;
}
else{
JOptionPane.showMessageDialog(this,"Cdigo no
existe");
limpiarControles();
existe=false;
}
}
public void modificar(){
consultar();
if(existe){
btnAceptar.setVisible(false);
btnModificar.setVisible(true);
txtCodigo.setEditable(false);
cboOpcion.setEnabled(false);
}
}
public void modificarCasa(){
int cod=LibGUI.getInteger(txtCodigo);
Casa Ocasa=pri.aCas.buscar(cod);
Ocasa.setAncho(LibGUI.getDouble(txtAncho));
Ocasa.setLargo(LibGUI.getDouble(txtLargo));
Ocasa.setPrecio(LibGUI.getDouble(txtPrecio));
Ocasa.setHab(LibGUI.getInteger(txtHab));
Ocasa.setDisp(flagDispo);
Ocasa.setJardin(flagJardin);
pri.aCas.grabarCasa();
JOptionPane.showMessageDialog(this,"Cambio
efectuado");
cambio();
limpiarControles();
}
public void eliminar(){
consultar();
if(existe){
CIBERTEC
CARRERAS PROFESIONALES
192
btnAceptar.setVisible(false);
btnEliminar.setVisible(true);
txtCodigo.setEditable(false);
cboOpcion.setEnabled(false);
}
}
public void eliminarCasa(){
int cod=LibGUI.getInteger(txtCodigo);
pri.aCas.eliminar(pri.aCas.buscar(cod));
pri.aCas.grabarCasa();
JOptionPane.showMessageDialog(this,"Casa eliminada");
cambio();
limpiarControles();
}
}
Clase PDepartamento
import
import
import
import
import
java.awt.*;
java.awt.event.*;
javax.swing.*;
compartido.LibGUI;
renta.Departamento;
Principal pri;
boolean flagDispo=false, existe=false;
JLabel lblPiso;
JTextField txtPiso;
public PDepartamento(Principal x) {
pri=x;
lblTitulo.setText("Mantenimiento de Departamentos");
lblPiso=new JLabel("Piso:");
lblPiso.setBounds(10,192,150,20);
add(lblPiso);
txtPiso=new JTextField();
txtPiso.setBounds(150,192,150,20);
add(txtPiso);
btnAceptar.addActionListener(this);
btnCancelar.addActionListener(this);
cboOpcion.addItemListener(this);
chkDispo.addItemListener(this);
btnModificar.addActionListener(this);
btnEliminar.addActionListener(this);
pri.aDpt.cargarDepartamentos();
CARRERAS PROFESIONALES
CIBERTEC
193
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==btnAceptar)
aceptar();
if(e.getSource()==btnCancelar)
cancelar();
if(e.getSource()==btnModificar)
modificarDpto();
if(e.getSource()==btnEliminar)
eliminarDpto();
}
public void itemStateChanged(ItemEvent e){
if(e.getItemSelectable()==chkDispo){
flagDispo=!flagDispo;
}
if(e.getSource()==cboOpcion){
int indice=cboOpcion.getSelectedIndex();
if(indice==1 || indice==3)
desabilitarControles();
else
habilitarControles();
}
}
protected void habilitarControles(){
super.habilitarControles();
txtPiso.setEditable(true);
}
protected void desabilitarControles(){
super.desabilitarControles();
txtPiso.setEditable(false);
}
protected void limpiarControles(){
super.limpiarControles();
txtPiso.setText("");
}
public void aceptar(){
int indice=cboOpcion.getSelectedIndex();
switch(indice){
case 0: ingresar(); break;
case 1: consultar(); break;
case 2: modificar(); break;
default: eliminar();
}
}
CIBERTEC
CARRERAS PROFESIONALES
194
CARRERAS PROFESIONALES
CIBERTEC
195
CIBERTEC
java.awt.*;
java.awt.event.*;
javax.swing.*;
compartido.LibGUI;
renta.Propiedad;
CARRERAS PROFESIONALES
196
import arreglos.*;
public class PBusqueda extends JPanel implements
ActionListener, ItemListener {
private Principal pri;
private JLabel lblTitulo,lblTipo,lblBusqueda,lblArea,
lblA1,lblA2,lblPrecio;
private JComboBox cboTipo, cboBusqueda;
private JTextField txtAreaMax,txtAreaMin,
txtPrecioMax,txtPrecioMin;
private JButton btnProcesar,btnCancelar;
private JTextArea txtS;
private JScrollPane scpScroll;
public PBusqueda(Principal x) {
pri=x;
setLayout(null);
setBackground(Color.lightGray);
lblTitulo=new JLabel("Busquedas",JLabel.CENTER);
lblTitulo.setFont(new Font("Arial",Font.BOLD,20));
lblTitulo.setBounds(0,20,600,20);
add(lblTitulo);
lblTipo = new JLabel("Propiedad");
lblTipo.setBounds(10,60,60,20);
add(lblTipo);
cboTipo=new JComboBox();
cboTipo.setBounds(90,60,120,20);
cboTipo.addItem("Casa");
cboTipo.addItem("Departamento");
add(cboTipo);
lblBusqueda = new JLabel("Buscar por");
lblBusqueda.setBounds(250,60,80,20);
add(lblBusqueda);
cboBusqueda = new JComboBox();
cboBusqueda.setBounds(330,60,110,20);
cboBusqueda.addItem("Area");
cboBusqueda.addItem("Precio");
cboBusqueda.addItem("Area y Precio");
cboBusqueda.addItem("Mas barato");
cboBusqueda.addItem("Mas caro");
cboBusqueda.addItemListener(this);
add(cboBusqueda);
lblArea = new JLabel("Area");
lblArea.setBounds(90,90,60,20);
add(lblArea);
CARRERAS PROFESIONALES
CIBERTEC
197
CIBERTEC
CARRERAS PROFESIONALES
198
CARRERAS PROFESIONALES
CIBERTEC
199
btnProcesar.setEnabled(false);
limpiar();
}
public void limpiar(){
txtAreaMax.setText("");
txtAreaMin.setText("");
txtPrecioMax.setText("");
txtPrecioMin.setText("");
}
public void procesar(){
int indice=cboBusqueda.getSelectedIndex();
switch(indice){
case 0: buscar_area();
break;
case 1: buscar_precio();
break;
case 2: buscar_area_precio();
break;
case 3: buscar_mas_barato();
break;
default:buscar_mas_caro();
}
}
public void buscar_area(){
int indice=cboTipo.getSelectedIndex();
double areamax = LibGUI.getDouble(txtAreaMax);
double areamin = LibGUI.getDouble(txtAreaMin);
int conta = 0;
imprimir();
if(indice==0){
imprimir("Cdigo\tAncho\tLargo\tPrecio\tArea\tJardin");
for( int i = 0; i < pri.aCas.tamao(); i++ ){
Propiedad prop=pri.aCas.obtener(i);
if(prop.getDisp() && prop.area() >=
areamin && prop.area() <= areamax){
imprimir(prop.comoCadena());
conta++;
}
}
imprimir(conta + " casa(s) encontrada(s)");
}
else{
imprimir("Cdigo\tAncho\tLargo\tPrecio\tArea\tPiso");
for( int i = 0; i < pri.aDpt.tamao(); i++ ){
Propiedad prop=pri.aDpt.obtener(i);
CIBERTEC
CARRERAS PROFESIONALES
200
CARRERAS PROFESIONALES
CIBERTEC
201
CIBERTEC
CARRERAS PROFESIONALES
202
CARRERAS PROFESIONALES
CIBERTEC
203
CIBERTEC
CARRERAS PROFESIONALES