Você está na página 1de 9

o com Objectos Projecto de Programac a 19 de Setembro de 2012

Esclarecimento de d uvidas: Consultar sempre o corpo docente atempadamente: presencialmente ou atrav es do enderec o po12@l2f.inesc-id.pt. o n o a ` disciplina). N ao utilizar fontes de informac a ao ocialmente associadas ao corpo docente (podem colocar em causa a aprovac a es para violac es destes conselhos: quaisquer consequ N ao s ao aceites justicac o o encias nefastas s ao da responsabilidade do aluno.

es do enunciado (ver informac o completa na secc o [Projecto] no F Requisitos para desenvolvimento, material de apoio e actualizac o a a enix): de uso obrigat O material de apoio e orio e n ao pode ser alterado. Vericar atempadamente (m nimo de 48 horas antes do nal de cada prazo) os requisitos exigidos pelo processo de desenvolvimento.

o] no F o (ver informac o completa nas secc es [Projecto] e [M Processo de avaliac a a o etodo de Avaliac a enix): Datas: 2012/10/26 12:00 (UML); 2012/11/13 12:00 (intercalar); 2012/12/04 12:00 (nal); 2012/12/182012/12/20 (teste pr atico). Os diagramas UML s ao entregues exclusivamente em papel (impressos ou manuscritos) em local a anunciar. Diagramas ileg veis ser ao sumariamente ignorados. o, incluindo a capacidade Vericar atempadamente (m nimo de 48 horas antes do nal de cada prazo) os requisitos exigidos pelo processo de avaliac a de acesso ao reposit orio CVS.

o os projectos existentes no reposit Apenas se consideram para avaliac a orio CVS ocial.
o 0 (zero) (n Trabalhos n ao presentes no reposit orio no nal do prazo t em classicac a ao s ao aceites outras formas de entrega). N ao s ao admitidas es para atrasos em sincronizac es do reposit justicac o o orio. A indisponibilidade tempor aria do reposit orio, desde que inferior a 24 horas, n ao justica atrasos na submiss ao de um trabalho. o do projecto pressup A avaliac a oe o compromisso de honra de que o trabalho correspondente foi realizado pelos alunos correspondentes ao grupo de o do projecto ter o em 2012/2013. o. Fraudes na execuc avaliac a a ao como resultado a exclus ao dos alunos implicados do processo de avaliac a

desenvolver os conceitos de suporte a ` gest o de um outlet de restaurantes. A aplicac o O objectivo do projecto e ao e utilizac a a es de administrac o dos alimentos, restaurantes e clientes; permite gerir a publicac o das ementas dos de gest ao realiza operac o a a o de vendas permite que os clientes consultem e adquiram os pratos restaurantes; e guardar o estado persistentemente. A aplicac a es do seu interesse. Dependendo do tipo de cliente, disponibilizados, e se registem para serem avisados quando ocorrerem alterac o es ao tipo de pratos que podem ser adquiridos. podem existir restric o es de funcionalidade com impacto m O projecto deve ser concebido de forma a possibilitar futuras extens oes ou alterac o nimo no es a ` c odigo pr e-existente. Dever a ser simples (i) gerir v arios outlets; (ii) adicionar novos tipos de clientes com diferentes restric o compra de pratos do dia; (iii) adicionar novas pol ticas de registo de interesses; e (iv) adicionar novas formas de consulta. nico outlet de restaurantes. No projecto descrito neste documento existe um u

1
1.1

Entidades, Propriedades, Funcionalidade


Entidades

o a desenvolver: (i) restaurantes; (ii) outlets; (iii) clientes, (iv) alimentos e (v) pratos do dia. Existem v arias entidades na aplicac a Cada restaurante disponibiliza um conjunto de pratos do dia (1.2.2) atrav es de um outlet de restaurantes. Os clientes quando acedem a um outlet de restaurantes podem consultar e adquirir os pratos do dia dispon veis, e podem ainda es nos pratos do dia dispon registar-se para serem avisados quando ocorrerem alterac o veis (e.g., um determinado prato do dia foi disponibilizado a prec o mais reduzido ou um novo prato do dia cou dispon vel).

1.2

Propriedades

da responsabilidade do sistema vericar esta restric nicos para cada tipo de entidade. E o. Sempre que Os identicadores s ao u a determinada pela ordem lexicogr o espec for necess ario produzir listas, a ordem e aca dos identicadores (excepto indicac a ca). 1

1.2.1

Propriedades dos alimentos

nico (uma cadeia de caracteres). Os alimentos s ao identicados por um nome u Os alimentos podem pertencer a um de dois grupos: simples ou agregados. Os alimentos agregados s ao formados por outros alimentos, simples e/ou agregados, indicando-se ainda a sua respectiva percentagem. Os alimentos simples podem ainda pertencer a um de tr es tipos: carne, peixe ou vegetal. Os alimentos que s o tenham na sua o alimentos do tipo vegetal s constituic a ao denominados vegetarianos. o das suas calorias por grama. No caso dos alimentos compostos, as calorias por grama s Cada alimento simples tem a indicac a ao o e de acordo com a f calculadas com base na sua constituic a ormula Calorias(agregado) = i (Calorias(i) peri ), em que i representa cada constituinte e peri a percentagem do constituinte i no agregado. 1.2.2 Propriedades dos pratos do dia

identicado univocamente pelo nome desse alimento. Cada prato tem ainda Um prato do dia est a associado a um alimento e e o da quantidade do alimento que lhe est a indicac a a associado e um prec o de venda. Podem ser aplicados descontos ao prec o de venda e cada prato do dia pode ou n ao estar dispon vel para venda. poss E vel existirem pratos do dia diferentes, identicados pelo mesmo nome, desde que pertenc am a restaurantes distintos. 1.2.3 Propriedades dos clientes

nico o seu e-mail (cadeia de caracteres) e possui ainda um nome (cadeia de caracteres). Os Cada cliente tem como identicador u clientes podem ser de dois tipos: omn voros e vegetarianos. Os clientes vegetarianos s o podem comprar pratos vegetarianos. Um cliente pode, em qualquer instante, alterar o seu tipo. Os clientes mant em o n umero de encomendas realizadas, o n umero de pratos do dia encomendados e o total gasto nessas encomendas. 1.2.4 Propriedades dos restaurantes

nico o seu nome (cadeia de caracteres) e um e-mail (cadeia de caracteres). Os restauCada restaurante tem como identicador u rantes mant em um registo das suas vendas, nomeadamente o n umero de vendas de cada um dos pratos do dia. Cada restaurante o dos pratos do dia dispon mant em informac a veis para venda. Uma vez criado, um prato n ao pode ser removido. 1.2.5 Propriedades das encomendas

Cada cliente tem um carrinho de compras onde cam registados os pedidos parciais. Quando o cliente decide nalizar uma encomenda, decidindo-se pelo pagamento, a encomenda ca fechada e o carrinho de compras vazio.

1.3
1.3.1

es Operac o
es relativas a clientes Operac o

es relativas a clientes: (i) visualizar; (ii) registar novos; (iii) alterar o tipo; (iv) inscrever Podem realizar-se as seguintes operac o em listas de alerta; (v) desinscrever de listas de alerta; e, (vi) listar mensagens de alerta recebidas. Os clientes n ao podem ser removidos e n ao podem alterar, nem o nome, nem o e-mail, mas podem inscrever-se para serem es no outlet de restaurantes que sejam do seu interesse, como, por exemplo, um novo prato informados quando ocorrerem alterac o car dispon vel. Um cliente s o deve ser avisado de pratos que pode comprar: Por exemplo, um cliente vegetariano s o deve ser avisado se car dispon vel um novo prato vegetariano. es de prec o de novos pratos. Est ao pr e-denidos dois tipos de alerta: para reportar (i) reduc o o e (ii) disponibilizac a 1.3.2 es relativas a alimentos Operac o

es relativas a alimentos: (i) visualizar; (ii) registar alimento simples; (iii) registar alimento Podem realizar-se as seguintes operac o agregado; (iv) alterar calorias de alimento simples; e, (v) descrever alimento agregado. poss N ao e vel remover ou alterar propriedades de alimentos (exceptuam-se as calorias dos alimentos simples). 2

1.3.3

es relativas a restaurantes Operac o

es relativas a restaurantes: (i) visualizar; (ii) registar novos restaurantes; e, (iii) seleccionar Podem realizar-se as seguintes operac o menu de gest ao de um restaurante. Os restaurantes n ao podem ser removidos e n ao se podem alterar as suas propriedades depois de registados. 1.3.4 es relativas a um restaurante Operac o

es relativas a um determinado restaurante: (i) visualizar pratos do dia; (ii) registar novos Podem realizar-se as seguintes operac o pratos do dia; (iii) calcular calorias de um prato do dia; (iv) disponibilizar prato do dia; (v) indisponibilizar prato do dia; e, (vi) aplicar um desconto a um prato. Um restaurante n ao pode remover pratos do dia. 1.3.5 es relativas a outlets Operac o

es relativas a outlets (encomendas e vendas): (i) visualizar pratos do dia do outlet de Podem realizar-se as seguintes operac o restaurantes; (ii) adicionar prato do dia ao carrinho de compras; e, (iii) pagar. nico carrinho de compras. Cada cliente disp oe de um u

1.4

Pesquisas

Deve ser poss vel efectuar pesquisas sob v arios crit erios e sobre as diferentes entidades geridas, e.g., ver todos os clientes, ver es, ver clientes todos os pratos vegetarianos de um restaurante, ver restaurantes sem pratos vegetarianos, ver clientes sem transac o com compras em mais do que um restaurante. o desenvolvida. Deve ser poss vel introduzir novos m etodos de pesquisa com um impacto m nimo na implementac a

Intera c ao com o Utilizador

es, descrevendo-se a interacc es seguintes e descrita a funcionalidade m o com o utilizador. Nas secc o axima das aplicac o a es de gest o), mas denem dois conjuntos de As aplicac o ao e de vendas utilizam a mesma base de c odigo (o n ucleo da aplicac a o de gest menus independentes: o menu de gest ao (3) e o menu de vendas (4). A aplicac a ao pode ser iniciada sem dados pr evios (neste caso, todos os alimentos, pratos do dia, clientes e restaurantes t em de ser criados atrav es do menu de gest ao). Os pratos do o de vendas. dia s ao comercializados atrav es da aplicac a es usadas na interacc o, excepto se indicado, s As excepc o a ao subclasses de ist.po.ui.DialogException, s ao lanc adas pelos es descritas, e poss o de outras. comandos e tratadas pela classe ist.po.ui.Menu. Note-se que, al em das excepc o vel a denic a es n As novas excepc o ao devem, no entanto, substituir as fornecidas nos casos descritos por este enunciado. es de leitura (de dados fornecidos pelo utilizador) e escrita (para apresentac o de resultados ao utilizador) t As operac o a em de ser realizadas atrav es do objecto ist.po.ui.Dialog.IO, utilizando-se as mensagens descritas (todas as mensagens s ao produzidas atrav es de chamadas a m etodos). Uma lista completa das classes disponibilizadas pode ser obtida nas bibliotecas po-uilib, rest-textui-manager-support e rest-textui-outlet-support (material de apoio). Mensagens textuais s ao apenas poss veis na o) e, em geral, n interface (e nunca no n ucleo da aplicac a ao podem ser denidas novas. Casos potencialmente omissos devem ser o. esclarecidos antes de qualquer implementac a o de listas faz-se por ordem crescente do crit o. Quando a chave e uma cadeia de caracteres, a A apresentac a erio de apresentac a o entre mai ordem deve ser lexicogr aca (UTF-8), n ao havendo distinc a usculas e min usculas (1.2). o antes de proceder a ` validac o da mesma (excepto onde indicado). Em geral, os comandos pedem toda a informac a a es de dados, tanto na aplicac o de gest Em todas as apresentac o a ao, como na de vendas, todos os valores num ericos s ao apresen o de Math.round). tados como inteiros (sugere-se a utilizac a No texto que se segue, o tipo de letra fixo indica um literal; o s mbolo parte vari avel. indica um espac o; e o tipo de letra it alico indica uma

Aplica c ao de Gest ao

o de gest As entradas do menu principal da aplicac a ao est ao denidas em rest.textui.manager.MenuEntry. Os m etodos ` s mensagens de di correspondentes a alogo est ao denidos em rest.textui.manager.Message. es de leitura e escrita b O menu inicial permite realizar operac o asicas e, ainda, aceder a submenus que cont em a restante funci a seguinte (omite-se a opc o Sair, uma vez que e implementada automaticamente por todos os onalidade. A lista completa e a menus): Criar, Abrir, Guardar, Guardar como... (3.1), Gest ao de clientes (3.2), Gest ao de alimentos (3.3), Gest ao de es abaixo descrevem pormenorizadamente restaurantes (3.4), Gest ao de um Restaurante (3.5), e Consultas (3.6). As secc o es associadas a estas opc es. as acc o o nico de uma entidade j Sempre que for pedido o identicador u a existente e esse identicador n ao estiver associado a nenhuma o rest.textui.UnknowKeyException. Por outro lado, no processo de criac o entidade, os comandos devem lanc ar a excepc a a de novas entidades, se o identicador fornecido para a entidade a criar j a estiver associado a outra entidade do mesmo tipo, os o rest.textui.DuplicateKeyException. comandos devem lanc ar a excepc a

3.1

o de Ficheiros Manipulac a

o pode ser guardado em cheiros, para posterior recuperac o: utiliza-se a capacidade de serializac o do Java O estado da aplicac a a a es de java.io.Serializable). S es b o de cheiros: criac o de (implementac o ao denidas as operac o asicas para manipulac a a novo cheiro (criar), abertura de cheiro existente (abrir), e salvaguarda de cheiro aberto (guardar). Devem ser tratadas es relativas a ` manipulac o de cheiros. Note-se que e sempre poss o, mesmo que todas as excepc o a vel trabalhar com a aplicac a o e a seguinte: n ao tenha sido carregado nenhum cheiro. A funcionalidade de cada operac a o de novo cheiro. Criar Criac a o de um cheiro existente (previamente guardado). O sistema pede o nome do cheiro a Abrir Abertura e eventual utilizac a abrir (openFile()): caso n ao exista, o sistema limita-se a comunicar o erro (mensagem fileNotFound()). es desde a abertura do cheiro associado a ` aplicac o. Caso n Guardar Salvaguarda das alterac o a ao haja nenhum cheiro o realiza-se atrav associado, deve ser perguntado ao operador o nome do cheiro a utilizar. Esta interacc a es do m etodo executada nenhuma acc o se n es desde a u ltima salvaguarda. newSaveAs(). N ao e a ao existirem alterac o o permite associar/mudar a associac o de um cheiro a ` aplicac o (al Guardar como... Esta opc a a a em de guardar os dados nesse o utiliza o m cheiro). Esta interacc a etodo saveAs(). poss es n Apenas e vel trabalhar com um cheiro de cada vez. Assim, sempre que se abandona um cheiro com modicac o ao o actual: salvaguardadas, por exemplo, porque se cria outro, deve perguntar-se ao operador se deseja guardar a informac a es, ent o utiliza a 1. Se houver alterac o ao deve-se perguntar ao operador se deseja guardar o cheiro antes de sair: esta operac a obtida invocando readBoolean()). Caso a resposta seja armativa, ent mensagem saveBeforeExit() (a resposta e ao o. deve-se guardar a informac a 2. Se n ao existir nenhum cheiro associado, ent ao deve-se ainda perguntar ao operador qual o nome a utilizar para guardar a o, atrav informac a es da mensagem newSaveAs(). 3. O comando Guardar como... n ao pergunta ao operador se deseja guardar o cheiro antes de gravar o novo, pois isso corresponderia a guardar dois cheiros iguais. Este comando tem exactamente o prop osito oposto. ` opc o Guardar. A opc o sair, presente em todos os menus, n Note-se que parte deste procedimento corresponde a a a ao pede para o, mesmo que tenha havido alterac es. guardar o estado da aplicac a o

3.2

Gest ao de Clientes

As entradas do menu est ao denidas em rest.textui.clients.MenuEntry. As mensagens de di alogo est ao denidas em


rest.textui.clients.Message.

3.2.1

Visualizar todos os clientes

o de cada cliente e o seguinte: O formato de apresentac a type|name|email|#orders|#dotd|#spent Os valores para o campo type s ao OMNIVOROUS (clientTypeOmnivorous()), ou VEGETARIAN (clientTypeVegetarian()). o relativamente ao desenho da aplicac o. Estes m etodos s ao fornecidos apenas por conveni encia e n ao implicam nenhuma opc a a #orders, #dotd e #spent indicam, respectivamente, o n umero de encomendas efectuadas, o n umero de pratos do dia encomendados e o total gasto nessas encomendas. 3.2.2 Registar novo cliente

pedido o tipo do cliente (reqType()) (devendo ser dada uma resposta como indicado para o campo type em 3.2.1). Se o E tipo indicado for desconhecido, repete-se a pergunta at e se obter uma resposta correcta. De seguida, pede o nome do cliente (reqName()) e o enderec o de correio eletr onico (reqEmail()). o associa um identicador u nico (e-mail) ao cliente criado. Esta acc a 3.2.3 Alterar o tipo de um cliente

pedido o identicador do cliente (reqKey()) e o novo tipo (reqType()) (devendo ser dada uma resposta como indicado para E o campo type em 3.2.1). Se o tipo indicado for desconhecido, repete-se a pergunta at e se obter uma resposta correcta. 3.2.4 Inscrever em lista de alerta

pedido o identicador do cliente (reqKey()) e de seguida o tipo do alerta pretendido (reqJoinAlertType()): DISCOUNT E o de prec (alertTypeDiscount(), quando pretende ser alertado se ocorrer qualquer reduc a o) ou NOVELTY (alertTypeNovelty(), validado depois de se ler um tipo de alerta v quando car dispon vel um novo prato do dia). O identicador do cliente e alido. realizada nenhuma acc o. Caso o cliente j a esteja inscrito na lista em que se pretende inscrever, n ao e a 3.2.5 Desinscrever de lista de alerta

pedido o identicador do cliente (reqKey()) e de seguida o tipo do alerta que j E a n ao pretende receber (reqLeaveAlertType()): o de prec DISCOUNT (quando j a n ao pretende ser alertado se ocorrer uma reduc a o) ou NOVELTY (quando j a n ao pretender ser aler validado depois de se ler um tipo de alerta v tado se car dispon vel um novo prato do dia). O identicador do cliente e alido. realizada nenhuma acc o. Caso o cliente n ao esteja inscrito na lista de que pretende sair, n ao e a 3.2.6 Listar mensagens de alerta recebidas

pedido o identicador do cliente (reqKey()). As mensagens s E ao apresentadas cronologicamente, no seguinte formato: type|message alertDiscount(); quando type for NOVELTY, message e alertNovelty(). Quando o campo type for DISCOUNT, message e

3.3

Gest ao de Alimentos

As entradas do menu est ao denidas em rest.textui.food.MenuEntry. As mensagens de di alogo est ao denidas em rest. es a lanc textui.food.Message. As excepc o ar pelos comandos est ao denidas em rest.textui.food. 3.3.1 Visualizar alimentos

o de cada alimento na lista e o seguinte: O formato de apresentac a alimentos simples: type|name|calories 5

alimentos agregados: code|name Os valores para o campo type s ao MEAT (typeMeat()), FISH (typeFish()) e VEGETABLE (typeVegetable()). Os valores para o campo code s ao VEG (typeVeg()) e NOVEG (typeNoVeg()). Estes m etodos s ao fornecidos apenas por conveni encia e o relativamente ao desenho da aplicac o. n ao implicam nenhuma opc a a 3.3.2 Registar alimento simples

pedido o tipo do alimento (reqType()) (devendo ser dada uma resposta como indicado para o campo type em 3.3.1). Se o E tipo indicado for desconhecido, repete-se a pergunta at e se obter uma resposta correcta. De seguida, pede-se o nome do alimento (reqName()) e o n umero de calorias por grama (reqCalories()). o associa um identicador u nico (nome) ao alimento simples criado. Esta acc a 3.3.3 Registar alimento agregado

o das chaves e imediata e o comando e interrompido quando ocorrem chaves desconhecidas. Neste comando, a validac a Comec a por pedir o nome do alimento (reqName()). De seguida s ao pedidos os nomes dos alimentos que o constituem (reqKey()) e as respectivas percentagens (um inteiro, reqPercentage()): deve permanecer num ciclo em que pergunta o o nome seguido da quantidade at e que o somat orio das percentagens inseridas seja 100. O comando deve lanc ar a excepc a PercentageTooHighException se o somat orio das percentagens inseridas for superior a 100. o associa um identicador u nico (nome) ao alimento agregado criado. Esta acc a 3.3.4 Alterar alimento simples

pedido o identicador do alimento j E a existente (reqKey()) e o novo n umero de calorias por grama (reqCalories()). 3.3.5 Descrever alimento agregado

pedido o nome do alimento agregado (reqKey()). Lanc o InvalidKeyException se o identicador corresponder E a a excepc a a um alimento simples. Se o identicador for v alido, primeiro apresenta um cabec alho id entico ao indicado em 3.3.1: code|name o de cada um dos alimentos que o constituem (a ordem de apresentac o deve ser id ` usada no seguindo-se uma descric a a entica a o s registo). Os alimentos que entram na sua constituic a ao descritos por: type|name|percentage (no caso dos alimentos simples) code|name|percentage (no caso dos alimentos agregados) em que o valor de type e code est ao indicados em 3.3.1. Os alimentos agregados s ao recursivamente descritos (em profundidade) o. como indicado nesta subsecc a

3.4

Gest ao de Restaurantes

` s mensaAs entradas do menu est ao denidas em rest.textui.restaurants.MenuEntry. Os m etodos correspondentes a gens de di alogo est ao denidos em rest.textui.restaurants.Message. 3.4.1 Visualizar restaurantes

o de cada restaurante na lista e o seguinte: O formato de apresentac a name|#dotd|#spent Os campos #dotd e #spent indicam, respectivamente o n umero de pratos do dia vendidos e o total recebido nessas vendas.

3.4.2

Registar novo restaurante

pedido o nome do restaurante (reqName()) e o enderec E o de correio eletr onico (reqEmail()). o associa um identicador u nico (nome) ao restaurante criado. Esta acc a 3.4.3 Selecionar menu de gest ao de um restaurante

pedido o nome do restaurante (reqKey()) e de seguida entra no menu de gest E ao descrito em 3.5.

3.5

Gest ao de um Restaurante

` s mensagens As entradas do menu est ao denidas em rest.textui.restaurant.MenuEntry. Os m etodos correspondentes a es a lanc de di alogo est ao denidos em rest.textui.restaurant.Message. As excepc o ar pelos comandos est ao denidas em rest.textui.restaurant. 3.5.1 Visualizar pratos do dia

o dos pratos do dia associados ao restaurante e o seguinte: O formato de apresentac a class|name|price|discount|available? Os valores para o campo class s ao VEG (typeVeg()) e NOVEG (typeNoVeg()). Os valores para o campo available? s ao AVAILABLE (available()) e UNAVAILABLE (unavailable()). Estes m etodos s ao fornecidos apenas por conveni encia e n ao o relativamente ao desenho da aplicac o. implicam nenhuma opc a a 3.5.2 Criar prato do dia

pedido o identicador de um alimento (reqFoodKey()), uma quantidade (reqQuantity()) e um custo (reqPrice()). E criado n Quando um prato do dia e ao ca dispon vel no outlet de restaurantes (3.5.4) e n ao tem descontos (3.5.6). 3.5.3 Calcular calorias de um prato do dia

pedido o identicador do prato do dia (reqKey()) sendo o formato de apresentac o o seguinte: E a name|calories O c alculo das calorias deve ter em conta o valor actual das calorias por grama dos alimentos simples. 3.5.4 Disponibilizar prato do dia no outlet de restaurantes

pedido o identicador do prato do dia (reqKey()) a disponibilizar (se o identicador n E ao corresponder a um prato do dia, deve o InvalidKeyException). Se o prato do dia j realizada nenhuma acc o. lanc ar a excepc a a estiver dispon vel, n ao e a 3.5.5 Indisponibilizar prato do dia no outlet de restaurantes

pedido o identicador do prato do dia (reqKey()) que deve car indispon E vel (se o identicador n ao corresponder a um prato o InvalidKeyException). Se o prato do dia j realizada nenhuma acc o. do dia, lanc a-se a excepc a a estiver indispon vel, n ao e a 3.5.6 Alterar desconto

pedido o identicador do prato do dia (reqKey()). Lanc o InvalidKeyException se o identicador n E a a excepc a ao corresponder a um prato dispon vel. Se o identicador for v alido, pede o desconto (inteiro no intervalo [0, 100]) a aplicar realizada nenhuma acc o. (reqDiscount()). Caso o valor do desconto esteja fora do intervalo [0, 100], n ao e a

3.6

Consultas

As entradas do menu s ao apresentadas pela mesma ordem com que aparecem na tabela e est ao denidas em rest.textui.
search.MenuEntry. As mensagens est ao denidas em rest.textui.search.Message.

es associadas ao pedido, nada deve ser impresso. Sempre que for feita uma consulta e nenhuma entidade satiszer as condic o Entrada do menu Ver alimentos vegetarianos Ver clientes sem mensagens de alerta Ver clientes com encomendas nalizadas Ver restaurantes com descontos o Ac a Os alimentos devem ser apresentadas como indicado em 3.3.1. Os clientes devem ser apresentados como indicado em 3.2.1. Os clientes devem ser apresentados como indicado em 3.2.1. Os restaurantes devem ser apresentados como indicado em 3.4.1.

Aplica c ao de Vendas

o de vendas permite usar os dados guardados pela aplicac o de gest o de vendas termina, A aplicac a a ao. Quando a aplicac a o dos dados que podem vir a ser lidos quer pela aplicac o de gest reescreve no mesmo cheiro uma atualizac a a ao quer pela o de vendas. Quando se sai da aplicac o de vendas s aplicac a a ao mantidas todas as encomendas n ao nalizadas. Cada cliente pode ter, no m aximo, uma encomenda n ao nalizada. o de vendas comec A aplicac a a por solicitar o nome do cheiro (rest.textui.outlet.Message.openFile()) que cont em o do sistema pode assumir que o cheiro indicado existe sempre e que os dados persistentes. Para simplicar, a concretizac a o deveria vericar os problemas de abertura e leitura dos objectos). cont em dados correctos (contudo, uma boa implementac a o de vendas termina, solicita o nome do cheiro (rest.textui.outlet.Message.saveFile()) onde Quando a aplicac a o do sistema pode assumir que o cheiro indicado n devem ser guardados os dados do outlet. Para simplicar, a concretizac a ao o deveria vericar os problemas de abertura e escrita dos objectos). existe (contudo, uma boa implementac a aberto o menu da aplicac o de vendas. As entradas deste menu est Ap os o di alogo inicial, e a ao denidas em rest.textui. ` s mensagens de di outlet.MenuEntry. Os m etodos correspondentes a alogo est ao denidos em rest.textui.outlet. es a lanc Message. As excepc o ar pelos comandos est ao denidas em rest.textui.outlet. Sempre que for pedido o identi nico de uma entidade j o cador u a existente e esse identicador n ao estiver associado a nenhuma entidade, deve-se lanc ar a excepc a rest.textui.outlet.UnknowKeyException. o permite realizar as seguintes operac es (omite-se a opc o Sair, uma vez que e implementada automaticaO menu da aplicac a o a mente por todos os menus): Visualizar pratos do dia do outlet de restaurantes (4.1), Adicionar prato a encomenda (4.2), Finalizar encomenda (4.3), o descreve pormenorizadamente as acc es associadas a estas opc es. O resto desta secc a o o

4.1

Visualizar pratos do dia do outlet

o dos pratos do dia dispon o seguinte: O formato de apresentac a veis no outlet e class|plateName Os valores para o campo class s ao VEG (typeVeg()) e NOVEG (typeNoVeg()). S o s ao apresentados pratos do dia que estejam, presentemente, a ser disponibilizados por, pelo menos, um restaurante.

4.2

Adicionar prato a encomenda

pedido o e-mail do cliente (reqClientId()), o nome do prato do dia (reqDishOfTheDayName()) e o n E umero de doses a ` s validac es. Se o nome do prato corresponder a encomendar (reqQuantity()). S o depois de obter os tr es dados procede a o o InvalidKeyException e se o prato n um prato n ao dispon vel gera a excepc a ao for adequado (os clientes vegetarianos n ao o NotAdequateException. podem seleccionar pratos n ao vegetarianos) gera a excepc a De seguida, lista os restaurantes que podem fornecer o prato do dia pretendido, usando o formato: restaurantId|plateFinalPrice|foodQuantity pago pelo cliente, ou seja, tem em conta o desconto, e foodQuantity e a Em que plateFinalPrice representa o prec o real que e quantidade do alimento, em gramas, do prato do dia. ent E ao pedido o nome do restaurante que efectua a venda (reqRestId()). Se a resposta corresponder a um identicador n ao apropriado, selecciona o restaurante que apresenta o prec o nal mais baixo, i.e., considerando o desconto. Se um prato s o pode automaticamente seleccionado sem listar os restaurantes e sem consultar o utilizador. ser fornecido por um restaurante, ent ao e 8

4.3

Finalizar encomenda

pedido o e-mail do cliente (reqClientId()), devendo car registado nos respectivos restaurantes as parcelas da encomenda E relevantes para cada restaurante.

Importa c ao de Dados Textuais

o de dados atrav o de gest moroso e e poss A introduc a es da aplicac a ao permite criar entidades. No entanto, o processo e vel o de objectos a partir de uma descric o textual (apresentada abaixo; este exemplo est substitu -lo pela criac a a a presente no cheiro o e nunca test.import). Note-se que estes dados textuais s ao fornecidos apenas como forma de tornar c omoda a inicializac a o (nem mesmo para salvaguardar o seu estado para execuc es futuras). s ao produzidos pela aplicac a o No processamento destes dados, assume-se que n ao h a entradas mal formadas (em particular, todos os identicadores referidos o do m j a est ao registados). Sugere-se a utilizac a etodo String.split, para dividir uma cadeia de caracteres em campos.
VEGET|James T. Kirk|kirk@starfleet.net OMNIV|Darth Vader|vader@imperial.net VEGET|Master Yoda|yoda@jedi.edu RESTAURANT|All Pizza|apizza@google.com RESTAURANT|Feel light|feelight@europe.com RESTAURANT|All you want|ALLyouWANT@lisbonweek.net VEGETABLE|alface|1 VEGETABLE|tomate|2 FISH|linguado|6 VEGETABLE|azeite|9 VEGETABLE|batata|4 MEAT|carne de porco|14 PREPARED|salada mista|alface=50|tomate=45|azeite=5 PREPARED|batata palha|batata=78|azeite=22 PREPARED|linguado grelhado|linguado=97|azeite=3 DOTD|All you want|linguado grelhado|250|10|0 DOTD|Feel light|linguado grelhado|220|12|20 DOTD|Feel light|salada mista|100|2|20 DOTD|All you want|alface|115|5|0

` meta-linguagem usada para descrever uma express Os formatos s ao os seguintes (os par entesis e o + pertencem a ao regular):
OMNIV|name|email VEGET|name|email RESTAURANT|name|email MEAT|name|calories FISH|name|calories VEGETABLE|name|calories PREPARED|name(|food-name=percentage)+ DOTD|restaurantName|food-name|quantity|price|discount

Execu c ao dos Programas e Testes Autom aticos

poss Usando os cheiros test.import, test.in e test.out (a disponibilizar), e vel vericar automaticamente se o programa dado produz o resultado esperado para um teste. Supondo que os cheiros test.in e test.out est ao no direct orio onde e o e que a localizac o do pacote rest e poss o apropriada da vari o comando de execuc a a vel com a denic a avel CLASSPATH o equivalente da m (ou da opc a aquina virtual: -cp), se for dado o comando abaixo, deve ser produzido um cheiro de sa da es a desenvolver s test.outhyp, que deve ser igual ao cheiro test.out (os pontos de entrada das aplicac o ao os m etodos main das classes indicadas):
java -DImport=test.import -Din=test.in -Dout=test.outhyp rest.textui.Manager java -Din=test.in -Dout=test.outhyp rest.textui.Outlet

o Em caso de sucesso, os cheiros das sa das esperada (test.out) e obtida (test.outhyp) devem ser iguais. A comparac a pode ser feita com o comando:
diff -b test.out test.outhyp

Este comando n ao deve produzir qualquer resultado quando os cheiros s ao iguais. Note-se, contudo, que este teste n ao garante o correcto funcionamento do c odigo desenvolvido, apenas vericando algumas funcionalidades. 9

Você também pode gostar