Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Ingeniería del Software II Implementación metódica.

Slides:



Advertisements
Presentaciones similares
Lenguaje de programación Java
Advertisements

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.
5. Ingeniería de Pruebas LS4128: Ingeniería del Software II
El proceso de desarrollo de software
El proceso de desarrollo de software
Pruebas de programas Java mediante JUnit
INFORMATICA I Funciones CLASE 13.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
1.2 Sintaxis del lenguaje Java.
Tema 4 Árboles. Árbol sobre matriz.
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
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.
Marzo 2007 Lenguajes Visuales Clase III.
Lenguaje de Programación II Manejo de Paquetes Corporación Universitaria del Caribe CECAR.
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Método en Java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Herencia e Interfaces.
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
Herencia y Polimorfismo en JAVA
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Java Mayra M. Méndez Anota.
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.
Técnicas avanzadas de programación Interfaces
Colecciones.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
El lenguaje de programación Java
Informática II Interfaces zLas interfaces declaran un tipo que se componen sólo de métodos abstractos y constantes. zLa definición de una clase hace pensar.
Algoritmos y programación III (75.07)
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.
Técnicas avanzadas de programación Introspección
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
Interfaces ELO329: Diseño y Programación Orientados a Objetos.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Detalles Generales sobre Java
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
Algoritmos y Programación III
Tratamiento de excepciones
Entrada y Salida ES.leerChar (); ES.leerEntero (); ES.leerEnteroLargo (); ES.leerFloat (); ES.leerDouble (); System.out.print System.out.println.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
Listas. Utilización de un TAD Lista. Interfaz del TAD LISTA public interface Lista { void crearNodo (); /*Crea un nuevo nodo en el TadLista*/ int devolverClave.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
Ing. Esp. Ricardo Cujar. Permite la ejecución de una sentencia, dada una determinada condición. If(condición){ sentencia(s) a ejecutar en caso de que.
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.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Tema 1: Concurrencia con Java
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
Guía general interface Inter {m1, m2,... mn}
Transcripción de la presentación:

Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Ingeniería del Software II Implementación metódica de contratos semánticos

Índice Introducción Ejemplo Queue Interfaz e implementación Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Índice Introducción Ejemplo Queue Interfaz e implementación Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Introducción Implementación metódica Características: Implementación en Java Contrato semántico como una decoración Evaluación de las condiciones con Asserts JUnit para la automatización de pruebas Trabajo en dos etapas Contrato sin modelo (hoy) Contrato con modelo (próxima clase)

Índice Introducción Ejemplo Queue Interfaz e implementación Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Ejemplo Queue

Índice Introducción Ejemplo Queue Interfaz e implementación Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Interfaz

public interface IQueue { Object first(); void append(Object o); void delete(); int size(); } IQueue.java

Posible implementación public class Queue implements IQueue { protected LinkedList q; // Ojo al protected public Queue() { q = new LinkedList(); } public Object first() { return q.getFirst(); } public void append(Object o) { q.addLast(o); }... Queue.java

Posible implementación... public void delete() { q.removeFirst(); } public int size() { return q.size(); } Queue.java

Índice Introducción Ejemplo Queue Interfaz e implementación Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Contrato semántico contract IQueueSem on IQueue first, true // Lo cambiaremos en la siguiente clase result first() size() > true } append(o) == 0 ==> first() == > 0 ==> first() size() == + 1 }...

Contrato semántico... delete() size() > size() == – 1 } result size() result >= 0 } IQueue() { // Ojo, no visto en size() == 0 }

Implementación

Índice Introducción Ejemplo Queue Interfaz e implementación Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Guía general

Llamada al método decorado... public void append(Object o) { if (nestingLevel == 0) pre$append(o); pre$append$size = obj.size(); if (pre$append$size > 0) pre$append$first = obj.first(); nestingLevel++; obj.append(o); nestingLevel--; if (nestingLevel == 0) { post$append(o); queue$inv(); }... QueueSem.java

llamada a la Pre/Post e invariante... public void append(Object o) { if (nestingLevel == 0) pre$append(o); pre$append$size = obj.size(); if (pre$append$size > 0) pre$append$first = obj.first(); nestingLevel++; obj.append(o); nestingLevel--; if (nestingLevel == 0) { post$append(o); queue$inv(); }... QueueSem.java

Semántica transaccional... public void append(Object o) { if (nestingLevel == 0) pre$append(o); pre$append$size = obj.size(); if (pre$append$size > 0) pre$append$first = obj.first(); nestingLevel++; obj.append(o); nestingLevel--; if (nestingLevel == 0) { post$append(o); queue$inv(); }... QueueSem.java

Evaluación del preestado... public void append(Object o) { if (nestingLevel == 0) pre$append(o); pre$append$size = obj.size(); if (pre$append$size > 0) pre$append$first = obj.first(); nestingLevel++; obj.append(o); nestingLevel--; if (nestingLevel == 0) { post$append(o); queue$inv(); }... QueueSem.java

Índice Introducción Ejemplo Queue Interfaz e implementación Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Condiciones Usaremos AssertTrue definido en JUnit ( junit.framework.Assert ) para evaluar condiciones Evalua condition, si es falsa, lanza la excepción AssertionFailedError con el mensaje message Las condiciones se expresan en Java public static void assertTrue(String message, boolean condition)

Precondiciones... private void pre$append(Object o) { true", true); }... QueueSem.java

Postcondiciones... private void post$append(Object o) { Assert.assertTrue( size() == + 1", obj.size() == pre$append$size + 1); Assert.assertTrue( == 0 ==> first() == o”, !(pre$append$size == 0) || obj.first() == o); Assert.assertTrue( > 0 ==> first() == !(pre$append$size > 0) || obj.first() == pre$append$first); }... QueueSem.java

Invariantes... private void queue$inv(Object o) { true", true); }... QueueSem.java

Condiciones iniciales... private void queue$init(Object o) { size()==0", obj.size()==0); }... public QueueSem(IQueueModel obj) { this.obj = obj; nestingLevel = 0; queue$init(); }... QueueSem.java

Índice Introducción Ejemplo Queue Interfaz Modelo Contrato semántico Implementación del contrato Guía general Condiciones Automatización de las pruebas

Automatización de las pruebas Incluir la biblioteca:  eclipse\plugins\org.junit_3.8.1 Definir una clase de prueba que extienda junit.framework.TestCase, donde se defina un posible escenario de uso de la interfaz Ejecutar la prueba: Run/Run As/Junit Test

Pruebas public class TestsQueue extends TestCase { public void testFirst1() { IQueue q = new QueueSem(new Queue()); String e0 = "Cadena 0"; q.append(e0); } public void testFirst2() { IQueue q = new QueueSem(new Queue()); q.first(); }... } TestsQueue.java

!Gracias! ¿Podemos mejorar esta lección? Escríbenos al foro de la asignatura Visita la web de la asignatura