Anda di halaman 1dari 6

Universidade Federal de Lavras

Departamento de Cincia da Computao


GCC 110 Programao Orientada a Objetos
Trabalho Prtico:
I Observaes:
1) O trabalho pode ser feito em grupo de (no mximo) 4 pessoas. No
permitido que alunos que cursam a disciplina no perodo diurno faam trabalhos
com alunos do perodo noturno e vice-versa. permitido discutir os problemas e
estratgias de soluo com outros grupos, mas quando se tratar de escrever ou
implementar computacionalmente as solues, isto deve ser feito separadamente. O
trabalho deve ser feito em Java ou C++.
2) Forma de entrega: O trabalho deve ser entregue em formato digital por meio do
Moodle. Utilizar a opo "Entrega do Trabalho Prtico". Anexe um nico arquivo
.zip contendo todos os arquivos do trabalho (cdigos-fonte, executveis,
documentao, etc.). O nome do arquivo .zip a ser enviado deve ser formado pelos
nomes de todos os integrantes do grupo. Assim, se o grupo formado pelos alunos:
Cristiano Leite Castro, Wilian Soares Lacerda e Andr Pimenta, o nome do arquivo
dever ser: CristianoCL_WilianSL_AndrP.zip.
3) Trabalhos copiados recebero nota zero para todas as cpias. Trabalhos com erros
de compilao no sero avaliados e recebero nota zero. O programa deve ser
desenvolvido seguindo as boas normas de programao.
Descrio do Trabalho:
Parte I (Peso 60%): Implemente um conjunto de classes para um sistema de controle
de oficina mecnica. A oficina necessita manter informaes sobre seus clientes,
peas, servios e ordens de servios (OS). Para isso, foi feito o seguinte projeto
(Diagrama de Classes):

OrdemServio
numeroOS
dataOS
dataPrevTermino
dataTermino
placaCarro
situao

1..*

ItemOS
tipoItem *
preo
qtde
*

Pea
codPea
descrio
preo
qtdeEstoque

1
Cliente
nome
cpf
endereo
fone

0..1

*
*

Oficina

0..1

Servio
codServio
descrio
preo
tempoExecuo

Classe Cliente:

Atributos: nome (String), cpf (String), endereo (String) e fone (String). Todos
com acesso privativo;

Mtodo construtor que inicializa todos os atributos atravs de parmetros;

Mdodos get e set para obter e modificar cada um dos valores dos atributos.
Obs.: nem todos os atributos necessitam de mtodos acessores e modificadores.

Classe Pea:

Atributos: codPea (int), descrio (String), preo (double), qtdeEstoque (int).
Todos com acesso privativo;

Mtodo construtor que inicializa todos os atributos atravs de parmetros;

Mtodo construtor que inicializa os atributos codPea, descrio e preo
atravs de parmetros e o atributo qtdeEstoque com zero;

Mdodos get e set para obter e modificar os valores dos atributos; Obs.: nem
todos os atributos necessitam de mtodos acessores e modificadores.

Mtodo para incrementar a quantidade em estoque. Parmetro: a quantidade a
ser incrementada;

Mtodo para decrementar a quantidade em estoque. Parmetro: a quantidade
a ser decrementada. No permitir o decremento se a quantidade se tornar menor
do que zero.

Classe Servio:
Atributos: codServio (int), descrio (String), preo (double) e tempoExecuo
(double, tempo de execuo do servio, em minutos). Todos com acesso
privativo;

Mtodo construtor que inicializa todos os atributos atravs de parmetros;

Mdodos get e set para obter e modificar os valores dos atributos; Obs.: nem
todos os atributos necessitam de mtodos acessores e modificadores.


Classe OrdemServio:

Atributos: numeroOS (int), dataOS (GregorianCalendar), dataPrevTrmino
(GregorianCalendar,
data
prevista
para
trmino),
dataTrmino
(GregorianCalendar, data de trmino), placaCarro (String), situao (char, AAberta, C-Cancelada, F-Finalizada), cliente (Usuario), itens (lista de ItemOS) e
proximoNumero (int). O atributo proximoNumero deve ser esttico e ser usado
para armazenar o prximo nmero de ordem de servio. A lista de itens deve ser
implementada usando a classe Vector. Todos com acesso privativo;

Mtodo construtor que inicializa os atributos com os seguintes valores:
numeroOS (prximo nmero sequencial), dataOS (data corrente do sistema),
dataPrevTrmino, placaCarro e cliente (passados como parmetros),
dataTrmino (null) e situao (A);

Mtodos get para obter os valores dos atributos; Obs.: nem todos os atributos
necessitam de mtodos acessores e modificadores.

Mtodo para adicionar um item (pea) ordem de servio (OS). Parmetros: a
pea e a quantidade. A quantidade em estoque da pea deve ser decrementada
de acordo com o parmetro quantidade. Somente permitido adicionar item em
OS aberta (situao = A);

Mtodo para excluir um item (pea) da OS. Parmetro: a pea a ser excluda. A
quantidade em estoque da pea deve ser incrementada de acordo com a
quantidade adicionada. Somente permitido excluir item de OS aberta (situao
= A);

Mtodo para adicionar um item (servio) ordem de servio (OS). Parmetros:
o servio. Somente permitido adicionar item em OS aberta (situao = A);

Mtodo para excluir um item (servio) da OS. Parmetro: o servio a ser


excludo. Somente permitido excluir item de OS aberta (situao = A);

Mtodo para finalizar a OS. A situao da OS deve ser mudada para F e a
data de trmino deve receber a data do sistema. Somente permitido finalizar
OS aberta (situao = A);

Mtodo para cancelar a OS. A situao da OS deve ser mudada para C.
Somente permitido cancelar OS aberta (situao = A). Todos os itens do tipo
pea devem ser devolvidos ao estoque. Cancelar no o mesmo que excluir, os
itens vo continuar na OS.


Classe ItemOS:

Atributos: tipoItem (char, P-Pea, S-Servio), servio (Servio), pea (Pea),
preo (double) e qtde (int). Todos com acesso privativo;

Mtodo construtor que inicializa os atributos da seguinte forma: pea e qtde
(passados como parmetros), tipoItem com valor P (pea) e preo com o valor
do atributo preo do objeto pea. Esse mtodo usado para construir um item
do tipo Pea;

Mtodo construtor que inicializa os atributos da seguinte forma: servio
(passado como parmetro), tipoItem com valor S (servio), preo com o valor
do atributo preo do objeto servio e qtde com valor 1. Esse mtodo usado
para construir um item do tipo Servio;

Mtodos get para obter os valores dos atributos; Obs.: nem todos os atributos
necessitam de mtodos acessores.

Classe Oficina:

Atributos: clientes (lista de Cliente), peas (lista de Pea), servios (lista de
Servio) e OSs (lista de OrdemServio). As listas devem ser implementadas
usando a classe Vector. Todos com acesso privativo;

Mtodo para inserir um novo cliente na lista de clientes. Parmetro: o cliente;

Mtodo para inserir uma nova pea na lista de peas. Parmetro: a pea;

Mtodo para inserir um novo servio na lista de servios. Parmetro: o servio;

Mtodo para inserir uma nova ordem de servio na lista de ordens de servio.
Parmetro: a ordem de servio;

Mtodo para inserir um novo item (pea) a uma ordem de servio. Parmetros:
a ordem de servio, a pea e a quantidade;

Mtodo para inserir um novo item (servio) a uma ordem de servio.
Parmetros: a ordem de servio e o servio;

Mtodo para excluir um cliente da lista de clientes. Parmetro: o cliente. O
cliente no pode ser excludo se existir alguma ordem de servio para ele;

Mtodo para excluir uma pea da lista de peas. Parmetro: a pea. A pea
no pode ser excluda se existir alguma ordem de servio para ela;

Mtodo para excluir um servio da lista de servios. Parmetro: o servio. O
servio no pode ser excludo se existir alguma ordem de servio para ele;

Mtodo para excluir uma ordem de servio da lista de ordens de servios.
Parmetros: a ordem de servio. Somente permitido excluir OS aberta
(situao = A). Todos os itens devem ser excludos;

Mtodo para excluir um item (pea) de uma ordem de servio. Parmetros: a
ordem de servio e a pea;

Mtodo para excluir um item (servio) de uma ordem de servio. Parmetros: a
ordem de servio e o servio;

Mtodo para finalizar uma ordem de servio. Parmetro: a ordem de servio;

Mtodo para cancelar uma ordem de servio. Parmetro: a ordem de servio;

Mtodo para obter a lista de clientes;

Mtodo para obter a lista de peas;






Mtodo para obter a lista de servios;


Mtodo para obter a lista de ordens de servio;
Mtodo para gravar os dados em arquivo;
Mtodo para ler os dados armazenados em arquivo.

Classe Interface:

Mtodo para apresentar um menu (interface de caracteres) com opes para:
cadastrar um novo cliente, cadastrar uma nova pea, cadastrar um novo servio,
cadastrar uma nova ordem de servio, inserir um novo item (pea), inserir um
novo item (servio), excluir um cliente, excluir uma pea, excluir um servio,
excluir uma ordem de servio, excluir um item (pea), excluir um item (servio),
finalizar uma ordem de servio, cancelar uma ordem de servio, listar todos os
clientes, listar todas as peas, listar todos os servios, listar todas as ordens de
servio e seus itens e sair do programa;

Mtodo para cadastrar um novo cliente. Deve permitir que o usurio entre com
os dados do cliente a ser inserido;

Mtodo para cadastrar uma nova pea. Deve permitir que o usurio entre com
os dados da pea a ser inserida;

Mtodo para cadastrar um novo servio. Deve permitir que o usurio entre com
os dados do servio a ser inserido;

Mtodo para cadastrar uma nova ordem de servio. Deve permitir que o
usurio entre com os dados da ordem de servio a ser inserida e de cada um de
seus itens.

Mtodo para inserir um novo item (pea) a uma ordem de servio j existente.
Deve permitir que o usurio escolha a ordem de servio e insira os dados do
novo item;

Mtodo para inserir um novo item (servio) a uma ordem de servio j
existente. Deve permitir que o usurio escolha a ordem de servio e insira os
dados do novo item;

Mtodo para excluir um cliente. Deve permitir que o usurio escolha o cliente a
ser excludo;

Mtodo para excluir uma pea. Deve permitir que o usurio escolha a pea a
ser excluda;

Mtodo para excluir um servio. Deve permitir que o usurio escolha o servio
a ser excludo;

Mtodo para excluir uma ordem de servio. Deve permitir que o usurio
escolha a ordem de servio a ser excluda;

Mtodo para excluir um item (pea) de uma ordem de servio j existente.
Deve permitir que o usurio escolha a ordem de servio e a pea a ser excluda;

Mtodo para excluir um item (servio) de uma ordem de servio j existente.
Deve permitir que o usurio escolha a ordem de servio e o servio a ser
excludo;

Mtodo para finalizar uma ordem de servio. Deve permitir que o usurio
escolha a ordem de servio a ser finalizada;

Mtodo para cancelar uma ordem de servio. Deve permitir que o usurio
escolha a ordem de servio a ser cancelada;

Mtodo para listar todas as peas. Deve listar os dados de todas as peas;

Mtodo para listar todos os servios. Deve listar os dados de todos os servios;

Mtodo para listar todas as ordens de servio. Deve listar os dados de todas as
ordens de servio com seus respectivos itens;

Mtodo main para ler os dados armazenados em arquivo, apresentar o menu
principal e, antes de sair do programa, gravar os dados em arquivo.

Observe a separao entre as classes de negcio (OrdemServio, ItemOS, Cliente,


Pea e Servio) e a classe de interface. As classes de negcio no devem possuir
nada que crie uma dependncia da interface. Desta forma, se posteriormente voc
decidir mudar a interface, por exemplo, usar uma interface grfica, as classes de
negcio no precisam ser alteradas. A classe Oficina atua como uma classe gerente,
fazendo a interligao das classes de negcio com a classe de interface. Em um
projeto mais profissional, provavelmente existiriam vrias interfaces e classes gerente.
A mesma idia deveria ser usada para separar as classes de negcio e as classes de
persistncia. Por simplicidade, nesse trabalho o armazenamento dos dados ser feito
em arquivo e as prprias classes de negcio e de gerncia sabem como fazer isso, o
que significa que se decidirmos passar a usar um banco de dados teremos que alterar
essas classes. Em um projeto mais profissional, deveramos criar uma camada de
persistncia, separando as classes de negcio da estrutura de armazenamento.
Parte II (peso 40%): Esta parte consiste em uma alterao (extenso) da Parte I,
conforme o Diagrama de Classes a seguir:
OrdemServio
numeroOS
dataOS
dataPrevTermino
dataTermino
placaCarro
situao

ItemOS
tipoItem *
preo
qtde

Produto
cdigo
descrio
preo

*
1
Cliente
nome
cpf
endereo
fone

1..*

Pea
qtdeEstoque

Servio
tempoExecuo
*

Oficina

 Peas e Servios sero chamados genericamente de Produto. Para isso, foi criada
a classe abstrata Produto com duas subclasses, Pea e Servio. Um ItemOS agora
possui um relacionamento com Produto, de forma que cada ItemOS um Produto
(Pea ou Servio). Na prtica, isso significa que a classe ItemOS ter apenas um
atributo para dizer qual seu item ao invs de dois atributos (pea e servio) onde
um deles era sempre nulo;
 Crie a classe Produto e altere as classes Pea e Servio para implementar a
hierarquia proposta. A classe Produto deve ser abstrata;
 Altere a classe ItemOS retirando os atributos pea e servio e colocando em seu
lugar o atributo produto do tipo Produto. Consequentemente, alguns mtodos tero
de ser alterados;

 Todas as situaes de exceo devem ser tratadas. Por exemplo, somente


permitido adicionar e excluir item em OS aberta, somente faz sentido finalizar OS
aberta, somente permitido cancelar OS aberta, somente permitido excluir
cliente, pea ou servio que no sejam referenciados por nenhuma OS, o estoque
de pea no pode ficar negativo etc. Crie classes de exceo e faa todo o
tratamento necessrio. Impresso de mensagens de erros devem ser apresentadas
somente na classe de interface;
 Use polimorfismo sempre que possvel !!!
 Para os grupos que estiverem desenvolvendo o trabalho em Java, todas as classes,
exceto Interface, devem estar em um pacote chamado oficina. Defina a varivel
CLASSPATH corretamente;
 Alm disso, os grupos que estiverem desenvolvendo em Java devem fazer
comentrios no formato JavaDoc para todas as classes e todos os mtodos
pblicos. Gere uma documentao usando esse utilitrio.

Bom trabalho a todos.

Anda mungkin juga menyukai