[código] Programación Orientada a Objetos: Herencia (2)
(anterior) En esta sección puedes descargar ejemplos de Herencia (Programación Orientada a Objetos), la cual es una forma de reutilización de software en la que nuevas clases se desarrollan rápida y fácilmente al absorber las caracterÃsticas de las clases existentes y agregar nuevas caracterÃsticas que sean apropiadas. También se muestran ejemplos introductorios sobre superclases y subclases, el modificador de acceso protected, las superclases directas e indirectas, el uso de constructores en superclases y subclases, y la ingenierÃa de software con herencia. Veámos entonces los tÃpicos ejemplos de aprendizaje para la Herencia:
JerarquÃa de herencia de tres niveles
Este ejemplo posee 4 clases. La primera es la clase Punto3:
// La declaración de la clase Punto representa un par de coordenadas x-y.
public class Punto3 {
private int x; // parte x de un par de coordenadas
private int y; // parte y de un par de coordenadas
// constructor sin argumentos
public Punto3()
{
// la llamada implÃcita al constructor de Object ocurre aquÃ
}
// constructor
public Punto3( int valorX, int valorY )
{
// la llamada implÃcita al constructor de Object ocurre aquÃ
x = valorX; // no hay necesidad de validación
y = valorY; // no hay necesidad de validación
}
// establecer x en el par de coordenadas
public void establecerX( int valorX )
{
x = valorX; // no hay necesidad de validación
}
// devolver x del par de coordenadas
public int obtenerX()
{
return x;
}
// establecer y en el par de coordenadas
public void establecerY( int valorY )
{
y = valorY; // no hay necesidad de validación
}
// devolver y del par de coordenadas
public int obtenerY()
{
return y;
}
// devolver la representación String del objeto Punto3
public String toString()
{
return "[" + obtenerX() + ", " + obtenerY() + "]";
}
} // fin de la clase Punto3
La segunda es la clase Circulo4:
// La clase Circulo4 hereda de Punto3 y accede a las variables x e y
// de Punto 3 mediante los métodos public de Punto3.
public class Circulo4 extends Punto3 {
private double radio; // El radio de Circulo4
// constructor sin argumentos
public Circulo4()
{
// La llamada implÃcita al constructor de Punto3 ocurre aquÃ
}
// constructor
public Circulo4( int valorX, int valorY, double valorRadio )
{
super( valorX, valorY ); // llamar explÃcitamente al constructor de Punto3
establecerRadio( valorRadio );
}
// establecer el radio
public void establecerRadio( double valorRadio )
{
radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );
}
// devolver el radio
public double obtenerRadio()
{
return radio;
}
// calcular y devolver el diámetro
public double obtenerDiametro()
{
return 2 * obtenerRadio();
}
// calcular y devolver la circunferencia
public double obtenerCircunferencia()
{
return Math.PI * obtenerDiametro();
}
// calcular y devolver el área
public double obtenerArea()
{
return Math.PI * obtenerRadio() * obtenerRadio();
}
// devolver la representación String del objeto Circulo4
public String toString()
{
return "Centro = " + super.toString() + "; Radio = " + obtenerRadio();
}
} // fin de la clase Circulo4
Y la cuarta es la clase PruebaCilindro que contiene el método main:
// Prueba de la clase Cilindro.
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
public class PruebaCilindro {
public static void main( String[] args )
{
// crear el objeto Cilindro
Cilindro cilindro = new Cilindro( 12, 23, 2.5, 5.7 );
// obtener las coordenadas x-y, radio y altura iniciales del Cilindro
String salida = "La coordenada X es " + cilindro.obtenerX() +
"\nLa coordenada Y es " + cilindro.obtenerY() + "\nEl radio es " +
cilindro.obtenerRadio() + "\nLa altura es " + cilindro.obtenerAltura();
cilindro.establecerX( 35 ); // establecer la nueva coordenada x
cilindro.establecerY( 20 ); // establecer la nueva coordenada y
cilindro.establecerRadio( 4.25 ); // establecer el nuevo radio
cilindro.establecerAltura( 10.75 ); // establecer la nueva altura
// obtener la representación String del nuevo valor de cilindro
salida +=
"\n\nLa nueva ubicación, radio y altura del cilindro son\n" +
cilindro.toString();
// dar formato a los valores de punto flotante con 2 dÃgitos de precisión
DecimalFormat dosDigitos = new DecimalFormat( "0.00" );
// obtener el diámetro del Cilindro
salida += "\n\nEl diámetro es " +
dosDigitos.format( cilindro.obtenerDiametro() );
// obtener la circunferencia del Cilindro
salida += "\nLa circunferencia es " +
dosDigitos.format( cilindro.obtenerCircunferencia() );
// obtener el área del Cilindro
salida += "\nEl área es " + dosDigitos.format( cilindro.obtenerArea() );
// obtener el volumen del Cilindro
salida += "\nEl volumen es " + dosDigitos.format( cilindro.obtenerVolumen() );
JOptionPane.showMessageDialog( null, salida ); // mostrar resultados
System.exit( 0 );
} // fin de main
} // fin de la clase PruebaCilindro
Constructores y finalizadores en las subclases
Este ejemplo posee 3 clases. La primera es la clase Punto:
// La declaración de la clase Punto representa un par de coordenadas x-y.
public class Punto {
private int x; // parte x del par de coordenadas
private int y; // parte y del par de coordenadas
// constructor sin argumentos
public Punto()
{
// la llamada implÃcita al constructor de Object ocurre aquÃ
System.out.println( "Constructor sin argumentos de Punto: " + this );
}
// constructor
public Punto( int valorX, int valorY )
{
// la llamada implÃcita al constructor de Object ocurre aquÃ
x = valorX; // no hay necesidad de validación
y = valorY; // no hay necesidad de validación
System.out.println( "Constructor de Punto: " + this );
}
// finalizador
protected void finalize()
{
System.out.println( "Finalizador de Punto: " + this );
}
// establecer x en el par de coordenadas
public void establecerX( int valorX )
{
x = valorX; // no hay necesidad de validación
}
// devolver x del par de coordenadas
public int obtenerX()
{
return x;
}
// establecer y en el par de coordenadas
public void establecerY( int valorY )
{
y = valorY; // no hay necesidad de validación
}
// devolver y del par de coordenadas
public int obtenerY()
{
return y;
}
// devolver la representación String del objeto Punto
public String toString()
{
return "[" + obtenerX() + ", " + obtenerY() + "]";
}
} // fin de la clase Punto
La segunda es la clase Circulo:
// Declaración de la clase Circulo.
public class Circulo extends Punto {
private double radio; // el radio del Circulo
// constructor sin argumentos
public Circulo()
{
// la llamada implÃcita al constructor de Punto ocurre aquÃ
System.out.println( "Constructor sin argumentos de Circulo: " + this );
}
// constructor
public Circulo( int valorX, int valorY, double valorRadio )
{
super( valorX, valorY ); // llamar al constructor de Punto
establecerRadio( valorRadio );
System.out.println( "Constructor de Circulo: " + this );
}
// finalizador
protected void finalize()
{
System.out.println( "Finalizador de Circulo: " + this );
super.finalize(); // llamar al método finalize de la superclase
}
// establecer el radio
public void establecerRadio( double valorRadio )
{
radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );
}
// devolver el radio
public double obtenerRadio()
{
return radio;
}
// calcular y devolver el diámetro
public double obtenerDiametro()
{
return 2 * obtenerRadio();
}
// calcular y devolver la circunferencia
public double obtenerCircunferencia()
{
return Math.PI * obtenerDiametro();
}
// calcular y devolver el área
public double obtenerArea()
{
return Math.PI * obtenerRadio() * obtenerRadio();
}
// devolver la representación String del objeto Circulo
public String toString()
{
return "Centro = " + super.toString() + "; Radio = " + obtenerRadio();
}
} // fin de la clase Circulo
Y la tercera es la clase PruebaConstructorFinalizador que contiene el método main:
// Muestra el orden en que se hacen las llamadas a los constructores
// y finalizadores de la superclase y la subclase.
public class PruebaConstructorFinalizador {
public static void main( String args[] )
{
Punto punto;
Circulo circulo1, circulo2;
punto = new Punto( 11, 22 );
System.out.println();
circulo1 = new Circulo( 72, 29, 4.5 );
System.out.println();
circulo2 = new Circulo( 5, 7, 10.67 );
punto = null; // se marca para la recolección de basura
circulo1 = null; // se marca para la recolección de basura
circulo2 = null; // se marca para la recolección de basura
System.out.println();
System.gc(); // llamar al recolector de basura
} // fin de main
} // fin de la clase PruebaConstructorFinalizador









Ignacio Campos Campos dice:
Abril 22nd, 2008 a las 1:43 pm
Esta pagina para mi es muy interezante y quisiera conocer gente con quienes me encantaria compartir temas de este tipo. El foro esta chido. Soy estudiente de un Tecnologico. Tengo 22 años y quien quiera que sea bienvenido a mi e-mail: iscicc@hotmail.com 1000 gracias por leer esto. ok. estamremos en contacto. bye
jose lino dice:
Junio 13th, 2008 a las 5:58 pm
hola a todos me gustaria aprender java
Zarcko dice:
Junio 17th, 2008 a las 5:16 am
esta super buena la pagina kiero entrar al club para aportar o ayuda tambien sirve interactuar conocimientos
Catalina dice:
Octubre 16th, 2008 a las 9:32 pm
Hola soy estudiante de Ing. Sistemas y me gustaria compartir conocimientos con ustedes y poder aportar mis conocimientos .. Gracias
Cristian dice:
Octubre 17th, 2008 a las 12:30 pm
Catalina, sientete libre de aportar cuanto quieras. Recuerda que puedes enviar tus programas y ejercicios para compartirlos con todos:
http://casidiablo.net/contribuir
Un saludo!
Jair dice:
Noviembre 25th, 2008 a las 12:14 am
Soy estudiante de Ingenieria de Telecomunicaciones y queria decir que esos ejemplos se encuentran en el libro de Deitel de programacion en java, aparte queria saber si podrias poner otros ejemplos xq ese no permite entender muy bien el concepto de herencia y polimorfismo.
Gracias
Cristian dice:
Noviembre 25th, 2008 a las 5:24 pm
Hola Jair…
Ya estoy escribiendo algo más sobre herencia y polimorfismo, aunque enfocado a C#. Con respecto a lo del libro, no es necesario que lo aclares, todos los lectores que lean el blog (que lean bien) no pasan por alto los cuadros azules al final de las entradas.
Un saludo!
Cecilia dice:
Enero 5th, 2009 a las 6:47 am
Hola muy buenos los ejemplos me sirven de mucha ayuda ya que estoy empezando con este lenguaje y sin una pequeña ayuda resulta un poco tedioso realizar ejemplos.Me gustaria si alguien me ayuda como hacer una clave las que se usan para las contraseñas porque no me salio bien el codigo, les agradeceria su ayuda y desde ya mucha suerte con el blog. Saludos!!!