PDF de programación - Programación orientada a objetos: Simula y Smalltalk

Imágen de pdf Programación orientada a objetos: Simula y Smalltalk

Programación orientada a objetos: Simula y Smalltalkgráfica de visualizaciones

Publicado el 20 de Mayo del 2018
202 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
  • Links de descarga
http://lwp-l.com/pdf11128

Comentarios de: Programación orientada a objetos: Simula y Smalltalk (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad