Está en la página 1de 79

Métodos orientados a

modelos: Z
INTEGRANTES:
❖ Guevara valladares Ana
❖ Murga milla Everett
❖ Montañez Julcamoro Marisol
❖ Ocas Saldaña Jhoan
❖ Quispe Ramirez Angy
❖ Suarez Príncipe jose
NOTACION Z
INTRODUCCION
El entorno de
funcionamiento del
sistema bancario
El Estilo Z
Máquinas • Definición del conjunto de estados.
• Definición de las operaciones de estado
de estados
jerárquicas
Definición Lo primero que se hace es
Para ello se escribe un
esquema de estado el
definir el conjunto de

del estados de la máquina


cual contiene las variables
de estado de la máquina

conjunto
Cada estado de la Por lo tanto, si una de las
de máquina queda definido
por una tupla de valores
particulares que se asocia
variables de estado varía
sobre los enteros,
entonces la máquina

estados a cada variable de estado. tiene infinitos estados.


Definición Todas las operaciones de
estado juntas definen la
Existen dos clases de
operaciones de estado:
aquellas que producen una

de las
relación de transición de transición de estado y aquellas
estados de la máquina que sólo consultan el estado
actual de la máquina

operacion
es de
Cada operación de estado que
Las operaciones de estado se
modifica el estado describe
definen dando uno o varios
cómo la máquina transforma
esquemas de operación para
uno de sus estados en otro de
cada una de ellas.

estado
sus estados
El banco más
simple
• Cada cliente se identifica por su
número de documento y puede
tener sólo una caja de ahorro
• No se guardará el historial de
transacciones de las cajas
• Los clientes sólo pueden extraer y
depositar dinero en efectivo, y
solicitar el saldo de su caja
• Un cliente puede solicitar el cierre
de su caja de ahorro sólo si su
saldo es cero
Tipos Elementales

• Tipo Básico : DNI


• En Z el único tipo básico
nativo es Z

• Siempre es conveniente
utilizar nombres significativos
para todos los términos
formales
El estado
del banco
Las operaciones

• Nuevos clientes
• Depositar dinero en una caja de
ahorro
• Extracciones limitadas por el saldo
• Extracciones limitadas por el BCRA
• Solicitar el saldo
• Un cliente se retira del banco
Nuevos Clientes
Depositar dinero en una caja de ahorro
Extracciones limitadas por el saldo
Extracciones limitadas por el BCRA
Simplemente se solicita
la identificación del
cliente y se emite el saldo
de la cuenta asociada,
siempre y cuando el
cliente sea uno válido.

Solicitar el saldo
Un cliente se retira del banco
Cada titular puede tener mas de una
caja y viceversa
• En este banco una caja de ahorro puede
estar asociada a varios titulares (clientes),
y cada titular puede tener varias cajas de
ahorro.
• Cualquier titular puede extraer, depositar
y consultar el saldo de sus cajas.
• Cualquier persona puede hacer un
deposito en cualquier cuenta pero solo los
titulares pueden hacer extracciones de las
suyas.
• el banco desea llevar un registro de los
depósitos y extracciones de cada cuenta
• el banco desea registrar no solo el DNI de
cada cliente sino también su nombre
completo y domicilio.
Tipos elementales y el
estado

• Necesitamos registrar el nombre


completo de cada cliente y su domicilio.
Entonces usamos dos tipos básicos:
[NOMBRE, DOMICILIO]
• Como cada caja de ahorros puede estar
asociada a mas de un cliente, ya no será
posible identificar una caja por el
numero de DNI del cliente. Necesitamos
un identificador para las cajas de
ahorro; en los bancos esto se llama
numero de cuenta.
[NUMCTA]
Una de las decisiones fundamentales, implica
elegir la forma de relacionar entre si:
– Los nombres y domicilios de los clientes
– Los números de DNI de los clientes
– Los números de cuenta
– El saldo de la cuenta
– La historia de la cuenta

Cualquier solución debe tener en cuenta al


menos los siguientes criterios:
• Se debe poder expresar todos los
requerimientos
• La especificación debe ser lo mas simple
posible
• El modelo debe ser suficientemente
abstracto como para no invalidar
tempranamente implementaciones
razonables.
• Un dato importante a tener en
cuenta es que los esquemas
definen tipos. Por ejemplo, el
siguiente esquema:

• define el tipo A por lo cual es


posible escribir cosas como:
• La primera consiste en definir un esquema
que reúna la información propia de una
caja de ahorros, por un lado, y la de un
cliente, por el otro:

• Para registrar la historia de la cuenta


usamos una secuencia (y no una función)
de enteros (y no de DINERO) porque:
a) es necesario preservar el orden en que se
hicieron los depositos y las extracciones
b) los depositos se registraran como numeros
positivos y las extracciones como numeros
negativos
• Entonces, una de las posibilidades de definir
el estado del banco es la siguiente:

Como cada cliente puede ser el


titular de varias cajas de ahorro y
cada caja de ahorro puede tener
varios titulares, entonces no existe
mas la posibilidad de una relación
funcional entre cliente y
cuenta.
Operaciones utilizando promoción de operaciones

• Por un lado tenemos el esquema


CajaAhorros y por el otro este
esquema es parte de Banco2. Cuando
esto ocurre decimos que tenemos un
modelo jerárquico o una especiación
de maquinas de estados jerárquicas.
• El modelo es jerárquico porque un
esquema de estados (CajaAhorros)
forma parte del estado de otro
sistema (Banco2).
• es muy conveniente definir primero
operaciones para la maquina de
estados mas pequeña y luego utilizar
estas para definir las operaciones del
modelo de mayor nivel.
• Definir operaciones para
CajaAhorros:

CADepositar == CADepositarOk _ CADepositarE

a) Notar que no hemos solicitado el numero de caja de


ahorro. No lo hacemos pues CajaAhorros por s representa
todos los estados posibles de una única caja de ahorros.
b) Sin referencia a los titulares de la caja de ahorros. Hasta
este momento trabajamos con una caja de ahorros sin
relación con sus titulares.
c) Nombre del esquema. Precedemos el nombre de los
esquemas con CA para distinguir esta operación de
deposito de la que definiremos para el sistema Banco2.
• Tenemos que usar estas operaciones para definir
operaciones del banco:

Lo primero que queremos


remarcar es que esta operación
se define en términos de la
operación de menor nivel.

• signicado del nuevo operador 𝜃 . Este operador


construye instancias de un tipo 𝜃 : 𝜃 A construye una
instancia del tipo A.Pero, ¿que forma tienen las
instancias del tipo A? Son tuplas o registros. Si A es:
entonces las instancias de A son
registros de la forma:
(x : cte tipo X; y : cte tipo Y )
• una expresión no dice que
instancia en particular se
crea, sino que da las reglas
para crearla.
• esas condiciones son:
a) Todos los predicados del esquema
en los cuales aparecen las
expresiones .
b) Para las expresiones de la forma A,
todos los predicados donde
aparecen libres las variables que se
declaran en A.
c) Para las expresiones de la forma A0,
todos los predicados donde
aparecen libres y primadas las
variables que se declaran en A.
d) Para encontrar esos predicados
muchas veces es necesario expandir
esquemas.
• la expresión CajaAhorros; esta expresión aparece en
la proposición:

• Por lo tanto, la operación DepositarOk representa un


cambio de estado únicamente cuando la instancia
generada por CajaAhorros es idéntica a ca n?; es
decir, cuando se dan estas condiciones:

• En otras palabras, la operación tiene sentido o tiene


sentido analizar la operación únicamente en ese
caso. Puede decirse que el operador generara s o s
una instancia que cumpla esa condición.
• hay predicados en los cuales las variables
de CajaAhorros aparecen libres.

• Entonces, la expresion 𝜃CajaAhorros


genera una instancia de tipo CajaAhorros
tal que:
• Es identica a ca n? y
• Su saldo mas m? coincide con el saldo de
la instancia generada por 𝜃 CajaAhorros’.
• Su historia concatenada con (m?)
coincide con la historia de la instancia
generada por 𝜃 CajaAhorros’.
• Notar como se relacionan las
instancias generadas por
𝜃 CajaAhorros y
𝜃 CajaAhorros’.. Ademas notar
que el predicado:

• no alcanza para determinar el


valor que tomara cada una de
las variables de CajaAhorros’
razon por la cual es necesario el
predicado ca n? =
𝜃 CajaAhorros .
Notas sobre la
implementación de la
promoción de
operaciones
Notas sobre la implementación de la promoción
de operaciones
• Si a un programador se le entrega
una especificación Z que utiliza
promoción de operaciones cabe
preguntarse si existe alguna forma
mas o menos directa de
implementar tal especificación o si
el programador debe entender
profundamente la semántica de la
promoción para luego
implementarla.

• Supongamos que un programador


recibe la especificación del banco
desarrollada hasta el momento y
que se le ha indicado implementarla
siguiendo las ideas del diseño
orientado a objetos.
• En ese caso el programador define la
clase CajaAhorros con variables
miembro his y saldo, y métodos
CADepositar, CAExtraccion, etc.
• Luego define la clase Cliente de forma
semejante. Mas tarde dene la clase
Banco2 dentro de la cual se declara,
entre otros, el arreglo ca de tipo
CajaAhorros e indexado por los numeros
de cuenta. Esta clase tendrá métodos
Depositar, Extraer, etc.
• En primer lugar el esquema marco de
promoción CajaAhorrosABanco se
traduce en una función privada, que
podríamos llamar marco, de la clase
Banco2 con la siguiente signatura:
• Entonces la implementación de, por ejemplo, Extraer se reduce a:
Operaciones
utilizando
composición de
operaciones
Operaciones utilizando composición
de operaciones
• Uno de los nuevos requerimientos
sobre Banco2 es modelar la operación
de transferencia de dinero entre dos
cajas de ahorro del banco.
• La transferencia la inicia uno de los
titulares de una caja de ahorro, se
debita la suma de esa caja y luego se
acredita en la caja de destino (que
puede pertenecer al mismo cliente o
no).
• Donde previamente deberíamos definir

• Antes de explicar la semántica del operador de


composición diremos que la forma mas directa
de usarlo será:
El renombramiento sobre el termino
DepositarOk es semejante al caso anterior as
que no lo detallaremos. Conceptualmente lo
que hemos hecho hasta el momento con el
renombramiento:

• Distinguir entre el numero de caja de


ahorros sobre el que actua ExtraerOk y
aquel sobre el que actúa DepositarOk
pues, precisamente, una transferencia
implica debitar dinero de una cuenta y
depositarlo en otra (renombramiento de
n? sobre EstraerOk y DepositarOk)
• Distinguir entre la caja de ahorros sobre
la cual se aplica CAExtraerOk de aquella
sobre la que se aplica CADepositarOk,
pues claramente no es la misma y de
haber mantenido los mismos nombres
para las variables hubiera sido un error
(renombramiento de his y saldo sobre
DepositarOk)
Comentarios sobre
la implementación
de la composición
Comentarios sobre la implementación
de la composición
• Si al programador se le
entrega, como especificación
de la operación de
transferencia, la expresión:
❖ Supongamos que se esta
programando en C++ y que
CajaAhorros se ha definido como una
clase con métodos CADepositar ,
CAExtraer, etc.

❖ Mas aun, digamos que Banco2


también es una clase con métodos
Depositar , Extraer, etc.

❖ Si b es de tipo Banco2, entonces una


de las posibles implementaciones de
Transferir es:
Propiedades del
modelo e
invariantes de
estado
Propiedades del
modelo e invariantes
de estado
• Una propiedad de un modelo es un
predicado lógico que es verdadero según la
definición del modelo.
• Por ejemplo, en el modelo del banco es
verdad que cada vez que un titular deposita
2*m pesos en una de sus cajas de ahorros,
es lo mismo que hacer dos depósitos de m
pesos. En términos mas precisos una
propiedad es un teorema del modelo.
• En efecto, todo modelo Z define una teoría
axiomática de la cual es posible obtener
teoremas, es decir, verdades sobre el
modelo.
• Todo modelo inconsistente tiene
la propiedad de que true = false,
lo que implica cualquier
predicado P.
• Existen al menos dos formas de
expresar invariantes en un
modelo Z.
• La primera que veremos es la
que se muestra en la mayora
de los libros de Z^7.
• la segunda es la que
utilizaremos en el curso
porque pensamos que tiene
ciertas ventajas sobre la
primera.
Invariantes por
definición
• Antes de analizar el significado
informal del predicado veamos cual
es su significado Z.
• Banco2 representa la totalidad de
estados posibles en los que se puede
encontrar el banco.
• Por este motivo es que llamamos a
esta forma invariante por definición.
• Los dos primeros predicados
atómicos establecen a relación
básica entre los dominios de las
variables de estado.
• El tercer predicado atómico indica
que la suma algebraica de todos los
movimientos registrados en la
historia de cualquier caja de ahorro
debe ser igual al saldo en ese
momento.
Estilo TLA para expresar invariantes

• TLA es un lenguaje de
especificación que
veremos un poco mas
adelante.
• En este lenguaje los
invariantes se
expresan de una
forma que nos parece
mas adecuada. El caso
simétrico al mostrado
en la sección anterior
es:
Teorema 1 (DepositarPI)

• Notar que el predicado del invariante es el


mismo en cualquiera de los dos estilos.
Por que elegimos el estilo TLA?
• Donde claramente se ve que la
precondición queda implícita.
Entonces, el programador, leyendo
únicamente H y Decr pues InvH es
irrelevante para el, se ve obligado a
escribir el siguiente programa.

• Sin embargo, persiste aun el


problema de si Decr verifica o no el
invariante.

• Esto se soluciona de manera


sencilla introduciendo una
obligación de prueba, es decir un
teorema que debe ser probado
para asegurar que Decr verifica el
invariante
Teorema 2 (DecrPI)

Después de todo los invariantes de


estado son entidades que
El ejemplo desarrollado en esta
pertenecen al mundo del modelo
sección ilustra la razón fundamental
formal: la implementación debe
por la cual preferimos el estilo TLA
verificar el modelo y el modelo
para codificar invariantes en un
debe verificar los invariantes: de
modelo Z.
esta forma la implementación
verificara, también, los invariantes.
Lógica, realidad y nombres
• La especificación corresponde a la
operación CAExtraer. Es el resultado de
sustituir las variables y cambiar el
nombre del esquema original. La lógica
no esta mal, solo es difícil leerla y
asociarla con el requerimiento del
usuario.
• Los nombres de variables y de esquemas
viven en el mundo de la lógica, por eso
forman un modelo (que es una
abstracción de la realidad).
• En consecuencia hay una relación entre
el modelo y la realidad.
• Si esa relación se pierde, como
ocurrió con la operación MQ1xbOk,
se podrá escribir un programa que
cumpla con lo estipulado en ese
esquema pero este programa
nunca podrá ser usado
correctamente en la realidad:
• será una casualidad que el
programa correspondiente a
MQ1xbOk se asocie con la
opción de menú correcta pues
no hay en el esquema ninguna
señal que indique el
requerimiento que esta
modelando.
• Por lo tanto, resulta esencial
preservar la relación entre el
modelo y la realidad. Supongamos
que antecedemos la definición de la
operación total MQ1xb con lo
siguiente:
Por lo tanto, toda especificación debe estar
precedida por la designación de todos los
términos formales. En Z estos comprenden
únicamente:
• Los tipos básicos (DINERO). En este
caso las designaciones son de la
forma:
• a es un auto ≅ AUTO(a)
• b es un bulto ≅ BULTO(b)
• Etc.
• Los nombres de esquemas de
operaciones totales (Extraer)
• Los nombres de esquemas de estado
(CajaAhorros)
• Los nombres de constantes usadas en
las definiciones axiomáticas que no
correspondan a operadores de alguna
teoria matemática o logica
(limiteExtrCA)
• La existencia de las
designaciones no prohíbe ni
desalienta el uso de nombres
sugerentes para los términos
designados.
• Una de las grandes ventajas de
contar con un modelo formal de
los requerimientos es que se
posee un documento claro, si
ambigüedades, legible, etc.
• Notar que la designación no
hace ninguna referencia a los
requerimientos.
• Sino que tal definición se
documenta únicamente con el
esquema de estado inicial
tradicional en Z.
• Tener presente que las
designaciones se deben
documentar antes de modelar y
no luego.
OBJECT- Z

❖ Object-Z es una extensión del ❖ Junto con el desarrollo de


lenguaje formal de Object-Z como lenguaje, se ha
especificación Z venido trabajando en el
❖ Object-Z es un lenguaje que sistema deductivo que
todavía está en desarrollo. permita razonar sobre sus
especificaciones.
Lenguaje Z
• Z es un lenguaje de especificación de
sistemas de software y no un
lenguaje de programación.
• Z es un lenguaje cuya gramática y
semántica están basadas en la
matemática.
• El componente principal de Z es el
esquema. Éste se denota usualmente
como una especie de caja dividida en
dos secciones. La primera contiene
las declaraciones y la segunda el
predicado expresado en lógica de
primer orden.
Estructura de una especificación Z

• Las especificaciones Z implican texto matemático


preciso (formal) con texto explicativo informal y
diagramas.
• El material informal facilita la interpretación del
texto formal y lo relaciona con el mundo real.
• Las ventajas de la formalidad son que eliminan
ambigüedades inherentes en descripciones
informales y proveen una rigurosa base para el
razonamiento.
Tipos de Datos

Z también tiene un rango de


símbolos para denotar tipos
Z permite la introducción de usados frecuentemente, por
tipos arbitrarios mediante la ejemplo, el símbolo de
Los tipos de datos en Z están
definición básica de tipos, relación ‘¨’ aplicado como en
basados en conjuntos.
usando una notación como: r: A ¨ B, donde A y b son
[Persona, Clave, Cuenta] tipos arbitrarios, abrevia la
declaración de conjunto de
pares r: ¡(AxB).
Esquemas de Estado

consiste en declaraciones de
variables junto con un
predicado que impone
restricciones sobre estas Están disponibles lo símbolos
variables lógicos tradicionales

Los esquemas usualmente se


escriben en un formato de
caja seccionada: la parte de
arriba contiene las
declaraciones y la de abajo
contiene el predicado
expresado en lógica de primer
orden
Por ejemplo, el siguiente esquema caracteriza pares de coordenadas de enteros del
primer cuadrante. El predicado especifica que las variables de Coord nunca son
negativas.

Los esquemas pueden ser usado como tipos y las variables que lo componen
pueden ser accedidos mediante notación de punto, es decir, dado c: Coord, c.x
denota el componente x de c.

El esquema Origin, mostrado abajo, es una restricción a Coord: éste


incluye a Coord y posee un predicado adicional forzando que x e y sean
cero
El significado de esta inclusión de esquema es ilustrado en la
siguiente versión expandida de Origin .

• Se pueden escribir esquemas compactos horizontalmente


como en:
Diferencias entre Z y Object-Z
• Soluciona este problema introduciendo una
• Inferir los esquemas de operación estructura de clase que encapsula un único
que pueden afectar a un esquema esquema de estado con las operaciones que
pueden afectar a ese estado.
de estado particular, requiere • Cada clase puede ser examinada y entendida
examinar todos los esquemas de en forma separada.
operación, lo cual es impracticable • Las clases complejas pueden ser
en especificaciones grandes. especificadas en términos de clases más
simples estructurándolas por medio de
herencia e instanciación.

Z Object-Z
• Sintácticamente, una
clase de Object-Z es una
caja que lleva un nombre
con cero o más
parámetros genéricos.
En esta caja los constituyentes de la clase son
descriptos y relacionados.

Las clases heredadas
Las definiciones de constantes
son los nombres de las clases
padres que van a ser heredadas Son asociadas con valores fijos que no
por esta clase hija. pueden ser cambiadas por ninguna de
Esto es, una clase hija incorpora
las operaciones de la clase.
todas las características de sus Los valores de tales constantes, sin
padres (incluyendo sus embargo, pueden diferir en diferentes
invariantes). instanciaciones de la clase.

Las definiciones de
tipo
Definen tipos
locales a la clase.
• son típicamente una • Describe las
fórmula temporal
restringiendo aún variables y
más el un estado
comportamiento de
los objetos de la invariante.
clase.

un opcional
El esquema
invariante
de estado
de historia

cero o más
esquema de
esquemas de
estado inicial
operación
• involucran a los
atributos de la clase
con, posiblemente, • Definen tipos
variables de input y locales a la
output permitiendo clase
la comunicación con
el ambiente (con
otros objetos).
Operadores de Clase
Adicionales

• Sea A una clase, a,b: A objetos


de tipo A, x una variable definida
en A y Op1 y Op2 operaciones de
clase de A.
𝞓(x) A :: Op1
Usado dentro de la Denota la relación
parte de declaración
de una operación para
correspondiente de
indicar que la variable Op1 desde dentro
x puede cambiar. de la clase A.

a.Op1
Abreviación para:
Op1 . Op2
a.Op1 || b.Op2
Los objetos a y b cambian de Op2 es una expresión que
acuerdo a las operaciones Op1 y evalúa a una operación en el
Op2 respectivamente. Los contexto de la operación Op1.
parámetros de input y output de La operación resultante es la
las dos operaciones que tienen el conjunción de la operación
mismo nombre son identificados Op1 con la operación
(igualados) y después escondidos. correspondiente a Op2.

Ì
↾A
Denota el conjunto de
todos los posibles
objetos de A y cualquier
clase derivada (es decir,
subclase) de A.
“Eventualmente
se cumple P”.

“En el siguiente estado,


se cumple P”.

“Siempre se
cumple P”.
Un identificador usado
para acceder a la última
operación que ha
ocurrido.

También podría gustarte