Engenharia De Software III - Diagramas De Implementação
Diagramas de Implementação na UML
Os Diagramas de Implementação são uma categoria da UML (Unified Modeling Language) que representam aspectos de implementação física dos sistemas, incluindo tanto a estrutura de componentes quanto a estrutura do sistema em tempo de execução. Estes diagramas são fundamentais para visualizar a organização dos artefatos físicos que compõem o software.
Categorização dos Diagramas de Implementação
Na UML, os diagramas de implementação são expressos em duas formas principais:
- Diagrama de Componentes: Foca nos elementos modulares do software
- Diagrama de Implantação: Representa a disposição física dos componentes em hardware
Diagrama de Componentes
Definição e Propósito
O Diagrama de Componentes especifica um conjunto de construções utilizadas para definir sistemas de software, identificando componentes como unidades modulares com interfaces bem definidas e substituíveis dentro de seu ambiente.
O objetivo do diagrama de componentes é mostrar “caixas pretas” que especificam suas interfaces, permitindo que outros componentes acessem seus serviços sem conhecer seu conteúdo interno.
Principais características:
- Apresenta uma visão estática da implementação do sistema
- Está fortemente associado à linguagem de programação escolhida
- Identifica os arquivos que comporão o software em termos de módulos, bibliotecas, formulários e outros elementos estruturais
- Determina os relacionamentos entre os diversos componentes
Representação Gráfica de Componentes
Cada arquivo que compõe o sistema pode ser considerado um componente, sendo representado por um retângulo principal contendo o nome do módulo, com dois retângulos menores sobressaindo-se à sua esquerda.
Estereótipos de Componentes
Os estereótipos são fundamentais para especificar o tipo de cada componente:
Executável (
<<executable>>
): Determina que o componente é um arquivo compilado, pronto para executar um conjunto de instruçõesBiblioteca (
<<library>>
): Refere-se a bibliotecas contendo funções e sub-rotinas compartilháveis entre diversos componentes executáveis, podendo ser fornecidas pela linguagem ou por desenvolvedoresTabela (
<<table>>
): Identifica repositórios físicos de dados onde os registros produzidos pelo sistema serão armazenadosDocumento (
<<document>>
): Referencia arquivos de texto utilizados pelo sistema, como arquivos de ajuda (help)Arquivo (
<<file>>
): Designa qualquer outro arquivo que componha o sistema, como código-fonte dos módulos
Relacionamentos entre Componentes
Dependência
Um componente pode utilizar serviços ou depender de outros componentes do sistema. Esta relação é representada através do relacionamento de dependência, indicado por uma seta pontilhada apontando do componente dependente para o componente do qual depende.
Diagrama de Implantação
Definição e Propósito
O Diagrama de Implantação representa a visão mais física da UML, enfocando a organização e a estrutura física na qual o software será implantado.
Características principais:
- Mostra a disposição dos equipamentos conectados através de protocolos de comunicação
- Torna-se necessário apenas quando o sistema modelado será executado em múltiplas máquinas
- Não é requisitado quando o projeto se destina a apenas um equipamento
Elementos Fundamentais
Nós
Os nós são componentes básicos do diagrama de implantação, representando máquinas onde um ou mais módulos do sistema serão executados. São representados graficamente por um cubo contendo o nome do elemento que representa.
Associações
As associações representam ligações físicas que possibilitam a troca de informações entre nós. São indicadas por retas conectando um nó a outro, frequentemente acompanhadas de estereótipos que especificam o tipo de conexão (como <<HTTP>>
, <<TCP/IP>>
, entre outros).
Combinação com Diagramas de Componentes
Os diagramas de implantação e de componentes podem ser combinados, permitindo a modelagem integrada dos aspectos físicos e lógicos do sistema. É comum identificar os componentes que são executados por cada nó, criando uma visão completa da arquitetura física do sistema.
Implementação Prática com Astah
Para criar diagramas de implementação utilizando a ferramenta Astah, recomenda-se seguir uma abordagem metódica:
- Criar uma pasta específica para o diagrama no projeto
- Adicionar o diagrama de componentes ou implantação conforme necessário
- Para diagramas de componentes:
- Desenhar os componentes com seus estereótipos adequados
- Estabelecer as dependências entre componentes
- Representar interfaces quando aplicável
- Para diagramas de implantação:
- Criar os nós que representam as máquinas físicas
- Estabelecer as associações entre nós, adicionando estereótipos de protocolos
- Quando apropriado, adicionar componentes dentro dos nós
Aplicações Práticas
Os diagramas de implementação são particularmente úteis em cenários como:
- Sistemas distribuídos com múltiplos servidores e clientes
- Aplicações com arquitetura cliente-servidor
- Sistemas que utilizam diferentes tecnologias e plataformas
- Software que requer implantação em ambientes complexos de hardware
Considerações Finais
Os diagramas de implementação fornecem uma visão essencial dos aspectos físicos da arquitetura de software, complementando outros diagramas da UML que focam em aspectos comportamentais ou estruturais em nível conceitual. Eles constituem uma ponte importante entre o design lógico do sistema e sua implementação física.
Exercício
plantuml code snippet start
@startuml
title Diagrama de Implantação - Aplicação Web de Auto-Peças
node "Cliente_Browser\n<<Client>>" as browser {
artifact "<<file>> home.html" as staticPage
interface "Interface de Usuário" as interface
artifact "<<file>> Menu de Acesso" as menu
artifact "<<file>> banner.vdo" as banner
artifact "<<document>> ajuda.txt" as help
interface -- menu : <<realization>>
staticPage ..> interface : <<dependency>>
staticPage ..> banner : <<dependency>>
staticPage ..> help : <<dependency>>
}
node "Servidor_Web\n<<Server>>" as server {
artifact "<<table>> dados.mdf" as database
artifact "<<file>> estilo.css" as css
artifact "<<executable>> pagina.php" as phpPage
phpPage ..> database : <<dependency>>
staticPage ..> css : <<dependency>>
phpPage ..> css : <<dependency>>
}
browser -- server : <<HTTP>>
@enduml
plantuml code snippet end
plantuml code snippet start
@startuml
title Diagrama de Componentes - Sistema de Auto-Peças
package "Aplicação Web" {
[<<file>> home.html] as home
[<<document>> ajuda.txt] as ajuda
[<<file>> banner.vdo] as banner
[<<file>> estilo.css] as css
[<<executable>> pagina.php] as php
[<<table>> dados.mdf] as dados
interface "Menu" as menuInterface
home ..> css : <<dependency>>
home ..> ajuda : <<dependency>>
home ..> banner : <<dependency>>
php ..> dados : <<dependency>>
home -- menuInterface : <<realization>>
}
@enduml
plantuml code snippet end
plantuml code snippet start
@startuml
title Diagrama de Implantação - Ecossistema do Aplicativo Mobile Fatec
' Configurações visuais
skinparam backgroundColor white
skinparam nodeBorderColor #666666
skinparam componentBorderColor #333333
skinparam arrowColor #333333
skinparam stereotypeCBackgroundColor LightBlue
skinparam noteBackgroundColor LightYellow
skinparam noteBorderColor #999999
' Definição de estilos customizados
skinparam node {
BackgroundColor #F0F8FF
FontName Arial
FontSize 12
}
skinparam component {
BackgroundColor #F5F5F5
FontName Arial
FontSize 11
}
' Dispositivo do Usuário
node "<<Device>> Dispositivo Móvel do Usuário" as mobileDevice {
node "<<OS>> Sistema Operacional Mobile" as mobileOS {
component "<<Mobile App>> Aplicativo Fatec" as fatecApp {
component "<<UI>> Interface de Usuário" as userInterface
component "<<Business>> Regras de Negócio" as businessLogic
component "<<Persistence>> Armazenamento Local" as localStorage
component "<<Service>> Gerenciador de Rede" as networkManager
component "<<Service>> Gerenciador de Notificações" as notificationManager
userInterface --> businessLogic
businessLogic --> localStorage
businessLogic --> networkManager
businessLogic --> notificationManager
}
}
}
' Infraestrutura da Fatec em Nuvem
cloud "Infraestrutura Fatec em Nuvem" as fatecCloud {
node "<<Server>> Servidor de Aplicações Fatec" as appServer {
component "<<WebService>> API Fatec" as fatecAPI {
component "<<Controller>> Controladores REST" as restControllers
component "<<Service>> Serviços de Negócio" as businessServices
component "<<DAO>> Camada de Acesso a Dados" as dataAccess
restControllers --> businessServices
businessServices --> dataAccess
}
component "<<Service>> Serviço de Autenticação" as authService
component "<<Service>> Gerenciador de Sessões" as sessionManager
restControllers --> authService
restControllers --> sessionManager
}
node "<<Database Server>> Servidor de Banco de Dados" as dbServer {
database "<<Cloud Database>> Banco de Dados Fatec" as fatecDB {
[Tabela Alunos] as tblStudents
[Tabela Professores] as tblTeachers
[Tabela Disciplinas] as tblSubjects
[Tabela Notas] as tblGrades
[Tabela Aulas] as tblClasses
[Tabela Calendário] as tblCalendar
}
}
node "<<Server>> Servidor de Arquivos" as fileServer {
component "<<Storage>> Repositório de Documentos" as documentRepo
component "<<Storage>> Repositório de Material Didático" as learningMaterialRepo
}
}
' Serviços Externos
cloud "Serviços Externos" as externalServices {
node "<<Server>> Serviços de Terceiros" as thirdPartyServices {
component "<<WebService>> API de Previsão do Tempo" as weatherAPI
component "<<WebService>> Serviço de Mapas" as mapService
component "<<WebService>> Gateway de Pagamentos" as paymentGateway
component "<<WebService>> Serviço de E-mail" as emailService
}
}
' Infraestrutura de Segurança
node "<<Security>> Camada de Segurança" as securityLayer {
component "<<Firewall>> Firewall de Aplicação" as appFirewall
component "<<Service>> Gateway de API" as apiGateway
component "<<Service>> Serviço de Monitoramento" as monitoringService
appFirewall --> apiGateway
apiGateway --> monitoringService
}
' Ambiente de Administração
node "<<Management>> Sistema de Administração" as adminSystem {
component "<<WebApp>> Painel Administrativo" as adminPanel
component "<<Service>> Serviço de Relatórios" as reportService
component "<<Service>> Gerenciador de Configurações" as configManager
adminPanel --> reportService
adminPanel --> configManager
}
' Conexões entre os principais nós
mobileDevice -- fatecCloud : "<<Protocol>> HTTPS"
mobileDevice -- externalServices : "<<Protocol>> HTTPS"
fatecCloud -- externalServices : "<<Protocol>> HTTPS"
securityLayer -- fatecCloud : "<<Protocol>> TLS 1.3"
adminSystem -- fatecCloud : "<<Protocol>> HTTPS"
' Conexões detalhadas entre componentes
networkManager ..> fatecAPI : "<<Consume>> REST API (JSON/HTTPS)"
networkManager ..> weatherAPI : "<<Consume>> REST API (JSON/HTTPS)"
networkManager ..> mapService : "<<Consume>> REST API (JSON/HTTPS)"
dataAccess ..> fatecDB : "<<Access>> JPA/JDBC"
businessServices ..> documentRepo : "<<Access>> S3 API"
businessServices ..> learningMaterialRepo : "<<Access>> S3 API"
fatecAPI ..> emailService : "<<Use>> SMTP"
fatecAPI ..> paymentGateway : "<<Integrate>> REST API (JSON/HTTPS)"
' Notas explicativas
note right of fatecApp
Aplicativo disponível para iOS e Android
com funcionalidades online e offline
end note
note right of fatecAPI
API RESTful que fornece endpoints para
todas as funcionalidades acadêmicas
end note
note bottom of weatherAPI
Integração com OpenWeatherMap API
para informações meteorológicas locais
end note
note bottom of fatecDB
Sistema de banco de dados relacional
com replicação e backup automático
end note
note right of securityLayer
Implementa OAuth 2.0, rate limiting,
e detecção de intrusões
end note
@enduml
plantuml code snippet end
Engenharia de Software III - Aula 04 Engenharia de Software III - Aula 03