Publicado el 14 de Enero del 2017
1.558 visualizaciones desde el 14 de Enero del 2017
224,0 KB
11 paginas
Creado hace 14a (27/04/2010)
Prácticas de Programación
Tema 1. Introducción al análisis y diseño de programas
Tema 2. Clases y objetos
Tema 3. Herencia y Polimorfismo
Tema 4. Tratamiento de errores
Tema 5. Aspectos avanzados de los tipos de datos
Tema 6. Modularidad y abstracción: aspectos avanzados
Tema 7. Entrada/salida con ficheros
Tema 8. Verificación y prueba de programas
Prácticas de Programación
© M. Aldea y M. González
27/04/10
Tema 6. Modularidad y abstracción: aspectos avanzados
Tema 6. Modularidad y abstracción: aspectos
avanzados
1
6.1. Paquetes
6.2. Tipos de módulos de programa
6.3. Módulos genéricos
6.4.
6.5. Programación con módulos predefinidos
6.6. Documentación de módulos de programa
6.7. Bibliografía
Introducción a las Interfaces
Prácticas de Programación
© M. Aldea y M. González
27/04/10
2
Tema 6. Modularidad y abstracción: aspectos avanzados
6.1 Paquetes
6.1 Paquetes
Un paquete en Java es un conjunto de clases que están en el
mismo directorio
• evita colisiones de nombre
• permite agrupar clases relacionadas entre sí
• permite organizar el código mejor
Ya hemos usado algunos paquetes:
• fundamentos
• java.util: contiene las clases Arrays, ArrayList, ...
• ...
El directorio de trabajo se considera como un paquete sin nombre
Desde una clase pueden usarse directamente otras del mismo
paquete
Prácticas de Programación
© M. Aldea y M. González
27/04/10
3
Tema 6. Modularidad y abstracción: aspectos avanzados
Paquetes con nombre
• se guarda en un directorio de igual nombre que el paquete
• el directorio que le contiene debe estar en la ruta de búsqueda
6.1 Paquetes
- en libraries en Bluej
• se pueden especificar subpaquetes (subdirectorios):
- notación: paquete.subpaquete
• las clases de un paquete con nombre llevan como primera línea:
package nombrepaquete;
• el nombre de un paquete se suele poner en minúsculas
• evita problemas de portabilidad entre sistemas operativos que
distinguen o no minúsculas y mayúsculas
Prácticas de Programación
© M. Aldea y M. González
27/04/10
4
Tema 6. Modularidad y abstracción: aspectos avanzados
6.1 Paquetes
Paquetes con nombre (cont.)
Para usar clases de un paquete con nombre se usa import:
import fundamentos.Lectura; // permite utilizar
// la clase Lectura
import fundamentos.*; // permite utilizar todas
// las clases del paquete
OtraClase
fundamentos
Lectura
import fundamentos.Lectura
Escritura
uso directo
MiClase
Otras...
import fundamentos.*
Existe un paquete especial, el paquete java.lang
• contiene las clases básicas del lenguaje Java: Object, clases
envoltorio (Integer, Double, ...), String, StringBuilder...
• siempre está disponible: no hace falta utilizar import
Prácticas de Programación
© M. Aldea y M. González
27/04/10
Tema 6. Modularidad y abstracción: aspectos avanzados
Modificadores de acceso y paquetes
Modificadores de acceso para clases:
• <ninguno>: accesible desde el paquete
• public: accesible desde todo el programa
Modificadores de acceso para miembros de clases:
• <ninguno>: accesible desde el paquete
• public: accesible desde todo el programa
• private: accesible sólo desde esa clase
• protected: accesible desde el paquete y
desde sus subclases en cualquier paquete
Prácticas de Programación
© M. Aldea y M. González
27/04/10
6.1 Paquetes
UnaClase
+ atrPúblico
- atrPrivado
# atrProtegido
~ atrPaquete
+ metPúblico
- metPrivado
# metProtegido
~ metPaquete
5
6
Tema 6. Modularidad y abstracción: aspectos avanzados
6.2 Tipos de módulos de programa
6.2 Tipos de módulos de programa
Es habitual encontrarse estos tres tipos de clases:
• clases sin métodos: son simples contenedores de datos
• Ejemplo: clase con las coordenadas de un punto en el espacio
public class Punto {
public double x, y, z;
}
• clases sin estado: son contenedores de métodos relacionados
entre sí, y quizás también constantes estáticas
• Se llaman también librerías
• Ejemplo: la clase Math
• clases con datos privados y métodos públicos: se llaman
también tipos abstractos de datos
Prácticas de Programación
© M. Aldea y M. González
27/04/10
7
Tema 6. Modularidad y abstracción: aspectos avanzados
6.2 Tipos de módulos de programa
Tipo abstracto de datos (ADT)
La mayoría de las clases que hemos hecho durante el curso son
ADTs
• clases Alumno, Curso, Paciente, Complejo, ...
Un ADT sirve para encapsular
• una parte privada que almacena el estado del objeto
- implementada mediante los atributos privados
• una parte pública que proporciona las operaciones que es
posible realizar con el tipo de datos
- formada por los métodos públicos
Una de las principales ventajas de utilizar ADTs es que facilitan la
reutilización del código
• como veremos, la posibilidad de definir ADTs genéricos
facilitará aún más la reutilización del código
Prácticas de Programación
© M. Aldea y M. González
27/04/10
Tema 6. Modularidad y abstracción: aspectos avanzados
6.3 Módulos genéricos
6.3 Módulos genéricos
Algunas estructuras de datos tienen un comportamiento
independiente de los objetos sobre los que operan
• p.e. el comportamiento de una lista (insertar, extraer, ver su
tamaño, ...) es independiente del tipo de objetos que contiene
Lo ideal sería poder escribir el código de la clase
independientemente del tipo de objetos que vaya a contener
• permite reutilizar el código en distintas aplicaciones
Java nos proporciona un mecanismo para escribir clases
genéricas
• al escribir su código, la clase sobre la que operan queda
indeterminada
Al crear un objeto a partir de una clase genérica
• es preciso indicar la clase que quedó indeterminada
Prácticas de Programación
© M. Aldea y M. González
27/04/10
8
9
Tema 6. Modularidad y abstracción: aspectos avanzados
6.3 Módulos genéricos
Clases genéricas
Declaración de una clase genérica:
public class ClaseGenérica <T> {
// se pueden definir atributos y métodos como
// en cualquier clase no genérica
...
}
• T es el parámetro genérico: clase indeterminada de objetos
sobre la que opera ClaseGenérica
Por convenio, el nombre del parámetro genérico suele ser una
letra mayúscula:
• E: tipo del elemento en una lista, cola, ... (muy usado en las Java
Collections)
• T: tipo
• ...
Prácticas de Programación
Tema 6. Modularidad y abstracción: aspectos avanzados
Ejemplo de clase genérica
/**
* Almacén genérico
*/
public class Almacén <T> {
© M. Aldea y M. González
27/04/10
10
6.3 Módulos genéricos
// objeto almacenado (de tipo indeterminado)
private T contenido;
/** Mete un dato en el almacén */
public void almacena(T dato) {
contenido=dato;
}
/** Obtiene el dato almacenado */
public T obtiene() {
return contenido;
}
}
Prácticas de Programación
© M. Aldea y M. González
27/04/10
11
Tema 6. Modularidad y abstracción: aspectos avanzados
Instanciación de clases genéricas
6.3 Módulos genéricos
Cuando se crea (se instancia) un objeto de una clase genérica hay
que especificar el parámetro genérico
// crea un almacén de coches
Almacén<Coche> ac=new Almacén<Coche>();
// crea un almacén de doubles
Almacén<Double> ad=new Almacén<Double>();
Un objeto de una clase genérica
• puede usarse con objetos de la clase del parámetro genérico o
de sus subclases
• p.e. en una lista genérica instanciada para la clase Vehículo
podríamos meter objetos de sus subclases Coche, Barco,
Avión, ...
Prácticas de Programación
© M. Aldea y M. González
27/04/10
12
Tema 6. Modularidad y abstracción: aspectos avanzados
6.3 Módulos genéricos
Ejemplo de uso de clases genéricas
public static void main (String[] args) {
// crea dos objetos
Double d=new Double(5.0);
Coche c=new Coche("ibiza",Color.ROJO);
// crea un almacén de coches
Almacen<Coche> ac=new Almacen<Coche>();
// crea un almacén de doubles
Almacen<Double> ad=new Almacen<Double>();
// almacena objetos
ac.almacena(c);
ad.almacena(d);
ac.almacena(d); // ¡¡error de compilación!!
// obtiene los contenidos de los almacenes
Coche c1=ac.obtiene();
Double d1=ad.obtiene();
}
Prácticas de Programación
© M. Aldea y M. González
27/04/10
13
Tema 6. Modularidad y abstracción: aspectos avanzados
Parámetros genéricos restringidos
6.3 Módulos genéricos
En ocasiones puede ser interesante restringir el tipo del parámetro
genérico
• de forma que sólo pueda ser una clase o cualquiera de sus
subclases
Ejemplo:
public class Garaje <T extends Vehículo> {
... igual que la clase almacén ...
}
• T sólo puede ser la clase Vehículo o cualquiera de sus
subclases Coche, Barco, Avión, ...
Esto es un error de compilación:
Garaje<Double> g=new Garaje<Double>(); //¡¡ERROR!!
Prácticas de Programación
© M. Aldea y M. González
27/04/10
14
Tema 6. Modularidad y abstracción: aspectos avanzados
6.4 Introducción a las Interfaces
En ocasiones es interesante poder asegurar que una clase verifica
un “contrato”
6.4 Introducción a las Interfaces
• implementa un conjunto de métodos
Con este propósito Java define el concepto de interfaz
• una interfaz es similar a una clase abstracta que sólo puede
contener constantes y cabeceras de métodos
• no es posible crear objetos de una interfaz (igual que ocurría
con las clases abstractas)
Prácticas de Programación
© M. Aldea y M. González
27/04/10
15
Tema 6. Modularidad y abstracción: aspectos avanzados
6.4 Introducción a las Interfaces
Ejemplo de interfaz
public interface PuertoCom {
void envía(String str);
String recibe();
}
Clase que implementa la interfaz:
public class PuertoSerie implements PuertoCom {
@Override
public void envía(String str) {
código de envía
}
@Override
public String recibe(){
código de recibe
}
... otros métodos ...
}
Prácticas de Programación
© M. Aldea y M. González
27/04/10
Comentarios de: Prácticas de Programación - Tema 6. Modularidad y abstracción (0)
No hay comentarios