Está en la página 1de 29

c   


 c   

Smalltalk (Parte II)


1er cuatrimestre de 2007
!
 


  objeto co sta de u a represe tació i ter a


y u protocolo.
 E Smalltalk   
   
 c   
 
  
   
 

    
 
 O  O 
  
       
  !  
   "
 Ñ      
!
 


 ambié te emos variables, las cuales puede


refere ciar objetos.

Por ejemplo:
 › 
  

'Ser o no ser...'
Stri 
u aFrase
!
 


 mos objetos i teractúa e tre sí a través del


e vío de me sajes.

Perso a
e ce der Cafetera

 mos me sajes puede ser u arios, bi arios o


2eyword.
   
  

 £Cómo hao alo útil co todo esto?

 Empecemos por u ejercicio fácil.


 a   
       
       

     O  O

 Parecería que ecesitamos alú tipo de estructura


de co trol co dicio al .
6


#  $

 E los le uajes de proramació imperativos


existe , como parte del le uaje, estructuras de
co trol de flujo:
@    
  

 £Pero cómo hacemos esto e Smalltalk do de
todo es u objeto?
 £Ideas?
!% &   
 "

^  ›@  

 ·o os sirve. £Por qué?


 Porque el objeto que recibe el me saje o tie e
forma de verificar si el boolea o que recibe es
efectivame te true porque ecesitaría u Î
 å eso es precisame te lo que estamos i te ta do
impleme tar.
!% &    "

   ›^  

 Es lo mismo pero ahora el receptor del me saje


es el boolea o. £Cambia alo?
 Sí, porque podemos utilizar el polimorfismo que os
provee este paradima para desviar el flujo de
co trol.
 £å cómo hacemos esto?
] 


 ma co dició es u objeto de la clase ]oolean


Boolea

rue False

 ie e subclases rue y False, cada u a co


u a ú ica co sta te, true y alse
respectivame te.
 Cada vez que evaluamos u a expresió
boolea a e Smalltalk el resultado es u a de
estas dos co sta tes.


' ()

 *

 £Cuál es el parámetro?
  bloque de códio, perte ecie te a la clase
]loc2losure. (Recordar: ¡odo es u objeto!)
 mos bloques puede te er parámetros o o:
 ^    
 ^ !"#$ 
 Se ejecuta e viá doles el me saje Galue, que
puede ser u ario para el caso de bloques si
parámetros o 2eyword co ta tos parámetros como
el bloque tie e.
]  

 Ejecuta do (evalua do) bloques:


 ^    %›
 Imprime la cade a µHola¶ e el transcr t.
 ^ !"#$ %›&"%›""
 Xevuelve true.
 mos bloques puede te er variables locales:
 Y' (›^!!)!) ))*) )$" 

 Xevuelve el resultado de la última se te cia:


 Y' (›%›& devuelve 5
!6 
  '"

 Recordar, Boolea tie e dos subclases.


 Clase rue, método ifrue: u Bloque
 Ejecuto el bloque:
 › ' (›%›
 Clase False, método ifrue: u Bloque
 ·o hao ada.
!
   +"

 a   
        
      

     O  O

x == 0 ifrue: [ra script show: µCeroµ.].


Ë 

    ^  


    ›^  "
 ^  &
 +  " ,+  &
 +  " !+  &
 +   ^  
 Evalua el bloque y al resultado le aplica and co el boolea o.
 +   ^  
 Evalua el bloque y al resultado le aplica or co el boolea o.
  

 a       
 
   
          

   O  O
  
          

 Parece que ahora ecesitamos alú tipo de


estructura de co trol que os permita iterar.
 (
 ()(  ,

 *

 ma clase @nteger acepta u me saje to:do:


 Espera otro e tero y u bloque co u parámetro.
 Evalúa el bloque usa do como parámetro cada e tero e tre Y
y n.
 £E to ces el ejercicioÎ?
^Y!
# Y 
^›!
  ›
  -


 '   

 Y  +  ^›!  

 Iual pero i creme ta do de a ste e cada paso.


 YY.^  
 Repite Y veces el bloque se te cias.
 ^  ›^  
 Ejecuta sentenc as mie tras la evaluació de
cond c on sea true. !c  &
  
] 
"
 ^  ^  
 ! áloa a la a terior.
@  

 Smalltalk puede verificar dos tipos de


iualdades e tre objetos.
 Iualdad estricta:
 + es true si a y b so la  

 .
 Iualdad semá tica (o equivale cia):
 + es true si a y b so equivale tes seú alu a
relació que debe ser impleme tada para cada clase.

 /+ sería + 


 //+ sería + 
6 

#  $

 Smalltalk ofrece u a amplia variedad de tipos


de coleccio es que podemos usar seú la
ecesidad del caso:
 £Eleme tos orde ados?
 £Se admite duplicados?
 Etc.

 e er e cue ta que las coleccio es so


heteroé eas, siempre se admite eleme tos
de tipos diversos.
6 
 
+
!
  
 -@

M at: a := #(1 2 3 4) copy.


!  M at:put: a at: 1.
M size a at: 2 put: µdos¶.
a size

M add: s := Set ew.


# M size s add: 1; add: 1; add: 2.
M i cludes: s size.
s i cludes: 4.
M add: b := Ba ew.
M size b add: 1; add: 1; add: 2.
]  M i cludes: b size.
M occurre cesOf: b i cludes: 1.
b occurre cesOf: 1.
M at:put: d := Xictio ary ew.
M at: d at: 'hola' put: 'hello'.
M i cludes: (co tie e valor) d at: µhola'.
.
 M i cludesKey: (co tie e clave) d i cludesKey: 'loro'.
M size
M keys
!
  
 -@@

i := I terval from: 3 to: 30 by: 5.


@
  M i cludes: i i cludes: 4.
i i cludes: 8.

M add:
M at:
M at:put:
M first
oC := OrderedCollectio ew.
 M last
oC add: 3; add: 2; add: 5.
6 
M addFirst:
oC add: 4 after: 2.
M addmast:
M removeFirst:
M removemast:
M i dexOf:

x := SortedCollectio ew.
#  M add:
x add: 3; add: 2; add: 5.
6 
M sortBlock:
x sortBlock: [:a :b | a >= b].
 
      
-@

Evalúa el bloque e cada u o de los eleme tos


 ()(  ,

 * de la colecció .

El bloque debe retor ar u valor boolea o. Se


devuelve otra colecció (del mismo tipo de la
()(  ,

 * receptora) co te ie do ú icame te los
eleme tos para los cuales la ejecució del
bloque da true.

! áloa a la a terior pero uarda do los


 ()(  ,

 * eleme tos que hace al bloque alse.

Se devuelve otra colecció (del mismo tipo de la


receptora) co te ie do los resultados de la
 ()(  ,

 * aplicació del bloque a cada eleme to de la
colecció receptora.
 
      
-@@

El bloque debe retor ar u valor boolea o. Se


devuelve el primer eleme to de la colecció
que hace al bloque evaluar e true.
()(  ,

 *
E caso de que todos evalúe el bloque e
alse se e era u error e tiempo de
ejecució .

Iual a la a terior, pero e caso de o


()(  ,

 * e co trar i ú eleme to que haa al bloque
'/
()

 0* ser verdadero, se evalúa el seu do bloque y

se e era u error.

El primer parámetro del bloque es el resultado


parcial de la operació , come za do por

(  ] 
 ( casoBase. El seu do parámetro es el
)(c  (! ,

 * eleme to actual de la colecció receptora.
Se devuelve el resultado de la última
evaluació
   


!      6 O  


 !
0  1  + (›"  + (›&  + (›2

X          
   
] 
X             


       
     
           O  
 
      
   
(  

0  1 + (›" + (›& + (›2

3 
^Y!
! !
#
+ (›" %›Y ›^  $" 
+ (›& %›Y ›^  $" 
+ (›2 %›Y ›^  $" 
&

    

!    "
 #    6 O     
 !
e erateBlock: aBlockmist
a
           
    ] 
"               
    ]    !
+ %›       !
 +" %› ›
 +& %› 
 +2 %› ›
 +4 %› 
$        
  %


       ] O         

  
         
    (  

 ' 5' 5
› 
!› !
› ' 5
› 
^+!  ^!+%›)6# 
  
3›  7^!›  
^+Y!
   
 ›
^^! +%›, Y%››
 
^^! +%›, Y%› 
 
Ñ   1

£?
%     

También podría gustarte