Resolução / Resumo de correção do exame

Documentos relacionados
Resolução / Resumo de correção do exame

U.C Laboratório de Desenvolvimento de Software. 6 de julho de 2018 INSTRUÇÕES

U.C Desenvolvimento de Software. 12 de julho de 2017 INSTRUÇÕES PARA A RESOLUÇÃO DA PROVA, ACONSELHA-SE QUE LEIA ATENTAMENTE O SEGUINTE:

U.C Laboratório de Desenvolvimento de Software. 6 de julho de 2018 INSTRUÇÕES

U.C Desenvolvimento de Software. 15 de junho de 2016 INSTRUÇÕES PARA A RESOLUÇÃO DA PROVA, ACONSELHA-SE QUE LEIA ATENTAMENTE O SEGUINTE:

U.C Desenvolvimento de Software. 12 de julho de 2017 INSTRUÇÕES PARA A RESOLUÇÃO DA PROVA, ACONSELHA-SE QUE LEIA ATENTAMENTE O SEGUINTE:

Documentos MS Word acessíveis

CAMPUS VIRTUAL. Manual de utilização. Docentes

AGRUPAMENTO de ESCOLAS Nº1 de SANTIAGO do CACÉM Ano Letivo 2013/2014 PLANIFICAÇÃO ANUAL

PLANIFICAÇÃO ANUAL. Documento(s) Orientador(es): Programa da disciplina da Direção-Geral de Formação Vocacional

2-Introdução e Conceitos Básicos das TIC

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Sistemas Embebidos I , Tiago Miguel Dias ISEL, ADEETC - Secção de Eletrónica e Telecomunicações e de Computadores

sisgep 2013 Declaração Mensal de Remunerações - AT (De acordo com a Portaria nº 6/2013 de 10 de Janeiro) Data última versão:

Engenharia de Software

Computação e Programação Exame Época de recurso

6 a Lista Complementar de Exercícios de CI208 Programação de Computadores 13/02/2014

Objetivos. Sistema Operativo em Ambiente Gráfico. Introdução às Tecnologias de Informação e Comunicação

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

1. Ligar o LogBook e esperar por sinal de GPS (Coordenadas e hora) para ver a hora dada por este.

[ Arquitecturas Móveis ] 2017/2018

CAMPUS VIRTUAL. Manual de utilização. Estudante

Escola Secundária Ferreira Dias Agualva - Sintra. Atividade 20

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Manual do Gestor da Turma

Conceitos avançados de programação. Módulo 8 Programação e Sistemas de Informação Gestão e Programação de Sistemas Informáticos

PLANIFICAÇÃO ANUAL DE TECNOLOGIAS DE INFORMAÇÃO E COMUNICAÇÃO (10º

Seedu. Manual do Utilizador do Seedu. Data de publicação: 30 de junho de Versão 1.0

Procedimentos Abertura/Fecho Ano

Conteúdo de Formação

Aula 13 Tratamento de Exceções. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Sumário. Ficheiros. Ficheiros

Exemplo de número de caixa. Exemplo de número de posto

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Relatório Único sisgep

Utilizar o Office 365 no iphone ou ipad

Programação com Objectos 1º Teste 2013/2014 1º Semestre 15 de Novembro de 2013, 18:00 (90 minutos)

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Nome: Nº de aluno: 2ª Ficha de Avaliação Teórica Data Limite de Entrega: 06/11/2016

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Universidade Aberta Serviços de Informática 29 de setembro de 2017 Página 1 de 6

Grupo Disciplinar Informática DISCIPLINA: Introdução às Tecnologias da Informação e Comunicação ANO: 9º Planificação a médio e longo prazo

Configuração eduroam Mac OS X (Autenticação TTLS)

A G R U P A M E N T O D E E S C O L A S D E O L I V E I R I N H A ( ) E S C O L A B Á S I C A D E O L I V E I R I N H A ( )

INSTALAÇÃO E CONFIGURAÇÃO

Sistema Operativo em Ambiente Gráfico. Área de trabalho

Programação Orientada a Objetos II

Plano Anual Curricular TIC - Pré-Escolar -

7 Mecanismos de gestão de memória. Prof. Ricardo Silva

MANUAL DO UTILIZADOR

IPCA MANUAL DO UTILIZADOR

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Programação Orientada a Objetos. Manipulação de Exceções

Escritório Virtual. Manual do utilizador Marketing para o setor grossista

Computação e Programação Exame Época de recurso

Integração por Web Services

Manual do utilizador. Registo, Acesso ao SILiAmb e Nomeação de Responsáveis. v1.0

Laboratório de programação II

Como começar a Jogar? Para iniciar o jogo a forma mais fácil é ir a e começar a jogar.

Grupo I [7v] b) [0,3] Em que componente do sistema de RPC será utilizado o campo identificador de operação?

OranGest. Reinstalar OranGest. Ficha Técnica Nº 8. Alameda Bonifácio Lázaro Lozano, 13, 1C Oeiras. T: W: magnisoft.pt.

Exame de 1ª Época Introdução à Programação IGE e ETI 2003/02/25-1º semestre de 2002/2003 ISCTE

Computer Setup Manual do utilizador

Gestão de Base de dados Formulários

MÓDULO 3 PÁGINAS WEB. Criação de Páginas Web

TUTORIAL PARA EDITORAÇÃO EM OJS 3.0

Manual Nero BurnRights

Sistemas Operativos. Introdução

SEPA 4 CORPORATE GUIA DE GESTÃO DE MANDATOS e DÉBITOS DIRETOS

Programação. Folha Prática 9. Lab. 9. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Síntese da Planificação da Disciplina de TIC - 9º Ano

Sistema de cópias de segurança

Criar e Apresentar Apresentações

Ficha de Unidade Curricular

Projecto de Laboratório de Computadores

Modelação de Sistemas de Informação

engenharia de requisitos

Programação Orientada a Objetos

O Manual do KCM Tablet. Jörg Ehrichs Tradução: José Pires

1. Introdução Principais pontos de impacto da certificação Entrada na Aplicação Aplicação Não certificada...

Conteúdo de Formação

Tecnologias. de Informação e Comunicação. 7ºAno. 1.º Período. Aula 5, 6. 1 Magda Lopes

Mecanismo de exceções em Java

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Registo de Acompanhamento de Projecto

Guião de Instalação do Player Displr Windows v1.3.

Contratação Inicial e Reserva de Recrutamento

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2002/ Valores

Quais as novidades do QuarkXPress 10.1

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Aparência. Lauri Watts Tradução: José Pires

Configuração eduroam Mac OS X (Autenticação TTLS)

BMW i Wallbox Connect Manual de atualização. Índice. Informações gerais 4. Download do ficheiro de atualização 5

ZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011

Manual Nero BurnRights

Manual de Integração. Soluções Pssst! e Tlim v8.15

Laboratório de Informática Avançada Automatização de Horários Manual do Professor

Transcrição:

Ministério da Ciência, Tecnologia e Ensino Superior Resolução / Resumo de correção do exame U.C. 21179 Laboratório de Desenvolvimento de Software 6 de julho de 2018 1.ª Parte (4 valores) 1. a) Linhas do código de referência onde há operações de input: 13. (0,5 valores) b) Linhas do código de referência onde há operações de output: 13. (0,5 valores) Observações: a nível do input, admitia-se como corretas as respostas 8 e 29 (linhas chamadas em consequência de input noutra parte do programa); Nenhuma (pois embora ShowDialog provoque input, isso pode não ser percetível a quem não tenha experiência de programação nesta API); 24/25 (pois embora não haja input na 24, pode-se considerar que esta o origina nas linhas das reticências). A nível do output, considera-se parcialmente certas as respostas (além da linha 13) 24/25 e 31, por motivos idênticos aos relatados para o input. 2. a) Segundo a abordagem de Krasner & Pope (1988): M:03, C:07, C:10, C:15, V: 18. V:28 (0,3 valores) b) Segundo a abordagem de Curry & Grace (2008): M:03, C:07, V:10, C:15, V: 18. V:28 (0,3 valores) c) Dúvidas ou dilemas com que se debateu para responder às alíneas a) e b) e justificações (0,4 valores): Espera-se dos alunos a identificação de aspetos do código cuja classificação como M, V ou C possa ser alvo de argumentação lógica a favor de mais do que uma destas componentes, apresentando esses dilemas e fundamentando as opções que tomaram. Apresentam-se aqui alguns exemplos de aspetos que poderiam mencionar como oferecendo dúvidas:

- na abordagem de Krasner & Pope, embora o input do bloco Obter do utilizador corresponda ao Controller, sendo admissível nesse processo pequenas ações de output exclusivamente para obter esse input, tal poderia ser um dilema: apresentar uma caixa de diálogo inteira não deveria ser responsabilidade da View? Expor este dilema leva a considerar a opção V:10 como correta na alínea 2a; - na mesma abordagem, a tarefa Mostrar a imagem corresponde à View. Contudo, como é necessário ler a imagem de disco para a poder mostrar, isso pode originar o dilema de considerar-se que este bloco de código tem partes da View e do Controller. Se esse dilema for exposto, considera-se a opção C:18 correta na alínea 2a; - na abordagem de Curry & Grace, o input é processado na View, mas a reação a ele, originando nova View, ocorre no Controller, pelo que a secção Reage ao clique pertence ao Controller. Contudo, podia surgir o dilema de considerar que a reação imediata seja na View e só depois transite para o Controller, optando o aluno por indicar V:08 e explicar este dilema, considerando-se neste caso essa opção como correta na 2b. 3. (1 valor, equitativamente distribuído pelos três casos) i: Classe FacePhoto Aplicação global Gestor de visualização ii: Classe FacePhoto Gestor de visualização iii: Aplicação global Classe FacePhoto Aplicação global Gestor de visualização 4. a) (0,4 valores) Não existe qualquer falha, erro ou falta, pois trata-se apenas de um comportamento e estado previsto, parte do fluxo normal de execução do programa. b) (0,3 valores)o aspeto essencial da resposta é dar um exemplo que demonstre a compreensão do significado do conceito de falha. São aceitáveis exemplos que sejam baseados em conceitos gerais de 2

programação, ainda que o comportamento exato na plataforma.net possa ser diferente. Por exemplo, pode não haver memória para criar o objeto referenciado por opendlg na linha 11, o que na plataforma.net origina nessa linha uma falha, mas poderia considerar-se, à imagem de outros ambientes, que a falha só ocorresse na linha 12, quando se tentasse aceder a uma propriedade ou atributo do objeto. O relevante é deixar claro que a falha é o acontecimento instantâneo (programa termina abruptamente, crasha, etc.) e não o estado de erro (estado inconsistente do computador) nem a ausência de código (falta) para lidar com ele. Outros exemplos poderiam ser usados. c) (0,3 valores) O aspeto essencial da resposta é dar um exemplo que demonstre a compreensão do significado do conceito de falta. Por exemplo, recorrendo ao mesmo exemplo da alínea b), considerase correto indicar como falta tanto a ausência de código para verificação do resultado do new como a não inclusão do new dentro de um bloco try. 2.ª Parte (8 Valores) 5. Tomando como base a sua resposta à pergunta 2, opte por uma das variantes do estilo arquitetónico MVC. Reescreva o código no estilo arquitetónico MVC, considerando o seguinte: a) Indique a variante escolhida por si para responder a esta pergunta e desenhe o diagrama MVC correspondente, substituindo os rótulos genéricos que encontra nos materiais de referência com os aspetos específicos deste caso. Usar os diagramas de referência da última página do enunciado e alterar o texto. Por exemplo, se a opção for pelo estilo de Krasner & Pope, solucionado em 2a) como: M:03, C:07, C:10, C:15, V: 18. V:28 então a bola M deveria ter o número 03, 3

a bola C os 07, 10 e 15 e a V os restantes. Os rótulos genéricos da comunicação e controlo também deviam ser substituídos. Há várias soluções admissíveis, sendo o essencial que se respeite a ligação entre módulos. Por exemplo, para Mensagens de visualização (ligação Controller-View) admitir-se-ia Mostrar a imagem (pois há uma transição controller->view no código). Para a ligação View->Model, podia-se indicar parte do FacePhoto_MouseMove ou consulta de facedescriptions, porque para mostrar a descrição de uma face na View é preciso consultá-la no Model. E assim sucessivamente. b) Defina as classes que pertencem aos componentes Model, View e Controller. Não utilize eventos, delegados, interfaces, nem exceções, apenas os atributos e métodos habituais. Deve-se usar a divisão da resposta 2a) ou 2b). Há várias soluções válidas. Por exemplo, na classe Model poder-se-ia ter os atributos faces e facedescriptions, bem como os métodos para o Controller solicitar a sua alteração e para a View consultar o valor atual. O Controller, no caso 2a), teria os atributos ligados ao input, como opendlg e o método de obter do utilizador o ficheiro a analisar. Já no caso 2b) estes elementos estariam na View. Também na View estariam os métodos de mostrar a imagem e a descrição. O Controller pode ter um método Lançar a View e outro Iniciar o Model, entre outras soluções. c) Escreva o código de um método Controller.Main(); que controle o funcionamento global da aplicação. 4

O método Controller.Main depende da resposta à alínea anterior, mas o essencial é que demonstre compreensão do funcionamento do estilo MVC escolhido, não da arquitetura.net. Por exemplo, para o estilo de Krasner & Pope: Controller.Main (){ model = new Model(); view = new View(model); Uri ficheiro; int opcao = -1; int ImagemEscolhida = -1; while (opcao!=0){ bool opcao = MostrarOpcoesEMostrarRato(); if(opcao==1){ //Escolher ficheiro de imagem ficheiro=obterficheiroanalisar(); model.guardarfacesedescricoes(processar(ficheiro)); view.mostrarimagem(ficheiro); } if(opcao==2) //Mostrar descrição view.mostrardescricao(imagemescolhida); } exit(); /*Para ser correto em.net deveria (e poderia) ser uma das soluções adequadas do.net, como Application.Exit ou Environment.Exit, mas não é a plataforma.net que está em avaliação, nem estas soluções faziam parte do conteúdo da unidade curricular, pelo que qualquer solução que explicite a intenção do programador seria considerada correta.*/ } Para o estilo de Curry&Grace bastaria que as tarefas de input (MostrarOpcoesEMostrarRato, ObterFicheiroAnalisar) fossem feitas no componente View. Isto poderia ser como métodos da classe única View ou como classes ViewCentral, ViewEscolha, ViewLeituraFicheiros. A abordagem de resolução é livre. 3.ª Parte (8 Valores) 6. Tomando como base a sua resposta à pergunta 5, reescreva o código para obter independência de componentes e separação de interesses, da seguinte forma: a) Defina e utilize eventos e delegados para reportar alterações nos módulos. b) Defina e utilize interfaces para que a comunicação de dados ocorra com menos dependências entre módulos. c) Defina exceções e escreva o código que as lança em caso de erro. Escreva igualmente o código que as apanha, respeitando as responsabilidades de cada módulo no MVC. 5

A resposta depende da pergunta anterior e tem muitas soluções possíveis. O essencial é demonstrar domínio da aplicação das três técnicas. a) Por exemplo, em vez do Controller chamar model.guardarfacesedescricoes(processar(ficheiro)); e depois view.mostrarimagem(ficheiro), pode definir um evento FicheiroProcessado, que será lançado quando terminar o método ProcessarFicheiro e associar a esse evento, como delegados, os dois métodos: GuardarFacesEDescricoes, do Model; e MostrarImagem, da View. b) Em vez de passar um endereço de ficheiro à View, que apenas tem de mostrar o conteúdo mas implica dar à View responsabilidades de o abrir e de o fechar, poder-se-ia definir uma interface iimagem que permite apenas obter os dados a mostrar (por exemplo, com um único método DadosDaImagem). O controller ficaria com a responsabilidade de fazer a leitura do ficheiro no método Processar (não era necessário implementá-lo) e passaria à View, como resultado do Processar um objeto ImagemLida que implementava iimagem. c) Qualquer aspeto que possa eventualmente gerar um erro pode ser escolhido, mas de preferência dentro da View ou do Model, para que a decisão de como reagir ao erro tenha de ocorrer no Controller. Por exemplo, pode-se assumir que o MostrarDescricao da View pode gerar um erro (por exemplo, não conseguir criar o tipo de letra ou outra situação do género), fazer-se um try à volta dele no Controller e no catch da exceção estar a apanhar uma exceção personalizada (por ex. ExcecaoVistaDesconfigurada). Dentro desse catch pode-se depois fazer qualquer tipo de reação, por exemplo, chamar um método da View para simplificar o ecrã (view.defineecrasimples) ou para o ler em voz alta (view.definedescricaoaudio) ou outra solução e lançar novamente o MostrarDescricao. Ou mesmo mudando o funcionamento para simplesmente mandar a view alertar o utilizador para o problema: view.indicarerro( Não foi possível mostrar a descrição, reinicie o programa. ). 6