Actualizaciones

Unidad 7 - Excepciones.EXAMEN PROXIMA SEMANA (VIERNES 21 DE MAYO 2010)
Para comprender mejor este tema es necesario leer de distintas fuentes,
te recomiendo leer en las diversas fuentes recomendadas en la sección de la bibliografia en el avance programático que te entregue al inicio del curso.

Nota: Hay varios ejemplares del Libro "Como Programar en Java " de Deitel esta disponible en la biblioteca.

- Actualizado el Sabado 15 de Mayo del 2010 -

lunes, 8 de marzo de 2010

Unidad 2 > Conceptos > Clases, Metodos y Objetos

PROGRAMACION ORIENTADA A OBJETOS USANDO CLASES

Definición de clases e instancias
Las clases son los elementos que Java utiliza para soportar la programación orientada a objetos. Constituyen la estructura básica sobre la que se desarrollan las aplicaciones. Una clase permite definir propiedades y métodos relacionados entre sí.

Habitualmente, las propiedades son las variables que almacenan el estado de la clase y los métodos son los programas que se utilizan para consultar y modificar el contenido de las propiedades.

Un ejemplo de clase podría ser un semáforo de circulación, cuyo estado se guarde en una propiedad EstadoSemaforo de tipo String que pueda tomar los valores “Verde”, “Amarillo” y “Rojo”. Como métodos de acceso a la propiedad podríamos definir: PonColor(String C olor) y String DimeColor().

Sintaxis

AtributoAcceso class NombreClase {
// propiedades y métodos
}

Obviando el significado del atributo de acceso, que se explicará más tarde, un ejemplo concreto de clase en Java podría ser:

public class Semaforo {
private String EstadoSemaforo = “Rojo”;

public void PonColor (String Color) {
EstadoSemaforo = Color;
}
public String DimeColor() {
return EstadoSemaforo;
}
} // Fin de la clase Semaforo


Representación gráfica
Gráficamente, la clase Semaforo la podríamos definir de la siguiente manera:



Fig. 4.1

La propiedad EstadoSemaforo, con atributo private, no es accesible directamente desde el exterior de la clase, mientras que los métodos, con atributo public, si lo son. Desde el exterior de la clase podemos acceder a la propiedad EstadoSemaforo a través de los métodos PonColor y DimeColor.


Instancias de una clase
Cuando definimos una clase, estamos creando una plantilla y definiendo un tipo. Con el tipo definido y su plantilla de código asociada (sus propiedades y métodos) podemos crear tantas entidades (instancias) de la clase como sean necesarias; de esta manera, en nuestro ejemplo, podemos crear varios semáforos (instancias de la clase Semáforo), y hacer evolucionar el estado de estos “semáforos” de forma independiente.

Si deseamos disponer de diversos semáforos independientes entre sí, en el sentido de que cada semáforo pueda encontrarse en un estado diferente a los demás, obligatoriamente debemos crear (instanciar) cada uno de estos semáforos.

Para declarar un objeto de una clase dada, empleamos la sintaxis habitual:

Tipo Variable;

En nuestro caso, el tipo se refiere al nombre de la clase:

Semaforo MiSemaforo;

De esta manera hemos creado un apuntador (MiSemaforo) capaz de direccionar un objeto (una instancia) de la clase Semaforo:



Para crear una instancia de la clase Semaforo, empleamos la palabra reservada new, tal y como hacíamos para crear una instancia de una matriz; después invocamos a un método que se llame igual que la clase. Estos métodos se denominan constructores y se explicarán un poco más delante.

MiSemaforo = new Semaforo();

También podemos declarar e instanciar en la misma instrucción:

Semaforo MiSemaforo = new Semaforo();

En cualquier caso, el resultado es que disponemos de una variable MiSemaforo que direcciona un objeto creado (instanciado) de la clase Semaforo. Podemos crear tantas instancias como necesitemos:

Semaforo MiSemaforo = new Semaforo();
Semaforo OtroSemaforo = new Semaforo();

Es importante ser consciente de que en este momento existen dos variables diferentes implementando la propiedad EstadoSemaforo; cada una de estas variables puede contener un valor diferente, por ejemplo, cada semáforo puede presentar una luz distinta (“Verde”, “Rojo”, “Amarillo”) en un instante dado.

Utilización de los métodos y propiedades de una clase
Para designar una propiedad o un método de una clase, utilizamos la notación punto:

Objeto.Propiedad
Objeto.Metodo()

De esta forma, si deseamos poner en verde el semáforo SemaforoDeMiCalle, empleamos la instrucción:

SemaforoDeMiCalle.PonColor(“Verde”);

De igual manera podemos actuar con las demás instancias de la clase Semaforo:

MiSemaforo.PonColor(“Rojo”);
OtroSemaforo.PonColor(“Verde”);

Para consultar el estado de un semáforo:

System.out.println( OtroSemaforo.DimeColor() );
if (MiSemaforo.DimeColor().equals(“Rojo”))
String Luz = SemaforoDeMiCalle.DimeColor();

En nuestro ejemplo no podemos acceder directamente a la propiedad EstadoSemaforo, por ser privada. En caso de que fuera pública se podría poner:

String Luz = SemaforoDeMiCalle.EstadoSemaforo;
// esta linea seria valida sólo si la variable EstadoSemaforo fuera accesible
// (en nuestro ejemplo del semaforo NO lo es)

Encapsulamiento
Encapsulamiento se refiere al ocultamiento de los datos miembro de un objeto de manera que sólo se puede cambiar mediante las operaciones (métodos) definidas para ese objeto.

Cada objeto está aislado del exterior, es una entidad independiente. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios.

Encapsulamiento se puede refierir tanto al ocultamiento de los datos como de métodos existentes dentro de un objeto.

El Encapsulamiento de los miembros de un objeto se logra asignandoles el atributo de acceso como privado (private) dentro de la definición de la clase.

De esta forma como en el el ejemplo del semaforo la variable estado solo es accesible a través de los metodos publicos definidos por la clase (setter/getter) por lo tanto solo existe una manera de alterar el contenido de las variables privadas y esta es llamando al metodo encargado de ello.

Importancia del encapsulamiento
El encapsulamiento de los miembros de una clase es importante debido a cuestiones de seguridad e integridad de los objetos de una clase. Tu podrias tener una clase con variables que acepten solo ciertos valores permitidos, como en el caso del semaforo que solo aceptaria rojo, amarillo y verde como estados permitidos. De esta forma te aseguras de que solo valores legales serán aceptados.


Por ejemplo, en la siguiente figura podemos ver que solo los miembros publicos de una clase son los que interactuan con el exterior, protegiendo asi el acceso a los miembros privados de un objeto.



.

No hay comentarios:

Publicar un comentario