PARADIGMA ORIENTADO A OBJETOS
UNIDAD Nº I
OBJETOS EN EL MUNDO
[Link]
SEMANA 2
INTRODUCCION
La semana anterior tuviste un primer acercamiento a la programación orientada a
objetos, analizando algunas definiciones fundamentales como Clase, Objeto y Atributo.
Además, diste tus primeros pasos con la plataforma Greenfoot, la que te permitirá
aprender estos conceptos de forma simple y lúdica.
En esta clase nos adentraremos aún más en esta materia, revisando conceptos como
Herencia, Método y Parámetro. Además, veremos cómo aplicar estos conceptos a
Greenfoot, en específico en la creación de nuevas clases y en su instanciación.
Finalmente, analizaremos aspectos importantes en la creación del código fuente, como
lo es la indentación y los comentarios, ambos temas muy necesarios al momento de
desarrollar soluciones en contextos reales.
2 [Link]
IDEAS FUERZA
• Qué es el código fuente
• Proceso de compilación
• Métodos públicos y privados
• Método act() en Greenfoot
• Crear clases y objetos en Greenfoot
3 [Link]
Desarrollo
• ¿Qué es el código fuente?
Es el código escrito por un programador.
El código debe ser traducido posteriormente a lenguaje binario para ser entendido por
la máquina.
En Greenfoot, utilizaremos el lenguaje de programación Java.
• Tipos de Código Fuente
El término código fuente se utiliza para describir el tipo de codificación. Dependerá del
lenguaje de programación que se use, como, por ejemplo, HTML, PHP, JavaScript o
Java.
• ¿Cómo se organiza el código?
Los códigos en Java son organizados en orden, generalmente por bloques de código.
Los bloques de código inician y finalizan con una llave { }
En Java se produce un proceso llamado compilación del código fuente que consiste en
tomar el código construido por el programador y traducirlo a un lenguaje entendido por
la máquina. Java utiliza el archivo javac para generar la compilación que dará paso a
un archivo .class también conocido como bytecode. Este último es utilizado por la
máquina para ejecutar el programa.
Java utiliza un componente llamado máquina virtual de Java que levanta un procesador
propio e independiente para correr las aplicaciones. Esto último permite la portabilidad,
es decir, la capacidad de ejecutar programas en diversas plataformas.
4 [Link]
Ver las siguientes figuras:
Código Fuente
Plataformas S.O.
[Link]
javac Windows
Bytecode OSx
Java
[Link] Linux
Imágenes, gentileza de JavaWorld
5 [Link]
Importe de paquetes de clases
Comentarios
Cáscara de la clase
Definición de atributos
Definición de métodos
6 [Link]
• Frames
Como haz visto, el código de Greenfoot se encuentra dividido en bloques o frames de
diferentes colores: verde, amarillo y blanco.
Esto nos ayudará a mantener el
código ordenado y entenderlo
rápidamente.
El frame blanco cubre el área de las
definiciones de variables y de
instrucciones.
El frame verde cubre el área de la
clase.
El frame amarillo cubre el área de los
métodos.
7 [Link]
• Método act
Como ya hemos visto, en Greenfoot el método act() aparece por defecto al crear una
clase.
Act() es un método con la particularidad de que se repita una y otra vez al momento de
correr tu juego, de forma cíclica.
Observa este código. Se ha agregado el código move(5); dentro del método act.
Lo que se ha indicado aquí es que el personaje al que pertenece este código se mueva
con una velocidad de 5.
Lo que ocurrirá aquí será que, una vez instancies el personaje en el Mundo y corras el
juego, verás que este se mueve hacia la derecha, hasta chocar con el borde del
Mundo. El método act() se está repitiendo de forma cíclica, es decir, cada vez vuelve a
repetirse el código que está dentro de él, por lo que el personaje se mueve
continuamente, hacia la derecha a la velocidad indicada.
8 [Link]
• Uso de parámetros
El parámetro es un dato que puede o no venir entre paréntesis en un método. Por
ejemplo, puede ser un nombre, o una cantidad, de la que podremos disponer al
momento de usar el método.
Si te fijas, el método act tiene un paréntesis al final ( ). Todos los métodos tienen ese
paréntesis, que a veces puede estar vacío (cuando hablamos de un método sin
parámetros) o puede contener uno o varios datos (en ese caso, hablamos de un
método con parámetros).
Método sin parámetros
Parámetro
Método con parámetro
El parámetro que se encuentra en el método tiene primero la palabra int. Cuando
colocamos un parámetro, lo primero que debemos hacer es señalar qué tipo de dato
es. Si es un número entero, se llama int. Si es un valor de tipo alfanumérico, como un
nombre, se llama String. Luego, puedes agregar el nombre del dato que, en este caso,
se llama distancia.
Lo que vemos aquí, es que el dato distancia es de tipo numérico, y que ha sido
utilizado dentro del método para señalar la velocidad a la que se moverá este objeto.
9 [Link]
• Cuidados de sintaxis e indentación
Es común equivocarse al momento de escribir el código, y encontrarnos con que éste
no funciona. Por ejemplo, el código puede estar incompleto (que falte un punto y coma
al final, o que no se encuentra una llave de cierre).
Para mantener ordenado el código, se coloca una tabulación entre la clase y el método,
o entre el método y la instrucción, como se ve en la imagen. Estos espacios son
llamados indentación.
10 [Link]
• Compilación
Cuando haz terminado de escribir un código, debes presionar el botón Compilar que
se encuentra en la parte superior izquierda en Greenfoot.
Inmediatamente después, podrás ver en la parte inferior un mensaje que dirá que el
código ha compilado correctamente o que hay un error.
11 [Link]
Preguntas de reflexión:
1. ¿Qué significa que un método incluya parámetros?
2. act() es un método de sistema ¿Cuál es su función?
• Proceso de compilación
El código fuente escrito por un programador genera un archivo .java.
Al compilarlo y estar correcto, se genera el Bytecode archivo .class.
Luego, el archivo .class es interpretado por la máquina en código binario.
12 [Link]
• Orden del código fuente
Importación de paquetes de clases:
En la primera línea, vemos un import que permite acceder a clases del sistema
de Greenfoot. Esto significa, como veremos en detalle más adelante, que podremos
colocar métodos en nuestro código que ya se encuentran preparados en Greenfoot y
que nos permitirán lograr nuestros objetivos de manera más rápida y eficiente.
Comentarios de la clase:
En todo código fuente existe la posibilidad de colocar comentarios. Estos son
indicaciones que deja el programador para mantener el código ordenado y usarlos
como una guía, pero realmente no producen cambios en el comportamiento de los
objetos, como si no fueran parte del código. Para ello usamos // en los comentarios de
línea simple y /** **/ en los comentarios de líneas múltiples.
Cáscara de la clase:
La cáscara de la clase es el nombre que se la da a esta línea de código en la
que se encuentra escrito el nombre de la clase, en donde inicia el código para esta
clase.
Atributos de la clase:
Los atributos son datos o variables pertenecientes a esta clase. Al igual que
cuando colocamos un parámetro, se escribe primero qué tipo de dato es (int o string
por ejemplo), y luego se coloca el nombre de la variable. Más adelante, en el código, se
le da el valor a esta variable. Cabe destacar que los atributos, a diferencia de variables
comunes, se definen inmediatamente después de la cáscara de la clase.
Ejemplo: private int puntaje
Al estar definidos al inicio de la clase pueden usarse en todos los métodos de la
clase que se requiera.
Métodos de la clase:
Finalmente se encontrarán los métodos, dentro de los frames de color amarillo.
Pueden ser todos los que sean necesarios, y definirán el comportamiento del objeto.
Los métodos pueden ser agregados al código, pero no necesariamente producirán un
efecto. Para eso, es necesario activar o llamar al método. En Greenfoot, el método act()
es el único que se activa automáticamente al correr el juego. Por lo tanto, todo lo que
coloques dentro de act() será lo que ocurra en el juego. Para mantener un orden en el
13 [Link]
código, lo que hacemos es crear métodos fuera de act(), y luego, dentro de act()
colocamos una llamada a esos métodos, lo que hará que se activen y comiencen a
funcionar.
• Código por defecto y código agregado
Cuando hablamos de código por defecto, nos referimos al código que ya viene en
Greenfoot, el cual nos ayuda a trabajar más rápido que si hiciéramos todo desde cero.
Por ejemplo, el método act() ya viene al momento de crear tus clases. También lo son
los códigos que vienen en el importe de paquetes de clases.
Pero también podemos crear un código desde cero. Cuando queremos agregar
funcionalidad, es necesario agregar nuestro propio código. Instrucciones, atributos,
métodos o llamadas a métodos son códigos que es posible agregar.
• Herencia
public class Abeja extends Actor
¿Recuerdas esta línea de código? Esta es la cáscara de la clase que hemos
mencionado anteriormente. Si te fijas, dice extends Actor. Lo que nos está diciendo
esta línea es que la clase Abeja es una clase que hereda o extiende de Actor.
Esto señala que la clase Abeja es una especialización de la clase Actor, Abeja
es un tipo de Actor. Significa que Abeja tiene acceso a todos los métodos que se
encuentren dentro de Actor. Por ejemplo, cuando
agregamos el código move(5); este es un método
que hace que la Abeja se mueva, pero el código
específico se encuentra en la clase Actor, y
solamente lo llamamos desde Abeja. Es decir,
cuando escribimos move(5); solamente estamos
activando un método que ya existe, pero que
podemos llamar desde las subclases de Actor.
Actor es una superclase y Abeja es una subclase.
En la imagen, vemos la flecha que señala que Abeja es una subclase de Actor.
Abeja también es un Actor, que hereda todos los métodos que provee la superclase
Actor.
14 [Link]
• Llamadas a métodos
En programación es normal crear nuevos métodos y hacer que, a su vez, estos sean
llamados desde otro método.
Esto mejora la calidad del código, haciéndolo más ordenado y legible. Nos da la
posibilidad de utilizar un mismo método varias veces si es que es necesario, en vez de
tener que escribirlo de nuevo cada vez que sea necesario realizar una acción.
• Métodos privados y métodos públicos
Los métodos de una clase pueden ser públicos o privados.
El término privado o público se denomina modificador de acceso
Método público:
Significa que quedan disponibles para otras clases del proyecto. Los métodos
pueden ser llamados de una clase a otra.
Ejemplo:
public void girarAbeja() {
//Aquí van líneas de código
Método privado:
Corresponde a los métodos que solo son accesibles dentro de la misma
clase.
Ejemplo:
private void girarAbeja() {
//Aquí van líneas de código
15 [Link]
Demuestra
Ahora veremos de forma práctica lo que hemos aprendido a hacer en Greenfoot.
• Cómo crear un escenario nuevo en Greenfoot.
Para crear una escena nueva en Greenfoot, lo primero que debes hacer, una vez
abierto el programa, es clic en la pestaña Scenario, que se encuentra en la parte
superior izquierda de la interfaz. Al desplegarse la pestaña, debes elegir la opción New
Java Scenario Aparecerá una ventana nueva, en la que deberás elegir en dónde se
guardará tu nuevo archivo y podrás colocarle un nombre.
16 [Link]
17 [Link]
• Cómo setear la imagen de fondo.
Al crear tu proyecto, lo primero que verás será lo siguiente.
Puedes ver que la clase MyWorld aparece creada por defecto. Si queremos, por
ejemplo, cambiar la imagen de fondo de nuestro escenario, debemos modificarlo dentro
de esta clase, la que está representando el Mundo. Para eso, debes hacer clic derecho
sobre MyWorld y seleccionar la opción set Image. Aparecerá una ventana en la que
podrás elegir una imagen. Ya que estamos hablando del fondo del escenario, deberías
seleccionar la imagen desde la carpeta que dice Backgrounds.
18 [Link]
• Crear nuevos actores (clases)
Para crear una clase nueva de tipo actor, que serán los personajes del videojuego,
debes hacer clic derecho en la clase Actor. Luego debes elegir la opción New sublcass.
Con esto, estarás creando una clase nueva, que sea una subclase de Actor. Luego
aparecerá una ventana en la que podrás ingresar el nombre de la clase, y seleccionar
una imagen.
19 [Link]
20 [Link]
• Cómo hacer que un objeto se mueva
Lo primero que debes hacer es ingresar la acción sobre el objeto que quieres que se
mueva. Para eso, debes hacer doble clic sobre la clase. En una ventana nueva se
abrirá el código por defecto que tiene el objeto.
Para que el objeto se mueva, simplemente debes colocar el siguiente código
dentro del método act()
move(5);
El número que aparece dentro del paréntesis indica la velocidad a la que se
moverá el objeto. Si quieres que se mueva más rápido, debes ingresar un número
mayor. Si quieres que se mueva más lento, debes ingresar un número menor.
En Greenfoot, el movimiento de los objetos está definido por el eje x (horizontal)
y el y (vertical). El eje x comienza al inicio del mundo del lado izquierdo, lo que significa
que irá aumentando hacia la derecha. Por esto, en este caso, el personaje se mueve
hacia la derecha del mundo, aumentando en el eje x. Si por ejemplo, cambiamos el
código a move(-5); el objeto se movería a la misma velocidad hacia el lado izquierdo
del mundo, hasta chocar con el borde.
21 [Link]
• Cómo hacer que un objeto gire
El código para que un objeto gire es similar al código para que un objeto se mueva:
turn(5);
Al igual que en el anterior, el número en el paréntesis se puede cambiar para elegir la
velocidad a la que gira el objeto. Si es un número positivo, el objeto girará hacia la
derecha, si es un número negativo, el objeto gira hacia la izquierda.
• Instanciar un objeto en el escenario
Para crear un objeto en el escenario, simplemente debes hacer clic derecho sobre la
clase que quieres colocar en el mundo y elegir la opción new. Verás que en el cursor
del mouse aparece la imagen que haz de elegir para tu personaje. Debes mover el
mouse hasta el lugar el mundo en donde quieres dejar a tu personaje y hacer clic ahí.
Esto significa que haz instanciado a tu personaje en el mundo. Puedes instanciar a tu
personaje la cantidad de veces que quieras.
Luego puedes hacer clic en Run y verás el comportamiento que tiene el
personaje que haz instanciado.
22 [Link]
• Ahora observa el siguiente código:
isAtEdge() es una función que tiene Greenfoot. Significa “está al borde”. Lo que este
código quiere decir, es que si el objeto está al borde del mundo, se cumple una
condición y entrará al código dentro de ésta, que es girar. Pero si no se cumple la
condición, solamente continuará moviéndose.
Lo que veremos al correr este código es que el objeto se mueve continuamente hacia
la derecha, en una velocidad constante. Pero en el momento en que toca el borde del
mundo, el objeto cambia de dirección. Luego continúa avanzando a una velocidad
constante. Al chocar con otro borde del mundo, volverá a girar, y seguirá repitiendo
este ciclo continuamente.
Esta es una forma de usar las condiciones en programación, logrando que el objeto
tenga diferentes comportamientos de acuerdo a lo que sucede en el juego.
23 [Link]
Reflexiona:
1. ¿Cuál es la función que cumple extends?
2. ¿Cuál es la diferencia entre un método público y uno privado?
24 [Link]
CONCLUSIONES
El paradigma orientado a objetos es una manera distinta de desarrollar soluciones
respecto de las metodologías clásicas de desarrollo. En el ámbito industrial moderno es
muy utilizada, no solamente con Java, sino también con otros lenguajes de
programación.
Por lo anterior, es importante comprender bien los pilares en los cuales se basa la
programación orientada a objetos. Uno de ellos es el concepto de herencia, visto en
esta clase. A ello se suman también las buenas prácticas de desarrollo, que permiten
tener código ordenado y bien comentado. Si bien esto puede resultar complejo o
considerarse un uso ineficiente del tiempo, a mediano plazo son conductas y
procedimientos que ayudan al programador en su labor diaria y, cuando son
internalizadas, generan excelentes resultados.
En las siguientes semanas seguiremos analizando las opciones que entrega Greenfoot,
tanto en la creación de nuevas clases como en su interacción con otras.
25 [Link]
26 [Link]