150 likes | 261 Views
OO-SC (MEYER) Desenho por Contrato Construindo software confiável. Componentes da Confiabilidade:. Correção : “habilidade de se comportar de acordo com as especificações” Robustez : “habilidade de reagir a situações não previstas nas especificações”. Mecanismos de Confiabilidade. Estrutura:
E N D
OO-SC (MEYER)Desenho por ContratoConstruindo software confiável OO-SC (Meyer) - Cap 11
Componentes da Confiabilidade: • Correção:“habilidade de se comportar de acordo com as especificações” • Robustez:“habilidade de reagir a situações não previstas nas especificações” OO-SC (Meyer) - Cap 11
Mecanismos de Confiabilidade • Estrutura: • Manter o mais simples possível • Limitar comunicação entre módulos • Elegância e legibilidade • Software não é apenas escrito; é lido e reescrito muitas vezes • Gerência de memória (coleta do lixo) • Tipagem forte e estática OO-SC (Meyer) - Cap 11
Sobre “correção de software” Correção é uma noção relativa! X := Y + 1 A: X e Y possuem valores diferentes! B: X tem valor negativo! Depende da ESPECIFICAÇÃO! OO-SC (Meyer) - Cap 11
Como expressar uma especificação • Fórmula de Correção: {P} A {Q} Leia-se: “Em qualquer execução de A, iniciando em um estado onde P é válido, terminará em um estado em que Q será válido” OO-SC (Meyer) - Cap 11
Por exemplo: {x >= 9} x := x + 5 {x >= 13} ___________________________________ P >> Pré-condição Q >> Pós-condição OO-SC (Meyer) - Cap 11
Condições fortes e fracas: Sinecura 1: {False} A {…} Sinecura 2: {…} A {True} OO-SC (Meyer) - Cap 11
Asserções: N > 0; X /= Void “;” >> significa and Positive: n>0 Not_void: x /= Void OO-SC (Meyer) - Cap 11
Pré-condições e pós-condições • Require • Ensure OO-SC (Meyer) - Cap 11
Indexing description: “Stacks: estruturas de fornecidas numa disciplina de First IN First OUT” Class STACK [G] feature -- Access count: INTEGER -- Número de elementos do Stack item: G is -- Elemento Topo require not empty do … end OO-SC (Meyer) - Cap 11
Feature -- Relatório de status empty: BOOLEAN is -- O stack está vazio? do … end full: BOOLEAN is -- O stack está cheio? do … end OO-SC (Meyer) - Cap 11
Feature – Alterar elemento put (x: G) is -- Adicionar x no Topo require not full do …. ensure not empty item = x count = old count + 1 end OO-SC (Meyer) - Cap 11
remove is -- Remover elemento do Topo require not empty do …. ensure not full count = old count - 1 end end OO-SC (Meyer) - Cap 11
Desenho por Contrato Obrigações Benefícios Cliente (satisfazer pré-condições) Apenas chama PUT (x) em um Stack não cheio (Das pós- condições) Obtem o Stack Atualizado; não Vazio; X no topo; Contador + 1 Servidor (Satisfaz pós- condições) Atualiza o stack; não Vazio; Contador - 1 (Das pré-condições) Processamento Simples devido Stack não cheio OO-SC (Meyer) - Cap 11
Invariantes: Indexing description: “Stacks: estruturas de fornecidas numa …” Class STACK [G] feature -- Access count: INTEGER -- Número de elementos do Stack item: G is require …. invariant count_non_negative: 0 <= count count_bounded: count <= capacity empty_if_no_elements: empty = (count=0) end -- class STACK OO-SC (Meyer) - Cap 11