Download Prueba de Java - Universidad de La Serena

Document related concepts
no text concepts found
Transcript
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
0.- Diseñe una clase para manipular nº complejos. La cual debe incluir atributos, constructores,
métodos para sumar, restar, multiplicar y dividir nº complejos y una clase principal para testearlo.
Puede usar cualquier clase de las vistas para el ingreso de datos.
1.- Definir una clase Rectangulo con dos atributos, base y altura de tipo entero, y dos métodos,
uno que devuelva la base y otro que devuelva la altura.
2.- Añada ahora un constructor que permita crear un Rectangulo a partir de una base y una altura
dada.
3.- ¿Qué es un constructor por defecto? ¿Cuál es la misión de un constructor?
4.- Sobrecargue el constructor de la clase creada Rectangulo, utilizando un constructor que no lleve
ningún parámetro.
5.- Muestre un constructor que pueda sustituir al constructor generado en 2.- Si nos fijamos ese
constructor tiene dos parámetros uno llamado base y otro altura. La misión del nuevo constructor
es inicializar los atributos base y altura, que por casualidad tienen el mismo nombre que los
parámetros del constructor. ¿Que hacer para que todo funcione correctamente y asegurar que
estamos accediendo a los miembros del objeto y no a los parámetros del constructor.?.
6.- Usando lo anterior, cree ahora dos objetos rectángulos e imprima las bases y las alturas de estos
por pantalla.
7.- Como queda la clase principal.?.
8.- Codifique ahora un método en la clase Rectangulo que devuelva el área de éste. Imprima por
pantalla el área de los dos objetos rectángulos creados.
9.- ¿Cuál es la interfaz de la clase Rectangulo actualmente?
10.- ¿Qué ocurre si el método obtenerArea() es privado? y ¿si fuera protected?
11.- ¿Qué tipos de memoria utiliza Java cuando ejecuta un programa? ¿Para qué sirve cada uno de
esos tipos de memoria?.
12.- ¿Cuál es la interface de la clase Rectangulo actualmente?
13.-¿Dentro de los conceptos vistos en clases, que tipo de herencia posee Java.?. Que otro tipo de
herencia existe.?
14.- ¿Cómo la representa a través de UML?.
15.- ¿Qué ocurre si se llama a un método sobre un objeto que no ha sido creado con new? ¿Hay error
en tiempo de compilación?.
16.- ¿Qué diferencia existe entre referencia y objeto? ¿Para qué se utiliza null?
17.- Suponga que Kiwi es el nombre de una clase y que fruta es una variable de tipo Kiwi. Qué
sentido tiene la declaración fruta= new Kiwi();?. Tiene sentido hacerla?. Explicar.
1
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
18.- Suponga que la clase Tigre es una subclase de la clase Gato. Es legal la declaración
Tigre t= new Gato(); ?. Explicar.
19.- Se pueden crear clases a partir de la nada?.
20.- Puede un objeto ser una subclase de otro objeto?
21.- Un interface es parecido a una clase abstracta en Java. Se le pide que nombre las diferencias,
entre interface y las clases abstractas.
22.- Construya una clase que a través de una interface se ayuda para imprimir el área de un
cuadrado. Es decir, si se le ingresa 5 entrega 25.- Para tal efecto, construya la interface Calcular, la
clase Cuadrado y la clase testeadora.
23.- Cuál es el rol de la interface?.
24.- Sintaxis de la Interface. Examinar la salida del ejemplo.
[Modificador] interface Interface
{
[final] [Modificador] Tipo Variable = Valor;
[abstract] [Modificador] Tipo Metodo();
}
[Modificador] class Su_Clase
[extends Super_Clase]
implements Interface
{
// Declaraciones
}
EJEMPLO
interface SuInterface
{
public String s = "Programando.NET\n";
public void print();
}
class Su_Clase implements SuInterface
{
public void print()
{
System.out.print(s);
}
}
public class SuTest
{
public static void main(String[] args)
{
Su_Clase objeto = new Su_Clase();
objeto.print();
}
}
25.- Observar que en esta clase no fue necesario dejar cada uno de los integrantes en sendos
archivos separados, porque ocurre esto?. Compararlo con 21.26.- Aquí se da otro ejemplo de Interface, ¿Cuál es la salida?.
OTRO EJEMPLO
Escuela Ingeniería en Computación, Universidad de La Serena.
2
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
interface SuInterface1
{
public void print1();
}
interface SuInterface2
{
public void print2();
}
class Su_SuperClase
{
protected String s = "Programando.NET";
}
class Su_SubClase extends Su_SuperClase implements SuInterface1,SuInterface2
{
public void print1()
{
System.out.println(s);
}
public void print2()
{
System.out.println("Programando.CL");
}
}
public class Su_Clase2
{
public static void main(String[] args)
{
Su_SubClase objeto = new Su_SubClase();
objeto.print1();
objeto.print2();
}
}
27.- Aquí se da otro ejemplo de Interface, ¿Cuál es la salida?.
OTRO EJEMPLO
interface SuInterface
{
public void print();
}
class SuSuperClase implements SuInterface
{
protected String s = "Programando.NET";
public void print()
{
System.out.println(s);
}
}
class SuSubClase extends SuSuperClase
{
}
public class Su_Clase3
{
Escuela Ingeniería en Computación, Universidad de La Serena.
3
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
public static void main(String[] args)
{
SuSubClase objeto = new SuSubClase();
objeto.print();
}
}
28.- Se sabe que Java no posee herencia múltiple, pero sin embargo, se las arregla para implementar
la herencia múltiple. ¿Cómo logra darse cuenta Ud. que esta frente a la implementación de una
herencia múltiple en Java.?.
29.- Realice un esquema típico de herencia múltiple.
30.- Notar que las interface tienen un comportamiento similar a las clases en el sentido que ellas se
pueden extender.¿Cómo logra darse cuenta Ud. que esta frente a la implementación de una herencia
a nivel de interface en Java.?.
31.- Dado el Modelamiento UML, se pide llevarlo a código Java.
nombreEntidad
<<interface>>
Persona
nombre: String
Alumno
getNombre( ) : String
setNombre(String newNombre): boolean
matricNº: String
getNombre: String
setNombre(String newNombre):
boolean
getMatricNº( ) : String
setMatricNº(String newMN): boolean
32.- Modelar problemas (con UML)- agencia de viajes
Una agencia de viajes necesita una aplicación para la gestión de sus viajes. Los viajes se identifican
por un código. Para cada viaje se quiere poder informar el destino, la fecha de salida, la fecha de
regreso, el precio y el guía del viaje (único para cada viaje). La agencia dispone de un número de
guías que asigna dependiendo de su disponibilidad. La información que se tiene de ellos es su
nombre y apellidos, dni, teléfono y especialidad. Para un guía determinado la agencia quiere poder
consultar su teléfono y su especialidad. La agencia también quiere tener una relación de clientes de
cada viaje. De cada cliente tiene el nombre, apellidos, DNI, teléfono y viaje que ha contratado. Los
datos que quiere obtener para cada cliente son su número de teléfono y el viaje en el que está
apuntado.
33.- Dado el código. Determinar el diagrama de clases y su modelo
4
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
34.- Dado el diagrama de clases y su modelo. Determinar el código en Java.
35.- Un Libro es caracterizado a través del nombre del autor, título del Libro y los datos de la
editorial. Este último, debe comprender el nombre de la editorial, el nº correspondiente a la edición
y el año de publicación del mismo.
(a) Representar la clase Libro en UML y defínala en Java. Incorporar también la definición de un
5
constructor.
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
(b) Se debe producir un objeto de la clase Libro, la que esta representado por ejemplo, M. Broy:
“Informatik: Eine grundlegende Einfuehrung. Band 1. Programmierung und Rechnerstrukturen”,
2. Auflage, Springer (1998).
Se le pide que represente este objeto en UML e instancielo en Java. El objeto debe ser descrito por
el nombre broyInfo1.
36.- Defina adecuadamente las clases en Java que se derivan del siguiente diagrama de clases UML
(declare las variables de instancia necesarias para representar los objetos de las distintas clases que
aparecen en el diagrama).
37.- Dada las clases siguientes. Se pide, señalar la salida que se espera. ¿Donde se ubica el
polimorfismo?.
class Traje
{
public String color;
String conocer()
{
return "No tengo idea de moda";
}
}
class Calcetin extends Traje
{
String conocer()
{
return "Ojala de Algodon";
}
}
class Pantalon extends Traje
{
String conocer()
{
return "De color azul";
}
}
public class PolimorfismoDemo
{
public static void main( String args[] )
{
Traje t[] = new Traje[4];
Escuela Ingeniería en Computación, Universidad de La Serena.
6
Programación Orientada a Objetos
t[0]
t[1]
t[2]
t[3]
=
=
=
=
new
new
new
new
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
Calcetin();
Pantalon();
Pantalon();
Calcetin();
ConocerSalida( t );
}
static void ConocerSalida( Traje t[] )
{
for ( int i=0; i<t.length; i++ )
System.out.println( t[i].conocer() );
}
}
38.- Recordar que el polimorfismo es un término dentro de la POO que se utiliza para describir la
situación en donde un nombre puede referirse a diferentes métodos. El polimorfismo en general, nos
ayuda a hacer el programa más flexible, por que en el futuro podemos añadir nuevas clases
derivadas, sin que cambie para nada el método definido. Existe el polimorfismo tanto en la
“sobrecarga” como en el “reemplazo”. Para ejemplificar, este último, se le pide que construya una
super clase Animales.java, que hereda las subclases de Gato, Perro, Cerdo u otro, y que sea
capaz de implementar una interface para que se comuniquen o se expresan los animales de la
subclase. Por ejemplo, la salida debería verse así..
Es decir, construir las clases Animales, Gato, Cerdo, u otra, además de la interface, que la
puede llamar Comunicable().Comunicable es una interface abstract, que define el método
comunicarse(), por el cual se implementan las subclases de Animales. Además, se sugiere añadir
la clase Alumno_Pajaro a la jerarquía, y pasar un objeto de dicha clase a la función comunicarse()
para saber como se comunican.
39.- Recordar que si un método sobreescribe un método de su superclase, se puede utilizar la
palabra clave super para eludir la versión sobreescrita de la clase e invocar a la versión original del
método en la superclase. Del mismo modo, se puede utilizar super para acceder a variables miembro
de la superclase. Este ejemplo sirve de ilustración del uso de "super" para acceder al constructor de
la clase padre. También ilustra el uso de "super" para resolver la ambigüedad entre las variables
locales y de instancia en la superclase. ¿Cuál es la salida que se obtiene?
class base {
int dBase;
public base() {
Escuela Ingeniería en Computación, Universidad de La Serena.
7
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
System.out.print( "Dentro del Constructor de la clase base \n" );
System.out.println( "Asignando a dBase 100" );
dBase = 100;
}
}
class Ejem_super extends base {
int dSubClase;
// Constructor de la Subclase
public Ejem_super() {
// Llamada al constructor de la clase base
super();
System.out.print( "Dentro del Constructor de la subclase \n" );
System.out.println( "Asignando a dSubClase 200" );
dSubClase = 200;
}
// Metodo para mostrar como se resuelve la ambiguedad entre
// una variable local y una variable de instancia que tienen
// el mismo nombre
void miMetodo() {
// Se crea una variable local para ocultar la variable de
// instancia de la clase base
int dBase = 300;
System.out.println( "Dentro del metodo miMetodo" );
ystem.out.println( "El valor de la variable Local es " + dBase );
System.out.println("El valor de la variable de Instancia es"+ super.dBase);
}
public static void main( String args[] ) {
Ejem_super obj = new Ejem_super();
System.out.println( "Dentro de main" );
System.out.println( "La variable de instancia en la clase contiene "
+ obj.dBase);
System.out.println( "La variable de instancia en la subclase contiene"
+ obj.dSubClase);
// Llamada al metodo para mostrar el uso de super en la resolucion de la
// ambiguedad
obj.miMetodo();
}
}
40.- El siguiente método ordena una lista de números decimales por el método de la burbuja:
static void ordenar (double lista[]) {
for (int i = 0; i < lista.length; i++)
for (int j = lista.length-1; j > i; j--)
if (lista[j] < lista[j-1]) intercambiar (lista, j, j-1);
1
2
3
4
}
a) Generalizar la función ordenar para que ordene listas de cualquier tipo de datos sobre los que
tenga sentido definir una relación de orden. Para ello, introducir una mínima modificación
en las líneas 1 y 4, y definir las clases y/o interfaces adicionales que sean necesarias.
Diagrama de clases, UML y el lenguaje Java.
EJEMPLO
Dado el diagrama de clases en UML, bosquejar las clases en Java.
8
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
9
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
10
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
clase Principal
Aplicación 1
Se desea diseñar un sistema de gestión de matrículas y personal docente para la ULS. Desde el
punto de vista de la matrícula, una Universidad puede considerarse como un conjunto de
estudiantes, a cada uno de los cuales se le asignará un número de identificación personal. Los
estudiantes podrán asistir a cierto número de cursos, cada uno de los cuales será impartido por un
profesor. Desde el punto de vista del personal docente, la Universidad se divide en departamentos,
cada uno de los cuales estará formado por varios profesores, uno de los cuales actuará como director
del departamento. Cada profesor sólo podrá pertenecer a un departamento. Los departamentos
tienen la responsabilidad de impartir uno o más cursos. El sistema permitirá añadir o borrar
estudiantes, departamentos y profesores, así como realizar consultas sobre cada uno de estos
estamentos.
Se pide:
Construir un diagrama de clases UML de la aplicación.
Aplicación 2
Codifique en Java este diagrama de clases. La sintaxis es la usual para cuando se requiere formar un
equipo de fútbol. Repasar los conceptos de la POO. Desde luego que debería generar una clase
principal en donde se obtiene finalmente la alineación del equipo.
11
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
Aplicación 3
Se muestran a continuación 2 formas de representar una Interface, una en forma semántica y otra en
forma de diagrama UML. ¿Cómo es la representación en Java.?
12
Escuela Ingeniería en Computación, Universidad de La Serena.
Programación Orientada a Objetos
Repasando conceptos
Prof. Dr. Eric Jeltsch F.
13
Escuela Ingeniería en Computación, Universidad de La Serena.