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 depro essos trabalhadores (
workers
) e re olhe os resultados de ada trabalho. Suaassinaturade 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 emtarefas (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 emtarefas queserão distribuídas entre os pro essos trabalhadores;
◮
work
: tipodo omponente abstrato que dene a omputação realizadasobreumatarefa pelos pro essos trabalhadores;
◮
result
_type
: tipo da estrutura de dados que representa o resultado de umatarefa;
◮
gather
_strategy
: tipo do omponente abstrato que mapeará os resultadosal uladospor ada pro esso trabalhador nasaída;
◮
output
_type
: tipodaestruturadedadosquerepresentaasaídada omputaçãoPor 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 deNumeri 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 deneum 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 deintegraçã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