Upload
tranngoc
View
228
Download
5
Embed Size (px)
Citation preview
GUÍA DE EJERCICIOS PRÁCTICOS
2015
Ing. José Oscar Mugetti Mare
PARADIGMA ORIENTADO A OBJETO
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 1 / 16
TRABAJO PRÁCTICO 1
1. En la figura siguiente Mueble es una clase. Mesa y Sillas son subclases (hijos) y así
sucesivamente. Como representaría la jerarquía por medio de textos sangrados.
2. En una jerarquía de herencia orientada a objetos, tal como la que se muestra en el
gráfico precedente en que cada nivel es una forma más especializada del anterior.
Dé tres ejemplos mas de una jerarquía encontrada en la vida diaria que tenga la
misma propiedad.
3. Tome un problema del mundo real, como la acción de enviar flores a la abuela,
vista en clase, y describa la solución al problema en términos de objetos y
responsabilidades.
4. Describa las responsabilidades de una organización que comprenda al menos seis
tipos de individuos. (Por ejs. En una escuela: estudiantes, profesores, director,
conserje - en un negocio: secretaria, gerente, trabajadores...) para cada de
individuos, describa responsabilidades y colaboradores.
5. Para cada uno de los pares siguientes, diga si la relación es es-un o tiene-un: a. casa - techo b. conserje - empleado c. ratón digital - dispositivo de entrada d. menú - ventana e. conjunto - colección f. Describa luego 5 (cinco) pares más de cada una de las relaciones.
6. Entre dos objetos puede existir todo tipo de relaciones semánticas, que dependen
de la aplicación concreta en la que participan dichos objetos. Veamos un ejemplo:
Supongamos que vamos a construir un diccionario on-line, un diccionario
informatizado que permita al usuario obtener sobre la pantalla la definición de
una palabra cualquiera. Supongamos que, en dicho diccionario, las palabras son
objetos y que la organización jerárquica es la que procede de forma natural de la
estructura de nuestros conocimientos sobre el mundo. Estableciendo una relación
Trabajo (trazo discontinuo) ¿Cuáles serán las preguntas que se podrán responder
con las relación.
Mueble
Mesa
Mesa -1
Mesa -2
Silla
Silla -1
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 2 / 16
7. Veamos el caso de una jerarquía compleja, como la de la siguiente figura y los
objetos heredan cierta propiedad o cierto método. Paro ello tendremos que
analizar si lo poseen algunos de sus padres, y si no lo tienen a los padres de estos y
así sucesivamente , o bien si lo poseen dos de sus antecesores, deberá analizar y
explicar las siguientes consideraciones:
a. Que predomine en primer antepasado en el que aparezca en método.
b. Que predomine el antepasado cuyo parentesco con el objeto considerado sea
más próximo.
c. Que no predomine ninguno de los dos, sino que el objeto herede ambas
propiedades simultáneamente considerando lo siguiente:
i. Que el objeto herede la disyunción de los dos valores.
ii. Que el objeto herede la conjunción de los dos valores.
iii. Que el objeto herede un valor predominante, pero no en función del
antepasado sino en función del valor mismo.
Temas
Vida
biologia
Zoologia
insectos
Himenopteros
Apidos
Abejas
medicina
Mundo
Geologia Fisica
Optica
Gravitación
Quimica
Hombre
Geografia Historia Biografia
Newton
A
J
I H
D
G F E
C B
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 3 / 16
¿Cuántos atributos tiene la clase Cirujano?: ___
¿Cuántos atributos tiene la clase MedicoDeCabecera?: ___
¿Cuántos métodos tiene la clase Medico?: ____
¿Cuántos métodos tiene la clase Cirujano?: ____
¿Cuántos métodos tiene la clase MedicoDeCabecera?: ____
¿Puede un MedicoDeCabecera tratar pacientes?: ____
¿Puede un MedicoDeCabecera hacer incisiones?: ____
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 4 / 16
TRABAJO PRÁCTICO 2
1. Con un editor de texto cualquiera editar un fichero llamado: HolaMundo.java
/* La clase HolaMundo simplemente muestra el mensaj e “Hola mundo” por pantalla */ class HolaMundo {
public static void main (String [] args ) { System .out .println (“Hola mundo !” ); }
}
a. Compilación
C:\> dir
HolaMundo.java
C:\> javac HolaMundo.java
C:\> dir
HolaMundo.class HolaMundo.java
b. Ejecución
C:\> dir
HolaMundo.class HolaMundo.java
C:\> java HolaMundo
Hola mundo!
2. Ejemplo
public class MiClase { int i ; public MiClase () { i = 10; } public void sumaAi ( int j ){ i = i + j ; } }
3. Ejemplo (Promedio.java)
public class Promedio { public static void main (String [] args ) { int i = 11, j = 20; double a = (i + j ) / 2.0 ; System .out .println ("El valor de i es:" + i + "y el de j es: " + j ); System .out .println ("El promedio es de: " + a ); } }
4. Control de Flujo (Bucles) public class Bucles { public static void main (String [] args ) { int cont1 = 0; while(cont1 < 3) { System .out .println (cont1 ); cont1 ++; } int cont2 = 0; do { System .out .println (cont2 ); cont2 ++; } while(cont2 < 2);
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 5 / 16
for(int cont3 = 0; cont3 < 3; cont3 ++) { System .out .println (cont3 ); } } }
5. Desarrollar un programa que muestre por pantalla los números primos del 1 al 1000 y
todos los años bisiestos entre el año 2000 y el año 3000.
public class Practica { public static void main (String [] args ) { //Mostrar los números primos del 1 al 1000. boolean sw ; int contador = 0; System .out .println ("Los números primos del 1 al 1000 son:" ); for(int i =1; i <1001; i ++) { sw = true; for(int j =i ; j >0; j --) { if(i %j == 0 && j != i && j ! = 1) { sw = false; break; } } } if(sw) { System .out .println (i + "," ); Contador ++; } } System .out .println ("" ); System .out .println ("Hay: " + contador +
"números primos entre el 1 y el 1000." ); //Mostrar los años bisiestos del 2000 al 3000. contador = 0; System .out .println ("Los años bisiestos del 2000 al 3000 son:" ); for(int i =2000; i <3001; i ++) { if((i %4 == 0 && i %100 != 0) || i %400 == 0) { System .ut .println (i + "," ); contador ++; } } System .out .prinln ("" ); System .out .printl ("Hay:" + contador +
"años bisiestos entre el 2000 y el 3000." ); } }
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 6 / 16
TRABAJO PRÁCTICO 3: HERENCIA 1. Ejemplo Figuras geométricas
Figura
getArea (): double
getPerimetro (): double
Rectangulo Elipse ancho: double
alto: double
Atributos/Variables
de la clase semiMayor: double
semiMenor: double
Rectangulo (double ancho, double alto)
getArea (): double
getPerimetro (): double
getAncho (): double
Constructor Métodos/Funciones
u Operaciones de la
clase
Elipse (double a, double b)
getArea (): double
getPerimetro (): double
getMayor (): double
Cuadrado Circulo
Cuadrado (double lado)
getLado (): double
Circulo (double radio)
getRadio(): double
a. Fichero Figura.java
public abstract class Figura { public abstract double area (); public abstract double perimetro (); }
b. Fichero Rectangulo.java
public class Rectangulo extends Figura { // Variables de la clase private double ancho ; private double alto ;
// Métodos de la clase // Método constructor public Rectangulo (double ancho , double alto ) { this.ancho = ancho ; this.alto = alto ; }
public double getArea () { return alto * ancho ; }
public double getPerimetro () { return 2 * (alto + alto ); }
public double getAncho () { return ancho ; }
public double getAlto () { return alto ; } }
Clase Abstracta
(No se puede instanciar pero se
puede definir métodos y el
constructor)
Relación de Herencia
La palabra clave this hace
referencia al objeto o
instancia actual
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 7 / 16
c. Fichero Cuadrado.java
public class Cuadrado extends Rectangulo { // Métodos de la clase // Método constructor public Cuadrado (double lado ) { super(lado , lado ); }
// Método que retorna el valor del Atributo o miemb ro “ancho” public double getLado () { return super.getAncho (); } }
d. Fichero Elipse.java
public class Elipse extends Figura { // Variables de la clase protected double semiMayor ; protected double semiMenor ;
// Métodos de la clase // Método constructor public Elipse (double a , double b ) { if (a >= b ) { semiMayor = a ; semiMenor = b ; } else { semiMayor = b ; semiMenor = a ; } } public double getArea () { return Math .PI * semiMayor * semiMenor ; }
public double getPerimetro () { return Math .PI * (semiMayor + semiMenor ); }
public double getMayor () { return semiMayor ; }
public double getMenor () { return semiMenor ; } }
a. Fichero Circulo.java
public class Circulo extends Elipse { // Métodos de la clase // Método constructor public Circulo (double radio ) { super (radio , radio ); }
public double getRadio () { return semiMayor ; } }
La palabra clave super hace
referencia a la superclase de
la clase que se emplea
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 8 / 16
2. Ejemplo Animales (corregir)
Animal
miVelocidad: int
miNombre: String
Animales: static int
Animal(int vel, String nom)
saluda (): void
cuantosAnimales(): void
corre (long distancia): void
Acuatico Tortuga
marino: boolean deTierra: boolean
Acuatico(int vel, String nom, boolean mar)
saluda (): void
Tortuga(int vel, String nom, boolean tie)
saluda (): void
class Animal { int miVelocidad ; String miNombre ;
public Animal (int vel , String nom ) { animales ++;
miNombre = nom; miVelocidad = vel ; };
public void saluda () { System .out .println ("Hola, soy " + miNombre ); }
public static void cuantosAnimales () { System .out .println ("Hay " + animales + " animales" );
}
public void corre (long distancia ) { for (long i =0; i <distancia ;i ++){ for (long j =0; j <100000000 ; j += miVelocidad ){;} System .out .print (" " + miNombre ); } System .out .println ("\n" + miNombre +" ha llegado !!!" ) }
}
class Acuatico extends Animal { boolean marino ;
public Acuatico (int vel , String nom , boolean mar ){ super(velocidad , nom); marino =mar; // los animales Acuaticos llevan prefijo "A_" miNombre = "A_" + miNombre ; }
public void saluda () { super.saludar (); System .out .println (" yo soy acuático." ); }
}
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 9 / 16
class Tortuga extends Animal { boolean tierra ;
public Tortuga (int velocidad , String nombre , boolean tierra ){ super(velocidad , nombre ); tierra = tierra ; // las tortugas de tierra son el doble de veloces if (deTierra ) miVelocidad *=2; }
public void saluda () { saludar ();
System .out .println ("y mi velocidad es " + miVelocidad ); if (deTierra ) System .out .print ("y soy una tortuga de tierra\n" ); else System .out .print ("y soy una tortuga de mar\n" ); }
}
class Main { public static void main (String arg []) { Animal perro = new Animal (5); perro .saluda (); Animal .cuantosAnimales ();
Acuatico ballena = new Acuatico (1,"B1" ,true); ballena .saluda ();
laLiebre = new Animal (5,"L" ); laLiebre .saluda ();
Tortuga laTortuga1 = new Tortuga (1,"T1" ,false); Animal laTortuga2 = new Tortuga (1,"T2" ,true); laTortuga1 .saluda (); laTortuga2 .saluda (); Animal .cuantosAnimales ();
System .out .println ("\nComienza la carrera:\n" ); laLiebre .corre (10); laTortuga1 .corre (10); laTortuga2 .corre (10); }
}
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 10 / 16
3. Ejemplo Turno de médico
Medico
-matricula: int
-nombre: String
-especialidad: String
+getMatricula: int
+getNombre: String
+getEspecialidad: String
a. Según el diagrama UML anterior, definir las clases Paciente, Medico y Turno.
b. Crear una clase llamada ReservaTurnos que:
i. Instancie dos pacientes.
ii. Instancie dos médicos.
iii. Instancie un turno para el paciente 1 del medico 2 a las 16 hrs.
iv. Instancie un turno para el paciente 2 del medico 1 a las 18 hrs.
v. Suspenda el turno anterior, colocando su estado en “Desocupado”.
Medico
-matricula: int
-nombre: String
-especialidad: String
+getMatricula: int
+getNombre: String
+getEspecialidad: String
Turno
-nroOrden: int
-fecha: String
-hora: String
-paciente: Paciente
-medico: Medico
-estado: String
+getNroOrden: int
+getFecha: String
+getHora: String
+getPaciente: Paciente
+getMedico: Medico
+getEstado: String
+actualizarEstado(estado: String)
Nota: se deberá mostrar los datos principales de los objetos a medida que sean creados,
ejemplo: “El paciente Maria reservo el turno el dia 05/11/2003 a las 16:00 hrs. para el
Dr. Pirulo”.
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 11 / 16
TRABAJO PRÁCTICO 4: Lista 1. Ejemplo
Cliente
nombre: String
apellido: String
direccion: String
Cliente(nom: String, ap: String, dir: String)
getNombre(): String
getApellido(): String
getDireccion(): String
public class Cliente { private String nombre ;
private String apellido ; private String direccion ;
public String getApellido () { return apellido ; }
public void setApellido (String apellido ) { this.apellido = apellido ; }
public String getDireccion () { return direccion ; }
public void setDireccion (String direccion ) { this.direccion = direccion ; }
public String getNombre () { return nombre ; }
public void setNombre (String nombre ) { this.nombre = nombre ; }
public Cliente (String nombre , String apellido , String direccion ) { this.nombre = nombre ; this.apellido = apellido ; this.direccion = direccion ; }
public String toString () { return this.apellido + ", " + this.nombre + " - " + this.direccion ; } }
import java .util .*;
class Main { private static List <Cliente > clientes ;
public static void main (String [] args ) { clientes = new ArrayList <Cliente >();
Cliente cliente1 = new Cliente ("Nom1" ,"Ape1" ,"Dir1" ); Cliente cliente2 = new Cliente ("Nom2" ,"Ape2" ,"Dir2" );
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 12 / 16
Cliente cliente3 = new Cliente ("Nom3" ,"Ape3" ,"Dir3" );
clientes .add(cliente1 ); clientes .add(cliente2 ); clientes .add(cliente3 );
//recorro la lista de clientes mostrandos sus datos // el Foreach no necesito saber la cantidad de ele mentos para recorrerlos System .out .println ("\nApellido\tNombre\tDirección" ); for(Cliente cliente : clientes ){ System .out .println (cliente ); }
List <Cliente > clientesEncontrados = clientesConNombre ("Nom2" );
System .out .println ("\nApellido\tNombre\tDirección" ); // recorre la lista de los clientes encontrados for(Cliente cliente : clientesEncontrados ){ System .out .println (cliente ); } }
public static List <Cliente > clientesConNombre (String nombre ){ List <Cliente > clientesConNombre =new ArrayList <Cliente >(); for(Cliente cliente : clientes ){ if(cliente .getNombre ()==nombre ){ clientesConNombre .add(cliente ); } } return clientesConNombre ; } }
2. Alquiler en un video club
Socio Alquiler Pelicula
-dni: int
-nombre: String
-dirección: String
-teléfono: String
-Numero: int
-fecha: String
-socio: Socio
-peliculas: List<Pelicula>
-codigo: int
-nombre: String
-alquilada: boolean
-categoria: String
+getDni(): int
+getNombre(): String
+getDireccion(): String
+getTelefono(): String
+getNumero(): int
+getFecha(): String
+getSocio(): Socio
+getPeliculas(): List<Pelicula>
+agregarPelicula(peli: Pelicula)
+getCodigo(): int
+getNombre(): int
+getAlquilada: boolean
+getCategoria(): String
Según el diagrama UML anterior, definir las clases, sus métodos toString y crear main que:
a. Instancie dos socios.
b. Realizar un método en main que enliste las peliculas.
c. Instancie 4 películas cuyo estados sea no alquiladas y enlistarlas.
d. Método que me devuelva las películas disponibles para alquilar
e. Método agregar Película que lo enliste y la cambie a alquilada.
f. Instancie Alquiler de 2 películas para el 1er socio
g. Instancie Alquiler de 1 película para el 2do Socio.
h. Mostrar las películas disponibles para alquilar
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 13 / 16
Nota: se deberá mostrar los datos principales de los objetos a medida que sean creados
utilizando el método toString().
3. Desarrollar un sistema de garaje siguiendo estas especificaciones:
En el garaje se cambian las ruedas tanto de coches como de motos. El precio del cambio de
una rueda se fija al abrir el garaje, al igual que la capacidad máxima de vehículos, ya sean
motos o coches. Si no hubiese lugar para registrar un vehículo nuevo, habrá que tener
contemplado un sistema de aviso para quien esté dejando su vehículo.
El sistema de gestión de garaje requiere un mecanismo para ingresar y retirar los vehículos,
conocer el número total de vehículos recibidos en ese momento, el precio que supondría
cambiar todas las ruedas de todos los vehículos, y el kilometraje medio de todos ellos.
La información que manejaremos de los coches, entre otras cosas es la marca y el número de
puertas. Mientras que de las motos será la marca y la cilindrada.
En el método main, se creará el garaje, una serie de vehículos que se irán recibiendo en el
garaje y por último se imprimirá por pantalla toda la información general del garaje así como la
información de cada vehículo.
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 14 / 16
EJERCICIOS PROPUESTOS (Parciales de otros años) 1. Alquiler de Propiedades para vacacionar
a. Realiza un constructos cliente que tome 4 parámetros e instancia 3 clientes usando
ese constructos.
b. Realiza un constructor para Casa que tome 2 argumentos (descripción y domicilio),
instancia 2 Casas, que estén disponible (disponibilidad = true), sin usar
cambiarEstado.
c. Instancia una Cabaña que tenga un servicio de calefacción. Cambia el servicio
brindado a “Aire acondicionado”.
d. Realizar un constructor de la reserva que cambia la disponibilidad de la propiedad a
falso, y realiza las siguientes reservas: Del cliente 1 con la casa 1, del cliente 2 con la
casa 2 y del cliente 3 con la cabaña.
e. Realizar un GestorDeReservaYPago (no main) que enliste las reservas. Realiza un
método que me devuelva todas las reservas de un cliente, todas las reserva de una
propiedad.
f. Realiza el pago de la propiedad 1, en el GestorDeReservaYPago, enlista el pago,
realiza un método que me devuelva todas las reservas no pagadas.
Referencia:
-Privado
+Publico
En Cursiva clase Abstracta
Ayuda para las lista
Librerías (import java.util.ArrayList; import java.util.List;.
Para instanciar una lista List<Cliente> listaDeClientes = new ArrayList<Cliente>();
Para recorrerla podes usar for (Cliente cliente : listaDeClientes){})
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 15 / 16
2. Manejo de Stock Droguería
a. Realiza los constructores para:
i. Realiza los constructores de Sucursal, y ItemStock, que tomen todo los
parámetros, y otro sin la capacidadMaxima, SockMinimo, que es 50 y 30
respectivamente.
ii. Medicamento con todo los parámetro, y otro sin la droguería que va a ser
Genérico.
b. Instancia:
i. 3 Medicamentos, 3 Perfume y 2 Sucursales.
ii. ItemStock con los 3 medicamento con la 1er Sucursal, 3 Perfume con la 2da
Sucursal
c. Realizar el método de
i. PocoStock(), que me devuelva verdadero o falso si la mercadería tiene poco
stock.
ii. SePuedeAgregarCantidad(), que me devuelve verdadero si la capacidad actual
no supera la capacidad máxima, dependiendo la cantidad de mercadería a
agregar.
iii. AgregarStock() que utiliza el método sePuedeAgregarCantidad, para verificarlo,
devolviendo el éxito o fracaso de dicha operación.
iv. Utiliza el método AgregarStock queme permita verificar la condición del
apartado anterior.
d. Realiza un gestor(No main) que:
i. Enliste las mercaderías, los itemsStock.
ii. Un método que me devuelva en que sucursal se encuentra cierta mercadería.
iii. Las mercaderías con poco stock.
e. Me devuelva el mayor proveedor, que va a ser el que tiene mayor stock actual.
Referencia:
-Privado
+Publico
En Cursiva clase Abstracta
Paradigmas de Programación
Ingeniería en Sistemas de información José Oscar Mugetti Mare
UTN FRSFCO
Paradigma Funcional 16 / 16
3. Supermercado
a. Realizar los Constructores para:
i. Venta que tenga solamente la fecha y otro además de la fecha la razón Social.
ii. Alimento que utilice todas las variables, otro con todo menos el stock mínimo
que es 20.
iii. Bebida.
iv. ItemVenta, que tome la mercadería y la cantidad, y reduzca el stock de la
mercadería.
b. Instancia :
i. 2 Alimento y 2 Bebidas
ii. 1 Razón Social
c. Realiza el método agregarItem de venta que tome como parámetro la mercadería y
la cantidad, donde se agrega a la lista de los ítemsVenta, y va incrementando el
importe a pagar, para ello utiliza el método importePorCantidad del itemVenta,
donde calcula el importe a pagar por la cantidad.
i. Realiza la venta del:
• Alimento1 y la bebida 1.
• La razón Social con la bebida2 y el alimento 2.
ii. Muestra el importe a pagar.
iii. Realiza los pagos con un importe mayor, muestra los vueltos.
d. Realiza un gestor (no main)que:
i. Enliste las mercaderías
ii. Muestre todo lo recaudado.
iii. Muestre toda la mercadería con poco stock.
Referencia:
-Privado
+Publico
En Cursiva clase Abstracta