PDF de programación - Lenguajes de Programación

Imágen de pdf Lenguajes de Programación

Lenguajes de Programacióngráfica de visualizaciones

Publicado el 26 de Abril del 2018
1.015 visualizaciones desde el 26 de Abril del 2018
1,0 MB
83 paginas
Creado hace 8a (01/04/2016)
Dr. Carlos A. Coello Coello
Departamento de Computación
CINVESTAV‐IPN
[email protected]

Iteración

 Los ciclos con la decisión al inicio pueden formarse en 

Smalltalk usando la palabra clave “method
whileTrue:”, la cual es proporcionada por la clase 
“Block”. 

 Esta palabra clave se usa para enviar el bloque a ser 
controlado por un segundo bloque que contiene la 
condición del ciclo.

Iteración

 Este método está definido para todos los bloques que 

regresen objetos Booleanos. 

 El método “whileTrue:” está definido para enviar 
“value” al objeto que contenga el método (ya sea 
“true” o “false”), causando en consecuencia que se 
ejecute el bloque que se le pasó como parámetro.

Iteración

Ejemplo:

count  0.
sum  0.
[count <= 20] “El bloque con la condicion
del ciclo”

whileTrue: [sum  sum + count.

cuerpo del ciclo”

count  count + 1]

”El

Iteración

 Otra estructura de control común para ciclos es la 

simple repetición mediante un contador. 

 Para esto, existe un método para los enteros llamado 

“timesRepeat:”. 

 Cuando se envía “timesRepeat:” a un entero con un 
bloque como parámetros, dicho bloque se ejecuta el 
número indicado de veces.

Iteración

 Ejemplo:

xCube  1.
3 timesRepeat: [xCube  xCube * x]

 Esto calcula el cubo de “x” mediante un proceso 

bastante tedioso.

Iteración

 Pueden construirse estructuras de control para ciclos 

similares a las de Algol‐68 usando algunos de los 
métodos para enteros que proporciona Smalltalk. 

 Los dos métodos más útiles son: “to:do:” y “to:by:do”.

Iteración

 Ejemplo:

1 to: 5 do: [sum  sum + x]

 Este bloque es ejecutado 5 veces. 

 Los valores internos producidos y regresados por el 

objeto “1” son: 1, 2, 3, 4 y 5.

Iteración

 Un ejemplo del segundo método es:

2 to: 10 by: 2 do: [:even | sum  sum +

even]

 Este mensaje hace que el bloque se ejecute 5 veces, 

pero en este caso los valores internos producidos son: 
2, 4, 6, 8 y 10.

Selección

 Se proporciona el método “ifTrue:ifFalse:” para los 

objetos “true” y “false”. 

 Los dos argumentos del mensaje “ifTrue:ifFalse:” 

representan las cláusulas “then” y “else” del 
constructor de selección.

Selección

 Este mensaje se envía a una expresión Booleana. 

 Si la expresión se evalúa a cierto (true), entonces el 

mensaje se envía a “true”. 

 En este caso, el método “ifTrue:ifFalse:” envía “value” 

a su primer argumento e ignora el segundo. 

 Si se evalúa a falso, entonces ocurre lo opuesto.

Selección

 Ejemplo:

total = 0

ifTrue: [average  0]
ifFalse: [average  sum // total]

Selección

 En este caso, la expresión Booleana “total=0” hace que 

el mensaje “=0” se envíe al objeto “total”. 

 Esto regresa ya sea “true” o “false”. 

 El objeto resultante es usado después como el receptor 

del mensaje, el cual se envía al método 
“ifTrue:ifFalse”.

Selección

 Los dos parámetros de este método son los bloques 

“then” y “else”, respectivamente, de los cuales sólo uno 
es ejecutado. 

 El operador // especifica que se desea realizar una 

división entera.

Métodos

 Un método de una clase define las operaciones que 

una instancia de la clase ejecutará cuando se reciba un 
mensaje correspondiente a ese método. 

 En cierto sentido, los métodos son como las 

definiciones de funciones, incluyendo el uso de 
parámetros y la capacidad de regresar valores.

Métodos

 La forma sintáctica general de un método en Smalltalk

es:

patrón_del_mensaje [ | variables temporales | ]
sentencias

 donde los corchetes son meta‐símbolos que indican 
que lo que se encuentra dentro de ellos es opcional.

Métodos

 Dado que Smalltalk no tiene declaraciones de tipo, las 

variables temporales, cuando están presentes, sólo 
necesitan ser nombradas en una lista. 

 Las variables temporales existen sólo durante la 
ejecución del método en el cual están listadas. 

 No hay signos de puntuación al final de un método.

Métodos

 El mensaje del patrón corresponde a las sentencias 
procedurales de lenguajes imperativos tales como 
Pascal. 

 Los patrones de mensajes, los cuales son prototipos 

para los mensajes, pueden estar en una de dos formas 
básicas.

Métodos

 Para los mensajes unarios o binarios, sólo se incluye el 

nombre del método. 

 Para los mensajes de palabra clave, se incluyen las 
palabras clave y los nombres de los parámetros del 
patrón de mensaje.

Métodos

 Para indicar que un método regresará un valor, se 

utiliza la flecha hacia arriba (^). 

 En muchos casos, esta es la última expresión que 

aparece en el método. 

 Si no se especifica un valor de retorno en un método, el 

objeto receptor mismo es el valor de retorno.

Clases

 Todos los objetos de Smalltalk son instancias de clases. 

 Una clase tiene cuatro partes:

1) Un nombre (de la clase).

2) El nombre de la superclase, el cual especifica la 
posición de la nueva clase en la jerarquía de clases del 
sistema.

Clases

3) Una declaración de las variables locales, llamadas 
variables instanciadas. 

Estas declaraciones estarán disponibles a las instancias 
de la clase.

Clases

 4) Los métodos que definen cómo responderán las 

instancias de la clase a los mensajes. 

 (Recordemos que un objeto hereda también el método 

de todas las clases que son sus ancestros).

Clases

 Los mensajes a un objeto normalmente hacen que se 

busque un método correspondiente en la clase a la que 
el objeto pertenece. 

 Si la búsqueda falla, se continúa ésta en la superclase 
de esa clase y así sucesivamente, hasta llegar a la clase 
del sistema, llamada “Object”, la cual no tiene 
superclase.

Clases

 Si no se encuentra un método en ninguna parte de esa 

cadena, entonces ocurre un error. 

 Es importante recordar que este método de búsqueda 

es dinámico.

Clases

 Ejemplo de una definición de clase:

"Smalltalk Example Program"
"The following is a class definition, instantiations
of which can draw equilateral polygons of any
number of sides"
class name
superclass

Polygon
Object

Clases

ourPen
numSides
sideLength

instance variable names

"Class methods"
"Create an instance"
new
^ super new getPen

Clases

"Get a pen for drawing polygons"
getPen

ourPen  Pen new

"Instance methods"
"Draw a polygon"
draw

numSides timesRepeat: [ourPen go: sideLength;

turn: 360 // numSides]

Clases

"Set length of sides"
length: len

sideLength len

"Set number of sides"
sides: num
numSides num

Clases

 Smalltalk sigue el Principio de Abstracción al 

agrupar los objetos que tienen comportamiento y 
propiedades similares bajo la misma clase. 

 Nótese que simultáneamente, los particulares que 

distinguen un objeto de otro se omiten.

Clases

 Este enfoque resulta ideal para simulación y es una 

muestra de la fuerte influencia de Simula‐67 en 
Smalltalk.

 La memoria privada de una instancia de una clase 

contiene sus variables instanciadas.

Clases

 Las variables instanciadas no son visibles a otros 

objetos. 

 Cada variable instanciada se refiere a un objeto, al que 

se denomina “valor”. 

 Los valores de todas las instancias de una cierta variable 

representan (en su conjunto) el estado actual de esa 
instancia.

Clases

 Las variables instanciadas pueden ser “nombradas” o 

“indizadas”. 

 Las variables nombradas corresponden a apuntadores 

a tipos distintos de los arreglos en un lenguaje 
imperativo. 

 Las variables indizadas se acceden, no mediante su 

nombre, sino mediante los mensajes que usan 
parámetros enteros.

Clases

 La mayor parte de las variables indizadas se usan de tal 

forma que corresponden a arreglos en lenguajes 
imperativos convencionales, aunque la indización 
misma se realiza a través del paso de mensajes.

Clases

 El parámetro entero en un mensaje se usa para 
referenciar una variable indizada instanciada y 
corresponde al subíndice de un arreglo en un lenguaje 
imperativo convencional.

Clases

 Las instancias de una clase se crean enviando el mensaje 

“new” a la clase en una asignación, la cual hace que la 
variable a su izquierda haga referencia al nuevo objeto 
recién creado.

 Por ejemplo:

Clases

ourPen  Pen new

 crea una instancia de la clase “Pen” (enviando el 

mensaje “new” a la clase “Pen”).

Clases

 Esto también hace que la variable “ourpen” haga 
referencia a esta nueva instancia de la clase “Pen”. 

 Este ejemplo demuestra que pueden enviarse mensajes 

tanto a las clases como a los objetos.

Chequeo de Tipos

 Las variables de Smalltalk no tienen tipo; cualquier 

nombre puede asociarse con cualquier objeto. 

 El único chequeo de tipos que se efectúa ocurre 

cuando dinámicamente cuando un mensaje se envía a 
un objeto.

Chequeo de Tipos

 Si el objeto es una de sus clases previas (ancestro), 

entonces tiene un método para el mensaje, el mensaje 
es legal y el objeto reacciona a él. 

 Si no hay método que corresponda a un mensaje, ya 

sea en el objeto en una de sus clases ancestrales, 
entonces se produce un error en tiempo de ejecución.

Chequeo de Tipos

 Este es un concepto de chequeo de tipos 

significativamente diferente del utilizado en los 
lenguajes imperativos. 

 El chequeo de tipos en Smalltalk tiene como objetivo 
simplemente asegurar que un mensaje corresponde a 
un cierto método.

Chequeo de Tipos

 Advierta que el chequeo dinámico de tipos no implica 

en este caso un chequeo débil de tipos. 

 Smalltalk tiene un chequeo fuerte de tipos, a pesar de 
que éste es dinámico (en vez del chequeo estático de 
lenguajes como Pascal y Ada). 

Chequeo de Tipos

 Una ventaja del chequeo dinámico de tipos es su 

flexibilidad, ya que podemos hacer el mismo trabajo que 
con los paquetes genéricos de Ada, pero sin recurrir a la 
inherente complejidad de esa técnica.

Chequeo de Tipos

 Puesto que Smalltalk es un lenguaje interpretado y no 
compilado, el activar mensajes en tiempo de ejecución 
es algo aceptable y la motivación para detectar tan 
temprano como sea po
  • Links de descarga
http://lwp-l.com/pdf10678

Comentarios de: Lenguajes de Programación (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