Академический Документы
Профессиональный Документы
Культура Документы
SILABO
1. ESPECIFICACIONES GENERALES:
2. SUMILLA
El paradigma de la programacin orientada a objetos (POO). Conceptos bsicos (objeto, clase,
encapsulacin, polimorfismo, etc). Relaciones semnticas y jerrquicas, clases abstractas. La
importancia de la POO en la especificacin y construccin de Patrones o plantillas, excepciones y
persistencia. Casos prcticos y su implementacin en lenguajes como C++ y java.
3. OBJETIVO GENERAL
Proveer a los estudiantes los conceptos y tcnicas de orientacin a objetos (OO) que son fundamento
terico prctico para la resolucin de problemas y construccin de programas basado en el
paradigma de la OO. Ello le permitir afrontar con xito la solucin de aplicaciones complejas
Adems se cultivar las diferentes tcnicas de re-uso y criterios de robustez en un programa,
considerando siempre que solucionar una aplicacin debe ser vista como una obra de ingeniera.
4. OBJETIVOS ESPECIFICOS
Utilizar y aplicar correctamente la terminologa y conceptos bsicos de la POO.
Implementar y utilizar correctamente los mensajes como medio de comunicacin de los objetos.
Disear, implementar y aplicar los conceptos sobre relaciones entre clases con el fin de modelar
aplicaciones del mundo real apoyndose en mecanismos de reutilizacin.
Manipular objetos de diferentes clases por medio de un mismo elemento y realizar la misma
operacin de formas diferente basado en conceptos de polimorfismo.
Disear y aplicar clases y mtodos que acten sobre diferentes tipos de datos (genericidad).
Disear e implementar el uso de mecanismos para manejo de errores o excepciones y registro de
manera permanente del estado de un objeto usando conceptos de persistencia.
Alcanzar en el estudiante un grado de abstraccin que le permita analizar, disear, discutir e
implementar soluciones a travs de las herramientas usadas hoy en da en la POO.
5. CONTENIDO ANALTICO POR SEMANAS
1ra Semana: INTRODUCCIN.
Teora
La POO como un nuevo paradigma, su diferencia con la programacin estructurada y modular,
abstraccin, ocultamiento de la implementacin, reutilizacin y lenguajes orientados a objetos.
Ventajas y desventajas de la POO.
Prctica
Construccin de TAD y su manipulacin en un enfoque estructurado a travs de ejercicios prcticos,
ventajas y desventajas.
1
Laboratorio
Implementacin de TAD.
[9] 1, 21,39; [10] 29, 581; [11] 328; [12] 19; [5] 43; [7] 490; [6] 43, 69; [2] 34; [3] 1; [1] 23
2
Laboratorio
Forma de Implementar y ejercicios sobre clases abstractas en Java
Proyecto: Planteamiento
[10] 505; [13]697
3
13va Semana: GUIs
Teora
Conceptos, componentes, disposicin, eventos
Practica
Implementacin de GUI en java, AWT y SWING
Laboratorio
Implementacin en Java
Teora
Definicin de Concurrencia,ejemplos de sistemas donde existe concurrencia, necesidad de la
programacin concurrente, problemas tpicos de la programacin concurrente, Multiprogramacin,
Multitarea, Multiprocesos, Sistemas Paralelos y Distribuidos.El Concepto de Hilos (Threads) ,
composicin de Hilos, comunicacin entre Hilos, sincronizacin entre Hilos, soluciones a problemas
de interbloqueo, ejemplos de uso de Hilos en Productor Consumidor, Semforos.
Prctica
Diseo y construccin de Threads en Java.
Prctica Calificada N 4
Laboratorio
Implementacin de la Threads y de uso de Hilos en Productor Consumidor,semforos
6. METODOLOGA
El desarrollo del curso se realiza en base a sesiones terico, prctico y laboratorio por parte del
profesor y un sistema de enseanza y aprendizaje investigacin por parte de los alumnos. La
estructura del desarrollo del curso se asienta en una mixtura de mtodos activos en la que la
participacin de los alumnos les permite estar en permanente actividad mental. En ellas se producen
los estmulos necesarios, propiciando la motivacin indispensable para la realizacin del aprendizaje.
Las sesiones de aula y laboratorio se complementarn con el desarrollo de trabajos prcticos en
grupo los cuales no podrn exceder el 10 % del total de alumnos inscritos en el curso.
7. EVALUACIN
En base a una consideracin de evaluacin formativa, el proceso de obtencin de una calificacin
aprobatoria depender del logro de los objetivos por parte del alumno. Esto implica:
4
8. BIBLIOGRAFA
Bsica
[15]Deitel M. Harvey y Deitel J. Paul .(2008). Java Como Programar. Prentice Hall. Mexico D. F.
[1] Fco. Javier Ceballos. Java 2 Curso de Programacin. Alfaomega Ra-Ma
[14]Budd. Timothy. Introduccin a la Programacin orientada a objetos. Addison - Wesley
Iberoamericana.
[9] Bertrand Meyer. Construccin de Software Orientado a Objetos. Prentice Hall, segunda edicin
Complementaria
[3] Bruce Eckel. Piensa en Java. Prentice Hall Hispanoamericana S. A., 2002
[2] JhonZukowski. Java 2 J2SE 1.4. Anaya Multimedia 2003
[4] Luis Joyanes Aguilar. Programacin en Java 2, Algoritmos Estructuras de Datos y Programacin
Orientada a Objetos. Mc Graw Hill
[5] Mark Andrews. Aprenda Visual C++ Ya, McGraw-Hill, 1997
[6] Luis Joyanes Aguilar. Programacin Orientada a Objetos, Segunda edicin. McGraw-Hill
Interamericana De Espaa S.A. U, 1998
[7] Chris H. Pappas, William H. Murray. Visual C++ 6.0 . McGraw - Hill Interamericana S.A.U.
1999
[8] Kent Reisdorph. Aprendiendo Borland C++ Builder 3 en 21 Das. Prentice Hall Hispanoamericana
S. A. 1998
[10] Andrew C. Staugaard, Jr. Tcnicas Estructuradas y Orientadas a Objetos. Prentice Hall
Hispanoamericana S.A. 1998.
[11] Grady Booch. Anlisis y Diseo Orientado a Objetos. Addison Wesley Iberoamericana S.A., segunda
edicin, 1996
[12] James Rumbaugh, Michael Blaha, William Premerlani, Frederick Hed y William Lorenson.
Modelado y Diseo Orientado a Objetos, Metodologa OMT. Prentice Hall, 1996.
[13] Herbert Schildt. Turbo C/C++ Manual de Referencia, una informacin completa ideal para todo
usuario de Turbo C/C++. Osborne/ McGraw-Hill, 1999
5
Gua #1
Clases y Objetos
1. Hacer clic en la
pestaa Project.
3. Hacer clic en la
opcin Close Project.
Declaracin de atributos
En Java no hay variables globales; todas las variables se declaran
dentro del cuerpo de la clase o dentro de un mtodo. Las variables
declaradas dentro de un mtodo son locales al mtodo; las variables
declaradas en el cuerpo de la clase se dice que son miembros de la
clase y son accesibles por todos los mtodos de la clase.
S: puede acceder
N: no puede acceder
X: puede acceder al atributo en objetos que pertenezcan a la subclase,
pero no en los que pertenecen a la clase Padre.
private double x;
private double y;
Declaracin de Mtodos
Los mtodos pueden utilizar valores que les pasa el objeto que los llama
(parmetros), indicados con tipo1 nombre1, tipo2 nombre2 en el
esquema de la declaracin.
Mtodo Constructor
Tanto Java como C++ soportan la nocin de constructor. El
constructor es un tipo especfico de mtodo que siempre tiene el mismo
nombre que la clase y se utiliza para construir objetos de esa clase. No
tiene tipo de dato especfico de retorno, ni siquiera void. Esto se debe a
que el tipo especfico que debe devolver un constructor de clase es el
propio tipo de la clase.
Mtodo main()
El mtodo main(), es el cerebro de cualquier aplicacin Java. Cuando se
ejecuta una aplicacin Java utilizando el intrprete Java, se debe
especificar el nombre de la clase que se desea ejecutar. El intrprete
entonces, invoca al mtodo main() definido dentro de esa clase, que debe
controlar el flujo del programa, pedir al sistema los recursos que
necesite y ejecutar cualquier otro mtodo necesario para completar la
funcionalidad de la aplicacin.
Instanciar Objetos
Para instanciar un objeto el mtodo que se utiliza es "new". "New" crea
un objeto de la clase que le especifiquemos pero antes de esto se tiene
que declarar la variable que contendr ese nuevo objeto.
Ejm:
1)
2)
3)
4)
5)
import java.io.*;
try{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
dato = teclado.readLine();
}catch(Exception e){
System.out.println("Error");
}
return dato;
}
try{
numero = Double.parseDouble(cadena);
}catch(Exception e){
System.out.println("Error al momento de convertir a real");
}
return numero;
}
package jpackGuia01;
import java.io.*;
public jclsPunto() {
x = y = 0;
}
try{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
dato = teclado.readLine();
}catch(Exception e){
System.out.println("Error")
}
return dato;
}
try{
numero = Double.parseDouble(cadena);
}catch(Exception e){
System.out.println("Error al momento de convertir a real");
}
return numero;
}
do{
P.mostrar("Ingrese la Abcisa (x) = ");
num = P.convertirCadenaReal(P.leerDato());
}while(num == 999);
P.setX(num);
do{
P.mostrar("Ingrese la Ordenada (y) = ");
num = P.convertirCadenaReal(P.leerDato());
}while(num == 999);
P.setY(num);
NUNCA
NUNCA
NUNCA
NUNCA
NUNCA
TE RINDAS
.
package jpackGuia02;
// Mtodos constructores
public jclsEjmStatic() {
contA = contB = 0;
}
// Mtodo incrementar
public void incrementarAtributos(){
this.contA++;
contB++;
}
E.mostrar("Valores iniciales:");
E.mostrar("[contA , contB] = [" + E.getContA() + " , " + E.getContB() + "]");
F.mostrar("[contA , contB] = [" + F.getContA() + " , " + F.getContB() + "]");
E.incrementarAtributos();
F.incrementarAtributos();
Utilizamos
nombreClase.nombreVarClase;
nombreClase.nombreMetodoClase();
En lugar de
nombreObjeto.nombreVarClase;
nombreObjeto.nombreMetodoClase();
package jpackGuia02;
// Mtodos constructores
public jclsEjmStatic() {
contA = contB = 0;
}
// Mtodo incrementar
public static void incrementarAtributos(){
contA++;
contB++;
}
jclsEjmStatic.mostrar("Valores iniciales:");
jclsEjmStatic.mostrar("[contA , contB] = [" + jclsEjmStatic.getContA() + " , " + jclsEjmStatic.getContB() + "]");
jclsEjmStatic.mostrar("[contA , contB] = [" + jclsEjmStatic.getContA() + " , " + jclsEjmStatic.getContB() + "]");
jclsEjmStatic.incrementarAtributos();
jclsEjmStatic.incrementarAtributos();
}
}
CONSTANTES
En Java, se utiliza la palabra clave final para indicar que una variable debe
comportarse como si fuese constante, esto significa que no se permite su
modificacin una vez que haya sido declarada e inicializada.
package jpackGuia02;
public jclsEjmFinal() {
PI = 3.14159; //Esta lnea NO es correcta
}
Si se usa la palabra clave final con una variable o clase esttica, se pueden
crear constantes de clase, haciendo de esto modo un uso altamente eficiente
de la memoria, porque no se necesitaran mltiples copias de las constantes.
RESUMEN
package jpackGuia02;
Juego de la Tortuga
Descripcin:
Se tiene N jugadores sentados en una mesa circular, el determina el orden de
lanzamiento de cada jugador. El juego trata de tirar un dado, si se obtiene
como resultado el nmero 5 (por primera vez) se estara formando el cuerpo
de la tortuga, despus se busca obtener 4 nmeros UNOS (1) para formar las
4 patitas de la tortuga. Gana el juego aquel jugador que formo la tortuga.
package jpackGuia02;
public jclsDado() {
this.numero = 1;
}
do{
numero = (int)(Math.random() * 10);
}while(numero < 1 || numero > 6);
return numero;
}
}
package jpackGuia02;
public jclsJugador() {
setNombre("Juan Perez");
setContador(0);
}
this.nombre = nombre;
}
package jpackGuia02;
import java.io.*;
public jclsJuego() {
cantJugadores = 0;
}
do{
mostrar("Ingrese la cantidad de Jugadores:");
cantJugadores = convertirCadenaEntero(leerDato().trim());
}while(cantJugadores == 999);
J = new jclsJugador[cantJugadores];
do{
mostrar("Ingrese el nombre del Jugador #" + (i+1) + ":");
nombre = leerDato().trim();
}while(nombre.length() == 0);
jugador.setNombre(nombre);
J[i] = jugador;
}
}
while(estado == 0){
avance = jugador.getContador();
resultado = jclsDado.lanzarDado();
if(avance == 0){
if(resultado == 5){
jugador.incrementarContador();
}
}
if(avance == 5){
mostrar("El jugador - " + jugador.getNombre() + " ha
GANADO el JUEGO");
estado = 1;
}
i++;
}else{
i = 0;
}
}
do{
mostrar("****************************************");
mostrar("* JUEGO DE LA TORTUGA *");
mostrar("*______________________________________*");
mostrar("* Ingresar datos de Jugadores ____ [1] *");
mostrar("* Iniciar juego __________________ [2] *");
mostrar("* Salir del juego ________________ [3] *");
mostrar("****************************************");
mostrar("* Ingrese la opcin: ");
opcion = convertirCadenaEntero(leerDato().trim());
}while(opcion < 1 || opcion > 3);
return opcion;
}
do{
opcion = getOpcionMenu();
switch(opcion){
case 1:
setDatosJugadores();
break;
case 2:
iniciarJuego();
break;
}
}while(opcion != 3);
try{
BufferedReader teclado = new BufferedReader(new
InputStreamReader(System.in));
dato = teclado.readLine();
}catch(Exception e){
mostrar("Error");
}
return dato;
}
try{
numero = Integer.parseInt(cadena);
}catch(Exception e){
mostrar("Error al convertir a real");
}
return numero;
}
Resultado en consola:
****************************************
* JUEGO DE LA TORTUGA *
*______________________________________*
* Ingresar datos de Jugadores ____ [1] *
* Iniciar juego __________________ [2] *
* Salir del juego ________________ [3] *
****************************************
* Ingrese la opcin:
1
Ingrese la cantidad de Jugadores:
2
Ingrese el nombre del Jugador #1:
Juan Perez
Ingrese el nombre del Jugador #2:
Luis Flores
****************************************
* JUEGO DE LA TORTUGA *
*______________________________________*
* Ingresar datos de Jugadores ____ [1] *
* Iniciar juego __________________ [2] *
* Salir del juego ________________ [3] *
****************************************
* Ingrese la opcin:
2
Lanzamiento del jugador - Juan Perez: 2
Lanzamiento del jugador - Luis Flores: 1
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 2
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 3
Lanzamiento del jugador - Luis Flores: 6
Lanzamiento del jugador - Juan Perez: 2
Lanzamiento del jugador - Luis Flores: 5
Lanzamiento del jugador - Juan Perez: 1
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 6
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 1
Lanzamiento del jugador - Luis Flores: 1
Lanzamiento del jugador - Juan Perez: 2
Lanzamiento del jugador - Luis Flores: 2
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 3
Lanzamiento del jugador - Luis Flores: 2
Lanzamiento del jugador - Juan Perez: 3
Lanzamiento del jugador - Luis Flores: 1
Lanzamiento del jugador - Juan Perez: 2
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 3
Lanzamiento del jugador - Luis Flores: 2
Lanzamiento del jugador - Juan Perez: 1
Lanzamiento del jugador - Luis Flores: 6
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 1
Lanzamiento del jugador - Juan Perez: 3
Lanzamiento del jugador - Luis Flores: 3
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 6
Lanzamiento del jugador - Juan Perez: 3
Lanzamiento del jugador - Luis Flores: 2
Lanzamiento del jugador - Juan Perez: 6
Lanzamiento del jugador - Luis Flores: 5
Lanzamiento del jugador - Juan Perez: 4
Lanzamiento del jugador - Luis Flores: 5
* Ingrese la opcin:
3
NUNCA
NUNCA
NUNCA
NUNCA
NUNCA
TE RINDAS
.
Ejemplo 1.
Clase Inspector
Atributos:
NumFallas : entero
ContA : entero
ContB : entero
ContC : entero
Mtodos:
LeeProcesaNumFallas()
MuestraEstadisticas()
Implementacin en Pseudocodigo:
CLASE INSPECTOR
{ // Atributos
entero NumFallas
entero ContA
entero ContB
entero ConrC
//Mtodos
Inspector()
{
ContA = 0 , ContB = 0 , ContC = 0
}
LeeProcesoNumFallas( )
{ caracter Rpta =
MuestraEstadisticas()
{ entero Total.
Total ContA + ContB + ContC
Escribir ( ESTADISTICAS
)
Escribir ( TIPO TOTAL DE
COMPUTADORAS PORCENTAJE )
Escribir (-------------------------------------------------
----------------------------------)
Escribir ( A , ContA , ContA * 100
/ Total )
Escribir ( B , ContB , ContB * 100
/ Total )
Escribir ( C , ContC , ContC * 100
/ Total )
}
}
Programa Principal:
Inspector Oscar <- nuevo Inspector()
Oscar. LeeProcesaNumFallas()
Oscar.MuestraEstadisticas()
Fin.
Ejemplo 2.
Clase Financiera
Atributos:
NombreVG
NumeroCG
TotalBonos
Mtodos:
ProcesaDatos()
MuestraResultados()
Implementacin en Pseudocodigo:
CLASE Financiera
{ // Atributos
Cadena NombreVG
Entero NumerosCG
Real TotalBonos
//Mtodos
Financiera()
{
NumeroCG 0
TotalEnBonos 0
ProcesoDatos( )
{ cadena Nombre
Entero NumContrato
entero i
Para i desde 1 hasta 30
Escribe (Ingrese el nombre del vendedor: , i
)
Leer (Nombre)
Escribe (Ingrese nmero de contratos )
Leer ( NumContrato)
Si ( NumContratos > NumeroCG)
NumeroCG NumContratos
NombreVG Nombre
FinSi.
Si ( NumContratos > 10 y
NumContratos < 50 )
TotalBonos TotalBonos + 50
FinSi
Si ( NumContratos > = 50 y
NumContratos < 100 )
TotalBonos TotalBonos +
100
FinSi
Si ( NumContratos >= 100 )
TotalBonos TotalBonos +
200
FinSi
FinPara
MuestraResultados()
{
Escribir ( EL EJECUTIVO GANADOR ES :
, NombreVG )
Escribir (EL TOTAL DE CONTRAROS SON:
,NumeroCG )
Escribir (EL TOTAL A DESEMBOLSAR POR
LA FINANCIERA ES: )
Escribir ( TotalBonos )
}
} //Fin de la clase.
Programa Principal:
Financiera F nuevo Financiera ()
F.ProcesoDatos()
F.MuestraResultados()
Fin.
JERARQUIA DE CLASES, CLASES ABSTRACTAS, Public String muestra_nombre()`
POLIMORFISMO {return nombre}
Objetivo: Desarrollar una aplicacin que presente los conocimientos adquiridos en el curso.
Considerar las siguientes indicaciones:
3. INFORMES:
FECHAS
5 Junio : Descripcin del tema a tratar. (aula)
12 Junio : Diagrama de clases inicial. (aula)
19 Junio : Programas iniciales (aula) (laboratorio)
26 Junio : Cdigo Java (aula) (laboratorio)
03 Julio : EXPOSICONES FINALES DEL PROYECTO.
CLASES ABSTRACTAS
Descripcin:
Una de las caractersticas ms tiles de cualquier lenguaje orientado a objetos es la
posibilidad de declarar clases que solamente definen los mtodos van a utilizar, sin tener
que implementar los mtodos. Esto es muy til cuando la implementacin es especfica para
cada usuario, pero todos los usuarios tienen que utilizar los mismos mtodos.
Los mtodos se declaran en la clase Graphics, pero el cdigo que ejecutar el mtodo est en
otro sitio:
Cuando una clase contiene un mtodo abstracto tiene que declararse abstracta. No obstante,
no todos los mtodos de una clase abstracta tienen que ser abstractos. Las clases abstractas
no pueden tener mtodos privados (no se podran implementar) ni tampoco estticos. Una
clase abstracta tiene que derivarse obligatoriamente, no se puede hacer un new de una clase
abstracta.
Una clase abstracta no se puede instanciar pero si se puede heredar y las clases hijas sern
las encargadas de agregar la funcionalidad a los mtodos abstractos. Si no lo hacen as, las
clases hijas deben ser tambin abstractas.
Ejemplo:
import java.util.*;
}
}
}
}
// Un tipo de Guitarra
class Guzla extends Guitarra {
// Un tipo de Guitarra
class Ukelele extends Guitarra {
afinarTodo(orquesta);
}
}
Clase Musica
La Clase anterior es idntica aquella definida en el ejemplo de Polimorfismo, sin embargo, la
Clase Base de Instrumento fue definida como abstract, algunos detalles de esta definicin:
Ntese que los mtodos definidos como abstract no contienen ningn tipo de cdigo
dentro de ellos, inclusive no declaran ni llaves ({ }).
Cuando es definido ms de un mtodo como abstract, es necesario que la Clase como tal
sea definida tambin como abstract.
La caracterstica de hacer una Clase/Mtodo abstract reside en que no puede ser generada
una instancia de la misma, este comportamiento se demuestra en el mtodo principal (main)
Aunque dentro del mtodo sea generado un Arreglo de esta Clase abstracta, recuerde que
un arreglo es nicamente un contenedor de Objetos, esto permite que sea generado sin
ningn error.
Dentro de comentarios se encuentra la generacin de una instancia del tipo Instrumento
la cual generara un error al ser compilada la Clase.
Clase jclsFiguraGeometrica:
package jpackClases;
import java.awt.*;
public jclsFiguraGeometrica() {
nombre = "Figura";
fuente = new Font("ARIAL",Font.BOLD,30);
}
Clase jclsCirculo:
package jpackClases;
import java.awt.*;
import java.awt.geom.*;
g2.setColor(Color.green);
g2.fill(new Ellipse2D.Double(x,y,ancho,alto));
g2.setColor(Color.blue);
g2.draw(new Ellipse2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("CIRCULO",x+55,y+50);
}
}
Clase jclsRectangulo:
package jpackClases;
import java.awt.*;
import java.awt.geom.*;
g2.setColor(Color.yellow);
g2.fill(new Rectangle2D.Double(x,y,ancho,alto));
g2.setColor(Color.red);
g2.draw(new Rectangle2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("RECTANGULO",x+50,y+50);
}
}
Clase jclsInicio:
package jpackGUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public jclsInicio() {
this.setTitle("Guia 6: Clases Abstracta");
this.setSize(600,400);
this.setLocation(100,50);
this.setVisible(true);
this.setIconImage(new ImageIcon("src\\jpackImagenes\\bandera.gif").getImage());
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
preparBarraMenu();
prepararPanelFondo();
prepararPanelLimpiar();
prepararPanelDibujo();
}
jmnuArchivo.setMnemonic('A');
jmnuPoligono.setMnemonic('P');
jmnubBarra.setBackground(Color.yellow);
jmnuArchivo.setForeground(Color.blue);
jmnuPoligono.setForeground(Color.blue);
jmnuiIniciar.setBackground(Color.yellow);
jmnuiIniciar.setForeground(Color.blue);
jmnuiCerrar.setBackground(Color.yellow);
jmnuiCerrar.setForeground(Color.red);
jmnuiSalir.setBackground(Color.white);
jmnuiSalir.setForeground(Color.black);
jmnuiRect.setBackground(Color.yellow);
jmnuiRect.setForeground(Color.blue);
jmnuiCir.setBackground(Color.yellow);
jmnuiCir.setForeground(Color.blue);
jmnuPoligono.setEnabled(false);
jmnuiCerrar.setEnabled(false);
jmnuiIniciar.addActionListener(this);
jmnuiCerrar.addActionListener(this);
jmnuiSalir.addActionListener(this);
jmnuiRect.addActionListener(this);
jmnuiCir.addActionListener(this);
jmnuArchivo.add(jmnuiIniciar);
Prof. Arn Herrera Ponte Pg. 8
Grupo de Estudios FENIX JAVA - Clases y Objetos
Aprendes, Creas e Innovas
jmnuArchivo.add(jmnuiCerrar);
jmnuArchivo.add(jsep1);
jmnuArchivo.add(jmnuiSalir);
jmnuPoligono.add(jmnuiRect);
jmnuPoligono.add(jmnuiCir);
jmnubBarra.add(jmnuArchivo);
jmnubBarra.add(jmnuPoligono);
this.setJMenuBar(jmnubBarra);
}
this.add(jpanFondo);
}
jpanFondo.add(jpanLimpiar,"Limpiar");
}
if(e.getSource()==jmnuiIniciar){
jmnuPoligono.setEnabled(true);
jmnuiIniciar.setEnabled(false);
jmnuiCerrar.setEnabled(true);
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Limpiar");
}
if(e.getSource()==jmnuiCerrar){
jmnuPoligono.setEnabled(false);
jmnuiIniciar.setEnabled(true);
jmnuiCerrar.setEnabled(false);
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Limpiar");
}
if(e.getSource()==jmnuiSalir){
System.exit(0);
}
if(e.getSource()==jmnuiRect){
jpanDibu.setNombre("RECTANGULO");
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
if(e.getSource()==jmnuiCir){
jpanDibu.setNombre("CIRCULO");
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
}
Clase jpanDibujo:
package jpackGUI;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import jpackClases.*;
public jpanDibujo() {
setNombre("CIRCULO");
}
if(nombre.equalsIgnoreCase("CIRCULO")){
jclsCirculo C = new jclsCirculo(50,50,250,250);
C.dibujar(g2);
}
if(nombre.equalsIgnoreCase("RECTANGULO")){
jclsRectangulo R = new jclsRectangulo(50,50,400,250);
R.dibujar(g2);
}
}
Diagrama de rbol
Ejecutando el Programa
- El cursor del Mouse debe estar en el cdigo del programa.
- Presionar las teclas SHIFT + F9
Ahora hacemos clic en el men Polgono y observamos las opciones Rectngulo y Crculo.
POLIMORFISMO
Descripcin:
Es la capacidad de tener mtodos con el mismo nombre y diferente implementacin.
Uno de los objetivos principales de las tcnicas OO es utilizar una y otra vez el mismo cdigo.
Sin embargo, algunas de las operaciones requieren adaptacin para resolver necesidades
particulares. Esta necesidad, se da generalmente entre superclases y subclases, donde una
subclase es una especializacin de su superclase, y puede requerir alcanzar los mismos
objetivos, pero con distintos mecanismos. Por ejemplo, una superclase Rectngulo podra
tener una operacin calculoArea() cuyo objetivo es calcular el rea del rectngulo, definida
como la multiplicacin de las longitudes de dos lados contiguos. A su vez, la clase Cuadrado
es una subclase de Rectngulo que tambin tiene una operacin calculoArea() cuyo objetivo
es calcular el rea del cuadrado, pero que est definida especialmente para los objetos del
tipo cuadrado como la multiplicacin de la longitud de uno de sus lados por si mismo. Este
fenmeno, polimorfismo, se aplica a una operacin que adopta varias formas de implantacin
segn el tipo de objeto, pero cumple siempre el mismo objetivo.
Una de las ventajas del polimorfismo es que se puede hacer una solicitud de una operacin
sin conocer el mtodo que debe ser llamado. Estos detalles de la implantacin quedan ocultos
para el usuario y la responsabilidad descansa en el mecanismo de seleccin de la
implantacin. Por ejemplo, al tratar de frenar un vehculo siempre se debe oprimir el pedal
del lado izquierdo y as el vehculo se detendr sin importar si los frenos son de tambor o de
aire.
Polimorfismo significa mltiples formas; en programacin orientada por objetos esto significa
que una operacin puede tener ms de un mtodo que la implementa. La propiedad de
polimorfismo permite que cuando se enva un mensaje a un objeto, slo se decida en tiempo
de ejecucin que mtodo se invoca. Este concepto se conoce como encadenamiento tardo. En
lenguajes tradicionales estructurados se hace el encadenamiento temprano, lo que significa
que el encadenador sabe resolver todos los llamados a rutinas en tiempo de
compilacin/encadenamiento.
import java.util.*;
class Instrumento {
// Un tipo de Guitarra
class Guzla extends Guitarra {
// Un tipo de Guitarra
class Ukelele extends Guitarra {
Clase Musica
En el cdigo fuente de Musica.java son diseadas diversas Clases que demuestran el uso de
Polimorfismo:
Instrumento: Es utilizada como la Clase Base para el resto de Clases y en ella son definidos
tres mtodos: tocar, tipo y afinar.
Guitarra: Hereda ("Inherit") de la Clase Instrumento y redefine ("Override") los mtodos de
sta.
Piano: Hereda ("Inherit") de la Clase Instrumento y redefine ("Override") los mtodos de sta.
Las definiciones de la Clase principal Musica son descritas en los siguientes incisos:
El primer mtodo definido en esta Clase llamado afinar toma como valor de entrada una
referencia del tipo Instrumento, sobre la cual es invocado el mtodo tocar.
Un segundo mtodo nombrado afinarTodo toma como valor de inicia un arreglo de
Instrumento, el cual es procesado por un ciclo que a su vez manda llamar el mtodo afinar
con los respectivos valores del arreglo.
Dentro del mtodo principal se define lo siguiente:
Primeramente se genera un arreglo de Instrumento para 5 Objetos.
Se inicializa un entero i con un valor de cero.
A travs de la referencia orquesta son asignados distintos Objetos al arreglo, ntese
que aunque el arreglo es de tipo Instrumento es posible asignar los Objetos: Guitarra,
Piano, Saxofon, Guzla, Ukelele.
Finalmente se invoca el mtodo afinarTodo con la referencia que representa el arreglo
de Instrumento.
Guitarra.tocar()
Piano.tocar()
Saxofon.tocar()
Guzla.tocar()
Ukelele.tocar()
Sin embargo, al ser invocado el mtodo tocar a pesar de ser a travs de una referencia
Instrumento es invocado el mtodo de Clase acordemente, esto es, se llama el mtodo de la
Clase especifica; lo anterior es una labor de Polimorfismo ya que ocurre el comportamiento
adecuado a pesar de realizarse las llamadas a travs de una clase general (Instrumento).
Clase jclsFiguraGeometrica
package jpackClases;
import java.awt.*;
public jclsFiguraGeometrica() {
nombre = "Figura";
fuente = new Font("ARIAL",Font.BOLD,30);
}
Clase jclsCirculo
package jpackClases;
import java.awt.*;
import java.awt.geom.*;
g2.setColor(Color.green);
g2.fill(new Ellipse2D.Double(x,y,ancho,alto));
g2.setColor(Color.blue);
g2.draw(new Ellipse2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("CIRCULO",x+55,y+50);
}
}
Clase jclsRectangulo
package jpackClases;
import java.awt.*;
import java.awt.geom.*;
g2.setColor(Color.yellow);
g2.fill(new Rectangle2D.Double(x,y,ancho,alto));
g2.setColor(Color.red);
g2.draw(new Rectangle2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("RECTANGULO",x+50,y+50);
}
}
Clase jpanDibujo
package jpackClases;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public jpanDibujo() {
nombre = "CIRCULO";
}
Clase jclsInicio
package jpackGUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import jpackClases.jpanDibujo;
import jpackClases.*;
public jclsInicio() {
this.setTitle("Guia 7: Polimorfismo");
this.setSize(600,400);
this.setLocation(100,50);
this.setVisible(true);
this.setIconImage(new ImageIcon("src\\jpackImagenes\\bandera.gif").getImage());
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
preparBarraMenu();
prepararPanelFondo();
prepararPanelLimpiar();
prepararPanelDibujo();
}
jmnuArchivo.setMnemonic('A');
jmnuPoligono.setMnemonic('P');
jmnubBarra.setBackground(Color.yellow);
jmnuArchivo.setForeground(Color.blue);
jmnuPoligono.setForeground(Color.blue);
jmnuiIniciar.setBackground(Color.yellow);
jmnuiIniciar.setForeground(Color.blue);
jmnuiCerrar.setBackground(Color.yellow);
jmnuiCerrar.setForeground(Color.red);
jmnuiSalir.setBackground(Color.white);
Prof. Arn Herrera Ponte Pg. 8
Grupo de Estudios FENIX JAVA - Clases y Objetos
Aprendes, Creas e Innovas
jmnuiSalir.setForeground(Color.black);
jmnuiRect.setBackground(Color.yellow);
jmnuiRect.setForeground(Color.blue);
jmnuiCir.setBackground(Color.yellow);
jmnuiCir.setForeground(Color.blue);
jmnuPoligono.setEnabled(false);
jmnuiCerrar.setEnabled(false);
jmnuiIniciar.addActionListener(this);
jmnuiCerrar.addActionListener(this);
jmnuiSalir.addActionListener(this);
jmnuiRect.addActionListener(this);
jmnuiCir.addActionListener(this);
jmnuArchivo.add(jmnuiIniciar);
jmnuArchivo.add(jmnuiCerrar);
jmnuArchivo.add(jsep1);
jmnuArchivo.add(jmnuiSalir);
jmnuPoligono.add(jmnuiRect);
jmnuPoligono.add(jmnuiCir);
jmnubBarra.add(jmnuArchivo);
jmnubBarra.add(jmnuPoligono);
this.setJMenuBar(jmnubBarra);
}
this.add(jpanFondo);
}
jpanFondo.add(jpanLimpiar,"Limpiar");
}
if(e.getSource()==jmnuiIniciar){
jmnuPoligono.setEnabled(true);
jmnuiIniciar.setEnabled(false);
jmnuiCerrar.setEnabled(true);
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Limpiar");
}
if(e.getSource()==jmnuiCerrar){
jmnuPoligono.setEnabled(false);
jmnuiIniciar.setEnabled(true);
jmnuiCerrar.setEnabled(false);
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Limpiar");
}
if(e.getSource()==jmnuiSalir){
System.exit(0);
}
if(e.getSource()==jmnuiRect){
jclsRectangulo R = new jclsRectangulo(50,50,400,250);
jpanDibu.setFigura(R);
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
if(e.getSource()==jmnuiCir){
jclsCirculo C = new jclsCirculo(50,50,250,250);
jpanDibu.setFigura(C);
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
}
Interface Objeto
package jpackClases;
import java.awt.*;
Clase Persona
package jpackClases;
import java.awt.*;
public Persona() {
nombre = "Persona";
fuente = new Font("ARIAL",Font.BOLD,30);
}
Clase Cantante
package jpackClases;
import java.awt.*;
Clase Futbolista
package jpackClases;
import java.awt.*;
Clase Modelo
package jpackClases;
import java.awt.*;
Clase Tablista
package jpackClases;
import java.awt.*;
package jpackClases;
import java.awt.*;
public jclsFiguraGeometrica() {
nombre = "Figura";
fuente = new Font("ARIAL",Font.BOLD,30);
}
}
}
Clase jclsCirculo
package jpackClases;
import java.awt.*;
import java.awt.geom.*;
g2.setColor(Color.green);
g2.fill(new Ellipse2D.Double(x,y,ancho,alto));
g2.setColor(Color.blue);
g2.draw(new Ellipse2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("CIRCULO",x+55,y+50);
}
g2.setColor(Color.green);
g2.fill(new Ellipse2D.Double(x,y,ancho,alto));
g2.setColor(Color.blue);
g2.draw(new Ellipse2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("CIRCULO",x+55,y+50);
}
}
Clase jclsRectangulo
package jpackClases;
import java.awt.*;
import java.awt.geom.*;
g2.setColor(Color.yellow);
g2.fill(new Rectangle2D.Double(x,y,ancho,alto));
g2.setColor(Color.red);
g2.draw(new Rectangle2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("RECTANGULO",x+50,y+50);
}
g2.setColor(Color.green);
g2.fill(new Ellipse2D.Double(x,y,ancho,alto));
g2.setColor(Color.blue);
g2.draw(new Ellipse2D.Double(x,y,ancho,alto));
g2.setFont(fuente);
g2.drawString("CIRCULO",x+55,y+50);
}
}
Clase jpanDibujo
package jpackClases;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public jpanDibujo() {
nombre = "CIRCULO";
}
Clase jclsInicio
package jpackGUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import jpackClases.jpanDibujo;
import jpackClases.*;
public jclsInicio() {
this.setTitle("Guia 7: Polimorfismo");
this.setSize(600,400);
this.setLocation(100,50);
this.setVisible(true);
this.setIconImage(new ImageIcon("src\\jpackImagenes\\bandera.gif").getImage());
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
preparBarraMenu();
prepararPanelFondo();
prepararPanelLimpiar();
prepararPanelDibujo();
}
jmnuArchivo.setMnemonic('A');
jmnuPoligono.setMnemonic('o');
jmnuPersona.setMnemonic('e');
jmnubBarra.setBackground(Color.yellow);
jmnuArchivo.setForeground(Color.blue);
jmnuPoligono.setForeground(Color.blue);
jmnuPersona.setForeground(Color.blue);
jmnuiIniciar.setBackground(Color.yellow);
jmnuiIniciar.setForeground(Color.blue);
jmnuiCerrar.setBackground(Color.yellow);
jmnuiCerrar.setForeground(Color.red);
jmnuiSalir.setBackground(Color.white);
jmnuiSalir.setForeground(Color.black);
jmnuiRect.setBackground(Color.yellow);
jmnuiRect.setForeground(Color.blue);
jmnuiCir.setBackground(Color.yellow);
jmnuiCir.setForeground(Color.blue);
jmnuH.setForeground(Color.blue);
jmnuM.setForeground(Color.blue);
Prof. Arn Herrera Ponte Pg. 16
Grupo de Estudios FENIX JAVA - Clases y Objetos
Aprendes, Creas e Innovas
jmnuiH1.setBackground(Color.yellow);
jmnuiH1.setForeground(Color.blue);
jmnuiH2.setBackground(Color.yellow);
jmnuiH2.setForeground(Color.blue);
jmnuiM1.setBackground(Color.yellow);
jmnuiM1.setForeground(Color.blue);
jmnuiM2.setBackground(Color.yellow);
jmnuiM2.setForeground(Color.blue);
jmnuPersona.setEnabled(false);
jmnuPoligono.setEnabled(false);
jmnuiCerrar.setEnabled(false);
jmnuiIniciar.addActionListener(this);
jmnuiCerrar.addActionListener(this);
jmnuiSalir.addActionListener(this);
jmnuiRect.addActionListener(this);
jmnuiCir.addActionListener(this);
jmnuiH1.addActionListener(this);
jmnuiH2.addActionListener(this);
jmnuiM1.addActionListener(this);
jmnuiM2.addActionListener(this);
jmnuArchivo.add(jmnuiIniciar);
jmnuArchivo.add(jmnuiCerrar);
jmnuArchivo.add(jsep1);
jmnuArchivo.add(jmnuiSalir);
jmnuPoligono.add(jmnuiRect);
jmnuPoligono.add(jmnuiCir);
jmnuPersona.add(jmnuH);
jmnuPersona.add(jmnuM);
jmnuH.add(jmnuiH1);
jmnuH.add(jmnuiH2);
jmnuM.add(jmnuiM1);
jmnuM.add(jmnuiM2);
jmnubBarra.add(jmnuArchivo);
jmnubBarra.add(jmnuPoligono);
jmnubBarra.add(jmnuPersona);
this.setJMenuBar(jmnubBarra);
}
this.add(jpanFondo);
}
jpanFondo.add(jpanLimpiar,"Limpiar");
}
if(e.getSource()==jmnuiIniciar){
jmnuPersona.setEnabled(true);
jmnuPoligono.setEnabled(true);
jmnuiIniciar.setEnabled(false);
jmnuiCerrar.setEnabled(true);
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Limpiar");
}
if(e.getSource()==jmnuiCerrar){
jmnuPersona.setEnabled(false);
jmnuPoligono.setEnabled(false);
jmnuiIniciar.setEnabled(true);
jmnuiCerrar.setEnabled(false);
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Limpiar");
}
if(e.getSource()==jmnuiSalir){
System.exit(0);
}
if(e.getSource()==jmnuiRect){
jclsRectangulo R = new jclsRectangulo(50,50,400,250);
jpanDibu.setObjeto(R);
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
if(e.getSource()==jmnuiCir){
jclsCirculo C = new jclsCirculo(50,50,250,250);
jpanDibu.setObjeto(C);
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
if(e.getSource()==jmnuiH1){
Futbolista Futbol = new Futbolista("Paolo Guerrero");
jpanDibu.setObjeto(Futbol);
Prof. Arn Herrera Ponte Pg. 18
Grupo de Estudios FENIX JAVA - Clases y Objetos
Aprendes, Creas e Innovas
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
if(e.getSource()==jmnuiH2){
Cantante Canta = new Cantante("Pedro Suarez Vertiz");
jpanDibu.setObjeto(Canta);
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
if(e.getSource()==jmnuiM1){
Modelo Mode = new Modelo("Mara Julia Mantilla");
jpanDibu.setObjeto(Mode);
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
if(e.getSource()==jmnuiM2){
Tablista Tabla = new Tablista("Sofa Mulanovich");
jpanDibu.setObjeto(Tabla);
jpanDibu.repaint();
((CardLayout)jpanFondo.getLayout()).show(jpanFondo,"Dibujo");
}
Relacin de HERENCIA
Definicin
La herencia es una propiedad de la POO que permite que las clases hereden
los atributos y los mtodos de otras clases.
Notacin
Se representa con una lnea slida, que va desde una clase (llamada "HIJA")
haca otra clase, con un tringulo al final (llamada "PADRE")
Formas de lectura
"La clase A hereda de la clase B"
"La clase A es hija de la clase B"
"La clase B es padre de la clase A"
Forma de implementacin
En Java se logra por medio de la palabra reservada "extends" y otorgndoles
una visibilidad de protected a los atributos y mtodos.
Ejemplo
Imaginemos que estamos realizando un programa informtico para un
colegio y necesitamos crear las clases Alumno y Profesor, en UML
podemos hacer lo siguiente:
Alumno Profesor
nombres : String nombres : String
apellidos : String apellidos : String
edad : int edad : int
grado : int dni : String
Alumno() Profesor()
getNombres() : String getNombres() : String
setNombres(nombres : String) setNombres(nombres : String)
getApellidos() : String getApellidos() : String
setApellidos(apellidos : String) setApellidos(apellidos : String)
getEdad() : int getEdad() : int
setEdad(edad : int) setEdad(edad : int)
getGrado() : int getDni() : String
setGrado(grado : int) setDni(dni : String)
Vemos que hay varios atributos y mtodos que se repiten, con ellos podemos
crear una tercera clase llamada Persona:
Persona
nombres : String
apellidos : String
edad : int
Persona()
getNombres() : String
setNombres(nombres : String)
getApellidos() : String
setApellidos(apellidos : String)
getEdad() : int
setEdad(edad : int)
Esta clase Persona rene los atributos y mtodos comunes a las clases
Alumno y Profesor. Por ltimo slo falta agregar la relacin de HERENCIA
entre las clases:
Persona
nombres : String
apellidos : String
edad : int
Persona()
getNombres() : String
setNombres(nombres : String)
getApellidos() : String
setApellidos(apellidos : String)
getEdad() : int
setEdad(edad : int)
Alumno Profesor
grado : int dni : String
Alumno() Profesor()
getGrado() : int getDni() : String
setGrado(grado : int) setDni(dni : String)
De esta manera hacemos que la clase ALUMNO herede todos los mtodos
y atributos de la clase PERSONA, lo mismo para la clase PROFESOR.
Clase Persona.java
public class Persona{
public Persona(){
Clase Alumno.java
public class Alumno extends Persona{
public Alumno(){
Clase Profesor.java
public class Profesor extends Persona{
public Profesor(){
Clase Programa.java
public class Programa{
De esta manera podemos crear un alumno y un profesor para luego usar los
mtodos heredados desde la clase Persona. Tambin, si as lo quisiramos,
podemos crear un objeto de la clase Persona como si se tratase de una
clase cualquiera.
Clase Persona.java
public class Persona{
public Persona(){
Clase Alumno.java
public class Alumno extends Persona{
public Alumno(){
Clase Profesor.java
public class Profesor extends Persona{
public Profesor(){
Clase Programa.java
public class Programa{
Salida:
Alumno: null
Profesor: null
Gracias a la herencia es posible referenciar a las clases hijas con las clases
padres. Veamos el siguiente cdigo en Java que hace uso de las clases
Alumno, Profesor y Persona vistos antes:
Clase Programa.java
public class Programa{
Vemos que una variable llamada persona que es del tipo Persona est
siendo instanciada como un tipo Alumno. Esto es posible porque la clase
padre de Alumno es Persona.
Hay que tener en cuenta que el casting que realicemos debe ser vlido. Por
ejemplo, lo siguiente producira un error:
Clase Programa.java
public class Programa{
En todo caso, Java nos da una herramienta para averiguar la instancia con la
cual fue construido un objeto gracias a la palabra reservada instanceof:
Clase Programa.java
public class Programa{
Jerarqua de herencia
A B C
Herencia mltiple
VehiculoTerrestre VehiculoAcuatico
VehiculoAnfibio
Relacin de REALIZACIN
Definicin
La herencia es una relacin de la POO que permite definir el comportamiento
de una clase sin la necesidad de implementar los mtodos: define el qu,
no el cmo.
Notacin
Se representa con una lnea punteada, que va desde una clase haca una
interfaz, con un tringulo al final.
Interfaz
Clase
Formas de lectura
"La clase A implementa la interfaz B"
"La interfaz B define la clase A"
Forma de implementacin
En Java definimos una interfaz por medio de la palabra reservada interface,
y la implementamos en una clase por medio de la palabra reservada
implements.
Ejemplo
Supongamos que una fbrica especializada en la fabricacin de calculadoras
nos contrata para desarrollar su software. La fbrica produce calculadoras de
dos tipos: comunes y cientficas. Tambin nos dicen que las calculadoras
comunes pueden sumar, restar, multiplicar y dividir, mientras que las
cientficas adems de esas operaciones pueden obtener el seno, el coseno y
la tangente. Por ltimo nos informan que las calculadoras cientficas al
tratarse de aparatos usados para clculos avanzados deben implementar los
algoritmos de clculos de la forma ms eficiente posible.
Calculadora
CalculadoraCientifica
CalculadoraComun
seno(a : double) : double
coseno(a : double) : double
tangente(a : double) : double
Interfaz Calculadora.java
public interface Calculadora {
Clase CalculadoraComun.java
public class CalculadoraComun implements Calculadora{
return a+b;
}
Clase CalculadoraCientifica.java
public class CalculadoraCientifica implements Calculadora{
/*Mtodos implementados*/
/*Mtodos propios*/
Interfaz Dibujante.java
public interface Dibujante {
Clase DibujantePrincipiante.java
public class DibujantePrincipiante implements Dibujante{
Las interfaces
Una interfaz es una agrupacin de mtodos declarados ms no
implementados, que sirven para definir un conjunto de funcionalidades que
una clase debe implementar. Tambin debemos saber que los mtodos en
las interfaces siempre deben de tener una visibilidad del tipo public.
Recordar que una interfaz slo define el qu se hace, mas no el cmo se
hace.
ExpertoEnNatacion
ExpertoEnArtesMarciales
nadarEstiloLibre()
darGolpeDePatada()
nadarEstiloEspalda()
darGolpeDeMano()
nadarEstiloBuceo()
darSaltoConPatada()
nadarEstiloMariposa()
Persona
nombre : String
caminar()
comer()
dormir()
Interfaz ExpertoEnNatacion.java
public interface ExpertoEnNatacion {
Interfaz ExpertoEnArtesMarciales.java
public interface ExpertoEnArtesMarciales {
Clase Persona.java
public class Persona implements ExpertoEnNatacion, ExpertoEnArtesMarciales{
Clase Programa.java
public class Programa {
/*Llamamos a un mtodo*/
System.out.println(calculadora.sumar(1, 2));
}
PREGUNTAS:
DESARROLLAR:
EJERCICIO 1:
En un descentralizado de ftbol se presentan 12 equipos. Cada equipo pertenece a un club
y es dirigido por un director tcnico; adems el club tiene su presidente y un estadio donde
juega, y los puntos acumulados, presentar a los equipos en orden de sus puntos.
EJERCICIO 2:
Una empresa tiene unos 20 trabajadores, cada registra su cdigo, nombre, horas
trabajadas y cargo, segn el cargo se le paga, si es obrero 100 por hora, si es empleado el
doble y si es asesor el triple. Presentar en un reporte los datos de los trabajadores y su
sueldo.
EJERCICIO 3:
Gestin de unos cursos escolares.
Se considera una cantidad de 5 cursos con sus respectivos profesores, consideramos en
cada curso informacin referente a si esta activo o no, presentar los cursos que estn
activos y los que no lo estn, con sus datos.
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA
ALGORITMICA II
PRACTICA DE HERENCIA
1. Definir una clase base persona que contenga informacin de propsito general
comn a todas las personas (nombre, direccin, fecha de nacimiento, sexo, etc.).
Disear una jerarqua de clases que contemple las clases siguientes: estudiante,
empleado, estudiante _ empleado. Escribir un programa que lea la informacin
y cree una lista de personal a) general; b) estudiante; c)empleado; d) estudiante _
empleado.
2. Implementar una jerarqua LIBRERA que tenga varias clases. Considere una
librera que tenga colecciones de libros de literatura, humanidades, tecnologa,
etc.
5. Escribir una clase FigGeometrica que represente figuras geomtricas tales como
punto, lnea, rectngulo, triangulo y similares. Debe proporcionar mtodos que
permitan dibujar, ampliar, mover y destruir tales objetos. La jerarqua debe
constar de varias clases.
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
INGENIERIA DE SISTEMAS
PRACTICA DIRIGIDA DE ALGORITMICA II
(Semestre 2017)
PREGUNTAS:
DESARROLLAR:
Para los siguientes ejercicios grafique las relaciones entre clases que se puedan presentar.
EJERCICIO 1:
Un empresario maneja una cartera de artistas (grupos o solistas) y desea realizar un sistema que le
permita visualizar las caractersticas de cada artista como nmero de integrantes, voz principal y
tarifa por hora. Adems, los artistas pueden pertenecer a alguna agremiacin. El empresario a su
vez cuenta con una oficina donde gestiona todas sus reuniones. El telfono celular rara vez deja de
usarlo y usualmente lleva a almorzar a sus mejores artistas a un exclusivo restaurante miraflorino.
EJERCICIO 2:
En una biblioteca.
Por cada libro existente en la biblioteca, el catalogo contiene el ttulo, el nombre del autor y el
numero de ISBN del libro. Puede haber varios ejemplares de un libro en la biblioteca. Cada
ejemplar de un libro tiene un nico nmero de acceso. Hay muchos lectores registrados que estn
asociados a la biblioteca, cada uno de los cuales tiene un nmero de tickets para prstamo. El
sistema registra el nombre y direccin de cada lector y el nmero de tickets que se han emitido. Los
lectores pueden solicitar libros en prstamo, uno por cada ticket que posean y el sistema mantiene
un registro de los libros que un lector tiene prestados, junto con la fecha en que se debe devolver el
libro
EJERCICIO 3:
Gestin de unos cursos escolares.
Las entidades implicadas son: calendario, curso, profesor y estudiante. Cada profesor tiene un
cdigo y un nombre y un comportamiento especifico. Cada alumno tambin tiene un cdigo y un
nombre y una promedio final. Los cursos tienen su nombre, un horario y los estudiantes del curso.
El calendario presenta los cursos posibles a ser implementados y el total de cursos.