Está en la página 1de 26

Programación

Capítulo 3. Mejorando el
Cangrejo. Programación más
sofisticada.

Departamento de Ingeniería de Sistemas Telemáticos


http://moodle.dit.upm.es
Temas y conceptos

 Temas
 Conducta aleatoria
 Control del teclado
 Sonido
 Conceptos
 Notación punto
 Números aleatorios
 Comentarios

Capítulo 3. Programación más 2


sofisticada
Notación punto
 Cuando llamamos a un método que no es de nuestra clase ni
heredado, debemos indicar dónde lo invocamos:
 <clase|objeto>.<metodo>(<parámetros)
 Ej. en un objeto Veremos más
adelante cómo
definir objetos
 Crab crab1 = new Crab();
 Crab crab2 = new Crab();
 crab1.move(); Observa que los
objetos se escriben
 crab2.turn(5); en minúsculas y las
clases en
 Ej. en una clase Greenfoot. mayúsculas

 Greenfoot.getRandomNumber(20);

Capítulo 3. Programación más 3


sofisticada
Métodos de clase y de objeto
 Una clase puede definir métodos de clase y métodos
de objeto
 Métodos de clase: se invocan en la clase. Para
indicar que son métodos de clase, se indica con la
palabra clave static en la signatura
 Ej. signatura: static int getRandomNumber(int limit)
 Ej. invocación: Greenfoot.getRancomNumber(2);
 Métodos de objeto: se invocan en un objeto concreto
 Ej. signatura: void move(); Suponemos que el objeto crab
está definido
 Ej. invocación: crab.move();
Capítulo 3. Programación más 4
sofisticada
Conducta aleatoria

 Distribución uniforme entre [0,limite):


 static int Greenfoot.getRandonNumber(int limit)
 P.ej. Greenfoot.getRandomNumber(20) nos da
un número entre [0,19) con la misma
probabilidad para todos
 “Que el cangrejo gire 5 grados el 10% de las
veces”
If (Greenfoot.getRandomNumber(100) < 10) {
turn(5);
}

Capítulo 3. Programación más 5


sofisticada
Operadores comparación
 El resultado es un booleano (true / false)
 Menor que: <
 Menor o igual que: <=
 Mayor que: >
 Mayor o igual que: >=
CUIDADO. Para comparar se usa
 Igual a: == ==, no =!
 Ej. int a = 3; int b = 4;
 a > b → FALSE
 a == b → FALSE
 a <= b → TRUE
Capítulo 3. Programación más 6
sofisticada
Crear nuevas clases (I)

Capítulo 3. Programación más 7


sofisticada
Crear nuevas clases (II)

compilar

Capítulo 3. Programación más 8


sofisticada
Métodos de Crab

 boolean canSee (java.lang.Class clss)


 Devuelve true si podemos ver un objeto de la
clase ‘clss’ justo desde donde estamos. Se
traduce como puedeVer().
 void eat (java.lang.Class clss)
 Intenta comer un objeto de la clase ‘clss’. Se
traduce como come().
 Un parámetro de tipo Class indica que los
métodos esperan que se les pase una clase
como argumento, p.ej. Worm.class
Capítulo 3. Programación más 9
sofisticada
Conducta Cangrejo (I)

 Si estás en el borde del mundo, gira 17°


 El 10% de las veces, gira un ángulo entre -45°
y 45°
 Avanza
 Si puedes ver un gusano, cómetelo

Capítulo 3. Programación más 10


sofisticada
Conducta Cangrejo (II)

public void act() {


if (atWorldEdge())
{
turn(17);
}
if (Greenfoot.getRandomNumber(100) – 10)
{
turn(Greenfoot.getRandomNumber(90) –
45);
}
move();
if (canSee(Worm.class)
{
eat(Worm.class);
}
}
Capítulo 3. Programación más 11
sofisticada
Paquetes (packages)

 Un paquete agrupa un conjunto de clases


relacionadas, para poder organizar las librerías
de Java
 El nombre completo de una clase se indica
indicando la ruta de paquetes hasta llegar a la
clase, separada por puntos.
 P.ej. java.lang.Class

paquete subpaquete clase

Capítulo 3. Programación más 12


sofisticada
Estructurar el código

 El método act() cada vez queda más largo...


vamos a estructurarlo en métodos más
pequeños para que se entienda mejor
 Además, estos métodos podremos utilizarlos si nos
hace falta, sin tener que repetir código

Capítulo 3. Programación más 13


sofisticada
Conducta del cangrejo

public void act() {


if (atWorldEdge())
{
turn(17);
}
if (Greenfoot.getRandomNumber(100) – 10)
{
turn(Greenfoot.getRandomNumber(90) –
45);
}
move();
lookForWorm();
} if (canSee(Worm.class)
{
eat(Worm.class);
}
Capítulo 3. Programación más 14
sofisticada
Declarar un método

/**
* Comprueba si descubrimos un gusano
* Si lo vemos, nos lo comemos. Si no,
no * hacemos nada.
*/ Definición o declaración
public void lookForWorm() { de un método. Nos
permite decir una nueva
if (canSee(Worm.class) acción que la clase puede
{ realizar. No se ejecuta el
eat(Worm.class); método al declararlo.
}
}

Capítulo 3. Programación más 15


sofisticada
Invocación de un método

public void act() {


if (atWorldEdge())
{
turn(17);
}
if (Greenfoot.getRandomNumber(100) – 10)
{
turn(Greenfoot.getRandomNumber(90) –
45);
}
move();
lookForWorm();
} Invocamos un método
previamente declarado para
que se ejecute. En este caso,
cuando se invoque act(), se
ejecutará al final lookForWorm()
Capítulo 3. Programación más 16
sofisticada
Comentarios de
documentación
 Los comentarios se escriben en el código
fuente como explicación para los lectores
humanos. Son ignorados por el compilador.
 Los comentarios en Java de varias líenas
comienzan por /** y terminan por */

Capítulo 3. Programación más 17


sofisticada
Ejemplo comentarios

/**
* Comprueba si descubrimos un gusano
* Si lo vemos, nos lo comemos. Si no, no hacemos nada.
*/
public void lookForWorm() {
if (canSee(Worm.class)
{
eat(Worm.class);
}
}

Capítulo 3. Programación más 18


sofisticada
Código más estructurado

public void act() {


if (atWorldEdge())
{ public void act() {
turn(17); turnAtEdge();
} randomTurn();
if (Greenfoot.getRandomNumber(100) – 10) move();
{ lookForWorm(
turn(Greenfoot.getRandomNumber(90) – );
45); }
}
move();
if (canSee(Worm.class)
{
eat(Worm.class);
}
}
Capítulo 3. Programación más 19
sofisticada
Control de teclado

 Métodos de Greenfoot
 static boolean isKeyDown(String key)
 Clase String
 Hemos visto tipos int y boolean
 String es un nuevo tipo (clase) para cadenas
“Hola”, “Esto es una cadena”

Capítulo 3. Programación más 20


sofisticada
Cangrejo gira con teclado

public void act() { /** Comprueba si se ha pulsado una


checkKeyPress() * tecla. Si se pulsa la tecla izda o
move(); * dcha, gira.
lookForWorm(); */
} public void checkKeyPress() {
if (Greenfoot.isKeyDown(“left”)
{
turn(-4);
}
if (Greenfoot.isKeyDown(“right”)
{
turn(4);
}
}
Capítulo 3. Programación más 21
sofisticada
API

 API = Application Programmers' Interface


 Lista toda la documentación de clases y
métodos. Pincha dos veces en World para
verla.

Capítulo 3. Programación más 22


sofisticada
Sonido

 Greenfoot.playsound(“sonido.wav”);

Capítulo 3. Programación más 23


sofisticada
Resumen de conceptos(I)

 Si llamamos a un método que no está en


nuestra clase ni ha sido heredado, debemos
usar la notación punto.
 Hay métodos de clase y métodos de objeto.
 Los métodos de clase se indican con static
 La definición (o declaración) de un método
define una nueva acción que pueden ejecutar
los objetos de una clase.

Capítulo 3. Programación más 24


sofisticada
Resumen de conceptos(II)

 Los comentarios se escriben en el código


fuente como explicación para los humanos, y
son ignorados por el compilador.
 La documentación de la API lista todas las
clases y meodos disponibles.

Capítulo 3. Programación más 25


sofisticada
Recursos usados

 Introducción a la Programación con Greenfoot,


Michael Kölling, Pearson Education, 2010

Capítulo 3. Programación más 26


sofisticada

También podría gustarte