PUCRS, FACIN/FENG, Engenharia da Computação, semestre 2007/2

Profs. Eduardo Bezerra (T. 490) e Marcelo Cohen (T. 590)

Laboratório de Programação II

Trabalho Prático 2 - Simulação de Elevadores

Descrição Geral do Problema

Este trabalho, que deverá ser feito individualmente ou em duplas, consiste em modelar e implementar uma simulação de um prédio com elevadores e pessoas. A simulação funciona da seguinte forma:

O estado das pessoas pode mudar da seguinte forma:

O estado dos elevadores pode mudar da seguinte forma:

É importante observar que é responsabilidade do prédio decidir qual elevador chamar. No exemplo fornecido, a lógica implementada é a seguinte:

Aspectos Técnicos

O simulador funciona através da passagem de tempo, realizada pelo pressionamento de uma tecla. Não é necessário simular o relógio real. Devem ser exibidas na tela as seguintes informações (parte disso já é realizada pelo código de exemplo):

Foi fornecido um código de exemplo, contendo a estrutura de classes sugerida, descrita a seguir:

Além disso, são fornecidos dois arquivos Makefile: um para compilar com a interface gráfica (Makefile) e outro para compilar a versão em modo texto (Makefile.texto). Para compilar em modo texto, comente a linha #define no arquivo Interface.h

Instalação das Bibliotecas

A biblioteca OpenGL normalmente já está presente nas distribuições Linux e no Windows. Porém, devem ser instalados os pacotes de desenvolvimento, como segue:

Fedora:

Ubuntu:

Gentoo:

Windows (DEV-C++)

Avaliação

Devem ser explorados os conceitos de herança e polimorfismo na classe Elevador. Essa classe deverá possuir no mínimo duas implementações diferentes. Por exemplo, um elevador que não pare se houver chamadas em vários andares durante a subida, somente durante a descida. Portanto, a classe Elevador deverá ser abstrata e pelo menos duas outras classes derivadas devem ser criadas a partir dela. Será necessário também alterar o construtor do prédio, de forma que existam alguns elevadores de cada classe.

O código-fonte deve estar adequadamente comentado (nas suas partes/algoritmos principais, pelo menos) e no seu início deve haver um comentário com o nome do(a) aluno(a).

O arquivo elevator_work.zip contém o esqueleto das classes descritas anteriormente, bem como um programa executável para Linux (elevator_completo), que demonstra como é o funcionamento do simulador completo (mas sem polimorfismo).

Para executá-lo, é preciso primeiro digitar o seguinte comando no terminal:

chmod u+x elevador_completo

Depois, basta digitar ./elevator_completo

Apresentação

O trabalho será apresentado no laboratório. Durante a apresentação, o(a) aluno(a) (ou dupla) deve estar apto a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do(a) aluno(a) (ou dupla) acarretarão em anulação da nota final.

No momento da apresentação, cada aluno(a) ou dupla já deverá ter submetido um arquivo .zip para o professor da disciplina no email Eduardo.Bezerra @ pucrs.br, contendo os códigos-fonte (.cpp e .h) e o Makefile, se for o caso. O zip deverá ser nomeado da seguinte forma: nome_sobrenome.zip. Se for uma dupla, usar a forma sobrenome1_sobrenome2.zip

Sera' avaliada tambem a escolha dos nomes dos arquivos e classes, conforme estudado em aula.

Também deve ser entregue uma folha, contendo o diagrama de classes do sistema (legível).

O programa deverá ser executado no sistema operacional Linux. Não serão aceitos trabalhos que não compilem corretamente no g++, sob hipótese nenhuma.

Todos os trabalhos deverão ser entregues até o dia da apresentação, e apresentados na data marcada - não serão aceitos trabalhos fora do prazo.

Trabalhos copiados, inclusive entre turmas, resultarão em nota zero para todos os alunos envolvidos. Será utilizado o MOSS para identificação de situações de plágio.