M.P.I - 1999/2000 - Trabalho Prático Nr. 2 | |
---|---|
[ DI/UM ] |
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.
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.
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:
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.
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.