5 ESPECIFICAÇÃO DO MODELO PROPOSTO
5.1 Formalismos Utilizados
5.1.3 PROSOFT Algébrico
PROSOFT-Algébrico (descrito em (NUNES, 1992; 1994)) é um formalismo que permite a descrição de tipos abstratos de dados através de um paradigma algébrico baseado em objetos. Esse paradigma adota uma abordagem data-driven (NUNES, 1994) para o desenvolvimento de software, isto é, estimula o desenvolvimento de software inicialmente através da composição dos tipos de dados necessários.
O PROSOFT-Algébrico é, portanto, uma técnica orientada a propriedades que define um objeto matemático baseado nas relações entre as operações desse objeto (COHEN, 1986). Cada tipo de dados é instanciado a partir de um ATO - Ambiente de Tratamento de Objetos. A figura 5.1 apresenta o esquema gráfico de um sistema de software desenvolvido sob o paradigma do PROSOFT, sendo composto por um número de ATOs.
Cada ATO é dividido em três partes, como mostrado à direita na figura 5.1. A primeira parte tem como objetivo definir uma instanciação do tipo através de uma
linguagem gráfica (classe). A instanciação é uma árvore cujas folhas são referências a outros tipos de dados e cujos nodos são tipos de dados compostos. A segunda parte especifica a funcionalidade (interface) das (novas) operações. A terceira parte define a semântica das funções (axiomas) que atuam sobre o objeto.
ICS
ICS
ATO 4 ATO N
ATO 1 ATO 2 ATO 3
Nome do ATO
Classe Interface Funções Tipo ... ... ... Tipo ... ... ... .... op1(x, y, z) = if (x = y) then op2(x) ....else ICS(ATO-Z, op, z, <x, y>)
...
... ... ...
op1(_,_,_, ..., _): sort1, sort2, ..., sortN Æ sort op2(_,_,_, ..., _): sort1, sort2, ..., sortN Æ sort op3(_,_,_, ..., _): sort1, sort2, ..., sortN Æ sort
Instanciação do Tipo de dados Interface de Comunicação do Sistema Especificação Algébrica
Figura 5.1: Composição de ATOs Algébricos na descrição de software no ambiente PROSOFT
Os tipos de dados PROSOFT são classificados como primitivos (Integer, String, Real, Date e Boolean), compostos (Conjunto, Lista, Mapeamento, Registro e União Disjunta) ou definidos pelo usuário. Os tipos primitivos e compostos são incluídos automaticamente em cada ATO e, portanto, podem ser imediatamente usados. Quando uma operação de um ATO faz referência a uma operação de um outro ATO, então o mecanismo de inclusão não se aplica. A referência, nesse caso, deve ser feita através do mecanismo de envio de mensagem usando a Interface de Comunicação do Sistema (ICS):
ICS(<nome do ATO>, <operação>, <seletor>, <argumentos*>)19
Cada ATO trata apenas de termos do sort definido pelo próprio ATO. Assim, se um ATO mandar uma mensagem via ICS, então, o ATO receptor da mensagem procura a operação contida na mensagem, substitui os parâmetros pelos seus respectivos argumentos, aplica a operação e devolve, novamente via ICS, para o ATO emissor, o resultado. Cada operação do ATO possui um parâmetro que é do tipo do sort definido no ATO. Como uma operação pode possuir várias definições, um dos argumentos do tipo do sort definido pelo ATO – denominado seletor - é usado para encontrar a operação.
Cada ATO especifica algebricamente um tipo abstrato de dados. Qualquer termo desse tipo é chamado de objeto e, segundo Nunes (1994), não é similar com o conceito
19
de objeto das linguagens de programação orientadas a objetos20. As instâncias de uma classe (objetos) são entidades passivas, que não têm capacidade de responder a estímulos (mensagens) (DAUDT, 1992). Portanto, os termos PROSOFT armazenam dados mas não podem manipulá-los: toda manipulação de dados é descrita através de funções definidas no escopo de um ATO.
Para definir as classes dos ATOs no PROSOFT-Algébrico é usada a linguagem gráfica para instanciação de tipos de dados derivada da notação de Jackson (1983), conforme exemplificado nas figuras a seguir. A definição da classe facilita o desenvolvimento das especificações algébricas, fornecendo uma notação gráfica que é uma instanciação do tipo definido. Uma classe representa a hierarquia de composição de tipos de dados, aonde o nodo superior descreve o nome do Tipo definido e os nodos-folha são associados a tipos primitivos ou definidos pelo usuário.
A figura 5.2 apresenta um exemplo de instanciação textual e gráfica de um tipo abstrato Lista. Nesse exemplo, ATOLISTOFPARAMETERS, LISTS, e PARAMETER são especificações e AtoListOfParameters, List, Item, Parameter e AtoPolExpression são sorts. AtoPolExpression é um sort dado definido pela especificação Item. O objetivo da figura é mostrar uma instanciação da especificação LISTS que define o sort List, com a especificação ITEM que define o sort AtoPolExpression, usando-o no lugar do parâmetro formal Component. Como AtoListOfParameters instancia uma lista, os construtores e operadores para Listas são válidos, e permitem a manipulação dos itens de dados inseridos na lista instanciada.
Representação gráfica para o tipo
Lista (classe PROSOFT)
=
specification ATOLISTOFPARAMETERS include instantiation of LISTS
by PARAMETER
using PARAMETER for Component ATOPOLEXPRESSION for Item
renamed using ATOLISTOFPARAMETERS for List
Figura 5.2: Exemplo da representação gráfica usada na composição de tipos de dados PROSOFT
Exemplos adicionais com os outros tipos de dados compostos (conjunto, mapeamento, união disjunta e registro) são apresentados na figura 5.3.
20
Vale ressaltar que o conceito de Classe empregado no PROSOFT-Algébrico difere do conceito de classes em linguagens de programação orientadas a objetos. Segundo Körbes (1996), uma classe PROSOFT é uma estrutura de dados que corresponde ao que normalmente é chamado de atributos nas linguagens orientadas a objetos.
Lista Conjunto Mapeamento
Registro União Disjunta
Figura 5.3: Notação gráfica para definição de tipos compostos
Comparando-se a especificação algébrica convencional (como o método descrito por Watt (1991)) e o PROSOFT-Algébrico, pode-se dizer que a assinatura da especificação corresponde à instanciação e à interface do ATO. Os axiomas, por sua vez, correspondem às operações do ATO, sendo que a funcionalidade de cada operação é definida na forma de equações. A vantagem fundamental do PROSOFT-Algébrico é que, em função do mecanismo de inclusão automática de tipos compostos e primitivos em um ATO PROSOFT, não é necessário explicitar a “importação” das especificações dos tipos externos como é feito tradicionalmente nos métodos algébricos. Portanto, a comunicação entre ATOs é feita explicitamente através da ICS, em um estilo muito similar à troca de mensagens do paradigma de objetos, onde os componentes são encapsulados e descrevem interfaces bem definidas.
A adoção do PROSOFT-Algébrico (para especificação dos tipos abstratos de dados) proporcionou um mapeamento para a implementação no ambiente PROSOFT-Java21, visto que há uma correspondência para muitos elementos usados na especificação e implementação dos componentes de software descritos nesse paradigma.