miércoles, 16 de diciembre de 2015

USO DE GREENFOOT PARA EL APRENDIZAJE POO _JUEGO

INTRODUCCIÓN

El objetivo o el propósito de este proyecto es hacer utilización de una herramienta tecnológica para el aprendizaje de POO  con la finalidad de que entendamos y aprendamos más sobre el lenguaje de programación tanto teóricamente como sintaxis.
En este caso se eligió la herramienta de Greenfoot con las funciones de compilación y ejecución de programas en Java; en la cual creamos un juego haciendo uso de la POO.
En este proyecto se hablara sobre Greenfoot sus funciones, como usarlo y donde se desee detallar la aparición de objetos y la comunicación entre éstos de una forma visual.
I.              OBJETIVOS
1.1.        OBJETIVO GENERAL
Ø Proporcionar con la ayuda de la herramienta Greenfoot  un mecanismo visual que permita la representación de ciertos conceptos de la orientación objetos en Java mediante la simulación de un escenario.
Ø Aprender un método en el juego que estemos haciendo con Greenfoot.
1.2.        OBJETIVOS ESPECIFICOS
Ø Diferenciar entre clase y objeto.
Ø Entender el comportamiento de los objetos.
II.            DEFINICIÓN DE LA HERRAMIENTA TECNOLÓGICA
2.1.        GREENFOOT
El sistema Greenfoot es una combinación de framework y entorno para la creación de aplicaciones de simulación interactivas en un plano bidimensional en el lenguaje de programación Java. Es adecuado para nuevos programadores. En Greenfoot la visualización de objetos y la interacción entre ellos son los elementos clave.
Una manera de visualización del sistema es como una extensión del banco de objetos de BlueJ. Greenfoot extiende la idea del banco de objetos al mundo de los objetos. En este mundo los objetos tienen una apariencia gráfica y una posición en el mundo. La interacción directa con estos objetos es todavía posible, como en el original BlueJ pero el comportamiento de los objetos puede ser ahora observado directamente al ver los cambios en la posición y apariencia individual de los objetos.  El propio mundo de los objetos (visible como área subyacente detrás de los objetos Greenfoot) llega a ser un objeto programable, interactivo integrado en la estructura de la aplicación.Además de los conceptos de diferenciación entre clase y objeto, la invocación a métodos y el acceso al estado y comportamiento de los objetos, al igual que en BlueJ, el entorno de desarrollo integrado, junto con el editor “built-in” ayuda a los usuarios a afianzar pequeños conceptos generales de computación tales como código fuente, compilación ejecución, etc.

Figura1.Programa Greenfoot



       Figura2. Interfaz gráfica que ofrece la herramienta Greenfoot
III.           DESCRIPCIÓN DEL PROGRAMA A DESARROLLAR
El programa que estamos realizando en Greenfoot es un juego.
* TITULO:”UP UNA AVENTURA EN EL ESPACIO”
   Es un juego con la cual adquirimos más experiencia con la programación orientado objeto.
Greenfoot nos representa gráficamente los objetos; en este cado nuestro objeto Word de tipo Mundo que va contener nuestra clase padre donde va estar  las demás subclases en este caso los actores que son espacio y dentro de espacio esta, tablero, final, persona, vidas, marciano y disparo.

Para este juego creamos un escenario. Todo ocurre en el espacio. Donde un astronauta es atacado por 5 marcianos, por eso el astronauta tiene como defensa una arma para dispararlos y así ir aniquilándolos uno por uno evitando que los marcianos lo aniquilen a él, el juego cuenta con 3 vidas, es decir el astronauta tendrá 3 oportunidades para ganar el juego, y si el astronauta es vencido  será fin del juego.
Al astronauta se le mueve con las flechas direccionales del teclado, dispara con la tecla X  y en el caso de los marcianos ellos se mueven por si solos en ángulos aleatorios programados.
Para la clase World debemos crearle una clase hija que heredara de la clase World, a esta subclase le pusimos el nombre de espacio, al momento de crear la subclase nos aparece una ventana en la cual elegimos una imagen que representara a esa subclase, la imagen fue un espacio.
Luego pasamos a crear los actores:
Tablero, persona para la cual elegimos una imagen de un astronauta, vidas en donde pusimos la cantidad de vida que tendrá el astronauta, persona donde elegimos la imagen de un marciano, disparo donde elegimos imagen de una bola de disparo y GameOver en la  que no elegimos ninguna imagen ya que ahí se dará el fin del juego si el astronauta es aniquilado por los marcianos.

(Gómez, 2009) La realización de este proyecto me ha aportado una introducción a la plataforma Java y a numerosas herramientas de aprendizaje que existen de la POO. La introducción a Java, es una de las causas principales de mi interés por este proyecto ya que en la titulación que he cursado no se me introduce a esta plataforma. Me ha sorprendido descubrir la cantidad de herramientas que existen para el apoyo al aprendizaje de la POO y lo intuitivas y fáciles en su uso que pueden llegar a ser. Con la realización de este proyecto, he afianzado conceptos de este tipo de programación, con lo cual yo valoro personalmente que si a mí me ha sido útil, puede ser útil a más estudiantes en el futuro. La solución propuesta al comienzo era muy diferente y no permitía una portabilidad fácil de código a los estudiantes como la solución actual, lo cual chocaba con los requisitos del cliente. La mayor dificultad por tanto, ha estado en cumplir con los requisitos del cliente que se iban modificando a medida que avanzaba el proyecto, lo cual es algo que pasa todos los días en el mundo real. Desarrollo de un escenario basado en la herramienta Greenfoot para el apoyo de la enseñanza temprana de la Programación Orientada a Objetos .La implementación del sistema no me ha supuesto mucha dificultad, puesto que he realizado escenarios previos a esta solución donde he cogido soltura y conocimiento en el manejo de la herramienta y he podido mejorar en la medida de lo posible la presentación de una solución adecuada. Por último, considero que la realización de este proyecto me ha producido una mayor atracción hacia el descubrimiento de Java y sus posibilidades, que pueden ser infinitas y de las que solo he visto una mínima parte.
(Losada, 2012) Greenfoot una herramienta orientada al aprendizaje del mecanismo de creación de objetos en Java. También hemos descrito la forma de generar, corregir y comentar problemas. Hemos realizado una evaluación controlada, con resultados satisfactorios a nivel general, puesto que se ha demostrado su eficacia educativa. Podemos mejorar  las plantillas para que haya más variabilidad. En primer lugar, podrían generalizarse algunas partes de la plantilla. Por ejemplo, si permitiera tener atributos de tipos distintos, el número máximo de constructores aumentaría considerablemente. Así, con dos atributos de distintos tipos se pueden tener cinco constructores y con tres atributos, hasta 16. También podríamos aumentar la complejidad de los problemas para que incluyan otros mecanismos de creación de objetos en Java, como inicializadores de atributos, bloques de inicialización, herencia, las palabras clave this y super, o polimorfismo. Una última mejora consistiría en que las opciones de respuesta no se generen de forma aleatoria pura, sino que tengan en cuenta errores frecuentes de los alumnos. Otras experiencias han seguido esta línea, aunque de forma manual.

(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)Una clase es la descripción de un conjunto de objetos; consta de métodos y datos que resumen características comunes de un conjunto de objetos. Dicho de otro modo, una clase es la declaración de un tipo de objeto o una plantilla que define las variables y los métodos que son comunes para todos los objetos de un cierto tipo.
(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)Cada objeto es un ejemplar de una CLASE. Cada vez que se construye un objeto de una clase, se crea una instancia de esa clase.
(GUEVARA, 2011) Los métodos son funciones que determinan el comportamiento de los objetos. Un objeto se comporta de una u otra forma dependiendo de los métodos de la clase a la que pertenece. Todos los objetos de una misma clase tienen los mismos métodos y el mismo comportamiento.
(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)Es la acción que debe hacer un objeto.
(GUEVARA, 2011)Cuando se construye un objeto es necesario inicializar sus variables con valores coherentes, imaginemos un objeto de la clase Persona cuyo atributo color de pelo al nacer sea verde, un estado incorrecto tras construir el objeto persona. La solución en los lenguajes orientados a objetos es emplear los constructores. Un constructor es un método perteneciente a la clase que posee unas características especiales:
*      Se llama igual que la clase.
*      No devuelve nada, ni siquiera void.
*      Pueden existir varios, pero siguiendo las reglas de la sobrecarga de funciones.
*      De entre los que existan, tan sólo uno se ejecutará al crear un objeto de la clase.

(SANCHEZ, 2014)La abstracción es la propiedad que permite representar las características esenciales de un objeto, sin preocuparse de las restantes características (no esenciales).
Definir una abstracción significa describir una entidad del mundo real, no importa lo compleja que pueda ser, y a continuación utilizar esta descripción en un programa.
(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)La herencia es un mecanismo que permite la definición de una clase a partir de la definición de otra ya existente. La herencia permite compartir automáticamente métodos y datos entre clases, subclases y objetos. 
*    Super, refiere a la clase padre. Se usa para invocar constructores de la clase padre. Debe ser la primera sentencia del constructor de la clase hijo, Esta referencia también se usa para invocar cualquier método del padre.
*    Extends, La palabra reservada extends para heredar. La clase derivada hereda el comportamiento y los atributos de la clase base.
(SANCHEZ, 2014)Permite crear estructuras condicionales simples; en las que al cumplirse una condición se ejecuta una serie de instrucciones. Se puede hacer que otro conjunto de instrucciones se ejecute si la condición es falsa. La condición es cualquier expresión que devuelva un resultado de true o false.
(SANCHEZ, 2014)Una sentencia if puede ser seguido por una sentencia else, que se ejecuta cuando la expresión booleana es falsa.
(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)
Una sentencia switch permite a una variable ser probada por una lista de condiciones. Cada condición se llama case. La  sentencia switch es una forma de expresión de un creación múltiple de sentencias if -else. Su uso no puede considerarse, por tanto, estrictamente necesario, puesto que siempre podrá ser sustituida por el uso de if. No obstante, a veces nos resultará útil al introducir mayor claridad en el código.
El valor de la expresión y de las constantes tiene que ser de tipo char, byte, short o int. No hay lugar para booleanos, reales ni long porque, en la ejecución, todos los valores que incorporamos se transforman en valores de tipo int.
(GUEVARA, 2011)Los ciclos for son una estructuras de control cíclica, nos permiten ejecutar una o varias líneas de código de forma iterativa (o repetitiva), pero teniendo cierto control y conocimiento sobre las iteraciones. En el ciclo for, es necesario tener un valor inicial y un valor final, y opcionalmente podemos hacer uso del tamaño del "paso" entre cada "giro" o iteración del ciclo.
En resumen, un ciclo for es una estructura iterativa para ejecutar un mismo segmento de código una cantidad de veces deseada; conociendo previamente un valor de inicio, un tamaño de paso y un valor final para el ciclo.


(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)Es una variable cuyo valor se incrementa (++) o decremento (–) en una cantidad constante (1, 2, 3,4…) cada vez que se produce una acción. Uso: 
*      Los contadores se utilizan con la finalidad de contar acciones de un bucle.
*      Se debe empezar con una inicialización y luego se va incrementando  o decrementando según sea el caso.  La inicialización consiste en asignarle al contador un valor inicial.
*      Se sitúa antes y fuera del bucle.

(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)Indica  que el atributo no pertenece a las instancias de la clase si no a la propia clase, esto quiere decir que si tenemos varias instancias de una misma clase, cada una de ellas no tendrán una copia propia de ese atributo, si no que todas estas instancias compartirán una misma copia del atributo, a los atributos definidos como static, se les suele llamar atributos de la clase.
De esta manera, para acceder a un atributo static, no necesitamos crear una instancia de la clase, ya que podemos acceder a ellos mediante el nombre de la clase.
(DEITEL, PAUL J. & HARVEY M. DEITEL, 2008)En este contexto indica que una variable es de tipo constante: no admitirá cambios después de su declaración y asignación de valor. Final determina que un atributo no puede ser sobrescrito o redefinido. O sea no funcionará como una variable “tradicional”, sino como una constante. Toda constante declarada con final ha de ser inicializada en el mismo momento de declararla. Final también se usa como palabra clave en otro contexto: una clase final (final) es aquella que no puede tener clases que la hereden. Lo veremos más adelante cuando hablemos sobre herencia.
Se puede declarar una clase como final, cuando no nos interesa crear clases derivadas de dicha clase.
Ø  Compilación: (PEREZ, 2013) Consiste en que el compilador traducirá el código fuente a código máquina, también llamado código objeto, siempre y cuando, el propio compilador no detecte ningún error en dicho código fuente.
Ø  Simulación: (GALICIA, 2011) Es una técnica para analizar y estudiar sistemas complejos.
Ø  Framework: (JORDISAN, 2006)Marco de trabajo.
Ø  BlueJ: (DAVID, 2010) Es un entorno integrado de desarrollo (de sus siglas en inglés IDE - Integrated Development Environment) para el lenguaje de programación Java, desarrollado principalmente con propósitos educacionales, pero también es adecuado para el desarrollo de software a pequeña escala.





Que se empiece hacer el uso de las herramientas de apoyo, ya que son una gran ayuda, ya que visualmente se puede aprender muchas características la POO, que no se conformen solo con saber programar en C++, Neatbeans, entre otros; cuando hay herramientas de apoyo que son muy útiles.
En muchas ocasiones los alumnos se conforman con los recursos que les ofrecen los profesores en las clases. Son pocos los que ponen en práctica ese espíritu investigador y de querer saber más, que caracteriza a los estudiantes de ciencias y es por ello que quizá el uso de esta herramienta les invite a pensar en buscar una herramienta que consideren adecuada para cada momento, en la cual ellos se sientan cómodo trabajando y sientan que con la ayuda de esa herramienta entienden más acerca de POO.

7.1.        CLASE ESPACIO




7.2.        CLASE PERSONA























7.6.    CLASE SHOT(BALAS)









Este trabajo se hizo, se plantea y se basa en objetivos ya mencionados antes de empezar este proyecto, tanto como generales y específicos; a continuación se muestra como se cumplen los objetivos:
Generales:
Ø  Greenfoot pretende proporcionar a los usuarios una comprensión de distintos y variados conceptos de la programación orientada a objetos, así como la sintaxis Java. Todo ello principalmente mediante la visualización de objetos, pues es esta visualización la que permite fijar conceptos que normalmente se encuentran en la imaginación de los usuarios que comienzan en el mundo de la programación orientada a objetos y que no resulta tan intuitiva como la visualización.
Gracias a Greenfoot se puede aprender didácticamente. Greenfoot es una herramienta que ya viene incluido la parte de Herencia y Abstracción; para eso nosotros tuvimos ya una base en cuenta a eso, y en esta herramienta lo pudimos entender más aun de una manera práctica, visualizándolo al momento de crear nuestra superclase World y Actores ya que ahí no se puede crear objetos porque es abstracta; y como la sub clase Myworl hereda automáticamente de World los parámetros de la ventana.


Ø  Un método que aprendimos a utilizar en Greenfoot cuando desarrollábamos nuestro juego es  isKeyDown, tiene como función de mover al objeto según la flecha de teclado que se haya presionado, funciona al momento de presionar la tecla.

Grafica3.Greenfoot.isKeyDown

Específicos:
Ø  Muchos confunden el significado entre clase y objeto, es importante saber diferenciarlo. Greenfoot nos proporciona una visualización de los objetos creados a través de la invocación de los constructores, los cuales serán invocados desde la clase, lo cual permite una mejor diferenciación entre los conceptos de clase y objeto.

                   Grafica4.Diferencia entre clase y objeto

Gracias al entorno del escenario de Greenfoot los usuarios  pueden distinguir de una manera intuitiva y visual la diferencia entre clase y objeto.


Ø  En Neatbeans cuando creamos nuestro objeto y poníamos sus métodos como por ejemplo: Acelera (), Frena (); entre otros nosotros solo nos imaginábamos que el comportamiento de nuestro objeto carro, que el carro al avanzaría, aceleraría y si va muy rápido frenaría. Tenemos que entender que para que nuestro objeto  realice una tarea es necesario enviarle un mensaje.


Figura5.El comportamiento del objeto


Con esta herramienta de Greenfoot podemos entender el comportamiento de nuestros objetos creados ,el ver cómo se comportan nuestros objetos ,despierta el interés de querer que nuestros objeto hague más cosas y así meternos más a lo que es programación.


Ø  Si quieren hacer el uso de la herramienta de
Greenfoot tienen que tener ya una base de lo que es herencia su característica y para qué sirve, al igual con abstracción; ya que Greenfoot al crear un objeto automáticamente se hereda y heredan de las Superclase la cual es abstracta; por eso se recomienda estudiar esos temas para que así no haiga inconvenientes al momento e hacer uso de la herramienta Greenfoot
Ø  Greenfoot no es la única herramienta de a poyo existen varias y Cada herramienta aporta distintas funcionalidades que pueden ayudarnos a cubrir nuestros propios objetivos, y aumentar nuestro conocimiento, a medida que aumenta el nivel de conocimiento, estos objetivos pueden variar considerablemente. Estas herramientas te proveerán una introducción a la programación y a la codificación de programas
A continuación se les recomiendas estas:


Figura6.Herramientas propuestas
X.           BIBLIOGRAFIA
DAVID, J. (21 de OCTUBRE de 2010). Obtenido de BLUEJ: http://www.lab.dit.upm.es/~fprg/2009-2010/entorno/mipc/bluej/index.html
DEITEL, PAUL J., & HARVEY M. DEITEL. (2008). JAVA COMO PROGRAMAR. MEXICO: PEARSON.
GALICIA, B. (21 de MARZO de 2011). SLIDESHARE. Obtenido de http://es.slideshare.net/brissiayuss/simulacion-definiciones
Gómez, R. R. (2009). Desarrollo de un escenario basado en la. MADRID .
GUEVARA, J. M. (2011). FUNDAMENTOS DE PROGRAMACION JAVA. MADRID: EME.
JORDISAN. (29 de SEPTIEMBRE de 2006). JORDISAN.NET. Obtenido de http://jordisan.net/blog/2006/que-es-un-framework/
Losada, I. H. (2012). Diseño de software educativo para la enseñanza de la POO. Móstoles,.
PEREZ, C. (15 de ENERO de 2013). CARLOSPES.COM. Obtenido de CARLOSPES.COM: http://es.slideshare.net/brissiayuss/simulacion-definiciones
SANCHEZ, J. (2014). JAVA 2.







XI.          REFERENCIA ELECTRÓNICA

[1]Greenfoot


[2]Manual de Uso Greenfoot


[3]Escribir programas en Java con Greenfoot


Presentado por:
CORREA PEREZ, GREYS
CHIPANA RAMOS VLADIMIR
FASABI MORALES GILMAR
MELENDRES MARIANO ANDREA

Asesor:
Ing. CRISTHIAN GARCIA VILLEGAS