Programação orientada para o assunto - Subject-oriented programming

Na computação , a programação orientada a objetos é um paradigma de software orientado a objetos em que o estado (campos) e o comportamento (métodos) dos objetos não são vistos como intrínsecos aos próprios objetos, mas são fornecidos por várias percepções subjetivas ("sujeitos") dos objetos. O termo e os conceitos foram publicados pela primeira vez em setembro de 1993 em um artigo de conferência que mais tarde foi reconhecido como um dos três artigos mais influentes a serem apresentados na conferência entre 1986 e 1996. Conforme ilustrado nesse artigo, uma analogia é feita com o contraste entre as visões filosóficas de Platão e Kant no que diz respeito às características dos objetos "reais", mas aplicadas aos de software. Por exemplo, embora possamos todos perceber uma árvore como tendo uma altura mensurável, peso, massa de folhas, etc., do ponto de vista de um pássaro, uma árvore também pode ter medidas de valor relativo para fins de alimentação ou nidificação, ou do ponto de vista do assessor fiscal, pode ter um determinado valor tributável em um determinado ano. Nem as informações de estado adicionais da ave nem do avaliador de impostos precisam ser vistas como intrínsecas à árvore, mas são adicionadas pelas percepções da ave e do avaliador de impostos, e a partir da análise de Kant, o mesmo pode ser verdadeiro mesmo para as características que pensamos como intrínseco.

A programação orientada a assuntos defende a organização das classes que descrevem objetos em "assuntos", que podem ser compostos para formar assuntos maiores. Em pontos de acesso a campos ou métodos , podem ser compostas contribuições de diversos sujeitos. Esses pontos foram caracterizados como pontos de junção dos sujeitos. Por exemplo, se uma árvore for cortada, os métodos envolvidos podem precisar associar o comportamento da ave e do avaliador fiscal ao da própria árvore. É, portanto, fundamentalmente uma visão da natureza composicional do desenvolvimento de software, em oposição à natureza algorítmica (procedimental) ou ocultação da representação (objeto).

Relacionamentos

Relação com a programação orientada a aspectos

A introdução da programação orientada a aspectos em 1997 levantou questões sobre sua relação com a programação orientada a assuntos e sobre a diferença entre assuntos e aspectos. Essas questões ficaram sem resposta por algum tempo, mas foram abordadas na patente sobre a programação orientada a aspectos registrada em 1999, na qual dois pontos emergem como diferenças características da arte anterior:

  • o programa de aspectos compreende a) um corte transversal que compreende um ponto na execução onde o comportamento de corte transversal deve ser incluído; eb) uma ação de corte transversal que compreende uma parte de implementação associada ao corte transversal, a parte de implementação compreendendo um código de programa legível por computador que implementa o comportamento de corte transversal.
  • o aspecto força de forma transparente o comportamento de corte cruzado em classes de objetos e outras entidades de software

Na visão orientada para o sujeito, o corte transversal pode ser colocado separadamente do aspecto (sujeito) e o comportamento não é forçado pelo aspecto, mas regido por regras de composição. A retrospectiva também torna possível distinguir a programação orientada a aspectos por sua introdução e exploração do conceito de um ponto de corte semelhante a uma consulta para impor externamente os pontos de junção usados ​​por aspectos de maneiras gerais.

Na apresentação da programação orientada ao assunto, os pontos de junção foram deliberadamente restritos ao acesso de campo e chamada de método, com base no fato de que esses eram os pontos nos quais frameworks bem projetados foram projetados para admitir extensão funcional. O uso de pontos de corte impostos externamente é uma capacidade linguística importante, mas continua sendo um dos recursos mais controversos da programação orientada a aspectos.

Relação com o desenvolvimento de software orientado a aspectos

Na virada do milênio, ficou claro que vários grupos de pesquisa estavam buscando diferentes tecnologias que empregavam a composição ou vinculação de estados e funções embalados separadamente para formar objetos. Para distinguir o campo de interesse comum da Programação Orientada a Aspectos com suas definições de patentes particulares e enfatizar que a tecnologia de composição lida com mais do que apenas a fase de codificação do desenvolvimento de software, essas tecnologias foram organizadas sob o termo Desenvolvimento de Software Orientado a Aspectos , e uma organização e série de conferências internacionais iniciadas sobre o assunto. Como a programação orientada a aspectos, a programação orientada a aspectos, filtros de composição, programação orientada a recursos e métodos adaptativos são considerados abordagens de desenvolvimento de software orientadas a aspectos.

Dimensões

Separação multidimensional de interesses, Hyper / J e o ambiente de manipulação de preocupações

A formulação original da programação orientada ao assunto deliberadamente a concebeu como uma tecnologia de empacotamento - permitindo que o espaço de funções e tipos de dados fossem estendidos em qualquer dimensão. As primeiras implementações foram para C ++ e Smalltalk. Essas implementações exploraram os conceitos de rótulos de software e regras de composição para descrever a junção de assuntos.

Para abordar a preocupação de que uma base melhor deve ser fornecida para a análise e composição do software, não apenas em termos de sua embalagem, mas em termos das várias questões abordadas por esses pacotes, uma organização explícita do material foi desenvolvida em termos de "matriz" dimensional na qual os interesses estão relacionados às unidades de software que os implementam. Essa organização é chamada de separação multidimensional de interesses , e o artigo que a descreve foi reconhecido como o artigo mais influente da Conferência ICSE 1999.

Este novo conceito foi implementado para compor o software Java , utilizando o nome Hyper / J para a ferramenta.

A composição e o conceito de assunto podem ser aplicados a artefatos de software que não possuem semântica executável, como especificações de requisitos ou documentação. Um veículo de pesquisa para Eclipse , chamado Concern Manipulation Environment (CME), foi descrito em que ferramentas para consulta, análise, modelagem e composição são aplicadas a artefatos em qualquer linguagem ou representação, através do uso de adaptadores de plug-in apropriados para manipular a representação.

Um sucessor do mecanismo de composição Hyper / J foi desenvolvido como parte do CME, que usa uma abordagem geral para os vários elementos de um mecanismo de composição:

  • uma linguagem de consulta com unificação para identificar pontos de junção,
  • um modelo de fixação estrutural flexível,
  • uma especificação de gráfico aninhado para ordenar os elementos identificados,
  • e uma especificação de ordem de prioridade para resolver conflitos entre regras conflitantes.

Ambos Hyper / J e CME estão disponíveis, de alphaWorks ou sourceforge, respectivamente, mas nenhum é ativamente suportado.

A programação orientada para o assunto como uma "terceira dimensão"

O envio de métodos na programação orientada a objetos pode ser considerado "bidimensional" no sentido de que o código executado depende do nome do método e do objeto em questão. Isso pode ser contrastado com a programação procedural, onde um nome de procedimento resolve diretamente, ou unidimensionalmente, em uma sub-rotina, e também com a programação orientada por assunto, onde o remetente ou assunto também é relevante para o despacho, constituindo uma terceira dimensão.

Veja também

Referências

links externos