Clases y objetos II

Este artículo es la continuación del artículo Clases y objetos I. (Ver Clases y objetos I) 

Visibilidad de los miembros de la clase

Un principio fundamental en programación orientada a objetos es la ocultación de la información, que significa que no se puede acceder a determinados datos del interior de una clase por métodos externos a la clase. El mecanismo principal para ocultar datos es ponerlos en una clase y hacerlos privados. A los datos o métodos privados solo se puede acceder desde dentro de la clase. Por el contrario, los datos o métodos públicos son accesibles desde el exterior de la clase.

Para controlar el acceso a los miembros de la clase se utilizan tres diferentes especificadores de acceso: public, private y protected. Cada miembro de la clase está precedido del especificador de acceso que le corresponde.

Formato

       class NombreClase{
                private declaración miembro privado;                   // miembros privados
                protected declaración miembro protegido;        // miembros protegidos
                public declaración miembro público;                      // miembros públicos
       }

El especificador public define miembros públicos, que son aquellos a los que se puede acceder por cualquier método desde fuera de la clase. A los miembros que siguen al especificador private solo se puede acceder por métodos miembro de la misma clase. A los miembros que siguen al especificador protected se puede acceder por métodos miembro de la misma clase o de clases derivadas, así como por métodos de otras clases que se encuentran en el mismo paquete. Los especificadores public, protected y private pueden aparecer en cualquier orden. Si no se especifica acceso (acceso en forma predeterminada) a un miembro de una clase, a este se puede acceder desde los métodos de la clase y desde cualquier método de las clases del paquete en que se encuentra.

Secciones pública y privada de una clase.

Ejemplo

Declaración de la clase Foto y Marco con miembros declarados con distinta visibilidad. Ambas clases forman parte del paquete soporte.

       package soporte;

       class Foto {
                private int nt;
                private char opd;
                String q;

                public Foto(String r) {             //constructor
                            nt = 0;
                            opd = ‘S’;
                            q = new String(r);
                }
                public double mtd() {. . .}
       }

       class Marco {
                private double p;
                String t;

                public Marco() {. . .}
                public void poner() {
                            Foto u = new Foto(«Betty»);
                            p = u.mtd();
                            t = «**» + u.q + «**»;
                }
       }

Aunque las especificaciones públicas, privadas y protegidas pueden aparecer en cualquier orden, en Java los programadores suelen seguir ciertas reglas en el diseño que citamos a continuación, y que usted puede elegir la que considere más eficiente.

  1. Poner los miembros privados primero, debido a que contiene los atributos (datos).
  2. Se ponen los miembros públicos primero debido a que los métodos y los constructores son la interfaz del usuario de la clase.

En realidad, tal vez el uso más importante de los especificadores de acceso es implementar la ocultación de la información. El principio de ocultación de la información indica que toda interacción con un objeto se debe restringir a utilizar una interfaz bien definida que permita que los detalles de implementación de los objetos sean ignorados. Por consiguiente, los datos y métodos públicos forman la interfaz externa del objeto, mientras que los elementos privados son los aspectos internos del objeto que no necesitan ser accesibles para usar el objeto. Los elementos de una clase sin especificador y los protected tienen las mismas propiedades que los públicos respecto a las clases del paquete.

 A recordar

El principio de encapsulamiento significa que las estructuras de datos internas utilizadas en la implementación de una clase no pueden ser accesibles directamente al usuario de la clase.

Métodos de una clase

Los métodos en Java siempre son miembros de clases, no hay métodos o funciones fuera de las clases. La implementación de los métodos se incluye dentro del cuerpo de la clase. La siguiente figura muestra la declaración completa de una clase.

Definición típica de una clase.

Ejemplo

La clase Racional define el numerador y denominador característico de un número racional. Por cada dato se proporciona un método miembro que devuelve su valor y un método que asigna numerador y denominador. Tiene un constructor que inicializa un objeto a 0/1.

       class Racional {
                private int numerador;
                private int denominador;

                public Racional() {
                            numerador = 0;
                            denominador = 1;
                }
                public int leerNumerador() {return numerador;}
                public int leerDenominador() {return denominador;}
                public void fijar(int n, int d) {
                             numerador = n;
                             denominador = d;
                }
       }

Implementación de las clases

El código fuente de la definición de una clase, con todos sus métodos y variables instancia se almacenan en archivos de texto con extensión .java y el nombre de la clase, por ejemplo Racional.java. Normalmente, se sitúa la implementación de cada clase en un archivo independiente.

Las clases pueden proceder de diferentes fuentes:

  • Se pueden declarar e implementar sus propias clases. El código fuente siempre estará disponible, pueden estar organizadas por paquetes.
  • Se pueden utilizar clases que hayan sido escritas por otras personas o incluso que se han comprado. En este caso, se puede disponer del código fuente o estar limitado a utilizar el bytecode de la implementación. Será necesario disponer del paquete donde se encuentran.
  • Se puede utilizar clases de los diversos packages que acompañan a su software de desarrollo Java.

Clases públicas

La declaración de una clase puede incluir el modificador public como prefijo en la cabecera de la clase. Por ejemplo:

       public class Examen{
                   // miembros de la clase
       } 

La clase Examen puede ser utilizada por las clases que se encuentran en su mismo archivo (package), o por clases de cualquier otro paquete o archivo. Habitualmente las clases se definen como public, a no ser que se quiera restringir su uso a las clases del paquete. Una clase declarada sin el prefijo public establece una restricción importante, y es que solo podrá ser utilizada por las clases definidas en el mismo paquete.

Advertencia

El especificador de acceso public es el único que se puede especificar en la cabecera de una clase.