Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Universidad Tecnológica de México
ENTREGABLE #1: PRACTICANDO PROGRAMACIÓN OO
Nombre: Luis Fernando Chávez Pérez
Matrícula: 05466680
Nombre del curso: Programación Orientada a Objetos
Nombre del profesor: Luis Ernesto Rubio Torres
Fecha:
Bibliografía: Sun Educational Services. SL275. Java Programming Language. USA: Sun Sun Educational Services. Object Oriented Analysis & Design using UML. USA: Sun
Después de haber trabajado los contenidos de la carpeta:
CONTENIDOS SEMANALES ‐> SEMANA 2
A) Para aprender/practicar dar órdenes a objetos: Descarga a tu computadora las instrucciones
anexas “Fiesta de Baile.pdf” para el acceso al sitio Code.org, y resuelve los 10 rompecabezas
ahí indicados.
B) Para aprender/practicar la lectura e identificación de elementos de código OO Polimorfo:
Descarga y corre en tu computadora, el programa anexo: MediaPlayer.java
Observa que su Jerarquía de Herencia, corresponde con el siguiente diagrama de
clases en UML:
C) Para aprender/practicar la lectura e identificación de elementos de código OO: Analiza los
modelos UML de clases del anexo “Librería learningBasicGUI.pdf” y ejecuta en tu proyecto
AprendiendoConOOPS de la semana 1, el programa C:/SupermanVsHulkApp.java
D) Para aprender/practicar la escritura de código OO: Descarga a tu computadora y crea la
aplicación ilustrada en la especificación de requerimientos anexa “Los 4 Fantáticos.pdf”,
recuerda reutilizar las aplicaciones, librerías y recursos del directorio de tu carpeta OOPS de la
semana 1.
Universidad Tecnológica de México
Con base a tus resultados previos, responde a las siguientes preguntas:
1) Completa los 10 ejercicios (Puzzles) de la “Fiesta de Baile” del sitio Code.org y explica
brevemente como los resolviste, comentando tus resultados y los videos del sitio.
Captura imágenes con tus resultados. (valor 7 %).
1. Ejercicio 1
2. Ejercicio 2
3. Ejercicio 3
4. Ejercicio 4
Universidad Tecnológica de México
5. Ejercicio 5
6. Ejercicio 6
7. Ejercicio 7
Universidad Tecnológica de México
8. Ejercicio 8
9. Ejercicio 9
Universidad Tecnológica de México
10. Ejercicio 10
Universidad Tecnológica de México
11. Resultados
Universidad Tecnológica de México
2) Captura imágenes con tus resultados al ejecutar el programa MediaPlayer.java,
explicando a detalle el código de tu programa y cómo aplica los principios de
Abstracción, Herencia y Polimorfismo (valor 3 %).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author ferna
*/
public class MediaPlayer{
public static void main( String[ ] args ){
System.out.println("Tocadiscos Polimorfo " + "\n");
// Creamos un objeto del tipo Player
Player poliPlayer;
// Hacemos un downcast de un objeto CdPlayer a un objeto tipo
// Player, de tal manera que solo tendermos visibles aquellos
Universidad Tecnológica de México
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// objectos y atributos de Player y los demas quedaran ocultos
poliPlayer = new CdPlayer();
// Generamos el llamado a play, el unico metodo disponible para
// objetos de tipo Player
poliPlayer.play(1, "Allá en el rancho grande");
// De la misma manera que con CdPlayer hacemos downcast a Player
// e instanciamos un nuevo objeto DvdPlayer, como vemos solo
// tendremos acceso al metodo play debido a que estamos usando
// la estructura del objeto Player
poliPlayer = new DvdPlayer();
poliPlayer.play(1,"Allá en el rancho grande");
}
}
// Player es la abstraccion del objeto o la idea de un tocadisco en general
class Player{
// El cual tiene una sola funcion
// tocar (play) la pista (track) indicando el nombre de la canción
public void play(int track, String media){
System.out.println(" No hace nada con " + media + "\n");
}
}
// Al usar extends usamos la herencia, para heredar el comportamiento y las propiedades
// del objeto o idea abstrata de un tocadistcos, asi como sus comportamientos.
class CdPlayer extends Player{
// Ahora siguiendo los conceptos de polimorfismo, agregamos un resultado diferente
// a un comportamiento ya definido, sin embargo, la firma del comportamiento (metodo)
// seguira siendo el mismo
public void play(int track, String media){
System.out.println(" Escuchando la canción #" + track + ": " + media +
"!!! \n");
}
}
// En el caso de DvdPlayer de manera similar heredamos el comportamiento de Player
// pero ahora agregamos propiedades unicas que diferencian a DvdPlayer de un player normal
class DvdPlayer extends Player{
// En este caso el track se vuelve un atriburo de nuestro objeto DvdPlayer
int theTrack;
// Asi como el nombre del medio que le indicamos
String theMedia;
// Ahora en el momento de hacer play lo que sucedera sera
public void play(int track, String media){
// Definimos el track en las propiedades del objeto
theTrack = track;
// Llamamos al metodo particular de los objetos DvdPlayer
Universidad Tecnológica de México
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// llamado playing
playing(media);
}
// Playing hara uso de los diferentes metodos propios
public void playing(String myMedia){
// En este punto pudimos haber usado directamente el
// atributo theMedia para almacenar el valor de
// myMedia
String movie = myMedia;
// Imprimimos en pantalla etiqueta 1
System.out.print(" Viendo la pelicula #" );
// Solicitamos un llamado a la funcion printTrank
printTrack();
// Solicitamos un llamado a la funcion printMedia y le
// enviamos como parametro el nombre de la pelicula que
// queremos presentar en pantalla
printMedia(movie);
}
// printTrack usa el atributo definido play para imprimir en
// pantalla el track que alamacenamos
private void printTrack( ){
System.out.print(theTrack + ": " );
}
// Y finalmente enviamos el fin que vamos a reproducir al atributo
// theMedia y escribimos en pantalla el resultado
private void printMedia( String film ){
theMedia = film;
System.out.println( theMedia + "!!! \n" );
}
}
Universidad Tecnológica de México
3) Captura imágenes con tus resultados al ejecutar el programa SupermanVsHulk.java,
explicando a detalle el código de tu programa y cómo aplica los principios de
Abstracción, Herencia y Polimorfismo, así como las clases de la librería learning.BasicGUI
(valor 3 %).
Abstracción
La abstracción es utilizada al definir los objetos Superman y Elasticman los cuales tienen comportamientos (funciones) específicos al tipo de objeto, y al mismo tiempo son objetos que son parte del tipo HomoSapiens que a su vez son del tipo Animal.
Herencia
La herencia, se aplica al utilizar extends en la definición de la clase de los objetos Superman y Elasticman, los cuales heredan sus propiedades y comportamientos de los objetos tipo HomoSapiens y este a su vez de Animals
Polimorfismo
Utilizamos polimorfismo al usar funciones propias de los objetos padre de los que hereda nuestro código, en particular del método walk, propio de los objetos Animals, pero que al ser implementados en HomoSapiens, cambia su función, para presentar comportamientos más avanzados en pantalla.
learning.BasicGUI
De manera general estas clases representan la forma en que diseñamos nuestra ventana donde desplegaremos información, botones, comportamientos, texto e imágenes.
1
2
3
4
5
6
7
8
9
10
11
public class BaseAppGUI{
// Definimos un objeto del tipo FrameGui, el cual representa el API
// para uso de ventanas en java (frame Graphic User Interface)
protected FrameGUI frameGUI;
// Creamos un metodo para definir los componentes que usaremos en el frame
protected void createComponents(){
// Creamos el objeto frame
frameGUI = new FrameGUI("Basic Application Graphic User Interface");
// Agregamos un elemento que estara monitoreando los comportamientos
// en la ventana que creamos
Universidad Tecnológica de México
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
frameGUI.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
// Creamos un metodo para establecer el tamaño de la ventana desde su
// creacion, asi como la definicion que la ventana tenga tamaño dinamico
protected void distributeComponents(){
frameGUI.setSize(500,250);
frameGUI.setResizable(true);
}
// HAcemos que la ventana sea visible
protected void startApplication(){
frameGUI.setVisible(true);
}
// al crear un objeto de este tipo, hacemos que se cree el marco o ventana
// donde trabajaremos
public BaseAppGUI(){
createComponents();
distributeComponents();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Heredamos los comportamientos de Panel
public class BorderPanel extends Panel{
// Agregamos una nueva distribucion de nuestros paneles
// al crear un panel de este tipo
public BorderPanel(){
super();
this.setLayout(new BorderLayout());
}
// Agregamnos componentes en los borders de nuestro panel
// Al norte
public void addNorth(Component component){
this.add(component, BorderLayout.NORTH);
}
//Al sur
public void addSouth(Component component){
this.add(component, BorderLayout.SOUTH);
}
// este
public void addEast(Component component){
this.add(component, BorderLayout.EAST);
}
Universidad Tecnológica de México
26
27
28
29
30
31
32
33
34
35
// Oeste
public void addWest(Component component){
this.add(component, BorderLayout.WEST);
}
// al centro
public void addCenter(Component component){
this.add(component, BorderLayout.CENTER);
}
}
// FastTester nos permite generar un ventana rapidamente, en la cual tendremos
// componentes para probar todos los elementos que componen nuestra ventana
// botones, flowpanels, textareas, acciones y bordes
public class FastTester extends BaseAppGUI
// Hereda comportamientos de objetos panel
public class FlowPanel extends Panel
// Similar a border panel, con la diferencia que aqui lo hacemos a un Frame
public class FrameGUI extends Frame
// Creamos un panel y definimos cuantas columnas y renglones lo llenamos de un
// objeto grid
public class GridPanel extends Panel
// Esta clase hereda de tipo panel y la usaremos como un punto para almacenar el
// despliegue de un archivo de imagen, asi como sus comportamientos para moverlos
// o alterarlos en pantalla
public class ImagePanel extends Panel implements Serializable
// Esta clase se utiliza para agregar detectores de comportamientos a un boton
// en partiular en nuestro frame
public class InternalButton extends Button implements ActionListener
// Esta clase define el comportamiento y componentes minimos para generar una
// ventana
public class SkeltonApp extends BaseAppGUI
Universidad Tecnológica de México
4) Incluye las imágenes de tus resultados al programar la aplicación para el sistema de
“Los 4 Fantásticos” (imágenes de la aplicación funcionando y el código de la aplicación
completa en Java en un IDE), explicando tu experiencia al programar este software
(valor 7 %).
Mi experiencia:
Realmente fue bastante sencillo generar el programa, puesto que todos los objetos ya existían, simple y sencillamente reutilice los mismos componentes, agregue los nuevos requerimientos un par de pruebas y listo, ahora, que de haber tenido que construir todo desde cero hubiese sido mucho muy complejo y mas tardado, puesto que habría que construir todos los comportamientos y objetos, pero, la razón de ser de la POO es esta, simplificar el desarrollo y permitir una reutilización del código y objetos.
// The SupermanVsHulkApp Program
import learning.business.superAnimals.Superman;
import learning.business.superAnimals.ElasticHuman;
import learning.basicGUI.BaseAppGUI;
import learning.basicGUI.ImagePanel;
import learning.basicGUI.InternalButton;
import learning.basicGUI.FlowPanel;
import learning.basicGUI.GridPanel;
import java.awt.TextArea;
import java.awt.event.*;
public class Los4FantasticosApp extends BaseAppGUI {
private class WalkButton extends InternalButton{
public void pushAction(){
walkAction();
}
}
private class FlyButton extends InternalButton{
public void pushAction(){
flyAction();
Universidad Tecnológica de México
}
}
private class VisibleButton extends InternalButton{
public void pushAction(){
visibleAction();
}
}
private class StrechButton extends InternalButton{
public void pushAction(){
strechAction();
}
}
private class MouseStretch extends MouseAdapter {
public void mousePressed(MouseEvent e){
mrElastic.stretch(mrElastic_Panel, e.getX(), e.getY() );
}
}
private ElasticHuman mrElastic;
private Superman humanTorch;
private Superman invisibleGirl;
private Superman theThing;
private ImagePanel mrElastic_Panel,
humanTorch_Panel,
invisibleGirl_Panel,
theThing_Panel;
private FlowPanel controlPanel;
private WalkButton walkButton;
private FlyButton flyButton;
private VisibleButton visibleButton;
private StrechButton strechButton;
private int spaceWidth;
private int spaceHeight;
private GridPanel gridPanel;
private int renglones;
private int columnas;
public void createComponents(){
super.createComponents();
mrElastic = new ElasticHuman();
Universidad Tecnológica de México
humanTorch = new Superman();
invisibleGirl = new Superman();
theThing = new Superman();
mrElastic_Panel = new ImagePanel();
humanTorch_Panel = new ImagePanel();
invisibleGirl_Panel = new ImagePanel();
theThing_Panel = new ImagePanel();
controlPanel = new FlowPanel();
walkButton = new WalkButton();
flyButton = new FlyButton();
visibleButton = new VisibleButton();
strechButton = new StrechButton();
spaceWidth = 600;
spaceHeight = 600;
renglones = 2;
columnas = 2;
gridPanel = new GridPanel(renglones, columnas);
}
public void distributeComponents(){
int ratio = 2;
mrElastic_Panel.imageX = 0;
mrElastic_Panel.imageY = 0;
mrElastic_Panel.addMouseListener(new MouseStretch());
mrElastic_Panel.setImage("C:/oops/resources/images/supers/Fantastic4/Reed Richards.jpg",246/ratio,400/ratio);
humanTorch_Panel.imageX = 0;
humanTorch_Panel.imageY = 0;
humanTorch_Panel.setImage("C:/oops/resources/images/supers/Fantastic4/Jhonny Storm.jpg", 246/ratio,400/ratio);
invisibleGirl_Panel.imageX = 0;
invisibleGirl_Panel.imageY = 0;
invisibleGirl_Panel.setImage("C:/oops/resources/images/supers/Fantastic4/Sue Storm.jpg", 246/ratio,400/ratio);
theThing_Panel.imageX = 0;
theThing_Panel.imageY = 0;
theThing_Panel.setImage("C:/oops/resources/images/supers/Fantastic4/Ben Grimm.jpg", 246/ratio,400/ratio);
walkButton.setLabel("<Walk>");
flyButton.setLabel("<Fly>");
visibleButton.setLabel("<Visible>");
strechButton.setLabel("<Strech>");
controlPanel.add(strechButton);
controlPanel.add(walkButton);
Universidad Tecnológica de México
controlPanel.add(flyButton);
controlPanel.add(visibleButton);
gridPanel.add(mrElastic_Panel);
gridPanel.add(humanTorch_Panel);
gridPanel.add(invisibleGirl_Panel);
gridPanel.add(theThing_Panel);
frameGUI.setTitle("Fantastic Four !!!");
frameGUI.setSize(spaceWidth, spaceHeight);
frameGUI.setResizable(false);
frameGUI.addNorth(controlPanel);
frameGUI.addCenter(gridPanel);
}
public void startApplication(){
frameGUI.setVisible(true);
}
public void walkAction(){
theThing.walk(theThing_Panel, spaceWidth/2, spaceHeight);
}
public void flyAction(){
humanTorch.fly(humanTorch_Panel, spaceWidth/2, spaceHeight);
}
public void visibleAction(){
invisibleGirl_Panel.setVisible(!invisibleGirl_Panel.isVisible());
}
public void strechAction(){
mrElastic.stretch(mrElastic_Panel, mrElastic_Panel.imageWidth,mrElastic_Panel.imageLenght*2);
}
public static void main(String [] args){
Los4FantasticosApp ffApp = new Los4FantasticosApp();
ffApp.startApplication();
}
}