Publicado el 1 de Marzo del 2019
886 visualizaciones desde el 1 de Marzo del 2019
204,6 KB
53 paginas
Creado hace 14a (23/04/2010)
Programación II
Programación Modular
g
Ángel Lucas González Martínez
Jaime Ramírez
Guillermo Román
Gu e
o o á
DLSIIS. Facultad de Informática
Universidad Politécnica de Madrid
1
MÓDULOS
2
Módulos
Módulos
i
it
• Mecanismo que permite:
M
– Separar componentes de un programa
– Dividir el código de forma estructurada
Dividir el código de forma estructurada
– Encapsulación y ocultación de datos y código
• Un módulo puede encapsular:
• Un módulo puede encapsular:
– Constantes
– Variables (no recomendable en general)
Variables (no recomendable en general)
– Tipos (atributos en POO) y servicios asociados a
esos tipos (TADS)
• Permiten separar definición (interfaz) de
implementación
3
Módulos
Módulos
Cada mód lo en ja a p ede estar definido por
• Cada módulo en java puede estar definido por:
– Una clase (fichero .java)
– Un paquete que puede contener varias clases
Un paquete que puede contener varias clases
(carpeta)
• Un módulo ofrece una interfaz (parte pública) y una
i
i d )
implementación (parte privada)
ió (
t
l
t
• El usuario del módulo “compilado” no ve la
implementación
implementación
• En java la definición de los servicios ofrecidos y su
implementación están en el mismo .java, a no ser
que:
– Se utilice una interfaz (interface)…
4
Módulos
Módulos
• Se pueden acceder a los elementos según su
visibilidad
• Una clase o módulo puede requerir de otros ⇒
necesidad de importar
• Los módulos se pueden empaquetar en librerías
(ficheros .jar) Reutilización
(ficheros .jar) Reutilización
• Cada módulo se puede compilar por separado
Nos centraremos en crear módulos (clases) que
• Nos centraremos en crear módulos (clases) que
definan Tipos Abstractos de Datos (TAD)
5
Módulos: Paquetes
Módulos: Paquetes
t
it
• Un paquete permite agrupar en una misma
U
unidad varias clases e interfaces estructurar
U
– Dos clases pertenecientes a distintos
• Un paquete crea un espacio de nombres ⇒
i d
b
t
i
paq etes se p eden llamar ig al
paquetes se pueden llamar igual
• Un paquete puede contener otros paquetes
l
• Si no se especifica nada la clase pertenece al
d l
t
l
• Los paquetes son una forma de crear módulos
ód l
d
f
ifi
Si
paquete por defecto
L
en java
t
6
Módulos: Cómo crear un paquete
Módulos: Cómo crear un paquete
• Por convenio se usan minúsculas en el identificador
• Por convenio se usan minúsculas en el identificador
• Una forma habitual de nombrar los paquetes es:
– Tipo de organización: org
Tipo de organización: org
– Nombre Organización: upm
– Proyecto: programacion2
– Detalles proyecto: practica1
– Otras divisiones …
p g
y
• Si el paquete ‘a’ está dentro del paquete ‘b’, y éste a su vez está
dentro de ‘c’, entonces:
package c.b.a;
k
b
• Al comienzo de todos los ficheros pertenecientes a un mismo
paquete ‘a’:
paquete a :
package a;
package a;
7
Módulos: Cómo crear un paquete
Módulos: Cómo crear un paquete
i
E
• En un mismo fichero .java se pueden definir
i
varias clases y/o interfaces, sólo una puede
ser pública
ser pública
d fi
fi h
d
j
• Todos los ficheros del paquete a deben:
l
t
li d
– o estar localizados en un directorio llamado a
ll
cuyo path esté incluido en la variable
CLASSPATH (por ejemplo: c/b/a)
CLASSPATH (por ejemplo: c/b/a)
di
d
t
i
– o estar incluidos en una carpeta a dentro de un
fichero .jar o .zip, y el path del fichero debe estar
incluido en la variable CLASSPATH (por ejemplo:
/misclases/libreria.jar)
p, y
p
j
8
Módulos: Cómo usar un paquete
Módulos: Cómo usar un paquete
• Escribiendo la referencia completa al elemento
d l
ibi
t
t
l
l
l
E
i
(importación calificada):
t
b P
f
nombrePaquete.nombreElem
b El
• Importando (importación no calificada):
– el paquete entero:
t
t
l
import nombrePaquete.*;
l
t
ól
– o sólo el elemento a ser utilizado:
l
import nombrePaquete.nombreElem;
t d
t
• La importación permite usar el conjunto de
L i
identificadores definidos. No se trae el código
tili d
ió
it
j
l
9
Módulos: Cómo usar un paquete
Módulos: Cómo usar un paquete
i
t
P
t
t
t
t 2
// i
//calificada Punto2 -> puntos.Punto2
i
import puntos.Punto2; //si se comenta se usa importación
ió
import consola.Consola;
public class TestPuntos2 {
p
{
static Punto2 leerPunto () {//leerPunto
float x,y;
.....
return new Punto2 (x,y);
)
C lifi d
Calificada
t 2 (
t
P
}//leerPunto
static void imprimirPunto (puntos.Punto2 p)
p
p)
{//imprimirPunto
System.out.printf("La coordenada x del punto es %f\n",
S
System.out.printf("La coordenada y del punto es %f\n",
}//imprimirPunto
p.getX());
d
p.getY());
i tf("L
%f\ "
d l
(p
t
d
t
t
10
Módulos: Cómo usar un paquete
Módulos: Cómo usar un paquete
t
l
l
t
t
i
t
t
P
iP
t
i
t 3
i
import puntos.iPuntos; import puntos.Punto3; import consola.Consola;
C
public class TestPuntos3 { Sólo al construir aparece la clase concreta
static iPuntos leerPunto () {//leerPunto
...
return new Punto3 (x,y);
}//l
t
}//leerPunto
static void imprimirPunto (iPuntos p) {//imprimirPunto
...
}//imprimirPunto
}
public static void main(String[] args) {
iPuntos p1,p2;
p1=leerPunto ();
p2=leerPunto();
2 l
t ()
System.out.println ("Datos del primer punto");
imprimirPunto(p1);
P
p
P
...}}
11
¿Qué clases puedo usar?
¿Qué clases puedo usar?
t
d
• En un proyecto se pueden usar clases de
E
l
muchos paquetes ¿de cuáles?
D t d
• De todos los que estén en el CLASSPATH:
l CLASSPATH
• Cuando usamos una clase la máquina virtual
té
d
l
i
l
l
t
t
id
t d
ód l
b
busca entre todos los módulos incluidos en
CLASSPATH
– Directorio que esté incluido en la variable
Di
CLASSPATH
Carpeta a dentro de un fichero jar o zip y el
– Carpeta a dentro de un fichero .jar o .zip, y el
path del fichero debe estar incluido en la variable
CLASSPATH
i bl
té i
id
l
i
l
12
Compilación separada
Compilación separada
Implementación
Provedor de Servicos
Compilacion
Módulo
Interface
Implementación
p
Interface
Cliente
Enlazado
Aplicación
Compilacion
Código objeto
13
Compilación separada
Compilación separada
Provedor de Servicos
Provedor de Servicos
Cliente
(Implementación/
Interface)
Interface)
.java
(Implementación/
Interface)
.java
(Compilacion)
(
)
p
javac
(Módulo)
(
)
.class
(Compilacion)
javac
(Aplicación)
.class
(Enlazado/
Ejecución)
java
14
OCULTACIÓN DE INFORMACIÓN
15
Separación Público Vs Privado
Separación Público Vs Privado
• Mecanismos:
– Ocultar la definición de los tipos o atributos
– Ocultar la implementación de sus operaciones
– Ocultar las operaciones privadas o auxiliares
• Ventajas:
– Facilita la programación: Abstracción de los detalles
– Menor acoplamiento y facilita reutilización
– Desarrollo en paralelo de aplicaciones
– Mejora de implementaciones sin afectar al resto del
sistema
16
Mecanismos de ocultación
Mecanismos de ocultación
• No todos los lenguajes dan las mismas
funcionalidades (C vs. Ada, C vs C++, ...)
• La ocultación se puede dar en:
– Restricción de acceso a nombres
– Restricción de acceso a funciones y estructuras de
datos (aun conociendo los nombres)
– Imposibilidad de inspección visual del código
17
Contenidos de parte pública y
privada en java
Parte Pública
• Cabeceras de los
métodos públicos
• Semántica de los
ét d
úbli
métodos: explica qué
métodos: explica qué
hacen
Normalmente, esta
información es la que se
q
incluye en la documentación
javadoc
Parte Privada
• Solicitud de módulos
•
•
•
i
necesarios en la
l
implementación
Implementación de las
Implementación de las
estructuras de datos
Implementación de los
Implementación de los
métodos: se especifica
un cuerpo {…}
}
p {
18
Separación física de la parte
pública y privada en java
• La parte pública y la privada están mezcladas en el
• Para no tener que ver la parte privada cuando se
código fuente (ficheros .java).
P
t
quieren usar los servicios de una clase, se utiliza la
documentación javadoc en files html
documentación javadoc en files html.
i d
d
t
l
• En la doc javadoc se encuentra la descripción de la
parte pública, que incluye todo lo que necesitamos
pa e púb ca, que
c uye todo o que eces ta os
saber para usar los servicios de una clase.
p
g
• Para poder generar esta doc, tenemos que incluir los
comentarios apropiadas en el código fuente (/** … */)
para cada método público.
q
19
ét d
Modificadores de Acceso
t ib t
• Para atributos y métodos, ordenados de más a
P
menos restrictivos:
– private: sólo es visible dentro de la clase que lo
ibl d
t
definió.
“sin modificador o friendly”: sólo es visible
– sin modificador o friendly : sólo es visible
dentro del paquete que incluye la clase que lo
definió.
ól
t
d l
l
d
d
d
á
i
i
– protected: es friendly, y además es visible para
todas las subclases de la clase que lo definió.
– public: es visible para todos.
Recordatorio:
l
20
Ocultación entre módulos
Ocultación entre módulos
J
• Java permite restringir a quien se da acceso
• Establece cuatro niveles distintos:
t i
d
it
i
i
Modificador Clase Paquete Subclase Universo
public
protected
t d
t
nada
private
private
Si
Si
Si
No
No
No
Si
N
No
No
No
No
Si
Si
Si
Si
No
No
Si
Si
Si
Si
Si
Si
• La importación se realiza por medio de la
palabra reservada import
palabra reservada import
• El cliente tiene acceso a las definiciones según
los criterios enumerados
los criterios enumerados
21
Módulos: Ejemplo de clase sin
ocultación
public class Punto1 {
P t 1 {
bli
l
public float x;
public float y;
public float y;
Definición de servicios e
implementación en el mismo fichero
public static double distancia (Punto1 p1, Punto1 p2 ) {
return java.lang.Math.sqrt ((p1.x - p2.x)*(p1.x - p2.x) +
2 )*( 1
t (( 1
M th
2 )
(p1.y - p2.y)*(p1.y - p2.y));
t
j
l
}
public static boolean esOrigen (Punto1 p )
{
return p.x==0 && p.y==0;
}
}
Visible y usable po
Comentarios de: Programación II - Programación Modular (0)
No hay comentarios