You are on page 1of 31

Programacin orientada a objetos

Frente
Tipos de datos Resumen
William R. Cook
Laboratorios de Hewlett-Packard
1501 Page Mill Road, Palo Alto, CA, 94303-0969, EE.UU.


Resumen: Esta gua recoge y elabora argumentos para distinguir entre la
programacin orientada a objetos
y tipos de datos abstractos. La diferencia bsica es que la programacin orientada
a objetos alcanza de extraccin de datos mediante el uso de la abstraccin de
procedimiento, mientras que los tipos abstractos de datos depender de la
abstraccin de tipo.
Programacin orientada a objetos y tipos abstractos de datos tambin pueden ser
vistos como complementarios tcnicas de aplicacin: los objetos se centran
alrededor de los constructores de una abstraccin de datos, mientras que
tipos abstractos de datos se organizan en torno a las operaciones. Estas
diferencias tienen consecuencias sobre a la extensibilidad, la eficiencia, la
mecanografa y la verificacin, en muchos casos los puntos fuertes de un
paradigma son los debilidades de los dems. La mayora de los lenguajes de
programacin orientados a objetos de apoyo a los aspectos de ambas tcnicas,
no una unificacin de ellos, por lo que la comprensin de sus mritos es til en el
diseo de programas.

Publicado en las Actas del Taller REX / Escuela sobre los Fundamentos de la
orientada a objetos
Idiomas, LNCS 173, Springer-Verlag, 1990, pp 151-178.

1 Introduccin
El desarrollo de tipos abstractos de datos y programacin orientada a objetos, de
sus races en Simula 67 a sus diversas formas actuales, se ha destacado en la
investigacin del lenguaje de programacin para los dos ltimos dcadas. Este
tutorial est dirigido a organizar y recoger los argumentos que distinguir entre los
dos paradigmas. El enfoque de los argumentos es en los mecanismos bsicos
para la captacin de datos, que ilustra las diferencias con ejemplos. A pesar de
temas ms avanzados, como la herencia, la sobrecarga, y mutable Estado, son
caractersticas importantes de uno u otro paradigma, que no se consideran en esta
presentacin.
Las interpretaciones de "tipo abstracto de datos" y "programacin orientada a
objetos" comparados en este trabajo
se basan en las lneas principales del desarrollo registrado en la literatura y de uso
general.
tipos de datos abstractos a menudo son llamados tipos de datos definidos por el
usuario, porque permite a los programadores para definir
nuevos tipos que se asemejan a los tipos de datos primitivos. Al igual que un tipo
INTEGER primitivo con las operaciones +,
-,, Etc, un tipo abstracto de datos tiene un tipo de dominio, cuya representacin es
desconocida para los clientes, y un?
conjunto de operaciones definidas en el dominio. tipos de datos abstractos se
formul por primera vez en su forma pura
CLU en [31, 30]. La teora de los tipos abstractos de datos est dada por los tipos
existencial [33, 13]. Tambin se
estrechamente relacionado con las especificaciones algebraicas [20, 23]. En este
contexto, la expresin "tipo abstracto" se pueden tomar
en el sentido de que hay un tipo que es "concebido aparte de las realidades
concretas" [41].
Programacin orientada a objetos consiste en la construccin de objetos que
tienen una coleccin de mtodos,
o procedimientos, que comparten el acceso a las ordenanzas locales privados.
Los objetos se asemejan a las mquinas u otras cosas en el
mundo real ms que cualquier concepto matemtico muy conocido. En este
tutorial, Smalltalk se toma como el
lenguaje paradigmtico orientado a objetos. Una teora til de los objetos
asociados con algn tipo de
cierre [2, 37, 8], aunque otros modelos son posibles [26]. El trmino "objeto" no es
muy descriptivo de el uso de las colecciones de los procedimientos para
implementar un resumen de los datos. As pues, adoptar el trmino de
procedimiento de extraccin de datos como un nombre ms preciso de una
tcnica que utiliza procedimientos abstractos de datos.
En el [pag1] resto de este trabajo, resumen de los datos de procedimiento (PDA)
se utilizar en lugar de "orientado a objetos de programacin ". Por extensin, el
trmino "objeto" es sinnimo de valor de los datos de procedimiento.
Se argumenta que los tipos abstractos de datos y abstraccin de datos procesal
son dos tcnicas distintas para la aplicacin de datos abstractos. La diferencia
bsica est en el mecanismo utilizado para lograr la abstraccin barrera entre un
cliente y los datos. En los tipos abstractos de datos, el mecanismo principal es la
abstraccin de tipo, mientras que en la abstraccin de datos de procedimiento que
es la abstraccin de procedimiento. Esto significa, aproximadamente, que en un
ADT los datos se resumen en virtud de un tipo opaco: una que puede ser utilizado
por un cliente para declarar variables, pero cuya representacin no puede ser
inspeccionados directamente. En PDA, los datos es abstracto, ya que se accede
a travs de una interfaz de forma - a pesar de todos los tipos involucrados pueden
ser conocidos por el usuario. Este caracterizacin no es completamente estricta,
ya que puede ser el tipo de un valor de datos de procedimiento considerado como
siendo parcialmente abstractas, porque no todos los de la interfaz puede ser
conocido, adems, los tipos abstractos de datos se basan en la abstraccin de
procedimiento para la definicin de sus operaciones.
A pesar de la disparidad de planteamientos adoptados por ADT y PDA, que puede
entenderse como ortogonales formas de aplicar una especificacin de una
abstraccin de datos. Un resumen de los datos puede ser caracterizada en un
manera muy general, mediante la definicin de constructores abstracta junto con
las observaciones abstracta de la construccin valores. El uso de estas nociones,
un resumen de los datos pueden ser definidos por lista el valor de cada
observacin en cada constructor. La diferencia entre las preocupaciones PDA y
ADT cmo organizar y proteger la implementacin de una abstraccin de datos. La
eleccin de la organizacin tiene un efecto tremendo en la flexibilidad y
extensibilidad de la aplicacin. TADs se organizan alrededor de las observaciones.
Cada observacin se lleva a cabo como una operacin en una representacin
concreta derivada de los constructores. Los constructores tambin se aplican
como las operaciones que crean valor en el tipo de representacin. La
representacin es compartida entre los operaciones, pero oculta a los clientes de
la ADT. PDA est organizado en torno a los constructores de la abstraccin de
datos. Las observaciones convertido en el atributos o mtodos, de los valores de
datos de procedimiento. As, un valor de datos de procedimiento se define
simplemente por la combinacin de todas las posibles observaciones sobre ella.
TADs Visualizacin y PDA formas ortogonales como para organizar una aplicacin
de extraccin de datos proporciona un punto de partida til para comparar las
ventajas y desventajas de los dos paradigmas. La se descompone al emplearse,
ya sea por un constructor o un observador, determina lo fcil que es aadir un
nuevo constructor u observador. Adicin de una nueva caracterstica que choca
con la organizacin es difcil. Adems, la estrecha acoplamiento y seguridad en un
TADs hace menos extensible y flexible, pero apoya la verificacin y
optimizacin. La independencia de las implementaciones de PDA tiene el efecto
contrario. Sin embargo, en varios los casos en PDA se puede esperar a tener
dificultades, los problemas se reducen por el uso de la herencia y subtipos.
La mayora de los lenguajes de programacin existentes que apoyan PDA tambin
hacen uso de TADs. Smalltalk, para ejemplo, se basa en TADs eficiente, pero
inflexible para los nmeros enteros pequeos y matrices. Los nmeros de PDA
y las colecciones se construyen sobre esta base. Simula y C + + de apoyo tanto
TADs y PDA en el mismo marco, el efecto es ms del entramado de la unificacin,
ya que el equilibrio entre la dos estilos an estn vigentes. Los tipos opacos
explcita en Modula-3 estn basados en objetos, todo bien estilo de programacin
parece exigir la aplicacin de TADs el uso de objetos [5, 10]. CLOS Tambin
permite una mezcla de las dos formas de una manera ms flexible con
multimethods y herencia mltiple. Las huellas de la siguiente seccin de la historia
de TADs y la abstraccin de datos de procedimiento. Seccin 3 presenta un
forma de la matriz de especificacin de datos abstractos, e identifica TADs y PDA
como descomposiciones ortogonales de esta matriz. Seccin 4 se comparan las
dos tcnicas con respecto a la programacin incremental, optimizacin,
mecanografa, y la verificacin. Seccin 5 discute el uso de ADT y tcnicas
existentes en la PDA lenguajes de programacin. Finalmente, la seccin 6 resume
los puntos importantes del documento.

2 Resea histrica

En 1972, David Parnas public su obra seminal sobre modularizacin [35].
Demostr el valor de la descomposicin de un sistema en una coleccin de
mdulos de apoyo a una interfaz de procedimiento que oculta locales
del Estado. Seal la utilidad de los mdulos para facilitar la modificacin o
evolucin de un sistema. Su especificacin tcnica [36] para la descripcin de los
mdulos de mquinas abstractas no ha sido aprobado en general, 2 pero el
concepto de mdulo ha tenido un gran impacto, especialmente en el desarrollo de
lenguajes como Modula-2 [44]. Aunque reconoci que Parnas mdulos con
interfaces compatibles pueden ser usados indistintamente, que no desarrollaron
esta posibilidad. Como resultado, los mdulos no son valores de primera clase,
por lo que no puede ser pasa como argumentos o devuelven como valores.
En 1973, Stephen Zilles public un documento sobre la "abstraccin de
procedimiento: una tcnica de proteccin lingstica, "[45], que mostr" cmo los
procedimientos puede ser usado para representar otra clase de componentes del
sistema, objetos de datos, que normalmente no se expresan como programas
"(nfasis aadido). Su nocin de procedimiento la abstraccin es muy similar a los
mdulos de Parnas, sin embargo, que los considera y analiza los datos que pasa
como argumentos a otros procedimientos, y volviendo a los valores. Tambin
seal la similitud con objetos en Simula. l les muestra hablando de corrientes
representan como un vector de los procedimientos con estatales y locales. Llamar
a una operacin se define como una llamada a procedimiento indirecto a travs
del vector. El autor muestra que las diferentes clases de objetos de secuencia se
puede definir mediante la construccin de un vector apropiado de los
procedimientos. Tambin presenta dos de las principales ventajas metodolgicas
de objetos: encapsulacin y la independencia de las implementaciones.
Al ao siguiente, en 1974, Zilles public un influyente artculo de Barbara Liskov
de TADs y clu [31]. Haba desaparecido toda mencin de la PDA, la abstraccin
de tipo haba tomado su lugar. El formalismo de ADT se present siendo tan
estrechamente relacionado con Simula, la principal diferencia se aleg ser que
Simula permite un control completo de representaciones de objeto. La publicacin
de este trabajo inici una dcada de una intensa investigacin sobre TADs, que
pronto se ramific en el trabajo sobre las lenguas [30, 34], la especificacin
algebraica [20, 23, 24, 18, 19], y los tipos existencial [33]. En 1975, John Reynolds
public un documento titulado "tipos de datos definidos por el usuario y estructuras
de datos de procedimiento como un complemento a la abstraccin de datos "[39]
en el que compara los datos de procedimiento abstraccin de los tipos de datos
definidos por el usuario. Sostuvo que son complementarias, ya que cada uno tiene
fortalezas y debilidades y las fortalezas de uno son en general las debilidades de
los dems. En particular, se encontr con que la extensibilidad y la
interoperabilidad PDA ofrecen pero que bloquean algunas optimizaciones. TADs,
Por otra parte, facilitar ciertos tipos de optimizaciones, pero son difciles de ampliar
o llegar a interactuar. Tambin habl de la tipificacin de los dos enfoques, y la
recursividad identificados en los valores y tipos como caractersticas de PDA. Una
de las limitaciones de su presentacin es que los objetos de sus ejemplos slo
tienen un solo mtodo. La introduccin de un segundo mtodo fue descrito como
un intelectual "tour de force", lo que implica que mltiples mtodos son demasiado
complicados para su uso en diseos prcticos. Despus de 1975 poco se escribi
la relacionada con la teora de la programacin orientada a objetos, mientras que
la investigacin de TADs continu. Sin embargo, el desarrollo de los lenguajes
orientados a objetos, como Smalltalk [21] y Sabores [40], continu, especialmente
en el contexto de extensibles, los sistemas interactivos, abierto, que anima el
usuario programacin.
inters terico en la programacin orientada a objetos se desencaden en 1984
por el papel Cardelli en "El semntica de herencia mltiple "[9]. En este trabajo se
identific el concepto de subtipos como elemento central de una la comprensin
de la programacin orientada a objetos. Subtipos y polimorfismo paramtrico se
combinaron para formar la cuantificacin limitada, lo que podra describir aspectos
de las operaciones de actualizacin de los registros [13]. La estudio de los
clculos diferentes para las operaciones de registros y subtipificacin ha
continuado a lo largo de una serie de lneas [42, 43, 38, 12]. Una buena
explicacin de la complementariedad seal Reynolds fue presentada por Abelson
y Sussman [1] en 1985, aunque no citar su obra. Hablan de "programacin
orientada a datos" como una tcnica para escribir programas flexibles y
extensibles en Lisp. Sealan que las abstracciones se caracterizan
por las observaciones y las representaciones, donde la operacin necesaria para
llevar a cabo una observacin depende en la representacin. Los datos de
programacin orientado a obras de agrupar todas las observaciones en un
determinado representacin juntos como componentes, o los mtodos, de un valor
que contiene la representacin. Este est en contraste con la operacin de
programacin orientado, o la programacin de ADT, donde se escribe una funcin
para cada observacin de los casos para cada representacin. Mediante la
organizacin de las observaciones y constructores en una matriz de dos
dimensiones, se hace evidente que TADs y programacin orientada a objetos se
derivan de una dicotoma fundamental: hay dos maneras de organizar esta mesa:
ya sea por observadores de ADTs o por constructores para PDA.
Hay varios otros documentos que contribuyen a la comparacin de TADs y PDA.
Una distincin entre TADs y la abstraccin de datos de procedimiento est
presente en la obra de PS-Algol, que puede poner en prctica ambas tcnicas
usando procedimientos persistente [4]. Danforth y Tomlinson [17] encuesta del
trabajo en el tipo <pag3>

















Figura 2: Especificacin del binario igual (l, m) de observacin.

y las teoras subtipo de TADs y los primeros modelos de objetos de datos sin
componentes de procedimiento. Ellos la conclusin de que no es una explicacin
adecuada de PDA o herencia. La propuesta de ejemplares de Smalltalk es una
presentacin clara del modelo de PDA [28], es tambin la inspiracin para el
ejemplo de la lista bsica utilizado en este tutorial.

3 Distincin TADs y PDA

3.1 Abstraccin de datos
la abstraccin de datos se refiere a una serie de tcnicas para definir y manipular
datos de una manera abstracta.
Resumen de datos es til debido a que la visin conceptual de las propiedades de
los datos son a menudo muy diferentes de las propiedades de la representacin
detallada de los datos en un sistema computacional. En este artculo
abstracciones de datos inmutables se discuten, sin embargo, muchas de las
mismas consideraciones se aplican a mutable abstracciones de datos, o
abstracciones del Estado. Una vista general de datos abstractos se basa en la
nocin abstracta de los constructores y las observaciones abstracto.
Los constructores o crear una instancia de datos abstractos, mientras que las
observaciones recuperar la informacin sobre los datos abstractos. El
comportamiento de un resumen de los datos se especifica que da el valor de cada
observacin aplicado a cada constructor. Esta informacin es, naturalmente,
organizada como una matriz con los constructores de uno de los ejes y los
observadores por el otro. Cada celda de la matriz define el comportamiento de la
abstraccin para un observador dado par de constructor. Como ejemplo, considere
un resumen de los datos para las listas de enteros. Los constructores son nulas,
que construye una lista vaca, y contiguos, que toma una lista y un entero, y forma
una nueva lista con el entero agreg al frente de la lista de argumentos. Los
observadores son nulas?, La cabeza y la cola. Nulo? es un predicado que
devuelve true si su argumento es la lista vaca, es decir, si es igual a cero. Jefe
devuelve el primer entero en un lista no vaca. Cola devuelve el resto de una lista
no vaca. El comportamiento de los observadores en cada constructor se da en la

Figura 1. Las clulas de la matriz contiene
valores definidos en una sintaxis similar a Pascal. Las variables x, y y z se usan
para representar nmeros enteros, mientras que l, m,
y las listas yn. El valor de la hiptesis nula? observacin en el constructor nula es
verdadera, y en la colindan
constructor es falso. Las observaciones de la cabeza y la cola en cero tanto
resultado de una condicin de error, cmo por ejemplo
los errores son tratados no se especifica.


Figura 4: La especificacin
lista descompone en
observaciones.
En la Figura 1, todas las
observaciones son unarios,
en el que se observa slo un
nico valor de resumen
de datos. A menudo es
necesario disponer de
observaciones ms
complejas. Para comparar
dos valores, es necesario
observar los pares de datos
abstractos. Esto complica el
pliego de condiciones, porque
el valor de la observacin
debe estar definido para todas
las combinaciones posibles de los constructores de los valores abstractos que se
comparan.
Esta tcnica se ilustra para la observacin binaria igual en la Figura 2. Esta tabla
se puede ver como aadir una tercera dimensin al cuadro bsico para las
observaciones unario.
Esta tercera dimensin puede ser removido por su codificacin de los casos
directamente en la especificacin del comportamiento
del caso de dos dimensiones. Tal definicin aplanado por la igualdad se da en la
figura 3. En esta versin, un clasificacin explcita se hace slo en el primer
argumento de la observacin, mientras que el segundo se hace referencia
abstracta con nula?, la cabeza y la cola.
El uso de este marco, un resumen de los datos mutables podra ser especificado
por la adicin de un resumen del Estado. La especificacin a continuacin,
incluira no slo el valor de las observaciones, pero su efecto sobre
el estado abstracto de sus argumentos. Aunque tales presentaciones tabular de un
resumen de los datos tienen ciertas ventajas, tambin es til para
descomponer la tabla en varias unidades modulares. Hay dos maneras obvias de
hacer esto, por particin de la tabla en rodajas horizontales o verticales. La
descomposicin tiene la ventaja de reducir el mesa para una coleccin de piezas
ms pequeas uniforme. Una desventaja de descomposiciones es que la simetra
de la tabla se pierde.

3.2 Tipos de datos Resumen

3.2.1 La descomposicin de Observaciones

TADs se puede ver como una descomposicin de la especificacin de la matriz en
las observaciones, como se ilustra en la Figura
4. Esto corta la tabla en sentido horizontal en una pila de filas, donde cada fila
recoge la informacin sobre
un solo observador en una unidad. Informacin acerca de un constructor
determinado se transmite a travs de componentes.
Cada observacin se forma en una operacin independiente que devuelve el
resultado adecuado cuando
aplicar a cualquiera de los valores de constructores. Los constructores tambin se
incluyen las operaciones. La conexin
entre los constructores y de las observaciones es a travs de una representacin
compartida. Con el fin de mantener la
representacin abstracta, su estructura est oculto a los clientes de la ADT. Los
clientes slo pueden crear val-
<pagina5 >

adt IntList
representacin
lista = NIL | CELL de lista de nmeros enteros *
operaciones
nil = NIL
contiguos (x: entero, l: lista) =
CELL (x, l)
null (l: lista)? l = caso de
NIL) cierto
CELL (x, l)) falso
cabeza (l: lista) l = caso de
NIL) de error
CELL (x, l 0)) x
cola (l: lista) l = caso de
NIL) de error
CELL (x, l 0)) l 0
igual (l: lista, m: lista) =
l caso de
NIL) nulo? (M)
CELL (x, l 0)) no nula?
(M)
y x = cabeza (m)
e iguales (l 0, la cola
(m))
Figura 5: Aplicacin de
un TDA para las listas.


UES del tipo utilizando
los constructores, y
ellos slo con
inspeccionar las
operaciones de
observador. El
hormign
representacin se deriva generalmente de la forma de los constructores, pero son
representaciones alternativas tambin es posible. Ya que todos comparten el
acceso a la representacin real del tipo abstracto, las operaciones estn
fuertemente acoplados.

3.2.2 Implementacin de TADs

Una gran variedad de idiomas de apoyo a la aplicacin de tipos de datos
abstractos. Estos lenguajes incluyen uso de tipos particulares en paquetes de Ada,
grupos Clu, definiciones ML abstype, y los tipos opacos en Modula-2.
La estructura general de estas instalaciones son muy similares. El elemento clave
es, por supuesto que la representacin de valores abstractos se oculta a los
usuarios de las operaciones. Exactamente cmo el tipo de representacin es
define y cmo se implementan las operaciones depende de los tipos de datos y
estructuras de control de el idioma. Figura 5 define un TDA aplicacin de listas de
enteros. La sintaxis se basa libremente en ML. El ADT tiene dos partes bien
diferenciadas: una representacin y un conjunto de operaciones. La
representacin se define como una etiqueta tipo de unin, o registro de la variante,
con casos llamado NIL y CELL. La variante NIL es simplemente una constante,
mientras que la variante de la clula contiene un par de un nmero entero y una
lista. Los constructores cero y lindan se definen como las operaciones que se
basan los valores adecuados de representacin.
Las observaciones se definen por un caso de declaracin sobre las variantes de
representacin que devuelve el valor apropiado de la especificacin. nulo? es una
operacin de consulta que determina si una lista es nula. la cabeza
y la cola son de acceso que devuelven el primer entero en la lista, y la lista
abstracta que representa la cola, , respectivamente. La operacin de la igualdad
tiene un caso de declaracin en su primer argumento, pero utiliza las operaciones
de consulta de su segundo argumento. Las mejoras en la aplicacin de la igualdad
se discuten en la Seccin 4.3.



Figura 6: La especificacin lista
descompone en constructores.
Un cliente del ADT es capaz de
declarar variables de tipo de
lista y utilizar las operaciones
para crear y
manipular los valores de lista.
var l: lista = contiguos (contiguos
(nula, 4), 7);
si es igual (l cero), entonces ...
Sin embargo, el cliente no puede inspeccionar la representacin de la lista de
valores. El intento de determinar si es l igual a NIL sera rechazada por el
compilador como una violacin de la encapsulacin de la ADT.
3.3 Abstraccin de datos de procedimiento
3.3.1 La descomposicin de Constructores

PDA puede ser visto como una descomposicin de una especificacin de la
abstraccin de datos en constructores, como se muestra
en la Figura 6. Esto corta la tabla en una serie de columnas, cada una de las
cuales recoge toda la informacin sobre un constructor determinado en una
unidad. Los valores de las diferentes observaciones se reparten entre los
constructores. Cada constructor se convierte en una plantilla, o una clase, para la
construccin de valores de datos de procedimiento, o objetos. Los argumentos
para el constructor de convertirse en el local, estatal o variables de instancia del
procedimiento datos de valor. En el ejemplo de la lista el objeto nulo no tiene un
estado local, mientras que los contras objeto tiene dos piezas de Estado: una para
sujetar el valor entero y el otro para mantener el resto de la lista.
Las observaciones se convierten en componentes o campos de los objetos
realizados por un constructor. Las observaciones a menudo son llamados atributos
o mtodos. Cada objeto se representa como la combinacin de las observaciones
que le sea aplicable. Puesto que el resultado de una observacin de un
constructor es lo que un cliente est interesado, slo el mecanismo para producir
el valor observado debe ser ocultados al cliente. En la organizacin de la matriz de
esta manera, una discriminacin caso se hace en la operacin que se realiza,
no en el constructor de representaciones como en un TDA. Como las operaciones
son visibles para el usuario, no hay necesidad de una instruccin case oculto: el
usuario puede simplemente seleccionar la adecuada observacin directa.
3.3.2 Implementacin de PDA Como combinaciones de las observaciones de
procedimiento con el estado compartido locales, PDA son naturalmente en
ejecucin como cierres que contiene los registros de los procedimientos [37]. Los
procedimientos se derivan de la especificacin de la de extraccin de datos. El
registro se forma mediante el uso de las observaciones como nombres de campo
y de los procedimientos valores. El cierre se utiliza para encapsular los
argumentos del constructor, que actan como estatales y locales para la
procedimientos.
La clase de construcciones en la mayora de idiomas PDA puede ser visto como
un mecanismo especial para la creacin de cierres de los registros. Esta forma de
cierre es diferente de la especie se encuentra comnmente en los lenguajes
funcionales como Lisp por dos razones. En primer lugar, en los lenguajes
funcionales es a menudo slo es posible para formar el cierre de las funciones,
No registros. As, los registros deben ser simulado como un caso explcito sobre
una serie de nombres de campo [2]. En segundo lugar, la cierres no son una
construccin general de la lengua, pero se proporcionan slo dentro de la clase de
construccin.























Nil = auto recursiva = record
nulo? = True
cabeza = error;
cola = error;
contras = diversin (y) de la clula (y, s);
igual divertido = (m) m.null?
final
De la clula (x, l) yo = recursivo registro =
nulo? = False
cabeza = x;
cola = l;
contras = diversin (y) de la clula (y, s);
divertido igual = (m) (no m.null?)
y (x = m.head)
y l.equal (m.tail) final

Figura 7: Implementacin de las listas como una PDA.


Los dos constructores para objetos de lista se definen en la Figura 7. Las
funciones de creacin, Nil y De la clula, los valores devueltos registro. El
constructor de clulas toma dos argumentos, x, l, que desempean el papel de
variables de instancia del objeto. En este ejemplo no se cambian por la cesin,
aunque no hay razn esencial por la cual no puede ser modificado (si, por
ejemplo, un mtodo que se introdujeron de cabeza).
Cada constructor crea un registro con campos denominados nulo?, Cabeza, cola,
los contras, y la igualdad. La puesta en prctica usa los registros recursiva, donde
el identificador de auto consulta el registro se est construyendo. Un m
observacin de un objeto o, lo que se escribe m (o) en el pliego de condiciones, se
lleva a cabo mediante la seleccin de el campo m del objeto: o.m. abstraccin
explcita funcional se introduce para representar a los mtodos:
la diversin notacin (x) b representa una de las funciones de un argumento con
nombre x. A diferencia de la aplicacin de ADT, no hay declaraciones explcitas en
el caso de las PDA. Una declaracin implcita caso se utiliza para seleccionar el
la adecuada observacin de los objetos. Hay varios niveles de recursividad en la
aplicacin [7]. El Nil y objetos de la clula se hacen pasar como argumento al
constructor de la clula, en respuesta a un mensaje contiguos. Adems, el
constructor de la clula propia funcin es recursiva, ya que se llama desde el
mtodo de clulas contiguas. Tambin es posible que objetos a s mismos como
valores de retorno de un mtodo, como es comn en Smalltalk. Una capa
adicional de recursividad, en los tipos de objetos, se discutir en la Seccin 4.4.
Un cliente de la PDA crea objetos y enva las solicitudes, o mensajes, a los
mismos.

var l = Nil.adjoin (4) contiguos (7).;
si Nil.adjoin (8). igual (l), entonces ...
Al igual que en el caso de TADs, el cliente no puede inspeccionar la
representacin interna de valores de la lista, aunque
el formato externo de todos los mensajes que se conoce.
4 Comparacin de TADs y PDA
La diferencia entre TADs y abstraccin de procedimientos implican tanto el uso del
cliente de la abstraccin y la definicin de los ejecutores de la abstraccin. Las
diferencias se ilustran en las reas de programacin incremental, optimizacin,
escribiendo, y la verificacin.
El cliente tiene una visin abstracta de los datos en ambos TADs y PDA. La
principal diferencia entre ellos es la tcnica utilizada para hacer cumplir la
encapsulacin y abstraccin. En un TDA es el mecanismo de tipo
abstraccin, mientras que en el PDA es la abstraccin de procedimiento. Otra
diferencia importante es que en el PDA los objetos actan como clientes entre s, y
as se encapsulan el uno del otro. En un TDA, el 8 valores abstractos estn todos
dentro de una abstraccin nica, por lo que no se encapsulan en cada
otros.

4.1 Adicin de Constructores de Nueva
Agregar constructor de nuevas o diferentes para un resumen de los datos se
puede extender la semntica de la abstraccin o
proporcionar una descripcin ms eficiente de una construccin existente. Por
ejemplo, las listas de nmeros aleatorios,
intervalos de nmeros enteros secuenciales, o una lista que se calcula a partir de
una funcin puede ser aadido a la base
listas. Estos ejemplos ofrecen representaciones eficientes para las listas que sera
engorroso para representar
de forma explcita. Un constructor de listas explcita circular tambin constituira
una extensin, porque
no se puede representar en la especificacin original. Las listas aleatorias y
funcional tambin puede extenderse
el pliego de condiciones para permitir listas infinitas. Tambin es til para permitir
que un constructor para formar parte de ms de un pliego de condiciones. Esto
puede ser visto como permitir que un constructor de una especificacin que se
aaden a otra especificacin. La cuestin de si un cliente puede agregar un nuevo
constructor, o si la adicin se debe hacer por el implementador de la abstraccin.
Si el cliente puede agregar un constructor, el nuevo objeto debe ser permite que
se entremezclan con objeto existente. En general, es mucho ms fcil a una nueva
construccin a una abstraccin de datos implementado como PDA que como ADT.
Los problemas se ilustran mediante la adicin de un constructor para los intervalos
de los nmeros enteros a la anteriormente define abstracciones lista. La
representacin de un intervalo de nmeros enteros es como un par de delimitacin
enteros.

4.1.1 Extensin de una Representacin de ADT
Adicin de un nuevo constructor a un ADT consiste en extender su representacin
concreta. Esto, a su vez, requiere que todas las declaraciones en el caso de las
operaciones para abarcar la nueva representacin variante. Este efecto se ilustra
en la Figura 8, donde se aade la representacin a travs de INTERVALO
la aplicacin. Una nueva operacin, el intervalo, se introduce la construccin de
listas de intervalo, se evala si los lmites definir un intervalo vaco, volviendo nula
si lo hacen. Desde la operacin de la cola se extiende a llamar a la abstracta
constructor de intervalo en lugar de simplemente crear una representacin
INTERVALO directamente, devolver NIL cuando el intervalo se queda vaco.
Adicin de un nuevo constructor a un ADT requiere cambios intrusivas para la
aplicacin existente. Este se debe a que el paradigma de ADT organiza el
observador / constructor de la matriz de acuerdo a las operaciones, de modo que
la adicin de un constructor de enfrentamientos con la estructura natural de la
aplicacin.
4.1.2 Adicin de un constructor PDA
Nueva Adicin de un nuevo constructor de un PDA es fcil, y es prctica comn en
este tipo de programas. La representacin
es descentralizada, con cada objeto que especifica su estado local propio. Por
ejemplo, los intervalos pueden creado por la definicin de un constructor de
objetos nuevos, como en la Figura 9. El constructor simplemente devuelve el
objeto nil si el intervalo es vaco. De lo contrario, construye un objeto con mtodos
que devuelven el primer nmero en el intervalo o construir un objeto nuevo
intervalo. Por registros de la interpretacin, la construccin de nuevos objetos
intervalo se pueden hacer pereza: que slo se crean como sea necesario. Una
realizacin prctica de ese implicara la insercin de una abstraccin funcin vaca
frente a cada valor del campo. El PDA se puede ampliar ms all de la
especificacin original de la abstraccin de datos, para permitir listas infinitas. Una
puesta en prctica de las listas de infinito es como una corriente, cuyos elementos
son aplicaciones sucesivas de una funcin de transicin. Un constructor de flujo se
define en la Figura 10. El estado de la corriente es propuesta por un valor inicial y
la funcin de transicin. Un programa diseado para usar slo la lista original
implementaciones de Nil y la clula funcionar igual de bien en intervalos o
arroyos. Por supuesto, si la igualdad la observacin se incluye, a continuacin,
pueden diferir si se aplica a un arroyo.

adt IntList
representacin
lista = NIL | CELL de lista de nmeros enteros *
| INTERVALO de entero entero *
operaciones
nil = NIL
(: Entero, y: x entero) intervalo =
si x? y entonces intervalo (x, y) ms cero
null (l: lista)? l = caso de
NIL) cierto
CELL (x, l)) falso
Intervalo (x, y)) falso
cabeza (l: lista) l = caso de
NIL) de error
CELL (x, l 0)) x
Intervalo (x, y)) x
cola (l: lista) l = caso de
NIL) de error
CELL (x, l 0)) l 0
Intervalo (x, y)) intervalo (x +1, y)
contiguos (x: entero, l: lista) =
CELL (x, l)
igual (l: lista, m: lista) = l caso de
NIL) nulo? (M)
CELL (x, l 0))
no nulo? (m)
y x = cabeza (m)
e iguales (l 0, la cola (m))
Intervalo (x, y))
no nulo? (m)
y x = cabeza (m)
e iguales (la cola (l), la cola (m))

Figura 8: Implementacin de listas con intervalos como ADT.

4.2 Adicin de nuevas observaciones
Una nueva observacin puede ampliar la funcionalidad de una especificacin o
proporcionar un acceso ms eficiente a determinados
de la informacin. El ejemplo dado aqu es la adicin de una observacin de
longitud a la abstraccin lista.
Desde TADs se organiza en torno a las observaciones, parece que debera ser
fcil de aadir nuevas observaciones.
Por el contrario, debe ser difcil para una a una PDA. Sin embargo, esto no
siempre es as.
4.2.1 Observaciones Agregando a un ADT
Adicin de nuevas observaciones para un ADT se complica por el hecho de que la
representacin oculto debe
ser compartida por todas las operaciones. De alguna manera la operacin de
observacin nuevo debe ser insertado dentro de la
mbito de aplicacin del tipo de representacin. lenguas existentes no son
compatibles con esta capacidad, pero hay poco que
prevenir una extensin de un lenguaje sencillo para permitirlo. Sin esta extensin,
la definicin del TAD debe
modificarse para introducir el nuevo cdigo en el mbito de la representacin.

Intervalo (x: entero, y: entero) =
si x> y entonces
Cero
ms
registro recursivo auto =
nulo? = False
cabeza = x;
cola = intervalo (x +1, y)
contras = diversin (z) de la clula (z, s);
final
Figura 9: Un PDA para las listas de intervalo.
Stream (f: nmero entero entero, x: entero) =
registro recursivo auto =
nulo? = False
cabeza = x;
cola = Corriente (f, f (x))
contras = diversin (y) de la clula (y, s);
final
Figura 10: Un PDA para infinitas corrientes.
Adicin de una operacin de longitud implica la insercin de la siguiente operacin
definida en la figura 11 en theADT
definido en la figura 5.
4.2.2 Adicin Observaciones PDA
Para agregar un mensaje de longitud de las listas de PDA, es necesario agregar a
cada constructor. A pesar de que la
Adems de una operacin de enfrentamientos con la organizacin natural de los
programas de PDA de acuerdo con los constructores,
el mecanismo de la herencia est disponible para hacer esto ms fcil. Un ejemplo
ilustrar este uso sencillo
de la herencia para agregar una operacin. El significado preciso de este
mecanismo de herencia se omite (vase
[15, 16]).
Una nueva familia de constructores de objetos se define en la Figura 12 en funcin
de las implementaciones originales
en la figura 7 que agrega el campo de longitud.
4.3 Operaciones de Optimizacin
Optimizacin de las operaciones es una consideracin importante en la
programacin. Una de las ventajas de la abstraccin
es que algunas optimizaciones se pueden realizar en forma aislada dentro de una
abstraccin. Sin embargo, la abstraccin puede
tambin impiden la optimizacin, ya que impide el acceso a la informacin en la
que la optimizacin se
basarse.
Cuando el intervalo de la representacin se aadir a la lista, la operacin de la
igualdad se convierte en muy ineficiente
porque se debe crear la secuencia completa de los nmeros en el intervalo. Es
ms fcil para optimizar el ADT
aplicacin debido a que la lista de valores no se encapsulan entre s como lo son
en el procedimiento
de extraccin de datos.

longitud (l: lista) l = caso de
NIL) 0
CELL (x, l 0)) 1 + longitud (l 0)
Figura 11: Una operacin de longitud para el ADT lista.
NilWithLength =
Ninguna heredar
con [
Longitud = 0
]
CellWithLength (x, l) =
heredan de la clula (x, l)
con [
= longitud l.length un
]
IntervalWithLength (x: entero, y: entero) =
heredan de intervalo (x, y)
con [
Longitud = (y - x + 1)
]
Figura 12: Agregar una operacin de longitud a los constructores de lista mediante
la herencia.

4.3.1 Optimizacin de TADs
En el ADT es posible mejorar la eficiencia, porque las representaciones de ambos
argumentos a la
funcin de la igualdad pueden ser inspeccionados. La operacin de la igualdad en
el ADT lista puede ser mejorada mediante la adicin de
casos de los constructores de ambos argumentos a la operacin. Anteriormente,
todas las operaciones realizadas una
caso de declaracin en slo su primer argumento. Mediante el uso de la
declaracin de casos sobre los argumentos de la igualdad
operacin, como se muestra en la Figura 13, una comparacin mucho ms
eficiente de los intervalos es posible. Esto es
todava no la aplicacin ms eficiente posible, pero ilustra el examen de ms de un
representacin.

4.3.2 Optimizacin de PDA
En el PDA es mucho ms difcil para optimizar las operaciones, debido a que la
representacin de argumento a la
observacin de la igualdad no puede ser determinada. Por ejemplo, el mtodo de
la igualdad en un objeto de intervalo
no se puede optimizar ya que no hay manera de determinar si su argumento es
tambin un intervalo. Este es el
costo de la flexibilidad de los objetos.
La optimizacin de los mtodos es slo una forma de optimizacin, adems de las
representaciones especializadas
Tambin puede ser visto como una forma de optimizacin, que es apoyado por los
objetos. Otro enfoque prometedor
incluye tcnicas de compilacin que crear un cdigo especial para las
combinaciones comunes de los argumentos
a los mtodos [25, 22, 14].
optimizacin de los mtodos directos es posible en algunos casos. Mediante la
adicin de mensajes adicionales a la
objeto, es posible que otros objetos para consultar estos mensajes y realizar de
manera ms eficiente. Estos
Mensajes fcilmente puede degenerar en mera especificacin de detalles de
representacin. El truco consiste en definir
suficientemente abstracto consultas que brinden una respuesta rpida para
algunas aplicaciones, sin prohibir
otras implementaciones. Para dar un ejemplo sencillo que ilustra esto, considere la
adicin de una lnea adicional

igual (l: lista, m: lista) =
l caso de
NIL) nulo? (M)
CELL (x, l 0))
(No nula? (M))
y (x = altura (m))
e iguales (l 0, la cola (m))
Intervalo (x, y))
caso de m
NIL) falsos
CELL (y, m0))
(X = y) e iguales (la cola (l), m 0)
INTERVALO (x0, y0))
(X = x 0) y (y = y0)
Figura 13: comparacin eficaz de los intervalos de ADT.
operacin para el ADT lista y PDA. Una operacin simple para aadir ADT es fcil
de definir.
append (l: lista, m: lista) l = caso de
NIL) m
CELL (x, l 0)) colindan nuevas (se aade a (l 0, m), x)
Esta operacin es ineficiente, ya que se copia su primer argumento en los casos
en que el segundo argumento
es nulo. As, una mejor aplicacin comprobar su segundo argumento tambin.
append (l: lista, m: lista) l = caso de
NIL) m
CELL (x, l 0))
caso de m
NIL) l
CELL (y, m0))
colindan nuevas (se aade a (l 0, m), x)

Esta optimizacin puede ser implementado en la versin PDA porque la operacin
nula ya est presente
para determinar si una lista es nulo.

NilWithAppend =
Ninguna heredar
con [
aadir diversin = (m) m
]
CellWithAppend (x, l) =
heredan de la clula (x, l)
con [
aadir diversin = (m)
si m.null? a continuacin,
auto
ms
l.append (m). colindan (x)
]
Otro ejemplo consiste en la optimizacin del mtodo de la igualdad. Si la interfaz
lista inclua una rpida
mensaje de longitud, a continuacin, la igualdad se podra definir a la igualdad
primer cheque de la longitud de las listas.
13
4.4 Mecanografa
Los tipos son las especificaciones parcial de un programa. sistemas de tipo
generalmente se definen para ser tan expresivo como
posible, permitiendo al mismo tiempo eficaz control por un compilador.
Diferentes niveles de especificidad son posibles para las interfaces de describir,
desde un simple mtodo sencillo
lista a la especificacin completa del comportamiento. Lo ms que un idioma se
puede esperar para comprobar automticamente si es
compatibilidad sintctica, basado en las interfaces con los nombres de los
mtodos y tipos de argumentos. Esto se realizar
como la definicin de la interfaz a partir de ahora.
4.4.1 Firmas de TADs
La teora del tipo de TADs se deriva, por analoga con el lgebra abstracta. Una
aplicacin ADT es una
lgebra, es decir, es un conjunto con operaciones en ese conjunto. Al igual que en
lgebra, la naturaleza exacta de la
conjunto se considera menos importante que los efectos relativos de las diferentes
operaciones.
Las operaciones en un lgebra se caracteriza por su firma. La firma proporciona
un nombre para el
conjunto transportista, o tipo, del lgebra, y especifica las operaciones de la
compaa. Los nombres de cada firma
operacin y define el tipo de sus argumentos y valor de retorno. Una firma para el
lgebra lista de nmeros enteros
A continuacin se da.
Lista de la firma
tipo t
operaciones
nada: t
nulo? : T! booleano
cabeza: t! entero
cola: t! t
lindan: integer t! t
La firma de la lista no garantiza que el lgebra define las operaciones que se
comportan correctamente en las listas,
nico que se ha determinado formato de las operaciones. Una forma de una firma
puede ser ampliado en un tipo que
especifica el comportamiento es mediante la adicin de axiomas. Esto se discute
en la Seccin 4.5.
Una firma es un tipo que clasifica a lgebras. No debe ser confundido con la
camiseta de la clase de lgebra,
que es el tipo de lista de valores enteros. As, hay al menos dos tipos de
participantes en el anlisis de los ADTs:
el tipo de la aplicacin y el tipo de valores abstractos manipulados por la
aplicacin.
Un tercer tipo est presente, aunque invisible, dentro de un ADT. Este es el tipo de
la representacin concreta
de los valores de tipo abstracto. Este tipo se conoce slo dentro de una aplicacin
en particular, sino para compartir, es
entre todas las operaciones.
Firma tipos son especialmente tiles si las implementaciones de ADT son valores
de primera clase. Uso de la firma
tipos, es posible pasar las implementaciones de ADT o devolver los valores de un
procedimiento. En la mayora de
idiomas, incluyendo Ada, ML (al menos en su abstype construccin), y Modula,
tipos abstractos de datos son
no los valores de primera clase y cada uno de sus tipos de firma es estticamente
enlazado a una sola aplicacin;
Por supuesto, esta aplicacin puede ser sustituido o refinado como el programa se
modifica. El mdulo ML
sistema permite la parametrizacin de los valores de ADT, a pesar de que todava
no estn completamente de primera clase.
TADs se han formalizado como tipos existencial [33, 13]. Uso de tipos existencial,
es posible
parametrizar completamente sobre las implementaciones de tipos abstractos de
datos.
Lista = t existe. [
nada: t,
nulo? : T! booleano,
cabeza: t! entero,
cola: t! t,
lindan: integer t! t
iguales: t t! ] Booleano
14
Cada ADT soporta un tipo abstracto de los valores. En las lenguas en la aplicacin
ADT es
estticamente ligado a su firma, el nombre de la ADT sirve a menudo como el
nombre para el tipo abstracto de
valores.
En las lenguas en TDAs son valores de primera clase, el ADT se debe abrir en
torno a un mbito determinado en
que el tipo abstracto se define. El requisito de que un TDA debe ser 'abierto' antes
de que pueda
ser utilizado puede dar lugar a dificultades. Un problema es que cada vez que un
ADT es su apertura se crea un nuevo
tipo diferenciado, de modo que dos aberturas de la ADT mismo no se puede
utilizar cada uno de los valores de los dems o de las operaciones [32].
El efecto prctico de esto es obligar a todos los TADs que se abrir fuera del
alcance de su uso, a menudo a
el nivel de bloque exterior de un programa. Tcnicas para evitar este problema se
han desarrollado, por
permitiendo un compilador para determinar en algunos casos que dos aberturas
son iguales [11].
4.4.2 Interfaces con valores de datos de procedimiento
La interfaz a un valor de datos es un tipo de procedimiento que especifica los
nombres, argumentos y valores devueltos
de cada procedimiento en el valor. Dado que los objetos se pasan como
argumentos y devuelven como valores, los tipos
de los objetos son de orden superior. Si el objeto se devuelve como un valor, o
requiere de otros parmetros como la propia,
su interfaz ser recursivo. Las interfaces no son suficientes para garantizar que un
objeto se comporta de forma adecuada;
aunque las descripciones de comportamiento se puede conectar fcilmente a
ellos. La interfaz para las listas de enteros son
recursivo y de orden superior.
lista = [
nulo? : Boolean;
cabeza: entero;
cola: lista;
lindan: entero! lista;
iguales: la lista! booleano
]
Este tipo es muy similar al cuerpo de la firma ADT, excepto que la primera
aparicin de la
t existencialmente vinculada tipo se ha quitado de cada operacin. Este argumento
es que faltan porque es
el objeto sobre el que la interfaz se define. Los otros usos de t se convierten en
una referencia recursiva a
lista.
4.4.3 Interfaces parcialmente Resumen
Un modelo hbrido escribiendo con interfaces parcialmente abstractos parece ser
ms apropiado para la comprensin
lenguajes orientados a objetos como Simula, C + + y Eiffel. En estas lenguas los
tipos tienen tanto explcita
informacin de la interfaz de procedimiento y tambin oculta los componentes. As
que son slo parcialmente abstracta. Un
modelo para los tipos parcialmente abstracta viene dada por la cuantificacin
existencial limitada [13]. Una parte abstracta
tipo de lista incluye informacin de los mensajes en un salto en el tipo abstracto.
Lista = Existe t? [
nulo? : Booleano,
cabeza: entero,
cola: t,
lindan: entero! t
iguales: t! booleano
].
[Nulo: t]
Este tipo da la estructura general de una implementacin de ADT. La camiseta tipo
abstracto se ve limitada
ser un subtipo de la interfaz de objeto de lista. Una nocin ampliada de
polimorfismo limitada se utiliza para permitir
la variable t obligado a aparecer en el lmite [6].
El constructor es nula, ser la nica operacin suministrado directamente en el
ADT. Las dems operaciones son
definen como los mensajes a los valores del tipo parcialmente abstracta.
15
4.5 Verificacin
Mientras TADs se desarrollaron con pruebas de correccin en la mente, la PDA se
ha desarrollado sin el beneficio (o
obstculo) de preocupacin sobre la verificacin formal. Especificacin de la
inmutable abstracciones de datos de procedimiento,
como se ilustra en este trabajo, es equivalente a la especificacin de las funciones
de orden superior. Correccin de pruebas
PDA mutables son mucho ms difciles.
Las consecuencias prcticas del problema de la correccin en un resumen de los
datos de procedimiento es fcilmente
ilustrado. Dado que no existe un control centralizado sobre abstracciones, hay
poco para detener una incorrecta
objeto de encontrar su camino en los lugares que no es apropiado. Por ejemplo,
hay muchos objetos
que se asemejan a las listas pero no se comportan correctamente. Por ejemplo,
este objeto es muy poco cooperativo:
Mal = auto recursiva = registro
nulo? = True,
cabeza = 10,
cola = Nil,
colindan = diversin (y) yo
divertido igual = (l) verdadera
final
Tiene un valor de 10 cabeza y la cola est vaca, por lo que parece representar la
lista (10). Pero su colindan
mtodo siempre devuelve la misma lista (10), se espera que Bad.adjoin (4)
debera devolver una lista que
representa (4, 10). Adems, el malo siempre dice que est vaco. Tambin afirma
que es igual a todos los
otra lista.
Sin embargo, el malo tiene la lista de tipo, porque satisface la somera descripcin
de los mtodos y argumentos.
Esto no quiere decir que las interfaces no valen nada, slo que, si bien no
garantizan un comportamiento correcto,
que puede prevenir ciertos tipos de comportamiento incorrecto.
Varios sistemas de prueba para PDA Recientemente se han propuesto. La primera
es Pierre de Estados Unidos axiomtica
sistema de pliego de condiciones de un lenguaje sencillo [3]. Es compatible con la
especificacin del comportamiento de los objetos, la verificacin
que una aplicacin cumple con las especificaciones, y una relacin entre los
subtipos especificaciones.
El lenguaje objeto incluye el paso de mensajes y la mutacin de las variables de
instancia, sin embargo, no
permitir que los objetos que se pasan como parmetros de un mensaje - todos los
argumentos a que los mensajes deben ser primitivo
valores (no objetos). El problema de alias debe ser resuelto antes de que esta
tcnica puede extenderse a
permitir que los objetos como valores de primera clase.
El segundo es un sistema de especificacin algebraica [29]. Este sistema se
encarga de las especificaciones de clase y
subtipos, pero no permite la mutacin de los objetos. Tambin permite que
cualquier objeto que se pasa como de primera clase
valores. As, este trabajo debe ser directamente aplicable a las abstracciones de
datos inmutables en cuenta en
este trabajo. Sin embargo, el problema de alias debe abordarse antes de que el
sistema puede extenderse a
cubierta de la abstraccin del Estado.
5 Idiomas apoyo PDA
5.1 Simula e idiomas relacionados
Simula 67 fue el primer lenguaje orientado a objetos. Se define como una
extensin de Algol 60, al permitir
bloques para separarse del rgimen de activacin anidado normal y tienen una
vida independiente. La
declaraciones en un bloque individual se hicieron accesibles a otras partes del
programa a travs de una referencia.
La definicin de dichos bloques se denominan clases, que tambin actu como
tipos o calificaciones en las referencias.
Las clases tambin se podra definir por extensin de las clases anteriores, dando
lugar a una jerarqua de herencia. Temprano
versiones de la lengua no proporcion suficiente encapsulacin de los atributos de
las clases, pero ms tarde
versiones corregido este problema.
Simula fue la inspiracin para los idiomas ADT puro, semejante al CLU, y el
lenguaje PDA pura
Smalltalk. Esto no es sorprendente, porque Simula recoge aspectos de ambas
tcnicas. Este compuesto
enfoque se ha conservado en la mayora de sus descendientes de tipo esttico,
incluyendo C + +, Beta, y Eiffel.
Una definicin de clase es a la vez constructor de objetos y un tipo. Esta doble
naturaleza se puede ver en los dos
contextos en los que se utilizan nombres de las clases: en una nueva expresin, o
en la declaracin de una variable. El tipo
16
que define una clase es parte abstracta, como se indica en la Seccin 4.4.3, ya
que pueden tener tanto pblicos
y componentes ocultos. Si la pieza no es vaco, entonces la clase se asemeja a
una interfaz orientada a objetos.
Estas clases se denominan clases abstractas. Si una clase con los privados se
utiliza como un tipo,
entonces se est actuando ms como un TDA.
Simula y C + + tambin apoyan una distincin entre las operaciones virtuales y no
virtuales. Cuando un virtual
las operaciones se invoca, el mtodo que se llama se determina a partir del objeto
sobre el que la operacin se
que se realiza. Este es el comportamiento que ha sido asumido como normal en el
debate general de
PDA. Todas las operaciones son virtuales en Smalltalk, Eiffel, y el enrejado. El
mtodo para una operacin no virtual
se determina la clase de la variable utilizada para hacer referencia al objeto, no del
objeto en s. No virtual
modelo de operaciones las operaciones de un TDA, ya que se han tomado de la
aplicacin de
el tipo, no de los valores abstraerse. Clases en las que todas las operaciones son
virtuales
llamadas clases virtuales.
As PDA se expresa en estos idiomas utilizando virtuales clases abstractas como
tipos. El uso de
las clases no abstractas o no virtual se utilizan como tipos indica el uso de
tcnicas de ADT. As, las clases
son capaces de expresar tanto TADs y PDA en la misma forma sintctica, pero la
distincin entre los dos
tcnicas todava existe, y la prctica compensaciones an estn vigentes.
5.2 Smalltalk
Smalltalk fue desarrollado a partir de las ideas en Simula 67 y Lisp. Se ha ido ms
lejos en el desarrollo de una pura
lenguaje orientado a objetos. El lenguaje no tiene tipos estticos, pero sigue
siendo un lenguaje fuertemente tipado,
porque el mensaje errneo enva y accesos variables se capturan en tiempo de
ejecucin.
Ya que carece de un sistema de tipo esttico, es imposible para que tenga la
abstraccin de tipo definido por el usuario. En su lugar,
Smalltalk se apoya constantemente en la abstraccin de procedimiento, incluso a
nivel de estructuras de control bsicas como
condicionales e iteraciones.
La biblioteca Smalltalk contiene una mezcla de clases de objetos mutables e
inmutables. El inmutable
otros incluyen la booleanos (Verdadero y Falso), los nmeros (SmallInteger,
LargeNegativeInteger, Grande-
PositiveInteger, enteros, fracciones, y flotacin), el ParseNodes (uno para cada
tipo de expresin en el
de idiomas). Los objetos mutables incluyen las colecciones (Set, Diccionario,
Array, LinkedList), con excepcin del intervalo,
que es inmutable. Estas clases se implementan como una PDA.
Sin embargo, en los niveles ms bajos del sistema, en el manejo de los nmeros
primitivos y matrices, Smalltalk
se basa en incorporada TADs. Un tipo representa enteros pequeos en el rango
de 0 a 256. Otro se utiliza para la base
nmeros de punto flotante. Adems, una amplia primitiva construccin se basa en
el mecanismo de la clase de base.
Las versiones PDA de nmeros enteros, fracciones, nmeros complejos, y las
colecciones se basan en estos primitivos
TADs.
La forma en que esto se hace es muy interesante. Para los nmeros enteros, el
sistema se implementa de manera que
arbitrarias representaciones nuevo entero puede ser definido y entremezcladas
con otras implementaciones. Desde
operaciones binarias no se puede saber la exacta representacin de sus
argumentos, un protocolo unario se utiliza para
extracto de dgitos de uno en uno desde el objeto de discusin. El protocolo
incluye un dgito digitLength mensaje
para determinar el nmero de dgitos de un nmero entero, y digitAt: n para
acceder ensimo dgito. El nmero n debe
ser un nmero entero primitiva pequea, lo que limita el nmero de dgitos, sin
embargo, las cifras estn representados
en la base de 256, y el nmero de dgitos es tpicamente del orden de 65.000,
enteros tan extremadamente grande
puede ser representado. Lo interesante de este arreglo es que las
representaciones especiales pueden ser
inventado para representar nmeros grandes. Por ejemplo, 2 m - 1 puede estar
representado por un objeto especial que
dgitos regresa con el nmero adecuado de bits de un conjunto en funcin del
argumento n de digitAt. Con el fin de
para integrar plenamente la representacin de entero nuevo, puede ser necesario
cambiar otros mtodos para que
crear el nuevo entero en su caso.
Para otros tipos de nmeros, incluyendo fracciones, flotadores, y nmeros
complejos, no es una generalidad
jerarqua. Este es un orden total de las distintas clases de Nmero. Una clase de
nmero general debe definir
cmo convertir los nmeros en general menos en la representacin extendida sin
perder informacin, y
tambin la forma de truncar la representacin ampliada para que pueda ser
utilizado en un nmero menor en general es
espera.
17
5.3 El clculo lambda
De acuerdo con las definiciones que figuran aqu, el clculo lambda es la lengua
ms antigua y ms pura de apoyo
PDA. Desde su construccin es slo la abstraccin funcional, todos los datos
deben estar representados como funciones.
Su pureza proviene del hecho de que carece no slo TADs definidos por el usuario
sino tambin los datos incorporado familiares
tipos como enteros y booleanos que se encuentran en Pascal y Fortran. Por otra
parte, el lambda-clculo tambin
carece de construcciones imperativo para la asignacin de variables, que a
menudo se considera esencial para PDA
la prctica.
Lenguajes de programacin basado en el clculo lambda, como esquema, utilice
estas mismas tcnicas para
aplicar PDA [2]. Es posible definir PDA en derivados de tipo esttico de la lambda-
clculo,
como ML, pero gran parte de la flexibilidad de la tcnica se pierde debido a la falta
de tipificacin. Adicin de tipos
y el polimorfismo paramtrico para el clculo lambda que permite precisin TADs
modelo [33].
5.4 CLOS
El Common Lisp Object System (CLOS [27]) parece desafiar la caracterizacin
con la distincin
entre PDA y TADs.
El modelo fue motivada originalmente como una generalizacin del modelo de
objetos clsicos en Smalltalk.
En este modelo se enva un mensaje a un objeto de distinguir, y el mtodo para
invocar se determina
examinando el tipo o clase, de ese objeto. Los argumentos del mensaje no juegan
un papel en
determinar el mtodo a invocar. En el modelo de objetos generalizada, el mensaje
se ve como una operacin
en una coleccin de argumentos, y cualquier o todos los argumentos pueden
desempear un papel en determinar qu
mtodo para ejecutar. Considerando que el proceso de seleccin se localiza en un
solo objeto y su clase en el clsico
modelo, en el modelo generalizado el sistema debe seleccionar un mtodo basado
en las interacciones entre las clases.
Tal vez sea posible para ver como CLOS organizado en torno a la especificacin
original multidimensional
de un resumen de los datos. Esta matriz no se descompone como lo es en el ADT
y enfoques PDA, pero
se gestiona en su totalidad por el sistema. En este esquema, las estructuras de
representacin y las operaciones son relativamente
entidades independientes. El sistema resultante es menos modular de las
organizaciones ADT u objeto,
pero tiene la ventaja de la simetra y la flexibilidad. El grado de encapsulacin que
proporciona el sistema
Tampoco queda claro. Un sistema de tipo adecuado tampoco ha sido identificado.
6 Conclusin
La esencia de la programacin orientada a objetos es la abstraccin de datos de
procedimiento, en los que los procedimientos se utilizan
para representar los datos y las interfaces de procedimiento proporcionar
ocultamiento de la informacin y la abstraccin. Esta tcnica
es complementaria de TADs, en los que las lgebras de concreto se utilizan para
representar los datos, y la abstraccin de tipo
proporciona ocultacin de informacin.
Los dos paradigmas se pueden derivar de una dicotoma fundamental en la
descomposicin de una matriz de observadores
y constructores que especifican datos abstractos. PDA esta matriz se descompone
en constructores: un
clase se asocia a cada constructor y las observaciones se convierten en atributos
o mtodos, de la
clase de casos. En efecto, los valores de la abstraccin son ni ms ni menos que
la coleccin de
observaciones legales al respecto. TADs, por el contrario, se descompone la
matriz en las observaciones: cada
observacin es una operacin definida en un tipo abstracto que incluye los
constructores como de representacin
variantes.
Como era de esperar, teniendo en cuenta los sesgos organizacin de los dos
paradigmas, que son complementarios en
el sentido de que cada uno tiene ventajas y desventajas. Uso de PDA, es fcil
aadir nuevos constructores, y
la ausencia de un tipo comn extrada reduce la interdependencia de cdigo. Con
la herencia y subtipos
tambin es posible aadir nuevas observaciones (mtodos). Sin embargo, el uso
de la abstraccin funcional fuerte
evita que las optimizaciones que podra llevarse a cabo si ms de una
representacin pueden ser inspeccionados en un
tiempo. observaciones binarias en dificultades motivo especial para PDA.
Uso de TADs, es difcil agregar constructores fundamentalmente nuevo: el tipo de
representacin compartida
y todas las operaciones deben ser cambiados. Es ms fcil para agregar una
nueva observacin, aunque el apoyo
de esto no se proporciona en la mayora de idiomas. Subtipificacin permite
implementaciones diferentes para ser utilizado, pero
18
implementaciones no se pueden mezclar. Por otra parte, las propiedades de la
unificacin de la abstraccin de tipo
permite optimizaciones que requieren acceso a la representacin ms de un valor
en un momento.
Simula fue la inspiracin para el desarrollo de ambos tipos de datos abstractos
(por ejemplo CLU)
y PDA (por ejemplo Smalltalk). Esto no es sorprendente, porque Simula encarna
una combinacin de
las dos tcnicas, una caracterstica conservada por sus descendientes C + +,
Eiffel, y Beta. La combinacin
es ms de un entretejido de una unificacin, porque las compensaciones descritos
anteriormente an estn vigentes.
En general, las ventajas de un paradigma son las desventajas de la otra. Un
anlisis detallado
de las compensaciones implicadas deben hacer a fin de decidir si un TDA o un
PDA es ms adecuada
para un problema. Algunas de las preguntas relevantes en esta eleccin son:
Qu tan probable es que el sistema se
extendida? Debe la seguridad del sistema se conserva, an a costa de la
extensibilidad? Es
posibles las interacciones imprevistas se puede desear? Es el ambiente
dinmicamente extensible y
las adiciones deben interactuar de forma compleja con el cdigo existente?
Cunta eficiencia se requiere? Es
es probable que habr un gran nmero de operaciones binarias con un
comportamiento complejo? Por desgracia,
los futuros cambios en los requisitos puede invalidar esta eleccin. En este caso
es posible mecnicamente
Traduccin de un paradigma a otro. En este contexto, preguntas como "Qu es
mejor paradigma
para modelar el mundo real "son prcticamente sin sentido. La eleccin depende
de cmo es el mundo
conceptualizado, y qu propiedades adicionales que se espera del modelo.
Reconocimiento
Me gustara dar las gracias a los patrocinadores y los participantes de la escuela /
taller sobre las bases de a objetos
programacin para ofrecer un foro para la presentacin inicial de estas ideas, y el
otro
oradores en la escuela para motivar el esfuerzo. El punto de vista que aqu se
presenta ha sido desarrollado en colaboracin
con Peter Canning, Hill Walt, y Olthoff Walter. Valiosos aportes a la presentacin
fueron realizadas por Warren Harris, Katiyar Dinesh, y Snyder Alan.
Referencias
[1] Abelson y Sussman. La estructura e interpretacin de los programas de
ordenador. MIT Press, 1985.
[2] N. Adams y J. Rees. Programacin orientada a objetos en el esquema. En
Proc. de la Conf. de ACM. en
Lisp y programacin funcional, pginas 277-288, 1988.
[3] p. Latina. Un enfoque de comportamiento para subtipificacin lenguajes de
programacin orientados a objetos. En Proc.
de la Escuela REX / Taller sobre los Fundamentos de los lenguajes orientados a
objetos, de 1990.
[4] M. P. Atkinson y R. Morrison. Procedimientos como objetos de datos
persistente. ACM Transactions on
Programacin Lenguajes y Sistemas Informticos, 7 (4) :539-559, de 1985.
[5] M. Nelson R. Brown y G.. IO arroyos: Los tipos abstractos, programas reales.
Informe Tcnico 53,
Digital Equipment Corporation Sistemas del Centro de Investigacin, 1989.
[6] p. Canning, W. Cook, W. Hill, J. Mitchell, y Olthoff W.. polimorfismo de la F-
limitada a objetos de
programacin. En Proc. de la Conf.. en lenguajes de programacin funcional e
Informtica
Arquitectura, pginas 273-280, 1989.
[7] P. Canning, W. Cook, W. Hill, y Olthoff W.. Interfaces para la inflexible de tipos
de programacin orientado a objetos.
En Proc. Conf. de ACM. sobre la programacin orientada a objetos, sistemas,
lenguajes y aplicaciones,
pginas 457-467, 1989.
[8] p. Canning, W. Hill, y Olthoff W.. Un lenguaje de ncleo para programacin
orientada a objetos. Tcnico
Informe STL-88-21, los laboratorios de Hewlett-Packard, 1988.
[9] L. Cardelli. Una semntica de herencia mltiple. En la semntica de los tipos de
datos, el volumen de 173 conferencias
Notas en Ciencias de la Computacin, pginas 51-68. Springer-Verlag, 1984.
19
[10] L. Cardelli, J. Donahue, L. Glassman, M. Jordan, B. Kalsow, y Nelson G..
Modula-3 informe
(Revisada). Informe Tcnico 52, Digital Equipment Corporation Sistemas Centro
de Investigacin de diciembre
1989.
[11] L. Cardelli y Leroy X.. Los tipos abstractos y la notacin de puntos. Digital
Equipment Corporation
Centro de Sistemas de Investigacin, 1990.
[12] L. Cardelli y J. Mitchell C.. Operaciones en los registros. Informe Tcnico 48,
Digital Equipment
Corporacin Centro de Sistemas de Investigacin, 1989.
[13] L. Cardelli y Wegner P.. Sobre los tipos de comprensin, abstraccin de
datos, y el polimorfismo. Informtica
Encuestas, 17 (4) :471-522, de 1986.
[14] C. Salas, D. Ungar, y E. Lee. La realizacin eficiente de s mismo, una forma
dinmica con tipos
lenguaje orientado a objetos basado en prototipos. En Proc. Conf. de ACM. sobre
la programacin orientada a objetos,
Sistemas, Lenguajes y Aplicaciones, pginas 49-70, 1989.
[15] W. Cook. Una semntica denotativa de la herencia. tesis doctoral, Universidad
de Brown, 1989.
[16] W. Cook y J. Palsberg. Una semntica denotativa de la herencia y su
correccin. En Proc. de
Conf. ACM. de Programacin orientada a objetos, sistemas, lenguajes y
aplicaciones, pginas 433-444,
1989.
[17] S. C. Danforth y Tomlinson. La herencia y la teora de tipos. Informe tcnico,
MCC, de 1987.
[18] H. Ehrig y B. Mahr. Fundamentos de la Especificacin algebraica 1:
Ecuaciones y semntica inicial.
Springer-Verlag, 1985.
[19] J. Goguen y J. Meseguer. Eqlog: Igualdad, tipos y mdulos genricos para la
programacin de la lgica. En
Funcional y Lgica de Programacin, pginas 295-363. Prentice-Hall, 1986. Una
versin anterior aparece
en el Diario de la lgica de programacin, volumen 1, nmero 2, pginas 179-210,
septiembre 84.
[20] J. Goguen, J. Thatcher, Wagner E. y J. Wright. semntica inicial lgebra y
lgebra continua.
J. ACM, 24 (1) :68-95, enero de 1977.
[21] A. D. Goldberg y Robson. Smalltalk-80: el lenguaje y su implementacin.
Addison-Wesley,
1983.
[22] J. Ms grave. Comprobacin de tipos e inferencia de tipo de lenguajes de
programacin orientados a objetos. Doctorado
tesis de la Universidad de Illinois, 1989.
[23] J. Guttag. tipos de datos abstractos y el desarrollo de estructuras de datos.
Comunicaciones de la
ACM, 20 (6) :297-404, junio de 1977.
[24] J. V. Guttag y J. J. Horning. Una introduccin a la lengua compartida de
alerces. En IFIP, 1983.
[25] R. E. Johnson. Tipo de control Smalltalk. En Proc. Conf. de ACM. sobre la
programacin orientada a objetos,
Sistemas, Lenguajes y Aplicaciones, pginas 315-321, 1986.
[26] K. Kahn, Tribble E., M. Miller, y D. Bobrow. Vulcano: objetos lgicos
concurrentes. En Investigacin
Direcciones de Programacin orientada a objetos, pginas 75-112. MIT Press,
1987.
[27] S. E. Keene. Programacin orientada a objetos en Common Lisp. Addison-
Wesley, 1989.
[28] W. R. LaLonde, D. Toms A., J. y R. Pugh. Un modelo basado en Smalltalk.
En Proc. de ACM
Conf. de Programacin orientada a objetos, sistemas, lenguajes y aplicaciones,
pginas 322-330, 1986.
[29] levadura T. y G. W. E. Weihl. Razonamiento acerca de los programas
orientados a objetos que utilizan los subtipos. En
Proc. Conf. de ACM. de Programacin Orientada a Objetos, Sistemas, Lenguajes
y Aplicaciones, 1990.
a aparecer.
20
[30] B. Liskov, Snyder A., R. Atkinson, y C. Schaffert. Abstraccin mecanismos
CLU. Comunicaciones
de la ACM, 20:564-576, 1977.
[31] B. Liskov y Zilles S.. Programacin con tipos abstractos de datos. SIGPLAN
Avisos, 9 (4): 50-59, 1974.
[32] D. MacQueen B.. Utilizar los tipos de dependientes para expresar la estructura
modular. En Proc. de los sn ACM.
sobre los principios de lenguajes de programacin, de 1986.
[33] J. Mitchell, C. y G. D. Plotkin. Los tipos abstractos tienen el tipo existencial. En
Proc. de los sn ACM.
sobre los principios de lenguajes de programacin, de 1985.
[34] U. S. D. de Defensa. Manual de referencia para el lenguaje de programacin
Ada. ANSI/MIL-STD-1815
A, 1983.
[35] D. Parnas. En los criterios que se utilizarn en sistemas de descomposicin
en mdulos. Comunicaciones de la
ACM, 15:1053-1058, 1972.
[36] D. Parnas. Una tcnica para la especificacin de software del mdulo.
Comunicaciones de la ACM, 15:330-336,
1972.
[37] U. S. Reddy. Objetos como los cierres: Resumen semntica de los lenguajes
orientados a objetos. En Proc. de la
Conf. ACM. en Lisp y programacin funcional, pginas 289-297, 1988.
[38] D. R'emy. Verificacin de tipos y variantes de los registros en una extensin
natural de ML. En Proc. de la ACM
Sntomas. sobre los principios de lenguajes de programacin, pginas 77-88,
1989.
[39] J. C. Reynolds. tipos definidos por el usuario y estructuras de datos de
procedimiento como un complemento
a la abstraccin de datos. En Nuevos avances en los diferentes idiomas
algortmica, pginas 157-168. Inst. de Recherche
d'Informatique et d'Automatique de 1975.
[40] R. Stallman, D. Weinreb, y D. Luna. Manual Mquina Lisp. Laboratorio de
Inteligencia Artificial del MIT, 1983.
[41] J. Stein, editor. Random House Diccionario del Idioma Ingls. Random House,
1967.
[42] M. Vara. inferencia de tipo completo para objetos simples. En Proc. IEEE
Simposio sobre Lgica en
Ciencias de la Computacin, pginas 37-44, 1987.
[43] M. Vara. La inferencia de tipo para la concatenacin de registro y la herencia
mltiple. En Proc. IEEE Simposio
de Lgica en informtica, pginas 92-97, 1989.
[44] N. Wirth. La programacin en Modula-2. Springer-Verlag, 1983.
[45] S. N. Zilles. encapsulacin de procedimiento: Un mecanismo de proteccin
lingstica. SIGPLAN avisos
8 (9) :142-146, 1973.
21

You might also like