Olá sejam bem-vindos ao canal engenharia de software com ênfase uml eu sou o professor jilian Guedes e eu já atuo na área de modelagem de software há vários anos eu tenho quatro livros publicados sobre o assunto e eu já ministrei diversas palestras e cursos técnicos sobre modelagem de software utilizando a linguagem emé na aula de hoje eu vou abordar o diagrama de componentes um diagrama da uml muito útil para representar como o sistema está estruturado em termos de seus arquivos físicos então vamos iniciar a nossa aula então como eu falei eu vou tratar hoje sobre
o diagrama de componentes eu gosto sempre de fazer uma pequena propaganda eu já publiquei quatro livros sobre o mrl o meu primeiro livro foi o mrl uma abordagem prática que na época trabalhava com ml 1.5 mas já abordava o MR2 no final do livro depois eu lancei um livro exclusivamente sobre o MR2 que foi o MR2 guia de consulta rápida Poucos Anos depois eu evoluí esse guia para o livro MR2 guia prático e finalmente eu lancei o meu livro mais completo que é o m2 uma abordagem prática que se encontra na terceira Edição Mas vamos
ao conteúdo então eu vou falar um pouco sobre onde o diagrama de componentes pode ser aplicado bom eh o diagrama de componentes como o nome diz ele identifica componentes os componentes que fazem parte de um sistema de um subsistema ou mesmo os componentes ou classes internas de um componente individual ele também demonstra como esses componentes interagem entre si e quais são as suas interdependências ah falando um pouco sobre componentes um componente ele implementa um conjunto de funcionalidades e ele pode representar tanto um componente lógico como um componente físico um componente Lógico ele pode ser um
componente de negócio ou de processo componentes físicos ele pode ser um arquivo de código fonte um arquivo executável um arquivo de configuração uma biblioteca ã algum arquivo auxiliar como arquivo arquivos de help dlls etc Ahã bom o diagrama de componentes ele é particularmente útil no gerenciamento de configuração e mudanças no momento em que é necessário modelar baselines em termos de determinar Qual o conjunto necessário de arquivos para produzir uma determinada versão de um software eh hoje em dia é comum que sistemas tenham diversas versões e em cada versão se utilizaram arquivos diferentes com versões diferentes
com versões de bibliotecas diferentes eu não posso pegar simplesmente a última versão do meu sistema compilar em instalar o cliente eu tenho que saber qual é a versão atual que ele está utilizando E para isso eu preciso saber exatamente que arquivos foram utilizados para gerar aquela versão senão eu posso gerar uma versão inválida ou que simplesmente não funcione porque uma biblioteca mais nova pode não ser o código que foi utilizado com a biblioteca antiga pode não ser compatível com ela então é importante saber exatamente Que tipos de arquivos compõe uma determinada versão Ah o diagrama
de de componentes ele também é útil para auxiliar na reutilização de código já que ele identifica Onde em onde estão os em que arquivos está o código que deve ser pesquisado reaproveitado Eh ele também representa componentes executáveis de uma determinada versão de um software não os arquivos fonte necessário para gála mas também seus como ela como ela é composta por componentes executáveis isso é importante porque muitas vezes os componentes executáveis são diferentes dos componentes de relativos ao código fonte ele também facilita o entendimento geral da estrutura do software uma vez que ele proporciona uma visão
Clara e concisa dessa estrutura ele melhora a comunicação entre a equipe e os stakeholders já que todos os participantes todos os envolvidos todos os interessados TM a mesma compreensão de como o sistema está estruturado e ele também ailia a determinar como os componentes devem ser desenvolvidos E como eles devem ser integrados Além disso ele auxilia na manutenção e atualização do software ele ajuda a estimar o impacto de mudanças nos ã nos componentes e também na estruturação do software e ele ajuda a identificar potenciais problemas de projeto e também como é possível melhorar um projeto Ah
o diagrama de componentes ele também pode ser utilizado em conjunto com outros diagramas como por exemplo diagrama de pacotes ou diagrama de implantação então o diagrama de componentes quando em conjunto com o diagrama de pacotes auxilia na compreensão e na estruturação da arquitetura uma vez que ele permite identificar quais são os componentes contidos nos módulos camadas ou divisões da arquitetura e ele também determina como esses componentes serão se comun se comunicarão entre si em uma determinada divisão e entre componentes contidos em divisões módulos ou camadas diferentes bom falar um pouquinho sobre sobre componente ah como
já falei um componente ele implementa encapsula um conjunto de funcionalidades ele é uma unidade autônoma dentro de um sistema ou subsistema ele pode conter interfaces fornecidas e requeridas basicamente interfaces fornecidas são serviços que um componente oferece para outros componentes e interface requerida são serviços que o componente solicita para outros componentes os interiores de um componente eles são transparentes e inacessíveis a não ser por meio de suas interfaces um componente el encapsulado e as suas dependências são projetadas de tal maneira que ele possa ser tratado da forma mais independente possível bom um componente na uml é
representado com como um retângulo contendo este símbolo no canto superior que é um retângulo com dois outros retângulos se sobressaindo esse era o símbolo anterior do componente na uml 1.5 nas versões anteriores da da 2.0 a partir da 2.0 ele passou a se representar dessa maneira então aqui eu tenho um componente que representa o arquivo executável do gerenciador de contas para um sistema de controle bancário bom ã o o diagrama de componentes também suporta diversos tipos estereótipos assim como a maioria senão todos os diagramas da ml os estereótipos eles permitem atribuir características extras para um
determinado elemento da oml assim ele vai ter um comportamento um pouco diferente dos seus iguais Ah eu tenho estereótipos diversos entre eles eu posso citar ã o estereótipo executable que significa que o componente representa um arquivo executável o estereótipo Library que significa que o componente representa uma biblioteca cujas funções cujos métodos podem ser aproveitados eh inseridos utilizados por diversos componentes eu tenho estereótipo table que significa que o componente é uma tabela eu tenho estereótipo boundary que significa que o componente ele é um componente de Fronteira ou seja ele age como uma um elemento de intermediação
entre os atores externos e o sistema existe o estereótipo document que eh que informa que o componente representa um documento existe o estereótipo file que que informa que o componente é um arquivo entre outros eh estereótipos Aqui nós temos alguns exemplos de estereótipos aplicados a alguns componentes então aqui eu tenho o componente interface cxa eletrônica que receb o estereótipo boundary ou seja ele é um componente de Fronteira serve de intermediação entre os usuários do sistema Ah aqui eu tenho componente com estereótipo executable quer dizer que representa aqu Elia é um arquivo executável aqui eu tenho
estereótipo ã aqui eu tenho componente com estereótipo table identificando que ele representa uma tabela aqui eu tenho outro componente com est por Library deixando claro que esse componente representa uma biblioteca bom falar um pouquinho mais sobre interfaces fornecidas requeridas que são a principal forma de comunicação entre os componentes atualmente H embora haja outras formas que eles possam comunicar Essa é a mais comum ah basicamente uma interface requerida como eu já falei ela representa eh uma forma de solicitar serviços para outros componentes e uma interface fornecida ela representa os serviços que um componente pode oferecer para
os seus iguais para outros componentes Aqui nós temos exemplos de interfaces fornecidas E requeridas então uma interface fornecida ela é representada como uma linha terminando numa meia-lua aberta enquanto que uma interface fornecida ela é representada por uma linha contendo um círculo então esses quadrados representam as portas de comunicação dos componentes eh entre os seus elementos interiores e o ambiente externo então aqui eu consigo ver que o componente controle gerenciamento contas ele tem uma interface requerida com o componente gerenciador de contas que tem uma Interface fornecida para o componente controle gerenciamento de contas então normalmente uma
interface fornecida em um componente será uma interface eh requerida em outro e essa basicamente é a principal forma de comunicação entre eles então basicamente aqui eu estou dizendo que o componente controle de gerenciamento de contas solicita serviços ao componente gerenciador contas que os fornece bom as classes Ah um componente ele pode possuir classe de componentes internos Então pode conter ou encapsular então se eu apresento o componente sem detalhar as suas classes ou componentes internos Então isso é chamado uma visão de caixa preta porque eu não consigo enxergar o que há dentro do componente agora se
eu represento os componentes internos ou as classes internas de um componente então ess é chamado visão de caixa branca Ahã aqui então nós temos um exemplo de visão de caixa branca onde eu estou detalhando quais são os componentes internos aliás as classes internas do componente gerenciador contas então vocês podem perceber que ele implementa ah a maioria das classes relacionadas ao sistema de controle bancário que são pessoa física pessoa jurídica conta comum conta especial conta poupança e movimento eh uma outra forma de representar os cont os componentes internos ou as classes internas de um componente é
por meio de associações de dependência que essa linha tracejada contendo uma seta Então esse essa figura mostra exatamente a mesma coisa que o componente gerenciador contas implementa todas essas classes Ah falar um pouquinho mais de portas Então dentro do diagrama de de de componentes ua muito portas basicamente são portas lógicas que representam uma forma de comunicação entre os elementos internos de um componente e o ambiente externo ah e também eh ela são a base a partir da Qual o componente ele pode solicitar ou executar Algum serviço aqui nós temos exemplo de uso de portas com
os componentes internos de um componente então aqui eu tenho um componente que eu chamei de placa mãe e ele tem três componentes internos que são processador memória RAM e memória home então o processador ele tem duas interfaces requeridas com cada um desses componentes e cada um desses componentes tem uma interface fornecida com o processador então o processador ele solicita que a memória RAM armazene certas informações e solicita informações da memória ROM por exemplo ele tem ainda uma interface fornecida e uma interface requerida O componente processador mas ele é um elemento interno então vocês vão notar
que a própria placa mãe ela tem uma interface fornecida tem uma porta e uma interface fornecida que foi chamada de teclado e outra porta com uma interface requerida que é chamada de monitor Quer dizer então que o o componente placa mãe ele fornece serviços pro teclado uma vez que interpreta o que é digitado nele e solicita serviços ao monitor uma vez que pede que o monitor apresente os resultados no vídeo mas na ade Quem faz isso é o processador então a porta ela recebe a as solicitações do teclado e delega essas solicitações para a interface
fornecida do componente processador o mesmo ocorre com relação à interface requerida do processador cujos pedidos são Delegados para a porta de comunicação que faz o pedido por meio da interface e monitor para o que sejam apresentadas determinadas informações no vídeo Aqui nós temos um exemplo de diagrama de componentes um pouco simplificado para não ficar uma figura grande demais então esses esse é o diagrama de componentes relativo ao sistema de controle bancário então nós temos dois componentes do tipo boundary que eu chamei de visão auto atendimento e visão gerenciamento contas Ah então aqui esse esse componente
ele encapsula todas as classes divisão eh relativas aos processos de emissão de saldo ã eh realização de saque realização de depósito emissão de exato por exemplo enquanto que o componente visão gerenciamento de contas encapsula as classes de visão relacionadas à abertura de conta comum conta especial conta poupança encerramento de conta e gerenciamento do cadastro de clientes aqui eu tenho um uma ligação uma interação entre esses dois componentes e um componente de Firewall que não faz parte realmente do Sistema de Controle bancário mas é utilizado por ele por uma questão de segurança para impedir que pessoas
não autorizadas eh tenham acesso a informações ou recursos do sistema então eu inseri um componente que recebi estereótipo execut o executable ã para representar um fal esse fal tem uma interação com dois outros componentes executáveis que são o controle autoatendimento e o controle gerenciamento de contas cada um desses componentes implementa as classes de controle no caso do controle de autoatendimento as classes de controle relativas ao controle de emissão de saldo controle de emissão de extrato controle de realização de saque esse tipo de coisa enquanto que o componente controle gerenciamento e Contas implementa as classes de
controle para abertura de contas ou para encerramento de contas ou para gerenciamento do cadastro cliente eh cada uma dessas desses componentes eles têm uma interação com um componente gerenciador Auto adento e gerenciador contas que eh também são componentes com estereótipo executable ou seja são arquivos executáveis que eh encapsulam as classes de entidade que contém a lógica do negócio então a O componente de controle de autoatendimento recebe as solicitações da Fronteira interpreta essas solicitações e se achar necessário faz solicitações ao gerenciador de autoatendimento para que ele Execute determinados métodos contidos nas classes de entidade Ah o
mesmo ocorre entre o componente controle gerenciamento de contas e o ah componente gerenciador de contas que permite abrir encerrar ou manter o cadastro de clientes ainda o componente gerenciador de auto atendimento e gerenciador contas eles têm ã uma interação com o componente gerenciador persistência que tem ST persistent que embora ele seja um arquivo executável se deixou claro que ele é responsável pela persistência das informações trabalhadas por esses dois componentes e ele por sua vez tem uma interação com um sistema inciador de banco de dados que também recebeu estereótipo persistem significando que ele é responsável por
gravar informações em disco recuperar Elas quando necessário então Aqui nós temos o exemplo de diagrama de componentes cada um desses componentes possui uma ou mais portas essas portas são formas de comunicação entre os componentes e eles possuem interfaces requeridas E fornecidas no momento em que eles precisam que determinados serviços sejam executados ou fornece determinados serviços e Aqui nós temos um outro diagrama de componentes mas dessa vez em combinação com diagrama de pacotes aqui eu peguei um diagrama de pacotes semelhante ao ao que já foi apresentado na aula sobre o diagrama de pacotes onde Eu determino
em que eh módulos cada componente vai ser ã vai ser alocado então a os componentes boundary e o componente Firewall vão ser alocados no módulo divisão os componentes de controle controle autoatendimento e controle gerenciamento contas vão ser locados no na visão de controle na no módulo de controle e os componentes de gerenciador autoatendimento e gerenciador contas estarão localizados no módulo de modelo e finalmente o gerenciador de persistência e o sgbd estarão localizados no módulo de persistência que é o módulo Extra eh responsável por pela persistência dos dados eh vocês poem Lembrar que no exemplo apresentado
havia ainda um sub pacote um pacote interno repositório mas eu não inseri aqui para não deixar o diagrama muito extenso para tentar deixar o exemplo um pouco mais simples Então esse é um exemplo simples de diagrama de componentes juntamente com o diagrama de pacotes então nós terminamos a aula sobre o diagrama de componentes eu espero que vocês tenham achado essa aula útil se vocês gostaram desse vídeo então que vocês compartilhem esse vídeo com quem possa se interessar deem like no vídeo e se ainda não estão inscritos eu peço que se inscrevam obrigado pela atenção nós
nos vemos nas próximas aulas