PUCRS - Faculdade de Informatica
Laboratorio de Programacao II (EC), semestre 2004/1.
Prof. Eduardo Augusto Bezerra
Mestrando Daniel Bortolas
 
Trabalho Final - Simulacao de uma linha de producao
 

O trabalho consiste na implementacao de um programa em C++ para simular o funcionamento de uma linha de producao com tres estacoes. A primeira estacao e' responsavel pela gerencia do estoque de componentes a serem utilizados na fabricacao das peças (Almoxarifado). A segunda estacao e' responsavel pela preparacao dos componentes a serem utilizados na fabricacao de uma peça (Usinagem). A terceira e ultima estacao realiza a montagem da peça, unindo os componentes que a compoe (Montagem). Operacoes sobre arquivos e estruturas de dados na memoria principal sao executadas de forma a realizar a simulacao da linha de producao. Por exemplo, a retirada do estoque dos componentes necessarios para construir uma peça e' simulada pela remocao (ou atualizacao) de nodos em uma arvore que representam os componentes reais. Outro exemplo e' a simulacao da montagem da peça, que se da' pela realizacao da soma dos volumes dos componentes individuais a serem utilizados na peça. 

Os arquivos e estruturas de dados utilizados em cada um dos estagios (estacoes) sao discutidos a seguir, juntamente com a descricao de cada uma das estacoes da linha de producao simulada.

 

Estacao Almoxarifado

 

O estoque de componentes disponiveis para fabricacao das peças e' representado, no almoxarifado, por intermedio de uma lista de componentes armazenada em um arquivo em disco. Este arquivo contem todos os componentes disponiveis, e conforme as peças forem sendo produzidas, o estoque deve ser atualizado e os componentes utilizados devem ser removidos do arquivo. Os componentes necessarios para fabricar uma determinada peça tambem sao informados ao sistema por intermedio de listas armazenadas em arquivos. Assim, a estacao Almoxarifado possuira' diversos arquivos contendo listas de componentes, sendo um para cada peça a ser fabricada, alem do arquivo com os componentes em estoque. Neste estagio Almoxarifado devera' ocorrer a seguinte sequencia de eventos:

  1. O arquivo contendo a lista de componentes (estoque) e' lido e a partir deste e' criada, na memoria principal, uma estrutura de dados do tipo arvore (ABP) contendo todo o estoque. A arvore devera' ser desenvolvida, obrigatoriamente, a partir das classes abstratas fornecidas. Criar instancias da ABP utilizando, obrigatoriamente, uma referencia para a classe base (abstrata), por exemplo: ABP *p = new MyABP(); Cada registro desse arquivo contem os seguintes campos: "Codigo do componente"; "Tipo do componente"; "Descricao"; "Quantidade em estoque"; "X"; "Y"; "Z". Nao existem codigos de componentes repetidos no arquivo. O tipo do componente pode ser: Cone, Cilindro ou Paralelogramo. Para um paralelogramo, os campos X, Y e Z representam, respectivamente, a largura, altura e profundidade do componente. Para os demais tipos  de componentes, os campos X e Y representam, respectivamente o raio e altura, sendo que o Z nao e' utilizado.
  2. No mesmo diretorio onde se encontra o arquivo de estoque, estarao tambem os arquivos de peças a serem montadas. Cada um desses arquivos contem os codigos de todos os componentes a serem utilizados na montagem da peça. Cada registro de um arquivo de peças contem apenas o campo "Codigo do componente". O campo Codigo e' utilizado para encontrar o componente no arquivo descrito no item 1 e obter as demais informacoes.
  3. Conforme apresentado na figura a seguir, a estacao Almoxarifado utiliza como entrada de dados os arquivos descritos anteriormente. Na etapa de processamento sao utilizadas as estruturas de dados arvore e lista encadeada, e a saida fornecida por esta estacao, a ser utilizada na proxima estacao, e' tambem uma lista encadeada, construida a partir de informacoes obtidas da arvore e das listas.
  4. Na etapa de processamento, carregar em uma lista encadeada todos os registros do arquivo de uma peça. Criar instancias da lista utilizando, obrigatoriamente, uma referencia para a classe base (abstrata), por exemplo: List *p = new MyList(); Apos isso, para cada nodo desta lista: procurar o componente na arvore, utilizando o campo Codigo como chave; simular a retirada do componente do estoque decrementando a quantidade de componentes no nodo da arvore; criar um novo nodo na lista de saida contendo o tipo de componente, as dimensoes do componente (X, Y e Z).
  5. Enviar a nova lista de componentes para a Estacao Usinagem.
  6. Repetir os itens 4 e 5 para todos os arquivos de peças existente no diretorio (Peça 1, Peça2, ..., Peça n). 

 

Estacao Usinagem

 

A Estacao Usinagem e' responsavel por realizar os cortes necessarios nos componentes a serem utilizados na fabricacao da peça. Esta estacao recebe como entrada a lista fornecida como saida na Estacao Almoxarifado, e um arquivo contendo regras de usinagem para os componentes de cada peça a ser fabricada. As regras sao utilizadas para informar para a estacao Usinagem como o componente deve ser cortado. Todos os nodos da lista sao visitados, e a regras definidas no arquivo sao aplicadas na dimensao, X, Y ou Z indicada na regra. Por exemplo, uma regra definida como "10 X" significa que a dimensao X do componente deve ser cortado (reduzido) em 10%. O arquivo de regras possui tantas linhas quantos forem os nodos da lista (numero de componentes da peça). Esta estacao produz como saida a mesma lista encadeada, porem com todas as dimensoes acertadas de acordo com as regras, simulando assim os cortes realizados na usinagem. A figura a seguir ilustra o processo realizado nesta estacao.

 

Estacao Montagem

 

A Estacao Montagem recebe como entrada a lista fornecida como saida pela Estacao Usinagem. Todos os nodos sao visitados, e para cada nodo (cada componente) e' realizado o calculo da volume do componente, de acordo com o tipo de cada um. A simulacao da montagem da peça e' realizada por intermedio da soma de todas os volumes. A Estacao Montagem fornece como saida um valor numerico que representa o somatorio dos volumes de todos os componentes contidos na lista, utilizados na montagem da peça.

 

Arquivos a serem utilizados na elaboracao do programa

 

As seguintes classes devem ser utilizadas, obrigatoriamente, na implementacao do programa.

  • Classe abstrata para a ABP (ABP.h)
  • Classe com as implementacoes para a ABP abstrata (MyABP.cpp)
  • Classe abstrata para os componentes (Componente.h)
  • Classe abstrata para a lista encadeada (List.h)
  • Classe com as implementacoes para a lista abstrata (MyList.cpp)
  • Classe abstrata para o Controlador (Controlador.h)
  • Classe abstrata para o  Almoxarifado (Almoxarifado.h)
  • Classe abstrata para a Usinagem (Usinagem.h)
  • Classe abstrata para a Montagem (Montagem.h)
  • Arquivo exemplo para o estoque a ser utilizado como entrada na estacao Almoxarifado (estoque.txt)
  • Arquivos exemplo para as peças a serem utilizadas como entrada na estacao Almoxarifado (Peca1.txt, Peca2.txt, Peca3.txt)
  • Arquivos exemplo para as regras de usinagem a serem utilizadas como entrada na estacao Usinagem (RegraPeca1.txt, RegraPeca2.txt, RegraPeca3.txt)
  • Programa exemplo de uso de template para auxiliar na utilizacao da classe List (ver List<Componente> em Almoxarifado.h, Usinagem.h e Montagem.h) ExemploUsoTemplate.cpp

Obs 1. Nas classes que herdam as interfaces fornecidas (as classes abstratas: ABP, List, Componente, Controlador, Almoxarifado, Usinagem e Montagem), utilizar APENAS costrutores padrao sem paramentros.

Obs 2. Para aqueles que estao enfrentando dificuldades para utilizar as classes com templates, e que acreditam que nao vao conseguir concluir a implementacao dentro do prazo, uma alternativa e' a utilizacao da versao alternativa contida em arquivos_tf_alternativo.zip que utiliza void* no lugar do template. E' importante ressaltar que a nota maxima sera' para aqueles que implementarem a versao com template na forma descrita na especificacao do trabalho. A forma alternativa e' apenas para ajudar aqueles com problemas a apresentar um programa funcionando, e conseguirem tambem uma boa nota.

 

Etapas sugeridas para o projeto e implementacao do trabalho

 

  1. Utilizar a abordagem "dividir para conquistar", implementando e testando os modulos em separado.
  2. Utilizar o conceito de re-usabilidade do paradigma de orientacao a objetos, empregando os objetos arvore e lista desenvolvidos durante o semestre.
  3. Utilizar as dicas sobre arquivos fornecida nas aulas.
  4. Preparar uma interface com o usuario bastante simples, que possibilite, por exemplo, informar os nomes dos arquivos de entrada, e listar os volumes de todas as peças fabricadas.
  5. Preparar um diagrama de classes, nao apenas para utilizar como documentacao do projeto, mas tambem para organizar o planejamento do desenvolvimento do programa. Utilizar o diagrama de classes das figuras abaixo como base.
  6. Utilizar o diagrama apresentado na figura a seguir para melhor entender o problema como um todo.

 





 

 

Entrega e avaliacao

 

O trabalho poderá ser realizado por grupos de até dois alunos, porém a avaliação é individual. Cada grupo deverá preparar um relatório descrevendo as estratégias utilizadas para implementar o sistema. No dia da apresentação serão realizadas perguntas especificas, para cada aluno, sobre recursos utilizados na implementacao do trabalho. Nesse momento o aluno deverá demonstrar possuir o conhecimento necessário para o desenvolvimento de programas em C++. A avaliação será realizada de acordo com a ordem da lista de chamada, e um aluno por vez. Os alunos deverao enviar o relatorio e o programa fonte por email para eduardob@inf.pucrs.br ate' 30 minutos antes do inicio da aula do dia da apresentacao. Programas nao recebidos por email ate' a data/hora limite nao serao avaliados (dia 23/06/2004 ate' as 9:20). Data da apresentação: 23/06/2004