Tema 2

Anuncio
Modularidad en Java
Tema 2
Modularidad en Java
Programación Orientada a
Objetos
Modularidad en Java
En Java la unidad modular es la clase
Una clase es la abstracción de un conjunto de
objetos (instancias)
Una clase ofrece unos servicios y oculta otros
recursos
Modularidad en Java
Java no separa la especificación y la implementación
de los módulos como lo hace Ada.
Java permite organizar las clases en paquetes y
subpaquetes de forma jerárquica
En Java es posible definir objetos interfaz que
contengan la declaración de un conjunto de
operaciones públicas de una clase.
Esta jerarquía se refleja en la forma de
almacenamiento en disco a través de directorios
„
Esta interfaz agruparía la especificación de los métodos
que exporta un módulo.
„
Es posible definir varias interfaces para una clase.
„
En la interfaz NO se incluyen los métodos estáticos ni
el método constructor de la clase.
Implementación: definición de una clase Java.
Ocultaremos los detalles
Ocultación de la información
Principio conservador :
“A menos que exista una razón importante para
que un miembro sea accesible, será declarado
privado”
java
java.lang
java.io
java.awt
Java.awt.peer
Ocultación de la información
La ocultación de la información en Java se
realiza a través de los modificadores de
visibilidad
Los modificadores de visibilidad se aplican a
nivel de clase y a nivel de miembro (atributo o
método)
1
Modificadores de Visibilidad (clase)
Una clase puede declararse:
„
„
„
public: en este caso todas las otras clases la
pueden utilizar
con la visibilidad a nivel de paquete, esto es, no
se puede utilizar fuera del paquete
si en un fichero se declara más de una clase,
sólo una será pública siendo el resto privadas
Modificadores de Visibilidad
(atributos y métodos)
La visibilidad de las variables miembro (atributos)
y los métodos (operaciones) de una clase puede
ser:
„
„
„
„
Modificadores de Visibilidad
Acceso
X
Predeterminado
protected
X
X
X
X
public
X
X
X
Ocultación de la información
El objetivo es ocultar en lo posible los
detalles de implementación de las clases
permitiendo el acceso sólo a través de los
métodos públicos
X
X
Ocultación de la información
En Java para conseguir esto:
„
paquete (no se puede acceder desde sus
subpaquetes)
public: accesibles desde todas las clases
private: sólo accesibles desde los métodos de la
clase
protected: el miembro es accesible desde las
clases de su paquete y desde las subclases
Clase Subclase Paquete Universal
private
„
package (por defecto): sólo accesibles desde su
Las variables miembro (atributos) se deben
declarar como privadas
El acceso a las variables miembro se realizará
SÓLO a través de las operaciones públicas
Ocultación de la información
Usando los modificadores de visibilidad
conseguimos:
„
„
„
„
„
Operaciones públicas de creación, consulta y
modificación
evitar accesos directos
controlar los accesos
simplificar el trabajo del programador
no tener problemas al cambiar la
implementación del paquete mientras no se
cambie la interfaz
2
Importación de clases y paquetes
Para especificar las clases e incluso paquetes
enteros que se utilizan desde una clase se utiliza la
cláusula import
import
import <nombre-paquete>
<nombre-paquete>
[[ {*
{* || <nombre-clase>}]
<nombre-clase>}] ;;
*:
*: se
se importan
importan todas
todas las
las clases
clases del
del paquete
paquete
<nombre-clase>:
<nombre-clase>: sólo
sólo se
se importa
importa la
la clase
clase referenciada
referenciada
Una clase puede utilizar las clases públicas de
todos los paquetes que se hayan referenciado al
principio del fichero
Tipos de Módulos (Java)
a)
b)
c)
d)
Módulos de definición
Módulos de servicio
Tipos Abstractos de Datos
Máquinas Abstractas de Estado
b) Módulos de Servicio
Ofrecen un servicio
Agrupan un conjunto de operaciones
Las operaciones de la interfaz se declaran
sobre clases no instanciables (abstract y
final)
Las operaciones son declaradas estáticas
(static)
Importación de clases y paquetes
Para importar una clase:
import java.net.URL;
public class Ejemplo {...}
Para importar todas las clases públicas de un
paquete
import java.awt.*;
„
Esto no importa las clases incluidas en
subpaquetes (por ejemplo , java.awt.event)
El paquete java.lang no es necesario
importarlo
a) Módulos de Definición
Declaración de constantes y variables
Se declaran sobre clases abstractas (abstract)
Se declaran como estáticas (static)
Definiciones de constantes (final)
abstract
static
static
static
static
static
}
class ConfiguracionSistema{
boolean VersionEvaluacion;
int diasUtilización;
final int maxDias;
String ubicacion;
String paginaInicial;
Ejemplo
abstract class UtilidadesString
{
static String aMayusculas(String S)
{...}
static String eliminarBlancos(String S)
{...}
static Boolean esPrefijo (String P, String S)
{...}
private static int interna(String P, String S)
{...}
}
3
c) Módulos de Abstracción de Datos
Ejemplo
public class Coche {
private String matricula;
Representan TADs
private double velocidad;
// atributos privados
private double velocidadMax;
Se definen el tipo de datos y sus operaciones
// Método constructor
public Coche(String pMatricula, double pVelMax) {
La implementación se realiza como una clase
Java
this.matricula= pMatricula;
this.velocidad = 0.0;
if (velocidadMax >= 0.0) {
this.velocidadMax = pVelMax; }
else { velocidadMax = 0.0; }
}
// (continúa...)
Ejemplo
d) Máquinas Abstractas de Estado (MAE)
// Métodos de consulta
public String getMatricula() { return this.matricula; }
…
// Métodos de asignación
public void setMatricula(String pMatric) { this.matricula = pMatric; }
…
// Otros métodos
public void Acelerar(double pVel) {
this.velocidad = this.velocidadd + pVel;
if (this.velocidad > this.velocidadMax) {
this.velocidad = this.velocidadMax; }
if (this.velocidad < 0.0) { this.velocidad= 0.0; }
A diferencia de los TADs, las operaciones de una
MAE se efectúan sobre un único objeto (la
clase), no se pueden generar diferentes objetos
del mismo tipo
En Java definiremos MAEs a través de clases
que cumplan los siguientes requisitos:
„
„
No pueden admitir tener varias instancias
Los métodos se aplican sobre el único objeto de
la clase
Patrón SINGLETON
}
…}
Ejemplo
public class Pila {
// Atributos
private static final int CAPACIDAD=1000;
private static int elementos[];
private int tope; // índice de la primera posición libre
private static Pila unaPila = new Pila(); // única instancia de la clase
// Constructora
private Pila() {
elementos = new int[CAPACIDAD];
tope = 0;
}
// Operación de acceso
public static Pila obtPila (){
return unaPila;
}
Librería de clases
El lenguaje Java tiene una librería muy amplia
La librería se organiza en paquetes
En Java los paquetes se utilizan para agrupar
clases que tienen “algo” en común
Antes de implementar una clase en Java comprobar
si ya está hecha
Un paquete declara: clases, interfaces, excepciones
y errores
java.appletjava.awt
java.lang
Un paquete se puede organizar en subpaquetes
(que a su vez son paquetes)
java.lang.reflect
java.lang
4
Descargar