Definição formal / contraparte em matemática para "objetos" de modelos orientados a objetos

9

Esta é uma pergunta que fiz no fórum de matemática SE, e fui encaminhada aqui. Então aqui está a questão-

Eu sou um novato em matemática formal e em ciência da computação teórica, então, por favor, tenha paciência comigo se achar que minha pergunta não está devidamente enquadrada. A Modelagem Orientada a Objetos parece muito útil na definição de interações complexas ao simular o mundo real. Mas é usado principalmente em programação. Eu queria saber se temos um conceito semelhante em matemática. Quando estamos fazendo programação, podemos entender o conceito de "Objetos" e "Programação Orientada a Objetos" e apenas implementá-lo. Mas temos uma definição formal de "Objetos" em termos da Teoria dos Conjuntos? Ou, nesse caso, qualquer outra teoria matemática formal?

Podemos implementar / definir formalmente três conceitos principais de modelagem orientada a objetos: 1. Encapsulamento 2. Herança 3. Polimorfismo

Eu sei que a pergunta é muito ampla, mas realmente apreciaria se você também pudesse fornecer alguns indicadores para que eu possa entender melhor esses conceitos.

user1260776
fonte
2
Na verdade, existem duas perguntas. Um está pedindo um formalismo de conceitos orientados a objetos. O outro está pedindo conceitos orientados a objetos em matemática. Talvez seja melhor fazer duas perguntas separadas. Há muito material respondendo à primeira pergunta, embora provavelmente apenas um pouco para a segunda. (E talvez amanhã eu vou encontrar tempo para responder à pergunta.)
Dave Clarke
Obrigado .. você poderia me sugerir um material para a formalização de conceitos orientados a objetos que é considerado como padrão ou "livro de texto"? Vou esperar pela sua resposta para o segundo .... :)
user1260776
2
O livro padrão (de alguns anos atrás) é uma teoria dos objetos . Um trabalho mais recente é o Featherweight Java . Há também uma série de workshops chamados Fundamentos de Linguagens Orientadas a Objetos que abordam esses problemas.
Dave Clarke
Obrigado! Vai passar por eles ... Além disso, eu tropecei em cima "cálculo lambda", que está intimamente relacionado com a minha pergunta ..
user1260776

Respostas:

9

A resposta é complicada, por duas razões.

  1. Pessoas diferentes na Ciência da Computação interpretam o termo "objeto" de maneira diferente. Uma é que um objeto consiste em alguns dados e operações agrupados. A outra é que um objeto é tudo isso, mas também tem "estado", isto é, é alguma forma de uma entidade mutável .

  2. Existem questões filosóficas profundas relacionadas ao que "mudança" significa (e o que "entidade" significa, pois muda constantemente), e se as descrições matemáticas realmente capturam entidades alteráveis.

Objeto no sentido de dados + operações : isso é bastante padrão em matemática. Tome qualquer livro de texto de teoria de grupos. Terá em algum lugar uma definição como hg(x)=gxg-1 1 . (É um operador de conjugação.) O é um "objeto" nesta terminologia. Possui alguns dados ( g ) e uma operação x g x g - 1 . Ou você pode torná-lo mais objeto-y, tendo o par g , x g x g - 1hggxgxg-1 1 Ou o triplog , x g x g - 1 , x g - 1 x g . Você pode construir esse tipo de "objetos" em qualquer linguagem de programação funcional que possua abstração lambda e alguma forma de formar tuplas. A "Teoria dos Objetos" de Abadi e Cardelli lida extensivamente com objetos desse tipo.g,xgxg-1 1g,xgxg-1 1,xg-1 1xg

Objetos com estado (ou objetos que mudam ): A matemática tem essas coisas? Acho que não. Eu não vi um matemático falar sobre algo que muda, não em sua vida profissional. Newton costumava escrever para a posição de uma partícula, que supostamente está mudando, ex para a sua taxa de mudança. Os matemáticos, eventualmente, descobriu que o que Newton estava falando era uma funçãox(t)de números reais em um espaço vetorial, e ˙ x foi outro tal função que foi a primeira derivada dex(t)em relação àtx˙x(t)x˙x(t)t. A partir disso, muitos matemáticos de pensamento profundo concluíram que a mudança realmente não existe e tudo que você tem são funções do tempo. Mas o que estava mudando na mecânica newtoniana não era a posição, mas a partícula . A posição é seu estado instantâneo. Nenhum matemático ou físico pretenderia que uma partícula é uma idéia matemática. É uma coisa física.

O mesmo acontece com os objetos. São coisas "físicas" e os estados são seus atributos matemáticos. Para uma boa discussão sobre esse aspecto, consulte o Capítulo 3 da Estrutura e interpretação de programas de computador de Abelson e Sussman . Este é um livro-texto do MIT e eles o ensinam a todos os cientistas e engenheiros, que eu acho que entendem perfeitamente as coisas "físicas".

x1 1(t)x2(t)

Da mesma forma, a maneira matemática padrão de modelar programas orientados a objetos é tratar cada objeto como um índice no espaço de estados. A única diferença é que, como os objetos vêm e vão, e a estrutura do sistema é dinâmica, precisamos estendê-lo a um modelo de "mundo possível", em que cada mundo é basicamente uma coleção de índices. A alocação e desalocação de objetos envolveria a mudança de um mundo para outro.

Há um problema, porém. Diferentemente da mecânica, queremos que o estado de nossos objetos seja encapsulado . Mas as descrições matemáticas dos objetos colocam estados em todo o lugar, destruindo completamente o encapsulamento. Existe um truque matemático chamado "parametridade relacional" que pode ser usado para reduzir o tamanho das coisas. Não vou entrar nisso agora, exceto para enfatizar que é um truque matemático, não uma explicação muito conceitual do encapsulamento. Uma segunda maneira de modelar objetos matematicamente, com encapsulamento, é aperfeiçoar os estados e descrever o comportamento do objeto em termos de eventos observáveis. Para uma boa discussão de ambos os modelos, posso encaminhá-lo ao meu artigo intitulado Objetos e classes em linguagens semelhantes a Algol .


[Nota adicionada:]

Uma boa análise dos fundamentos matemáticos dos objetos pode ser encontrada no artigo de William Cook " On Understanding Data Abstraction, Revisited ".

Uday Reddy
fonte
2
Eu sabia que alguém aqui seria capaz de responder ...
Andrej Bauer
Obrigado Uday, pelo seu tempo e resposta detalhada. Quando fiz essa pergunta, estava pensando apenas no sentido de "dados + operações", e nunca me ocorreu que a teoria de grupos possa representar "OBJETO" como "dados + operações". Além disso, também examinarei os links que você indicou.
User1260776
@AndrejBauer. Sim, eu provavelmente fui ao mar. O OP provavelmente estava usando "matemática" apenas como uma palavra para formalização, em oposição a uma disciplina.
Uday Reddy
@ Dia, talvez eu não tenha formulado a pergunta corretamente, mas quando eu quis dizer "matemática", eu claramente quis dizer matemática formal. Meu pensamento era "a teoria dos conjuntos" forma a base da matemática, como "explicar" ou "derivar" objetos da Modelagem OO em termos da teoria dos conjuntos. Como reunimos tudo isso - teoria dos conjuntos, objetos e lógica formal (como lógica de primeira ordem) ... "Embora eu não entenda sua resposta completamente, sou capaz de" entender "o que você disse e garanto que essa é a resposta que eu estava esperando. Obrigado !! (minhas idéias r não completamente organizada, plz me perdoe eu sou ainda novato :))
user1260776
2
@ user1260776. Compreendo. Mas o que quero dizer é que "formal" e "matemática" são idéias diferentes. Você pode formalizar conceitos sem reduzi-los (ou derivá-los da) matemática. Newton formalizou a mecânica, mas não se preocupou em reduzir "partículas" a "conjuntos". Pessoalmente, estou muito feliz em seguir o exemplo de Newton e admitir coisas que não reduzo a sets. Mas acho que precisamos saber quando reduzir e quando não reduzir. Tendo sido treinado como físico, acho isso muito fácil de fazer. Para muitos outros cientistas da computação, pode não ser tão fácil.
Uday Reddy
0

acho que há uma boa descrição teórica dos objetos no livro clássico antigo "estrutura e interpretação de programas de computador" [1] de abelson & sussman, com base no esquema (uma variante lisp). agora grátis online! isso mostra como o conceito de orientação a objetos pode ser incorporado até no cálculo lambda (~ aka Lisp) se você tiver algum mecanismo para armazenar o estado local. pelo que entendi, esse foi um livro-padrão do MIT por muitos anos. não dizendo que este é o melhor árbitro do assunto; Tenho certeza que existem outros melhores neste pt.

Eu não acho que isso tenha sido totalmente formalizado em qualquer lugar que eu tenha ouvido falar, mas objetos frouxos são basicamente compostos de código + dados na forma de

  • métodos (com parâmetros)
  • estado, ou seja, variáveis ​​de instância

de alguma forma encapsulada. indiscutivelmente outros aspectos como herança não são fundamentais. como afirma em abelson & sussman, o que eles chamam de "açúcar sintático".

[1] estrutura e interpretação de programas de computador por abelson & sussman

vzn
fonte
3
Obviamente, objetos no sentido de programação orientada a objetos foram formalizados. Existem livros de Abadi & Cardelli, Castanga e Kim Bruce dedicados ao tópico. Houve 10 anos de workshops na série FOOL dedicados aos fundamentos da programação orientada a objetos. As conferências ECOOP e OOPSLA regularmente tinham documentos sobre as fundações da OO. De fato, o primeiro artigo sobre a semântica da OO tem cerca de 20 anos.
Dave Clarke
@ vzn, obrigado pela resposta. Vou percorrer os livros que você sugeriu ...
user1260776
DC-- Eu disse isso mal. com mais precisão, pense que é seguro dizer que as definições formais do que exatamente constitui um "objeto" ou quais são os componentes chave / fundamentais do POO tendem a variar significativamente na literatura. as definições provavelmente se expandiram significativamente ao longo do tempo. por exemplo, suspeito que a herança foi adicionada mais tarde e a ideia original era principalmente apenas código + dados em um formato encapsulado.
vzn
outro exemplo de um recurso de OOP que não é aceito como fundamental pelo que posso dizer é a herança múltipla, vista em, por exemplo, C ++, mas intencionalmente evitada em java em favor de interfaces. etc
vzn