Sunteți pe pagina 1din 4

Modularidad en Java

Tema 2 En Java la unidad modular es la clase


Modularidad en Java Una clase es la abstracción de un conjunto de
objetos (instancias)
Programación Orientada a Una clase ofrece unos servicios y oculta otros
Objetos recursos

Modularidad en Java Modularidad en Java


Java no separa la especificación y la implementación Java permite organizar las clases en paquetes y
de los módulos como lo hace Ada. subpaquetes de forma jerárquica
En Java es posible definir objetos interfaz que
contengan la declaración de un conjunto de Esta jerarquía se refleja en la forma de
operaciones públicas de una clase. almacenamiento en disco a través de directorios
„ Esta interfaz agruparía la especificación de los métodos
que exporta un módulo. java
„ Es posible definir varias interfaces para una clase.
„ En la interfaz NO se incluyen los métodos estáticos ni
java.lang java.io java.awt
el método constructor de la clase.
Implementación: definición de una clase Java.
Java.awt.peer
Ocultaremos los detalles

Ocultación de la información Ocultación de la información

Principio conservador :
La ocultación de la información en Java se
realiza a través de los modificadores de
“A menos que exista una razón importante para visibilidad
que un miembro sea accesible, será declarado
Los modificadores de visibilidad se aplican a
privado” nivel de clase y a nivel de miembro (atributo o
método)

1
Modificadores de Visibilidad
Modificadores de Visibilidad (clase) (atributos y métodos)
La visibilidad de las variables miembro (atributos)
Una clase puede declararse: y los métodos (operaciones) de una clase puede
„ public: en este caso todas las otras clases la ser:
pueden utilizar „ package (por defecto): sólo accesibles desde su
paquete (no se puede acceder desde sus
„ con la visibilidad a nivel de paquete, esto es, no subpaquetes)
se puede utilizar fuera del paquete „ public: accesibles desde todas las clases
„ private: sólo accesibles desde los métodos de la
„ si en un fichero se declara más de una clase,
clase
sólo una será pública siendo el resto privadas
„ protected: el miembro es accesible desde las
clases de su paquete y desde las subclases

Modificadores de Visibilidad Ocultación de la información

Acceso Clase Subclase Paquete Universal


El objetivo es ocultar en lo posible los
private X detalles de implementación de las clases
permitiendo el acceso sólo a través de los
Predeter- X X
minado métodos públicos
protected X X X

public X X X X

Ocultación de la información Ocultación de la información

En Java para conseguir esto: Usando los modificadores de visibilidad


conseguimos:
„ Las variables miembro (atributos) se deben
declarar como privadas „ evitar accesos directos
„ controlar los accesos
„ El acceso a las variables miembro se realizará
„ simplificar el trabajo del programador
SÓLO a través de las operaciones públicas
„ no tener problemas al cambiar la
„ Operaciones públicas de creación, consulta y implementación del paquete mientras no se
modificación cambie la interfaz

2
Importación de clases y paquetes Importación de clases y paquetes
Para especificar las clases e incluso paquetes
enteros que se utilizan desde una clase se utiliza la Para importar una clase:
cláusula import import java.net.URL;
public class Ejemplo {...}
import <nombre-paquete>
import <nombre-paquete>
[[ {*
Para importar todas las clases públicas de un
{* || <nombre-clase>}]
<nombre-clase>}] ;; paquete
*: se
*: se importan
importan todas
todas las
las clases
clases del
del paquete
paquete import java.awt.*;
<nombre-clase>:
<nombre-clase>: sólo sólo se
se importa
importa lala clase
clase referenciada
referenciada „ Esto no importa las clases incluidas en
subpaquetes (por ejemplo , java.awt.event)

Una clase puede utilizar las clases públicas de El paquete java.lang no es necesario
todos los paquetes que se hayan referenciado al importarlo
principio del fichero

Tipos de Módulos (Java) a) Módulos de Definición


Declaración de constantes y variables
Se declaran sobre clases abstractas (abstract)
Se declaran como estáticas (static)
a) Módulos de definición
Definiciones de constantes (final)
b) Módulos de servicio
c) Tipos Abstractos de Datos abstract class ConfiguracionSistema{

d)
static boolean VersionEvaluacion;
Máquinas Abstractas de Estado static int diasUtilización;
static final int maxDias;
static String ubicacion;
static String paginaInicial;
}

b) Módulos de Servicio Ejemplo


abstract class UtilidadesString
Ofrecen un servicio
{
Agrupan un conjunto de operaciones static void aMayusculas(String S)
{...}
Las operaciones de la interfaz se declaran static void eliminarBlancos(String S)
sobre clases no instanciables (abstract y {...}
final) static Boolean esPrefijo (String P, String S)
{...}
Las operaciones son declaradas estáticas private static int interna(String P, String S)
(static) {...}
}

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 this.matricula= pMatricula;
Java 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; }
A diferencia de los TADs, las operaciones de una

MAE se efectúan sobre un único objeto (la
// Métodos de asignación clase), no se pueden generar diferentes objetos
public void setMatricula(String pMatric) { this.matricula = pMatric; } del mismo tipo

En Java definiremos MAEs a través de clases
// Otros métodos que cumplan los siguientes requisitos:
public void Acelerar(double pVel) { „ No pueden admitir tener varias instancias
this.velocidad = this.velocidadd + pVel; „ Los métodos se aplican sobre el único objeto de
if (this.velocidad > this.velocidadMax) { la clase
this.velocidad = this.velocidadMax; }
Patrón SINGLETON
if (this.velocidad < 0.0) { this.velocidad= 0.0; }
}
…}

Ejemplo Librería de clases


public class Pila {
// Atributos El lenguaje Java tiene una librería muy amplia
private static final int CAPACIDAD=1000;
private static int elementos[]; La librería se organiza en paquetes
private int tope; // índice de la primera posición libre
private static Pila unaPila = new Pila(); // única instancia de la clase
En Java los paquetes se utilizan para agrupar
clases que tienen “algo” en común
// Constructora
private Pila() {
Antes de implementar una clase en Java comprobar
elementos = new int[CAPACIDAD]; si ya está hecha
tope = 0;
}
Un paquete declara: clases, interfaces, excepciones
y errores
java.appletjava.awt java.lang
// Operación de acceso
public static Pila obtPila (){ Un paquete se puede organizar en subpaquetes
return unaPila;
}
(que a su vez son paquetes)
java.lang.reflect java.lang

S-ar putea să vă placă și