Componente de Software1 Desenhando um componente de software
Componente de Software2 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ópias 4.Demanda certo número de operações do meio no qual é implantado
Componente de Software3 … 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 Software4 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 Software5 … 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 comum 7.Componentes são mais parecidos com objetos do que com classes 8.Interfaces de componentes atuam como operações de classes
Componente de Software6 Exemplo de um Componente: zGerenciadorDeRecursos Organização de uma conferência: funcionários, conferência, projetores Pool de caminhonetes: funcionários, caminhonetes
Componente de Software7 GerenciadorDeRecursos ServiçosPadrões ServiçosDeTipoDeRecursos ServiçosDeInstânciasDeRecursos ServiçosDeGruposDeRecursos ServiçosDeCalendário
Componente de Software8 > ServiçosDeTipoDeRecurso obterNú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 Software9 ServiçosDeInstânciaDeRecurso > 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 obterEndDe (id: IDDInstânciaDeRecurso): String …. acrescentar ( ): Booleano remover (id: IDDoTipoDeRecurso): Booleano removerTodas ( ) ….
Componente de Software10 ServiçosDeAgrupamentoDeRecursos > 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 Software11 ServiçosDeCalendário > ServiçosDeCalendário obterMenorIncrementoDeTempo ( ): NúmeroInteiro especificarMenorIncrementoDeTempo (IncrmentoDeTempo: NúmeroInteiro ….
Componente de Software12 ServiçosPadrões > ServiçosPadrões obterContagemDeReferências ( ): NúmeroInteiro obterIdentificador (cliente: Cliente, nome: nomeDeInterface, out identificador: IdentificadorDeInterface): Booleano desconectar(cliente: Cliente, identificador: IdentificadorDeInterface): Booleano ….
Componente de Software13 Desenho Interno de um Componente zO desenho interno de componente não precisa ser Orientado a Objetos!
Componente de Software14 GerenciadorDeRecursos: DomínioDeAplicação ServiçoDe TipoDeRecurso ServiçoDe InstânciaDe Recurso ServiçoDe Agrupamento DeRecursos ServiçoDe Calendário DomínioDeNegócio PacoteDe Recursos PacoteDe Recursos
Componente de Software15 … DomínioDeArquitetura IndependenteDePlataforma ServiçosDe IndependentesDe Plataforma ServiçoDeBanco DeDados Independentes DePlataforma DomínioDeArquitetura IndependenteDePlataforma PacoteDe PacoteDe BancoDeDados
Componente de Software16 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: IDDoTipoDeRecurso obterTipoDeRecurso (nome: string, out tipoDeRecurso: TipoDeRecurso): Booleano … 0..* * 1
Componente de Software17 O que um componente provê e requer componente Eventos notificados Eventos detectados serviços oferecidos
Componente de Software18 Componentes Leves ou Pesados DomínioDeAplicação ServiçoDe TipoDeRecurso ServiçoDe InstânciaDe Recurso ServiçoDe Agrupamento DeRecursos ServiçoDe Calendário DomínioDeNegócio PacoteDe Recursos PacoteDe Recursos DomínioDeArquitetura IndependenteDePlataforma ServiçosDe IndependentesDe Plataforma ServiçoDeBanco DeDados Independentes DePlataforma
Componente de Software19 Vantagens do componente leve: zMenos dispendioso para ser construido zSendo mais simples deverá ser mais confiável (tanto no início quanto na manutenção) zNão sobrecarregará a memória ou outros recursos z>> Coesão de domínio simples
Componente de Software20 Vantagens e desvantagens de usar componentes: z+ Eles são baratos z+ Eles estão disponíveis z+ Eles estão disponíveis no momento! z- Eles talvez estejam praticamente disponíveis no momento! z+ Eles são maduros z+ Podem incorporar idéias inovadoras e sofisticadas
Componente de Software21 … z- Também estão disponíveis para os concorrentes z- Podem ser complexos demais para as tuas necessidades z- A personalização pode ser trabalhosa ou impossível z- Um componente intransigente pode requer mudanças em seu negócio
Componente de Software22 … z- Os componentes de negócio talvez não estejam disponíveis para nichos z+ Eles são mantidos por terceiros z- Versões revisadas podem demorar a chegar z- Versões revisadas podem chegar rápido demais
Componente de Software23 … z+ Os componentes seguem normas z- Podem envolver diversos distribuidores z- O distribuidor poderá sair do negócio