Está en la página 1de 12

Vemos lo que son las clases, cmo crearlas y algunos detalles adicionales de su

uso.
Por Victorino Blanco Gonzlez
En si, y como he comentado anteriormente en el Manual de Java, las clases
marcan la estructura bsica de un programa tanto en Java como en la
programacin orientada a objetos en general.

Una clase es el producto de enfocar la programacin a los datos ms que a las


funciones. Por tanto una clase es una coleccin de datos y adems para operar
con ellos una serie de funciones propias de la clase. Veamos por ejemplo la
clase "Fichas" definida anteriormente, su nico dato es "el color" y la nica
operacin que permite es saber el color de la ficha en cualquier momento. Eso
permite un acceso restrictivo a los datos segn la funcin de los mismos. En
este caso la clase es as basndose en la vida misma: No creo que nadie haya
cambiado el color de una ficha jugando a las "cuatro en raya" y en caso
positivo no tendra muy buenas intenciones al hacerlo.

Adems de este mtodo bsico de proteccin de los datos, Java permite


algunos ms que vemos ahora mismo.

Cuando declaramos una clase lo primero que ponemos es la cabecera:

public class Fichas { (cuerpo de la clase) }

La primera palabra nos proporciona la posibilidad de dar permisos de accesos a


nuestra clase, los permisos son los siguientes:
"Public": Una clase "public" es accesible desde cualquier otra clase, no
obstante para que esto suceda debe ser primero accesible el "package" de esa
clase "public". Para que un "package" sea accesible debe de estar en el
directorio que seala la variable "CLASSPATH" que definimos al instalar nuestro
entorno Java y, claro est, tener permiso de lectura en ese directorio.
"Package": Usar este identificador en la cabecera de la clase es opcional, pues
es la opcin por defecto en java, es decir, si escribimos:
class Fichas {(Cuerpo de la clase)}

Es lo mismo que si escribimos:

package class Fichas {(Cuerpo de la clase)}

Las clases "package" ( que podemos entender como las que no son "public" )
son accesibles solo desde su propio package.

Esto es relativo a la accesibilidad de las clases. Ms conceptos relativos a la


accesibilidad hacen referencia a las variables internas de una clase que ya
comentamos en un captulo anterior, y a sus mtodos.

En cuanto al nombre de la clase consideraremos varias cosas. Debe de


obedecer al convenio de nombres de Java y coincidir con el nombre del fichero
".java" en el que se guardar la clase.

Lo normal es que cada clase vaya incluida en un nico fichero pero claro est,
nos puede interesar por algn motivo meter varias clases en un nico fichero.
En este caso solo puede haber una clase public que es la que dar el nombre a
dicho fichero. En caso de que no hubiese una clase public el compilador
entender que la clase "principal" de ese fichero es la que concuerda con el
nombre del mismo, por lo que evidentemente dos clases con un mismo nombre
no son permitidas en un mismo fichero.

Por ltimo para explicar la estructura de una clase explicar los elementos
habituales en la definicin de su cuerpo.

Primero se suelen declarar, al menos, las variables internas de esa clase y


posteriormente se definen los constructores y los mtodos que dispondr la
clase. Lo entenderemos mejor ms adelante

En la definicin de constructores y mtodos tenemos que tener en cuenta un


nuevo concepto de la programacin orientada a objetos. La sobrecarga. La
sobrecarga consiste en poder tener varios mtodos o constructores con el
mismo nombre dentro de una misma clase y que no hagan las mismas cosas.

Esto se consigue de una manera muy sencilla, se diferencian entre ellos


mediante el nmero y tipo de parmetros que reciben. Veamos un ejemplo:

/*tenemos dos mtodos que pueden por ejemplo obtener el rea de una figura
geomtrica en concreto, podran ser:*/

float obtenerAreaCirculo(Circulo ci){


/* ... */
}

float obtenerAreaCuadrado(Cuadrado cu){


/* ... */
}

/*en Java esto se puede abreviar teniendo dos mtodos sobrecargados, por
ejemplo: */

float obtenerArea(Circulo ci){


/* ... */
}

float obtenerArea(Cuadrado cu){


/* ... */
}

/*A la hora de ejecutar el mtodo obtenerArea se utilizar el que corresponda al


parmetro que se le pase por cabecera*/

ESTRUCTURA BASICA DE UNA CLASE


La estructura de una clase est compuesta por conjuntos de objetos que
comparten cierta similitud entre ellos es decir comparten caractersticas
comunes.
Una clase es un tipo de datos con una serie de ciertas caractersticas llamadas
a atributos y con una buena definicin acerca de los mtodos, una clase se
define por la palabra reservada.

La estructura de clases en el programa java deben tener una organizacin con


el siguiente orden
Package: declara la estructura del paquete en la que est en la clase.
Import: Las clases que estn en la librera java.lang son importadas
automticamente.
Class: Asignamos el nombre a una clase.

La sintaxis en java especifica como podemos escribir estos elementos

Comentarios
Identificadores
Palabras claves
Expresiones y operadores
Variables y tipos de datos
Sentencias
Los cometarios son asignados en el programa cuando se est implementando
el cdigo se agrega comentarios para saber cul es la funcin de ese programa
existen tres tipo de comentarios
Comentarios de varias lneas que son:

/*
*/
Comentarios de una sola lnea se utiliza el doble diagonal:
//

Los identificadores es una secuencia de caracteres comenzando por una letra y


conteniendo letras y nmeros. Estos son algunos de los identificadores que se
pueden tomar en cuanta en el cual su escritura es la correcta:
MAX_NUM
var2
_varx
Tambin encontramos otros mtodos de sintaxis como:
Get= su funcin es leer un valor
set= para escribir un valor
Aqu tenemos un pequeo ejemplo de como estos mtodos funciona
Public String get nombre()
Return nombre;
{
Public void set nombre
{
Nombre=nombre;

Mi opinin personal es que todos estos aspectos son importantes tanto como la
escritura como en los mtodos ya que si llegamos estar mal en el cdigo por
razn lgica este programa no correr y si no tenemos bien definido la
escritura no encontraremos con muchos errores en el momento de estar
realizando cdigo a si tambin con la orientacin de objetos (POO) teniendo en
cuenta sus reglas.

Estructura bsica de una clase en Java


/**
* Estructura bsica de una clase en Java
*/
class NombreDeClase {
//Declaracin de los atributos de la clase
tipoDato atributo1;
tipoDato atributo2;
tipoDato atributo3;
//Declaracin de los mtodos de la clase
mtodo1(argumentos) {
//Declaracin de las variables propias del mtodo1
//Sentencias de ejecucin del mtodo
}
mtodo2(argumentos) {
//Declaracin de las variables propias del mtodo2
//Sentencias de ejecucin del mtodo
}
}

Declaracin de atributos
Los atributos son las caractersticas propias de cada clase. Cada objeto creado de
una determinada clase tendr una serie de valores asignados en dichos atributos, por
tanto, permiten guardar informacin de cada objeto. Se declaran de la misma manera
que las variables.
Ejemplo para la clase Alumno:
01.class Alumno {
02.String nombre;
03.String apellidos;
04.int aoDeNacimiento;
05.int nmeroPersonal;
06.String grupo;
07.String turnoHorario = "Maana";

08.
09.//Declaracin de los mtodos
10....
11.}

Como se puede observar en el atributo turnoHorario, se puede dar un valor inicial


en la declaracin de los atributos.

Declaracin de mtodos
Los mtodos de una clase definen el comportamiento y los valores de los atributos de
un determinado objeto de esa clase.
El formato bsico de declaracin de los mtodos es:
tipoDatoRetorno nombreMtodo(tipoDato parmetro1, tipoDato parmetro2, ...)
{
//Declaracin de variables propias del mtodo
//Sentencias con las acciones que debe realizar el mtodo
return valorQueDebeRetornar;
}

Los mtodos pueden retornar un valor tras ejecutar las sentencias que contiene, o
bien no retornar nada. Dicho valor de retorno es entregado a la lnea de cdigo que
realiza la ejecucin del mtodo, como se ver ms adelante.
Si va a retornar un valor, se debe especificar el tipo de dato en la declaracin delante
del nombre. El valor que vaya a ser devuelto se indica con la sentencia return, y
debe ser del mismo tipo que el indicado en la declaracin del mtodo. Por ejemplo,
para retornar unString:
1.String nombreMtodo() {
2.//Sentencias del mtodo
3.return valorQueDebeRetornar;
4.}

Hay que tener en cuenta que la sentencia return termina la ejecucin del mtodo,
por lo que debe escribirse en el lugar donde no deba ejecutarse posteriormente
ninguna otra sentencia.
Siguiendo el ejemplo de la clase Alumno, se puede declarar un
mtodo dameGrupo que obtenga el grupo en el que se encuentra un determinado
alumno:
1.String dameGrupo() {
2.return grupo;
3.}

El valor retornado puede ser un atributo de la misma clase o cualquier otro dato, por
ejemplo, un valor booleano que indique si el alumno es mayor de edad:
1.boolean esMayorEdad() {
2.int aoActual = 2011;

3.
4.if(aoActual - aoDeNacimiento >= 18)
5.return true;
6.else
7.return false;
8.}

Si el mtodo no va a retornar ningn valor, se debe indicar con la


palabra void delante del nombre, y no se emplea la sentencia return:
1.void nombreMtodo() {
2.//Sentencias del mtodo
3.}

Por ejemplo, se puede declarar un mtodo que nicamente muestre por pantalla el
grupo al que pertenece un alumno, sin que retorne ningn otro valor.
1.void muestraGrupo() {
2.System.out.println("El alumno: " + nombre + " " + apellidos);
3.System.out.println("Pertenece al grupo: " + grupo);
4.}

En la declaracin del mtodo se debe informar de los parmetros que puede aceptar
el mtodo, indicando el tipo de dato y un nombre para dicho parmetro que se
utilizar como una variable dentro del mismo. Se escriben despus del nombre del
mtodo, entre parntesis y separados por comas. En los parmetros se indicarn los
datos que el mtodo puede necesitar para realizar las operaciones que tiene
encargadas.
Por ejemplo, un mtodo que asigne a un objeto de la clase Alumno sus datos, debe
conocer cul es el nombre del alumno, sus apellidos, ao de nacimiento, nmero
personal, grupo y turno. Por tanto, el mtodo debe tener los parmetros necesarios
para indicarle esos datos:
01.void asignaValores(String nom, String ape, int aoNac, int num,
02.String gru, String turno) {
03.//En este ejemplo, los valores recibidos en los parmetros se
04.//
asignan directamente a los atributos de la clase
correspondientes.
05.nombre = nom;
06.apellidos = ape;
07.aoDeNacimiento = aoNac;
08.nmeroPersonal = num;
09.grupo = gru;
10.turnoHorario = turno;
11.//Mostrar mensaje informativo
12.System.out.println("Valores asignados correctamente");
13.}

Creacin de nueva clase en NetBeans

Dentro de un mismo archivo ".java" se pueden crear varias clases, aunque suele ser
ms claro y cmodo crear un nuevo archivo para cada clase.
Desde NetBeans se puede crear fcilmente una nueva clase Java desde el men
contextual del paquete de fuentes, o desde el men "Archivo > Archivo Nuevo",
seleccionado la opcin "Clase Java".

Estructura de una clase Java


Componente

Palabra Reservada

Cardinalidad

1 Declaracin de

package

0..1

2 Importacin de

import

0..*

[public|package] classNombre
Clase {...}

4 Declaracin de

[public|private|protected]
[Dato Primitivo|
Referencia]nombreVariable

0..*

5 Definicin de

public NombreClase() {...}

0..*

6 Definicin de

[public|private|protected]
[void|DatoPrimitivo|
Referencia]nombreMetodo

1..*

paquete

libreras del API de


Java o externas

3 Definicin de clase
variables de
instancia

constructores
mtodos

Herencia en Java
La idea de la herencia es permitir la creacin de nuevas clases basadas en clases

existentes.
Cuando heredamos de una clase existente, reusamos (o heredamos) mtodos y
campos, y agregamos nuevos campos y mtodos para cumplir con la situacin
nueva.
Cada vez que encontremos la relacin "es-un" entre dos clases, estamos ante la
presencia de herencia.
La clase ya existente es llamada superclass, o clase base, o clase padre.
La clase nueva es llamada subclase, clase derivada, o clase hija.
A travs de la herencia podemos agregar nuevos campos, y podemos agregar o sobre
montar mtodos (override). Sobre montar un mtodo es redefinirlo en la case heredada.
Estudio de ejemplos: ManagerTest.java
Destacar uso de super para invocar al constructor de la clase base y para invocar a mtodos
sobremontados.

Jerarqua de Herencia

Polimorfismo
En Java una variable o nombre usado para referirse a un objeto de una clase X
puede usarse para referirse a cualquier objeto de cualquier subclase de la clase X.
Por ejemplo: Si tenemos Employee e;
e= new Employee(...); o
e= new Manager(...);
Esto tambin aplica a arreglos de Employee, cuyas entradas podran referirse a
instancias de cualquier subclase de Employee.
El inverso no es vlido. No se puede asignar una instancia de la superclase a un
nombre para la subclase.
Esta es una forma de polimorfismo por que e puede referirse a un Employee o a
un Manager.

Ligado Dinmico

Es importante entender qu mtodo es aplicado al invocar uno a un objeto que


se puede referir a instancias de distinta clase.
Al momento de la compilacin el compilador intenta resolver el mtodo que
corresponde segn su nombre y parmetro. Si la superclase y la clase base tiene
definido el mismo mtodo Cul se llama?. Si el mtodo en la clase declarada
para la variable no es privado, static, o final, se invocar en forma dinmica. Esto
es, se invocar el mtodo definido segn el objeto referenciado por el nombre y
no segn la declaracin del nombre. Por ello, si una clase derivada redefine el
mismo mtodo, ste ser invocado.

Casting
Cmo podemos acceder a los mtodos definido en una clase derivada pero no en
la base? Se debe hacer un cambio de tipo forzado.
Por ejemplo:
Employee e= new Manager(..);
Usando e no podemos acceder a los mtodos slo presentes en Manager.
Si queremos hacerlo, usamos:
Manager m = (Manager) e;
Ahora s podemos invocar todos los mtodos de Manager sobre m. Cmo
sabemos que e aloja una instancia de Manager? Lo podemos preguntar con el
operador instanceof.
if (e instance of Manager) {
m = (Manager) e;
.....
}

Clases Abstractas (abstract classes)


Llevando la idea de herencia a un extremo podemos pensar en buenas clases
para representar un grupo pero que no tienen instancias propias. Por ejemplo
Forma como clase base de Triangulo, Circulo, Cuadrado. Forma puede indicar
todo el comportamiento vlido para una forma pero no puede instanciarse por si
mismo. En ente caso Forma debe declararse como clase abstracta por tener al
menos un mtodo declarado pero no implementado.
public abstract class Forma {
...
public abstract double area();
..
}

ver PersonTest.java
Perros y gatos

Superclase Object
Toda clase en Java hereda de la clase Object. sta no requiere ser indicada en
forma explcita. Esto permite que podamos agrupar en forma genrica elementos
de cualquier clase. En esta clase hay mtodos como equals() y toString() que en
la mayora de loa casos conviene sobremontar. ver documentacin de clase
Object.
Ver (alumnos) EqualsTest.java

Programacin Genrica (Generic Programming)


Se le llama al hecho que podamos crear cdigo vlido para cualquier tipo de
dato especfico. Por ejemplo en alguna clase podramos incorporar:
static int find (Object [ ] a , Object key)
{
int i;
for (i=0; i < a.length; i++)
if (a[i].equals(key) return i; // encontrado
return -1;
// no exitoso
}

También podría gustarte