MESTRADO EM REDES E SISTEMAS DE COMUNICAÇÕES PROGRAMAÇÃO EM COMUNICAÇÕES

Documentos relacionados
Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC, Programação em Comunicações

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Programação em Comunicações. Programação Orientada por Objectos. Ademar Aguiar.

LEIC-A / MEIC-A 2007/2008 (1º

Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos)

Programação com Objectos. 2º Teste 2015/2016 1º Semestre

POO29004 Programação Orientada a Objetos

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Orientação a Objetos e Java

Diagramas de Use Case

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Módulo 13. Socket. Programação Orientada a Objetos Java (Rone Ilídio)

4 Conceito de Herança

Programação com Objectos Teste Teórico 18 de Dezembro de 2008, 19:00 (120 minutos)

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Nome: Número: Segunda Parte (3 valores) Primeira Parte (7 valores)

Programação com Objectos Teste Teórico (repescagem) 24 de Janeiro de 2009, 09:00 (120 minutos)

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

Sockets e Threads em Java

Instituto Superior de Engenharia de Lisboa

Ficha Prática 10. António Nestor Ribeiro, Paulo Azevedo, Mário Martins PPIV (LESI) 2005/06

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

1 Introdução e Conceitos básicos

Programação Orientada a Objetos Relacionamentos entre classes

9 Classes Abstractas e Interfaces

Programação Na Web. Servlets: Ciclo de Vida. Agenda. Visão geral sobre ciclo de vida. Nascimento de uma Servlet. Execução de uma Servlet

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Conceitos de Programação Orientada a Objetos

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Nome: Número: Primeira Parte (3 valores) Segunda Parte (7 valores) PERGUNTA 1.1 PERGUNTA RESPOSTA NOTA

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

LEIC-A / MEIC-A 2007/2008 (1º

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada aos Objectos I

Nome: Número: Primeira Parte (7 valores) Segunda Parte (3 valores)

Programação com Objectos 1º Teste Tipo 1º Semestre (90 minutos)

Linguagem de Programação II Relacionamento entre classes

Sockets: Sumário. Resumo das Propriedades de UDP e de TCP

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

Classes e Objetos em Java. Algoritmos e Programação I. Classes. Classes. Modificadores de Acesso. Classes. Revisão

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Análise de Sistemas Informáticos FREQUÊNCIA 14JUN2002

Diagramas de Interacção

Sistemas Distribuídos

Linguagem de Programação II Implementação

Linguagem de Programação I Apresentação da Disciplina

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

Manipulação de arquivos. João Paulo Q. dos Santos

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Interfaces POO. Prof. Marcio Delamaro

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Programação Estruturada e Orientada a Objetos

Diagramas de Package

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Linguagem de Programação III

Resumo das Propriedades de UDP e de TCP

Linguagem de Programação II Implementação

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Universidade Estadual de Santa Cruz

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Palavras Reservadas da Linguagem Java

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

Edital Nº. 04/2009-DIGPE 10 de maio de 2009

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

CA: Cidade: UF CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I

Classes e Objetos. Sintaxe de classe em Java

Modelo do Mundo Real. Abstração. Interpretação

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

Conceitos de Programação Orientada por Objectos. Rui Camacho Programação 2

Programação Java (nível intermediário) 4. Polimorfismo

Interfaces e Classes Internas

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Mestrado em Engenharia Física Tecnológica

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Linguagem de Programação III

Transcrição:

MESTRADO EM REDES E SISTEMAS DE COMUNICAÇÕES Resolução do Exame de 23 de Novembro de 2001 I. Conceitos de Orientação por Objectos Para cada uma das seguintes perguntas classifique quanto ao seu valor lógico (Verdadeiro e Falso) as afirmações das suas alíneas. I.1. Os princípios fundamentais do modelo objecto são: abstracção, encapsulamento, modularidade, hierarquia, tipos, concorrência e persistência. O encapsulamento: a. salienta as características dum objecto consideradas essenciais e que o distinguem de todos os outros tipos de objectos, fornecendo, portanto, contornos muito bem definidos relativamente à perspectiva do utilizador. FALSO: o texto refere-se à abstracção e não ao encapsulamento. b. é a forma de ligar uma classe a um objecto, de tal modo que objectos de diferentes tipos não possam ser trocados entre si, ou no máximo, possam ser trocados apenas de forma controlada. FALSO: o texto refere-se aos tipos e não ao encapsulamento. c. é o processo de esconder todos os detalhes dum objecto que não contribuem para a definição das suas características essenciais. I.2. Um objecto possui estado, comportamento e identidade. O estado de um objecto: a. é a propriedade que o permite distinguir de todos os outros. FALSO: o texto refere-se à identidade e não ao estado. b. é a forma como ele age e reage, em termos do seu comportamento e em termos de passagem de mensagens. FALSO: o texto refere-se ao comportamento e não ao estado. c. engloba todas as propriedades do objecto, mais os valores correntes de cada uma dessas propriedades. I.3. Uma linguagem de programação orientada aos objectos deve possuir características que permitam usar técnicas de programação orientada aos objectos. a. Na programação orientada aos objectos os sistemas são modularizados com base nas funções ou métodos. FALSO: o texto refere-se à programação estruturada. b. Na programação tradicional os sistemas são modularizados com base nas estruturas de dados. c. Uma das técnicas da programação orientada aos objectos consiste em definir uma classe como extensão ou restrição de outra. Ademar Aguiar, João Pascoal Faria 1 FEUP

I.4. Considerando os cinco atributos de um sistema complexo: a. Os sistemas hierárquicos são normalmente compostos por poucos tipos de subsistemas diferentes, mas dispostos em combinações várias. b. A complexidade toma a forma de uma hierarquia de vários subsistemas interrelacionados, que por sua vez têm os seus próprios subsistemas, e assim sucessivamente, até aos componentes elementares. c. A escolha dos componentes primitivos dum sistema não é arbitrária, e é independente do observador do sistema. FALSO: a escolha dos componentes primitivos é de facto arbitrária. I.5. Tendo em consideração o modelo objecto: a. O modelo objecto orienta a construção de sistemas no sentido de torná-los muito complexos. FALSO: os sistemas resultantes são menos complexos. b. O modelo objecto produz sistemas sobre formas intermédias estáveis, logo mais flexíveis e reusáveis. c. O modelo objecto reduz o risco de desenvolvimento de sistemas complexos. I.6. Tendo em consideração as noções de classes e de objectos: a. Cada classe é uma instância de algum objecto e cada instância tem zero ou mais classes. FALSO: os termos classe e objecto estão trocados. b. A estrutura e comportamento de objectos similares são definidos na classe comum. c. Do vocabulário do domínio do problema obtêm-se as abstracções chave que por sua vez originam as classes e objectos. Ademar Aguiar, João Pascoal Faria 2 FEUP

II. Modelos UML A empresa YAO (YET ANOTHER OPERATOR) pretende desenvolver um sistema de software denominado BESTCALL para disponibilizar aos seus clientes sob a forma de um serviço web, um serviço telefónico ou de uma aplicação Java cliente. O sistema tem como objectivo indicar ao utilizador qual o operador de telecomunicações que cobra o menor valor para estabelecimento de uma ligação telefónica entre um número de origem e outro de destino, para uma determinada duração prevista. Adicionalmente, o sistema pode também estabelecer directamente a ligação através de um número verde da YAO. Após uma análise do sistema a desenvolver, enumeraram-se os seguintes requisitos: A utilização do sistema de software BESTCALL inicia-se quando o utilizador introduz um número de origem, um número de destino (ambos com 9 digitos), e uma duração prevista (em segundos). Com base nestes dados de entrada e em informação disponibilizada por um sistema externo PRICEEXPERT (responsável pela gestão e actualização da informação sobre os tarifários praticados no mercado), o sistema calcula a melhor opção em termos de operador a utilizar e indica o resultado ao utilizador através de uma sequência de digitos a introduzir no telefone. O sistema destina-se a ser utilizado como um servidor e deve suportar diferentes tipos de clientes, que incluem uma aplicação Java cliente (BESTCALLSOCKETCLIENT), um cliente HTTP (BESTCALLHTTPCLIENT), e um cliente telefónico (BESTCALLTONECLIENT), às quais correspondem diferentes interfaces, respectivamente: interface gráfica interface textual e modelação em frequência A funcionalidade do sistema BESTCALL resume-se a suportar a interface com o utilizador nas suas três variantes e a efectuar um cálculo para encontrar o menor custo cobrado pelas operadoras, tendo como base informação disponibilizada pelo sistema PRICEEXPERT. O sistema PRICEEXPERT mantém actualizada informação sobre os diferentes operadores alternativos no mercado, os produtos que oferecem, as condições de utilização e os respectivos tarifários. Atendendo aos diferentes critérios encontrados para a tarifação das chamadas telefónicas, concluiu-se que os dados minimos a armazenar deveriam ser: tipo de cliente, operador origem, operador destino, distância, duração, tipo de arredondamento da duração (ao segundo ou ao minuto, por exemplo), desconto absoluto, desconto percentual. Assume-se que os dados de facturação acima mencionados são calculados offline com base na informação disponibilizada pelos operadores. O sistema BESTCALL é responsável ainda pela autenticação de utilizadores e gestão de sessões de utilização. Embora por defeito, o sistema não obrigue a autenticação de utilizadores, e cada sessão de utilização corresponder apenas a um pedido, o acesso a serviços adicionais poderá requerer autenticação e gestão de sessões de utilização do sistema. II.1. Diagrama de Casos de Utilização a. Identifique os actores intervenientes no sistema descrito. Podem ser considerados actores intervenientes no sistema, os diversos tipos de utilizador (via web, via telefone, via aplicação Java) e o sistema externo PRICEEXPERT. b. Enumere os principais casos de utilização do sistema. Os casos de utilização primários são simplesmente o "Calcular melhor operador" e o "Consultar PriceExpert". c. Desenhe o diagrama de casos de utilização para o sistema, representando apenas os actores que iniciam casos de utilização. II.2. Diagrama de Classes Ademar Aguiar, João Pascoal Faria 3 FEUP

a. Elabore um diagrama de classes em UML para o sistema acima enunciado, criando atributos/métodos e completando as associações encontradas com a informação que achar conveniente. Nota: sugere-se que elabore o diagrama começando por identificar as classes, os seus atributos e métodos, as associações (nomes e cardinalidades) entre classes, e depois as relações de herança. b. Supondo que durante a vida do sistema, surgiram dois novos tipos de interfaces a suportar (SMS e WAP), reveja o diagrama anterior e apresente num diagrama parcial as modificações que entendeu serem necessárias. Ademar Aguiar, João Pascoal Faria 4 FEUP

II.3. Diagrama de Estados Considere o diagrama abaixo apresentado que descreve os vários estados possíveis de um objecto da classe SESSION. a. Descreva de forma sucinta o diagrama acima e indique em que estado o objecto ficará depois de receber a sequência de eventos (login, received request, finished, received answer, received request, finished), sabendo que o estado inicial é o initializing. b. Que alterações sugere efectuar ao diagrama anterior para representar a possibilidade de o login não suceder (utilizador/password incorrecto) e apenas existir uma segunda possibilidade de login. Por motivos de segurança, se a segunda tentativa também falhar, o sistema aguarda 10 segundos antes de terminar a sessão. Os objectos da classe SESSION podem estar em três estados principais: initializing, que é o estado inicial do objecto, e do qual transitam para o sub-estado waiting do estado alive após o evento login; alive, que é por sua vez composto pelos três sub-estados waiting, process request e answer request; deste estado o objecto transita para o estado ending após o evento logout; a transições internas a este superestado são para o estado process request após a recepção do evento received request, deste para o estado process request após a recepção do evento finished, e finalmente deste para answer request quando o evento received answer é recebido; ending, é o estado final. Após a sequência de eventos dada, o objecto encontrar-se-á no estado answer request. As alterações a efectuar por forma a suportar os novos requisitos em caso de falha de login, poderão ser as apresentadas abaixo no diagrama. Ademar Aguiar, João Pascoal Faria 5 FEUP

II.4. Diagrama de Distribuição (Deployment) Os sistemas BESTCALL e PRICEEXPERT são utilizados em modo cliente/servidor. Os clientes utilizam uma interface que comunica com o servidor remoto em bestcall.yao.com. O sistema PRICEEXPERT residente na máquina priceexpert.yao.com, comunica com o sistema BESTCALL por ligação IP e acede a uma base de dados relacional nela armazenada através de JDBC. Desenhe um diagrama de distribuição que inclua os sistemas BESTCALL e PRICEEXPERT e que represente a arquitectura anteriormente descrita (3 tipos de clientes e servidores) e a configuração acima descrita, completando com os detalhes que considerar convenientes. III. Programação em Java III.1. Linguagem Java a. Implemente em linguagem Java uma declaração possível para os atributos e métodos das classes BESTCALL, BESTCALLTEXTUI, BESTCALLTONEUI e PRICEEXPERT. public class BestCall { public Resposta calculamelhoroperador(pedido pedido) { public boolean login(string user, String passwd) { public void logout(string user) { private PriceExpert priceexpertsystem; private Vector utilizadores; private BestCallUI textui; private BestCallUI toneui; private BestCallUI graphicalui; private Vector pedidos; public class BestCallTextUI implements BestCallUI { public class BestCallToneUI implements BestCallUI { public class PriceExpert { public void actualizatarifarios() { public Tarifa obtertarifa() { private Vector tarifas; Ademar Aguiar, João Pascoal Faria 6 FEUP

b. Apresente uma implementação para o diagrama de estados da classe SESSION anteriormente apresentado. public class Session { private int state; // possible states final private int INITIALIZING = 0; final private int WAITING = 1; final private int PROCESS_REQUEST = 2; final private int ANSWER_REQUEST = 4; final private int ENDING = 8; final private int UNKNOWN_STATE = -1; // possible events final private int LOGIN = 16; final private int RECEIVED_REQUEST = 32; final private int FINISHED = 64; final private int RECEIVED_ANSWER = 128; final private int LOGOUT = 256; public Session() { setstate(initializing); // initializing... public void receiveevent(int event, Object eventmessage) { int finalstate = gettransition(this.state, event); if (finalstate!= UNKNOWN_STATE) { processevent(event, eventmessage); setstate(finalstate); public int gettransition(int fromstate, int event) { switch(fromstate) { case INITIALIZING: if (event == LOGIN) { return WAITING; case WAITING: if (event == RECEIVED_REQUEST) { return PROCESS_REQUEST; if (event == LOGOUT) { return ENDING; case PROCESS_REQUEST: if (event == FINISHED) { return ANSWER_REQUEST; case ANSWER_REQUEST: if (event == RECEIVED_ANSWER) { return WAITING; case ENDING: default: return UNKNOWN_STATE; public void processevent(int event, Object eventmessage) { switch(event) { case LOGIN: // processing login... case RECEIVED_REQUEST: // process request... case FINISHED: // answer request... case RECEIVED_ANSWER: // sending answer... case LOGOUT: // terminating... default: private void setstate(int s) { this.state = s; Ademar Aguiar, João Pascoal Faria 7 FEUP

III.2. Package java.net a. Apresente uma implementação possível para a classe BESTCALLSOCKECTSERVER, considerando que existem já implementados os métodos abaixo mencionados e que a comunicação entre clientes e servidor é realizada através do porto 1234. i. Strng readline (InputStream in), que lê de in uma linha de argumentos e devolve-a em formato String; ii. Vector scanarguments(string argumentsline), que processa os argumentos e devolve um vector com os argumentos a passar ao método de cálculo seguinte; iii. Result calculate(vector arguments), que calcula um resultado com base nos argumentos passados em formato a enviar ao cliente através do método de escrita de resultados abaixo; iv. void writeresult(result result, OutputStream out) que permite escrever os resultados do cálculo no OutputStream passado; public class BestCallSocketServer { public Result calculate(arguments args) { public void writeresult(result result, OutputStream out) { public String readline(inputstream in) { public Arguments scanarguments(string s) { public static void main(string[] argv) { ServerSocket s; s = new ServerSocket(1234, 10); catch (IOException e) { System.err.println("Unable to create socket"); e.printstacktrace(); return; new BestCallSocketServer(s.accept()); catch (IOException e) { private Socket socket; private BestCall bestcallsystem; BestCallSocketServer(Socket s) { socket = s; execute(); public void execute() { InputStream in; PrintStream out = null; Result result; String argumentsline; Arguments arguments; in = socket.getinputstream(); out = new PrintStream(socket.getOutputStream()); argumentsline = readline(in); arguments = scanarguments(argumentsline); result = calculate(arguments); writeresult(result, out); catch (IOException e) { if (out!= null) out.print("error\n"); out.close(); socket.close(); catch (IOException ie) { return; out.print("good:\n"); in.close(); out.close(); socket.close(); catch (IOException e) { Ademar Aguiar, João Pascoal Faria 8 FEUP

b. Atendendo a que a operação calculate() pode consumir demasiado tempo, sugira modificações ao programa para suportar uma utilização em diversos threads. public class BestCallSocketServer extends Thread { public Result calculate(arguments args) { public void writeresult(result result, OutputStream out) { public String readline(inputstream in) { public Arguments scanarguments(string s) { public static void main(string[] argv) { ServerSocket s; s = new ServerSocket(1234, 10); catch (IOException e) { System.err.println("Unable to create socket"); e.printstacktrace(); return; while(true) new BestCallSocketServer(s.accept()); catch (IOException e) { private Socket socket; private BestCall bestcallsystem; BestCallSocketServer(Socket s) { socket = s; start(); public void run() { InputStream in; PrintStream out = null; Result result; String argumentsline; Arguments arguments; in = socket.getinputstream(); out = new PrintStream(socket.getOutputStream()); argumentsline = readline(in); arguments = scanarguments(argumentsline); result = calculate(arguments); writeresult(result, out); catch (IOException e) { if (out!= null) out.print("error\n"); out.close(); socket.close(); catch (IOException ie) { return; out.print("good:\n"); in.close(); out.close(); socket.close(); catch (IOException e) { Ademar Aguiar, João Pascoal Faria 9 FEUP