Conviértete en un emprendedor,profesional del conocimiento en la programación

sábado, 7 de enero de 2012

ENCAPSULAMIENTO

Compartir con:


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