Quais são as diferenças entre programação orientada a aspectos, orientada a assuntos e orientada a funções?

14

Eu sei que existem muitos trabalhos descrevendo esses três paradigmas, mas estou procurando uma explicação esquemática.

Existem algumas descrições muito boas da programação orientada a aspectos aqui, então estou fazendo esta pergunta na esperança de obter o tipo de resposta de alta qualidade que as pessoas no Stack Overflow estão acostumadas a fornecer.

Adam Lear
fonte
Provavelmente essa é mais uma questão de programmers.se, mas também é realmente aberta. Consulte stackoverflow.com/faq#dontask - "Suas perguntas devem ter um escopo razoável. Se você pode imaginar um livro inteiro que responda à sua pergunta, está pedindo demais".
precisa
Eu começaria com a leitura do original Thomas Kuhn: amazon.com/Structure-Scientific-Revolutions-Thomas-Kuhn/dp/...
Também posso imaginar uma resposta curta para minha pergunta. Por exemplo, aqui está como eu descreveria a programação orientada a aspectos: é uma maneira de adicionar "unidades de processamento" chamadas aspectos de maneira modular antes e depois de outras unidades de processamento por meio de pointcuts. Para mim, parece muito com programação baseada em regras, por exemplo, a linguagem de programação Inform7. inform7.com/learn/man/doc188.html

Respostas:

9

Pode-se responder a isso escrevendo um livro sobre isso. No entanto, aqui está uma comparação básica

1. Programação Orientada ao Assunto

A Programação Orientada ao Assunto é um afastamento radical do Orientado a Objeto da seguinte maneira. No OO, os objetos são definidos em termos intrínsecos (isto é, com base em um modelo que o descreve independentemente). e com base nisso, seus atributos (propriedades) e métodos (comportamento) são derivados. O aplicativo faz apenas o usodessas propriedades e comportamento. Ao contrário disso, na programação orientada a assuntos, nenhum objeto existe (e modelado) nesse isolamento. No processo, mas os comportamentos dos objetos são fornecidos pelos vários outros "sujeitos" dos objetos que estão além do escopo e do controle do autor do objeto original. Pense nele como uma maneira de estender vários "comportamentos independentemente definíveis" "no objeto. Acho que isso seria muito além da definição de modelos de herança em comparação com o que está sendo discutido aqui.

A origem indiscutível dos termos (e conceito) vem do artigo " Programação Orientada ao Assunto: Uma Crítica a Objetos Puros , William Harrison e Harold Ossher". Aqui está outro bom artigo . Embora pessoalmente eu acredito que este seja um quadro teórico. Não sei se existem idiomas / implementação

Veja isto , isto e isto para mais informações.

2. Programação Orientada a Aspectos

A programação orientada a aspectos se originou do conceito de " Separação de oncerns ". Basicamente, estende a programação procedural ou orientada a objeto para preocupações que são transversais. Simplificando demais, pode-se dizer que o software tem requisitos funcionais e não funcionais . Esses requisitos transversais incluem exemplos como registro em log, manipulação de exceções, sincronização de threads, gerenciamento de memória, otimização e assim por diante. Esses ASPECTOS transversais devem ser expressos e implementados separadamente e independentemente de quaisquer outras partes funcionais.
Um trabalho abrangente nessa área é da IBM ; basicamente cada uma dessas preocupações ouaspectos podem ser independentes entre si, formando um "espaço de preocupação" multidimensional. , (leia isto ).

Algumas das boas implementações práticas do Aspect Oriented são o AspectJ e o AspectC ++ e muito mais . Veja isso .

3. Programação orientada a funções
À medida que evoluímos em direção aos agentes, muitas vezes é necessário definir "papéis" e objetivos onde as atividades exatas que o agente acaba executando depende do ambiente em que ele se encontra. Isso é análogo ao entendimento conceitual humano.

O objetivo principal é dissociar o objetivo da tarefa de sua capacidade de cooperação, definindo o construto explícito chamado processos de cooperação . Uma função é modelada como um conjunto de recursos e um comportamento esperado. no entanto, essas abordagens também permitem modelar o ambiente de execução e como o agente / objeto também pode perceber o ambiente. Veja isso .

Existem várias estruturas propostas na pesquisa para modelagem e implementações baseadas em funções. Alguns deles são ROPE , BRAIN , ALAADIN e mais .

Dipan Mehta
fonte