Está en la página 1de 23

'

Mar os y metodos para el mundo de los bloques

Ejer i io
( ) Ri ardo Aler Mur.
$
1

Representa ion en el mundo de los bloques:


Mesa: que puede ontener omo mu ho 10 bloques
Bloques: (de varios olores, pero normalmente rojos, aunque la
mesa es marron)
 que pueden soportar un bloque sobre ellos
 otros mas an hos, que pueden soportar dos
 los bloques suelen estar sobre la mesa

& %
Hay brazos robot, que pueden:
 oger bloques que esten sobre la mesa u otros bloques
 dejar bloques sobre la mesa u otros bloques
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
2

Situa ion ini ial

Un brazo robot, sin bloques


Dos bloques simples (B y C) y un superbloque (A)
 B y C sobre A
 A sobre la mesa

& %
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
3

& %
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
4

BRAZO ROBOT SOPORTE


bloques_sobre(0/1)
bloque_debajo(0/1)

BLOQUE GENERICO MESA


bloque_cogido(0/1)
bloques_sobre(0/10)

SUPER BLOQUE BLOQUE

& bloques_sobre2(0/1)

%
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.

Demonio SUPERBLOQUE.bloques sobre:if-added (?bloque):


(?bloque es el bloque a a~nadir)
$
5

SI (?self.bloques sobre 2 <> [nil℄)


Y
(?bloque 2 SUPERBLOQUE)
ENTONCES Devolver ERROR

Demonio SUPERBLOQUE.bloques sobre 2:if-added (?bloque):

SI (?self.bloques sobre 2 SUPERBLOQUE)

& %
Y
(?bloque <> [nil℄)
ENTONCES Devolver ERROR
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
6

Demonio BLOQUE.bloques sobre:if-added (?bloque):

SI (?bloque 2 SUPERBLOQUE)
ENTONCES Devolver ERROR

Demonio SUPERBLOQUE.bloque debajo:if-added (?bloque):

SI (?bloque 2 BLOQUE)

& %
ENTONCES Devolver ERROR
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur. 7

SOPORTE
FACETAS
ATRIBUTOS Omision Tipo Posibles Cardinalidad
valores
Identi ador Smbolo 1/1
Color Smbolo marron 1/1
rojo
...
Bloques sobre MARCO # BLOQUE GENERICO 0/1
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur. 8

MESA
FACETAS
ATRIBUTOS Omision Tipo Posibles Cardinalidad
valores
es-un SOPORTE
Identi ador mesa1, mesa2, . . .
Color marron marron
Bloques sobre () MARCO # BLOQUE GENERICO  0/10
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur. 9


BLOQUE-GENERICO
FACETAS
ATRIBUTOS Omision Tipo Posibles Cardinalidad
valores
es-un SOPORTE
Identi ador A, B, . . .
Color rojo
Bloques sobre 0/1
Bloque debajo [mesa℄ MARCO # SOPORTE 0/1
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur. 10

BLOQUE
FACETAS
ATRIBUTOS Omision Tipo Posibles Cardinalidad
valores
es-un 
BLOQUE-GENERICO
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur. 11

SUPERBLOQUE
FACETAS
ATRIBUTOS Omision Tipo Posibles Cardinalida
valores
es-un 
BLOQUE-GENERICO
Bloques sobre 2 [nil℄ MARCO # BLOQUE 0/1
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur. 12

BRAZO-ROBOT
FACETAS
ATRIBUTOS Omision Tipo Posibles Cardinalidad
valores
Identi ador Smbolo B1, B2, . . . 1/1
Bloque ogido [nil℄ MARCO # BLOQUE GENERICO 0/1
Metodo oger-bloque
Metodo dejar-bloque
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
13

Metodo BRAZO-ROBOT. oger-bloque (?bloque 2



BLOQUE-GENERICO):
Si enviar ?bloque bloque libre
Y
?self.bloque ogido = [nil℄
ENTONCES enviar ?bloque otar-bloque
?self.bloque ogido = ?bloque
SI NO Imprimir \Bloque o brazo no libres"

& %
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
14


Metodo BLOQUE-GENERICO.bloque libre ()
Si ?self.bloques sobre = [nil℄
ENTONCES devolver ierto
SI NO devolver falso

Metodo SUPERBLOQUE.bloque libre ()


Si ?self.bloques sobre = [nil℄
Y
?self.blqoues sobre 2 = [nil℄
ENTONCES devolver ierto

& %
SI NO devolver falso
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
15


Metodo BLOQUE-GENERICO. otar bloque ()
enviar ?self.bloque debajo liberar bloque (?self)
?self.bloque debajo = [nil℄

& %
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.


Metodo SOPORTE.liberar bloque (?bloque 2 BLOQUE-GENERICO)
$
16

?self.bloques sobre = [nil℄

Metodo MESA.liberar bloque (?bloque 2 BLOQUE-GENERICO)


Si ?bloque pertene e ?self.bloques sobre
ENTONCES ?self.bloques sobre = quitar ?bloque de ?self.bloques sobre


Metodo SUPERBLOQUE.liberar bloque (?bloque 2 BLOQUE-GENERICO)
Si ?bloque = ?self.bloques sobre
ENTONCES ?self.bloques sobre = [nil℄

& %
Si ?bloque = ?self.bloques sobre 2
ENTONCES ?self.bloques sobre 2 = [nil℄
'
Mar os y metodos para el mundo de los bloques

Situa ion ini ial


( ) Ri ardo Aler Mur.
$
17

Crear instan ias ini iales:


 [mesa℄ de MESA
 [a℄ de SUPERBLOQUE ( olor verde) (identi ador a)
 [b℄ de BLOQUE (bloque debajo [a℄) (identi ador b)
 [ ℄ de BLOQUE (bloque debajo [a℄) (identi ador )
 [brazo℄ de BRAZO-ROBOT (identi ador b1)
Completar los valores de las instan ias:

& %
 [mesa℄.bloques sobre = ([a℄)
 [a℄.bloques sobre = [b℄
 [a℄.bloques sobre 2 = [ ℄
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.

Envio de mensaje al brazo robot


$
18

enviar [brazo℄ oger-bloque ([ ℄)


Esto desen adena el envio de estos mensajes:
enviar [ ℄ libre ! ierto
enviar [ ℄ otar bloque
 enviar [a℄ liberar bloque ([ ℄)
La situa ion nal es:
[brazo℄.bloque ogido = [ ℄

& %
[ ℄.bloque debajo = [nil℄
[a℄.bloques sobre = [b℄
[a℄.bloques sobre 2 = [nil℄
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$19

Metodo BRAZO-ROBOT.dejar-bloque (?soporte 2 SOPORTE)


Si enviar ?soporte espa io libre (?self.bloque ogido)
ENTONCES enviar ?soporte depositar(?self.bloque ogido)
enviar ?self.bloque ogido.bloque debajo depositate(?soporte)
?self.bloque ogido = [nil℄

& %
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
20

Metodo BLOQUE-GENERICO.depositate (?soporte 2


SOPORTE)
?self.bloque debajo = ?soporte

& %
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
21

Metodo SOPORTE.depositar (?bloque 2 BLOQUE-GENERICO)


?self.bloques sobre = ?bloque
Metodo MESA.depositar (?bloque de tipo BLOQUE-GENERICO)
?self.bloques sobre = a~nadir ?bloque a ?self.bloques sobre
Metodo SUPERBLOQUE.depositar (?bloque 2
BLOQUE-GENERICO)
Si ?self.bloques sobre = [nil℄
ENTONCES ?self.bloques sobre = ?bloque

& %
SI NO ?self.bloques sobre 2 = ?bloque
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.

Metodo BLOQUE-GENERICO.espa io libre (?bloque 2



BLOQUE-GENERICO)
$
22

SI ?self.bloques sobre = [nil℄


ENTONCES devolver ierto
SI NO devolver falso


Metodo SUPERBLOQUE.espa io libre (?bloque 2 BLOQUE-GENERICO)
SI (?bloque 2 SUPERBLOQUE)
Y ?self.bloques sobre = [nil℄
Y ?self.bloques sobre 2 = [nil℄
ENTONCES Devolver ierto

SI (?bloque 2 BLOQUE)

& %
?self.bloques sobre = [nil℄
O ?self.bloques sobre 2 = [nil℄
ENTONCES devolver ierto
En otro aso, Devolver falso
'
Mar os y metodos para el mundo de los bloques ( ) Ri ardo Aler Mur.
$
23


Metodo MESA.espa io libre (?bloque 2 BLOQUE-GENERICO)
Si elementos (?self.bloques sobre) <= 10
ENTONCES Devolver ierto
SI NO Devolver falso

& %

También podría gustarte