[código] Programación Basada en Objetos (2)
(anterior) En esta sección se encuentran ejemplos más detallados de las clases. Muestra: la implementación de clases en Java, el acceso a los miembros de una clase, como implementar la ocultación de la información con modificadores de acceso, separar la interfaz de la implementación, usar métodos de acceso, separar la interfaz de la implementación, usar métodos de acceso y métodos utilitarios e inicializar objetos con constructores. También: el cómo declarar y utilizar constantes, la composición, la referencia con this, los miembros de la clase static y tipos de datos abstractos populares como pilas y colas. Al igual que se da un ejemplo introductorio al uso de paquetes (package) de Java.
Demostración de un objeto que tiene como miembro a otro objeto
Este ejemplo contiene 3 clases, la primera es Empleado:
// Empleado class declaration.
public class Empleado {
private String primerNombre;
private String apellidoPaterno;
private Fecha fechaNacimiento;
private Fecha fechaContratacion;
// constructor para inicializar nombre, fecha de nacimiento y de contratación
public Empleado( String nombre, String apellido, Fecha fechaDeNacimiento,
Fecha fechaDeContratacion )
{
primerNombre = nombre;
apellidoPaterno = apellido;
fechaNacimiento = fechaDeNacimiento;
fechaContratacion = fechaDeContratacion;
}
// convertir Empleado a formato de String
public String aStringEmpleado()
{
return apellidoPaterno + ", " + primerNombre +
" Contratado: " + fechaContratacion.aStringFecha() +
" Fecha de nacimiento: " + fechaNacimiento.aStringFecha();
}
} // fin de la clase Empleado
La segunda es Fecha:
// Declaración de la clase Fecha.
public class Fecha {
private int mes; // 1-12
private int dia; // 1-31 con base en el mes
private int anio; // cualquier año
// constructor: llama a comprobarMes para confirmar el valor apropiado de mes;
// llama a comprobarDia para confirmar el valor apropiado de dia
public Fecha( int elMes, int elDia, int elAnio )
{
mes = comprobarMes( elMes ); // validar mes
anio = elAnio; // podría validar anio
dia = comprobarDia( elDia ); // validar dia
System.out.println( "Constructor de objeto Fecha para la fecha " +
aStringFecha() );
} // fin del constructor de Fecha
// método utilitario para confirmar el valor apropiado del mes
private int comprobarMes( int mesPrueba )
{
if ( mesPrueba > 0 && mesPrueba <= 12 ) // validar mes
return mesPrueba;
else { // mes es inválido
System.out.println( "Mes inválido (" + mesPrueba +
") se establece en 1." );
return 1; // mantener el objeto en estado consistente
}
} // fin del método comprobarMes
// método utilitario para confirmar valor apropiado de dia, con base en mes y anio
private int comprobarDia( int diaPrueba )
{
int diasPorMes[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// comprobar si el dia está dentro del rango del mes
if ( diaPrueba > 0 && diaPrueba <= diasPorMes[ mes ] )
return diaPrueba;
// comprobar si es año bisiesto
if ( mes == 2 && diaPrueba == 29 && ( anio % 400 == 0 ||
( anio % 4 == 0 && anio % 100 != 0 ) ) )
return diaPrueba;
System.out.println( "Día inválido (" + diaPrueba + ") se establece en 1." );
return 1; // mantener el objeto en estado consistente
} // fin del método comprobarDia
// devolver un String de la forma mes/día/año
public String aStringFecha()
{
return mes + "/" + dia + "/" + anio;
}
} // fin de la clase Fecha
Y la tercera es PruebaEmpleado, que contiene el método main:
// Demostración de un objeto que tiene como miembro a otro objeto.
import javax.swing.JOptionPane;
public class PruebaEmpleado {
public static void main( String args[] )
{
Fecha nacimiento = new Fecha( 7, 24, 1949 );
Fecha contratacion = new Fecha( 3, 12, 1988 );
Empleado empleado = new Empleado( "Juan", "Pérez", nacimiento, contratacion );
JOptionPane.showMessageDialog( null, empleado.aStringEmpleado(),
"Prueba de la clase Empleado", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
} // fin de la clase PruebaEmpleado
Ejemplos con variables de clase estática, el método de clase estático y memoria dinámica
Este ejemplo contiene 2 clases, la primera es Empleado:
// Declaración de la clase Empleado.
public class Empleado {
private String primerNombre;
private String apellidoPaterno;
private static int cuenta = 0; // número de objetos en la memoria
// inicializar empleado, sumar 1 a la cuenta estática y
// mostrar String indicando que se llamó al constructor
public Empleado( String nombre, String apellido )
{
primerNombre = nombre;
apellidoPaterno = apellido;
++cuenta; // incrementar cuenta estática de empleados
System.out.println( "Constructor de Empleado: " +
primerNombre + " " + apellidoPaterno );
}
// restar 1 de la cuenta estática cuando el recolector de basura
// llama a finalize para limpiar el objeto y mostrar String
// indicando que se llamó a finalize
protected void finalize()
{
--cuenta; // decrementar cuenta estática de empleados
System.out.println( "Finalizador de Empleado: " +
primerNombre + " " + apellidoPaterno + "; cuenta = " + cuenta );
}
// obtener primer nombre
public String obtenerPrimerNombre()
{
return primerNombre;
}
// obtener apellido
public String obtenerApellidoPaterno()
{
return apellidoPaterno;
}
// método estático para obtener el valor de la cuenta estática
public static int obtenerCuenta()
{
return cuenta;
}
} // fin de la clase Empleado
Y la segunda es PruebaEmpleado, que contiene el método main:
// Prueba de la clase Empleado con la variable de clase estática,
// el método de clase estático y memoria dinámica.
import javax.swing.*;
public class PruebaEmpleado {
public static void main( String args[] )
{
// demostrar que cuenta es 0 antes de crear Empleados
String salida = "Empleados antes de instanciar: " +
Empleado.obtenerCuenta();
// crear dos Empleados; la cuenta debe ser 2
Empleado e1 = new Empleado( "Maria", "Flores" );
Empleado e2 = new Empleado( "Juan", "Perez" );
// demostrar que la cuenta es 2 después de crear dos Empleados
salida += "\n\nEmpleados después de instanciar: " +
"\nvia e1.obtenerCuenta(): " + e1.obtenerCuenta() +
"\nvia e2.obtenerCuenta(): " + e2.obtenerCuenta() +
"\nvia Empleado.obtenerCuenta(): " + Empleado.obtenerCuenta();
// obtener nombres de Empleados
salida += "\n\nEmpleado 1: " + e1.obtenerPrimerNombre() +
" " + e1.obtenerApellidoPaterno() + "\nEmpleado 2: " +
e2.obtenerPrimerNombre() + " " + e2.obtenerApellidoPaterno();
// decrementar la cuenta de referencia para cada objeto Empleado; en este
// ejemplo, hay sólo una referencia a cada Empleado, por lo que estas
// instrucciones marcan a cada objeto Empleado para la recolección de basura
e1 = null;
e2 = null;
System.gc(); // sugerir una llamada al recolector de basura
// mostrar cuenta de objetos Empleado después de llamar al recolector de basura; la cuenta
// mostrada puede ser 0, 1 o 2 dependiendo de si el recolector de basura
// se ejecuta inmediatamente o no y del número de objetos Empleado recolectados
salida += "\n\nEmpleados después de System.gc(): " +
Empleado.obtenerCuenta();
JOptionPane.showMessageDialog( null, salida,
"Miembros estáticos", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
} // fin de la clase PruebaEmpleado
Inicialización de una variable final
// Inicialización de una variable final.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaIncremento extends JApplet implements ActionListener {
private Incremento objetoIncremento;
private JButton boton;
// configurar GUI
public void init()
{
objetoIncremento = new Incremento( 5 );
Container contenedor = getContentPane();
boton = new JButton( "Haga clic para incrementar" );
boton.addActionListener( this );
contenedor.add( boton );
}
// sumar INCREMENTO al total cuando el usuario haga clic en el botón
public void actionPerformed( ActionEvent eventoAccion )
{
objetoIncremento.incrementar();
showStatus( objetoIncremento.aStringIncremento() );
}
} // fin de la clase PruebaIncremento
// clase que contiene variable constante
class Incremento {
private int cuenta = 0; // número de incrementos
private int total = 0; // total de todos los incrementos
private final int INCREMENTO; // variable constante
// inicializar constante INCREMENTO
public Incremento( int valorIncremento )
{
INCREMENTO = valorIncremento; // inicializar variable constante (una vez)
}
// sumar INCREMENTO al total y sumar 1 a cuenta
public void incrementar()
{
total += INCREMENTO;
++cuenta;
}
// devolver representación String de los datos de un objeto Incremento
public String aStringIncremento()
{
return "Después de incremento " + cuenta + ": total = " + total;
}
} // fin de la clase Incremento
Acceso de paquete de otras clases en el mismo paquete
// Las clases en el mismo paquete (es decir, el mismo directorio) pueden
// utilizar los datos con acceso de paquete, de otras clases en el mismo paquete.
import javax.swing.JOptionPane;
public class PruebaDatosPaquete {
public static void main( String args[] )
{
DatosPaquete datosPaquete = new DatosPaquete();
// anexar representación String de datosPaquete a salida
String salida = "Después de instanciar:\n" +
datosPaquete.aStringDatosPaquete();
// cambiar los datos con acceso de paquete en el objeto datosPaquete
datosPaquete.numero = 77;
datosPaquete.cadena = "Adiós";
// anexar la representación String de datosPaquete a salida
salida += "\nDespués de cambiar valores:\n" +
datosPaquete.aStringDatosPaquete();
JOptionPane.showMessageDialog( null, salida, "Acceso a nivel de paquete",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
} // fin de la clase PruebaDatosPaquete
// la clase con variables de instancia con acceso de paquete
class DatosPaquete {
int numero; // variable de instancia con acceso de paquete
String cadena; // variable de instancia con acceso de paquete
// constructor
public DatosPaquete()
{
numero = 0;
cadena = "Hola";
}
// devolver representación String del objeto DatosPaquete
public String aStringDatosPaquete()
{
return "numero: " + numero + " cadena: " + cadena;
}
} // fin de la clase DatosPaquete
6 Comentarios | deja el tuyo



Hola en el programa de crear 3 clases (empleado, fecha y prueba empleado) me manda errores en las lineas que tienen algo como esto &.
Ejemplo: if ( mesPrueba > 0 && mesPrueba <= 12 )
Los errores que me salen son estos : Syntax error, insert “) Statement” to complete BlockStatements
Syntax error on token “;”, ( expected
Syntax error, insert “;” to complete Statement
Syntax error on token “else”, delete this token
at Fecha.comprobarMes(Fecha.java:35)
at Fecha.(Fecha.java:23)
at PruebaEmpleado.main(PruebaEmpleado.java:18)
¿Me podrias explicar que esta pasando? Gracias de antemano.
Saludos Casi.
Umm… es problema del Wordpress, no muestra bien las cosas. Ya creo que está solucionado, aun así es mejor que no copies el código de la página sino que lo descargues usando los links que dicen Download.
Un saludo!
Tengo varias clases que representan objetos: Venta, Cliente, Factura.
Cuando se hace una venta, se genera un nuevo cliente y una nueva factura:
class Venta{
Cliente nuevoCliente = new Cliente();
Factura nuevaFactura = new Factura();
}
¿Puedo, desde el objeto creado “nuevoCliente” modificar “nuevaFactura” ?
Hola quisera saber si me puedes ayudar.
Tengo una base de datos donde tengo dada de alta a varios empleados, pero me para la busqueda de los datos de los empleados los quiere buscar por el apellido paterno, mi pregunta es como hacer que me muestre una ventana con esos empleados con el mismo apellido paterno, y al ver cual de todos ellos es el que estoy buscando poder darle clic y mostrarme los datos de ese empleado que seleccione.
Bueno esperando a que me hayas entendido muchas gracias.
hola quisiera que me ayudaran
para ver como puedo hacer unprograma en java
sobre una factura de una tienda departamental