Circulo

Anuncio
Unidad I. Lenguaje de
Programación Orientado a
Objetos.
Segunda Parte
Contenido
1. Implementación de Estructuras de Datos
2. Implementación de clases
3. Implementación de asociaciones y
dependencia
4. Implementación de Herencia y Polimorfismo
Implementación de Herencia
• Herencia
– Clases son creadas a partir de otras clases existentes
• Heredan atributos y funcionalidad
• Pueden agregar nuevas características
• Convertible hereda de Automobil
– Subclases heredan de las superclases
• Subclase con frecuencia agrega variables de instancia y
métodos
– Herencia simple y múltiple
• Java no soporta herencia múltiple
– La relación se interpreta como “Es un”
Relación entre los objetos de la
superclase y los objetos de la subclase
• Objetos de la subclase
– Pueden ser tratados como objetos de la
superclase
• No se aplica al contrario
– Una Figura no siempre es un Circulo
– Cada clase implicitamente hereda de
java.lang.Object
• A menos que se especifique lo contrario en la primera
línea de definición de la clase
Miembros protegidos: protected
• Acceso a miembros protected
– Este nivel de protección se úbica entre public y
private
– Estos miembros son accesible solo por:
• Métodos de la Superclase
• Métodos de la Subclase
• Métodos de clases en el mismo paquete
– Acceso de paquete (package access)
• Acceso de paquete: los miembros protegidos
solo son accesibles desde los objetos de una
subclase o de una clase del mismo paquete
Ejemplo de Protected:
Superclase Punto
// Definición de la clase Punto
public class Punto {
protected int x, y;
// coordenadas del punto
public Punto()
// constructor sin argumento
{
//llamada implícita al constructor de la superclase
setPunto( 0, 0 );
}
public Punto( int coordenadX, int coordenadaY )
{
//llamada implícita al constructor de la superclase
setX( coordenadX ); setY( coordenadaY );
}
Ejemplo de Protected: Superclase Punto
public void setX(int coordenadaX)
{
x = coordenadaX;
}
public int getX()
{
return x;
}
public void setY(int coordenadaY) }
{
y = coordenadaY;
}
public int getY()
{
return y;
}
public String toString()
{
return "[" + x + ", " + y + "]";
}
// fin de la clase Punto
Ejemplo de Protected: Subclase Circulo
// Definición de la clase Circulo
public class Circulo extends Punto {
// hereda de Punto
protected double radio;
public Circulo()
// constructor sin argumentos
{
setRadio( 0 ); // llamada implicita al constructor de superclase
}
public Circulo( double valorRadio, int coordenadaX,
int coordenadaY ) // constructor
{
// llamada explicita al constructor de superclase
super( coordenadaX, coordenadaY);
// asignar radio
setRadio( valorRadio );
}
Ejemplo de Protected: Subclase Circulo
public void setRadio( double valorRadio )
{
radio = ( valorRadio >= 0.0 ? valorRadio : 0.0 );
}
public double getRadio()
{
return radio;
}
public double calcularArea() // calcula area del Circulo
{
return Math.PI * radio * radio;
}
public String toString()
// convierte el Circulo a String
{
return "Centro = "+ "[" + x + ", " + y + "]"+ "; Radio = " + radio;
}
} // fin de clase Circulo
Ejemplo de Protected: Subclase Circulo
Clase Circulo.java
• Un Circulo es una subclase de Punto.
• Un Circulo hereda de clase Punto:
– variables de instancia protegidas
– métodos públicos (excepto el o los constructores)
• Realiza una llamada implícita al constructor de la
superclase Punto.
• Realiza una llamada explícita al constructor de la
superclase Punto.
• Sobreescribe el método toString() de la clase Punto
al usar el mismo prototipo del método.
10
Ejemplo de Protected: Clase PruebaCirculo
// Clase PruebaCirculo
// Java core packages
import java.text.DecimalFormat;
// Java extension packages
import javax.swing.JOptionPane;
public class PruebaCirculo{
public static void main( String args[] )
{
Punto punto1, punto2;
Circulo circulo1, circulo2;
punto1 = new Punto( 30, 50 );
circulo1 = new Circulo( 2.7, 120, 89 );
Ejemplo de Protected: Clase PruebaCirculo
String salida = "Punto punto1: " + punto1.toString() +
"\nCirculo circulo1: " + circulo1.toString();
// utiliza una relacion “es un” para referirse a un Circulo
// usando como referencia un Punto
punto2 = circulo1; //se asigna un Circulo a la referencia de Punto
salida += "\n\nCirculo circulo1(ubicado en referencia de punto2):" +
punto2.toString();
// Para asignar el circulo que esta almacenado en punto2,
//se utilizara “downcasting” (casting una referencia de superclase
//al tipo de dato de la subclase)
circulo2 = ( Circulo ) punto2;
Ejemplo de Protected: Clase PruebaCirculo
salida += "\n\nCirculo circulo1 (ubicado en la referencia de
circulo2): " + circulo2.toString();
DecimalFormat precision2 = new DecimalFormat( "0.00" );
salida += "\nArea del circulo1 (ubicado en la referencia de
circulo2): " + precision2.format( circulo2.area() );
// Intento de referir a un objeto Punto con referencia de Circulo
if ( punto1 instanceof Circulo ) {
circulo2 = ( Circulo ) punto1;
salida += "\n\ncasting realizado exitosamente"; }
else
salida += "\n\npunto1 no hace referencia a un Circulo";
JOptionPane.showMessageDialog( null, salida,"Demostracion de
la relacion \“es un\" ", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
} // fin de la clase PruebaCirculo
Ejemplo de Protected: Clase PruebaCirculo
Clase PruebaCirculo.java
• Crea dos referencias a objetos de tipo Punto y dos de tipo Circulo
• Un circulo invoca el método sobreescrito toString
• Una variable de superclase hace referencia a un objeto de subclase
• Un Punto invoca el método toString sobreescrito de la clase Circulo
• Se convierte el objeto circulo (referenciado por un Punto), a un
objeto Circulo, utilizando downcasting
• Circulo invoca el método calcularArea()
• Usar el método instanceof() para determinar si un Punto hace
referencia a un Circulo
• Si un Punto hace referencia a un Circulo, se puede aplicar el casting
a un Punto para convertirlo a Circulo
– circulo2 = ( Circulo ) punto1;
14
Polimorfismo
• Polimorfismo
– Los programas generalmente procesan los objetos
como objetos de las superclases
• Fácilmente se pueden agregar clases a las aplicaciones
– Las clases deben ser parte de una jerarquía de herencia
– Enlace dinámico de los métodos
• Implementa el procesamiento polimórfico de los objetos
• Utiliza una referencia a la superclase para referenciar un
objeto de la subclase
• El programa selecciona el método correcto del objeto de la
subclase
Ejemplo de Enlace Dinámico
de los métodos
• Por ejemplo,
– Superclase Figura
– Subclases Circulo, Rectangulo y Cuadrado
cada clase se dibuja ella misma de acuerdo al tipo
de clase
• Figura tiene el método dibujar
• Cada subclase ha sobreescrito el método dibujar
• En una llamada al método dibujar de la superclase
Figura
– El programa determina dinámicamente cual método
dibujar de las subclases es invocado
Superclases abstractas y clases
concretas
• Clases abstractas
– No se pueden crear objetos
– Son muy genéricas para definir objetos reales
• Figura2D
– Proveen una superclase de la cual otras clases pueden
heredar
• Se les conoce como superclases abstractas
• Clases concretas
– Clases desde las cuales los objetos son instanciados
– Especifican como crear objetos
• Cuadrado, Circulo y Triangulo
Ejemplo con Clases
Abstractas
• Establecer una Jerarquía de herencia
entre: Punto, Circulo, Cilindro
– Modificar la Jerarquía incluyendo una
superclase abstracta Figura
• Demostración del polimorfismo
• Contiene el método abstracto getNombre
– Cada subclase debe implementar el método
getNombre
• Contiene los métodos (no abstractos)
calcularArea y calcularVolumen
– Retornan 0 por omisión
– Cada subclase sobreescribe estos métodos
Ejemplo de Polimorfismo: Clase Abstracta Figura
//Definicion de la clase abstracta Figura
public abstract class Figura extends Object {
// calcula el area de la figura
public double calcularArea()
{
return 0.0;
}
// calcula el volumen de la figura
public double calcularVolumen()
{
return 0.0;
}
// metodo abstracto debe ser definido por las subclases concretas
// para retornar el nombre apropiado
public abstract String getNombre();
} // fin de la clase Figura
Ejemplo de Polimorfismo: Clase Abstracta Figura
Clase abstracta Figura.java
• Figura no puede ser instanciada
• Las clases abstractas pueden heredar métodos
concretos para las subclases
• Las subclases concretas deben implementar el
método getNombre()
20
Ejemplo de Polimorfismo: Clase Punto
//Definicion de la clase Punto
public class Punto extends Figura {
protected int x, y;
// coordenadas del Punto
// constructor sin argumentos
public Punto()
{
setPunto( 0, 0 );
}
// constructor
public Punto( int coordenadaX, int coordenadaY )
{
setPunto( coordenadaX, coordenadaY );
}
// Asignar las coordenadas x y y del Punto
public void setPunto( int coordenadaX, int coordenadaY )
{
x = coordenadaX;
//setX() y
y = coordenadaY;
//setY(), ambos en un solo metodo
}
Ejemplo de Polimorfismo: Clase Punto
public int getX()
// recuperar coordenada x
{
return x;
}
public int getY()
// recuperar coordenada y
{
return y;
}
// convierte el Punto a su representacion en String
public String toString()
{
return "[" + x + ", " + y + "]";
}
// retorna el nombre de la figura
public String getNombre()
{
return "Punto";
}
} // fin de la clase Punto
Ejemplo de Polimorfismo: Clase Punto
Clase Punto.java
• Punto hereda los métodos públicos de Figura
• Los miembros protegidos solo pueden ser accedidos
por los objetos de las subclases de Punto o de las
clases del mismo paquete
• Punto implementa el método abstracto getNombre
• Punto no sobreescribe el método calcularArea y
calcularVolumen, porque no posee area ni volumen
23
Ejemplo de Polimorfismo: Clase Circulo
//Definicion de la clase Circulo
public class Circulo extends Punto { // hereda de Punto
protected double radio;
public Circulo() //constructor sin argumentos
{
// llamada implicita al constructor de la superclase aqui
setRadio( 0 );
}
// constructor
public Circulo( double valorRadio, int coordenadaX, int coordenadaY )
{
// invoca el constructor de la superclase
super( coordenadaX, coordenadaY );
setRadio( valorRadio );
}
// asignar radio del Circulo
public void setRadio( double valorRadio )
{
radio = ( valorRadio >= 0 ? valorRadio : 0 );
}
Ejemplo de Polimorfismo: Clase Circulo
// recuperar radio del Circulo
public double getRadio()
{
return radio;
}
public double calcularArea()
// calcula area del Circulo
{
return Math.PI * radius * radius;
}
// convierte el Circulo a su representacion en String
public String toString()
{
return "Centro = " + super.toString() +
"; Radio = " + radio;
}
public String getNombre()
// retorna nombre de la Figura
{
return "Circulo";
}
} // fin de la clase Circulo
Ejemplo de Polimorfismo: Clase Circulo
Clase Circulo.java
• Circulo hereda las variables y métodos de Punto y
Figura
• Define métodos para recuperar/asignar los valores
protected
• Sobreescribe el método calcularArea, no así el
método calcularVolumen, ya que no posee volumen
• Implementa el método abstracto getNombre
26
Ejemplo de Polimorfismo: Clase Cilindro
//Definicion de la clase Cilindro
public class Cilindro extends Circulo {
protected double altura; // altura del Cilindro
public Cilindro() //constructor sin argumentos
{
// llamada implicita al constructor de la superclase aqui
setAltura( 0 );
}
// constructor
public Cilindro( double alturaCilindro, double radioCilindro,
int coordenadaX, int coordenadaY)
{
// invoca el contrusctor de la superclase
super( radioCilindro, coordenadaX, coordenadaY );
setAltura( alturaCilindro );
}
Ejemplo de Polimorfismo: Clase Cilindro
// asignar altura del Cilindro
public void setAltura( double alturaCilindro )
{
altura = ( alturaCilindro >= 0 ? alturaCilindro : 0 );
// recupera altura del Cilindro
public double getAltura()
{
return altura;
}
// calcula el area del Cilindro ( area de la superficie )
public double calcularArea()
{
return 2 * super.calcularArea() + 2 * Math.PI * radio * altura;
}
// calcula el volumen del Cilindro
public double calcularVolumen()
{
return super.calcularArea() * altura;
}
Ejemplo de Polimorfismo: Clase Cilindro
// convierte el Cilindro a su representación en String
public String toString()
{
return super.toString() + "; altura = " + altura;
}
// retorna el nombre de la Figura
public String getNombre()
{
return "Cilindro";
}
} // fin de clase Cilindro
Ejemplo de Polimorfismo: Clase Cilindro
Clase Cilindro.java
• Cilindro hereda las variables y métodos de Punto,
Circulo y Figura
• Sobreescribe los métodos calcularArea y
calcularVolumen
• Implementa el método abstracto getNombre de
Figura
30
Ejemplo de Polimorfismo: Clase Prueba
// Clase Prueba.java
// Clase que prueba la jerarquia de Figura, Punto, Circulo y Cilindro
// Java core packages
import java.text.DecimalFormat;
// Java extension packages
import javax.swing.JOptionPane;
public class Prueba {
// Prueba la jerarquia de Figura
public static void main( String args[] )
{
// crear Figuras
Punto punto = new Punto( 7, 11 );
Circulo circulo = new Circulo( 3.5, 22, 8 );
Cilindro cilindro = new Cilindro( 10, 3.3, 10, 10 );
// crear arreglo de Figuras
Figura arregloDeFiguras[] = new Figura[ 3 ];
Ejemplo de Polimorfismo: Clase Prueba
// arregloDeFiguras[0] apunta a un objeto de la subclase Punto
arregloDeFiguras[0] = punto;
// arregloDeFiguras[1] apunta a un objeto de la subclase Circulo
arregloDeFiguras[1] = circulo
// arregloDeFiguras[2] apunta a un objeto de la subclase Cilindro
arregloDeFiguras[2] = cilindro;
// Obtener de cada Figura su
//nombre y su representacion en String
String salida =
punto.getNombre() + ": " + punto.toString() + "\n" +
circulo.getNombre() + ": " + circulo.toString() + "\n" +
cilindro.getNombre() + ": " + cilindro.toString();
DecimalFormat precision2 = new DecimalFormat( "0.00" );
Ejemplo de Polimorfismo: Clase Prueba
// ciclo sobre el arregloDeFiguras y recupera el nombre
// area y volumen de cada Figura en el arregloDeFiguras
for ( int i = 0; i < arregloDeFiguras.length; i++ ) {
salida += "\n\n" + arregloDeFiguras [ i ].getNombre() +
": " + arregloDeFiguras [ i ].toString() +
"\nArea = " +
precision2.format(arregloDeFiguras[ i ].calcularArea() ) +
"\nVolumen = " +
precision2.format(arregloDeFiguras[ i ].calcularVolumen() );
}
JOptionPane.showMessageDialog( null, salida,
“Demostracion de Polimorfismo",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
} // fin de clase Prueba
Ejemplo de Polimorfismo: Clase Prueba
Clase Prueba.java
• Crea un objeto de cada subclase de la superclase
Figura
• Crea un arreglo de tres variables de tipo Figura para
referenciar cada objeto de las subclases
• Enlaza dinámicamente el método getNombre
• Enlaza dinámicamente el método calcularArea para
los objetos de Circulo y Cilindro
• Enlaza dinámicamente el método calcularVolumen
para el objeto de Cilindro
34
Ejecución de Prueba.java
Punto: [7, 11]
Circulo: Centro = [22, 8]; Radio = 3.5
Cilindro: Centro = [10, 10]; Radio = 3.3; Altura = 10.0
Punto: [7, 11]
Area = 0.00
Volumen = 0.00
Circulo: Centro = [22, 8]; Radio = 3.5
Area = 38.48
Volumen = 0.00
Cilindro: Centro = [10, 10]; Radio = 3.3; Altura = 10.0
Area = 275.77
Volumen = 342.12
Ejemplo creando y usando
Interfaces
• Utilizar la interface Figura
– Substituir la clase abstracta Figura
• Interface
– Su definición inicia con la palabra
interface
– Las clases implementan una interface
(es decir, sus métodos)
– Contiene métodos publicos y
abstractos
• Las clases (que implementan la interface)
deben implementar estos métodos
Ejemplo de Polimorfismo: Interface Figura
//Definicion de la Interface Figura
public Interface Figura extends Object {
// calcula el area de la figura
public double calcularArea() ;
// calcula el volumen de la figura
public double calcularVolumen() ;
// retorna el nombre de la figura
public abstract String getNombre();
} // fin de la interface Figura
Ejemplo de Polimorfismo: Interface Figura
Interface Figura.java
• Las clases que implementen la interface Figura
deben implementar sus métodos.
38
Ejemplo de Polimorfismo: Clase Punto
//Definicion de la clase Punto
public class Punto extends Object implements Figura {
protected int x, y;
// coordenadas del Punto
// constructor sin argumentos
public Punto()
{
setPunto( 0, 0 );
}
// constructor
public Punto( int coordenadaX, int coordenadaY )
{
setPunto( coordenadaX, coordenadaY );
}
// Asignar las coordenadas x y y del Punto
public void setPunto( int coordenadaX, int coordenadaY )
{
x = coordenadaX;
y = coordenadaY;
}
Ejemplo de Polimorfismo: Clase Punto
public int getX()
// recuperar coordenada x
{
return x;
}
public int getY()
// recuperar coordenada y
{
return y;
}
// convierte el Punto a su representacion en String
public String toString()
{
return "[" + x + ", " + y + "]";
}
// calcula el area de la figura
public double calcularArea()
{
return 0.0;
}
Ejemplo de Polimorfismo: Clase Punto
// calcula el volumen
public double calcularVolumen()
{
return 0.0;
}
// retorna el nombre de la figura
public String getNombre()
{
return "Punto";
}
} // fin de la clase Punto
Ejemplo de Polimorfismo: Clase Punto
Clase Punto.java
• Punto implementa la interface Figura
• Punto implementa los métodos especificados en la
interface Figura
42
Ejemplo de Polimorfismo: Clase Circulo
//Definicion de la clase Circulo
public class Circulo extends Punto { // hereda de Punto
protected double radio;
public Circulo() //constructor sin argumentos
{
// llamada implicita al constructor de la superclase aqui
setRadio( 0 );
}
// constructor
public Circulo( double radioCirculo, int coordenadaX, int coordenadaY )
{
// invoca el constructor de la superclase
super( coordenadaX, coordenadaY );
setRadio( radioCirculo );
}
// asignar radio del Circulo
public void setRadio( double radioCirculo )
{
radio = (radioCirculo >= 0 ? radioCirculo : 0 );
}
Ejemplo de Polimorfismo: Clase Circulo
// recuperar radio del Circulo
public double getRadio()
{
return radio;
}
public double calcularArea()
// calcula area del Circulo
{
return Math.PI * radius * radius;
}
// convierte el Circulo a su representacion en String
public String toString()
{
return "Centro = " + super.toString() +
"; Radio = " + radio;
}
public String getNombre()
// retorna nombre de la Figura
{
return "Circulo";
}
} // fin de la clase Circulo
Ejemplo de Polimorfismo: Clase Circulo
Clase Circulo.java
• Circulo hereda las variables y métodos de Punto,
incluyendo las implementaciones de la interface
Figura
• Sobreescribe el método toString
• Sobreescribe los métodos calcularArea y getNombre,
no así el método calcularVolumen
45
Ejemplo de Polimorfismo: Clase Cilindro
//Definicion de la clase Cilindro
public class Cilindro extends Circulo {
protected double altura; // altura del Cilindro
public Cilindro() //constructor sin argumentos
{
// llamada implicita al constructor de la superclase aqui
setAltura( 0 );
}
// constructor
public Cilindro( double alturaCilindro, double radioCilindro,
int coordenadaX, int coordenadaY)
{
// invoca el contrusctor de la superclase
super( radioCilindro, coordenadaX, coordenadaY );
setAltura( alturaCilindro );
}
Ejemplo de Polimorfismo: Clase Cilindro
// asignar altura del Cilindro
public void setAltura( double alturaCilindro )
{
altura = ( alturaCilindro >= 0 ? alturaCilindro : 0 );
// recupera altura del Cilindro
public double getAltura()
{
return altura;
}
// calcula el area del Cilindro ( area de la superficie )
public double calcularArea()
{
return 2 * super.calcularArea() + 2 * Math.PI * radio * altura;
}
// calcula el volumen del Cilindro
public double calcularVolumen()
{
return super.calcularArea() * altura;
}
Ejemplo de Polimorfismo: Clase Cilindro
// convierte el Cilindro a su representación en String
public String toString()
{
return super.toString() + "; Altura = " + altura;
}
// retorna el nombre de la Figura
public String getNombre()
{
return "Cilindro";
}
} // fin de clase Cilindro
Ejemplo de Polimorfismo: Clase Cilindro
Clase Cilindro.java
• Cilindro hereda las variables y métodos de Punto,
Circulo y las implementaciones de la interface Figura
• Sobreescribe el método toString
• Sobreescribe los métodos calcularArea,
calcularVolumen y getNombre
49
Ejemplo de Polimorfismo: Clase Prueba
// Clase Prueba.java
// Clase que prueba la jerarquia de Punto, Circulo y Cilindro,
// con la interface Figura
// Java core packages
import java.text.DecimalFormat;
// Java extension packages
import javax.swing.JOptionPane;
public class Prueba {
// Prueba la jerarquia de Punto con la interface Figura
public static void main( String args[] )
{
// crear Figuras
Punto punto = new Punto( 7, 11 );
Circulo circulo = new Circulo( 3.5, 22, 8 );
Cilindro cilindro = new Cilindro( 10, 3.3, 10, 10 );
// crear arreglo de Figuras
Figura arregloDeFiguras[] = new Figura[ 3 ];
Ejemplo de Polimorfismo: Clase Prueba
// arregloDeFiguras[0] apunta a un objeto de la subclase Punto
arregloDeFiguras[0] = punto;
// arregloDeFiguras[1] apunta a un objeto de la subclase Circulo
arregloDeFiguras[1] = circulo
// arregloDeFiguras[2] apunta a un objeto de la subclase Cilindro
arregloDeFiguras[2] = cilindro;
// Obtener de cada Figura su
//nombre y su representacion en String
String salida =
punto.getNombre() + ": " + punto.toString() + "\n" +
circulo.getNombre() + ": " + circulo.toString() + "\n" +
cilindro.getNombre() + ": " + cilindro.toString();
DecimalFormat precision2 = new DecimalFormat( "0.00" );
Ejemplo de Polimorfismo: Clase Prueba
// ciclo sobre el arregloDeFiguras y recupera el nombre
// area y volumen de cada Figura en el arregloDeFiguras
for ( int i = 0; i < arregloDeFiguras.length; i++ ) {
salida += "\n\n" + arregloDeFiguras [ i ].getNombre() +
": " + arregloDeFiguras [ i ].toString() +
"\nArea = " +
precision2.format(arregloDeFiguras[ i ].calcularArea() ) +
"\nVolumen = " +
precision2.format(arregloDeFiguras[ i ].calcularVolumen() );
}
JOptionPane.showMessageDialog( null, salida,
“Demostracion de Polimorfismo",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
} // fin de clase Prueba
Ejemplo de Polimorfismo: Clase Prueba
Clase Prueba.java
• Es idéntica a la clase utilizada en el ejemplo con la
clase abstracta Figura
• La salida es idéntica a la presentada en el ejemplo
con la clase abstracta Figura
53
Ejecución de Prueba.java
con interface Figura
Punto: [7, 11]
Circulo: Centro = [22, 8]; Radio = 3.5
Cilindro: Centro = [10, 10]; Radio = 3.3; Altura = 10.0
Punto: [7, 11]
Area = 0.00
Volumen = 0.00
Circulo: Centro = [22, 8]; Radio = 3.5
Area = 38.48
Volumen = 0.00
Cilindro: Centro = [10, 10]; Radio = 3.3; Altura = 10.0
Area = 275.77
Volumen = 342.12
Paquetes
• Como declarar una clase para que sea reutilizada
– Declararla como una clase pública
– Agregar una declaración del paquete (package) al
archivo del código fuente
• Normalmente se escribe en minusculas
• Debe ser la primera instrucción ejecutable en el archivo
• El nombre del paquete debería consistir del nombre de los
directorios en la estructura del paquete
– Ejemplo: banco.cuentas
– El nombre del paquete es parte de un nombre de clase válido
» Permite distinguir entre muchas clases con el mismo nombre y
que pertenecen a diferentes paquetes
» Previene conflictos de nombre (colisión de nombres)
– El nombre de la clase se escribe sin el nombre del paquete
55
Importar Clase Reutilizable
– Como importar la clase reutilizable en un programa
• Usando una declaración simple de import
– Importando una sola clase
– Ejemplo: import java.util.Random;
• Usando una declaración del paquete
– Importa todas las clases del paquete
– Ejemplo: import java.util.*;
– Error común de programación
• Usar la declaración de import “import java.*;” que
causaría un error de compilación.
• Se debe especificar el exacto nombre del paquete que
contiene la clase que se quiere importar.
56
Acceso del paquete
• Acceso del paquete
– Métodos y variables declaradas sin ningun modificador tienen
acceso de paquete
– Esto no afecta si el programa consiste de una sola clase
– Si tiene efectos si el programa contiene más de una clase en el
mismo paquete
• Los miembros con acceso de paquete pueden ser accedidos
directamente mediante una referencia apropiada al objeto, desde las
otras clases que pertenecen al mismo paquete
• Mantener dentro del mismo paquete las clases
dependientes para que soporten la funcionalidad del
paquete.
57
Ejemplo de Uso de Paquetes
• Codificar el siguiente diagrama de clases
58
Ejemplo de Uso de Paquetes
• En el método main, crear un objeto de tipo cuenta y
asignarle un propietario, realizarle un cargo y un abono
• La clase Cuenta define dos atributos de tipo colección:
una colección de Clientes y otra de Movimientos.
– Ya que la clase Movimiento se encuentra en el mismo
paquete, no será necesario importarla.
– La clase Cliente se encuentra en un paquete diferente al de la
clase Cuenta, por lo tanto será necesario importarla.
• La clase PruebaCuenta define el método main, en el
cual se crearán objetos de tipo Cuenta.
– Ya que la clase Cuenta se encuentra en otro paquete, será
necesario importarla a la clase PruebaCuenta.
59
Descargar