1) A apresentação discute engenharia de software baseada em componentes, incluindo definição, princípios e padrões de componentes.
2) Componentes são entidades independentes que fornecem serviços através de interfaces bem definidas, permitindo reuso.
3) Padrões como EJB, COM e CORBA foram estabelecidos para facilitar a integração de componentes, mas sua diversidade dificultou a aceitação da abordagem.
1) A apresentação discute engenharia de software baseada em componentes, incluindo definição, princípios e padrões de componentes.
2) Componentes são entidades independentes que fornecem serviços através de interfaces bem definidas, permitindo reuso.
3) Padrões como EJB, COM e CORBA foram estabelecidos para facilitar a integração de componentes, mas sua diversidade dificultou a aceitação da abordagem.
Título original
Aula 4 - Engenharia de software baseada em componentes
1) A apresentação discute engenharia de software baseada em componentes, incluindo definição, princípios e padrões de componentes.
2) Componentes são entidades independentes que fornecem serviços através de interfaces bem definidas, permitindo reuso.
3) Padrões como EJB, COM e CORBA foram estabelecidos para facilitar a integração de componentes, mas sua diversidade dificultou a aceitação da abordagem.
1) A apresentação discute engenharia de software baseada em componentes, incluindo definição, princípios e padrões de componentes.
2) Componentes são entidades independentes que fornecem serviços através de interfaces bem definidas, permitindo reuso.
3) Padrões como EJB, COM e CORBA foram estabelecidos para facilitar a integração de componentes, mas sua diversidade dificultou a aceitação da abordagem.
Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
Você está na página 1de 29
Arquitetura de Software
Aula 4: Engenharia de Software Baseada em
Componentes Prof. Dr. Bruna C. Rodrigues da Cunha bruna.rodrigues@ifsp.edu.br Desenvolvimento baseado em componentes ● A engenharia de software baseada em componentes (ESBC) é uma abordagem de desenvolvimento de software que depende do reuso de entidades denominadas "componentes de software". ● A abordagem emergiu do fracasso do desenvolvimento Orientado a Objetos para apoiar o reuso. ● Componentes são mais abstratos que classes de objetos e podem ser considerados como provedores de serviços independentes. Eles podem existir como entidades independentes. ● A ESBC também é uma alternativa a arquitetura em camadas em que os elementos, apesar de independentes, não fornecem uma ampla capacidade de reuso. Essência da ESBC ● Seus Componentes são independentes e especificados por suas interfaces. ● Padrões devem ser utilizados para facilitar a integração de componentes. ● Um Middleware que fornece suporte para interoperabilidade de componentes. ● O processo de desenvolvimento é voltado para reutilização. Princípios de Design da ESBC Além dos benefícios do reuso, a ESBC baseia-se em sólidos princípios de design de engenharia de software: ● Os componentes são independentes, portanto não há interferência entre eles; ● Implementações de componentes são ocultas; ● A comunicação é realizada através de interfaces bem definidas; ● Um componente pode ser substituído por outro se sua interface for mantida. Padrões de ESBC ● Considerando que componentes podem ser desenvolvidos em diferentes linguagens e/ou podem ser distribuídos, é necessário estabelecer padrões para que os componentes possam se comunicar entre si e interoperar. ● Infelizmente, vários padrões de componentes concorrentes foram estabelecidos: ○ Enterprise Java Beans (EJB) ○ Component Object Model (COM) da Microsoft ○ CORBA ● Na prática, esses múltiplos padrões têm dificultado a aceitação da ESBC. É impossível que componentes desenvolvidos usando diferentes padrões trabalhem juntos. Engenharia de Software Orientada a Serviços ● Um serviço é um tipo de componente independente. Ele tem uma interface "fornece", mas não uma interface "requer". ● Desde o início, os serviços foram baseados em padrões, de modo que não há problemas na comunicação entre serviços oferecidos por diferentes fornecedores. ● Os dados fornecidos seguem padrões de fácil integração. ● O desempenho do sistema pode ser mais lento (nem sempre!), mas essa abordagem substituiu a engenharia baseada em componentes na maioria dos sistemas. ● Porém, recentemente uma abordagem baseada em componentes tem sido muito utilizada no desenvolvimento de aplicações Web Componente como provedor de serviço ● Componentes fornecem um serviço sem levar em conta onde o componente está executando ou sua linguagem de programação Componente como provedor de serviço ● O componente é uma entidade executável independente. Ele não precisa ser compilado antes de ser usado com outros componentes. ● Os serviços oferecidos por um componente são disponibilizados por meio de uma interface publicada e todas as interações de componentes ocorrem por meio dessa interface. ● A interface do componente é expressa em termos de operações parametrizadas e seu estado interno nunca é exposto. Interfaces de Componentes Fornece interface ● Define os serviços fornecidos pelo componente para outros componentes. ● Essa interface, essencialmente, é a API do componente. Ele define os métodos que podem ser chamados. Requer interface ● Define quais serviços devem ser disponibilizados para que o componente seja executado conforme especificado. ● Isso não compromete a independência ou a capacidade de implantação, a interface não define como esses serviços devem ser fornecidos. Diagrama de Componentes UML Diagrama de Componentes UML Componentes (uso moderno) ● Atualmente existem diversos Websites com funcionalidades complexas e interfaces que exibem uma grande quantidade de informações de forma independente ● Desenvolvedores identificaram a necessidade de quebrar a interface em componentes para facilitar o reuso, além de possibilitar o carregamento dinâmico, ágil e independente de partes de uma página ● Existem bibliotecas e frameworks que se baseiam em uma arquitetura baseada em componentes para otimizar o desenvolvimento Web (e.g., React, Angular2) ● Esse será um dos temas dos seminários da disciplina Componentes (uso clássico) ● Os componentes são acessados usando Chamadas de Procedimento Remoto (RPCs). ● Cada componente tem um identificador único (geralmente uma URL) e pode ser referenciado em qualquer computador em rede. ● Portanto, ele pode ser chamado de maneira semelhante a um procedimento ou método executado em um computador local. ● Um modelo de componente é uma definição de padrões para implementação, documentação e implementação de componentes. ● Exemplos de modelos de componentes: EJB, COM, CORBA ● O modelo especifica como as interfaces devem ser definidas e os elementos que devem ser incluídos em uma definição de interface. Componentes ● Nos próximos slides vamos tratar do uso clássico de componentes, ou seja, aqueles que conversam entre si por meio de RPC e constituem grandes servidores de aplicação ● Apesar de seu uso ter diminuído em consequência do aumento do uso de soluções baseadas na arquitetura orientada a serviços, diversos conceitos de componentes são úteis e inspiraram soluções arquiteturais atuais ● Além disso, até mesmo um software em pequena escala pode aplicar o uso de componentes ao criar módulos reutilizáveis e independentes com interfaces claras Modelo de Componentes Interface ● Componentes são definidos especificando suas interfaces. O modelo de componente especifica como as interfaces devem ser definidas (nomes de operações, parâmetros e exceções) Uso ● Para que os componentes sejam distribuídos e acessados remotamente, eles precisam ter um nome ou identificador global e único. O modelo auxilia no gerenciamento e acesso de identificadores. Implantação ● O modelo de componente inclui uma especificação de como os componentes devem ser empacotados para implantação como entidades executáveis independentes. Modelo de Componentes ● Modelos de componentes proveem o middleware que fornece suporte para a execução de componentes. ● As implementações suportadas por modelos de componentes fornecem: ○ Serviços de plataforma que permitem que componentes escritos de acordo com o modelo se comuniquem; ○ Serviços de suporte que são serviços independentes de aplicativos usados por diferentes componentes. ● Para usar os serviços fornecidos por um modelo, os componentes são implantados em um contêiner. Ele provê um conjunto de interfaces usadas para acessar as implementações de serviços, desde que os serviços sigam o padrão fornecido pelo modelo. Modelo de Componentes EJB ● EJB é um dos principais componentes da plataforma Java Enterprise Edition (Java EE) para desenvolvimento de sistemas corporativos. Com ele é possível criar aplicações baseadas em componentes, separando-os de forma simples e objetiva. ● O EJB provê um padrão para definição das interfaces dos componentes, assim como API para comunicação entre componentes, como a RMI (Remote Method Invocation), que faz acesso remoto a outros componentes de forma simples, sendo possível acessar componentes que estão em outros containers. ● Além de padronizar as interfaces de comunicação entre os componentes, o EJB oferece serviços de persistência de dados, controle de concorrência, envio de mensagens, serviço de agendamento, chamadas a métodos remotos, etc. Modelo de Componentes EJB ● Os componentes EJB são classes Java onde são desenvolvidas as lógicas de negócio da aplicação. Estas classes, por sua vez, podem ser de lógica de negócio ou de persistência de dados. ● No EJB, existem três tipos de componentes: Beans de Sessão, MDB (Message-Driven Bean) e Entity. ● Os Beans de sessão e os MDBs são responsáveis por conter as lógicas de negócio corporativas, enquanto as Entities possuem toda a lógica de persistência. ● Enquanto algumas soluções do EJB são consideradas legadas, algumas são muitos utilizadas, como a JPA (Java Persistence API) Modelo de Componentes EJB Processos ESBC ● Os processos da ESBC são processos de software que suportam engenharia de software baseada em componentes. Desenvolvimento para reuso: ● Este processo está relacionado ao desenvolvimento de componentes ou serviços que serão reutilizados em outros aplicativos. Geralmente envolve a generalização de componentes existentes. Desenvolvimento com reuso: ● Esse processo é o processo de desenvolvimento de novos aplicativos usando componentes e serviços existentes. Desenvolvimento para Reuso ● A ESBC para reutilização se concentra no desenvolvimento de componentes. ● Componentes desenvolvidos para uma aplicação específica geralmente precisam ser generalizados para torná-los reutilizáveis. ● É mais provável que um componente seja reutilizável se associado a uma abstração de domínio estável (que não sofrerão modificações). ● Por exemplo, em um hospital, abstrações de domínio estáveis são associadas ao propósito fundamental - enfermeiros, pacientes, tratamentos, etc. Desenvolvimento para Reuso Diretrizes: ● Remova os métodos específicos da aplicação, eles devem ser movidos para seu local de contexto. ● Altere os nomes de métodos para torná-los gerais. ● Torne o lançamento e/ou tratamento de exceções consistente. ● Adicione uma interface de configuração para adaptação de componentes. ● Integre os componentes necessários para reduzir dependências. Desenvolvimento para Reuso ● Componentes para reutilização podem ser especialmente construídos pela generalização dos componentes existentes. ○ Deve refletir abstrações de domínio estáveis; ○ Deve esconder a representação do estado; ○ Deve ser o mais independente possível; ○ Deve publicar exceções por meio da interface do componente. ● Trade-off entre reuso e usabilidade: quanto mais geral a interface, maior a reutilização, mas é mais complexa e menos específica e, portanto, apresenta menor usabilidade. ● Trade-off entre reuso e desempenho: componentes genéricos podem ser menos eficientes em termos de espaço e podem ter tempos de execução mais longos do que seus equivalentes específicos. Desenvolvimento com Reuso ● O processo de reutilização tem que encontrar e integrar componentes reutilizáveis. ● Ao reutilizar componentes, é essencial fazer concessões entre os requisitos ideais e os serviços efetivamente fornecidos pelos componentes disponíveis. ● Você precisa confiar no fornecedor de um componente. Na melhor das hipóteses, um componente não confiável pode não funcionar como anunciado; na pior das hipóteses, pode violar sua segurança. ● Componentes podem ter funcionalidades indesejadas. Como testar se isso não irá interferir com a sua aplicação? Desenvolvimento com Reuso ● A validação de componentes envolve o desenvolvimento de um conjunto de casos de teste para um componente. ● O principal problema com a validação de componentes é que a especificação do componente pode não ser suficientemente detalhada para permitir que você desenvolva um conjunto completo de testes de componentes. ● Além de testar se um componente para reutilização faz o que você precisa, talvez seja necessário verificar se o componente não inclui nenhum código mal-intencionado ou funcionalidade que você não precisa. Desenvolvimento com Reuso ● Em 1996, o primeiro voo de teste do foguete Ariane 5 terminou em desastre quando o lançador saiu do controle 37 segundos após decolar. ● O problema foi devido a um componente reutilizado de uma versão anterior do lançador (o Sistema de Navegação Inercial) que falhou porque as suposições feitas quando esse componente foi desenvolvido não foram válidas para o Ariane 5. ● A funcionalidade que falhou neste componente não era necessária no Ariane 5. Desenvolvimento com Reuso ● Sistemas legados existentes que preenchem uma função comercial útil podem ser reempacotados como componentes para reutilização. ● Isso envolve a gravação de um componente wrapper que implementa fornece e requer interfaces, em seguida, acessa o sistema legado. ● Embora caro, isso pode ser muito menos caro do que reescrever o sistema legado. Referências Capítulo 16 SOMMERVILLE, Iam. Engenharia de Software. 10 ed. São Paulo: Pearson, 2019. 768 p.
javabeans/26402 Exercício 1. Por que é importante que sejam definidas interfaces para os serviços fornecidos e requeridos por componentes de software? 2. Quais são as diferenças fundamentais entre componentes como elementos de programa e componentes com serviços? 3. Considerando os seguintes princípios: ○ Remova os métodos específicos da aplicação, eles devem ser movidos para seu local de contexto. ○ Altere os nomes de métodos para torná-los gerais. ○ Torne o lançamento e/ou tratamento de exceções consistente. ○ Adicione uma interface de configuração para adaptação de componentes. ○ Integre os componentes necessários para reduzir dependências. Desenhe diagramas de blocos simples para organizar um sistema de gerência de um hospital. Pense que o hospital deve ter os seguintes subsistemas: gerência de funcionários, gerência de pacientes (registros de consultas, internações, cirurgias, histórico médico), contabilidade, gerência de uso de quartos/salas. Todos esses sistemas precisam ser integrados e trocar informações entre si (e.g., o paciente precisa pagar o plano/consulta/internação, médicos precisam tratar pacientes em determinadas salas).