Componente de Software1 Desenhando um componente de software.

23
Componente de Software 1 Desenhando um componente de software

Transcript of Componente de Software1 Desenhando um componente de software.

Page 1: Componente de Software1 Desenhando um componente de software.

Componente de Software 1

Desenhando um componente de software

Page 2: Componente de Software1 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

Page 3: Componente de Software1 Desenhando um componente de software.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Componente de Software 23

+ Os componentes seguem normas- Podem envolver diversos

distribuidores- O distribuidor poderá sair do

negócio