componente de software1 desenhando um componente de software
TRANSCRIPT
Componente de Software 1
Desenhando um componente de software
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
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
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
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
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
Componente de Software 7
GerenciadorDeRecursos
GerenciadorDeRecursos
ServiçosPadrões
ServiçosDeTipoDeRecursos
ServiçosDeInstânciasDeRecursos
ServiçosDeGruposDeRecursos
ServiçosDeCalendário
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 ….
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 ( ) ….
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 …. ….
Componente de Software 11
ServiçosDeCalendário
<<interface>>
ServiçosDeCalendário
obterMenorIncrementoDeTempo ( ): NúmeroInteiro especificarMenorIncrementoDeTempo (IncrmentoDeTempo: NúmeroInteiro …. ….
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
….
Componente de Software 13
Desenho Interno de um Componente
“O desenho interno de componente não precisa ser Orientado a Objetos!”
Componente de Software 14
GerenciadorDeRecursos:DomínioDeAplicação
ServiçoDeTipoDeRecurso
ServiçoDeInstânciaDe
Recurso
ServiçoDeAgrupamentoDeRecursos
ServiçoDeCalendário
DomínioDeNegócio
PacoteDeRecursos
PacoteDeRecursos
Componente de Software 15
…
DomínioDeArquitetura IndependenteDePlataforma
ServiçosDeE-MailIndependentesDe
Plataforma
ServiçoDeBancoDeDados
IndependentesDePlataforma
DomínioDeArquitetura IndependenteDePlataforma
PacoteDeE-Mail
PacoteDeBancoDeDados
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
Componente de Software 17
O que um componente provê e requer
componenteEventosnotificados
Eventosdetectados
serviços oferecidos
serviços oferecidos
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
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
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”
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
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
Componente de Software 23
…
+ Os componentes seguem normas- Podem envolver diversos
distribuidores- O distribuidor poderá sair do
negócio