Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porIzabel Padilha Fidalgo Modificado hace 5 años
1
Guía general interface Inter {m1, m2,... mn}
class InterSem extends Inter { //El estado necesario para guardar los valores en el preestado ... Inter obj; //El objeto decorado con contrato semántico int nestingLevel; //Semántica transaccional InterSem(Inter obj) { this.obj = obj; nestingLevel = 0; init(); // Condiciones iniciales }
2
Guía general ... mi (params) { // El método decorador
if (nestingLevel == 0) pre$mi (params) //Evaluar y guardar el preestado del método mi nestingLevel++; obj.mi (params); nestingLevel--; if (nestingLevel == 0) { post$mi (params); inter$inv(params); } Si el método devuelve un valor tendríamos que capturarlo en la llamada al método decorado “obj.mi (params);” y devolverlo al final: mi$output = obj.mi (params);” Si es necesario hacer uso de ese resultado para evaluar la postcondición tendríamos que pasar como parámetro ese valor a la poscondición: post$mi (params, mi$output);
3
Guía general post$mi(params) { ... pre$mi(params) {
//Evaluar la pre del método mi } post$mi(params) { //Evaluar la post del método mi Para cada método de la interfaz
4
Guía general ... inter$inv() {
//el código para implementar la invariante } inter$init() { //el código para implementar las condiciones iniciales
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.