Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC: Materia de SmallTalk

Materia de SmallTalk 11 months 2 weeks ago #8255

  • kirstein
  • kirstein's Avatar Topic Author
  • Offline
  • Profesor
  • Profesor
  • Posts: 2829
  • Karma: 666
  • Thank you received: 1622
Hola,

+ Estos son los apuntes que vimos/veremos/ o nop en clases.

Saludos,
Kirstein
----------------------------------------------------------------------
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SMALLTALK>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
----------------------------------------------------------------------


Smalltalk se basa en una pirámide de tres caras:
1. Una biblioteca de clases
2. Un ambiente de desarrollo gráfico
3. Un lenguaje pequeño

---------------------------------------------

Conceptos básicos de OO:
Objeto
Clase
Instancia
Acciones y Esencia
Método
métodos de instancia
métodos de clase
Mensajes
constructor
destructor
Programación por eventos
Herencia
simple-multiple
selectiva-completa


Categorías de Variables en Smalltalk: Son seis.

Sintaxis de un mensaje:

  a xxxx p1 p2 p3 .

   los parámetros reales pueden o no tener nombre

  x yyyy 67 z:5 k:8 .
  
+ Sintaxis de lecciones
Porqué la usamos?
Declaración de clases

nombre class X 
class variables
  X claseDeX
Instance variables
  Y claseDeY
Instance methods

mayor              
---------------------
| | may |
| 
| 

class methods

nombre endc



Marquito de las ventanas.

<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

+ Literales
Son muy importantes en Smalltalk porque referencia a la clase a la que pertenece la instancia. Todas las clases concretas principales tienen literales.

1 es la literal de enteros
-3.2 la literal de flotantes
2/3 es la literal de fraction

$a es la literal de char
'a' es la literal de strings
"a" es un comentario :).
#a es un symbol

#(     )  es la literal de array.

false es la literal de False
true es la literal de True

nil es la literal de UndefinedObject

[ a b | c d |   xxxxxxxxxx . xxxxxxxxxxx ... xxxxxxxxxxxx ]

es una literal de BlockClosure

EL código son mensajes.  Usualmente trabajan con enteros y principalmente con Boolean.

<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ Categorías de Variables
en C existen las globales y las locales.

Las variables de Smalltalk difieren en tres cosas:  
1. Periodo de Vida
2. Alcance
3. Sintaxis (forma de declaración).


En SmallTalk hay seis categorías:


1. Variables Temporales
~~~~~~~~~~~~~~~~~~~~~~~

Son variables locales a métodos o a bloques de código.
Su periodo de vida está asociado a la existencia del bloque de código o método que las contiene.  Lo mismo su alcance.

Se declaran entre pipes:    | a b |

Se deben escribir con minúscula.

Cuando son creadas todas son de la clase UndefinedObject
Se aplica el polimorfismo con el constructor.  
En smalltalk hay un constructor genérico para las clases más estándares y hay constructores específicos para otras clases.
En algunos Smalltalks el constructor básico es <- en otros es el = 
En squeak es := 
Una vez que la variable ha sido moldeada a una clase particular con un constructor no puede remoldearse a otra clase.  Aunque sí puede modificarse la instancia particular.

La destrucción es automática por lo que Smalltalk maneja un buen recolector de basura.


2. Variables de Instancia
~~~~~~~~~~~~~~~~~~~~~~~~~

Son la escencia de los individuos de una clase. 
Se declaran con minúscula.
Implementan el concepto de encapuslamiento.
Solo se pueden accesar desde dentro de los métodos de instancia de la clase a la que pertenecen.
En otros lenguajes les llaman atributos.
Periodo de vida: Se crean cuando se crea la instancia que los contiene y su vida está asociada a esta.


3. Variables de Clase
~~~~~~~~~~~~~~~~~~~~~

Son variables que pertenecen a una Clase, pero no a las instancias.
Existe una sola copia de ellas, sin importar la cantidad de instancias que haya.
Solo se pueden modificar mediante métodos de clase, pero se pueden leer desde cualquier método perteneciente a la clase.
Se declaran con una letra mayúscula al inicio del nombre.
¿Dónde se declaran? En el browser.
Periodo de vida: Existen mientras exista al menos una instancia.  Se crean cuando se crea la primera instancia y se destruyen cuando muere la última (aunque la última no sea la primera).


4. Variables de Instancia-Clase
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Son similares a las de Clase en casi todo excepto en dos características:
1. Solo se pueden leer desde métodos de clase.
2. No son heredables. (acá es el único punto donde Smalltalk tiene algo de herencia selectiva).


5. Variables Globales.
~~~~~~~~~~~~~~~~~~~~~~

Son variables accesibles desde cualquier lugar de Smalltalk. 
Desde el último rincón del último método de la clase más insignificante.
Su periodo de vida es eterno.  Existen desde que el usuario las crea en el browser y dejan de existir hasta que el usuario las borra con el browser.  Inclusive conservan valores entre ejecuciones de programas.
El nombre debe comenzar con mayúscula.  
Su principal desventaja es la privacidad.
Las clases son variables globales.


6. Variables de Pool (Semiglobales)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

En la mayoría de aspectos se comportan como las globales, excepto en el alcance.

Tambien se les llama variables de diccionario.
Son semiglobales porque se crea una lista de clases que tienen acceso a ellas (un diccionario).  
Solo que es global con las clases a las que pertenece su Diccionario.

 
<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ Sistema de Mensajes

Recuerden que existen tres posibilidades de retorno con los mensajes:
1. Que yo le pida algo particular (en ese caso lo retorna).
2. Que yo le pida a una instancia que se modifique (en ese caso retorna una copia de la instancia modificada).
3. Que no tenga idea de que hacer con el mensaje en cuyo caso retorna un error.

En Smalltalk los mensajes se envían con la siguiente sintaxis:

instancia mensaje parámetros

Los parámetros son o instancias o invocaciones a mensajes que retornen instancias.  Existe el concepto de ponerle un nombre a los parámetros reales, lo que permite usos en orden distinto al declarado.  Usualmente esos parámetros con nombre terminan con :
Las secuencias de mensajes se deben serparar con .

Si le envío una serie de mensajes a la misma instancia puede simplificar el esquema usando mensajes en cascada con el ;

a xxx .
a yyy .
a zzz

a xxx ; yyy ; zzz


Para en un método retornar una instancia se utiliza el ^

Para referenciar a la instancia en la que estoy/soy se usa la pseudovariable self

Se utiliza super para referenciar variables de clases superiores que estén con nombres ocultos por homonimia.


A ms1 4 5 xx: 7 .
B ms2 'A'

Al ser evaluación de mensajes siempre se lleva la precedencia de izquierda a derecha, no importa el tipo de mensaje que sea (aunque sea aritmético).
La precedencia en los mensajes se puede alterar con paréntesis.

  X := 3 + 4 * 5 .   "queda 23"    " X := ( 3 + ( 4 * 5 )) "
 
  X := 4 * 5 + 3 .   "queda 32!"


A xxx B zzz 7.
=
A xxx (B zzz 7).

A xxx (B zzz) 7.


<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ Aritmética

Los mensajes numéricos típicos existen en Smalltalk y se pueden usar con las clases numéricas razonables.

+  -   *  /   //   \\

|a b|


a := 5 .
a := 2 * 4 + a .

"en a queda un 18 y no un 13!"

a := 2 + 4 * a .
"en a queda un 74"


a := 7 .
b := [ a := a * 2 . a := a - 1 ] .
b value .
b value 


"en a queda 7"
"en b queda un bloque de código que NO se está ejecutando"
"para ejecutar un bloque de código hay que enviarle un mensaje solicitando su ejecución.  Este mensaje se llama value"

b value.
b value.

"en a queda un valor de 25"

value a veces requiere parámetros.


si zb es el bloque de código 

| w zb |

zb := [ a b c | x y | x := a + b + c. y := x * x. w := y + x ] .
zb value: 1 value: 2 value: 3 .
w print .




¿Que imprime?
x print
¿Que imprime?

"primero imprime el 42 y 
luego un mensaje de error"

¿Que sucede si quisiera enviarle un cuarto parámetro?

"El value está mamendez "

Para más de tres parámetros se utiliza el mensaje 

valueWithArguments: A

lo que recibe es un array.

+ Código
Existen una serie de mensajes que permiten efectuar trabajos necesarios para poder escribir algoritmos con algo más de utilidad que solo secuencias de mensajes aritméticos y de construcción.

Mensajes para tomar decisiones (algo con lo que se hace un trabajo análogo a un if).

Son 8 mensajes, donde la homonimia está presente.

(a > b) ifTrue: [ a := 1 ] . 

El primer mensaje es un ifTrue: de la clase False que recibe un bloque de código como parámetro y no hace nada.
El segundo mensaje es un ifTrue: de la clase True que hace un value del bloque de código que recibe como parámetro.

(a > b) ifTrue: [ a := 1 ] ifFalse: [ a := 2 ] .

(a > b) ifFalse: [ b := x ]

(a > b) ifFalse: [ b := x ] ifTrue: [b := z ] .


Para hacer un trabajo repetitititivo (algo análogo o similar a ciclos) se tiene los mensajes:

(a < b ) whileTrue: [ ... ]

whileFalse: 

10 TimesRepeat: [ :index | :index print ]

5 to: 10 do: [ :index | :index print ]


Para accesar arrays:

a new array 10.
x := a at: 3 .
a at: 3 put: 7

<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

+ Niveles de objetos 

+ =anObject
This is the default equality test. Answer true if the receiver and anObject are the same object, else answer false.

+ ==anObject
Answer true if the receiver and anObject are the same object, else answer false.

+ equals: anObject
Answer true if the receiver and anObject are the same object, else answer false.



+ copy:
Answer a shallow copy of the receiver.

+ deepCopy
Answer a copy of the receiver with shallow copies of each instance variable.

+ shallowCopy:
Answer a copy of the receiver which shares the receiver instance variables



<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Ejemplos de programación:

 celdasVacias                        
┌────────────────────────────────────────
│|k tot|
│
│k:= 1 .
│tot:= 0 .
│(k <= self size) whileTrue: 
│    [  ((self at: k) = nil) ifTrue: [tot := tot + 1 ] . 
│       k := k + 1  ]
│^tot
│

Please Identificarse to join the conversation.

  • Page:
  • 1
  • Not Allowed: to create new topic.
  • Not Allowed: to reply.
  • Not Allowed: to add attachements.
  • Not Allowed: to edit your message.
Time to create page: 0.142 seconds
Powered by Kunena Forum