Actualizado el 6 de Septiembre del 2020 (Publicado el 20 de Mayo del 2018)
759 visualizaciones desde el 20 de Mayo del 2018
419,6 KB
38 paginas
Programación
orientada
a
objetos:
Simula
y
Smalltalk
Paradigmas
de
la
Programación
FaMAF
–
UNC
2016
capítulo
11
basado
en
filminas
de
Vitaly
ShmaEkov
Joe
Armstrong,
the
principal
inventor
of
Erlang:
The
problem
with
object-‐oriented
languages
is
they've
got
all
this
implicit
environment
that
they
carry
around
with
them.
You
wanted
a
banana
but
what
you
got
was
a
gorilla
holding
the
banana
and
the
en<re
jungle.
Simula 67
• primer lenguaje orientado a objetos
• una extensión de Algol 60 para
simulación, pero luego se reconoce
como de propósito general
• estandarizado en 1977
• inspiración para muchos otros, en
particular, smalltalk y C++
historia
• lenguaje de simulación
• centro noruego
• Dahl, Myhrhaug, Nygaard
– Nygaard era un especialista en investigación
operativa y activista político, pretendía que
• los lenguajes pudieran describir sistemas
industriales y sociales
• la gente común pudiera entender cambios políticos
influencia de Algol 60
• características que añade
– concepto de clase
– variables de referencia (punteros a objetos) y
– co-rutinas
– char, text, I/O
pasaje por referencia
• características que elimina
pass-by-name
– el pasaje de parámetros por defecto ya no es
– algunos requisitos de inicialización de variables
– variables own (parecidas a variables estáticas
– tipo string (se sustituye por el tipo text)
en C)
objetos en Simula
– un procedimiento que devuelve un puntero a su
• clase
activation record
• objeto
• acceder un objeto
– activation record que se produce al llamar a una clase
– acceder cualquier variable o procedimiento local
usando notación de punto
• manejo de memoria
– recolección de basura
– no están bien vistos los destructores definidos por el
usuario
ejemplo: círculos y líneas
• problema
• solución
– encontrar centro y radio del
círculo que pasa por los puntos p,
p
q y r
q
r
– dibujar círculos que se intersectan
– dibujar líneas a través de la
intersección de los círculos
– la intersección de las líneas es el
centro del círculo que se busca
modelar esto en simula
• los puntos, líneas y círculos son objetos
• operaciones asociadas a los objetos
– punto
equality(anotherPoint) : boolean
distance(anotherPoint) : real
– línea
parallelto(anotherLine) : boolean
meets(anotherLine) : REF(Point)
– círculo
intersects(anotherCircle) : REF(Line)
clase punto en simula
el argumento p es un puntero a Point
class Point(x,y); real x,y;
begin
boolean procedure equals(p); ref(Point) p;
if p =/= none then
equals := abs(x - p.x) + abs(y - p.y) < 0.00001
real procedure distance(p); ref(Point) p;
if p == none then error else
distance := sqrt(( x - p.x )**2 + (y - p.y) ** 2);
end ***Point***
p :- new Point(1.0, 2.5);
q :- new Point(2.0,3.5);
if p.distance(q) > 2 then ...
un ptr no inicializado
tiene el valor none
asignación de puntero
cómo se representan los objetos
p
access
link
real
x
real
y
proc
equals
proc
distance
1.0
2.5
código
para
equals
código
para
distance
Un objeto se representa con un activation record
con un access link para encontrar las variables
globales con alcance estático
clase línea en simula
class Line(a,b,c); real a,b,c;
begin
boolean procedure parallelto(l); ref(Line) l;
if l =/= none then parallelto := ...
ref(Point) procedure meets(l); ref(Line) l;
begin real t;
if l =/= none and ~parallelto(l) then ...
end;
real d; d := sqrt(a**2 + b**2);
if d = 0.0 then error else
begin
d := 1/d;
a := a*d; b := b*d; c := c*d;
end;
end *** Line***
variables locales
una línea definida
por ax+by+c=0
procedimientos
inicialización
slide 11
clases derivadas en simula
• cuando se declara una clase se le puede
d
A
part
B
part
D
part
prefijar el nombre de otra clase
class A
A class B
A class C
B class D
• un objeto de una clase “prefijada” es la
concatenación de objetos de cada clase
del prefijo
subtipado
• el tipo de un objeto es su clase
• el tipo de una subclase se trata como un
• ejemplo:
subtipo del tipo asociado con la superclase
– class A(…); ...
– A class B(…); ...
– ref (A) a :- new A(…)
– ref (B) b :- new B(…)
– a := b /* legal porque B es una subclase de A */
– ...
– b := a /* también legal, pero hay que
comprobarlo en tiempo de ejecución*/
principales características
orientadas a objetos
• clases
• objetos
• herencia (prefijado de clases)
• subtipado
• métodos virtuales: se puede redefinir una
función en una subclase
slide 14
qué NO tenía Simula 67
• encapsulación: se pueden acceder todos
los datos y funciones
• sin mecanismo self/super (a diferencia de
Smalltalk)
– pero se puede usar la expresión this〈class〉
para referirse al objeto en sí mismo
• sin variables de clase, pero con variables
globales
• sin excepciones
slide 15
resumen de Simula
• una clase es un procedimiento que
devuelve un puntero a un activation record,
el código de inicialización se ejecuta
siempre como cuerpo del procedimiento
• un objeto es una clausura creada por una
clase
• sin encapsulación
• subtipado mediante jerarquía de clases
• herencia por prefijado de clases
slide 16
Smalltalk
objetos
• el lenguaje importante que popularizó
• desarrollado en Xerox PARC
• extiende y desarrolla la metáfora de objetos
Lisp “todo es una lista”)
– algunas ideas de Simula, pero muy distinto
– todo es un objeto, incluso una clase (como en
– todas las operaciones son mensajes a objetos
– muy flexible y poderoso: si un objeto que recibe
un mensaje que no entiende, trata de inferir qué
puede hacer
slide 17
la aplicación que motivó el
desarrollo: Dynabook
• concepto desarrollado por Alan Kay
• una computadora chica, portable
• para esa aplicación, Smalltalk debía ser
– un lenguaje de programación e interfaz al
sistema operativo
– orientado a “no programadores”
– con un editor específico del lenguaje
slide 18
Smalltalk
hoy
• hTp://www.fast.org.ar/
terminología Smalltalk
• objeto instancia de una clase
• clase define el comportamiento de sus objetos
• selector nombre de un mensaje
• mensaje selector con valores para sus parámetros
• método código que usa una clase para responder a
• variable de instancia datos guardados en un
• subclase clase definida como modificaciones
un mensaje
objeto
incrementales a una superclase
slide 20
ejemplo: clase punto
Point
Object
nombre
superclase
variable
de
clase
pi
variable
instancia
x
y
mensajes
y
métodos
de
la
clase
〈…nombres
y
código
de
los
métodos...〉
mensajes
y
métodos
de
la
instancia
〈…nombres
y
código
de
los
métodos...〉
slide 21
mensajes y métodos de la clase
newX:xvalue Y:yvalue | | !
^ self new x: xvalue y: yvalue !
!!newOrigin | |!
! ^ self new x: 0 y: 0!
!
initialize | |!
! pi <- 3.14159!
-‐ el
selector
es
newX:Y:,
por
ejemplo
Point newX:3 Y:2!
-‐
^
marca
el
valor
de
retorno
- | |
marca
el
alcance
de
una
declaración
local
-‐
-‐
new es
un
método
para
toda
clase,
heredado
de
Object
-‐ el
método
initialize fija
pi
<- es
asignación
mensajes y métodos de la instancia
• se
instancian
las
coordenadas
x
e
y,
e.g.,
pt
x:5
y:3
• se
mueve
point
en
la
canEdad
establecida
x: xcoord y: ycoord | |!
! x <- xcoord!
! y <- ycoord!
!moveDx: dx Dy: dy | |!
! x <- dx + x!
! y <- dy + y!
!x | | ^x!
!y | | ^y!
!draw | | !
〈...código para
dibujar point...〉!
instancia
oculta
x
• se
devuelve
la
variable
de
• se
devuelve
la
variable
de
• se
dibuja
el
punto
en
la
instancia
oculta
pantalla
slide 23
representación de Point en tiempo
de ejecución
a la superclase Object
clase Point
Template
x
y
objeto Point
class
x
y
3
2
diccionario de métodos
código
newX:Y:
...
move
...
código
slide 24
herencia
definir puntos coloreados a partir de puntos
ColorPoint
Point
color
nombre
de
clase
superclase
variables
de
clase
variables
de
instancia
métodos
y
mensajes
de
clase
newX:xv
Y:yv
C:cv
métodos
y
mensajes
de
instancia
color
draw
〈
…
código…
〉
|
|
^color
〈
…
código…
〉
nueva variable
de instancia
nuevo método
sobreescribe el
método de Point
representación en tiempo de
ejecución
objeto Point
clase Point
Template
2
3
x
y
objeto ColorPoint
clas
Comentarios de: Programación orientada a objetos: Simula y Smalltalk (0)
No hay comentarios