Está en la página 1de 10

Estructura y Elementos de una clase

Los programas en Java están formados por clases. Una clase en java, es una definición de
un módulo de un programa. A partir de una clase se pueden crear objetos. A cada uno de
estos objetos se dice que es una instancia de la clase.

En otras palabras, las clases son las plantillas para hacer objetos. Una clase sirve para
definir una serie de objetos con propiedades (atributos), comportamientos (operaciones o
métodos), y semántica comunes. Hay que pensar en una clase como un molde. A través
de las clases se obtienen los objetos en sí.

Un objeto es un elemento de programa que se caracteriza por:

 Atributos: son datos contenidos en el objeto, y que determinan su estado.


 Operaciones o métodos: son acciones con las que podemos solicitar información
del objeto, o modificarla.
 Están compuestas por secuencias de instrucciones que operan con los atributos.

Una clase en Java nos proporcionará los atributos y métodos necesarios que un objeto
necesitará para interactuar con otros, por lo que es importante saber estructurar
correctamente las clases.

Para definir una clase en Java se utiliza la palabra reservada class. Una sugerencia para
nombrar una clase es que se debe escribir todo en minúsculas a excepción de la primera
letra del nombre de la clase. Si para establecer el nombre de la clase se requieren varias
palabras se deben unir las letras de todas las palabras y la primera letra de cada palabra
debe estar en mayúscula.

Las clases incluyen por tanto atributos y métodos. Los atributos definen el estado de cada
objeto de esa clase y los métodos su comportamiento.

Los atributos debemos considerarlos como la zona más interna, oculta a los usuarios del
objeto. El acceso a esta zona se realizará a través de los métodos.

La sintaxis general para definir una clase en Java es:

[modificadorDeAcceso] class NombreClase [extends NombreSuperClase]


[implements NombreInterface1,
NombreInterface2, … ] {

//atributos de la clase (0 ó más atributos)


[modificadorDeAcceso] tipo nombreAtributo;

//métodos de la clase (0 ó más métodos)


[modificadorDeAcceso] tipoDevuelto nombreMetodo([lista
parámetros])

[throws listaExcepciones]{
// instrucciones del método
[return valor;]
}
}

Todo lo que aparece entre corchetes es opcional, por lo tanto la definición mínima de una
clase en Java es:

class NombreClase
{
}

Como hemos visto antes, el concepto de clase incluye la idea de ocultación de datos, que
básicamente consiste en que no se puede acceder a los datos directamente (zona privada),
sino que hay que hacerlo a través de los métodos de la clase.

De esta forma se consiguen dos objetivos importantes:

 Que el usuario no tenga acceso directo a la estructura interna de la clase, para no


poder generar código basado en la estructura de los datos.

 Si en un momento dado alteramos la estructura de la clase todo el código del usuario


no tendrá que ser retocado.

El modificador de acceso se utiliza para definir el nivel de ocultación o visibilidad de los


miembros de la clase (atributos y métodos) y de la propia clase.

Los modificadores de acceso ordenados de menor a mayor visibilidad son:

APLICABLE
EFECTO
A
Restringe la visibilidad al
interior de la clase. Un
atributo o método
private definido como private Atributos
solo puede ser usado en Métodos
el interior de su propia
clase.
Cuando no se especifica
un modificador, el
elemento adquiere el
acceso por defecto o
<Sin friendly. También se le Clases
modificador> conoce como acceso de Atributos
package (paquete). Solo Métodos
puede ser usado por las
clases dentro de su
mismo paquete.
Se emplea en la
herencia. El elemento
puede ser utilizado por
cualquier clase dentro
protected de su paquete y por Atributos
cualquier subclase Métodos
independientemente del
paquete donde se
encuentre.
Es el nivel máximo de
visibilidad. El elemento Clases
public Atributos
es visible desde
cualquier clase. Métodos

class: palabra reservada para crear una clase en Java.

NombreClase: nombre de la clase que se define. Si la clase es pública, el nombre del


archivo que la contiene debe coincidir con este nombre. Debe describir de forma apropiada
la entidad que se quiere representar. Los nombres deben empezar por mayúscula y si está
formado por varias palabras, la primera letra de cada palabra irá en mayúsculas.

extends NombreSuperclase: (opcional) extends es la palabra reservada para indicar la


herencia en Java. NombreSuperClase es la clase de la que hereda esta clase. Si no
aparece extends la clase hereda directamente de una clase general del sistema llamada
Object.

Object es la raíz de toda la jerarquía de clases en Java.

Es la superclase de las que heredan directa o indirectamente todas las clases Java.

Cuando una clase deriva de otra, se llama superclase a la clase base de la que deriva la
nueva clase (clase derivada o subclase) La clase derivada hereda todos los atributos y
métodos de su superclase.

implements NombreInterface1, NombreInterface2, ... : (opcional) implements es la palabra


reservada para indicar que la clase implementa el o los interfaces que se indican separados
por comas.

Un interface es un conjunto de constantes y declaraciones de métodos (lo que en C/C++


equivaldría al prototipo) no su implementación o cuerpo.

Si una clase implementa un interface está obligada a implementar todos los métodos de la
interface. Veremos los interface más adelante.

 En Java solo puede haber una clase pública por archivo de código fuente .java
 El nombre de la clase pública debe coincidir con el nombre del archivo fuente. Por
ejemplo, si el nombre de la clase pública es Persona el archivo será Persona.java
 En una aplicación habrá una clase principal que será la que contenga el método
main. Esta clase deberá haber sido declarada como pública
Junto al modificador de acceso pueden aparecer otros modificadores aplicables a clases,
atributos y métodos:

APLICABLE
MODIFICADOR EFECTO
A
Aplicado a una clase, la
declara como clase
abstracta. No se pueden
crear objetos de una clase
abstract abstracta. Solo pueden Clases
usarse como superclases. Métodos
Aplicado a un método, la
definición del método se
hace en las subclases.
Aplicado a una clase
significa que no se puede
extender (heredar), es decir
que no puede tener
subclases.
Aplicado a un método Clases
final significa que no puede ser Atributos
sobrescrito en las Métodos
subclases.
Aplicado a un atributo
significa que contiene un
valor constante que no se
puede modificar
Aplicado a un atributo
indica que es una variable
de clase. Esta variable es
única y compartida por
todos los objetos de la Atributos
static clase. Métodos
Aplicado a un método
indica que se puede
invocar sin crear ningún
objeto de su clase.
Un atributo volatile puede
ser modificado por métodos
volatile Atributos
no sincronizados en un
entorno multihilo.
Un atributo transient no es
transient parte del estado persistente Atributos
de las instancias.
Métodos para entornos
Sincronizad Métodos
multihilo.

Clase con el método main: clase principal, iniciadora o “programa principal”

Sabemos que los métodos en Java pueden tener cualquier nombre (excluido el de palabras
clave). Existe un nombre de método que está reservado en Java y otros lenguajes: el
método main. Este método es un método especial en tanto en cuanto es el que da lugar al
inicio del programa. Si comparamos un programa con un partido de fútbol, el método main
sería el responsable de poner el partido en juego.

Es importante tener claro que el método main no es el elemento principal en el


desarrollo del programa. El programa, de acuerdo con el paradigma de programación
orientada a objetos, se desarrolla mediante la interacción entre objetos, que en la figura
hemos representado como jugadores en el campo de fútbol. Por tanto, el cometido del
método main normalmente es iniciar el programa (poner el balón en juego) y permanecer
en un segundo plano mientras los objetos interactúan entre sí, controlando el desarrollo de
la situación como si del árbitro se tratara. El método main normalmente no será muy extenso
en cuanto a líneas de código respecto al resto del código (clases). Si esto ocurriera,
posiblemente sería indicador de que este método tiene más protagonismo del que debe, y
en nuestro símil el árbitro no debe ser protagonista del partido. En algunos ejemplos de
código que desarrollemos quizás la clase con el método main contenga gran parte del
código total, pero si esto es así será porque lo estamos utilizando con fines didácticos. En
programas profesionales esto no debe ocurrir.

El método main es indudablemente importante. Por eso y por motivos históricos en el


desarrollo de la programación muchas veces se alude a él (o a la clase donde se sitúa)
como clase principal o “programa” principal. Pero hay que tener bien claro que su carácter
principal se debe a que es quien inicia el desarrollo del programa, no a que sea quien
debe asumir el protagonismo del mismo.
Un error que cometen frecuentemente las personas que están aprendiendo Java es
suponer que el método main es la parte principal del programa, en el sentido de que debe
concentrar los procesos importantes y la mayor parte del código. Esta concepción errónea
se reflejaría en el siguiente esquema, donde las clases y objetos están al servicio del
método main (o de la clase donde se encuentre) que es quien centraliza las operaciones.
Este esquema es posible, pero no es el adecuado dentro del estilo de programación
orientada a objetos y no aprovecha todo el potencial de esta forma de programación.

En Java:

public static void main( String args[] )

es el punto de inicio de toda aplicación en Java. Los paréntesis después del identificador
main indican que este es un bloque de construcción del programa, al cual se le llama
método. Las declaraciones de clases en Java generalmente contienen uno o más métodos.
En una aplicación en Java, solo uno de esos métodos debe llamarse main de no ser así, la
JVM no ejecutara la aplicación. Los métodos pueden realizar tareas y devolver información
una vez que las hayan concluido. La palabra clave void indica que este método realizara
una tarea, pero no devolverá ningún tipo de información cuando complete su tarea.

Crear objetos

Declaración y creación de un objeto

Una clase es una plantilla que define los datos y los métodos del objeto. Un objeto es una
instancia de una clase. Se puede crear muchas instancias de una clase. La creación de una
instancia se conoce como instanciación.

Clase Circulo
Objeto 1 de circulo

Objeto 2 de circulo

Nota: una clase puede tener muchos objetos diferentes.

Como ya se ha comentado, una vez que se define una clase, el nombre de la clase se
convierte en nuevo tipo de dato y se utiliza tanto como declarar una variable de ese tipo,
como para crear objeto del mismo. La sintaxis para declarar un objeto es:

NombreClase nombreObjeto;

Ejemplo

Circulo miCirculo; //declara la variable mi circulo

La variable miCirculo es una instancia de la clase Círculo. La creación de un objeto de una


clase se llama creación de una instancia de la clase. Un objeto es similar a una variable
que tiene un tipo de clase. La creación de variables de un tipo de dato primitivo se realiza
simplemente declarándolas, esta operación crea la variable y le asigna espacio en memoria.

1. Creación de la clase.
2. Declarar los objetos.
3. Crear los objetos.

Una variable de tipo clase es una variable referencia, que puede contener la dirección en
memoria (o referencia) de un objeto de la clase o null para una referencia no valida. La
declaración de un objeto simplemente asocia el objeto con una clase, haciendo al objeto
una instancia de esa clase. La declaración no crear el objeto. Para crear realmente
miCirculo(objeto de la clase Circulo) se necesita utilizar el operador new con el objeto de
indicar a la computadora que cree un objeto miCirculo y asigne espacio de memoria para
ella. La sintaxis para crear un objeto es:

nombreObjeto = new NombreClase();

Ejemplo

La siguiente sentencia crea un objeto, miCirculo, y le asigna memoria:

miCirculo = new Circulo();

Declaración e Instanciación

Se puede combinar la declaración y la instanciación en una sola sentencia con la siguiente


sintaxis:

NombreClase nombreObjeto = new NombreClase();

Ejemplo

Creación e instanciación de miCirculo en una etapa:


Circulo miCirculo = new Circulo();

Constructores

Las clases pueden implementar un método especial llamado constructor. Un constructor es


un método que inicia un objeto inmediatamente después de su creación. De esta forma nos
evitamos el tener que iniciar las variables explícitamente para su iniciación.

El constructor tiene exactamente el mismo nombre de la clase que lo implementa; no puede


haber ningún otro método que comparta su nombre con el de su clase. Una vez definido,
se llamará automáticamente al constructor al crear un objeto de esa clase (al utilizar el
operador new).

El constructor no devuelve ningún tipo, ni siquiera void. Su misión es iniciar todo estado
interno de un objeto (sus atributos), haciendo que el objeto sea utilizable inmediatamente;
reservando memoria para sus atributos, iniciando sus valores...

Por ejemplo:

MiPunto() {

Inicia (-1, -1);

Este constructor denominado constructor por defecto, por no tener parámetros, establece
el valor -1 a las variables de instancia x e y de los objetos que construya.

El compilador, por defecto, llamará al constructor de la superclase Object() si no se


especifican parámetros en el constructor.

La lista de parámetros especificada después del nombre de una clase en una sentencia
new se utiliza para pasar parámetros al constructor.

Se llama al método constructor justo después de crear la instancia y antes de que new
devuelva el control al punto de la llamada.

Así, cuando ejecutamos el siguiente programa:

MiPunto p1 = new MiPunto (10,20);

System.out.println("p1. - x = " + p1.x + "y = " +p1.y);

Se muestra en pantalla:

P1. - x = 10 y = 20

Para crear un programa Java que contenga ese código, se debe de crear una clase que
contenga un método main(). El intérprete java se ejecutará el método main de la clase que
se le indique como parámetro.
El operador new

El operador new crea una instancia de una clase (objetos) y devuelve una referencia a ese
objeto. Por ejemplo:

MiPunto p2 = new MiPunto(2,3);

Este es un ejemplo de la creación de una instancia de MiPunto, que es controlador por la


referencia a objeto p2.

Hay una distinción crítica entre la forma de manipular los tipos simples y las clases en Java:
Las referencias a objetos realmente no contienen a los objetos a los que referencian. De
esta forma se pueden crear múltiples referencias al mismo objeto, como por ejemplo:

MiPunto p3 =p2;

Aunque tan sólo se creó un objeto MiPunto, hay dos variables (p2 y p3) que lo referencian.
Cualquier cambio realizado en el objeto referenciado por p2 afectará al objeto referenciado
por p3. La asignación de p2 a p3 no reserva memoria ni modifica el objeto.

De hecho, las asignaciones posteriores de p2 simplemente desengancharán p2 del objeto,


sin afectarlo:

p2 = null; // p3 todavía apunta al objeto creado con new

Aunque se haya asignado null a p2, p3 todavía apunta al objeto creado por el operador
new.

Cuando ya no haya ninguna variable que haga referencia a un objeto, Java reclama
automáticamente la memoria utilizada por ese objeto, a lo que se denomina recogida de
basura.

Cuando se realiza una instancia de una clase (mediante new) se reserva en la memoria un
espacio para un conjunto de datos como el que definen los atributos de la clase que se
indica en la instanciación. A este conjunto de variables se le denomina variables de
instancia. La potencia de las variables de instancia es que se obtiene un conjunto distinto
de ellas cada vez que se crea un objeto nuevo. Es importante el comprender que cada
objeto tiene su propia copia de las variables de instancia de su clase, por lo que los cambios
sobre las variables de instancia de un objeto no tienen efecto sobre las variables de
instancia de otro.

El siguiente programa crea dos objetos MiPunto y establece los valores de x e y de cada
uno de ellos de manera independiente para mostrar que están realmente separados.

MiPuntop4 = new MiPunto (10,20);

MiPunto p5 = new MiPunto (42,99);

System.out.println("p4. - x = " + p4.x + " y = " +p4.y);


System.out.println("p5. - x = " + p5.x + " y = " +p5.y);

Este es el aspecto de salida cuando los ejecutamos

p4. - x = 10 y = 20

p5. - x = 42 y =

También podría gustarte