Programação II

2º Semestre 2003-2004


Programa

Paradigma da programação Orientada a Objectos: objectos, classes e mensagens. A linguagem Java como linguagem OO.  Definição de classes em Java. Métodos e variáveis de classe e instância. Overloading de métodos. Classes não instanciáveis. Hierarquia de classes e herança. Mecanismo de herança e criação de classes por esta via. Procura dinãmica de métodos. Herança versus composição de classes. Classes abstractas. Excepções. Interfaces. Input/output, streams.

top

Informações

Atendimento aos alunos:

Terça-feira

10:30-13:00
 

Mailing list da disciplina, inscreva-se  aqui.

Datas:
1º Teste
31-Março
Anf. 2
11:00
2º Teste
2-Junho
Anf. 2
11:00
Exame
22-Junho
Anf. 2,5
10:00
Recurso
12-Julho
Anf. 2-5
14:00
Entrega trabalho
14-Junho
-
-


Bibliografia:
Programação Orientada a Objectos em Java 2
F. Mário Martins
FCA editora

Exploring JAVA
Patrick Niemeyer & Joshua Peck
O' Reilly

top


Avaliação
   
1ª Frequência

Número Nome Nota
12221 José Eduardo Pereira Gomes Leite 12
12816 Cristina Isabel Félix Antunes 5
12867 Patrícia Isabel Luzio Dias 8
12906 Graciana do Carmo Carapinha Mestre 7
14034 Filipe Lázaro (N.inscrito) 7
14358 Sónia Isabel Pisco Costa 9
14578 Filipe Manuel Fernandes Capucho dos Santos 6
14774 Inês Costa Rodrigues 12
14912 Cláudio Nuno Viegas Menezes 6
15278 Sérgio Miguel Barata Dias 9
15399 Ricardo Bruno Ramalho Lucas 7
15437 Ana Rita de Brito da Graça Serrano Ferreira 3
15710 Amilcar Francisco Buanga N'zau 6
15884 Paulo Jorge Fidalgo Oliveira 8
16350 Luis Miguel Rosa dos Santos Reis 8
16537 Ricardo Jose Cabaceira do Nascimento 7
16629 Rui Pedro Percheiro Salvado 10
16953 Dinis Gaspar Miranda Pereira 8
17304 Tiago João Fonseca Moleirinho 13
17305 André Marcão Teixeira 10
17386 Francisco Luís Marinho do Rosário Matias 15
17483 Jorge Nuno Terrinca Bernardo da Fonseca Tomas 10
17604 Nuno Miguel Barata Chaves 9
17839 António Pedro Leite de Carvalho 11
17991 Miguel Rui Estrela Valadas 9
18212 Diogo Luís Alves Passarinho 11
18405 Pedro Miguel Rocha Pereira Fialho 10
18436 Carlos Manuel Vieira Campiao Limpinho 8
18453 Ana Lucia da Costa Gregorio 14
18459 Tiago Luis Cruz Mangorrinha Sousa 12
18503 Mario da Silva Gusmao 13
18540 Edgar Miguel Sarinhas Marino 3
18567 Roberto dos Reis Montinho 9
18575 Marcio Rafael Rodrigues de Jesus 6
18618 Bruno Miguel Canelas Mourinha 1
18628 Claudio Manuel Frade Ramos 3
18659 Bruno Miguel da Cunha Rodrigues 16
18660 Mario Jorge Costa Mourao 10
18778 Joao Manuel dos Santos Sequeira 6
18831 Joao Carlos da Ponte Marques Taleço 11
19011 Joao Pedro Pereira Perdigao 4
19281 Rute Isabel Godinho Pias 1
19286 Rui Filipe Carriço Lopes 1
19308 Daniel Fernando Santa Bárbara Rodrigues 1
19325 Francisco José da Silva Valentim 9
19339 Fernado Luís Barradas de Morais Marcelo 0
19369 Joaquim Manuel Pereira Rocha 6
19409 Nuno Miguel Emídio Carvão 8
19412 Carlos Alberto da Encarnação Valério 2
19431 Rui Manuel Lourenço Guerreiro 1
19435 Tiago Miguel Correia dos Santos 11
19508 Liliana Isabel Grazina Rosmaninho 4
19562 Paulo Alexandre Filipe Andrade 1
19586 João Vieira Pereira Guerra 8
19597 Rui Miguel Camelo Barrenho 3
19617 Carlos Jorge Lages Xavier de Figueiredo 3
19631 João Carlos Selésio de Morais 9
19688 Bruno Alexandre Reis de Almeida 14
19856 Dinarte Ilídio Azevedo Matos 0
19867 Alexandre Miguel da Silva Carvalho da Costa Ferreira 3
19892 Ricardo Luís Catalão Machado 1
19896 Ivo Henrique Alexandrino Carapinha 3
19918 Valério Domingos Valério 10
19943 César Peralta Madeira de Jesus Mendes 7
19984 Luís Miguel Belchior Oliveira 7
20019 Vítor Hugo de Sousa Carvalho 0
20046 Ana Dulce Barreto Gonçalves 3
20104 Pedro Luís Carro Vilhena de Carvalho 1
20109 Luís Caeiro Lapa de Carvalho 1
20139 Andreia Sofia Tavares Figueiredo 1
20238 José Alberto Manteigas Moleirinho 10

top

Aulas

Teóricas
Aula
Data
Sumário


1


25-Fev-2004
Apresentação do professor e da disciplina; Métodos  e datas de avaliação .
O paradigma da programação por Objectos. Conceitos de objecto, atributo, comportamento e mensagens.  Encapsulamento de dados, modularidade, abstracção de dados e reutilização de código.
Conceito de classe e instância.
Tipos primitivos (em Java), variáveis e estruturas básicas de controlo (if-else, for e while).
2
3-Mar-2004
Definição de classes em Java. Variáveis de instância e métodos de instância. Métodos constructores. Assinatura e 'overloading' de métodos.
3
10-Mar-2004 Criação e utilização de packages. Regras de acessibilidade de variáveis métodos e classes. Os modificadores public, private e protetected.  A classe Vector. Exemplos de aplicação.
4
17-Mar-2004
Varáveis e métodos de classe.  Classes não instanciáveis. Exemplos de aplicação.
5
24-Mar-2004
 Dia do Estudante.
6
31-Mar-2004
Avaliação- 1º Teste.
7 14-Abr-2004 Hierarquia de classes em Java. Noções de superclasse, subclasse, especialização, generalizção.  Propriedades do mecanismo de Herança, Overriding de métodos, as referências this e super. procura dinâmica de métodos. Exemplos de aplicação.
8 21-Abr-2004 Classes abstractas. Exemplos.
9 28-Abr-2004 Interfaces, definição e uso. Interfaces versus Classes abstractas. Interfaces pré-definidas no Java.  A interface Enumeration e Comparable.  Exemplos.
10 05-Mai-2004 Excepcões. Mecanismo de captação e tratamento de excepções no Java.  Exemplos.

top

Práticas
Aula Data Sumário
1
25-Fev-2004 02-Mar-2004
Apresentação. Familiarização com o ambiente de programação para o Java. O compilador de Java, javac, e o interpretador java. O método main, o primeiro programa em Java, HelloWorld.java.  Uso e experimentação dos tipos primitivos e estruturas de controlo. Realização de uma Makefile, com os comandos compile, run e clean.
2
3-Mar-2004
9-Mar-2004
Exercícios do livro adoptado (ex 1, pag 131)
Defina e desenvolva uma classe PmMB, que apresente a funcionalidade do referido cartão (Porta Moedas Multibanco). Cada instância desta classe, deverá possuir um titular e um saldo positivo. A partir da sua criação todas as classes deverão ser capazes de responder adequadamente a um conjunto de mansagens, que correspondem às operaçãoes que podem ser realizadas com o cartão:
  • Realização de um pagamento, caso seja possível;
  • Apresentação do saldo actual;
  • Realização de um carregamento do cartão com uma dada importância;
  • Indicação do número total de pagamentos realizados;
  • Apresentação dos dados do cartão ( titular e saldo);
3 10-Mar-2004
16-Mar-2004
Exercício 2, pag. 132:
Desenvolva uma classe FilaDeEspera, tendo por base um array(circular) que irá conter os nomes das pessoas na fila de espera. Tal fila deverá ter uma dimensão máxima. Cada instância deverá responder  às seguintes mensagens:
  • Qual o comprimento actual da fila;
  • Qual o comprimento máximo da fila;
  • Quem é o primeiro da fila;
  • Remover o primeiro da fila;
  • Inserir um novo nome na fila;
  • Número de vagas da fila.
4
17-Mar-2004
23-Mar-2004
Desenvolva  uma classe SetInteiros com o comportamento de conjunto  matemático. As operações usuais de teoria de conjuntos devem ser obviamente comtempladas na definição da classe, devendo ser permitido:
  • Criar conjuntos vazios, e conjuntos cujos elementos sejam passados através de um array de inteiros;
  • Saber se o conjunto é ou não vazio;
  • Saber se determinado inteiro é ou não membro dum conjunto;
  • Saber qual o i-ésimo inteiro do conjunto;
  • A dimensão do conjunto;
  • Clonar um conjunto, redifinindo o método clone();
  • Uma representação em String do conjunto, da forma {1,3,19,45,100},Redefinindo  o método toString().
  • Inserir ordenadamente um inteiro no conjunto;
  • Fazer a intersecção de dois conjuntos;
  • Fazer a união de dois conjuntos;
  • Saber se 2 conjuntos são iguais, redifinindo o método equals();
Sugestão: Use a classe Vector. Crie uma package Set, na qual está implementada a classe SetInteiros;
5 31-Mar-2004
13-Abr-2004
Resolva o exercício 2, do 1º Teste.
6 14-Abr-2004
20-Abr-2004
Crie um classe ParString, capaz de implementar uma estrutura formada por um par de strings. A classe deve possuir métodos para consultar e modificar cada uma das Strings, e implementar os métodos, clone(), toString() e equals().
Tendo por base a classe ParString, implemente a classe TriploString, capaz de representar triplos de strings. Implemente para esta classe os métodos que lhe permitem consultar e modificar cada uma das strings, e igualmente os métodos
clone(), toString() e equals().
Exercícios 1 e 2 , pag. 182 do livro.
7 21-Abr-2004
27-Abr-2004
Desenvolva um sistema de gestão de contas bancárias, capaz de realizar diversas operações bancárias sobre contas, tendo em atenção que existem de momento definidos três tipos de conta: Normal, Ordenado e a Prazo.
Todas as contas têm um número, um titular, uma morada, uma data de criação e um saldo. As contas normais, não permitem que o saldo seja inferior a 0. Nas contas ordenado, é possível ter um saldo negativo igual a um determinado montante, geralmente o correspondente ao ordenado mensal. As contas a prazo, rendem juros, em função do tempo que cada que cada depósito permanece na conta, juros esses definidos numa tabela própria.
Sobre todas as contas pretende-se ter disponíveis as seguintes operações:
  • Criação duma conta(com respectivas validações);
  • Débito(levantamento) duma quantia;
  • Depósito de uma quantia;
  • Consulta do saldo actual;
  • Consulta dos últimos 5 movimentos;
Exercício 7, pag. 184 do livro.
8 28-Abr-2004
4-Mai-2004
Continuação do exercício da aula anterior.
9 5-Mai-2004
11-Mai-2004
  • Modifique a classe ParString de modo a que implemente a interface Comparable.
  • Defina as, interface Magnitude, e  classe abstracta AbstractMagnitude, que corporizam o conjunto de características comportamentais de objectos, tais como igualdade(equals), comparabilidade(>,<,>=,<=) e teste do valor do receptor se encontrar dentro de dois limites (entre(inf,sup)).





top

Código
Algum código, correspondente a aplicações completas, desenvolvidas nas aulas teóricas...
aula1
Ponto.java
aula2
Contador.javaTeste.java, FilaEspera.java,TestFila.java
aula3
ListaInteiros.java
aula4
Triple.java, VendingMachine.java


Trabalho

A loja Planície tem ao dispor dos seus clientes um distinto conjunto de produtos. O stock inclui livros, dicionários, enciclopédias, agendas, cds audio, cds de dados com jogos e aplicações, e dvds com os últimos títulos de Hollywood.

Usualmente, existem vários exemplares do mesmo produto. Importa registar a quantidade de exemplares existente e um valor mínimo, a partir do qual é necessário repor o stock.

Existem três categorias de funcionários: caixa, repositor e gerente, cada qual com o seu salário base. O salário dum funcionário não é estático estando sujeito a alterações. Um funcionário pode ser aumentado anualmente, por aumento da inflação, ou por anuidade. A tabela salarial dos funcionários desta loja é por si definida. Seja justo mas sobretudo realista. Pense em soluções que permitam o mínimo de alteralções em situações futuras.

Para funcionários e clientes, a loja precisa de registar(no mínimo) o nome, a morada, o telefone, o nº de contribuinte.


Todos (ou aluguns) produtos valem pontos, com os quais a loja da Planćie pretende recompensar os seus mais fieis clientes. O esquema de incentivos é o seguinte:

  • Se entre Janeiro e Maio, um cliente armezenar um total de:

    • 200 pontos na compra de cds de música, tem direito a um bilhete(1 dia) para um conhecido festival de música que se realiza no mês de Junho;

    • 300 ou mais pontos tem direito a um bilhete de 3 dias para o mesmo festival.

  • Se acumular no espaço de um ano um total de 500 pontos, em quaisquer compras terá direito a um desconto de 25% no artigo mais barato na próxima compra que fizer.

        Nota: Quando um cliente usa uma oferta, o seu total de pontos volta a zero.

Use um esquema de pontos diferenciado para cada tipo de artigo, i.e. dicionários valem x pontos, livros valem y, cds de música valem z, etc. Não seja forreta, nem mãos largas na atribuição de pontos.


O seu trabalho, como já seria de esperar, é construir um package p2.loja, que lhe permita gerir a loja da Planície, nas condições enunciadas. O package deve apresentar as funcionalidades:

  • Para determinado produto, saber se existe em stock, quantas unidades existem e qual o seu preço;

  • Actualizar o preço do produto e adicionar uma quantidade de exemplares desse produto, repondo o stock;

  • Registar a venda de um conjunto de produtos, actualizando o stock. Os dados da venda e do cliente devem ficar registados;

  • Saber o número ou o valor totais dos produtos em stock;

  • Saber o dia de maior volume (pelo valor ou pela quantidade de produtos) de vendas. A mesma questão para um período definido entre duas datas;

  • Saber quais os n produtos mais vendidos. A mesma questão para um período definido entre duas datas;

  • Mostrar, cronologicamente, a lista de compras de um cliente, entre duas datas;

  • Determinar o cliente que mais gastou em compras na loja, entre duas datas;

  • Mostrar todas as compras registadas;

  • Fazer folhas de caixa diárias, onde estão registadas as compras do dia e o total em caixa. Uma folha de caixa pode ser iniciada com algum dinheiro inicial (para trocos). O total do dia não incluirá este dinheiro inicial.

  • Mostrar todos os dados de um cliente ou de um funcionário;

  • Mostrar a lista de clientes, por ordem alfabética do nome;

  • Adicionar um cliente ou um funcionário. Remover um funcionário;

  • Actualizar os dados de um cliente ou de um funcionário (morada, telefone...);

  • Actualizar o salário dos funcionários;

  • Calcular o montante total a pagar em salários a todos os funcionários da loja, descriminando o valor para cada categoria (caixa, repositor, gerente);

  • Após a venda de um produto, se a quantidade em stock for inferior ao mínimo estabelecido para a respectiva categoria deve ser mostrada uma mensagem de alerta e uma lista de fornecedores dessa categoria (directa ou indirectamente - exemplo relativo a CDRs: "CDRs" ou "dispositivos para armazenamento de dados");

  • Informar os clientes dos pontos que possuem e notificá-los caso estejam em condições de trocar os pontos pelos respectivos prémios;


As condições sobre o modo como será apresentado o trabalho serão anunciadas proximamente.

Bom trabalho.



Voltar página inicial