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 .