Conceptos Clave de Programación en Java: Atributos, Clases, Interfaces y Control de Acceso

Atributos de clase o estáticos

Como ejemplos de atributos estáticos podemos mencionar aquellos que define Java en su cuerpo de clases:

System.out: cada vez que deseamos mostrar en consola un mensaje en particular lo hacemos invocando al método “println()” del objeto “out” que se encuentra en la clase “System” del paquete “java.lang”

La clase “Math” del paquete “java.lang” ofrece una amplia variedad de atributos estáticos. Podemos pensar que el valor del número “Pi” o del número de “Euler” no dependen de alguna instancia específica.

La clase java.lang.Object

En el Lenguaje de Programación Java, todas las clases, tanto las creadas por el programador como las que pertenecen a la API de Java, tienen una superclase en común: la clase “java.lang.Object

clone(): método utilizado para crear una copia del presente objeto.

 equals(Object obj): método utilizado para evaluar si dos objetos son conceptualmente iguales. finalize(): método utilizado por el Garbage Collector cuando no hay más variables que referencian al objeto.

 getClass(): método utilizado para obtener la clase a la que pertenece el objeto.

 hashCode(): método utilizado para obtener un código hash del objeto.

 toString(): este método devuelve un objeto String que contiene una representación en cadena de caracteres del objeto. Los métodos notify(),notifyAll() y wait(), son utilizados para la manipulación de hilos de ejecución

El método toString() es muy utilizado en el desarrollo de aplicaciones ya que es utilizado con el propósito de obtener una cadena de caracteres como una representación significativa del objeto.

Clase final

final class NombreDeLaClase

Un ejemplo de una clase final es la clase String del paquete java.lang. Su declaración figura de la siguiente forma:

public final class String

Interface

Supongamos que estamos manipulando una aplicación en la cual se define un listado que puede almacenar objetos de cualquier tipo. El objetivo es realizar comparaciones entre los objetos que se encuentran contenidos en el listado. Para definir el listado se podría utilizar un vector de referencias a Object de la siguiente forma:

Object listadoDeObjetos[];

Nuestro problema radica en cómo podemos comparar los objetos del listado. Podríamos pensar que todo objeto contenido en el listado debería contener un método que permita la comparación con otro objeto de su mismo tipo. Ese método podría llamarse “compareTo(x)” y sería invocado de la siguiente manera:

objeto1.compareTo(objeto2);

El objeto “objeto1” es comparado con “objeto2” y los posibles resultados son los siguientes:

  • = 0 : los objetos que se compararon son iguales.
  • > 1 : el objeto invocante (objeto1) es mayor al parámetro (objeto2).
  • < 1 : el objeto invocante (objeto1) es menor al parámetro.


Para solucionar este problema vamos a aplicar el concepto de interface. Una interface es básicamente una clase abstracta que provee solamente métodos abstractos y constantes.

public interface Comparable

{

 int compareTo(Object x);

 }

En el caso de la interface Comparable, no es necesario que la definamos. Esta interface ya se encuentra definida en el cuerpo de clases de Java en el paquete java.lang.

Las clases no heredan interfaces, las implementan. Para indicar que una clase implemente una interface, se utiliza la palabra clave “implements

public class A implements Comparable

public class A implements Comparable

 { public int compareTo(Object x)

 { // implementación del método

 }

En la implementación de interfaces una clase puede implementar una o varias interfaces

public class B extends A implements I1, I2

Para que un objeto tenga un comportamiento Comparable, la clase a la que pertenece el objeto debe implementar la interface Comparable y definir el método “compareTo()”. De esta forma, podremos agregar en el listado de objetos cualquier objeto Comparable y para realizar futuras comparaciones entre estos objetos se debe invocar el método “compareTo()”.

El vector estará compuesto por referencias polifórmicas de la interface Comparable. Cuando invoquemos al método “compareTo()” se ejecutará el método definido en la clase a la que apunta la referencia.

Una interface solamente puede tener métodos abstractos.

Si una clase abstracta implementa una interface, no es necesario que la clase abstracta implemente los métodos definidos en la interface, pero la primera clase concreta que extienda de la clase abstracta deberá implementar los métodos abstractos de la interface.

 En una interface además de métodos se pueden definir constantes (atributos estáticos y finales).

Una interface puede extender de una o varias interfaces y solamente interfaces (no clases).

 Los métodos definidos en una interface son implícitamente públicos y abstractos.

 Los atributos definidos en una interface son siempre públicos, estáticos y finales.


3.4- Constructores

Los “constructores” son métodos especiales que se definen en una clase y son utilizados para la creación e inicialización de un objeto.

Su nombre es el mismo al de la clase que lo implementa. ü No retorna ningún valor. ü Puede hacer uso de parámetros. ü Se pueden definir varios métodos constructores en una clase. ü Una clase puede no tener definido en forma explícita un método constructor. ü Siempre toda clase contiene al menos un constructor (definido implícitamente o explícitamente

3.6- Métodos de clase

Un método de clase es aquel que puede ser utilizado sin depender de una instancia en particular y puede ser utilizado de manera global. Es un método que no depende del estado de un objeto.

public static void main(String[] args)

 { Figura.metodoEstatico(); } }

Una consideración a tener en cuenta es que los métodos estáticos no pueden hacer referencia a atributos o a otros métodos que no sean estáticos

Java dispone de un amplio contenido de métodos estáticos en las clases de su API. Por ejemplo, la clase Math del paquete java.lang ofrece una amplia variedad de métodos estáticos. Si quisiéramos obtener la raíz cuadrada de un número podemos hacerlo llamando al método estático sqrt() de la clase Math:

3.7- Control de acceso a miembros

3.7.1- Paquetes

  Un grupo de clases se encarga de la interfaz visual con el usuario.

  Un grupo de clases se encarga de la implementación de la lógica del programa.

 Un grupo de clases se encarga de representar las entidades del dominio del programa

Supongamos que desde una clase cualquiera deseamos referenciar a otra clase definida en otro paquete. Para poner un ejemplo más concreto, supongamos que desde la clase “ClaseInterfaz” se desea crear una variable de tipo “ClaseEntidad”

package interfaz;

 public class ClaseInterfaz

{ entidad.ClaseEntidad nombreEntidad;

}

Otra forma de referenciar a la clase “ClaseEntidad” es utilizando la sentencia “import” a continuación de la declaración “package”

package interfaz;

 import entidad.ClaseEntidad;

 public class ClaseInterfaz

 { ClaseEntidad nombreEntidad; }

Si deseamos importar todas las clases definidas en un paquete utilizando una única sentencia “import” se puede utilizar el carácter *.

package interfaz;

import entidad.*;

public class ClaseInterfaz

 { ClaseEntidad nombreEntidad;


A continuación describimos algunos de los paquetes principales de la API de Java:

– java.applet: paquete relacionado con la manipulación de applets.

 – java.awt: paquete relacionado con el manejo de interfaces gráficas de usuario. – java.io: paquete relacionado con la entrada / salida de flujo de datos.

 – java.lang: este paquete contiene las clases básicas y fundamentales del lenguaje Java. Las clases pertenecientes a este paquete son importadas sin la necesidad utilizar la sentencia import.

 – java.net: paquete relacionado con la manipulación de datos que se transmiten en la red.

 – java.util: paquete que provee un conjunto de clases utilitarias para el programador.

 – java.swing: paquete de clases que mejora las interfaces gráficas definidas en el paquete java.awt

3.7.2- Modificadores de acceso

Los modificadores de acceso son palabras claves utilizadas en la declaración de un atributo o método para indicar su visibilidad con respecto al resto de las clases.

Existen cuatro modificadores de acceso para los miembros de una clase:

Ø Público Ø Protegido Ø Por defecto Ø Privado

Público

Cuando los miembros de una clase son declarados “públicos”, entonces cualquier otra clase sin importar el paquete al que pertenezca tiene visibilidad sobre los miembros de la clase.

package paqueteA;

 import paqueteB.B;

 public class A

{ public void metodoA()

{ B b = new B(); b.metodoB(); } }

package paqueteB;

public class B

{ public void metodoB()

 { }

 }

Protegido

Si el miembro de una clase es declarado como “protegido” (se usa la palabra clave “protected”), entonces dicho miembro es visible por todas las clases que pertenecen al mismo paquete de la clase que contiene el método y también es visible por cualquier subclase sin importar en qué paquete se encuentre por medio del mecanismo de herencia.

package paqueteB;

public class B

 { protected void metodoB() { } }

package paqueteB; public class C

 {

public void metodoC()

 { B b = new B(); b.metodoB();

 } }


Por defecto

Cuando un miembro tiene el modificador de acceso “por defecto”, dicho miembro es visible por todas las clases que se encuentran en el mismo paquete

package paqueteB;

 public class B

{

void metodoB()

{

 }

}

package paqueteB;

public class C

 {

public void metodoC()

 {

 B b = new B(); b.metodoB();

 }

 }

Privado

Si el miembro de una clase es “privado” (private), dicho miembro no es visible para ninguna otra clase distinta a la clase a la que pertenece el método.

package paqueteB;

public class B

{ public void metodoB1()

 {

metodoB2();

}

private void metodoB2()

{ }

3.7.3- Encapsulamiento

El objetivo del encapsulamiento es separar los detalles internos de un objeto de su interfaz.

Los modificadores de acceso nos dan la oportunidad de separar la implementación de un objeto de su interfaz

Cuando se define una clase se debe tener en cuenta:

Ø La parte pública que será accesible por otros objetos

. Ø La parte privada que será únicamente accesible por los métodos propios de la clase.

3.8- Método main

Toda aplicación programada en Java debe contener un método denominado “main” con la siguiente estructura:

public static void main(String[] args)

La declaración de este método contiene los siguientes modificadores:

  public: este modificador de acceso indica que el método “main()” puede ser invocado por cualquier objeto desde cualquier clase.

 – static: el método “main()” es un método estático o de clase.

 – void: el método “main()” no devuelve ningún valor.

Cuando una aplicación Java es ejecutada, la Máquina Virtual de Java lo hace invocando al método “main()” de alguna clase en particular. Puede haber más de una clase que defina el método “main()”. En ese caso podríamos decir que la aplicación tiene varios puntos de ejecución.

. Si intentáramos ejecutar una aplicación desde una clase que no contiene un método “main()”, el intérprete de Java nos dará el siguiente error:

Exception in thread "main" java.lang.NoSuchMethodError: main

Utilizamos cookies propias y de terceros para ofrecer contenidos y publicidad de interés. Al continuar con la navegación entendemos que acepta el uso de cookies. Aceptar Más información