Pergunta

Existem muitos métodos para representar estrutura de um programa (como classe UML diagramas etc.). Estou interessado se existe uma convenção que descreve os programas de uma forma rigorosa, matemática. Estou especialmente interessado no uso de notação matemática para esta finalidade.

Um exemplo : Classes são representadas como conjuntos (campos, propriedades) e funções (que operam sobre os elementos de conjuntos). Uma classe pai campos são um subconjunto de classe criança. Funções são descritas no pseudocódigo que tem para se parecer com isto e aquilo ...

Foi útil?

Solução

Eu sei que Z Notação tem sido usado em certa medida, a verificação formal de software, tais como o projeto Tokeneer .

Z Notation

Z Manual de Referência

Outras dicas

Sim, existe, Floyd -Hoare Logic .

Há um monte de forma, mas eu acho que a maioria deles são inconvenientes para expressar a estrutura já que a estrutura muitas vezes não é expressável em conceitos matemáticos padrão. A principal exceção é de linguagens de programação curso funcionais. Pense em dobras (catamorphisme), grupos de álgebra etc.

Para programação imperativa Eu sei da existência de Z, que usa (puros e estendida) a teoria dos conjuntos lambda cálculo e (primeira ordem) lógica de predicados. No entanto, eu não acho que é muito conveniente. A única vantagem de usar a matemática para expressar estrutura é o fato de que você pode provar coisas sobre ele. Mas se você quiser fazer isso, dê uma olhada JML, Spec # ou Eiffel.

depende do que você está tentando realizar, mas indo por este caminho com linguagens específicas pode trazer-lhe problemas.

Por exemplo, veja o círculo-elipse discussão em C ++ FAQ Lite.

Este livro aplica-se o método dedutivo a programação por programas de afiliação com o matemático abstrato teorias que lhes permitam trabalhar. [...]

Eu acredito que Elementos de Programação por Alexander Stepanov e Paul McJones, é muito parecido com o que você é procurando.

Conceitos

Um conceito é uma descrição requisitos de um ou mais tipos declarou em termos da existência e Propriedades de procedimentos, tipo atributos, e as funções do tipo definido sobre os tipos.

Z, que já foi mencionado, é muito bonito o que você descreve. Existem algumas variantes do mesmo para a modelagem orientada a objetos, mas acho que você pode ficar muito longe com "padrão Z de" esquemas se você deseja classes de modelo.

Há também Alloy , que é mais recente e inspirado por Z. Sua notação é talvez um pouco mais perto do objeto -orientação. Também é analisável, ou seja, você pode conferir os modelos criados se cumprem certas condições, mas não pode provar que as propriedades segurar, apenas tentar refutar dentro de um escopo finito.

O artigo confiável Software by Design é uma boa introdução para Alloy e sua laia, juntamente com uma mesa de ferramentas similares disponíveis.

Você está procurando programação funcional. Existem várias linguagens de programação funcional, e eles são tudo baseado em uma teoria matemática fundamentais chamado Lambda calculus . Programas escritos em uma linguagem de programação funcional, como LISP são uma representação matemática de si mesmos. ; -)

Eu gostaria de sugerir Álgebra de programação . É uma abordagem calculacional de programas, usando Álgebra Relacional , e Conexões de Galois .

Se você tem mais interesse sobre este tema, você pode encontrar um trabalho incrível, aqui , por Shin-Cheng Mu, e José Nuno Oliveira ( lâminas ).

Usando relacional Álgebra e Lógica de Primeira Ordem, também tem uma sinergia agradável com Alloy , programação funcional e programação por contrato (facilmente aplicada a Programação Orientada a objetos).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top