![Page 1: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/1.jpg)
Componente de Software 1
Desenhando um componente de software
![Page 2: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/2.jpg)
Componente de Software 2
O que é um componente?
1. Tem interface externa distinta da implementação interna
2. Interface definida de maneira contratual: assinatura, pré e pós-condições
3. Não é gerado em diversas cópias4. Demanda certo número de operações
do meio no qual é implantado
![Page 3: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/3.jpg)
Componente de Software 3
…
5. Provê certo número de operações demandado pelo meio no qual é implantado
6. Pode interagir com outros componentes
7. É vendido (ou distribuido) sob a forma executável (ao invés de código-fonte)
8. Pode oferecer publicações da operações que suporta
![Page 4: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/4.jpg)
Componente de Software 4
Similaridades e diferenças entre Componentes e Objetos
1. Ambas promovem o encapsulamento (interface x implementação)
2. A propriedade contratual das operações é semelhante
3. Classes geram objetos, mas cópias de componentes serão idênticas em seus valores internos (sem herança)
4. Na OO não consideramos o “meio” em torno de um objeto – Componentes consideram
![Page 5: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/5.jpg)
Componente de Software 5
…
5. Um componente executa somente em seu meio designado e provê operações controladas pelo meio (contador de referências em si próprio!)
6. Reutilização é característica comum7. Componentes são mais parecidos com
objetos do que com classes8. Interfaces de componentes atuam como
operações de classes
![Page 6: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/6.jpg)
Componente de Software 6
Exemplo de um Componente:
GerenciadorDeRecursos
Organização de uma conferência:funcionários, conferência,
projetores
Pool de caminhonetes:funcionários, caminhonetes
![Page 7: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/7.jpg)
Componente de Software 7
GerenciadorDeRecursos
GerenciadorDeRecursos
ServiçosPadrões
ServiçosDeTipoDeRecursos
ServiçosDeInstânciasDeRecursos
ServiçosDeGruposDeRecursos
ServiçosDeCalendário
![Page 8: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/8.jpg)
Componente de Software 8
<<interface>>
ServiçosDeTipoDeRecursoobterNúmeroTotal ( ): NúmeroInteiro obterNúmeroDeInstâncias (id: IdDoTipoDeRecurso): NúmeroInteiro obterNome (id: IdDoTipoDeRecurso, nome: string, out nome: string): Booleano especificarNome (id: IDDoTipoDeRecurso, nome: string): Booleano éPresente (nome: string): Booleano obterID (nome: String, out id: IDDoTipoDeRecurso): Booleano obterÉHumano (id: IDDoTipoDeRecurso): Booleano especificarÉHumano (id: IDDoTipoDeRecurso, éHumano): Booleano acrescentar (nome: string, out id: IDDoTipoDeRecurso): Booleano remover (id: IDDoTipoDeRecurso): Booleano ….
![Page 9: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/9.jpg)
Componente de Software 9
ServiçosDeInstânciaDeRecurso<<interface>>
ServiçosDeInstânciaDeRecurso
obterNúmeroTotal ( ): NúmeroInteiro obterNome (id: IdDaInstânciaDeRecurso, nome: string, out nome: string): Booleano especificarNome (id: IDDaInstânciaDeRecurso, nome: string): Booleano obterTipo (id: IDDaInstânciaDeRecurso, out tipo: IDDoTipoDeRecurso): Booleano especificarTipo (id: IDDaInstânciaDeRecurso, tipo: IDDoTipoDeRecurso): Booleano obterID (nome: string, id: IDDInstânciaDeRecurso): Booleano obterEndDeE-mail (id: IDDInstânciaDeRecurso): String …. acrescentar ( ): Booleano remover (id: IDDoTipoDeRecurso): Booleano removerTodas ( ) ….
![Page 10: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/10.jpg)
Componente de Software 10
ServiçosDeAgrupamentoDeRecursos
<<interface>>
ServiçosDeAgrupamentoDeRecursos
obterNúmeroTotal ( ): NúmeroInteiro obterNome (IdDGrupo: IDDoGrupoDeRecursos, out nome: string): Booleano especificarNome (IDDoGrupo: IDDoGrupoDeRecursos, nome: string): Booleano obterID (nome: string, out id: IDDoGrupoDeRecursos): Booleano obterHorário (idDoGrupo: IDDoGrupoDeRecurso, horário: HorárioData): Booleano …. ….
![Page 11: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/11.jpg)
Componente de Software 11
ServiçosDeCalendário
<<interface>>
ServiçosDeCalendário
obterMenorIncrementoDeTempo ( ): NúmeroInteiro especificarMenorIncrementoDeTempo (IncrmentoDeTempo: NúmeroInteiro …. ….
![Page 12: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/12.jpg)
Componente de Software 12
ServiçosPadrões
<<interface>>
ServiçosPadrões
obterContagemDeReferências ( ): NúmeroInteiro obterIdentificador (cliente: Cliente, nome: nomeDeInterface, out identificador:
IdentificadorDeInterface): Booleano desconectar(cliente: Cliente, identificador: IdentificadorDeInterface): Booleano
….
![Page 13: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/13.jpg)
Componente de Software 13
Desenho Interno de um Componente
“O desenho interno de componente não precisa ser Orientado a Objetos!”
![Page 14: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/14.jpg)
Componente de Software 14
GerenciadorDeRecursos:DomínioDeAplicação
ServiçoDeTipoDeRecurso
ServiçoDeInstânciaDe
Recurso
ServiçoDeAgrupamentoDeRecursos
ServiçoDeCalendário
DomínioDeNegócio
PacoteDeRecursos
PacoteDeRecursos
![Page 15: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/15.jpg)
Componente de Software 15
…
DomínioDeArquitetura IndependenteDePlataforma
ServiçosDeE-MailIndependentesDe
Plataforma
ServiçoDeBancoDeDados
IndependentesDePlataforma
DomínioDeArquitetura IndependenteDePlataforma
PacoteDeE-Mail
PacoteDeBancoDeDados
![Page 16: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/16.jpg)
Componente de Software 16
PacoteDeRecursos
InstânciaDeRecurso
endereçoEletrônico: EndereçoEletrônico
…
…
ItemDeRecurso
endereçoEletrônico: EndereçoEletrônico
…
…
TipoDeRecurso
/ id: IDDoTipoDeRecurso nome: String éHumano: Booleano …
novo (nome: String): Booleano - obterPróximoID: IDDoTipoDeRecursoobterTipoDeRecurso
(nome: string, out tipoDeRecurso: TipoDeRecurso): Booleano
…
0..* 0..1
0..*
1
![Page 17: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/17.jpg)
Componente de Software 17
O que um componente provê e requer
componenteEventosnotificados
Eventosdetectados
serviços oferecidos
serviços oferecidos
![Page 18: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/18.jpg)
Componente de Software 18
Componentes Leves ou PesadosDomínioDeAplicação
ServiçoDeTipoDeRecurso
ServiçoDeInstânciaDe
Recurso
ServiçoDeAgrupamentoDeRecursos
ServiçoDeCalendário
DomínioDeNegócio
PacoteDeRecursos
PacoteDeRecursos
DomínioDeArquitetura IndependenteDePlataforma
ServiçosDeE-MailIndependentesDe
Plataforma
ServiçoDeBancoDeDados
IndependentesDePlataforma
![Page 19: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/19.jpg)
Componente de Software 19
Vantagens do componente leve:
Menos dispendioso para ser construido
Sendo mais simples deverá ser mais confiável (tanto no início quanto na manutenção)
Não sobrecarregará a memória ou outros recursos
>> Coesão de domínio simples
![Page 20: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/20.jpg)
Componente de Software 20
Vantagens e desvantagens de usar componentes:
+ Eles são baratos+ Eles estão disponíveis+ Eles estão disponíveis no momento!- Eles talvez estejam praticamente
disponíveis no momento!+ Eles são maduros+ Podem incorporar idéias
“inovadoras” e “sofisticadas”
![Page 21: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/21.jpg)
Componente de Software 21
…
- Também estão disponíveis para os concorrentes
- Podem ser complexos demais para as tuas necessidades
- A personalização pode ser trabalhosa ou impossível
- Um componente intransigente pode requer mudanças em seu negócio
![Page 22: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/22.jpg)
Componente de Software 22
…
- Os componentes de negócio talvez não estejam disponíveis para ‘nichos’
+ Eles são mantidos por terceiros- Versões revisadas podem demorar
a chegar- Versões revisadas podem chegar
rápido demais
![Page 23: Componente de Software1 Desenhando um componente de software](https://reader035.vdocuments.pub/reader035/viewer/2022081502/552fc130497959413d8d4bf9/html5/thumbnails/23.jpg)
Componente de Software 23
…
+ Os componentes seguem normas- Podem envolver diversos
distribuidores- O distribuidor poderá sair do
negócio