Pretende-se descrever e especificar sucintamente a informação do domínio de aplicação, e portanto aquela que deve ser reconhecida sem ambiguidade por todos os intervenientes no processo de negociação, nomeadamente Purshaser, Vendor e Suplier.
Parte-se do princípio que a negociação é iniciada por um Purchaser, com o intuito de comprar um computador completo, ou seja, composto pelos seguintes elementos:
Cada um destes elementos varia nas suas características, inunciadas entre (). São estes e apenas estes elementos e características que devem ser considerados/negociadas entre entidades. Os valores das características são também especificados. Numa fase de desenvolvimento posterior, poderão ser consideradas outras características, pelo que se deverá ter em consideração esse facto.
A informação sobre o computador a ser comprado/vendido deve ser colocada dentro duma estrutura do tipo Item que deve seguir o seguinte formato:
Item={computer,Properties} Properties=[Property] Property=CPU | RAM | DISC | MONITOR CPU={cpu,[Property_CPU]} Property_CPU={model,Model_v} | {frequency,Frequency_v} Model_v = P1 | P2 | P3 Frequency_v = 300 | 350 | 400 | 450 | 500
RAM = {ram, Quantity_v} Quantity_v = 32 | 64 | 128 | 256
DISC = {disc, [Property_disc]} Property_disc = {capacity, Capacity_v} | {interface,Interface_v} Capacity_v = 2 | 4 | 8 | 12 Interface_v = ide | scsi MONITOR = {monitor,Width_v} Width_v = 14 | 15 | 17 | 19 | 21
No sentido de ser possível a comparação e posterior escolha entre propostas diferentes, podem ser aplicados vários métodos:
Cada um destes métodos pode ser utilizado individualmente ou combinado com outros. Se
forem combinados, é normal que tenham importâncias diferentes (pesos).
Além disso, as características do computador também devem ter pesos diferentes. Por
exemplo, quando se quantifica se um computador está mais próximo do pedido ou é mais
barato do que outro, sendo as propostas diferentes, terão que ser considerados factores
que relacionem as diversas características.
Na aula foram sugeridos alguns valores (factores) no que se refere à importância dos componentes no computador em geral:
A informação transaccionada entre Purchaser-Vendor-Suplier no que respeita à constituição do computador, é inserida numa estrutura do tipo:
-record(record_item, { what='', % atom() description="" % string() properties=[] % list of record_item, atom() price=0 % number() }).
Como o campo properties pode conter ou um valor (átomo) ou
uma lista de record_item, então esta é uma estrutura
"recursiva".
Por exemplo, na sua constituição mais complexa (considerando a informação
anteriormente declarada), esta estrutura pode ter o seguinte valor:
{record_item,'Computer', [{record_item,'CPU', [{record_item,'Model','Pentium 3',0}, {record_item,'Frequency','300',0}],0}, {record_item,'RAM','128',0}, {record_item,'Disc', [{record_item,'Capacity','12',0}, {record_item,'Interface','SCSI',0}],0}, {record_item,'Monitor','19',0} ],0}
No que toca à interface para manipulação da informação e estruturas descritas, foram desenvolvidas diversas funções simples mas que pela sua combinação é possível manipular de forma bastante simples.
As funções estão divididas por dois módulos Erlang (information.erl, e structs.erl):
information:get_properties/1
information:get_information/1
structs:get_item_properties/2
structs:get_item_values/2
information:get_properties(What) -> List_of_properties What=atom() List_of_properties=[Property] Property=atom()
Nota 1: Esta função retorna os nomes das propriedades de What, sendo What uma propriedade existente na informação descrita aquando da Formalização e Estruturação, ou seja, acedidos através de ?ITEM;
Nota 2: Apenas as propriedades "nível 1" são retornadas;
Nota 3: Se What for uma propriedade mas não tiver propriedades (apenas valores), o resultado é [];
Nota 4: Se What não existir na informação ou for apenas um valor, o resultado é undefined.Exemplo:
information:get_properties('Computer') -> ['CPU','RAM','Disc','Monitor']
information:get_information(What) -> List_of_values What=atom() List_of_values=[Value] Value=atom() | {Property,List_of_values} Property=atom()
Nota 1: Esta função retorna os valores da propriedade What, sendo What uma propriedade existente na informação descrita aquando da Formalização e Estruturação, ou seja, acedidos através de ?ITEM;
Nota 2: Todas os valores/propriedades da propriedade são retornadas, e não apenas o "nível 1", o que permite utilizar o resultado recursivamente;
Nota 3: Se What não existir na informação ou for apenas um valor, o resultado é undefined.Exemplos:
information:get_information('RAM') -> ['32','64','128','256'] information:get_information('CPU') -> [{'Capacity',['2','4','8','12']},{'Interface',['IDE','SCSI']}]
structs:get_item_properties(What,Items) -> undefined | atom() | [Property] What=atom() Items=Item | [Item] Item=record_item Property=atom()
Nota 1: Esta função retorna as propriedades (#record_item.what) associados a What em Items;
Nota 2: Apenas as propriedades "nível 1" são retornadas;
Nota 3: Se What for propriedade de último nível o resultado e' atom() correspondente ao valor da propriedade;
Nota 4: Se What não existir na informação ou for apenas um valor, o resultado é undefined.Exemplo:
Record={record_item,'Computer', [{record_item,'CPU', [{record_item,'Model','Pentium 3',0,0}, {record_item,'Frequency','400',0}],0,0}, {record_item,'RAM','32',0,0}, {record_item,'Monitor','21',0,0}, {record_item,'Disc', [{record_item,'Capacity','8',0,0}, {record_item,'Interface','IDE',0,0}],0,0}],0,1},A = structs:get_item_properties('CPU',Record). % A = ['Model','Frequency']B = struct:get_item_properties('Model',Record). % B = 'Pentium 3'
structs:get_item_values(What,Items) -> undefined | atom() | [Item] What=atom() Items=Item | [Item] Item=record_item
Nota 1: Esta função retorna os valores associados What em Items;
Nota 2: Todas os valores/propriedades de What são retornadas, e não apenas o "nível 1", o que permite utilizar o resultado recursivamente;
Nota 3: Se What não existir na informação ou for apenas um valor, o resultado é undefined.Exemplo:
Record={record_item,'Computer', [{record_item,'CPU', [{record_item,'Model','Pentium 3',0}, {record_item,'Frequency','400',0}],0}, {record_item,'RAM','32',0}, {record_item,'Monitor','21',0}, {record_item,'Disc', [{record_item,'Capacity','8',0}, {record_item,'Interface','IDE',0}],0}],0},A = structs:get_item_values('CPU',Record). % A = [{record_item,'Model','Pentium 3',0},{record_item,'Frequency','400',0}],0}]B = struct:get_item_values('Model',A). % B = 'Pentium 3'
Última actualização: 05/02/05