Guía de Programación en Java
Guía de Programación en Java
Pg.
1. Java ................................................ 1
4. Arreglo de objetos .. 24
6. Herencia Simple.. 46
9. Clases Genricas .. 76
Java es un lenguaje de programacin creado por Sun Microsystems para poder funcionar en
distintos tipos de procesadores. Su sintaxis es muy parecida a la de C o C++, e incorpora como
propias algunas caractersticas que en otros lenguajes son extensiones: gestin de hilos,
ejecucin remota, etc.
El cdigo Java, una vez compilado, puede llevarse sin modificacin alguna sobre cualquier
mquina, y ejecutarlo. Esto se debe a que el cdigo se ejecuta sobre una mquina hipottica o
virtual, la Java Virtual Machine, que se encarga de interpretar el cdigo (ficheros compilados
.class) y convertirlo a cdigo particular de la CPU que se est utilizando (siempre que se soporte
dicha mquina virtual).
Cuando se programa con Java, se dispone de antemano de un conjunto de clases ya
implementadas. Estas clases (aparte de las que pueda hacer el usuario) forman parte del propio
lenguaje (lo que se conoce como API (Application Programming Interface) de Java).
Tipos de datos
Se tienen los siguientes tipos de datos simples. Adems, se pueden crear complejos, todos los
cuales sern subtipos de Object .
Identificadores
Nombran variables, funciones, clases y objetos. Comienzan por una letra, carcter de subrayado
_ o smbolo $. El resto de caracteres pueden ser letras o dgitos (o _). Se distinguen
maysculas de minsculas, y no hay longitud mxima. Las variables en Java slo son vlidas
desde el punto donde se declaran hasta el final de la sentencia compuesta (las llaves) que la
engloba. No se puede declarar una variable con igual nombre que una de mbito exterior.
En Java se tiene tambin un trmino NULL, pero si bien el de C es con maysculas (NULL),
ste es con minsculas (null):
String a = null;
...
if (a == null)...
______________________________________________________________________
FISI UNMSM 1 Luis Guerra G.
Operadores
Se muestra una tabla con los operadores en orden de precedencia:
______________________________________________________________________
FISI UNMSM 2 Luis Guerra G.
1. Clase, Objeto, Campos, Mtodos
Ejemplo:
class Factura {
// Campos
______________________________________________________________________
FISI UNMSM 3 Luis Guerra G.
private int numero;
private double importe;
// Mtodos
public void grabar () {
...
...
}
} // Factura
Declaracin de Objetos
El operador new se utiliza para crear un objeto de un tipo de clase especfica, es decir,
que asigne memoria para el objeto.
Para utilizar el operador new tenemos dos sintaxis.
Sintaxis 1
NombreDeClase nombreDeVariable;
nombreDeVariable = new NombreDeClase ( );
Sintaxis 2
NombreDeClase nombreDeVariable = new NombreDeClase ( );
En este caso tanto la creacin de la variable y la creacin del objeto se realizan en la
misma instruccin.
______________________________________________________________________
FISI UNMSM 4 Luis Guerra G.
Figura 2: Instanciacin de una clase (Creacin de un objeto)
Asignacin de Objetos
Cuando creamos un objeto internamente existe un puntero al que no tenemos acceso,
pero cuando asignamos objetos, lo que realmente estamos asignando son las
direcciones de memoria donde estn definidos los objetos, como se explica en la figura
3.
Definicin
Los campos definen los datos de un objeto; cuando definimos una clase debemos
definirlos y establecer su visibilidad:
La visibilidad determina desde que parte del cdigo se puede acceder al campo.
Sintaxis:
[TipoAcceso] [ModificadorCampo] Tipo nombreCampo [= ValorInicial];
______________________________________________________________________
FISI UNMSM 5 Luis Guerra G.
se realiza a travs de una instancia del objeto. +
abstract Indica que solo se puede acceder al campo desde
mtodos de la misma clase y clases derivadas
(subclases)
Final Indica que solo se puede acceder al campo desde -
mtodos de la misma clase.
Sin especificar Indica acceso de paquete1, se puede acceder al campo
a travs de una instancia, pero slo desde clases que
se encuentren en el mismo paquete.
Ejemplo:
En este ejemplo se lustra el uso de los mtodos set y get.
class Factura {
// Campos
private int numero;
// Mtodos set y get
public void setNumero (int numero) {
this.numero = numero;
}
public int getNumero ( ) {
return this.numero;
}
. . .
. . .
} // Factura
______________________________________________________________________
FISI UNMSM 7 Luis Guerra G.
TRABAJANDO CON MTODOS
Definicin
Los mtodos definen el comportamiento de un objeto de una clase concreta y tienen las
siguientes caractersticas:
- Agrupan las responsabilidades del objeto (competencias).
- Describen sus acciones.
Las acciones realizadas por un objeto son consecuencia directa de un estmulo externo
(un mensaje enviado desde otro objeto) y dependen del estado del objeto. El estado y
comportamiento de un objeto estn relacionados. Por ejemplo, un avin no puede
aterrizar (accin) sino est en vuelo (estado).
Sintaxis:
[TipoAcceso] [ModificadorMtodo]
Tipo NombreMtodo ( [ ListaDeParmetros ] ) {
// Cuerpo de mtodo
}
El Tipo determina el tipo de dato que debe retornar el mtodo, puede ser cualquier tipo
vlido, incluso los tipos de clases creados por el programador. Si el mtodo no retorna
ningn valor se debe especificar void.
Los parmetros son opcionales, pero si son necesarios se deben especificar de la
siguiente manera:
Tipol parmetro1, tipo2 parametro2, ... ;
Los parmetros son variables que reciben valores de los argumentos que se le pasan
al mtodo cuando ste es invocado.
Los mtodos que son de un tipo diferente de void, deben retornan un valor a la
instruccin que realiza la llamada mediante la instruccin return, utilizando la siguiente
sintaxis:
return expresin;
Donde expresin representa el valor que retorna el mtodo.
Sobrecarga de Mtodos
Un mtodo se identifica por su nombre, la cantidad de parmetros y el tipo de sus
parmetros; esto constituye la firma del mtodo (signature).
La sobrecarga permite tener varios mtodos con igual nombre pero con diferente
forma, o sea, con diferente cantidad de parmetros y diferentes tipos de datos de sus
parmetros. Los mtodos tendrn comportamientos diferentes segn el tipo de dato,
cantidad de parmetros o ambos. Al invocar un mtodo, el compilador busca en la
clase el mtodo que corresponda a los argumentos de la invocacin.
Un ejemplo ilustrativo lo tenemos con el mtodo valueOf de la clase String.
Ejemplo:
Supongamos que queremos un mtodo que sume dos nmeros, podras necesitar que
sume dos nmeros de tipo int o double; entonces debemos implementar dos mtodos
con el mismo nombre por que se trata de la misma operacin, podra ser sumar, pero
con diferentes tipos de datos de sus parmetros, tal como se lustra a continuacin:
package egcc;
public class Matematica {
public int sumar (int n1, int n2) {
int suma;
suma = n1 + n2;
return suma;
}
public double sumar (double n1, doble n2
double suma;
suma = n1 + n2;
return suma;
}
______________________________________________________________________
FISI UNMSM 10 Luis Guerra G.
} // Matemtica
Cuando usamos la clase Matemtica el IDE nos permite visualizar los diversos
mtodos que estn sobrecargados:
EJEMPLO
Abstraccin
A continuacin tenemos algunas alternativas de abstraer el problema.
Caso 01
En este caso los atributos son pblicos (visibilidad publica) por
Banco
lo tanto se puede acceder de manera directa desde + capital : double
+ interes : double
cualquier otra clase u objeto. + periodo : int
El mtodo calcularlmporte hace el clculo en funcin al
+ calcularImporte()
valor de los campos capital, inters y periodo.
Caso 02
En este caso tenemos un solo mtodo que tiene tres parmetros, a travs de los cuales
recibe los datos para hacer el clculo y retorna el resultado correspondiente.
Banco
+ calcularImporte(capital: double, interes : double, periodos : int) : Double
______________________________________________________________________
FISI UNMSM 11 Luis Guerra G.
package tpagoxPrestamo;
public class Banco {
private double capital;
private double interes;
private int periodos;
//Proceso
objBanco.setCapital(capital);
objBanco.setInteres(interes);
objBanco.setPeriodos(periodos);
double importe=objBanco.getImporte();
//resultado
this.txtImporte.setText(String.valueOf(importe));
}
Referencia:
Desarrollando soluciones con Java y MySql.
Eric Gustavo Coronel.
Captulo 3
Ejemplo
Dada la clase persona con los atributos: nombre, edad, generar dos instancias de la clase:
alumno, profesor; y los mtodos: para asignar nombre nombre, edad, y luego visualizar dichos
datos.
//publicos:
public void AsignarNombre(String nom){
nombre=nom;
}
public void AsignarEdad(int e){
edad=e;
}
public String ObtenerNombre(){
return nombre;
}
}
}
******************************
Ejemplo 2
public class CComputador {
String marca;
String procesador;
boolean computadorencendido=true;
}
public static void main(String[] args) {
CComputador computador1=new CComputador();
computador1.marca="DELL";
computador1.procesador="Core 2 duo";
computador1.encendercomputador();
computador1.estado();
______________________________________________________________________
FISI UNMSM 15 Luis Guerra G.
Inicializacin y Constructores
public cRectangulo() {
x1=0;
y1=0;
x2=0;
y2=0;
}
//Mtodo datoInt :
public static int datoInt() {
______________________________________________________________________
FISI UNMSM 16 Luis Guerra G.
return Integer.parseInt(dato());
}
//Mtodo dato:
public static String dato() {
String sdato="";
try
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
sdato=flujoE.readLine();
}
catch (IOException e)
{
System.err.println("ERROR:"+e.getMessage());
}
return sdato;
}
}
import java.io.*;
int n;
try{
catch(IOException e){
System.err.println("Error: "+e.getMessage());
}
}
}
import java.io.*;
public class LeerMostrarCaracter {
______________________________________________________________________
FISI UNMSM 17 Luis Guerra G.
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader flujoE=new BufferedReader(isr);
PrintStream flujoS=System.out;
try{
do{
flujoS.print("Continuar<s/n>: ");
opcion=(char)flujoE.read();
flujoE.readLine(); //Limpiar caracteres: \r\n
//flujoS.print("Opcion ingresada:"+opcion);
System.out.println("Opcion ingresada: "+opcion);
}while(opcion!='n');
}
catch(IOException e){
System.out.println("Error:"+e.getMessage());
}
}
}
System.out.println();
for(i=0;i<nElementos;i++)
{
j=i+1;
System.out.println("m["+j+"]="+m[i]);
}
}
//Mtodo datoInt
public static int datoInt() {
return Integer.parseInt(dato());
//Mtodo dato
public static String dato() {
String sdato="";
try
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
______________________________________________________________________
FISI UNMSM 18 Luis Guerra G.
sdato=flujoE.readLine();
}
catch (IOException e)
{
System.err.println("ERROR:"+e.getMessage());
}
return sdato;
import java.io.*;
public class leerunacadena_u_fe_fs {
EJERCICIO
1. Programa en Java para leer datos de alumnos: cdigo, nombre, edad, nacionalidad y notas; hallar el promedio
de las notas, y mensaje de aprobado o desaprobado.
import java.io.*;
public class CAlumno {
public static void main(java.lang.String[] args) {
// Inserte aqu cdigo para iniciar la aplicacin.
int cod;
String nom;
int edad,cant,i;
String nac;
double nota1,nota2,nota3,prom;
______________________________________________________________________
FISI UNMSM 19 Luis Guerra G.
edad=Leer.datoInt();
System.out.print("Nacionalidad["+(i+1)+"]:");
nac=Leer.dato();
//INGRESE LAS NOTAS
//PROMEDIO
prom=(nota1+nota2+nota3)/3;
if(prom>=10.5){
System.out.print("El promedio de "+nom+"es :"+prom+" APROBADO");
}
else {
System.out.print("El promedio de "+nom+"es :"+prom+".DESAPROBADO");
}
System.out.println();
}
}
import java.io.*;
public class Leer {
//Mtodo datoInt :
public static int datoInt() {
return Integer.parseInt(dato());
}
// datoDouble
public static double datoDouble() {
return Double.parseDouble(dato());
}
//Mtodo dato:
public static String dato() {
String sdato="";
try
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
sdato=flujoE.readLine();
}
catch (IOException e)
{
System.err.println("ERROR:"+e.getMessage());
}
return sdato;
}
}
______________________________________________________________________
FISI UNMSM 20 Luis Guerra G.
Ejercicios Propuestos
1. Realizar un programa que muestre una clase para representar nmeros racionales. Por
ejemplo: el nmero racional 1/3 representado por un nmero fraccionario sera 0,333333,
Valor mas fcil de manipular, pero a costa de perder precisin. Evidentemente, 1/3 * 3 = 1,
pero 0,333333 * 3 = 0,999999; para esto se recomiendo utilizar dos mtodos: uno para
asignar datos y el otro para visualizar los datos.
2. Realizar un programa que utilice objetos de una clase ecuacin para evaluar las ecuaciones
de la forma: ax3 + bx2 + cx + d
3. Implementar una clase bancaria simule el comportamiento bsico de una cuenta abierta en
una entidad bancaria cualquiera. Para esto se tiene en cuenta los siguientes datos como:
inters, ingresar dinero, retirar dinero, saldo actual, despus de abonado el inters.
4. Realizar una aplicacin que d como resultado los intereses producidos y el capital total
acumulado de una cantidad c, invertida en un inters r durante t das.
I = c*r*t
360*100
5. Realizar una aplicacin que d como resultado las soluciones reales x 1 y x2 de una ecuacin
de segundo grado, de la forma:
ax2 + bx + c = 0
Las soluciones de una ecuacin de segundo grado viene dadas por la formula:
b 4ac
2
b
x1
2a
6. Realizar un programa que a travs de un men permita realizar las operaciones de sumar,
restar, multiplicar, dividir y salir. Las operaciones constarn solamente de dos operandos.
El men ser visualizado por un mtodo sin argumentos, que devolver como resultado la
opcin elegida.
8. Realizar un programa que lea una lista de nombres y los almacene en una matriz. Una vez
construida la matriz, visualizaremos su contenido.
9. Realizar un programa que lea una lista de valores introducidas por el teclado. A
continuacin, y sobre las listas, buscar los valores mximo y mnimo, y escribirlos.
10. Realizar un programa que los peso e imprima el histograma correspondiente. Suponer
que los pesos estn comprendidos entre los valores 10 y 100 Kg. En el histograma slo
aparecer los pesos que se corresponden con 1 o mas alumnos.
11. Utilizando el mtodo random de la clase Math del paquete java.lang, realizar un
programa que muestre 6 nmeros aleatorios entre 1 y 49 ordenados ascendentemente.
______________________________________________________________________
FISI UNMSM 21 Luis Guerra G.
12. Realizar un programa que partiendo de dos matrices de cadenas de caracteres clasificadas
en orden ascendente, construya y visualice una tercera matriz tambin clasificada en
orden ascendente; est tercera matriz ser el resultado de la fusin de las dos primeras
matrices.
2 3
14. Elaborar un programa de directorios telefnicos est aplicacin mostrar un men que
presentar las operaciones que se pueden realizar sobre la lista de telfonos. Como
Aadir, Buscar, Buscar Siguiente, Eliminar y salir; pero despus de realizada una de las
opciones deber regresar al men principal.
15. Elaborar un programa que permita operar con nmeros racionales en: la suma, resta,
multiplicacin, divisin, si son iguales, si es mayor o menor, que acepte entrar tanto
negativos como positivos.
16. Construir una clase llamada Luz que simule una luz de semforo. El atributo color de la
clase debe cambiar de Verde a Amarillo y a Rojo y de nuevo regresar a Verde mediante
la funcin Cambio. Cuando se crea un objeto Luz, su color inicial ser Rojo.
______________________________________________________________________
FISI UNMSM 22 Luis Guerra G.
public String getNombre() {
return nombre;
}
Declaracin:
tipo identificador[][];
o bien:
tipo[][] identificador;
Creacin:
Utilizando el operador new.
Ejemplo:
int[][] temperaturas = new int[12][30];
*************************
matriz[ndice1][ndice2]
*************************
En Java el ndice de la primera componente de un vector es 0 , por lo que matriz[0][0], ser el
primer elemento de la matriz.
El tamao del arreglo puede obtenerse utilizando la propiedad: length
matriz.length : nos da el nmero de filas
matriz[0].length : nos da el nmero de columnas
Ejemplo
Dada una matriz de reales de dos dimensiones, visualizar la suma de cada fila de la matriz.
Arreglo de objetos
Cuando el tipo de dato de un arreglo es una clase, hablamos de arreglo de objetos, donde cada
elemento del arreglo es un objeto.
Ejemplo:
Alumno[ ] ca; //Un arreglo de objetos de la clase Alumno (arreglo de registros de alumno)
1.Definir un vector de objetos de la clase Alumno, esta clase contiene el cdigo, nombre y nota,
adems los mtodos para ingresar y presentar los datos.
______________________________________________________________________
FISI UNMSM 24 Luis Guerra G.
2. Con el vector de objetos del ejercicio 1, presentar los Alumnos de un curso y generar el
promedio de la nota del curso.
/////////////////////////////////////////////////////////////////
// Definicin de la clase CListaTfnos.
//
public class CListaTfnos {
public CListaTfnos() {
// Crear una lista vaca
nElementos = 0;
listaTelefonos = new CPersona[nElementos];
}
/**
* Method unElementoMas
* @param listaActual
*/
private void unElementoMas(CPersona[] listaActual) {
nElementos = listaActual.length;
listaTelefonos = new CPersona[nElementos + 1];
// Copiar la lista actual
for ( int i = 0; i < nElementos; i++ )
listaTelefonos[i] = listaActual[i];
nElementos++;
/**
* Method unElementoMenos
* @param listaActual
*/
private void unElementoMenos(CPersona[] listaActual) {
if (listaActual.length == 0) return;
int k = 0;
nElementos = listaActual.length;
listaTelefonos = new CPersona[nElementos - 1];
// Copiar la lista actual
for ( int i = 0; i < nElementos; i++ )
if (listaActual[i] != null)
listaTelefonos[k++] = listaActual[i];
nElementos--;
/**
* Method ponerValorEn
______________________________________________________________________
FISI UNMSM 27 Luis Guerra G.
* @param i
* @param objeto
*/
public void ponerValorEn(int i, CPersona objeto) {
if (i >= 0 && i < nElementos)
listaTelefonos[i] = objeto;
else
System.out.println("ndice fuera de lmites");
/**
* Method valorEn
* @param i
*/
public CPersona valorEn(int i) {
if (i >= 0 && i < nElementos)
return listaTelefonos[i];
else
{
System.out.println("ndice fuera de lmites");
return null;
}
/**
* Method longitud
*/
public int longitud() {
return nElementos;
}
/**
* Method aadir
*/
public void aadir(CPersona obj) {
unElementoMas(listaTelefonos);
ponerValorEn( nElementos - 1, obj );
/**
* Method eliminar
*/
public boolean eliminar(long tel) {
// Buscar el telfono y eliminar registro
for ( int i = 0; i < nElementos; i++ )
if (listaTelefonos[i].obtenerTelefono() == tel)
{
listaTelefonos[i] = null;
unElementoMenos(listaTelefonos);
return true;
}
______________________________________________________________________
FISI UNMSM 28 Luis Guerra G.
return false;
/**
* Method buscar
* @param str
* @param pos
* @return
*/
public int buscar(String str, int pos) {
String nom;
if (str == null) return -1;
if (pos < 0) pos = 0;
for ( int i = pos; i < nElementos; i++ )
{
nom = listaTelefonos[i].obtenerNombre();
if (nom == null) continue;
// str est contenida en nom?
if (nom.indexOf(str) > -1)
return i;
}
return -1;
}
}
/////////////////////////////////////////////////////////////////
// Definicin de la clase CPersona
//
public class CPersona {
// Atributos
private String nombre;
private String direccion;
private long telefono;
public CPersona() {}
/**
* Method asignarNombre
*/
public void asignarNombre(String nom) {
nombre = nom;
}
/**
* Method obtenerNombre
______________________________________________________________________
FISI UNMSM 29 Luis Guerra G.
*/
public String obtenerNombre() {
return nombre;
}
/**
* Method asignarDireccion
*/
public void asignarDireccion(String dir) {
direccion = dir;
}
/**
* Method obtenerDireccion
*/
public String obtenerDireccion() {
return direccion;
}
/**
* Method asignarTelefono
*/
public void asignarTelefono(long tel) {
telefono = tel;
}
/**
* Method obtenerTelefono
*/
public long obtenerTelefono() {
return telefono;
}
}
/////////////////////////////////////////////////////////////////
// Definicin de la clase Leer
//
import java.io.*;
public class Leer {
FormularioTriangulo
-int verticesuperiorx
-int verticesuperiory
-int base
-int altura
-Color color
-JLabel verticesuperiorLabel
Triangulo -JLabel verticesuperiorLabel
-int verticesuperiorx -JLabel baseLabel
-int verticesuperiory -JLabel alturaLabel
Ventana
-int base -JLabel colorLabel
-Triangulo triangulo -int altura -String verticesuperiorxString
+Ventana() -Color color -String verticesuperioryString
-asignarLookAndFeel() -boolean haydatos -String baseString
-setCloseClick() +Triangulo() -String alturaString
+paint(entrada Graphics g) +paint(entrada Graphics g) -String colorString
+main(entrada String[] args) +mover(entrada int desplazamientox, entrada int desplazamientoy) -JTextField verticesuperiorxTextField
+ampliar(entrada int zoomout) -JTextField verticesuperioryTextField
+reducir(entrada int zoomin) -JTextField baseTextField
+borrar() -JTextField alturaTextField
-JComboBox colorField
+FormularioTriangulo()
+obtenerVerticeSuperiorx()
+obtenerVerticeSuperiory()
+obtenerBase()
+obtenerAltura()
+obtenerColor()
En JCreator:
File-New-Project
//Clase Ventana
public class Ventana {
______________________________________________________________________
FISI UNMSM 31 Luis Guerra G.
// Show frame.
frame.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class VentanaFrame extends JFrame {
private Triangulo triangulo;
/**
* The constructor
*/
public VentanaFrame() {
//Pintar la ventana vaca
setTitle("Pintar Triangulo ");
asignarLookAndFeel();
setCloseClick();
setExtendedState(MAXIMIZED_BOTH);
setVisible(true);
}
private void asignarLookAndFeel()
{
//Forzar el Look and Feel de la ventana al del sistema
String laf = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(laf);
}
public Triangulo() {
//Mostrar el formulario para obtener
//los datos del triangulo
FormularioTriangulo formulario=new FormularioTriangulo();
JDialog dialog =new JDialog();
dialog.setTitle("Introduzca los datos del triangulo");
dialog.setModal(true);
dialog.setContentPane(formulario);
dialog.setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
dialog.pack();
dialog.show();
int [] coordenadasx=getCoordenadasX();
int [] coordenadasy=getCoordenadasY();
super.paint(g);
//Si el usuario ha introducido los datos pinta el triangulo
if (haydatos){
g.setColor(color);
g.drawPolygon(coordenadasx, coordenadasy, 3);
g.fillPolygon(coordenadasx, coordenadasy, 3);
g.dispose();
______________________________________________________________________
FISI UNMSM 33 Luis Guerra G.
}
}
coordenadasx[0]=verticesuperiorx;
coordenadasx[1]=verticesuperiorx-(base/2);
coordenadasx[2]=verticesuperiorx+(base/2);
return coordenadasx;
}
private int [] getCoordenadasY() {
coordenadasy[0]=verticesuperiory;
coordenadasy[1]=verticesuperiory+altura;
coordenadasy[2]=verticesuperiory+altura;
return coordenadasy;
}
public void ampliar(int zoomin) {
if (zoomin > 0){
base= base * zoomin;
altura=altura*zoomin;
}
}
______________________________________________________________________
FISI UNMSM 34 Luis Guerra G.
// Clase JPanel: FormularioTriangulo
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FormularioTriangulo extends JPanel {
//Valores de los cuadros de texto
private int verticesuperiorx;
private int verticesuperiory;
private int base;
private int altura;
private Color color;
public FormularioTriangulo() {
//crear las etiquetas
verticesuperiorxLabel = new JLabel(verticesuperiorxString);
verticesuperioryLabel= new JLabel(verticesuperioryString);
baseLabel= new JLabel(baseString);
alturaLabel= new JLabel(alturaString);
colorLabel= new JLabel(colorString);
}
public Color obtenerColor() {
String string=(String)colorField.getSelectedItem();
Color color;
if (string.equals("Azul"))
color=Color.BLUE;
else if (string.equals("Verde"))
color=Color.GREEN;
else if (string.equals("Naranja"))
color=Color.ORANGE;
else if (string.equals("Rojo"))
color=Color.RED;
else if (string.equals("Amarillo"))
color=Color.YELLOW;
else if (string.equals("Gris"))
______________________________________________________________________
FISI UNMSM 36 Luis Guerra G.
color=Color.GRAY;
else
color=Color.BLACK;
return color;
}
public int obtenerBase() {
if (baseTextField.getText()!= null)
return Integer.parseInt(baseTextField.getText());
else
return 0;
}
}
______________________________________________________________________
FISI UNMSM 37 Luis Guerra G.
______________________________________________________________________
FISI UNMSM 38 Luis Guerra G.
En NetBeans IDE 6.1
File New Project Java Java Application Next - Nombre del Proyecto
desactivar: Create Main Class y Set as Main Project finish.
Luego de creada la Aplicacin sobre el paquete click derecho New JFrame
para la clase con el mtodo principal, luego similar para las otras clases JPanel.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Ventana extends javax.swing.JFrame {
public Ventana() {
______________________________________________________________________
FISI UNMSM 39 Luis Guerra G.
//Repintar la ventana con el triangulo
pack();
setExtendedState(MAXIMIZED_BOTH);
repaint();
}
import java.awt.*;
import javax.swing.*;
______________________________________________________________________
FISI UNMSM 40 Luis Guerra G.
//Base
private int base;
//Altura
private int altura;
//Color
private Color color;
int [] coordenadasx=getCoordenadasX();
int [] coordenadasy=getCoordenadasY();
super.paint(g);
//Si el usuario ha introducido los datos pinta el triangulo
if (haydatos){
g.setColor(color);
g.drawPolygon(coordenadasx, coordenadasy, 3);
g.fillPolygon(coordenadasx, coordenadasy, 3);
g.dispose();
}
______________________________________________________________________
FISI UNMSM 41 Luis Guerra G.
coordenadasx[0]=verticesuperiorx;
coordenadasx[1]=verticesuperiorx-(base/2);
coordenadasx[2]=verticesuperiorx+(base/2);
return coordenadasx;
}
coordenadasy[0]=verticesuperiory;
coordenadasy[1]=verticesuperiory+altura;
coordenadasy[2]=verticesuperiory+altura;
return coordenadasy;
}
import java.awt.*;
import javax.swing.JPanel;
import java.awt.event.*;
______________________________________________________________________
FISI UNMSM 42 Luis Guerra G.
import javax.swing.*;
public class FormularioTriangulo extends javax.swing.JPanel {
if (string.equals("Azul"))
color=Color.BLUE;
else if (string.equals("Verde"))
color=Color.GREEN;
else if (string.equals("Naranja"))
color=Color.ORANGE;
else if (string.equals("Rojo"))
color=Color.RED;
______________________________________________________________________
FISI UNMSM 44 Luis Guerra G.
else if (string.equals("Amarillo"))
color=Color.YELLOW;
else if (string.equals("Gris"))
color=Color.GRAY;
else
color=Color.BLACK;
return color;
}
if (verticesuperiorxTextField.getText()!= null)
return Integer.parseInt(verticesuperiorxTextField.getText());
else
return 0;
}
if (verticesuperioryTextField.getText()!= null)
return Integer.parseInt(verticesuperioryTextField.getText());
else
return 0;
}
if (baseTextField.getText()!= null)
return Integer.parseInt(baseTextField.getText());
else
return 0;
}
if (alturaTextField.getText()!= null)
return Integer.parseInt(alturaTextField.getText());
else
return 0;
}
EJERCICIOS
1. Construir una aplicacin que pinte un rectngulo en la pantalla. La aplicacin debe permitir
que el usuario ingrese los datos del rectngulo: coordenada x del vrtice superior
izquierdo, coordenada y del vrtice superior izquierdo, base, altura, seleccin del color a
travs de un combobox en un formulario, usar diagrama de clases similar al ejercicio
anterior.
______________________________________________________________________
FISI UNMSM 45 Luis Guerra G.
2. Implementar un juego que consista en ir formando una tortuga con los valores que los
jugadores obtengan de los nmeros al tirar un dado: seis para el cuerpo, uno para cada pata y
dos para la cabeza. Las reglas son las siguientes:
Pueden jugar N jugadores
El dado ira pasando de mano en mano por todos los jugadores y cada jugador
tirar el dado una vez que le toque.
Cuando saque 6 significa que form el cuerpo, y puede recin formar las
patas.
Cuando halla formado el cuerpo y todas las patas, recin puede buscar la
cabeza.
Gana el que primero forme la tortuga
Elaborar diagrama de clases, programa en Java.
HERENCIA SIMPLE
Ejercicio 1
Elaborar una aplicacin dada una clase Test que permita crear objetos de la clase
CCuentaAhorro con el atributo cuota de mantenimiento o comisin, sta clase es derivada de la
clase base CCuenta que tiene los atributos: nombre, cuenta, saldo, inters. Mostrar: nombre,
cuenta, saldo, inters para dos clientes.
cliente01.ingreso(1000000);
cliente01.reintegro(500000);
cliente01.comisiones();
System.out.println("Cliente 1");
System.out.println("Nombre: "+cliente01.obtenerNombre());
System.out.println("Cuenta: "+cliente01.obtenerCuenta());
System.out.println("Saldo: "+cliente01.estado());
System.out.println("Inters: "+cliente01.obtenerTipoDeInters());
System.out.println();
System.out.println("Cliente 2");
System.out.println("Nombre: "+cliente02.obtenerNombre());
System.out.println("Cuenta: "+cliente02.obtenerCuenta());
System.out.println("Saldo: "+cliente02.estado());
System.out.println("Inters: "+cliente02.obtenerTipoDeInters());
______________________________________________________________________
FISI UNMSM 46 Luis Guerra G.
}
}
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
// Clase CCuentaAhorro: clase derivada de CCuenta
//
import java.util.*;
public class CCuentaAhorro extends CCuenta
{
// Atributos
private double cuotaMantenimiento;
// Mtodos
public CCuentaAhorro() {} // constructor sin parmetros
public CCuentaAhorro(String nom, String cue, double sal,
double tipo, double mant)
{
super(nom, cue, sal, tipo); // invoca al constructor CCuenta
asignarCuotaManten(mant); // inicia cuotaMantenimiento
}
if (da == 1) reintegro(cuotaMantenimiento);
}
}
//////////////////////////////////////////////////////////////////
// Clase CCuenta: clase abstracta que agrupa los datos comunes a
// cualquier tipo de cuenta bancaria.
//
public abstract class CCuenta
{
// Atributos
______________________________________________________________________
FISI UNMSM 47 Luis Guerra G.
private String nombre;
private String cuenta;
private double saldo;
private double tipoDeInters;
// Mtodos
public CCuenta() {};
public CCuenta(String nom, String cue, double sal, double tipo)
{
asignarNombre(nom);
asignarCuenta(cue);
ingreso(sal);
asignarTipoDeInters(tipo);
}
Ejercicio 2
Dada la clase base Figura y las clases derivadas crculo y rectngulo hallar el rea de dos objetos
Crculo y rectngulo dada la clase base respectiva y datos dados, desde el programa principal
como radio, largo y ancho, respecto a un punto en la clase base.
import java.io.*;
public class JerarquiadeClases {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Figura f=new Circulo(0,0,5.5);
______________________________________________________________________
FISI UNMSM 49 Luis Guerra G.
System.out.println("Area del circulo: "+f.area());
//f=new Rectangulo(0,0,5.5,2.0);
Figura r=new Rectangulo(0,0,5.5,2.0);
//Rectangulo r=new Rectangulo(0,0,5.5,2.0);
System.out.println("Area del rectangulo: "+r.area());
}
______________________________________________________________________
FISI UNMSM 50 Luis Guerra G.
CLASE ABSTRACTA POLIMORFISMO
Dada un clase CBanco que define una matriz de referencias a objetos de tipo cuenta bancaria (clase
CCuenta), siendo CCuenta una clase abstracta con los atributos: nombre, cuenta, saldo, inters, que
incluye a dos clases derivadas: CCuentaAhorro con el atributo cuota de mantenimiento; y la clase
CCuentaCorriente con los atributos: transacciones, importe por transacciones, transacciones exentas; y,
a la vez CCuentaCorriente es clase base de CCuentaCorrienteConIn (Cuenta corriente con intereses).
En una clase Test definir un men de opciones que permita:
1. Saldo
2. Buscar siguiente
3. Ingreso
4. Reintegro // Ingreso
5. Aadir
6. Eliminar
7. Mantenimiento
8. Salir
Seleccione opcin:
Asimismo en la clase Test en el mtodo principal crear un objeto banco del tipo CBanco ( con cero
elementos).
import java.io.*;
/////////////////////////////////////////////////////////////////
// Aplicacin para trabajar con la clase CBanco y la jerarqua
// de clases derivadas de CCuenta
//
public class Test
{
// Para la entrada de datos se utiliza Leer.class
public static CCuenta leerDatos(int op)
{
CCuenta obj = null;
String nombre, cuenta;
double saldo, tipoi, mant;
System.out.print("Nombre.................: ");
nombre = Leer.dato();
System.out.print("Cuenta.................: ");
cuenta = Leer.dato();
System.out.print("Saldo..................: ");
saldo = Leer.datoDouble();
System.out.print("Tipo de inters........: ");
tipoi = Leer.datoDouble();
if (op == 1)
{
System.out.print("Mantenimiento..........: ");
mant = Leer.datoDouble();
obj = new CCuentaAhorro(nombre, cuenta, saldo, tipoi, mant);
}
else
{
int transex;
double imptrans;
System.out.print("Importe por transaccin: ");
imptrans = Leer.datoDouble();
System.out.print("Transacciones exentas..: ");
transex = Leer.datoInt();
if (op == 2)
obj = new CCuentaCorriente(nombre, cuenta, saldo, tipoi,
imptrans, transex);
______________________________________________________________________
FISI UNMSM 51 Luis Guerra G.
else
obj = new CCuentaCorrienteConIn(nombre, cuenta, saldo,
tipoi, imptrans, transex);
}
return obj;
}
do
{
opcin = men();
switch (opcin)
{
case 1: // saldo
flujoS.print("Nombre o cuenta, total o parcial ");
cadenabuscar = Leer.dato();
pos = banco.buscar(cadenabuscar, 0);
if (pos == -1)
if (banco.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("no hay clientes");
else
{
flujoS.println(banco.clienteEn(pos).obtenerNombre());
flujoS.println(banco.clienteEn(pos).obtenerCuenta());
______________________________________________________________________
FISI UNMSM 52 Luis Guerra G.
flujoS.println(banco.clienteEn(pos).estado());
}
break;
case 2: // buscar siguiente
pos = banco.buscar(cadenabuscar, pos + 1);
if (pos == -1)
if (banco.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("no hay clientes");
else
{
flujoS.println(banco.clienteEn(pos).obtenerNombre());
flujoS.println(banco.clienteEn(pos).obtenerCuenta());
flujoS.println(banco.clienteEn(pos).estado());
}
break;
case 3: // ingreso
case 4: // reintegro
flujoS.print("Cuenta: "); cuenta = Leer.dato();
pos = banco.buscar(cuenta, 0);
if (pos == -1)
if (banco.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("no hay clientes");
else
{
flujoS.print("Cantidad: "); cantidad = Leer.datoDouble();
if (opcin == 3)
banco.clienteEn(pos).ingreso(cantidad);
else
banco.clienteEn(pos).reintegro(cantidad);
}
break;
case 5: // aadir
flujoS.print("Tipo de cuenta: 1-(CA), 2-(CC), 3-CCI ");
do
opcin = Leer.datoInt();
while (opcin < 1 || opcin > 3);
banco.aadir(leerDatos(opcin));
break;
case 6: // eliminar
flujoS.print("Cuenta: "); cuenta = Leer.dato();
eliminado = banco.eliminar(cuenta);
if (eliminado)
flujoS.println("registro eliminado");
else
if (banco.longitud() != 0)
flujoS.println("cuenta no encontrada");
else
flujoS.println("no hay clientes");
break;
case 7: // mantenimiento
for (pos = 0; pos < banco.longitud(); pos++)
{
banco.clienteEn(pos).comisiones();
banco.clienteEn(pos).intereses();
}
______________________________________________________________________
FISI UNMSM 53 Luis Guerra G.
break;
case 8: // salir
banco = null;
}
}
while(opcin != 8);
}
}
/////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
// Clase CBanco: clase que mantiene una matriz de referencias a
// objetos de cualquier tipo de cuenta bancaria.
//
public class CBanco
{
private CCuenta[] clientes; // matriz de objetos
private int nElementos; // nmero de elementos de la matriz
public CBanco()
{
// Crear una matriz vaca
nElementos = 0;
clientes = new CCuenta[nElementos];
}
private void unElementoMs(CCuenta[] clientesActuales)
{
nElementos = clientesActuales.length;
// Crear una matriz con un elemento ms
clientes = new CCuenta[nElementos + 1];
// Copiar los clientes que hay actualmente
for ( int i = 0; i < nElementos; i++ )
clientes[i] = clientesActuales[i];
nElementos++;
}
private void unElementoMenos(CCuenta[] clientesActuales)
{
if (clientesActuales.length == 0) return;
int k = 0;
nElementos = clientesActuales.length;
// Crear una matriz con un elemento menos
clientes = new CCuenta[nElementos - 1];
// Copiar los clientes no nulos que hay actualmente
for ( int i = 0; i < nElementos; i++ )
if (clientesActuales[i] != null)
clientes[k++] = clientesActuales[i];
nElementos--;
}
______________________________________________________________________
FISI UNMSM 55 Luis Guerra G.
//////////////////////////////////////////////////////////////////
// Clase CCuenta: clase abstracta que agrupa los datos comunes a
// cualquier tipo de cuenta bancaria.
//
public abstract class CCuenta
{
// Atributos
private String nombre;
private String cuenta;
private double saldo;
private double tipoDeInters;
// Mtodos
public CCuenta() {};
public CCuenta(String nom, String cue, double sal, double tipo)
{
asignarNombre(nom);
asignarCuenta(cue);
ingreso(sal);
asignarTipoDeInters(tipo);
}
______________________________________________________________________
FISI UNMSM 56 Luis Guerra G.
public abstract double intereses();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import java.io.*;
public class Leer {
______________________________________________________________________
FISI UNMSM 57 Luis Guerra G.
}
// Mtodos
public CCuentaAhorro() {} // constructor sin parmetros
if (da == 1) reintegro(cuotaMantenimiento);
}
import java.util.*;
//////////////////////////////////////////////////////////////////
// Clase CCuentaCorriente: clase derivada de CCuenta
//
public class CCuentaCorriente extends CCuenta
{
// Atributos
private int transacciones;
private double importePorTrans;
private int transExentas;
// Mtodos
public CCuentaCorriente() {} // constructor sin parmetros
// Acumular los intereses por mes slo los das 1 de cada mes
double interesesProducidos = 0.0;
// Hasta 3000 euros al 0.5%. El resto al inters establecido.
if (estado() <= 3000)
interesesProducidos = estado() * 0.5 / 1200.0;
else
{
interesesProducidos = 3000 * 0.5 / 1200.0 +
(estado() - 3000) * obtenerTipoDeInters() / 1200.0;
}
ingreso(interesesProducidos);
// Este ingreso no debe incrementar las transacciones
decrementarTransacciones();
import java.util.*;
//////////////////////////////////////////////////////////////////
// Clase CCuentaCorrienteConIn: clase derivada de CCuentaCorriente
//
public class CCuentaCorrienteConIn extends CCuentaCorriente
{
// Mtodos
public CCuentaCorrienteConIn() {} // constructor sin parmetros
Interfaz IFecha
import java.util.*;
//////////////////////////////////////////////////////////////////
// Interfaz IFecha: mtodos y constantes para obtener
// el da, mes y ao
//
public interface IFecha
{
public final static int DIA_DEL_MES = Calendar.DAY_OF_MONTH;
public final static int MES_DEL_AO = Calendar.MONTH;
public final static int AO = Calendar.YEAR;
______________________________________________________________________
FISI UNMSM 61 Luis Guerra G.
EJERCICIOS
1. Vaca, cerdo son animales que tienen peso y no hablan pero si dicen algo, es el caso de la
vaca (muu), o, caso del cerdo (oinc). Crear una instancia de vaca por ejemplo daisy, una
instancia de cerdo por ejemplo porky. Usando polimorfismo redefinir un mtodo para que al
seleccionar un animal de los indicados se diga algo de uno de ellos, y el proceso continu
mientras no se desee salir, en un men de opciones.
2. Controlar o manejar una excepcin de divisin por cero, dados dos nmeros enteros
cualesquiera. Cuando los datos son correctos el proceso continua, y pregunta si desea
terminar.
3. Dado las instancias cuadrado, crculo, rectngulo, adems una clase base Figura; redefinir el
mtodo calcular el rea, para cada una de las figuras, cuando se solicite en el programa
principal desde un men de opciones el rea de ellas. Recuerde leer: lado, radio, largo y
ancho,
MENU
1. rea de un cuadrado
2. Area de un crculo
3. Area de un rectngulo
4. Salir
Seleccione opcin:
Ejemplo 1.
Disear lo siguiente:
______________________________________________________________________
FISI UNMSM 62 Luis Guerra G.
package numeros;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;
public class NumerosApp extends SingleFrameApplication {
@Override protected void startup() {
show(new NumerosView(this));
}
@Override protected void configureWindow(java.awt.Window root) {
}
public static NumerosApp getApplication() {
return Application.getInstance(NumerosApp.class);
}
public static void main(String[] args) {
launch(NumerosApp.class, args);
}
}
package numeros;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import java.lang.String;
int n1 = Integer.parseInt(jTextField1.getText());
int n2 = Integer.parseInt(jTextField2.getText());
int n3 = Integer.parseInt(jTextField3.getText());
int n4 = Integer.parseInt(jTextField4.getText());
int n5 = Integer.parseInt(jTextField5.getText());
float media=(n1+n2+n3+n4+n5)/5;
jTextField6.setText(Float.toString(media));
}
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
private javax.swing.JTextField jTextField6;
private javax.swing.JTextField jTextField7;
private javax.swing.JTextField jTextField8;
private javax.swing.JPanel mainPanel;
private javax.swing.JMenuBar menuBar;
private javax.swing.JProgressBar progressBar;
private javax.swing.JLabel statusAnimationLabel;
private javax.swing.JLabel statusMessageLabel;
______________________________________________________________________
FISI UNMSM 63 Luis Guerra G.
private javax.swing.JPanel statusPanel;
// End of variables declaration
Ejemplo 2:
/*********************************************************
package interfaz_grafica_1;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;
/**
* Main method launching the application.
*/
public static void main(String[] args) {
launch(Interfaz_grafica_1App.class, args);//lanzar,emprender,iniciar
______________________________________________________________________
FISI UNMSM 64 Luis Guerra G.
}
}
/***************************************************************
package interfaz_grafica_1;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;
/**
* The application's main frame.
*/
public class Interfaz_grafica_1View extends FrameView {
initComponents();
// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i < busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
@Action
public void showAboutBox() {
if (aboutBox == null) {
JFrame mainFrame = Interfaz_grafica_1App.getApplication().getMainFrame();
aboutBox = new Interfaz_grafica_1AboutBox(mainFrame);
aboutBox.setLocationRelativeTo(mainFrame);
}
Interfaz_grafica_1App.getApplication().show(aboutBox);
}
mainPanel.setName("mainPanel"); // NOI18N
}
}
______________________________________________________________________
FISI UNMSM 67 Luis Guerra G.
Radio Buttons
Checkbox
Ejercicio:
En un Applet de Java, mostrar un Checkbox, y tres JRadioButton: tibio, frio, caliente.
Ejemplo:
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;
@Override
public void init() {
add(casilla);
casilla.addItemListener(this);
tibio=new JRadioButton("tibio",false);
______________________________________________________________________
FISI UNMSM 68 Luis Guerra G.
add(tibio);
tibio.addItemListener(this);
frio=new JRadioButton("frio",false);
add(frio);
frio.addItemListener(this);
caliente=new JRadioButton("caliente",false);
add(caliente);
caliente.addItemListener(this);
Clase JComboBox :
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JComboBox
Por herencia, la clase JComboBox puede utilizar los datos y/o mtodos de las superclases
JComponent de la librera swing y de las superclases Container, Component y Object de la
librera awt.
Un objeto JComboBox es un componente que combina un botn o un texto editable y una lista
drop-down. Se puede seleccionar un item de la lista, el cual aparece como respuesta de la
seleccin.
______________________________________________________________________
FISI UNMSM 69 Luis Guerra G.
Ejercicio
En una aplicacin Swing de Java, en un jComboBox considerar los rubros: Color, Verde, Azul,
Amarillo, Rojo, al dar clic derecho sobre: el objeto ComboBox, en Propiedades model.
Sobre el botn de mensaje Restablecer, se puede seleccionar el item de index 0 del ComboBox.
En el botn clic derecho: Events Action ActionPerformed:
______________________________________________________________________
FISI UNMSM 70 Luis Guerra G.
Ejercicio
Elabore un programa que permita leer los datos de un empleado: Nombre, Tipo de empleado, nmero de horas
trabajadas y pago por hora; calcular e imprimir el sueldo a pagar. Si el empleado es tipo 1 se le pagan las horas
extras (ms de 40 horas) a 1.5 del pago por cada hora, si es tipo 2 a 2, si es tipo 3 a 2.5 y si es tipo 4 a 3 veces el
pago por hora.
else
spagar=(Float.parseFloat(jTextField2.getText()))*Float.parseFloat(jTextField3.getTe
xt());
jLabel7.setText(Double.toString(spagar)); break;
case 2: break;
case 3: break;
case 4: break;
______________________________________________________________________
FISI UNMSM 71 Luis Guerra G.
JMenu
import java.awt.event.*;
import javax.swing.*;
archivoMenu=new JMenu("Archivo");
abrirItem=new JMenuItem("Abrir");
archivoMenu.add(abrirItem);
abrirItem.addActionListener(this);
barraMenusCompleta.add(archivoMenu);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==abrirItem){
JFileChooser selectorArchivos=new JFileChooser();
int respuestaUsuario=selectorArchivos.showOpenDialog(this);
if(respuestaUsuario==JFileChooser.CANCEL_OPTION)
JOptionPane.showMessageDialog(null, "El usuario cancelo");
else
JOptionPane.showMessageDialog(null, "El usuario
selecciono"+selectorArchivos.getSelectedFile());
}
}
______________________________________________________________________
FISI UNMSM 72 Luis Guerra G.
JList
Componente(clase), que permite al usuario seleccionar uno o ms objetos de una lista. Necesita
de un objeto modelo de la clase ListModel o DefaultListModel, quin representar el contenido
de la lista.
Por herencia la clase JList puede utilizar los datos y/o mtodos de las superclases JComponent de
la librera swing y de las superclases Container, Component y Object de la librera awt.
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JList
El contenido de un JList puede ser dinmico, la lista de elementos pueden cambiar de valor y el
tamao de lista tambin puede cambiar despus de haber sido creada. Los cambios que ocurren en un
JList son registrados por la interface ListDataListener.
Ejemplo:
En una aplicacin considere una lista para colocar nombres ingresados e implementar botones para
administrar la lista, agregando, hacer seleccin mltiple, seleccin simple, botn libre.
En un Proyecto nuevo- Java Application, dar nombre al proyecto por ejemplo: EjemploList, paquete:
ejemplolist, clic derecho en
el paquete, nuevo JPanel Form, por ejemplo: PanelPrincipal, y agregar los siguientes controles:
______________________________________________________________________
FISI UNMSM 73 Luis Guerra G.
Cdigo fuente, PanelPrincipal:
package ejemplolist;
import javax.swing.*;
Botn Agregar:
private void botonAgregarActionPerformed(java.awt.event.ActionEvent evt) {
String nombre=jTextField1.getText();
if(nombre.length()==0)
JOptionPane.showMessageDialog(this,"Debe ingresar un nombre");
else{
modNombres.addElement(nombre);
jTextField1.setText("");
}
//jLabel2.setText("En Lista: "+modNombres.size());
jTextField1.requestFocus();
}
Luego crear un nuevo JFrame Form de nombre Principal, para colocar el panel principal:
package ejemplolist;
public class Principal extends javax.swing.JFrame {
static int w=500, h=400;
public Principal() {
//initComponents();
add(new PanelPrincipal());
setSize(w,h);
setLocation((getToolkit().getScreenSize().width-w)/2,(getToolkit().getScreenSize().height-h)/2);
Ejecutar la aplicacin.
Referencia:
Java for Windows with NetBeans IDE
Julio Vasquez Paragulla
______________________________________________________________________
FISI UNMSM 75 Luis Guerra G.
CLASES GENERICAS
Clases con variables o parmetros que representan tipos.
Por ejemplo, dada una clase genrica Par que permita establecer un tipo T, para manejar enteros y
caracteres, y luego a travs de un mtodo intercambiar los valores, para luego presentar intercambiado los
valores en el programa principal.
import java.io.*;
import javax.swing.JOptionPane;
public class Prueba {
}
}
Ejercicios:
1. Programa utilizando clase genrica, para hallar el menor, intemedio y mayor de tres nmeros
enteros, a su vez de tres letras.
2. Programa utilizando clase genrica para ordenar cinco nmeros y ordenar cinco letras,
ascendente y/o descendente.
Una clase generica que realiza una conexin a bases de datos mysql, la cual esta declarada dentro del
paquete conexin, recibe cuatro parametros:
String ip, String bd, String usr, String pass, los cuales se pueden enviar desde otra clase en donde se
instancie y se invoque... ejemplo:
package conexion;
/****************************************
** http://www.comunidadjava.org/?q=node/430
* @author Marco A. Trejo Lemus *
* 17/06/2008 09:47:01 AM *
****************************************/
import java.sql.*;
______________________________________________________________________
FISI UNMSM 77 Luis Guerra G.
System.out.println("Conexion a Base de Datos "+bd+" Ok");
}
} //fin de la clase
"Por mas dificil que parezca un reto si se puede alcanzar si realmente lo intentamos"
*****************************************************************
EXCEPCIONES
Excepciones en Java pemiten manejar situaciones anmalas.
Las palabras try y catch trabajan conjuntamente y pueden traducirse: probar un fragmento de cdigo, si es
satisfactorio continuar con la ejecucin del programa, de no ser as atrapar la excepcin y manejarla.
Ejemplo:
Dado un arreglo de objeto, para guardar diez nmeros reales, si se ingresara otro carcter(s) que no sea
nmero real, manejar la excepcin, indicando, Ese dato no es vlido. Teclee otro.
Utilizar la clase Leer, dada anteriormente.
}
}
import java.io.*;
public class Leer
{
public static String dato()
______________________________________________________________________
FISI UNMSM 78 Luis Guerra G.
{
String sdato = "";
try
{
// Definir un flujo de caracteres de entrada: flujoE
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
// Leer. La entrada finaliza al pulsar la tecla Entrar
sdato = flujoE.readLine();
}
catch(IOException e)
{
System.err.println("Error: " + e.getMessage());
}
return sdato; // devolver el dato tecleado
}
Excepciones Propias
Ejemplo:
Se conoce la longitud de los tres lados enteros de un tringulo, el rea puede calcularse de la
siguiente manera:
area = Math.sqrt(s*(s-a)*(s-b)*(s-c));
donde: s=(a+b+c)/2
En un programa elabore un mtodo para calcular y devolver el rea; permita que lance una
excepcin cuando las tres longitudes no puedan formar un tringulo. Desarrolle un mtodo
invocador que atrape la excepcin
import java.util.InputMismatchException;
import java.util.Scanner;
class Cuando3LnofT extends Exception{}
public class ExcepcionCuando3LnofT {
public static double area(double l1,double l2, double l3) throws Exception, InputMismatchException{
double s,carea;
if(l1<l2+l3 && l2<l1+l3 && l3<l1+l2){
s=(l1+l2+l3)/2;
carea=Math.sqrt(s*(s-l1)*(s-l2)*(s-l3));
return carea;
}
else
throw new Cuando3LnofT();
}
public static void main(String[] args) throws Exception{
Scanner lado=new Scanner(System.in);
double resultado=0;
try{
System.out.println("Tres lados enteros de un triangulo para hallar area:");
System.out.println("\n 1er lado: ");
double lado1=lado.nextDouble();
System.out.println("\n 2do lado: ");
______________________________________________________________________
FISI UNMSM 81 Luis Guerra G.
double lado2=lado.nextDouble();
System.out.println("\n 3er lado: ");
double lado3=lado.nextDouble();
resultado = area(lado1, lado2, lado3);
System.out.println("El area es:"+resultado);
}
catch(Cuando3LnofT e){
System.err.println("ERROR: los tres lados no forman un triangulo");
}
catch(InputMismatchException inputMismatchException){
System.err.printf("\n Excepcion: %s\n",inputMismatchException);
System.out.println("Debe ingresar numeros enteros. Intente de nuevo\n");
}
}
}
PERSISTENCIA
Caracterstica de la programacin orientada a objetos que permite la persistencia de los objetos.
Llevar la informacin a disco, y reconstruir despus en el momento de la lectura.
import java.io.*;
/////////////////////////////////////////////////////////////////
// Aplicacin: Lista de telfonos. Cuando la aplicacin finaliza
// la lista es salvada en un archivo "listatfnos.dat" y cuando
// se inicia se recupera de ese archivo.
//
public class Test
{
public static int men()
{
System.out.print("\n\n");
System.out.println("1. Buscar");
System.out.println("2. Buscar siguiente");
System.out.println("3. Aadir");
System.out.println("4. Eliminar");
System.out.println("5. Salir");
System.out.println();
System.out.print(" Opcin: ");
int op;
do
______________________________________________________________________
FISI UNMSM 82 Luis Guerra G.
op = Leer.datoInt();
while (op < 1 || op > 5);
return op;
}
CListaTfnos listatfnos;
int opcin = 0, pos = -1;
String cadenabuscar = null;
String nombre, direccin;
long telfono;
boolean eliminado = false;
boolean listaModificada = false;
try
{
// Crear un objeto lista de telfonos vaco (con 0 elementos)
// o, crear un objeto con el contenido del archivo listatfnos.dat si existe.
File fichero = new File("listatfnos.dat");
if (!fichero.exists())
{
listatfnos = new CListaTfnos();
flujoS.println("Se ha creado una lista de telfonos nueva");
}
else
{
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("listatfnos.dat"));
listatfnos = (CListaTfnos)ois.readObject();
ois.close();
flujoS.println("Se carg la lista de telfonos con xito");
}
do
{
______________________________________________________________________
FISI UNMSM 83 Luis Guerra G.
opcin = men();
switch (opcin)
{
case 1: // buscar
flujoS.print("conjunto de caracteres a buscar ");
cadenabuscar = flujoE.readLine();
pos = listatfnos.buscar(cadenabuscar, 0);
if (pos == -1)
if (listatfnos.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("lista vaca");
else
{
flujoS.println(listatfnos.valorEn(pos).obtenerNombre());
flujoS.println(listatfnos.valorEn(pos).obtenerDireccin());
flujoS.println(listatfnos.valorEn(pos).obtenerTelfono());
}
break;
case 2: // buscar siguiente
pos = listatfnos.buscar(cadenabuscar, pos + 1);
if (pos == -1)
if (listatfnos.longitud() != 0)
flujoS.println("bsqueda fallida");
else
flujoS.println("lista vaca");
else
{
flujoS.println(listatfnos.valorEn(pos).obtenerNombre());
flujoS.println(listatfnos.valorEn(pos).obtenerDireccin());
flujoS.println(listatfnos.valorEn(pos).obtenerTelfono());
}
break;
case 3: // aadir
flujoS.print("nombre: "); nombre = flujoE.readLine();
flujoS.print("direccin: "); direccin = flujoE.readLine();
flujoS.print("telfono: "); telfono = Leer.datoLong();
listatfnos.aadir(new CPersona(nombre, direccin, telfono));
listaModificada = true;
break;
______________________________________________________________________
FISI UNMSM 84 Luis Guerra G.
case 4: // eliminar
flujoS.print("telfono: "); telfono = Leer.datoLong();
eliminado = listatfnos.eliminar(telfono);
if (eliminado)
{
flujoS.println("registro eliminado");
listaModificada = true;
}
else
if (listatfnos.longitud() != 0)
flujoS.println("telfono no encontrado");
else
flujoS.println("lista vaca");
break;
case 5: // salir
// guardar lista
if (listaModificada)
{
ObjectOutputStream ous = new ObjectOutputStream(
new FileOutputStream("listatfnos.dat"));
ous.writeObject(listatfnos);
ous.close();
}
listatfnos = null;
}
}
while(opcin != 5);
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
catch (ClassNotFoundException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
/////////////////////////////////////////////////////////////////
// Definicin de la clase CListaTfnos.
//
______________________________________________________________________
FISI UNMSM 85 Luis Guerra G.
import java.io.*;
public class CListaTfnos implements Serializable
{
private CPersona[] listaTelfonos; // matriz de objetos
private int nElementos; // nmero de elementos de la matriz
public CListaTfnos()
{
// Crear una lista vaca
nElementos = 0;
listaTelfonos = asignarMemoria(nElementos);
}
______________________________________________________________________
FISI UNMSM 86 Luis Guerra G.
listaTelfonos = asignarMemoria(nElementos - 1);
// Copiar la lista actual
for ( int i = 0; i < nElementos; i++ )
if (listaActual[i] != null)
listaTelfonos[k++] = listaActual[i];
nElementos--;
}
______________________________________________________________________
FISI UNMSM 87 Luis Guerra G.
listaTelfonos[i] = null;
unElementoMenos(listaTelfonos);
return true;
}
return false;
}
// Mtodos
public CPersona() {}
public CPersona(String nom, String dir, long tel)
{
nombre = nom;
direccin = dir;
telfono = tel;
______________________________________________________________________
FISI UNMSM 88 Luis Guerra G.
}
______________________________________________________________________
FISI UNMSM 89 Luis Guerra G.
CONEXIN A BASE DE DATOS: JAVA SQL SERVER
package paquetePconexion;
import java.sql.*;
______________________________________________________________________
FISI UNMSM 90 Luis Guerra G.
}
Se podr insertar, eliminar y actualizar registros de una tabla mediante las sentencias del SQI:
Insert, Delete y Update.
La sentencia INSERT
INSERT INTO NombreTabla (ColumnasDeTabla) VALUES (DatosParaColumnas)
Ejemplo:
Insert Into Personas (Nombre, edad) Values (Sergio Vsquez Fano,17)
La sentencia DELETE
DELETE FROM NombreTabla WHERE CondicinDeBsqueda
Ejemplo:
Delete From Personas Where Nombre like Sergio Vsquez Fano
La sentencia UPDATE
UPDATE Nombre Tabla SET Columna 1 = Expresin, Columna 2 = Expresin...
WHERE CondicinDeBsqueda
Ejemplos:
Update Personas Set Edad = 22 Where Nombre = Diva Martinez
______________________________________________________________________
FISI UNMSM 91 Luis Guerra G.
EJEMPLO (NetBeans SqlServer)
Desarrollar una aplicacin que permite dar mantenimiento (nuevo, eliminar y
actualizar datos) a una tabla de una base de datos creada con SQL Server en
un men de opciones.
Paso 1:
Ejecutar en el Analizador de Consultas(Quero Analyzer) del SQL Server el siguiente script:
GO
USE Datos -- activa Datos
GO
-- crea tabla Personas
Create Table Personas(idPersona int identity(1,1),Nombre varchar(60) NOT NULL,Email
varchar(60),Telefono varchar(10))
-- Inserta filas a tabla personas
Insert Personas values('Joel Penia','[email protected]','1234567')
Insert Personas(Nombre,Email,Telefono) values('Beatriz Llontop','[email protected]','7654321')
Paso 2:
El paso consiste en crear el dsn: dsnDatos mediante ODBC y debe apuntar a la base de datos:
Datos del paso 1.
______________________________________________________________________
FISI UNMSM 92 Luis Guerra G.
Paso 3:
Una vez creada la base de datos (Datos) y el dsn (dsnDatos), entonces podemos iniciar el
desarrollo de nuestra aplicacin.
Las clases para sta aplicacin son: JDBComboBox, JDBTable, Mantenimiento, MiMenu,
PanelNuevo, PanelEliminar y PanelActualizar.
package proyectobds1;
import java.sql.*;
import javax.swing.*;
package proyectobds1;
import java.sql.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.*;
______________________________________________________________________
FISI UNMSM 93 Luis Guerra G.
int colCount;
String[] headers;
public JDBTable(String dsn, String login, String password, String query){
setModel(formaMiTabla(dsn,login,password,query));
}
public TableModel formaMiTabla(String dsn, String login, String password, String query){
cache=new Vector();
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=DriverManager.getConnection("jdbc:odbc:"+dsn,login,password);
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery(query);
ResultSetMetaData meta=rs.getMetaData();
colCount =meta.getColumnCount();
// nombres de columnas
headers=new String[colCount];
for(int h=1;h<=colCount;h++){
headers[h-1]=meta.getColumnName(h);
}
while(rs.next()){
String[] record=new String[colCount];
for(int i=0;i<colCount;i++)
record[i]=rs.getString(i+1);
cache.addElement(record);
}
// notifica que tenemos una nueva tabla
((AbstractTableModel)getModel()).fireTableChanged(null);
cn.close();
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Fracas por:\n\n"+e.toString());
}
return new AbstractTableModel(){
//titulo de columna
@Override
public String getColumnName(int i){
return headers[i];
}
// cuntas columnas
public int getColumnCount(){ return colCount;}
______________________________________________________________________
FISI UNMSM 94 Luis Guerra G.
// cuntas filas
public int getRowCount(){ return cache.size();}
//cadena en fila, columna. Inicia en (0,0)
public Object getValueAt(int row, int col){
return ((String[])cache.elementAt(row))[col];
}
};
}
}
package proyectobds1;
import java.awt.event.*;
import javax.swing.*;
public class Mantenimiento extends JFrame{
public Mantenimiento(String s,JPanel p, int width, int height){
super(s);
getContentPane().add(p);
addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e){
setVisible(false);
dispose();
}
});
setSize(width,height);
setVisible(true);
}
}
A continuacin, construimos un Frame para el men en una clase de nombre MiMen. Clic
derecho en el paquete proyectobds1, nuevo JFrame, nuevo JFrame Form de nombre MiMenu
donde hacemos el siguiente diseo:
Mi Menu con BorderLayout. En el norte colocamos una barra de men (jMenuBar1) donde
modificamos las opciones por defecto y agregamos un nuevo men para Ver la tabla de
personas. En cada opcin de men colocamos sus respectivos Menu Items hasta lograr el diseo
requerido. Utilice la propiedad title para escribir un ttulo del frame.
Observe la distribucin de los objetos y los nombres de variable utilizados.
______________________________________________________________________
FISI UNMSM 95 Luis Guerra G.
Vamos al cdigo fuente (source) de MiMenu para establecer el tamao de la ventana y escribir
un mtodo que retorne el men Item que permite ver la tabla de personas.
package proyectobds1;
import java.sql.*;
import javax.swing.*;
public class MiMenu extends javax.swing.JFrame {
public MiMenu() {
initComponents();
setSize(500,400);
}
public JMenuItem getMniVerTablaPersonas(){
return mniVerTablaPersonas;
}
}
A continuacin diseamos el PanelNuevo. Clic derecho en el paquete proyectobds1, nuevo
JPanelForm de nombre PanelNuevo donde hacemos el siguiente diseo.
En el centro colocamos otro panel (jPanel1) con BorderLayout. En el oste colocamos otro
panel (jPanel2) con GridLayout de 1 columna, 3 filas donde colocamos las etiquetas.
En el centro del panel jPanel1 colocamos otro panel (jPanel3) con GridLayout de 1 columna,
3. filas donde colocamos las cajas de texto.
______________________________________________________________________
FISI UNMSM 98 Luis Guerra G.
Vamos al cdigo fuente (source) de PanelNuevo para declarar un objeto Men y recibirlo a
travs de su constructor:
package proyectobds1;
import java.sql.*;
import javax.swing.*;
Regresamos al diseo del PanelNuevo y hacemos doble clic en el botn Grabar para
programar su accin:
______________________________________________________________________
FISI UNMSM 99 Luis Guerra G.
private void btnGrabarActionPerformed(java.awt.event.ActionEvent evt) {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=DriverManager.getConnection("jdbc:odbc:dsnDatos","sa","");
Statement st=cn.createStatement();
String no=txtNombre.getText();
String em=txtEmail.getText();
String te=txtTelefono.getText();
if(no.length()!=0)
st.execute("Insert Into Personas Values('"+no+"','"+em+"','"+te+"')");
cn.close();
menu.getMniVerTablaPersonas().doClick(); // Actualiza JTable
} catch(Exception ex){
String s = "La sentencia fracas por: \n\n" + ex.toString();
JOptionPane.showMessageDialog(null,s,"Error",JOptionPane.ERROR_MESSAGE);
}
// cierra el formulario
((Mantenimiento) getTopLevelAncestor()).dispose();
}
Referencia:
Java for Windows with NetBeans IDE
Julio Vsquez Paragulla
Captulo 13
______________________________________________________________________
FISI UNMSM 100 Luis Guerra G.
Seguidamente diseamos el PanelEliminar. Clic derecho en el paquete proyectobds1, nuevo
JPanelForm de nombre PanelEliminar donde hacemos el siguiente diseo:
PanelEliminar con BorderLayout. En el sur colocamos un botn para eliminar un registro.
En el norte colocaremos un comboBox con los nombres de personas que se encuentren en la
tabla de la base de datos, pero lo haremos escribiendo el cdigo.
package proyectobds1;
import java.awt.BorderLayout;
import proyectobds1.JDBComboBox;
public class PanelEliminar extends javax.swing.JPanel {
JDBComboBox lst = new JDBComboBox("Select Nombre From
Personas","dsnDatos","sa","");
MiMenu menu = null;
______________________________________________________________________
FISI UNMSM 101 Luis Guerra G.
}
private javax.swing.JButton btnEliminar;
}
Observe que el objeto lst de la clase JDBComboBox es creado y agregado al norte del panel.
Regresamos al diseo del PanelEliminar y hacemos doble clic en el botn Eliminar para
programar su accin:
Patrones de diseo
Modelo Vista Controlador (MVC) es un patrn de arquitectura de software que separa los
datos de una aplicacin, la interfaz de usuario, y la lgica de negocio en tres componentes
distintos. El patrn de llamada y retorno MVC (segn CMU), se ve frecuentemente en
aplicaciones web, donde la vista es la pgina HTML y el cdigo que provee de datos dinmicos a
la pgina. El modelo es el Sistema de Gestin de Base de Datos y la Lgica de negocio, y el
controlador es el responsable de recibir los eventos de entrada desde la vista.
Historia
El estilo fue descrito por primera vez en 19791 por Trygve Reenskaug, entonces trabajando en
Smalltalk en laboratorios de investigacin de Xerox. La implementacin original est descrita en
Programacin de Aplicaciones en Smalltalk-80(TM): Como utilizar Modelo Vista Controlador.
1. El usuario interacta con la interfaz de usuario de alguna forma (por ejemplo, el usuario
pulsa un botn, enlace, etc.)
2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificacin de la
accin solicitada por el usuario. El controlador gestiona el evento que llega,
frecuentemente a travs de un gestor de eventos (handler) o callback.
3. El controlador accede al modelo, actualizndolo, posiblemente modificndolo de forma
adecuada a la accin solicitada por el usuario (por ejemplo, el controlador actualiza el
carro de la compra del usuario). Los controladores complejos estn a menudo
estructurados usando un patrn de comando que encapsula las acciones y simplifica su
extensin.
4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario.
La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario
donde se reflejan los cambios en el modelo (por ejemplo, produce un listado del
contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la
vista. Sin embargo, se podra utilizar el patrn Observador para proveer cierta indireccin
entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier
cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, pero
aun as el modelo en s mismo sigue sin saber nada de la vista. Este uso del patrn
Observador no es posible en las aplicaciones Web puesto que las clases de la vista estn
desconectadas del modelo y del controlador. En general el controlador no pasa objetos de
dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se actualice.
Nota: En algunas implementaciones la vista no tiene acceso directo al modelo, dejando
que el controlador enve los datos del modelo a la vista. Por ejemplo en el MVC usado
por Apple en su framework Cocoa. Suele citarse como Modelo-Interface-Control, una
variacin del MVC ms puro
5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo
nuevamente.
______________________________________________________________________
FISI UNMSM 104 Luis Guerra G.
REFERENCIAS
1. Joyanes, Luis; Zahonero, Luis. Programacin en C, C++, Java y UML. 2010. Edit. Mc
Graw Hill. Mxico.
2. Deitel & Deitel. Java como programar. 2008. Edit. Pearson Prentice Hall. Mxico.
3. Francisco, Javier Ceballos. Java 2. Curso de Programacin. 2000 . Edit. Alfa Omega Ra-
ma. Espaa.
4. Douglas Bell, Mike Parr. Java para estudiantes. 2003. Edit. Pearson.
7. Garca-Bermejo, Jos Rafael. Java SE6 & Swing. 2007. Edit. Pearson. Espaa.
9. Vsquez Paragulla, Julio. Java SE for Windows with NetBeans IDE. 2008. Lima.
______________________________________________________________________
FISI UNMSM 105 Luis Guerra G.