• No results found

Det meste av torvjorda er løs og lett, med den følge at bæreevnen for dyr og

Uma ara terísti a fundamental em plataformas de omponentes, também

presente em linguagens orientadas a objetos, é a separação entre a espe i ação

e o que se deve implementar. Mais espe i amente em relação a uma plataforma

de omponentes voltados a CAD, a apa idade de espe ializara implementação de

um omponente de a ordo om suposições do ambiente no qual ele vai exe utar,

o que envolve tanto o hardware quanto o software, permitindo ainda que essas

espe ializações oexistam e estejam a essíveis às apli ações, é importante para

explorar o desempenho poten ial da plataforma de exe ução. O sistema de tipos

Hash (HTS) aborda esses requisitos ao estabele er dois tipos de omponentes:

abstratos e on retos.

Um omponente abstrato dene um ontrato a ser umprido na implementação

de um onjunto de omponentes on retos que implementam o mesmo interesse de

software, denido pelo ontrato, para diferentes suposições emrelação aoambiente

de exe ução do omponente. Ao onjunto de suposições possíveis que podem ser

feitas para variar a implementação dos omponentes on retos de um omponente

abstratodá-seonomede ontexto. NoHTS,o ontextodeum omponenteabstratoé

denido atravésde um onjunto de parâmetros de ontexto, os quaisassemelham-se

a parâmetros de tipo de linguagens de programação usuais. Cada parâmetro de

ontexto formalpossui um nome e um limite superior denido porum omponente

Por exemplo, onsidere o omponente abstrato Farm, uja onguração foi

apresentada na Figura 2.10. Ele implementa um esqueleto de programação farm,

no qual um pro esso gerente (

manager

) distribui trabalho para um onjunto de

pro essos trabalhadores (

workers

) e re olhe os resultados de ada trabalho. Sua

assinaturade parâmetrosde ontexto formaisé denida a seguir,usandoa notação

empregadapeloHPE:

Farm

[input

_

type =

I

:

Data

,

output

_

type =

O

:

Data

,

job

_

type =

J

:

Data

,

result

_

type =

R

:

Data

,

scatter

_

strategy =

S

:

S atter

[data

_

source =

I

, data

_

target =

J

],

gather

_

strategy =

C

:

Gather

[data

_

source =

R

, data

_

target =

O

],

work =

W

:

Work

[data

_

input =

J

, data

_

output =

R

]]

Nessa notação, utilizam-se variáveis asso iadas aos identi adores dos

parâmetrosde ontexto am de evitar onitosde nomes. Ao todo, Farmdene 7

parâmetros de ontexto. Esses parâmetros permitemque um omponente on reto

de Farmseja espe ializado onforme o ontexto denido pelas seguinte suposições

representadas pelos parâmetros:

input

_

type

: tipo daestrutura de dados da entrada que será parti ionada em

tarefas (jobs),as quaisserão distribuídas entre os pro essostrabalhadores;

job

_

type

: tipodaestrutura de dados que representa uma tarefa;

scatter

_

strategy

: tipo do omponente abstrato que mapeará a entrada em

tarefas queserão distribuídas entre os pro essos trabalhadores;

work

: tipodo omponente abstrato que dene a omputação realizadasobre

umatarefa pelos pro essos trabalhadores;

result

_

type

: tipo da estrutura de dados que representa o resultado de uma

tarefa;

gather

_

strategy

: tipo do omponente abstrato que mapeará os resultados

al uladospor ada pro esso trabalhador nasaída;

output

_

type

: tipodaestruturadedadosquerepresentaasaídada omputação

Por exemplo, é possível denir a implementação de um omponente on reto

genéri o para Farm, oqual denominar-se-á FarmImpl, suprindo os seus parâmetros

de ontexto om os seus próprioslimites superiores:

FarmImpl

:=

Farm

[input

_

type =

Data

,

output

_

type =

Data

,

job

_

type =

Data

,

result

_

type =

Data

,

scatter

_

strategy =

S atter

[data

_

source =

Data

,

data

_

target =

Data

],

gather

_

strategy =

Gather

[data

_

source =

Data

,

data

_

target =

Data

],

work =

Work

[data

_

input =

Data

,

data

_

output =

Data

]]

Por ser genéri o, esse omponente on reto poderá ser ligado a qualquer

omponente aninhado de algum omponente em exe ução ujo tipo seja Farm

apli ado a algum ontexto bem formado, ou seja, um ontexto no qual ada

parâmetro de ontexto formal é suprido por um omponente abstrato ujo tipo

é um subtipo do limite superior do parâmetro. Por exemplo, seja o omponente

abstrato Numeri alIntegrator, ujos omponentes on retos implementam

uma integração numéri a de forma paralela utilizando um farm. Para isso, possui

um omponenteaninhado hamadofarm doseguinte tipo:

Farm

[input

_

type =

IntegralCase

[

F

],

output

_

type =

Double

,

result

_

type =

List

[

Double

],

job

_

type =

List

[

IntegralCase

[

F

]],

scatter

_

strategy =

DistributeInterval

[data

_

source =

IntegralCase

[

F

],

data

_

target =

IntegralCase

[

F

]],

gather

_

strategy =

SumAreas

[data

_

source =

Double

,

data

_

target =

Double

],

work =

ApproximateIntegral

[data

_

input =

List

[

IntegralCase

[

F

]],

data

_

output =

Double

]]

, onde

F

é a variável asso iada ao parâmetro de ontexto fun tion de

Numeri alIntegrator, o qual dene o omponente abstrato que espe i a a

Portanto, em uma integração numéri a onforme Numeri alIntegrator, a

entrada é denida por um omponente do tipo IntegralCase

[F ]

, o qual dene

um aso de integração omo uma função representada por um omponente do

tipo

F

asso iado a um intervalo de integração pré-denido em

[0, 1]

. Um aso de

integraçãoéquebradoporum omponentedotipoDistributeIntervalemvárias

listas de asos de integração que denem as tarefas, parti ionando-se o intervalo

ini ial em vários sub-intervalos. Assim, ada pro esso trabalhador deverá re eber

uma lista de asos de integração e al ular, através de um omponente do tipo

ApproximateIntegral, um valor de ponto-utuante de pre isãodupla que será

en apsulado em um omponente do tipo Double, representando o resultado de

umatarefa. Osresultados al uladospor ada pro essotrabalhador serão oletados

por um omponente do tipo SumAreas, o qual al ula a soma dos resultados e o

en apsula emum omponente dotipo Double quedene asaída.

Os omponentes abstratos asso iados aos parâmetros de ontexto do tipo de

um omponente aninhado, omo farm, espe i am tanto o ontexto que será

usado para o sistema de resolução automáti a de omponentes implementado pelo

Ba k-End es olher uma implementação apropriada de Farm quanto o ontexto

atual que será apli ado ao omponente on reto es olhido. Sob a primeira

perspe tiva,o omponenteabstratoapli adoaum ontexto deneumpolimorsmo

existen ial, permitindo espe ializar a implementação do omponente aninhado de

a ordo omo ontexto,enquantosobasegundaperspe tiva,deneumpolimorsmo

universal, uma vez que o omponente on reto pode ser mais genéri o do que

o ontexto requisitado, possuindo parâmetros de tipo ujos limites superiores

são denidos pelos parâmetros de ontexto atuais que deniram o ontexto de

implementação do omponente on reto. Por exemplo, o omponente aninhado

farm de Numeri alIntegrator pode ser ligado em tempo de exe ução a uma

instân ia do omponente on reto FarmImpl, pois seu tipo é um subtipo do tipo

asso iado a farm. Caso houvesse alguma implementação de Farmmais espe í a,

seria es olhida aoinvés de FarmImpl. Por exemplo, alguémpoderia desenvolver um

omponente on reto para Farm espe ializado para lidar om o aso onde tarefas

são listas de itens a serem submetidos aos pro essos trabalhadores, omo é o aso

do tipo de farm. De fato, o HTS tem sido formalizado pelo mapeamento a tipos