componentes de software - instituto de computação€¦ · “sem dúvida nós produzimos software...

87
Programação Orientada a Objetos Componentes de Software André Santanchè Março 2015

Upload: others

Post on 10-May-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Programação Orientada a Objetos

Componentes de Software

André SantanchèMarço 2015

Page 2: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Componentes

▪ “Aquilo que entra na composição de alguma coisa.” (Aurélio, 2004)

▪ “que ou o que compõe ou ajuda na composição de algo” (Houaiss, 2006)

Page 3: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Porque usar componentes?

▪ Componentes na engenharia:“Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho em confrontos com as pessoas de hardware porque eles são os industriais e nós somos os lavradores.” (Mcilroy, 1968)

Tradução do original feita pelo autor: “We undoubtedly produce software by backward techniques. We undoubtedly get the short end of the stick in confrontations with hardware people because they are the industrialists and we are the crofters.” (Mcilroy, 1968)

Page 4: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Composição

▪ “Composition enables prefabricated 'things' to be reused by rearranging them in ever-new composities”. (Szyperski, 2002)

Page 5: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

O que é um componente?

▪ “Today, few terms in the software industry are less precise than component software.” (Olsen, 2006)

Page 6: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

O que é um componente?Características Comuns

▪ Entidade concebida para ser composta

▫ do latim componens, derivado de componere, que quer dizer “colocar junto”.

▪ Publica sua funcionalidade através de uma interface

▫ interface guia relacionamento componente x ambiente

▪ Componentes podem ser aninhados em outros componentes

▫ componentes e sub-componentes

Page 7: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

O que é um componente?Características Desejáveis

▪ Contém código binário que implementa a funcionalidade declarada na interface

▪ Serviços acessíveis exclusivamente pela interface (black-box)

▪ Pacote padrão para distribuição

Page 8: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Diagrama de Componentes

ProvidedInterfaces

RequiredInterfaces

Page 9: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Componentes x Objetos

▪ Componentes são unidades de distribuição, objetos não. (Szyperski, 2002)

Page 10: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Estudo de Caso

Componentização Sucessiva

Page 11: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Estudo de Caso

Componentização Sucessiva

▪ Programa para gerar identificadores únicos sequenciais.

▪ Mostra uma componentização em granularidades crescentes.

▪ Compara o papel de classes e componentes.

Page 12: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Componentização Sucessiva

Primeira Versão

Gerar identificador simplesUso do Singleton

Page 13: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Primeira Versão

Uso do Padrão Singleton

SimpleSequenceStamp

-instance: SimpleSequenceStamp-lastId: int

+getInstance(): SimpleSequenceStamp+nextId(): String

SequenceStampTest01

Page 14: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Componentização Sucessiva

Segunda Versão

Gerar identificador simples e URIAplicação do Dependency Inversion Principle

Page 15: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Dependency Inversion Principle (DIP)

▪ “Depender das Abstrações. Não depender das Concretizações.” (Martin, 2000)

Page 16: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Segunda Versão

Aplicação do Dependency Inversion Principle

SimpleSequenceStamp

-instance: SimpleSequenceStamp-lastId: int

+getInstance(): SimpleSequenceStamp+nextId(): int

SequenceStamp<<interface>>

+nextId()

SimpleURISequenceStamp

-instance: SimpleURISequenceStamp-lastId: int

+getInstance(): SimpleURISequenceStamp+nextId(): int

SequenceStampTest02

Page 17: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Componentização Sucessiva

Terceira Versão

Acrescentando capacidade de armazenamentoMini Framework

Page 18: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Terceira Versão

Mini Framework

SimpleSequenceStamp

SequenceStamp<<interface>>

SimpleURISequenceStamp

SequenceStorage<<interface>>AbstractSequenceStamp

SequenceStorageException<<exception>>

Exception<<exception>>

SequenceStampException<<exception>>

DatabaseSequenceStorage FileSequenceStorage

Page 19: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Terceira Versão

Detalhamento SequenceStamp

SimpleSequenceStamp

-instance: SimpleSequenceStamp

+createInstance(idType, SequenceStorage storage): SimpleSequenceStamp+getInstance(): SimpleSequenceStamp+nextId(): int

SequenceStamp<<interface>>

+nextId()

SimpleURISequenceStamp

-instance: SimpleURISequenceStamp

+getInstance(): SimpleURISequenceStamp+createInstance(idType, SequenceStorage storage, prefix): SimpleURISequenceStamp+nextId(): int

AbstractSequenceStamp

#lastId: int

#init(byte idType, SequenceStorage storage)#persistId()

Exception<<exception>>

SequenceStampException<<exception>>

Page 20: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Terceira Versão

Detalhamento SequenceStorage

SequenceStorage<<interface>>

+getLastSequence(): String+updateLastSequence(String lastSequence)

SequenceStorageException<<exception>>

Exception<<exception>>

DatabaseSequenceStorage

-instance: DatabaseSequenceStorage

+createInstance(String parameters): DatabaseSequenceStorage+getInstance(): DatabaseSequenceStorage+getLastSequence(): String+updateLastSequence(String lastSequence)

FileSequenceStorage

-instance: FileSequenceStorage

+createInstance(String parameters): FileSequenceStorage+getInstance(): FileSequenceStorage+getLastSequence(): String+updateLastSequence(String lastSequence)

Page 21: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Terceira Versão

Detalhamento Exceptions

SequenceStorageException<<exception>>

Exception<<exception>>

SequenceStampException<<exception>>

Page 22: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Componentização Sucessiva

Quarta Versão

Interface única para componenteUsando o padrão Facade

Page 23: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Classes e Componentes

Quarta Versão

SimpleSequenceStamp

SequenceStamp<<interface>>

SimpleURISequenceStamp

SequenceStorage<<interface>>

AbstractSequenceStamp

SequenceStorageException<<exception>>

SequenceStampException<<exception>>

DatabaseSequenceStorageFileSequenceStorage

Stamp<<interface>>

+nextId(): String

StampComponent

+createInstance(stampType, storageType): Stamp+nextId(): String

AbstractSequenceStorage

StamoException<<exception>>

Page 24: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Digital Content Component (DCC)

Page 25: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Fish DCC

▪ Goal

▫ Draw a character-based Fish

_ |\/O\ |/\_/

Page 26: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Step 1Modeling

Page 27: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

DCC Principle

▪ Publicly available DCC methods are exclusively accessed through DCC interfaces

Page 28: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Provided Interface

▪ Specifies services provided by a component

Page 29: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Component and Interface

Fish

IFish

Provided Interface

Software Component

Page 30: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Fish

+fishImage()

Fish Modeling

Page 31: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Fish

+fishImage()

IFish<<interface>>

+fishImage()

Fish Modeling

Page 32: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

Fish

+fishImage()

IFish<<interface>>

+fishImage()

Fish Modeling

Page 33: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

All components mustimplement this interface.

Fish

+fishImage()

IFish<<interface>>

+fishImage()

Fish Modeling

Page 34: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

ComponentBase

+queryInterface(interfaceId: String): ISupports

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

All components mustimplement this interface.

Fish

+fishImage()

IFish<<interface>>

+fishImage()

Fish Modeling

Page 35: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

ComponentBase

+queryInterface(interfaceId: String): ISupports

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

All components mustimplement this interface.

Implements all componentbasic services.

Fish

+fishImage()

IFish<<interface>>

+fishImage()

Fish Modeling

Page 36: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

ComponentBase

+queryInterface(interfaceId: String): ISupports

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

All components mustimplement this interface.

Implements all componentbasic services.

Fish

+fishImage()

IFish<<interface>>

+fishImage()

Fish Modeling

Page 37: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Step 2Identifying

Page 38: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

URI-based Identification

▪ DCC identification approach is based on URIs

▪ See details inhttp://apps.sourceforge.net/mediawiki/infrabig/index.php?title=DCC_Identification

Page 39: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Creating an Identification

▪ URI prefix + Class path

▪ Ex.:

1)infraBig/DCC URI prefix:http://purl.org/NET/dcc/

2)Component class path:examples.fish.s01.Fish

3)Result:http://purl.org/NET/dcc/examples.fish.s01.Fish

Page 40: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Step 3Documenting

Page 41: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Interface Card

Title Fish Interface Id http://purl.org/NET/dcc/examples.fish.s01.IFish

Author André Santanchè Goal Interface for the Fish component that enables to trigger the fish drawing.

Methods fishImage Draw the fish.

UML Diagram

IFish<<interface>>

+fishImage()

Page 42: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Component CardTitle Fish Component Id http://purl.org/NET/dcc/examples.fish.s01.Fish

Author André Santanchè Goal Draw a character-based Fish. Provided Interfaces

Fish Interface http://purl.org/NET/dcc/examples.fish.s01.IFish

UML Diagram

Fish

+fishImage()

IFish<<interface>>

+fishImage()

Page 43: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Step 4Implementing

Page 44: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Cards to Components

IFish

/** * Interface for the Fish component that * enables to trigger the fish drawing. * * @author Andre Santanche * */

public interface IFish extends ISupports

Author André Santanchè Goal Interface for the Fish component that enables to trigger the fish drawing.

Page 45: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Cards to Components

IFish

@ComponentInterface( "http://purl.org/NET/dcc/examples.fish.s01.IFish")

public interface IFish extends ISupports

Id http://purl.org/NET/dcc/examples.fish.s01.IFish

Page 46: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Cards to Components

IFish

/** * Draw the fish. */

public String fishImage();

fishImage Draw the fish.

Page 47: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Cards to Components

Fish

@Component( id="http://purl.org/NET/dcc/examples.fish.s01.Fish", provides={"http://purl.org/NET/dcc/examples.fish.s01.IFish"} )

Id http://purl.org/NET/dcc/examples.fish.s01.Fish

Provided Interfaces

Fish Interface http://purl.org/NET/dcc/examples.fish.s01.IFish

Page 48: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Step 5Using

Page 49: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Instantiation and Abstract Factory

▪ DCCs are instantiated using the Abstract Factory Design Pattern

▪ See detailed description in:

▫ Gamma, E. Helm, R. Johnson, R. Vlissides, J. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.

Page 50: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Creating a Global Factory

ContextFactory

createGlobalFactory()

(Java Local)Global Factory

Default Global Factory

Page 51: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Creating DCCs using the Factory

ContextFactory

createInstance()

(Java Local)Global Factory

createInstance()

createInstance()

Page 52: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

DCC Repository

ComponentFactory

Fish

Application

DCC Repository

Fish DCC Id

Page 53: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

ComponentFactory

Fish

Application

DCC Repository

Fish DCC Id

Fish

Fish

DCC Repository

Page 54: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Temporary Repository

PermanentRepository

TemporaryRepository

DCC Prototypes(development)

Final DCCs(deployment)

Page 55: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

PermanentRepository

TemporaryRepository

registerPrototype( )

Fish.class

Fish

Temporary Repository

Page 56: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Creating a DCC using the Factory

ComponentFactory

createInstance( )

http://purl.org/NET/dcc/examples.fish.s01.Fish

Fish DCC Id

Fish

Page 57: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Objetivo do DCC

▪ Registrar um conjunto de números e calcular a soma e média destes números.

Page 58: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Delimitação

▪ DCC deve ter delimitações explícitas

▫ Essencial para distribuição e reuso

▫ Estratégia básica: único pacote

▪ Pacote do componente de estatísticas:

▫ pt.c02foundations.statistics.s01

Page 59: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Projetando o DCC

Page 60: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Componente e Interface Provida

StatisticsComponent

IStatistics

Page 61: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

StatisticsComponent

+valueSet: Vector

+insertValue(float value)+sum(): float+average(): float

Page 62: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

IStatistics<<interface>>

+void insertValue(float value)+float sum()+float average()

StatisticsComponent

+valueSet: Vector

+insertValue(float value)+sum(): float+average(): float

Page 63: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

IStatistics<<interface>>

+void insertValue(float value)+float sum()+float average()

StatisticsComponent

+valueSet: Vector

+insertValue(float value)+sum(): float+average(): float

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

All components mustimplement this interface.

Page 64: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

IStatistics<<interface>>

+void insertValue(float value)+float sum()+float average()

StatisticsComponent

+valueSet: Vector

+insertValue(float value)+sum(): float+average(): float

ComponentBase

+queryInterface(interfaceId: String): ISupports

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

All components mustimplement this interface.

Implements all componentbasic services.

Page 65: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

IStatistics<<interface>>

+void insertValue(float value)+float sum()+float average()

StatisticsComponent

+valueSet: Vector

+insertValue(float value)+sum(): float+average(): float

ComponentBase

+queryInterface(interfaceId: String): ISupports

ISupports<<interface>>

+queryInterface(interfaceId: String): ISupports

All components mustimplement this interface.

Implements all componentbasic services.

Page 66: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Criando uma Identificação

▪ URI prefixo + caminho da Classe

▪ Ex.:

1)DCC URI Namespace:http://purl.org/dcc/

2)Caminho da classe do componente:pt.c02foundations.statistics.s01.StatisticsComponent

3)Resultado:http://purl.org/dcc/pt.c02foundations.statistics.s01.IStatistics

Page 67: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Documentação

Page 68: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho
Page 69: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho
Page 70: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Codificação em Java

Page 71: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Da Ficha ao Componente

IStatistics

/** * Interface for a Statistics Component that registers a set of numbers * and calculates the sum and average of these numbers. * * @author Andre Santanche */public interface IStatistics extends ISupports

Page 72: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Da Ficha ao Componente

IStatistics

@ComponentInterface("<http://purl.org/dcc/pt.c02foundations.statistics.s01.IStatistics>"

)

public interface IStatistics extends ISupports

Page 73: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Da Ficha ao Componente

IStatistics

/**

* Insert a value into the set.

* @param value the value to be inserted into the set

*/

public void insertValue(float value);

Page 74: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Da Ficha ao Componente

StatisticsComponent

@Component( id = "<http://purl.org/dcc/pt.c02foundations.statistics.s01.StatisticsComponent>", provides = {"<http://purl.org/dcc/pt.c02foundations.statistics.s01.IStatistics>"})

Page 75: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Caso 1

Primeira Versão

StatisticsUsando um Componente

Page 76: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Criação da Fábrica Global

Page 77: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Criando componentes usando a fábrica

Page 78: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Criando componentes usando a fábrica

Component Factory

createInstance( )

<http://purl.org/dcc/pt.c02foundations.statistics.s01.StatisticsComponent>

StatiscsComponent Id

StatiscsComponent

Page 79: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Case Study 2

Displaying Statistics

Page 80: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Interfaces Providas e Requeridas

ProvidedInterfaces

RequiredInterfaces

Page 81: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Interface RequeridaIStatisticsReceptacle

StatisticsComponent StatisticsGUIComponent

IStatistics IRequires<IStatistics>

Page 82: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Interface RequeridaIStatisticsReceptacle

StatisticsComponent StatisticsGUIComponent

IStatistics IStatisticsReceptacle

Page 83: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

IStatisticsReceptacle

IStatistics<<interface>>

+void insertValue(float value)+float sum()+float average()

IStatisticsReceptacle<<interface>>

+void connect(IStatistics provider)

Page 84: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Bibliografia▪ Bachmann, F.; Bass, L.; Buhman, C.; Dorda, S.C.; Long, F.; Robert, J.

& Wallnau, R.S.K. Volume II: Technical Concepts of Component-Based Software Engineering, 2nd Edition. Carnegie Mellon University, 2000.

▪ Broy, M.; Deimel, A.; Henn, J.; Koskimies, K.; Plásil, F.; Pomberger, G.; Pree, W.; Stal, M. & Szyperski, C. What characterizes a (software) component? Software -- Concepts & Tools, Springer-Verlag Heidelberg, 1998, 19, 49-56.

▪ Gamma, E. Helm, R. Johnson, R. Vlissides, J. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.

Page 85: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

Bibliografia▪ Hopkins, J. Component primer. Communications ACM, ACM Press,

2000, 43, 27-30.

▪ Martin, R. C. Design Principles and Design Patterns. Object Mentor, 2000.

▪ Mcilroy, M. D. Naur, P. & Randell, B. (ed.) Mass Produced Software Components. Software Engineering: Report of a conference sponsored by the NATO Science Committee, 1968.

▪ Olsen, G. From COM to Common. Queue, ACM Press, 2006, 4, 20-26.

▪ Szyperski, C. Component Software: Beyond Object-Oriented Programming. Addison-Wesley Longman Publishing Co., Inc., 2002.

Page 86: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

André Santanchèhttp://purl.org/andresantanche

Page 87: Componentes de Software - Instituto de Computação€¦ · “Sem dúvida nós produzimos software usando técnicas ultrapassadas. Sem dúvida nós ficamos com o lado curto do palitinho

License▪ These slides are shared under a Creative Commons License.

Under the following conditions: Attribution, Noncommercial and Share Alike.

▪ See further details about this Creative Commons license at:http://creativecommons.org/licenses/by-nc-sa/3.0/