Manual de Prácticas V3 Feb 2020
Manual de Prácticas V3 Feb 2020
Manual de Prácticas V3 Feb 2020
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
1 de 58
PROGRAMA EDUCATIVO:
Página:
MANUAL DE PRÁCTICAS
2 de 58
ÍNDICE
Contenido
PRESENTACIÓN.....................................................................................................................................................3
OBJETIVO GENERAL..............................................................................................................................................4
SEGURIDAD...........................................................................................................................................................5
PRACTICA 4. HERENCIA......................................................................................................................................27
PRACTICA 6. POLIMORFISMO.............................................................................................................................42
PRACTICA 8. ARCHIVOS......................................................................................................................................53
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
3 de 58
PRESENTACIÓN
Para desarrollar las destrezas se requiere de conocimientos bien cimentados sobre los
temas básicos de ésta área. La destreza de temas de programación a través de prácticas
permite que los participantes se involucren, vivan y ejerciten las competencias adquiridas;
generando resultados que serán evaluados y enriquecidos.
Las prácticas que se presentan en este manual han sido desarrolladas tomando en cuenta
las competencias previas: Analizar, diseñar y desarrollar soluciones de problemas reales
utilizando algoritmos computacionales para implementarlos en un lenguaje de
programación orientado a objetos y el objetivo general de la Asignatura: Diseñar e
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
4 de 58
El presente manual presenta las prácticas necesarias para que el alumno adquiera las
habilidades del desarrollo orientado a objetos empleando los conocimientos teóricos
adquiridos en el aula.
OBJETIVO GENERAL
Las prácticas que corresponden a la primera unidad ayudan a cubrir las competencias de
comprender, describir y modelar los conceptos principales del paradigma de programación
orientado a objetos y aplicarlos a situaciones de la vida real, por lo que el alumno deberá
realizar en un software de modelado UML diagramas de casos de uso, de clases y de
secuencia
Las prácticas relacionadas a flujos y archivos tienen como objetivo que el alumno aprenda
como lograr la persistencia de datos a través del almacenamiento permanente de datos en
un archivo y las diferentes fuentes de donde puede provenir la información.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
5 de 58
SEGURIDAD
Para la utilización del Centro de Cómputo el alumno deberá leer el reglamento para el uso
de las salas del centro de cómputo.
El personal que labora en la Sala de Computo así como los usuarios, deberán abstenerse
de fumar.
Se prohíbe realizar trabajos con fines de lucro o propaganda política, así como la
utilización de cualquier tipo de juego, consultar páginas Pornográficas por Internet y el uso
de los programas Chat.
-INTRODUCCIÓN
UML está compuesto por diversos elementos gráficas que se combinan para formar diagramas.
Éstos ayudan a presentar diversas perspectivas de un sistema a los cuales se les conoce como
modelo. Uno de los elementos gráficos son los diagramas de clase los cuales son categorías de
objetos o grupos de cosas que tienen atributos y acciones similares (Schemuller).
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
6 de 58
Para la diagramación UML una clase es representada con un rectángulo, donde el nombre de la
clase es, por convención, una Palabra escrita con la primera letra en Mayúscula, si consta de dos
palabras cada palabra inicia con la primera letra en Mayúscula, este normalmente se coloca en la
parte superior de rectángulo.
Una clase contiene atributos que corresponden a una propiedad o característica de ésta y describe
un rango de valores que la propiedad podrá contener en los objetos (esto es llamado instancia de
la clase), por convención los atributos constan de una o más palabras escritas en minúsculas, se
puede especificar el tipo de dato que contendrá el atributo (int, doublé,float,String, char, etc).
Los objetos realizan acciones u operaciones que describen sus comportamientos, normamente son
verbos, se escriben con minúsculas y si son más de dos palabras cada una de ellas iniciará con
mayúsculas exceptuando la primera.
Diseñar diagramas de clases aplicando los conocimientos del paradigma orientado a objetos para
resolver una situación de la vida real.
-LUGAR
Centro de Cómputo
-SEMANA DE EJECUCIÓN
Semana 2
- MATERIAL Y EQUIPO
Computadora
Manual de UML
Software Enterprise Architect o software libre para diagramas UML (BoUML, ArgoUML u otra)
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
7 de 58
-DESARROLLO DE LA PRÁCTICA
El profesor describirá una problemática relacionada a un juego de mesa y describirá al alumno los
componentes del juego, los participantes y las reglas de operación de este. Como ejemplo se
presenta la siguiente problemática.
Descripción de la problemática.
El juego inicia cuando los jugadores eligen una cartilla de forma aleatoria, uno de los
jugadores es designado juez y debe barajear el mazo y extrae una carta la cuál
anuncia a los demás jugadores, cada jugador anota con una ficha en su cartilla
cuando la carta anunciada coincide con alguna de las que posee. El ganador es el
primero que llene su tabla de manera completa y que grite lotería.
Tu trabajo es describir y modelar una situación similar a esta propuesta con los datos
proporcionados por el profesor.
Paso 1.
Genere una tabla con las clases de objetos, sus atributos y las acciones que pueden realizar de
acuerdo con la situación planteada como se muestra en el ejemplo.
Página:
MANUAL DE PRÁCTICAS
8 de 58
Paso 2. Realiza los diagramas de clase correspondientes cada clase de objetos indicando el
nombre de la clase, sus atributos y los métodos de cada una como se muestra en el ejemplo.
class System
Carta Mazo
Paso 3. Anexar al diagrama de clases las relaciones que existen entre ellas (Asociación,
Agregación, Herencia) y la cardinalidad correspondiente por ejemplo el mazo es uno pero contiene
54 cartas.
Como se muestra en el ejemplo.
class System
Carta Mazo
Paso 4. Por último se debe generar el código del diagrama correspondiente en la opción del menú
Project / source code engineering / Generate source code y almacenar los códigos
correspondientes.
- EVALUACIÓN Y RESULTADOS
Página:
MANUAL DE PRÁCTICAS
9 de 58
correspondiente
TOTAL 100
El alumno deberá presentar el modelo de clases realizado en el programa, así como los códigos
generados por el programa, éstos deben corresponder a lo presentado en el paso 5 y los códigos
deben acordes con lo diagramado.
-REFERENCIAS
Bonaparte, U. J. (2012). Proyectos UML Diagramas de clases y aplicaciones JAV en NetBeans 6.9.1.
Tucumán Argentina: Editorial de la Universidad Tecnológica Nacional.
-ANEXOS
Página:
MANUAL DE PRÁCTICAS
10 de 58
-INTRODUCCIÓN
Normalmente en el mundo real existen varios objetos de un mismo tipo, o como diremos
enseguida, de una misma clase. Una clase es una plantilla que define las variables y los métodos
que son comunes para todos los objetos de un cierto tipo.
Normalmente un único objeto por sí solo no es muy útil. En general, un objeto aparece como un
componente más de un programa o una aplicación que contiene otros muchos objetos. Es
precisamente haciendo uso de esta interacción como los programadores consiguen una
funcionalidad de mayor orden y modelar comportamientos mucho más complejos.
Cada clase requiere especificar la forma en como los objetos serán construidos y los valores por
default que tendrán. El objetivo de un constructor es el de inicializar un objeto cuando éste es
creado. En java es un método especial dentro de una clase, que se llama automáticamente cada
vez que se crea un objeto de esa clase.
Posee el mismo nombre de la clase a la cual pertenece y no puede regresar ningún valor (ni
siquiera se puede especificar la palabra reservada void).
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
11 de 58
Existen 2 tipos de constructores, los constructores por defecto es un constructor que hace nada y
que es invocado cada vez que se construye un objeto sin especificar ningún argumento asignando
valores predefinidos para los atributos; el constructor con parámetros debe especificar algún
argumento que servirán para iniciar los atributos con los valores especificados por el usuario y
realizará las acciones preestablecidas al ejecutarse.
En java no existen los destructores, esto se realiza de manera automática cada vez que los objetos
se dejan de usar.
Un método sobrecargado se utiliza para reutilizar el nombre de un método pero con diferentes
argumentos. Las reglas para sobrecargar un método son las siguientes:
-OBJETIVO
Programar clases con atributos y métodos que utilicen distintos modificadores de acceso
empleando constructores y métodos sobrecargados con la finalidad comprenderla.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
12 de 58
-LUGAR
Sala de Cómputo
-SEMANA DE EJECUCIÓN
Semana 3.
- MATERIAL Y EQUIPO
Equipo de cómputo
Software Enterprise Architect o software libre para diagramas UML (BoUML, ArgoUML u otra)
-DESARROLLO DE LA PRÁCTICA
Descripción de la problemática
En una casa se tienen diversos objetos (horno, estufa, refrigerador, licuadora, puerta, ventilador,
elevador, etc)
Paso 1. Elegir uno de los tipos de objetos, abstrayendo y construir con la información la tabla.
Atributos Comportamientos
1. 1.
2. 2.
3. 3.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
13 de 58
4. 4.
5. 5.
Paso 2. De acuerdo con los atributos y comportamientos detectados escriba el diagrama de clase
utilizando un lenguaje para diagramas UML. El diagrama deberá contener el tipo de dato asociado
a cada atributo y cada método deberá contener el tipo de valor devuelto junto con los parámetros
requeridos.
Paso 3. El alumno escribirá la clase de acuerdo con el diagrama como se muestra a continuación:
b) Definir los atributos para la clase indicados en el diagrama de acuerdo con lo siguiente: tipo
nombre;
Ejemplo: String marca;
d) Escribir los métodos set y get para asignar y devolver los valores a los atributos declarados
en las variables.
Página:
MANUAL DE PRÁCTICAS
14 de 58
return atrib1;
}
// otros métodos de la clase
El alumno debe cuidar las tabulaciones del programa para marcar con claridad el ámbito de cada
segmento en la clase.
Paso 4. Escribir los métodos para dar funcionalidad a la clase (comportamientos descritos en el
diagrama) usando tipos de datos simples y objetos como parámetros y valores de retorno, así
como métodos sin valores de retorno.
Paso 5. Escribir la funcionalidad de los métodos para que pueda implementar los comportamientos
establecidos.
Paso 6. Escribir el método main para crear una instancia de la clase y probar el acceso desde ella
a los atributos y métodos. Mínimo debe probar que el instrumento realiza la acción.
Paso 8. Intercambiar clases con al menos 5 compañeros para usar sus miembros con valores y
situaciones erróneas que evidencien la necesidad de protegerlos con modificadores de acceso.
Paso 9. Modificar el código fuente de la clase original aplicando los distintos niveles de acceso para
experimentar y descubrir el impacto de cada uno de ellos. Registrar los resultados.
Paso 10. Implementar la clase Persona con los atributos nombre y edad, un constructor, un
destructor y al menos un método crecer para mapear el ciclo de vida de una persona con el de un
objeto.
Paso 11. Implementar la clase calculadora que realice al menos cuatro operaciones básicas
sobrecargando métodos para cada tipo de dato numérico.
Página:
MANUAL DE PRÁCTICAS
15 de 58
- EVALUACIÓN Y RESULTADOS
El alumno deberá presentar el modelo de clases realizado en el programa, así como los códigos
generados por el programa.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
16 de 58
-REFERENCIAS
-ANEXOS
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
17 de 58
-INTRODUCCIÓN
Normalmente en el mundo real existen varios objetos de un mismo tipo, o como diremos
enseguida, de una misma clase. Una clase es una plantilla que define las variables y los métodos
que son comunes para todos los objetos de un cierto tipo.
Normalmente un único objeto por sí solo no es muy útil. En general, un objeto aparece como un
componente más de un programa o una aplicación que contiene otros muchos objetos. Es
precisamente haciendo uso de esta interacción como los programadores consiguen una
funcionalidad de mayor orden y modelar comportamientos mucho más complejos.
Cada clase requiere especificar la forma en como los objetos serán construidos y los valores por
default que tendrán. El objetivo de un constructor es el de inicializar un objeto cuando éste es
creado. En java es un método especial dentro de una clase, que se llama automáticamente cada
vez que se crea un objeto de esa clase.
Posee el mismo nombre de la clase a la cual pertenece y no puede regresar ningún valor (ni
siquiera se puede especificar la palabra reservada void).
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
18 de 58
Existen 2 tipos de constructores, los constructores por defecto es un constructor que hace nada y
que es invocado cada vez que se construye un objeto sin especificar ningún argumento asignando
valores predefinidos para los atributos; el constructor con parámetros debe especificar algún
argumento que servirán para iniciar los atributos con los valores especificados por el usuario y
realizará las acciones preestablecidas al ejecutarse.
En java no existen los destructores, esto se realiza de manera automática cada vez que los objetos
se dejan de usar.
Un método sobrecargado se utiliza para reutilizar el nombre de un método pero con diferentes
argumentos. Las reglas para sobrecargar un método son las siguientes:
-OBJETIVO
Programar clases con atributos y métodos que utilicen distintos modificadores de acceso
empleando constructores y métodos sobrecargados con la finalidad comprenderla
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
19 de 58
-LUGAR
Sala de Cómputo
-SEMANA DE EJECUCIÓN
Semana 7.
- MATERIAL Y EQUIPO
Equipo de cómputo
Software Enterprise Architect o software libre para diagramas UML (BoUML, ArgoUML u otra)
-DESARROLLO DE LA PRÁCTICA
Descripción de la problemática
Un termómetro es un instrumento utilizado para medir la temperatura con un alto nivel de exactitud,
son capaces de medir medidas extremas (frio o calor). Las temperaturas son medidas en una
escala siendo las más usadas a nivel internacional los Grados Celsius (°C) o los Grados
Fahrenheit (°F) y Grados Kelvin (°K). Los termómetros actuales permiten mostrar en un
visualizador la temperatura medida, almacenando de manera temporal para poder identificar las
temperaturas extremas (máxima y mínima) registradas y el promedio, igualmente el termómetro es
capaz de convertir las temperaturas de una escala a otra permitiendo su uso en cualquier lugar.
Página:
MANUAL DE PRÁCTICAS
20 de 58
1. 1.
2. 2.
3. 3.
4. 4.
5. 5.
f) Definir los atributos para la clase indicados en el diagrama por ejemplo: marca, color, valor,
botonOnOff, etc; de acuerdo a lo siguiente: tipo nombre;
Ejemplo: String marca;
h) Escribir los métodos set y get para asignar y devolver los valores a los atributos declarados
en las variables.
Página:
MANUAL DE PRÁCTICAS
21 de 58
}
// declaración de métodos para asignar u obtener los valores de los atributos
public void setMarca(String m) // asignar un valor al atributo
{
Marca = (m.equals(“”))? “Steren”: m;
}
public String getMarca() //devolver el valor del atributo
{
return marca;
}
// otros métodos de la clase
El alumno debe cuidar las tabulaciones del programa para marcar con claridad el ámbito de cada
segmento en la clase.
Paso 2. Escribir los métodos para dar funcionalidad al termométro (comportamientos descritos en
el diagrama) por ejemplo: prender o Apagar, medirTemperatura.
Nota: en el caso de la medición de la temperatura esta se realizará utilizando valores aleatorios
entre un rango definido.
Paso 4. Escribir la funcionalidad de los métodos para que pueda implementar los comportamientos
establecidos.
Paso 5. Escribir el método main para crear una instancia de la clase y probar el acceso desde ella
a los atributos y métodos. Mínimo debe probar el cambio de las unidades de medida del
termómetro.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
22 de 58
Paso 8. Realizar los pasos del 1 al 7 para dos clases de objetos concretos (puerta, elevador,
televisor) y abstractos (CuentaBancaria, Prestamo, Viaje, etc.)
Paso 9.
- EVALUACIÓN Y RESULTADOS
El alumno deberá presenta un programa y los resultados de acuerdo con la siguiente tabla:
Criterio Puntaje Puntaje Obtenido
Página:
MANUAL DE PRÁCTICAS
23 de 58
TOTAL 100
El alumno deberá presentar el modelo de clases realizado en el programa, así como los códigos
generados por el programa.
-REFERENCIAS
-ANEXOS
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
24 de 58
PRACTICA 4. HERENCIA
-INTRODUCCIÓN
La herencia ofrece una ventaja importante, permite la reutilización del código. Una vez que una
clase ha sido depurada y probada, el código fuente de dicha clase no necesita modificarse. Su
funcionalidad se puede cambiar derivando una nueva clase que herede la funcionalidad de la clase
base y le añada otros comportamientos. Reutilizando el código existente, el programador ahorra
tiempo y dinero, ya que solamente tiene que verificar la nueva conducta que proporciona la clase
derivada.
1. Cuando se dan cuenta que diversos tipos tienen algo en común, por ejemplo, en el juego
del ajedrez peones, alfiles, rey, reina, caballos y torres, son piezas del juego. Creamos, por tanto,
una clase base y derivamos cada pieza individual a partir de dicha clase base.
3. Cuando las clases que se tienen responden a una tercera clase con la frase ES UN. Por
ejemplo, un carro ES UN Vehículo, un camión ES UN vehículo, etc.
Clase Base
Vamos a poner un ejemplo del segundo tipo, que simule la utilización de librerías de clases para
crear un interfaz gráfico de usuario
Supongamos que tenemos una clase que describe la conducta de una ventana muy simple, aquella
que no dispone de título en la parte superior, por tanto no puede desplazarse, pero si cambiar de
tamaño actuando con el ratón en los bordes derecho e inferior.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
25 de 58
this.ancho=ancho;
this.alto=alto;
Las funciones miembros, además del constructor serán las siguientes: la función mostrar que
simula una ventana en un entorno gráfico, aquí solamente nos muestra la posición y las
dimensiones de la ventana.
alto+=dh;
this.y=y;
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
26 de 58
this.ancho=ancho;
this.alto=alto;
ancho+=dw; alto+=dh;
}
La clase derivada
La clase derivada heredará los miembros dato de la clase base y la función miembro, y tendrá un
miembro dato más, el título de la ventana. public class VentanaTitulo extends Ventana{ protected
String titulo; public VentanaTitulo(int x, int y, int w, int h, String nombre) { super(x, y, w, h);
titulo=nombre;
extends es la palabra reservada que indica que la clase VentanaTitulo deriva, o es una subclase,
de la clase Ventana.
La primera sentencia del constructor de la clase derivada es una llamada al constructor de la clase
base mediante la palabra reservada super. La llamada super(x, y, w, h);
Inicializa los cuatro miembros dato de la clase base Ventana: x, y, ancho, alto.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
27 de 58
A continuación, se inicializa los miembros dato de la clase derivada, y se realizan las tareas de
inicialización que sean necesarias. Si no se llama explícitamente al constructor de la clase base
Java lo realiza por nosotros, llamando al constructor por defecto si existe.
x+=dx; y+=dy;
Redefine la función miembro mostrar para mostrar una ventana con un título.
System.out.println("titulo : "+titulo);
En la clase derivada se define una función que tiene el mismo nombre y los mismos parámetros
que la de la clase base. Se dice que redefinimos la función mostrar en la clase derivada. La función
miembro mostrar de la clase derivada VentanaTitulo hace una llamada a la función mostrar de la
clase base Ventana, mediante super.mostrar();
De este modo aprovechamos el código ya escrito, y le añadimos el código que describe la nueva
funcionalidad de la ventana por ejemplo, que muestre el título.
Si nos olvidamos de poner la palabra reservada super llamando a la función mostrar, tendríamos
una función recursiva. La función mostrar llamaría a mostrar indefinidamente.
package ventana;
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
28 de 58
titulo=nombre;
{ super.mostrar();
System.out.println("titulo : "+titulo);
y+=dy;
package ventana;
ventana.desplazar(4, 3);
System.out.println("************************"); ventana.mostrar();
try {
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
29 de 58
System.in.read();
}catch (Exception e) { }
Mostramos la ventana con su título, llamando a la función mostrar, redefinida en la clase derivada
ventana.mostrar();
Desde el objeto ventana de la clase derivada llamamos a las funciones miembro definidas en dicha
clase
ventana.desplazar(4, 3);
Desde el objeto ventana de la clase derivada podemos llamar a las funciones miembro definidas en
la clase base.
ventana.cambiarDimensiones(10, -5);
-OBJETIVO
Implementar la herencia en clases derivadas para reutilizar los miembros de una clase base.
-LUGAR
Sala de Cómputo
-SEMANA DE EJECUCIÓN
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
30 de 58
Semana 6
- MATERIAL Y EQUIPO
Equipo de cómputo
Eclipse
Software Enterprise Architect o software libre para diagramas UML (BoUML, ArgoUML u otra)
-DESARROLLO DE LA PRÁCTICA
Descripción de la problemática
Atributos Comportamientos
1. 1.
2. 2.
3. 3.
4. 4.
5. 5.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
31 de 58
Paso 2. Identifique los atributos y métodos para las clases derivadas (Triangulo, Circulo,
Rectángulo, Trapecio, Cuadrado) y llene una tabla similar a la anterior para cada clase derivada.
Paso 3. El alumno escribirá las clases de acuerdo al diagrama considerando los siguientes puntos:
a) La clase base deberá contener métodos para calcularArea, calcularPerímetro y un
método visible
b) La clase base tendrá al menos un constructor con parámetros
c) Cada clase derivada deberá extender de la clase base y escribir la implementación
propia de los métodos calcularArea, calcularPerimetro
d) Cada clase derivada deberá llamar al constructor de la clase base utilizando la palabra
reservada super
Paso 4. Crear una clase principal que instancie un objeto de la clase base, uno de la clase derivada
y llame a los métodos calcularArea y calcularPerimetro de la clase Base y Derivadas.
- EVALUACIÓN Y RESULTADOS
Criterio Puntaje Puntaje Obtenido
Página:
MANUAL DE PRÁCTICAS
32 de 58
2
Comunicación oral y escrita con habilidades de investigación
Habilidades de Organización con uso de Tics y trabajo en 3
equipo
TOTAL 100
El alumno deberá presentar los códigos generados por el programa y las pantallas con los
resultados en un informe.
-REFERENCIAS
-ANEXOS
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
33 de 58
-INTRODUCCIÓN
Constructores en clases derivadas. Al instanciar objetos de clases derivadas se inicia una cadena
de invocaciones a constructores en las cuales el constructor de la clase derivada, antes de realizar
sus propias tareas, invoca (ya sea implícita o explícitamente) al constructor de su clase base.
Similarmente, si la clase base fue derivada de otra clase, el constructor de la clase base debe
invocar al constructor de la clase ubicada en el siguiente nivel superior de la jerarquía, y así
sucesivamente. El último constructor invocado en la cadena es el constructor de la clase Object,
cuyo cuerpo se ejecuta primero. El cuerpo del constructor de la clase derivada se ejecuta al final. El
constructor de cada clase base inicializa las variables de instancia que el objeto de la clase
derivada hereda.
Cuando remueve de la memoria un objeto de una clase derivada, el recolector de basura invoca al
destructor del objeto. Esto inicia una cadena de invocaciones a destructores, en donde el
destructor de la clase derivada y los destructores de las clases bases directas e indirectas se
ejecutan en orden inverso al que se ejecutaron los constructores, esto es, primero se ejecuta el
destructor de la clase derivada y al final se ejecuta el destructor de la clase base ubicada en el
nivel superior de la jerarquía. La ejecución de los destructores debe liberar todos los recursos que
el objeto adquirió, antes de que el recolector de basura reclame la memoria de ese objeto. Cuando
el recolector de basura invoca al destructor de un objeto de una clase derivada, ese destructor
realiza su tarea y después invoca al destructor de la clase base. El proceso se repite hasta que se
invoca al destructor de la clase Object.
-OBJETIVO
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
34 de 58
-LUGAR
Sala de Cómputo
-SEMANA DE EJECUCIÓN
Semana 7
- MATERIAL Y EQUIPO
Equipo de cómputo
Eclipse
-DESARROLLO DE LA PRÁCTICA
Descripción de la problemática
Existen distintos instrumentos de medición que ayudan a tener de menar más precisa las mediadas
de la velocidad, las revoluciones por minuto de un motor, la temperatura, cada uno de estos
instrumentos son mostrados en un vehículo y sirven para que el conductor pueda operar de mejor
manera un vehículo. Utilizando la clase termómetro de la práctica 2 cree las clases restantes para
simular el funcionamiento de un tacómetro y un velocímetro, así mismo cree la clase Instrumento
de medición y utilice constructores en clase Base y Derivadas.
Página:
MANUAL DE PRÁCTICAS
35 de 58
- EVALUACIÓN Y RESULTADOS
Página:
MANUAL DE PRÁCTICAS
36 de 58
2
Comunicación oral y escrita con habilidades de investigación
Habilidades de Organización con uso de Tics y trabajo en 3
equipo
TOTAL 100
El alumno deberá los códigos fuente generados para solucionar el problema planteado.
-REFERENCIAS
-ANEXOS
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
37 de 58
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
38 de 58
PRACTICA 6. POLIMORFISMO
-INTRODUCCIÓN
Hay ocasiones, cuando se desarrolla una jerarquía de clases en que algún comportamiento está
presente en todas ellas pero se materializa de forma distinta para cada una. Por ejemplo,
pensemos en una estructura de clases para manipular figuras geométricas. Podríamos pensar en
tener una clase genérica, que podría llamarse FiguraGeometrica y una serie de clases que
extienden a la anterior que podrían ser Circulo, Poligono, etc. Podría haber un método dibujar dado
que sobre todas las figuras puede llevarse a cabo esta acción, pero las operaciones concretas para
llevarla a cabo dependen del tipo de figura en concreto (de su clase). Por otra parte la acción
dibujar no tiene sentido para la clase genérica FiguraGeometrica, porque esta clase representa una
abstracción del conjunto de figuras posibles.
Para resolver esta problemática Java proporciona las clases y métodos abstractos. Un método
abstracto es un método declarado en una clase para el cual esa clase no proporciona la
implementación (el código). Una clase abstracta es una clase que tiene al menos un método
abstracto. Una clase que extiende a una clase abstracta debe implementar los métodos abstractos
(escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte
también en clase abstracta.
Página:
MANUAL DE PRÁCTICAS
39 de 58
Clases Abstractas.
Al ser utilizado Herencias ("Inheritance") y/o Polimorfismo es muy común que en la Clase Base
existan métodos diseñados únicamente con el propósito de ofrecer una guia para las Clases
heredadas, en Java existe un vocablo que permite prohibir el uso de métodos en Clases Base, este
calificativo es :abstract.Al ser definido un método como abstract se restringe que éste sea llamado
directamente, cuando una Clase contiene un método de este tipo a ésta se le llama: Clase
Abstracta.
Al ser definida una Clase, además de ser declarados los métodos/campos como abstract también
es necesario utilizar el vocablo abstract en la definición de cada Clase.
Clases Abstractas.
Una de las características de las Clases que Heredan("Inherit") de una Clase abstracta, es que
éstas deben definir los mismos métodos definidos en la Clase Base; en Java existe otro
mecanismo que permite llevar acabo diseños donde se parte de una Estructura o Cápsula.
• Los métodos definidos como abstract no contienen ningún tipo de código dentro de ellos,
inclusive no declaran ni llaves ({ }).
• Cuando es definido más de un método como abstract, es necesario que la Clase como tal
sea definida también como abstract.
La característica de hacer una Clase/Método abstract reside en que no puede ser generada una
instancia de la misma, este comportamiento se demuestra en el método principal (main)
• Aunque dentro del método sea generado un Arreglo de esta Clase abstracta, recuerde que
un arreglo es únicamente un contenedor de Objetos, esto permite que sea generado sin ningún
error.
• Dentro de comentarios se encuentra la generación de una instancia del tipo Instrumento la
cual generaría un error al ser compilada la Clase.
-OBJETIVO
Crear una clase abstracta así como sus métodos e implementar sus clases derivadas con su propio
comportamiento.
-LUGAR
Sala de Cómputo
-SEMANA DE EJECUCIÓN
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
40 de 58
Semana 8
- MATERIAL Y EQUIPO
Equipo de cómputo
Eclipse
-DESARROLLO DE LA PRÁCTICA
Problemática.
Emplee las clases desarrolladas para la solución de la práctica 3 para realizar los ajustes
requeridos para ésta práctica.
Paso 1. Realice los siguientes cambios a la clase Base para declarar e implementar métodos
abstractos
a) Transforme la clase Figura Geométrica colocando la palabra reservada abstrac a la clase y
el método.
Página:
MANUAL DE PRÁCTICAS
41 de 58
Void calcularArea(){
// código para calcular el área correspondiente a la figura
}
Void calcularPerimetro(){
// código para calcular el área correspondiente a la figura
}
}
Paso 3. Cree una clase Main que contenga el método principal main().
Paso 6. Genere un menú para que se puedan crear los tipos de figura de acuerdo a las solicitudes
del usuario, así mismo que se puedan asignar datos de acuerdo a lo que el usuario asigne, todo
esto se debe hacer manejando la entrada y salida estándar.
- EVALUACIÓN Y RESULTADOS
Criterio Puntaje Puntaje Obtenido
Página:
MANUAL DE PRÁCTICAS
42 de 58
2
Comunicación oral y escrita con habilidades de investigación
Habilidades de Organización con uso de Tics y trabajo en 3
equipo
TOTAL 100
El alumno deberá presentar los códigos fuente generados para solucionar el problema y las
pantallas de resultado en un informe.
-REFERENCIAS
-ANEXOS
-INTRODUCCIÓN
En Java una excepción es un error o una condición anormal que se ha producido durante la
ejecución de un programa. Java tiene diferentes tipos de excepciones: excepciones de I/O, las
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
43 de 58
Thrownable
Clase base que representa todo lo que se puede “lanzar” en java, contiene una el estado de la pila
en el momento en que se genera la excepción (stack trace o call chain), almacena un mensaje de
tipo String que se puede utilizar para detallar que excepción se generó.
Error
Subclase de Thrownable que indica problemas graves de los cuales una aplicación no se puede
recuperar por ejemplo: Memoria Agotada, error de la máquina virtual.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
44 de 58
Exception
Situaciones más o menos habituales que impiden completar la ejecución correcta del código.
Generalmente el programador debe proporcionar el código que las trate o gestione.
Predefinidas en el sistema
Se lanzan automáticamente cuando se realiza alguna operación no valida
- Acceso a un objeto que no existe,
- Acceso a una posición de un array que no existe,
- División por cero
Generadas por el programador
El programa explícitamente genera una excepción al detectar una situación de error que no se
puede resolver en ese contexto, útil en situaciones de prueba y depuración.
throws
- Indica que el código producirá una excepción, que no se tratará dentro de él y se pasará al
método superior, utilizando la cláusula throws.
public void ejemploExcep () throws IOException
- A continuación de la palabra reservada throws aparece una lista de todas las excepciones
que se pueden dar dentro del método que serán lanzadas y no serán gestionadas.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
45 de 58
-OBJETIVO
Identificar, manejar, gestionar y crear las condiciones de error que interrumpan el flujo normal de
ejecución de un programa.
-LUGAR
Sala de Cómputo
-SEMANA DE EJECUCIÓN
Semana 11
- MATERIAL Y EQUIPO
Equipo de cómputo
Eclipse
-DESARROLLO DE LA PRÁCTICA
Paso 1. Crear la clase para realizar las operaciones de división, almacenamiento y visualización de
los datos.
Paso 2. Utilizar las excepciones para tratar desde el método dividir la excepción AritmeticException
Página:
MANUAL DE PRÁCTICAS
46 de 58
} catch(ArithmeticException excepcion){
Paso 2. Genere una excepción propia para controlar que los números no sean mayores de 100 De
acuerdo a lo siguiente:
a) Declare una clase que herede de Exception para crear la excepción propia con el nombre
ValorFueraDeRango e incluya código para enviar un mensaje al usuario.
b) Cree la instrucción para validar el valor proporcionado por el usuario y que se genere la
excepción utilizando la siguiente línea de instrucción.
throw ValorFueraDeRango;
c) Lanza la excepción fuera del método para que sea capturada desde el lugar que fue
invocada utilizando la sentencia throws ValorFueraDeRango al final del nombre del
método
Página:
MANUAL DE PRÁCTICAS
47 de 58
- EVALUACIÓN Y RESULTADOS
2
Comunicación oral y escrita con habilidades de investigación
Habilidades de Organización con uso de Tics y trabajo en 3
equipo
TOTAL 100
El alumno deberá presentar los códigos fuente generados para solucionar el problema y las
pantallas de resultado en un informe.
-REFERENCIAS
-ANEXOS
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
48 de 58
PRACTICA 8. ARCHIVOS
-INTRODUCCIÓN
Un Flujo de E/S representa una fuente de entrada y un destino de salida. Un flujo puede
representar muchos tipos diferentes de fuentes y destinos, incluyendo archivos de disco,
dispositivos, otros programas y arreglos de memoria.
Los flujos soportan muchos tipos diferentes de datos, incluyendo bytes simples, tipos primitivos de
datos, caracteres localizados, y objetos. Algunos flujos simplemente pasan datos, otros manipulan
y transforman datos en formas útiles.
No importa cómo trabajan internamente; todos los flujos presentan el mismo modelo simple a los
programas que los usan: un flujo es una secuencia de datos. Un programa usa un flujo de entrada
para leer datos desde una fuente, o artículo a la vez:
Un programa usa un flujo de salida para escribir datos a su destino, o artículo a la vez: Escribiendo
información desde un programa.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
49 de 58
La fuente y el destino de datos retratado arriba puede ser cualquier cosa que mantenga, genere o
consuma datos. Obviamente esto incluye archivos en disco, pero una fuente o destino puede
también ser otro programa, un dispositivo periférico, un socket de red, o un arreglo.
Normalmente, cuando se codifica un programa, se hace con la intención de que ese programa
pueda interactuar con los usuarios del mismo, es decir, que el usuario pueda pedirle que realice
cosas y pueda suministrarle datos con los que se quiere que haga algo. Una vez introducidos los
datos y las órdenes, se espera que el programa manipule de alguna forma esos datos para
proporcionarnos una respuesta a lo solicitado.
Además, en muchas ocasiones interesa que el programa guarde los datos que se le han
introducido, de forma que si el programa termina los datos no se pierdan y puedan ser recuperados
en una sesión posterior. La forma más normal de hacer esto es mediante la utilización de ficheros
que se guardarán en un dispositivo de memoria no volátil (normalmente un disco).
A todas estas operaciones, que constituyen un flujo de información del programa con el exterior, se
les conoce como Entrada/Salida (E/S).
Existen dos tipos de E/S; la E/S estándar que se realiza con el terminal del usuario y la E/S a través
de fichero, en la que se trabaja con ficheros de disco.
Todas las operaciones de E/S en Java vienen proporcionadas por el paquete estándar de la API de
Java denominado java.io que incorpora interfaces, clases y excepciones para acceder a todo tipo
de ficheros. En este tutorial sólo se van a dar algunas pinceladas de la potencia de este paquete.
B. Entrada/Salida estándar
Aquí sólo trataremos la entrada/salida que se comunica con el usuario a través de la pantalla o de
la ventana del terminal.
Si creamos una applet no se utilizarán normalmente estas funciones, ya que su resultado se
mostrará en la ventana del terminal y no en la ventana de la applet. La ventana de la applet es una
ventana gráfica y para poder realizar una entrada o salida a través de ella será necesario utilizar el
AWT.
El acceso a la entrada y salida estándar es controlado por tres objetos que se crean
automáticamente al iniciar la aplicación: System.in, System.out y System.err
a.) System.in
Este objeto implementa la entrada estándar (normalmente el teclado). Los métodos que nos
proporciona para controlar la entrada son:
• read(): Devuelve el carácter que se ha introducido por el teclado leyéndolo del buffer de
entrada y lo elimina del buffer para que en la siguiente lectura sea leído el siguiente carácter.
Si no se ha introducido ningún carácter por el teclado devuelve el valor -1.
• skip(n): Ignora losn caracteres siguientes de la entrada.
b.) System.out
Este objeto implementa la salida estándar. Los métodos que nos proporciona para controlar la
salida son:
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
50 de 58
• print(a): Imprime a en la salida, donde a puede ser cualquier tipo básico Java ya que Java
hace su conversión automática a cadena.
• println(a): Es idéntico a print(a) salvo que con println() se imprime un salto de línea al final de
la impresión de a.
c.) System.err
Este objeto implementa la salida en caso de error. Normalmente esta salida es la pantalla o la
ventana del terminal como con System.out, pero puede ser interesante redirigirlo, por ejemplo
hacia un fichero, para diferenciar claramente ambos tipos de salidas.
Las funciones que ofrece este objeto son idénticas a las proporcionadas por System.out.
d.) Ejemplo
A continuación vemos un ejemplo del uso de estas funciones que acepta texto hasta que se pulsa
el retorno de carro e informa del número de caracteres introducidos.
import java.io.*;
class CuentaCaracteres {
int contador=0;
while(System.in.read()!='\n')
contador++;
Página:
MANUAL DE PRÁCTICAS
51 de 58
acceder a sus datos de una forma aleatoria, esto es indicando una determinada posición desde la
que leer/escribir.
c.) Generalidades
Para tratar con un fichero siempre hay que actuar de la misma manera:
1. Se abre el fichero.
Para ello hay que crear un objeto de la clase correspondiente al tipo de fichero que vamos a
manejar, y el tipo de acceso que vamos a utilizar:
TipoDeFichero obj = new TipoDeFichero( ruta );
Donde ruta es la ruta de disco en que se encuentra el fichero o un descriptor de fichero válido. Este
formato es válido, excepto para los objetos de la clase RandomAccessFile (acceso aleatorio), para
los que se ha de instanciar de la siguiente forma: RandomAccessFile obj = new
RandomAccessFile( ruta, modo );
Donde modo es una cadena de texto que indica el modo en que se desea abrir el fichero; "r" para
sólo lectura o "rw" para lectura y escritura.
2. Se utiliza el fichero.
Para ello cada clase presenta diferentes métodos de acceso para escribir o leer en el fichero.
3. Gestión de excepciones (opcional, pero recomendada)
Se puede observar que todos los métodos que utilicen clases de este paquete deben tener en su
definición una cláusula throws IOException. Los métodos de estas clases pueden lanzar
excepciones de esta clase (o sus hijas) en el transcurso de su ejecución, y dichas excepciones
deben de ser capturadas y debidamente gestionadas para evitar problemas.
4. Se cierra el fichero y se destruye el objeto.
Para cerrar un fichero lo que hay que hacer es destruir el objeto. Esto se puede realizar de dos
formas, dejando que sea el recolector de basura de Java el que lo destruya cuando no lo necesite
(no se recomienda) o destruyendo el objeto explícitamente mediante el uso del procedimiento
close() del objeto: obj.close()
Página:
MANUAL DE PRÁCTICAS
52 de 58
class CreaCarta {
while( ( c=System.in.read() ) != -1 )
f.write( (char)c );
f.close();
import java.io.*;
class MuestraCarta {
Página:
MANUAL DE PRÁCTICAS
53 de 58
while( ( c=f.read() ) != -1 )
System.out.print( (char)c );
f.close();
Métodos de lectura
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
54 de 58
La lectura del fichero se realiza con una función que depende del tipo de datos que queremos leer.
• boolean readBoolean(); Lee un byte y devuelve false si vale 0 o true sino.
• byte readByte(); Lee y devuelve un byte.
• char readChar(); Lee y devuelve un caracter.
• double readDouble(); Lee 8 bytes, y devuelve un double.
• float readFloat(); Lee 4 bytes, y devuelve un float.
• void readFully( byte b[] ); Lee bytes del fichero y los almacena en un vector b.
• void readFully( byte b[], int ini, int len ); Lee len bytes del fichero y los almacena en un vector
b.
• int readInt(); Lee 4 bytes, y devuelve un int.
• long readLong(); Lee 8 bytes, y devuelve un long.
• short readShort(); Lee 2 bytes, y devuelve un short.
• int readUnsignedByte(); Lee 1 byte, y devuelve un valor de 0 a 255.
• int readUnsignedShort(); Lee 2 bytes, y devuelve un valor de 0 a 65535.
• String readUTF(); Lee una cadena codificada con el formato UTF-8.
• int skipBytes(int n); Salta n bytes del fichero.
Si no es posible la lectura devuelven –1.
-OBJETIVO
Implementar aplicaciones orientadas a objetos que creen y manipulen archivos para guardar y
recuperar información
-LUGAR
Sala de Cómputo
-SEMANA DE EJECUCIÓN
Semana 12 y 13
- MATERIAL Y EQUIPO
Equipo de cómputo
Eclipse
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
55 de 58
-DESARROLLO DE LA PRÁCTICA
Problemáticas.
Caso 1.
Se sabe que a las 9 de la mañana la temperatura es de 12 grados, y durante la tarde desciende 15
grados hasta las 8 de la noche.
Tu trabajo es realizar un programa para que dados estos 4 valores indiques la temperatura
después de haber descendido.
Entrada:
EL programa recibirá n líneas que contendrán 4 valores enteros A, B, C, D, donde A es la hora
inicial, B es la temperatura inicial,
C es la temperatura de descenso y D es la hora final el programa terminará con 0.
Ejemplo
9 12 15 8
0
Salida:
La salida contendrá el valor de la temperatura al descenso en una línea que diga:
Ejemplo
La temperatura a las 8 de la noche es de -3 grados.
Paso 2. Escriba el método main y abra un flujo de entrada para leer de un archivo llamado
entrada.in las líneas de prueba.
Paso 3. Escriba un ciclo para invocar al método readCase, solveCase, print Paso
4. Escriba el código para hacer funcional el método readCase
Paso 5. Escriba el código para hacer funcional el método solveCase
Paso 6. Escriba el código para hacer funcional el método print almacenando la información en un
archivo llamado “salida.out”
Paso 7. Escriba el código para manejar las excepciones derivadas del manejo de archivos Paso
8. Compile y pruebe el código.
Paso 9. Realice los mismos pasos para los casos 2 y 3.
Caso 2.
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
56 de 58
Pedro es un niño muy inteligente y le gusta adivinar las edades de las personas, pero para poder
tener un margen de éxito pide a dos personas que le digan sus edades y cuál es la diferencia entre
ellas y con esto puede en menos de un minuto acertar la edad de cada uno.
Para hacer una prueba Juan y a Víctor le dicen que sus edades sumadas dan 84 y la diferencia de
edades entre ambos es de 8 inmediatamente Pedro les responde que uno tiene 46 y el otro 38,
asombrados ellos quieren tu ayuda para hacer un programa que permita realizar esto.
Entrada:
Como dato de entrada se proporcionará n líneas, cada una contendrá 2 valores P y Q, p
corresponde a la cantidad en años de dos personas y Q la diferencia en años, y un cero para
terminar el programa.
Ejemplo
45 3
24 2
0
Salida:
A la salida se espera por cada línea de entrada una línea que contenga las edades de las dos
personas.
Ejemplo
21 24
11 13
Ejercicio 3
Realizar un programa para que dado un número, lo divida en tres partes A, B, C que cumplan que
B es el tripe de A y 40 unidades mayor que C.
Entrada:
EL programa recibirá n líneas que contendrán valores enteros, la entrada finalizará con 0.
Ejemplo
65
352
198 0
La salida contendrá los valores de A, B y C separados por espacios en blanco.
Ejemplo
15 45 5
56 168 128
34 102 62
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
57 de 58
- EVALUACIÓN Y RESULTADOS
Analiza el problema 15
El alumno deberá presentar los códigos fuente generados para solucionar el problema y las
pantallas de resultado en un informe.
-REFERENCIAS
-ANEXOS
Código: CPE-FO-
02-03
Dirección Académica
Revisión: 1
Página:
MANUAL DE PRÁCTICAS
58 de 58