U.Minho M.P.I - 1999/2000 - Trabalho Prático Nr. 2
[ DI/UM ]

Introdução

Este trabalho deve ser realizado por grupos com um máximo de três alunos. O trabalho deve ser entregue até ao dia 3 de Janeiro de 2000 na Recepção do Departamento de Informática (ext. 4430) e nele deve constar a listagem do código desenvolvido assim como um pequeno relatório.

O Problema

Pretende-se modelar em HASKELL um sistema de informação para planeamento da produção de uma dada fábrica. Este deverá ser constituído essencialmente por três partes: base de dados de produção , stock e preçário . A parte mais essencial ao sistema é a base de dados de produção , que inclui todas as árvore de produção dos equipamentos que a fábrica produz, indicando as inter-dependências entre as diversas componentes dos equipamentos em produção. Em geral, uma fábrica produz componentes não elementares (equipamentos) a partir de componentes básicos (peças) que compra a outrem. De cada equipamento é armazenado o «esquema» da sua composição em termos de sub-equipamentos e de componentes básicos (peças).

Considere-se, por exemplo, que a fábrica produz material e equipamentos decorativos para o Natal. Entre os seus produtos encontra-se um equipamento an (modelo sintético de «árvore de Natal») com a seguinte composição:

Neste esquema indica-se que cada an é composta de três partes principais: árvore , vaso e decoração . Na composição desta última entram 60 bolas, 3 fitas, e uma unidade de iluminação. Esta última precisa de 200 lâmpadas ('leds'), um fio eléctrico e uma ficha. E assim sucessivamente para as outras partes componentes.

Como se disse, para além do registo de árvores de produção, o sistema deverá incluir ainda um stock e um preçário . O primeiro deverá indicar a quantidade de cada peça armazenada para produção. O segundo registará o preço de custo de cada uma dessas mesmas peças.

Estruturas de Dados e Operações

Comece por definir as estruturas de dados necessárias à resolução do problema apresentado, munindo-as desde logo das correspondentes álgebras e co-álgebras (in e out), do respectivo functor de tipo (map) e dos respectivos catamorfismos, anamorfismos e hilomorfismos (ana, cata e hylo).

Observação: Pode optar por definir cada estrutura e as funções respectivas em módulos HASKELL separados, e utilizar cada um desses módulos através da instrução import qualified. Dessa forma, cada função do módulo T deverá ser identificada pelo nome da função precedida do nome do módulo (ex. T.in, T.out, T.map, T.ana, T.cata e T.hylo).

Pretende-se ainda que sejam consideradas as seguintes funcionalidades:

1.
Cálculo do 'stock' de peças necessário à construção de n equipamentos E;
2.
Cálculo do número de cópias de um equipamento E que se pode construir com um dado stock;
3.
Cálculo do custo de fabrico de um determinado equipamento a partir do custo unitário das peças que o compõem.
4.
Cálculo do investimento a fazer na construção de n equipamentos E em face do 'stock' existente e do preço das peças em falta.

Operações de Visualização

Na continuidade do 1.º Trabalho Prático e aproveitando o know-how entretanto adquirido, pretende-se dotar cada uma das estruturas de dados que definiu com funcionalidades de visualização que permitam:
1.
gerar as tabelas (i.e., listas de tuplos) obtidas como resultado das funções que definiu anteriormente, em formato HTML ;
2.
obter uma representação tabular hierárquica para o esquema de composição de um dado equipamento e, consequentemente, gerar o HTML correspondente (ver módulo Exp.hs disponível no Material Pedagógico );
3.
obter uma representação gráfica da árvore de produção de um dado equipamento, recorrendo a uma Java -applet desenvolvida para o efeito:

Repare que pode «arrastar» os nós do grafo por forma a dar outra disposição à árvore.

A programação de uma applet como a que produz a árvore acima é feita através de um texto que poderá ser incorporado num qualquer documento HTML . Por exemplo, a árvore/grafo acima corresponde à seguinte parametrização da applet Graph.class:

<applet code=Graph.class width=500 height=400>
<param name=sorts value="tronco [1],ramo [20],vaso [1],fio [1],led [200],ficha [1],fita [3],bola [60]">
<param name=opers value="an,arvore [1],decoracao [1],iluminacao [1]">
<param name=edges value="arvore [1]:an,vaso [1]:an,decoracao [1]:an,tronco [1]:arvore [1],ramo [20]:arvore [1],iluminacao [1]:decoracao [1],fita [3]:decoracao [1],bola [60]:decoracao [1],fio [1]:iluminacao [1],led [200]:iluminacao [1],ficha [1]:iluminacao [1]">
</applet>
Nota: para proceder à visualização desta applet, basta copiar o texto que acima se apresentou para um ficheiro e proceder à sua leitura através de um browser HTML . (Tenha cuidado em não introduzir novos espaços ou mudanças de linha.) O ficheiro graph-classes.zip, disponível no material pedagógico da cadeira, deverá ser previamente descompactado nessa mesma directoria.

Valorização

1.
Para efectuar o cálculo do stock necessário à construção de um dado equipamento, considere também a existência de um stock de equipamentos. Por exemplo, considerando o diagrama apresentado acima e supondo a existência em stock de um equipamento iluminação , a lista de material necessário à construção de 2 equipamentos an será:
material quantidade
tronco 2
ramo 40
vaso 2
iluminação 1
fio 1
led 200
ficha 1
fita 6
bola 120

Efectue o mínimo de alterações ao seu programa de modo a incluir essa possibilidade.


Voltar à página principal de MP-I .
Outras disciplinas leccionadas pelo DIUM

12/7/1999
Jose Nuno Oliveira