[código] Programación Basada en Objetos (1)
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.
Ejemplo 1: impresión de Tiempo en horas utilizando Objetos.
Este ejemplo contiene dos ficheros en Java; la primera es la clase Tiempo1:
// Declaración de la clase Tiempo1 que mantiene la hora en formato de 24 horas.
import java.text.DecimalFormat;
public class Tiempo1 extends Object {
private int hora; // 0 - 23
private int minuto; // 0 - 59
private int segundo; // 0 - 59
// El constructor de Tiempo1 inicializa cada variable de instancia en cero;
// se asegura de que cada objeto Tiempo1 inicie en un estado consistente
public Tiempo1()
{
establecerHora( 0, 0, 0 );
}
// establecer un nuevo valor de hora utilizando hora universal; realizar
// comprobaciones de validez en los datos; establecer valores inválidos en cero
public void establecerHora( int h, int m, int s )
{
hora = ( ( h >= 0 &amp;&amp; h < 24 ) ? h : 0 );
minuto = ( ( m >= 0 &amp;&amp; m < 60 ) ? m : 0 );
segundo = ( ( s >= 0 &amp;&amp; s < 60 ) ? s : 0 );
}
// convertir a String en formato de hora universal
public String aStringUniversal()
{
DecimalFormat dosDigitos = new DecimalFormat( "00" );
return dosDigitos.format( hora ) + ":" +
dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo );
}
// convertir a String en formato de hora estándar
public String aStringEstandar()
{
DecimalFormat dosDigitos = new DecimalFormat( "00" );
return ( (hora == 12 || hora == 0) ? 12 : hora % 12 ) + ":" +
dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo ) +
( hora < 12 ? " AM" : " PM" );
}
} // fin de la clase Tiempo1
La segunda es la clase PruebaTiempo1, que contiene el método main:
// Clase PruebaTiempo1 que utiliza la clase Tiempo1.
import javax.swing.JOptionPane;
public class PruebaTiempo1
{
public static void main( String args[] )
{
Tiempo1 tiempo = new Tiempo1(); // llamar al constructor de Tiempo1
// anexar versión String de tiempo a salida String
String salida = "La hora universal inicial es: " +
tiempo.aStringUniversal() + "\nLa hora estándar inicial es: " +
tiempo.aStringEstandar();
// cambiar tiempo y anexar hora actualizada a salida
tiempo.establecerHora( 13, 27, 6 );
salida += "\n\nLa hora universal después de establecerHora es: " +
tiempo.aStringUniversal() +
"\nLa hora estándar después de establecerHora es: " + tiempo.aStringEstandar();
// establecer tiempo con valores inválidos; anexar hora actualizada a salida
tiempo.establecerHora( 99, 99, 99 );
salida += "\n\nDespués de intentar ajustes inválidos: " +
"\nHora universal: " + tiempo.aStringUniversal() +
"\nHora estándar: " + tiempo.aStringEstandar();
JOptionPane.showMessageDialog( null, salida,
"Prueba de la clase Tiempo1", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
} // fin de main
} // fin de la clase PruebaTiempo1
Uso de la referencia this para hacer referencia a los campos y métodos
// Uso de la referencia this para hacer referencia a los campos y métodos.
import javax.swing.*;
import java.text.DecimalFormat;
public class PruebaThis {
public static void main( String args[] )
{
HoraSimple hora = new HoraSimple( 12, 30, 19 );
JOptionPane.showMessageDialog( null, hora.crearCadena(),
"Demostración de la referencia \"this\"",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
} // fin de la clase PruebaThis
// la clase HoraSimple demuestra el uso de la referencia "this"
class HoraSimple {
private int hora;
private int minuto;
private int segundo;
// el constructor utiliza nombres de parámetros idénticos a los nombres de la variable
// de instancia; se requiere la referencia "this" para diferenciar entre los nombres
public HoraSimple( int hora, int minuto, int segundo )
{
this.hora = hora; // establecer hora del objeto "this"
this.minuto = minuto; // establecer minuto del objeto "this"
this.segundo = segundo; // establecer segundo del objeto "this"
}
// usar "this" explícito e implícito para llamar al método aStringEstandar
public String crearCadena()
{
return "this.aStringEstandar(): " + this.aStringEstandar() +
"\naStringEstandar(): " + aStringEstandar();
}
// devolver la representación String de HoraSimple
public String aStringEstandar()
{
DecimalFormat dosDigitos = new DecimalFormat( "00" );
// "this" no se requiere aquí, ya que el método no tiene
// variables locales con los mismos nombres que las variables de instancia
return dosDigitos.format( this.hora ) + ":" +
dosDigitos.format( this.minuto ) + ":" +
dosDigitos.format(segundo );
}
} // fin de la clase HoraSimple
Ejemplo 2: Demostración de los errores que se producen al tratar de acceder a los miembros private de Tiempo1.
Este ejemplo contiene dos ficheros en Java; la primera es la clase Tiempo1 (que es la misma del primer ejemplo), y la segunda es la clase PruebaTiempo2, que contiene el método main:
// Errores que se producen al tratar de acceder a los miembros private de Tiempo1.
public class PruebaTiempo2 {
public static void main( String args[] )
{
Tiempo1 tiempo = new Tiempo1();
tiempo.hora = 7; // error: hora es una variable de instancia privada
tiempo.minuto = 15; // error: minuto es una variable de instancia privada
tiempo.segundo = 30; // error: segundo es una variable de instancia privada
}
} // fin de la clase PruebaTiempo2
Ejemplo 3: Constructores sobrecargados utilizados para inicializar objetos Tiempo2.
Este ejemplo contiene dos ficheros en Java; la primera es la clase Tiempo2:
// Declaración de la clase Tiempo2 con constructores sobrecargados.
import java.text.DecimalFormat;
public class Tiempo2 {
private int hora; // 0 - 23
private int minuto; // 0 - 59
private int segundo; // 0 - 59
// El constructor de Tiempo2 inicializa cada variable de instancia en cero;
// asegura que el objeto Tiempo2 empiece en un estado consistente
public Tiempo2()
{
this( 0, 0, 0 ); // invoca al constructor de Tiempo2 con tres argumentos
}
// Constructor de Tiempo2: se proporciona hora; minuto y segundo con valor predeterminado de 0
public Tiempo2( int h )
{
this( h, 0, 0 ); // invoca al constructor de Tiempo2 con tres argumentos
}
// Constructor de Tiempo2: se proporcionan hora y minuto; segundo con valor predeterminado de 0
public Tiempo2( int h, int m )
{
this( h, m, 0 ); // invoca al constructor de Tiempo2 con tres argumentos
}
// Constructor de Tiempo2: se proporcionan hora, minuto y segundo
public Tiempo2( int h, int m, int s )
{
establecerHora( h, m, s ); // invoca a establecerHora para validar la hora
}
// Constructor de Tiempo2: se proporciona otro objeto Tiempo2
public Tiempo2( Tiempo2 tiempo )
{
// invocar al constructor de Tiempo2 con tres argumentos
this( tiempo.hora, tiempo.minuto, tiempo.segundo );
}
// establecer un nuevo valor de hora, utilizando la hora universal; realizar
// comprobaciones de validez en los datos; establecer valores inválidos en cero
public void establecerHora( int h, int m, int s )
{
hora = ( ( h >= 0 &amp;&amp; h < 24 ) ? h : 0 );
minuto = ( ( m >= 0 &amp;&amp; m < 60 ) ? m : 0 );
segundo = ( ( s >= 0 &amp;&amp; s < 60 ) ? s : 0 );
}
// convertir a String en formato de hora universal
public String aStringUniversal()
{
DecimalFormat dosDigitos = new DecimalFormat( "00" );
return dosDigitos.format( hora ) + ":" +
dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo );
}
// convertir a String en formato de hora estándar
public String aStringEstandar()
{
DecimalFormat dosDigitos = new DecimalFormat( "00" );
return ( (hora == 12 || hora == 0) ? 12 : hora % 12 ) + ":" +
dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo ) +
( hora < 12 ? " AM" : " PM" );
}
} // fin de la clase Tiempo2
La segunda es la clase PruebaTiempo3, que contiene el método main:
// Constructores sobrecargados utilizados para inicializar objetos Tiempo2.
import javax.swing.*;
public class PruebaTiempo3 {
public static void main( String args[] )
{
Tiempo2 t1 = new Tiempo2(); // 00:00:00
Tiempo2 t2 = new Tiempo2( 2 ); // 02:00:00
Tiempo2 t3 = new Tiempo2( 21, 34 ); // 21:34:00
Tiempo2 t4 = new Tiempo2( 12, 25, 42 ); // 12:25:42
Tiempo2 t5 = new Tiempo2( 27, 74, 99 ); // 00:00:00
Tiempo2 t6 = new Tiempo2( t4 ); // 12:25:42
String salida = "Se construyó con: " +
"\nt1: todos los argumentos predeterminados" +
"\n " + t1.aStringUniversal() +
"\n " + t1.aStringEstandar();
salida += "\nt2: se especificó hora; minuto y segundo predeterminados" +
"\n " + t2.aStringUniversal() +
"\n " + t2.aStringEstandar();
salida += "\nt3: se especificaron hora y minuto; segundo predeterminado" +
"\n " + t3.aStringUniversal() +
"\n " + t3.aStringEstandar();
salida += "\nt4: se especificaron hora, minuto y segundo" +
"\n " + t4.aStringUniversal() +
"\n " + t4.aStringEstandar();
salida += "\nt5: se especificaron todos como valores inválidos" +
"\n " + t5.aStringUniversal() +
"\n " + t5.aStringEstandar();
salida += "\nt6: se específico objeto t4 de la clase Tiempo2" +
"\n " + t6.aStringUniversal() +
"\n " + t6.aStringEstandar();
JOptionPane.showMessageDialog( null, salida,
"Constructores sobrecargados", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
} // fin de main
} // fin de la clase PruebaTiempo3
8 Comentarios | deja el tuyo



Tiempo 1 me devuelve este error
java.lang.NoSuchMethodError: main
Exception in thread “main”
Process completed.
Por que?
Muy bueno el tutorial
Saludos
Es que ese no tiene el método main. Debes ejecutar los que tienen método main.
Un saludo.
A muchas gracias Cristian!!
Muy buena la pag .Y los tutoriales.
Hola,necesito una asesoria tuya para un trabajo de la universidad en el que tengo que hacer un programa que enlace una base de datos, pero la duda es que no se que hacer o sobre que hacerlo. Por eso necesito de tu colaboracion, mil gracias
http://casidiablo.net/video-tutorial-mysql-java/
HOla necesito un ejemplo donde muestre como enlazo una base de datos en acces a java.
Gracias