ENCAPSULAMIENTO
Clases administradoras con arreglos. Palabra
reservada final
Una
clase administradora es aquella que tiene todo lo necesario para administrar
información de cualquier tipo, considerando los atributos y funcionalidad
necesarios para ello.
Una
clase administradora con arreglos utiliza como atributos: el arreglo, el
contador, el tamaño.
En
el constructor de la clase administradora se dimensiona el arreglo y se
inicializa el contador.
Parte
de su funcionalidad está orientada al mantenimiento de información que
involucra los siguientes procesos: agregar, eliminar, buscar, reemplazar,
obtener.
Los
procesos adicionales que formen parte de su funcionalidad dependerá del alcance
que quieran darle a la clase, por ejemplo sumar todos los valores, encontrar el
promedio, el mayor valor, el menor valor, etc.
Ejemplo 1:
Diseñe una clase de nombre ArregloDeEnteros con los
siguientes atributos privados: arreglo de enteros, contador de enteros en el
arreglo (entero), tamaño (entero) de valor fijo 30.
public class ArregloDeEnteros {
// Atributos privados
private int a[]; // arreglo de enteros
private int n; // número de enteros en el arreglo
private final int tamaño = 30; // tamaño de valor fijo
// Constructor
public ArregloDeEnteros(){
a = new int[tamaño];
n = 0; } }
Considere los métodos
get/set de todos los atributos, excepto del atributo tamaño que sólo debe tener
método get pero no set porque es un valor fijo. Luego, escriba los métodos de
administración del arreglo.
public class ArregloDeEnteros {
// atributos privados
private int a[]; // arreglo de enteros
private int n; // número de enteros en
el arreglo
private final int tamaño = 30; //
tamaño de valor fijo
// constructor
public ArregloDeEnteros(){
a = new int[tamaño];
n = 0; }
// métodos get-set
public int[] getA() {
return a; }
public void setA(int[] a) {
this.a = a; }
public int getN() {
return n; }
public void setN(int n) {
this.n = n; }
public int getTamaño() {
return tamaño; }
// métodos de administración
public void agrega(int num){
if(n<tamaño){
a[n] = num;
n++; } }
public void elimina(int p){
for(int i=p ; i<n-1; i++)
a[i] = a[i+1];
n--; }
public int busca(int num){
for(int i=0; i<n; i++){
if(a[i]==num)
return i; }
return -1; }
public
int getNum(int i){
return a[i]; }
public
void setNum(int num, int p){
a[p] = num; }
public
int sumaTodo(){
int suma=0;
for(int i=0; i<n; i++){
suma += a[i]; }
return suma; }
public
double promedio(){
return sumaTodo()/n; }
public
int elMayor(){
int m=a[0];
for(int i=0; i<n; i++){
if(a[i]>m) m=a[i]; }
return m; }
public
int elMenor(){
int m=a[0];
for(int i=0; i<n; i++){
if(a[i]<m) m=a[i]; }
return m; } }
En la clase gestora PanelPrincipal
declare como atributo un objeto de la clase ArregloDeEnteros y en el
constructor cree éste objeto para que pueda ser utilizado en la programación de
todos los botones.
Cada vez que hace clic en el botón Nuevo debe
verificar que el número ingresado no exista para agregarlo al arreglo y muestre
una lista del contenido del arreglo. Cada vez que se hace clic en el botón Lista
debe mostrar la información del arreglo. Cada vez que hace clic en el botón
Elimina debe verificar que el número ingresado exista para eliminarlo
del arreglo y muestre una lista del contenido del arreglo. Cada vez que se hace
clic en el botón Reporte debe mostrar los valores menor, promedio, mayor
encontrados en el arreglo. Cada vez que se haga clic en el botón Reinicia debe
hacer que el arreglo esté vacío. Vamos al diseño:
PanelPrincipal con
distribución BorderLayout.
En el norte colocamos otro panel
(jPanel1) con distribución BoxLayout donde colocamos la etiqueta
y los botones.
En el centro colocamos un área de
texto con su propiedad editable desmarcada.
Coloque nombres de objetos
adecuados.
Vamos a la ficha Source para
escribir lo que está en negrita:
public class PanelPrincipal extends javax.swing.JPanel
{
private ArregloDeEnteros ae;
public PanelPrincipal() {
initComponents();
ae = new ArregloDeEnteros(); }
Regresamos al diseño y hacemos doble clic en el botón Nuevo
para programar su acción:
Vamos
a programar la acción del botón Nuevo:
private void
btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
int
num = leeNumero();
int p=ae.busca(num);
if(p!=-1)
Mensaje ("Error: El número ingresado ya
existe");
else{
ae.agrega(num);
lista();
} }
public int leeNumero(){
return
Integer.parseInt(txtNumero.getText()); }
public void mensaje(String
s){
JOptionPane.showMessageDialog(this,
s); }
public void lista(){
borra();
for(int i=0; i<ae.getN();
i++){
imprime("a["+i+"]\t:"+ae.getNum(i)); } }
public void borra(){
txtNumero.setText("");
txtSalida.setText("");
txtNumero.requestFocus(); }
public void imprime(String
s){
txtSalida.append(s+"\n");
}
Observe que en la programación del
botón Nuevo se evita la repetición del número ingresado.
Vamos a programar la acción del botón Lista:
private void btnListaActionPerformed(java.awt.event.ActionEvent evt) {
lista();
}
Vamos a programar la acción del botón Elimina:
private void btnEliminaActionPerformed(java.awt.event.ActionEvent evt) {
int
num = leeNumero();
int p=ae.busca(num);
if(p==-1)
Mensaje ("Error: El número ingresado NO
existe");
else{
ae.elimina(p);
lista(); } }
Vamos a programar la acción del botón Reporte:
private void btnReporteActionPerformed(java.awt.event.ActionEvent evt) {
lista();
imprime("El menor valor es\t:
"+ae.elMenor());
imprime("El valor promedio
es\t: "+ae.promedio());
imprime("El mayor valor es\t:
"+ae.elMayor()); }
Vamos a programar la acción del botón Reinicia:
private void btnReiniciaActionPerformed(java.awt.event.ActionEvent evt)
{
ae.setN(0);
Mensaje (“El arreglo está vacío.”); }
Desarrolle la clase de aplicación de
nombre Principal en un JFrame. Coloque distribución BorderLayout,
vaya a la ficha Source y coloque el PanelPrincipal escribiendo en el
constructor lo siguiente:
add(new PanelPrincipal());
setSize(600,250);
Ejecute su
aplicación.
0 comentarios:
Publicar un comentario