Universes: Lightweight Ownership for JML Werner Dietl Peter Müller.

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

Curso de java básico (scjp)
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Definición de Clases y Variables de referencia.
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Alexandre D. Salcianu and Martin C. Rinard. Definiciones Un método es puro si no muta ninguna locación existente en el estado correcto anterior a la invocación.
Introducción al lenguaje de especificación JML
Algoritmos y Estructura de Datos
Inner classes CAPITULO 8.
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
Capitulo 4 Excepciones.
Informática II Prof. Dr. Gustavo Patiño MJ
Tratamiento de listas en Java
1.2 Sintaxis del lenguaje Java.
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Objetos y Clases en Java
Programación Orientada a Objetos en Java
Marzo 2007 Lenguajes Visuales Clase III.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Modificadores.
Lic. Rosemary Torrico Bascopé
PROGRAMACIÓN ORIENTADA A OBJETOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
6. Herencia. Clases abstractas. Genericidad
Colecciones.
SCJP Sun Certified Programmer for Java 6
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
Curso Programación en Java
El lenguaje de programación Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Capítulo 1 “Elementos de Programación”
ESTRUCTURA DE DATOS EN JAVA
Clases y objetos. La unidad fundamental del lenguaje Java es la clase, que proporciona la estructura de los objetos y mecanismos para fabricarlos, a partir.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Programanción I Ing. Cristhian Garita Fonseca
Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
ESMERALDA LIMÓN ESCUTIA AURORA MENDOZA PASTRANA RUTH LÓPEZ muñoz I.S.C
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Alexandre D. Salcianu and Martin C. Rinard. Idea  Método para analizar la pureza de programas Java (no anotados).  Construido sobre una mejora de “combined.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Clases “ Es una Abstracción de un elemento del mundo real ”
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Transcripción de la presentación:

Universes: Lightweight Ownership for JML Werner Dietl Peter Müller

Universe Type System  Organiza los objetos en ownership contexts.  El owner de un objeto se determina cuando se hace un new del mismo.  Un ownership context es un conjunto de objetos con el mismo owner.  El root ownership context es el conjunto de todos los objetos que no tienen owner.  Los ownership contexts conforman un árbol

Universe Type System  Propiedad owner-as-modifier: Un objeto X puede ser referenciado por cualquier otro objeto. Todas las referencias que están fuera del ownership context en el que está X, deben ser referencias read only. X puede ser modificado sólo por objetos con el mismo owner o por el owner de X.

Universe Type System  Tipos de referencias: peer : referencias entre objetos con el mismo owner. rep : referencias de un objeto X a otro objeto cuyo owner es X. readonly : referencias entre objetos en cualquier contexto.  Toda expresión que en runtime es una referencia debe tener declarado su respectivo modificador de ownership (por default, es peer ).

Universe Type System  Tipos: Abarcan tipos primitivos de Java, Clases (e Interfaces) y Arrays. Para Clases, son pares (modificador-ownership, nombre de Clase). Para Arrays, dos modificadores: uno para el objeto Array y otro para los elementos del array.  Ejemplos: rep T : tipo referencias a objetos de la clase T cuyo owner es this. rep readonly T[] : tipo de referencias a Arrays cuyo owner es this y sus elementos son instancias de T en contextos arbitrarios.

Universe Type System  Subtipos: Dos tipos peer, rep o readonly son subtipos si sus correspondientes clases en Java son subtipos. También, todo tipo peer o rep es subitpo del tipo readonly de la misma clase Java. Dos tipos de Array con el mismo modificador de ownership son subtipos si los tipos de sus elementos son subtipos.  Ejemplo: rep peer Object[] es subtipo de rep readonly Object[], dado que peer Object es subtipo de readonly Object.

Universe Type System  Reglas de tipos: Asignación:  El tipo de la expresión del lado derecho tiene que ser subtipo del tipo del lado izquierdo. Creación:  Expresión de la forma new peer T(…) o new rep T(…), donde T es el nombre de una clase.  En el caso de Arrays, hay dos modificadores. El primero puede ser peer o rep, mientras que el segundo peer o readonly.  En el caso de Arrays multidimensionales, todas las subdimensiones deben tener el mismo tipo.

Universe Type System  Reglas de tipos: Acceso a campos ( x.f ):  Si x y f son ambos peer, se tiene que: 1. x y this tienen el mismo owner. 2. x.f y x tienen el mismo owner (y que this ). Luego, x.f tambien tiene el modificador peer.  Si f es rep, entonces this.f tiene el modificador rep.

Universe Type System  Reglas de tipos: Acceso a campos ( x.f ):  Si x es rep y f es peer se tiene que: 1. El owner del objeto referenciado por x es this. 2. El objeto referenciado por x.f tiene el mismo owner que x. Luego, el owner del objeto referenciado por x.f es this, y en consecuencia tiene el modificador rep.  En todos los casos restantes, no se puede determinar sintácticamente si el owner de x.f es this o si tiene el mismo owner que this. Por lo tanto x.f tiene el modificador readonly.

Universe Type System  Reglas de tipos: Llamado a métodos:  Análogamente al acceso a campos, los tipos de los parámetros y el resultado del método deben interpretarse respecto de la expresión que recibe la llamada. Ejemplo:  void foo(peer T p), indica que p tiene que tener el mismo owner que el objeto sobre el cuál se ejecuta foo. Si se llama a foo sobre una expresión de tipo rep, entonces también p debe ser de tipo rep.

Universe Type System  Reglas de tipos: Llamado a métodos:  Para x.m(… a i …) : 1. El tipo del parametro a i debe ser un subtipo de la combinación de x y la declaración del parámetro p i en la signatura del método m. 2. El tipo de la expresión de la llamada es la combinación de los tipos de x y el resultado declarado en la signatura de m. 3. Si algún parámetro en la signatura de m es de tipo rep, m sólo puede ser llamado desde this.

Universe Type System  Invariante: El chequeo de tipos se hace línea por línea. Ejemplo:  public class Difference {  Object o;  public void bar() {  o = new Object();  o = new Object();  }

13 JML (Java Modeling Language)  Lenguaje de especificación de comportamientos para Java.  Similar a la idea de contratos en Eiffel o model-based specification.  requires, ensures, invariant, etc.  Combinado con universe permite establecer relaciones de ownership entre distintos objetos. 13

14 JML - Ejemplo public class Producer { rep readonly*/ Product[] buf; int n; peer */ Consumer cons; public Producer() { buf= new rep readonly*/ Product[10]; } public void peer */ Product p) { buf[n]= p; n= (n+1) % buf.length; } public class Consumer {... public peer */ Product consume() { return peer */ Product) buf[n]; }

15 JML - Ejemplo public class Producer { rep readonly */ Product[] buf; int n; peer */ Consumer cons; public Producer() { buf= new rep readonly */ Product[10]; } public void peer */ Product p) { buf[n]= p; n= (n+1) % buf.length; } public class Consumer {... public peer */ Product consume() { return peer */ Product) buf[n]; }

16 JML - Ejemplo public class Producer { rep readonly */ Product[] buf; int n; peer */ Consumer cons; (\forall int i; 0 <= i && i < buf[i] == null || buf[i].owner == public Producer() { buf= new rep readonly */ Product[10]; } public void peer */ Product p) { buf[n]= p; n= (n+1) % buf.length; }

17 JML - Ejemplo public class Consumer { readonly readonly */ Product[] buf; int n; peer */ Producer pro; invariant pro!=null && pro.con==this public peer */ Producer p) { buf= p.buf; pro= p; p.con= this; } public peer */ Product consume() { n= (n+1) % buf.length; return peer */ Product) buf[n]; }

18 JML (ejemplo)  El downcast no arrojará excepciones en runtime: Por el invariant de Producer  pro.buf[n].owner == pro.owner Por el de Consumer  buf == pro.buf entonces dado el tipo de pro en Consumer  pro.owner == this.owner 18

19 Otro ejemplo - Iteradores public class Iter { LinkedList list; Node pos; invariant pos != null && pos.owner == list; public LinkedList l) { list = l; pos = l.first; } public void Object e) { list.set(pos, e); } public void advance() { pos= pos.next; }

20 Otro ejemplo - Iteradores public class LinkedList { Node first; requires np != null && np.owner == this; void Node np, Object e) { Node n = Node) np; n.elem = e; } public boolean Object l) { if (!(l instanceof LinkedList)) return false; Node f1 = first; Node f2 = LinkedList)l).first; while (f1 != null && f2 != null && f1.elem == f2.elem) { f1 = f1.next; f2 = f2.next; } return f1 == null && f2 == null; }... }

21 Otro ejemplo - Iteradores  No puede realizarse sin interacción entre Universe y JML. Claramente, list.set(np,e) requiere que this tenga el ownership de np. Pero no puede declararse rep */ np, porque no sería posible invocar l.set(np,e) (un parámetro rep en una función hace que la función sea invocable sólo sobre ese objeto). 21

22 Otro ejemplo - Iteradores  Solución: establecer el ownership en los requires de JML.  El constructor de Iter mantiene el invariante al hacer pos= l.first. 22

23 En resumen  Universe introduce un método de chequeo de ownership owner-as- modifier en programas Java.  Este paper presenta una extensión del método mediante JML para introducir relaciones de ownership entre objetos que no están directamente relacionados, permitiendo features tales como downcasts y shared-ownership. 23

24 En resumen  La integración con programas Java existentes es trivial (defaulting a peer ). Backward-compatibility se obtiene a través de encapsulación en comentarios.  Todavía no tiene mecanismos de ownership-inference. No es trivial, especialmente por las cuestiones de pasaje de parámetros. 24

Universes: Lightweight Ownership for JML Werner Dietl Peter Müller