16
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 · 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

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Universidad Tecnológica de México · 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

 

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. 

 

Page 2: Universidad Tecnológica de México · 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

 

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

Page 3: Universidad Tecnológica de México · 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

 

Universidad Tecnológica de México  

5. Ejercicio 5

6. Ejercicio 6

7. Ejercicio 7

Page 4: Universidad Tecnológica de México · 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

 

Universidad Tecnológica de México  

8. Ejercicio 8

9. Ejercicio 9

Page 5: Universidad Tecnológica de México · 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

 

Universidad Tecnológica de México  

10. Ejercicio 10

Page 6: Universidad Tecnológica de México · 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

 

Universidad Tecnológica de México  

11. Resultados

Page 7: Universidad Tecnológica de México · 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

 

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

Page 8: Universidad Tecnológica de México · 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

 

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

Page 9: Universidad Tecnológica de México · 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

 

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" );

}

}

 

 

   

Page 10: Universidad Tecnológica de México · 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

 

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

Page 11: Universidad Tecnológica de México · 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

 

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);

}

Page 12: Universidad Tecnológica de México · 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

 

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  

 

 

 

 

Page 13: Universidad Tecnológica de México · 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

 

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();

Page 14: Universidad Tecnológica de México · 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

 

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();

Page 15: Universidad Tecnológica de México · 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

 

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);

Page 16: Universidad Tecnológica de México · 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

 

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();

}

}