Publicado el 8 de Septiembre del 2018
461 visualizaciones desde el 8 de Septiembre del 2018
109,5 KB
13 paginas
Creado hace 15a (23/04/2009)
Metodología y Tecnología de la Programación
Prácticas Segunda Parte - Junio 2009
Fundamentos Básicos (Prácticas 1 y 2)
Realización de prácticas
Las prácticas de la segunda parte se realizarán en grupos de una o dos personas.
Entrega de prácticas
Las prácticas se entregarán mediante la aplicación SUMA.
La entrega la realizará cada alumno de forma individual, aunque la práctica se haya
hecho en grupo de dos personas.
Cada alumno descargará en la zona compartida los siguientes ficheros:
• Los ficheros con el código fuente java: *.java
• Los ficheros con el código compilado: *.class
• Los ficheros con la documentación generada: *.html
Entrevista de prácticas
Los alumnos podrán realizar la entrevista, una vez entregadas las prácticas, en las
fechas señaladas por la convocatoria oficial.
La entrevista será individual, pero deberán asistir juntos los miembros de un mismo
grupo.
1
1. Programación basada en objetos con Java
Objetivos de la práctica.
Entender desde el punto de vista teórico-práctico los siguientes conceptos:
Clases y Objetos: class, new.
Excepciones: Exception, try, catch.
Genericidad: Object, Comparable, interface.
Documentación: @param, @throws, @return.
Entrega de la práctica.
El alumno deberá entregar los siguientes ficheros:
Elemento.java: Implementación del TDA Elemento que implementa la interface Comparable
(método compareTo) y sobreescribe el método toString.
UtilVector.java: Clase que utiliza vectores de objetos de las clases Elemento e
Integer.
Clases compiladas (ficheros *.class).
Documentación API (ficheros *.html) de todas las clases.
2
1.1. Clases y Objetos en Java
Realizar la clase Elemento que implemente el TDA Elemento, cuya especificación y
métodos en Java se indican en las figuras 1 y 2.
Realizar la clase UtilVector mostrada en la figura 3 teniendo en cuenta lo siguiente:
• El método leeElemento realiza la lectura desde teclado de un vector de objetos
de la clase Elemento.
Para realizar la lectura desde teclado de una forma sencilla se facilita la clase
auxiliar Util. En concreto, el método leeEntero() devuelve un entero leído por
teclado.
Las operaciones de lectura por teclado pueden causar excepciones de entrada/salida
(IOException) o excepciones del formato numérico (NumberFormatException),
las cuales deben tratarse.
• El método imprime visualiza en pantalla un vector de objetos de la clase Elemento.
• El método ordena clasifica de forma creciente un vector de objetos de la clase
Elemento. Para la ordenación del vector se puede implementar cualquier método
de ordenación simple con tiempo de ejecución O
• El método main debe leer de teclado un vector de objetos de la clase Elemento,
imprimirlo por pantalla, ordenarlo y volverlo a imprimir ordenado; para ello debe
utilizar los métodos leeElemento, imprime y ordena.
n2
.
Elemento=tipo de datos con operaciones crea, valor.
DESCRIPCI ÓN:
Los valores del TDA Elemento son números enteros. El TDA Elemento es inmutable.
OPERACIONES:
crea(n:entero) devuelve (Elemento)
efecto: Devuelve un elemento con valor n.
valor(E:Elemento) devuelve (entero)
efecto: Devuelve el valor del elemento E.
Figura 1: TDA Elemento: Especificación Informal.
3
Clase Elemento
class Elemento
Constructores
Elemento(int n)
Métodos
int valor()
Figura 2: TDA Elemento: Métodos en Java.
import java.io.*;
public class UtilVector {
static public Elemento[] leeElemento(int n) throws IOException, NumberFormatException {
...
}
static public void imprime(Elemento[] e) {
...
}
static public void ordena(Elemento[] e) {
...
}
static public void main(String args[]) {
...
}
} // fin class UtilVector
Figura 3: Clase para la utilización de vectores de objetos de la clase Elemento.
4
1.2. Herencia y Polimorfismo: Genericidad
Ampliar la clase Elemento de forma que:
• Sobreescriba el método toString.
• Implemente la interface Comparable (método compareTo).
Amplizar la clase UtilVector, como muestra la figura 4. Para ello:
• Añadir un método leeInteger que realice la lectura desde teclado de un vector
de objetos de la clase Integer.
• Modificar el método imprime para que pueda imprimir vectores de objetos genéri-
cos; en esta práctica se utilizará, particularmente, con vectores de objetos de la
clase Elemento e Integer.
• Modificar el método ordena para que pueda clasificar de forma creciente vectores
de objetos parcialmente genéricos, es decir, objetos de clases que implementen la
interface Comparable; en esta práctica se utilizará, particularmente, con vectores
de objetos de las clases Elemento e Integer.
• El método main debe leer desde teclado un vector de objetos de la clase Elemento,
imprimirlo por pantalla, ordenarlo y volverlo a imprimir ordenado. A continuación
debe realizar lo mismo con un vector de objetos de la clase Integer. Usar los
métodos leeElemento y leeInteger para realizar la lectura de los vectores.
import java.io.*;
public class UtilVector {
static public Elemento[] leeElemento(int n) throws IOException, NumberFormatException {
...
}
static public Integer[] leeInteger(int n) throws IOException, NumberFormatException {
...
}
static public void imprime(Object[] e) {
...
}
static public void ordena(Comparable[] e) {
...
}
static public void main(String args[]) {
...
}
} // fin class UtilVector
Figura 4: Clase para la utilización de vectores de objetos de las clases Elemento e Integer.
5
1.3. Documentación
Documentar las clases Elemento y UtilVector, implementadas en las prácticas anteriores,
utilizando la utilidad javadoc. Para ello:
Documentar al principio la descripción de la clase.
Documentar, para cada método público:
• su efecto,
• parámetros mediante el comando @param,
• resultado del método mediante el comando @return,
• excepciones mediante el comando @throws.
6
2.
Implementaciones Robustas de TDAs Parcialmente Genéricos
Objetivos de la práctica.
Entender desde el punto de vista teórico-práctico los siguientes conceptos:
Representaciones enlazadas.
Representaciones contiguas.
Implementación de TDAs parcialmente genéricos.
Implementaciones robustas. Definición de excepciones.
Interfaces.
Entrega de la práctica.
El alumno deberá entregar los siguientes ficheros:
ConjuntoContiguo.java: Implementación robusta con representación contigua del
TDA Conjunto parcialmente genérico.
ConjuntoEnlazado.java: Implementación robusta con representación enlazada del
TDA Conjunto parcialmente genérico.
ConjuntoException.java: Excepción para la implementación robusta del TDA Con-
junto.
ConjuntoInterface.java: Interface para el TDA Conjunto parcialmente genérico.
UtilConjunto.java: Clase principal que utiliza el TDA Conjunto parcialmente genéri-
co.
Clases compiladas (ficheros *.class) de las clases anteriores.
Documentación API (ficheros *.html) de las clases anteriores.
7
2.1.
Implementación del TDA Conjunto con Representación
Contigua
Realizar la implementación en Java del TDA Conjunto en una clase ConjuntoContiguo
teniendo en cuenta los siguientes puntos:
• El TDA Conjunto sigue la especificación y métodos en Java indicados en las
figuras 5 y 6.
• El TDA Conjunto debe implementarse mediante una representación contigua.
• Todos los métodos de la clase ConjuntoContiguo deben tener un tiempo de eje-
cución O (1), excepto inserta y pertenece que tendrán un tiempo de ejecución
O (n).
• Sobreescribir el método toString en la clase ConjuntoContiguo de forma que
devuelva una cadena de caracteres con los elementos del conjunto ordenados cre-
cientemente. Este método deberá tener un tiempo de ejecución O (n).
Completar la clase UtilConjunto mostrada en la figura 7 que utiliza la clase ConjuntoContiguo.
El método imprimeOrdenado debe utilizar los métodos maximo y suprimeMaximo de
la clase ConjuntoContiguo para implementar la operación en un tiempo de ejecución
O (n).
8
Conjunto=tipo de datos es crea, inserta, vacio, pertenece, suprime maximo, maximo.
DESCRIPCI ÓN:
Los valores del TDA Conjunto son conjuntos de elementos del tipo Elemento. El TDA Conjunto es inmutable.
OPERACIONES:
crea() devuelve (Conjunto)
efecto: Devuelve un conjunto vacío.
inserta(C:Conjunto, E:Elemento) devuelve (Conjunto)
requerimientos: E /∈C.
efecto: Devuelve un conjunto con los elementos de C y el nuevo elemento E.
vacio(C:Conjunto) devuelve (booleano)
efecto: Devuelve cierto si C es vacío y falso en caso contrario.
pertenece(C:Conjunto, E:Elemento) devuelve (booleano)
efecto: Devuelve cierto si E pertenece a C y falso en caso contrario.
suprime maximo(C:Conjunto) devuelve (Conjunto)
requerimientos: C no es vacío.
efecto: Devuelve un conjunto resultado de eliminar el máximo del conjunto C.
maximo(C:Conjunto) devuelve (Elemento)
requerimientos: C no es vacío.
efecto: Devuelve el elemento máximo de C.
Figura 5: TDA Conjunto: Especificación Informal.
Clase ConjuntoContiguo
class ConjuntoContiguo
Constructores
ConjuntoContiguo()
ConjuntoContiguo(ConjuntoContiguo c, Elemento e)
Métodos
boolean vacio()
boolean pertenece(Elemento e)
ConjuntoContiguo suprimeMaximo()
Elemento maximo()
String toString()
Figura 6: TDA Conjunto: Métodos en Java.
9
import java.io.*;
public class UtilConjunto {
static private void imprimeOrdenado(ConjuntoContiguo c) {
// Imprime en pantalla los elementos del conjunto c ordenados decrecientemente.
...
}
static public void main(String args[]) {
...
// Construye un conjunto de la clase ConjuntoContiguo.
// Imprime el conjunto ordenado crecientemente mediante el método toString del conjunto.
// Imprime el conjunto ordenado decrecientemente mediante el método imprimeOrdenado.
...
}
} // fin class UtilConjunto
Figura 7: Clase para la utilización de la clase ConjuntoContiguo.
10
2.2.
Implementación Robusta del TDA Conjunto Parcialmente
Genérico con Representación Contigua
Realizar las siguientes modifica
Comentarios de: metodología y Tecnología de la Programación - prácticas - segunda parte - Fundamentos Básicos (0)
No hay comentarios