Engenharia de software baseada em componentes

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar
Um exemplo de dois componentes expressos em UML 2.0. A componente de checkout, responsável por facilitar a encomenda do cliente, exige que a componente de processamento de cartões debite o cartão de crédito/débito do cliente (funcionalidade que este último disponibiliza ).

A engenharia de software baseada em componentes ( CBSE ), também chamada de desenvolvimento baseado em componentes ( CBSE ) , é um ramo da engenharia de software que enfatiza a separação de preocupações com relação à ampla funcionalidade disponível em um determinado sistema de software . É uma abordagem baseada em reutilização para definir, implementar e compor componentes independentes fracamente acoplados em sistemas. Essa prática visa trazer um grau igualmente amplo de benefícios tanto no curto quanto no longo prazo para o próprio software e para as organizações que patrocinam tal software.

Os profissionais de engenharia de software consideram os componentes como parte da plataforma inicial para orientação a serviços . Os componentes desempenham esse papel, por exemplo, em serviços da Web e, mais recentemente, em arquiteturas orientadas a serviços (SOA), em que um componente é convertido pelo serviço da Web em um serviço e, posteriormente, herda outras características além de um componente comum.

Os componentes podem produzir ou consumir eventos e podem ser usados ​​para arquiteturas orientadas a eventos (EDA).

Definição e características dos componentes

Um componente de software individual é um pacote de software , um serviço da Web , um recurso da Web ou um módulo que encapsula um conjunto de funções (ou dados) relacionadas.

Todos os processos do sistema são colocados em componentes separados para que todos os dados e funções dentro de cada componente sejam semanticamente relacionados (assim como com o conteúdo das classes). Por causa desse princípio, costuma-se dizer que os componentes são modulares e coesos .

No que diz respeito à coordenação em todo o sistema, os componentes se comunicam por meio de interfaces . Quando um componente oferece serviços para o resto do sistema, ele adota uma interface fornecida que especifica os serviços que outros componentes podem utilizar e como eles podem fazê-lo. Essa interface pode ser vista como uma assinatura do componente - o cliente não precisa conhecer o funcionamento interno do componente (implementação) para poder utilizá-lo. Este princípio resulta em componentes denominados encapsulados . As ilustrações UML neste artigo representam interfaces fornecidas por um símbolo de pirulito anexado à borda externa do componente.

No entanto, quando um componente precisa usar outro componente para funcionar, ele adota uma interface usada que especifica os serviços de que precisa. Nas ilustrações UML deste artigo, as interfaces usadas são representadas por um símbolo de soquete aberto anexado à borda externa do componente.

Um exemplo simples de vários componentes de software - retratado em um sistema hipotético de reserva de feriados representado na UML 2.0.

Outro atributo importante dos componentes é que eles são substituíveis , de modo que um componente pode substituir outro (em tempo de design ou em tempo de execução), se o componente sucessor atender aos requisitos do componente inicial (expressos por meio das interfaces). Consequentemente, os componentes podem ser substituídos por uma versão atualizada ou alternativa sem quebrar o sistema no qual o componente opera.

Como regra geral para engenheiros substituindo componentes, o componente B pode substituir imediatamente o componente A, se o componente B fornecer pelo menos o componente A fornecido e não usar mais do que o componente A usado.

Os componentes de software geralmente assumem a forma de objetos (não classes ) ou coleções de objetos (da programação orientada a objetos ), em alguma forma binária ou textual, aderindo a alguma linguagem de descrição de interface (IDL) para que o componente possa existir de forma autônoma de outros componentes em um computador . Em outras palavras, um componente age sem alterar seu código-fonte. Embora o comportamento do código-fonte do componente possa mudar com base na extensibilidade do aplicativo, fornecida por seu escritor.

Quando um componente deve ser acessado ou compartilhado em contextos de execução ou links de rede, técnicas como serialização ou empacotamento são frequentemente empregadas para entregar o componente ao seu destino.

A reutilização é uma característica importante de um componente de software de alta qualidade. Os programadores devem projetar e implementar componentes de software de tal forma que muitos programas diferentes possam reutilizá-los. Além disso, testes de usabilidade baseados em componentes devem ser considerados quando os componentes de software interagem diretamente com os usuários.

É preciso esforço e conscientização significativos para escrever um componente de software que seja efetivamente reutilizável. O componente precisa ser:

  • totalmente documentado
  • exaustivamente testado
    • robusto - com verificação abrangente de validade de entrada
    • capaz de devolver mensagens de erro apropriadas ou códigos de retorno
  • projetado com a consciência de que será colocado em usos imprevistos

Na década de 1960, os programadores construíram bibliotecas de sub- rotinas científicas que eram reutilizáveis ​​em uma ampla gama de aplicações científicas e de engenharia. Embora essas bibliotecas de sub-rotinas reutilizassem algoritmos bem definidos de maneira eficaz, elas tinham um domínio de aplicação limitado. Os sites comerciais criavam rotineiramente programas de aplicativos a partir de módulos reutilizáveis ​​escritos em linguagem assembly , COBOL , PL/1 e outras linguagens de segunda e terceira geração usando bibliotecas de aplicativos do sistema e do usuário.

A partir de 2010 , os componentes reutilizáveis ​​modernos encapsulam as estruturas de dados e os algoritmos que são aplicados às estruturas de dados. A engenharia de software baseada em componentes baseia-se em teorias anteriores de objetos de software, arquiteturas de software, estruturas de software e padrões de projeto de software , e a extensa teoria da programação orientada a objetos e o design orientado a objetos de todos eles. Alega que componentes de software, como a ideia de componentes de hardware , usados ​​por exemplo em telecomunicações, [1]pode, em última análise, ser intercambiável e confiável. Por outro lado, argumenta-se que é um erro focar em componentes independentes ao invés do framework (sem o qual eles não existiriam). [2]

História

A idéia de que o software deve ser componentizado - construído a partir de componentes pré-fabricados - tornou-se proeminente com o discurso de Douglas McIlroy na conferência da OTAN sobre engenharia de software em Garmisch , Alemanha , em 1968, intitulado Componentes de software produzidos em massa . [3] A conferência teve como objetivo combater a chamada crise do software . A subsequente inclusão de pipes e filtros de McIlroy no sistema operacional Unix foi a primeira implementação de uma infraestrutura para essa ideia.

Brad Cox da Stepstone definiu amplamente o conceito moderno de um componente de software. [4] Ele os chamou de Software ICs e se propôs a criar uma infraestrutura e um mercado para esses componentes inventando a linguagem de programação Objective-C . (Ele resume essa visão em seu livro Object-Oriented Programming - An Evolutionary Approach 1986.)

Os componentes de software são usados ​​em dois contextos diferentes e de dois tipos: i) usando componentes como partes para construir um único executável, ou ii) cada executável é tratado como um componente em um ambiente distribuído, onde os componentes colaboram entre si usando internet ou intranet protocolos de comunicação para IPC (Inter Process Communications). O acima pertence ao tipo anterior, enquanto o abaixo pertence ao tipo posterior.

A IBM liderou o caminho com seu System Object Model (SOM) no início dos anos 90. Como reação, a Microsoft abriu o caminho para a implantação real de software componente com vinculação e incorporação de objetos (OLE) e modelo de objeto componente (COM). [5] A partir de 2010 existem muitos modelos de componentes de software de sucesso.

Em 2021, a cadeia de ferramentas de código aberto Bit forneceu uma infraestrutura gratuita para o desenvolvimento e composição de componentes em aplicativos de software, produtos, serviços e sistemas.

Arquitetura

Um computador que executa vários componentes de software é geralmente chamado de servidor de aplicativos . Essa combinação de servidores de aplicativos e componentes de software é geralmente chamada de computação distribuída . A aplicação típica do mundo real está em, por exemplo, aplicativos financeiros ou software de negócios.

Modelos de componentes

Um modelo de componente é uma definição de propriedades que os componentes devem satisfazer, métodos e mecanismos para a composição de componentes. [6]

Durante as últimas décadas, pesquisadores e profissionais propuseram vários modelos de componentes com características diferentes. Uma classificação dos modelos de componentes existentes é fornecida. [6] [7] Exemplos de modelos de componentes são: modelo Enterprise JavaBeans (EJB), modelo Component Object Model (COM), modelo .NET , modelo de componente X-MAN, [8 ] e modelo de componente Common Object Request Broker Architecture (CORBA).

Tecnologias

Veja também

Referências

  1. ^ Foukalas et al "Reconfiguração de protocolo usando design baseado em componentes"
  2. ^ Wallace, Bruce (19 de maio de 2010). "Um furo para cada componente e cada componente em seu furo" . Programação Existencial. Não existe Componente
  3. ^ McIlroy, Malcolm Douglas (janeiro de 1969). "Componentes de software produzidos em massa" (PDF) . Engenharia de Software: Relatório de uma conferência patrocinada pelo Comitê Científico da OTAN, Garmisch, Alemanha, 7-11 de outubro de 1968 . Divisão de Assuntos Científicos, OTAN. pág. 79.
  4. ^ Rainer Niekamp. "Arquitetura de componentes de software" (PDF) . Gestión de Congresos - CIMNE/Instituto de Computação Científica, TU Braunschweig. pág. 4 . Recuperado em 29/07/2011 . O conceito moderno de um componente de software amplamente definido por Brad Cox da Stepstone, => linguagem de programação Objective-C
  5. ^ Raphael Gfeller (9 de dezembro de 2008). "Atualização de aplicativo baseado em componente" . HSR - Hochschule für Technik Rapperswill. pág. 4 . Recuperado em 29/07/2011 . 1990, a IBM inventa seu System Object Model. 1990, como reação, a Microsoft lançou controles personalizados OLE 1.0 OLE (OCX)[ link morto permanente ]
  6. ^ a b Crnkovic, I.; Sentilles, S.; Vulgarakis, A.; Chaudron, MRV (2011). "Uma estrutura de classificação para modelos de componentes de software". Transações IEEE em Engenharia de Software . 37 (5): 593-615. doi : 10.1109/TSE.2010.83 . S2CID 15449138 . 
  7. ^ Lau, Kung-Kiu; Wang, Zheng (2007). "Modelos de componentes de software". Transações IEEE em Engenharia de Software . 33 (10): 709-724. doi : 10.1109/TSE.2007.70726 . ISSN 0098-5589 . 
  8. ^ Lau, Kung-Kiu; Velasco Elizondo, Perla; Wang, Zheng (2005). Heineman, George T.; Crnkovic, Ivica; Schmidt, Heinz W.; Stafford, Judith A.; Szyperski, Clemens; Wallnau, Kurt (eds.). "Conectores Exógenos para Componentes de Software". Engenharia de Software Baseada em Componentes . Notas de aula em Ciência da Computação. Springer Berlim Heidelberg. 3489 : 90-106. doi : 10.1007/11424529_7 . ISBN 9783540320494. S2CID  17971442 .
  9. ^ MASH define ativos como pessoas, propriedades e informações e gestão como monitoramento, controle e configuração. Apresentado na conferência IEEE IoT de 2013 em Mountain View, o MASH inclui um IDE completo, cliente Android e tempo de execução. "Canal do YouTube MASH"
  10. ^ Uma abordagem orientada a componentes é uma maneira ideal de lidar com a diversidade de software em eletrônicos de consumo. O modelo Koala, usado para software embutido em aparelhos de TV, permite a vinculação tardia de componentes reutilizáveis ​​sem sobrecarga adicional. [1]
  11. ^ Modelo de componente para dispositivos incorporados como TV desenvolvido pela Philips com base no papel de van Ommering, R.: Koala, um modelo de componente para software de produto de eletrônicos de consumo [2] Arquivado em 2014-08-09 na Wayback Machine
  12. ^ Arad, Cosmin (abril de 2013). Modelo de Programação e Protocolos para Sistemas Distribuídos Reconfiguráveis ​​(PDF) . Dissertação de Doutorado . Estocolmo, Suécia: KTH Royal Institute of Technology. ISBN  978-91-7501-694-8.
  13. ^ Arellanes, Damião; Lau, Kung-Kiu (2017). "Conectores Exógenos para Composição Hierárquica de Serviços" (PDF) . 2017 IEEE 10th Conference on Service-Oriented Computing and Applications (SOCA) . Kanazawa: IEEE: 125–132. doi : 10.1109/SOCA.2017.25 . ISBN  9781538613269. S2CID  31211787 .

Leitura adicional

  • Brad J. Cox, Andrew J. Novobilski (1991). Programação Orientada a Objetos: Uma Abordagem Evolucionária . 2ª edição. Addison-Wesley, lendo ISBN 0-201-54834-8 
  • Bertrand Meyer (1997). Construção de Software Orientada a Objetos . 2ª edição. Prentice Hall.
  • George T. Heineman, William T. Councill (2001). Engenharia de software baseada em componentes: juntando as peças . Addison-Wesley Professional, Leitura 2001 ISBN 0-201-70485-4 
  • Richard Veryard (2001). Negócios baseados em componentes: plug and play . Londres: Springer. ISBN 1-85233-361-8 
  • Clemens Szyperski, Dominik Gruntz, Stephan Murer (2002). Software Componente: Além da Programação Orientada a Objetos . 2ª edição. ACM Press - Pearson Educational, Londres 2002 ISBN 0-201-74572-0 

Links externos