PDF de programación - Prácticas de Programación - Tema 6. Modularidad y abstracción

Imágen de pdf Prácticas de Programación - Tema 6. Modularidad y abstracción

Prácticas de Programación - Tema 6. Modularidad y abstraccióngráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.416 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
  • Links de descarga
http://lwp-l.com/pdf982

Comentarios de: Prácticas de Programación - Tema 6. Modularidad y abstracción (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad