Escolar Documentos
Profissional Documentos
Cultura Documentos
Adolfo Neto
Departamento Acadêmico de Informática (DAINF)
Universidade Tecnológica Federal do Paraná (UTFPR)
Versão 1.1
15 de junho de 2010
Sumário
1 Introdução 3
4 Detalhes adicionais 8
4.1 Sı́mbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1
A.2.1 Tipos do sistema . . . . . . . . . . . . . . . . . . . . . 12
A.2.2 Estado do sistema . . . . . . . . . . . . . . . . . . . . 12
A.2.3 Funções e predicados definidos . . . . . . . . . . . . . 12
A.2.4 Especificação formal das operações . . . . . . . . . . . 13
B Histórico de Revisões 13
B.1 Mudanças na versão 1.1 . . . . . . . . . . . . . . . . . . . . . 13
2
1 Introdução
O objetivo deste documento é apresentar uma linguagem de especificação
formal simplificada que é uma extensão da linguagem apresentada em [1] e
usa também parte da notação da linguagem de especificação Z [2]. Esta lin-
guagem é usada por alunos do primeiro perı́odo dos cursos de Engenharia
de Computação e Sistemas de Informação da UTFPR na especificação
formal de partes dos sistemas implementados pelos próprios alunos na dis-
ciplina “Fundamentos de Programação 1”. A especificação formal faz parte
da avaliação da disciplina “Lógica para Computação”.
1. Tipos do sistema
2. Estado do sistema
3
• CARACTER: caracteres
3.1.1 Exemplo
• Tipos básicos utilizados: INTEIRO, REAL, STRING, LÓGICO
• DISCIPLINAS = P STRING
4
3.2 Nome do sistema e descrição dos itens do estado do sis-
tema
Nesta parte primeiramente é definido o nome do sistema. Em seguida são
listadas as variáveis (em geral representando repositórios) que compõem o
estado do sistema. Por último podem ser listados alguns invariantes (Inv)
das variáveis de estado.
3.2.1 Exemplo
SistemaAcadêmico
• alunos: [ALUNO]
• professores: [PROFESSOR]
• turmas: [TURMA]
Inv:
• alunos ∩ professores = ∅
3.3.1 Exemplo
InitSistemaAcadêmico
SistemaAcadêmico
• alunos=∅
• professores=∅
• turmas=∅
3.4.1 Exemplos
• dados(ent,cam): retorna uma lista contendo apenas os valores distintos
do campo cam da entidade ent.
• obter(ent, val, cam): retorna o objeto armazenado na entidade ent
cujo valor para o campo cam é val.
5
3.5 Predicados definidos
Nesta parte podem ser descritos textualmente alguns predicados que, por
motivos de simplicidade, não serão especificadas formalmente.
3.5.1 Exemplos
• string vazia(str: STRING): retorna verdadeiro se a string str for a
string vazia e falso em caso contrário.
3. Pré-condições
4. Pós-condições
5. Invariantes (opcional)
6
3.6.1 Exemplos
2.3.31 MatricularAlunoEmTurma
∆SistemaAcadêmico
códigoAluno?: INTEIRO
códigoTurma?: INTEIRO
resposta!: LÓGICO
Pré-condições:
// O código do aluno é válido
códigoAluno? ∈ dados(alunos, código)
// O código da turma é válido
códigoTurma? ∈ dados(turmas, código)
// a turma ainda tem vagas
obter(turmas, códigoTurma?, código).limite >
#obter(turmas, códigoTurma?, código).códigosAlunos
// o aluno não está matriculado na turma
códigoAluno? 6∈ obter(turmas, códigoTurma?, código).códigosAlunos
Pós-condições:
// a resposta é que o aluno foi matriculado na turma
resposta! = verdadeiro
// o aluno foi matriculado na turma
obter(turmas’, códigoTurma?, códigosAlunos) =
obter(turmas, códigoTurma?, códigosAlunos) ∪ {códigoAluno?}
// a quantidade de alunos na turma foi incrementada em 1
// (tendo em vista a fórmula anterior, esta linha é desnecessária
// apenas foi incluı́da como exemplo)
#obter(turmas’, códigoTurma?, código).códigosAlunos =
#obter(turmas, códigoTurma?, código).códigosAlunos + 1
2.3.92 ListarNomesAlunos
ΞSistemaAcadêmico
resposta!: STRING
Pré-condições:
Pós-condições:
// A resposta contém o nome de todos os alunos
∀x(x ∈ alunos → contém(resposta!, x.nome))
1
Este número é apenas um exemplo.
2
Este número é apenas um exemplo.
7
4 Detalhes adicionais
4.1 Sı́mbolos
• ∆: Indica que a operação pode alterar o estado do sistema. Colocado
antes do nome do sistema no começo da descrição de uma operação,
logo após o nome da operação.
• ∈
6 : representa a não-pertinência de um objeto a uma lista/entidade/repositório.
Notação: “objeto 6∈ lista/entidade”.
8
• “.”: Permite obter o valor do campo de um objeto. Notação: “ob-
jeto.campo”. Obs.: não pode ser aplicada diretamente a repositórios.
9
Referências
[1] Flávio S. C. da Silva, Marcelo Finger, and Ana C. V. de Melo. Lógica
para Computação. Thomson Learning, São Paulo, 2006.
10
A Exemplo Completo: Sistema Acadêmico
A.1 Descrição Textual
Este é o sistema acadêmico de uma universidade fictı́cia. A universidade
tem alunos, professores e turmas. O sistema tem as seguintes operações:
11
A.2 Especificação Formal
A.2.1 Tipos do sistema
• Tipos básicos utilizados: INTEIRO, REAL, STRING, LÓGICO
• ALUNO = hcódigo: INTEIRO, nome: STRING, coeficiente: REALi
• PROFESSOR = hcódigo: INTEIRO, nome: STRING, salário: REALi
• TURMA = hcódigo: INTEIRO, nome: STRING, códigoProfessor: IN-
TEIRO, códigosAlunos: [INTEIRO], limite: INTEIROi
SistemaAcadêmico
• alunos: [ALUNO]
• professores: [PROFESSOR]
• turmas: [TURMA]
A.2.2.2 Inicialização do estado do sistema
InitSistemaAcadêmico
SistemaAcadêmico
• alunos=∅
• professores=∅
• turmas=∅
12
A.2.4 Especificação formal das operações
A.2.4.1 MatricularAlunoEmTurma
∆SistemaAcadêmico
códigoAluno?: INTEIRO
códigoTurma?: INTEIRO
resposta!: LÓGICO
Pré-condições:
// O código do aluno é válido
códigoAluno? ∈ dados(alunos, código)
// O código da turma é válido
códigoTurma? ∈ dados(turmas, código)
// a turma ainda tem vagas
obter(turmas, códigoTurma?, código).limite >
#obter(turmas, códigoTurma?, código).códigosAlunos
// o aluno não está matriculado na turma
códigoAluno? 6∈ obter(turmas, códigoTurma?, código).códigosAlunos
Pós-condições:
// a resposta é que o aluno foi matriculado na turma
resposta! = verdadeiro
// o aluno foi matriculado na turma
obter(turmas’, códigoTurma?, códigosAlunos) =
obter(turmas, códigoTurma?, códigosAlunos) ∪ {códigoAluno?}
A.2.4.2 ListarNomesAlunos
ΞSistemaAcadêmico
resposta!: STRING
Pré-condições:
Pós-condições:
// A resposta contém o nome de todos os alunos
∀x(x ∈ alunos → contém(resposta!, x.nome))
B Histórico de Revisões
B.1 Mudanças na versão 1.1
• Transformação do “resumo” em “Introdução”.
13
• Inclusão do construtor de tipos produto cartesiano.
• Inclusão do sumário.
14