PDF de programación - Smalltalk

Imágen de pdf Smalltalk

Smalltalkgráfica de visualizaciones

Publicado el 9 de Agosto del 2020
1.234 visualizaciones desde el 9 de Agosto del 2020
68,6 KB
32 paginas
Creado hace 22a (19/03/2002)
Smalltalk

Smalltalk es un lenguaje orientado a objetos puro: todas las entidades
manipuladas son objetos.



Ej. la expresión



2 + 4

es el resultado de enviar el mensaje ‘+’ con argumento 4 al objeto 2.



Smalltalk Squeak es un entorno de desarrollo de aplicaciones orientadas a
objetos.

Incluye:
• Un lenguaje: Smalltalk.
• Un modelo de objetos, que define cómo se comportan los objetos.
• Un entorno de programación, que permite añadir, modificar y

borrar clases.

• Una jerarquía de clases, que pueden ser reutilizadas directamente y

de las que se puede consultar su código.

• Un entorno de ejecución interpretado.

Smalltalk-1

Objetos

Todo el procesamiento en Smalltalk se lleva a cabo mediante el envío

de mensajes a objetos. Los objetos son instancias de una clase concreta.



‘esto es una cadena’
1234

1.234e-5
$a

#( 1 2 3 )
#( ‘array’ ‘de’ 4 ‘elementos’ )
#( 1 ( ‘dos’ 3 ) ‘cuatro’ )


true

false

[ i := i + 1 ]



un número real



una cadena de caracteres
un número entero

un carácter
un array de tres elementos
un array de cuatro elementos
un array de tres elementos
el valor lógico verdadero
el valor lógico falso
un bloque de código

Smalltalk-2

Clases

Una clase define el comportamiento de sus instancias especificando
su estado (variables de instancia) y su comportamiento (métodos para
responder a los mensajes que se le envían).



Patrón para crear una nueva clase:



NombrePadre subclass: #NombreClase



instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: ''


Todo objeto es instancia de una clase, y todo objeto conoce la

instancia a la que pertenece.


Ejemplos:



1234 class

#(Francesca Jackie Marisa Bree) class
'Rakesh Vijay Charles Daniel Tyler' class

Smalltalk-3

Jerarquía de clases de Smalltalk

Smalltalk-4





Navegador de la jerarquía de clases



Smalltalk-5

Mensajes

Todo el procesamiento en Smalltalk se lleva a cabo mediante el envío
de mensajes a objetos. El envío de mensajes es equivalente a la invocación
de funciones en los lenguajes procedimentales.

Un mensaje se compone de tres partes:





un objeto receptor,

un selector de mensaje, y

cero o más argumentos

Ejemplos:

‘este es el momento’ size



# ( 1 3 5 7 ) at: 2

20 factorial

Un mensaje siempre devuelve un único objeto como resultado.

Los mensajes a los que un objeto puede responder se definen en el

protocolo de su clase.

La forma en que el objeto responde a un mensaje se define en el

cuerpo de los métodos.

Los métodos

indican

la

implementación de

los mensajes y

representan el comportamiento de la clase.

Smalltalk-6

Tipos de mensajes

Mensajes unarios.

No tienen argumentos.

Ejemplos:

5 factorial



$A asciiValue

Mensajes con argumentos.

Mensajes con uno o más argumentos.

Ejemplos:

‘ejemplo de cadena’ at: 6



‘ejemplo de cadena’ at: 1 put: $E

# ( 9 8 7 6 5 ) at: 3

Mensajes binarios.

Mensajes con un argumento, y uno o varios caracteres especiales (ni

dígitos ni letras) como selectores.

Ejemplos:



3 + 4
5 * 7
5 // 2
2 / 6

suma
multiplicación
división entera
división real

Smalltalk evalúa las expresiones aritméticas de izquierda a derecha

estrictamente, sin precedencias entre operadores.

Ejemplo:

3 + 4 * 2

devuelve 14, no 11.

Es posible usar paréntesis para controlar el orden de precedencia.

Ejemplo:

3 + ( 4 * 2 )

devuelve 11.

Smalltalk-7

Creación de objetos

Ya hemos creado algunos objetos.



Ejemplos:

'bigger', ' string'

#(1 2 3)



Otra forma de crear objetos es enviando mensajes (constructores) a

las clases.



Ejemplos:



Array new: 10

Array new

Date today

Time now

Smalltalk-8

Referencias a objetos (variables)

En Smalltalk todas las variables son referencias (punteros) a objetos,

no estando asociadas a ningún tipo o clase en particular.

Existen varias categorías de variables, dependiendo de su ámbito.

Variables globales

Son variables persistentes, cuyo valor se guarda de una ejecución

para otra del entorno.

Ejemplos:



Display
Transcript
Disk

Las variables globales comienzan con una letra mayúscula y se

declaran de forma implícita.

Ejemplo:

Sammy := ‘Sammy Jones’

Variables de clase

Variables de clase son variables globales cuyo ámbito es una clase,

por lo que son accesibles por todas las instancias de una clase.



Object subclass: #Factura



instanceVariableNames: ''
classVariableNames: 'contador'



poolDictionaries: ''

Se usan para compartir información dentro de una clase.

Las variables de clase empiezan con una letra mayúscula.

Ejemplo: Número de instancias de una clase.

Smalltalk-9

Variables de instancia

Las variables de instancia de un objeto son las definidas en su clase.
El número de variables de instancia es el mismo para todas las instancias de
una misma clase.



Object subclass: #Fraction


instanceVariableNames: 'numerator denominator'



classVariableNames: ''
poolDictionaries: ''

Variables temporales

Se denominan variables temporales porque Smalltalk las descarta

cuando dejan de usarse.

Se declaran colocándolas entre barras verticales en la primera línea de

una serie de expresiones. Sus nombres han de empezar por minúscula.

Ejemplo



| temp index factorials |
factorials := #( 3 4 5 6 ).
index := 1.
factorials size timesRepeat: [



^factorials

temp := factorials at: index.
factorials at: index put: temp factorial.
index := index + 1].

Smalltalk-10

Métodos

Los métodos son el código en Smalltalk, indican los algoritmos que

determinan el comportamiento de un objeto.



Ejemplo:



(1/7) numerator



El método numerator está definido en la clase Fraction.



numerator


^numerator

Ejemplo:



( 2/3 ) * ( 5/7 )



El método * está definido en la clase Fraction.



* aNumber



^(numerator * aNumber numerator)


/ (denominator * aNumber denominator)

Smalltalk-11

self



self es una variable especial que representa el objeto que recibe el

mensaje. Podemos hacer referencia a self en el cuerpo de un método

Ejemplo:



fraction

"Answer the receiver minus its integral part."

^self - self truncated



Si ahora evaluamos

( 22/7 ) fraction

( 2/3 ) fraction



devuelve 1/7

devuelve 2/3



super es una variable similar a self, que también hace referencia al

objeto receptor y que está relacionada con la herencia.

Smalltalk-12

Expresiones de asignación

Asignan

objetos (punteros a objetos) a variables.

Ejemplos:



factorials := # ( 3 4 5 6 ).
index := 1.

asignación de objetos


asignación de resultados de mensajes (objetos)



temp := factorials at: index.
index := index + 1.



Expresiones de retorno (return)

El carácter ^ indica que lo que le sigue es el valor a ser devuelto como

resultado de la serie de expresiones.

Ejemplo:

^ factorials

Smalltalk-13

Expresiones compuestas

Anidamiento de mensajes

Siempre que aparezca un objeto en una expresión, podemos usar en

su lugar un mensaje que devuelva un objeto del mismo tipo.



Ejemplos:



‘hola’ size + 4
‘ahora’ size + # ( 1 2 3 4 ) size
# (1 12 24 36 ) includes: 4 factorial
4 factorial between: 3 + 4 and: ‘hola’ size * 7

Orden de evaluación:

• mensajes unarios,
• mensajes binarios
• mensajes con argumentos.

Es posible modificar el orden de evaluación usando paréntesis.



Ejemplos:


‘hola’ at: ( # ( 5 3 1 ) at: 2 )
‘hola’ at: # ( 5 3 1 ) at: 2

error: el objeto ‘hola’ no entiende el mensaje at:at:.

Smalltalk-14

Serie de expresiones

El punto es el separador de expresiones.

Turtle black.
Turtle home.
Turtle go: 100.
Turtle turn: 120.
Turtle go: 100.
Turtle turn: 120.
Turtle go: 100.
Turtle turn: 120

Ejemplo:



Los objetos tienen un estado.
Los mensajes cambian el estado de un objeto.

Mensajes en cascada

Un mensaje en cascada es una forma de escribir una serie de

mensajes que son enviados al mismo receptor.

Ejemplo:



Turtle



black;
home;
go: 100;
turn: 120;
go: 100;
turn: 120;
go: 100;
turn: 120

Smalltalk-15

Comparación de objetos

La comparación de objetos se realiza enviando mensajes.

Las comparaciones normales (<, <=, =, >=, > y se implementan

como mensajes

Ejemplos:


3 < 4
#( 1 2 3 4) = #(1 2 3 4)

Todos los objetos entienden el mensaje de igualdad ( = ). Muchos

objetos definen mensajes de ordenación (<=).

Ejemplo:

'hello' <= 'goodbye'



Existen mensajes que permiten comprobar el estado de un objeto.

Ejemplos:



$a isUpperCase
('hello' at: 1) isVowel
7 odd

Expresiones Booleanas

Los mensajes and: y or: son recibidos por los objetos true o false, y
como argumento tienen un bloque cuya última expresión también devuelve
true o false.

Ejemplos:



( c < $0 or: [ c > $9 ] )
( c > $0 and: [ c <= $9 ] )
( c isDigit or: [ c >= $A and: [ c <= $F ] ] )

Smalltalk-16

Expresiones condicionales

Utilizamos bloques y mensajes para ejecuciones condicionales.

Ejemplo:



| max a b |
a := 5 squared.
b := 4 factorial.
a < b


^max

ifTrue: [max := b]
ifFalse: [max := a].

Ejemplo:



3 < 4



ifTrue: ['the true block']
ifFalse: ['the false block']

Smalltalk-17

Recursión



Ejemplo:



factorial



self > 1

self < 0

^1

“Answer the factorial of the receiver”

ifTrue: [ ^(self - 1) factorial * self ]

ifTrue: [ ^self error: ‘negative factorial’ ].

“Answer
  • Links de descarga
http://lwp-l.com/pdf18034

Comentarios de: Smalltalk (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad