Você está na página 1de 5

Classes e Objetos

Classe é um modelo a partir do qual podem ser criados objectos.


Classe = dados + funções (operações sobre os dados).
Analogia como o mundo físico: uma planta de uma casa, permite criar objectos físicos de casas com as
características definidas na planta.
Classe Aluno: permite armazenar os dados relativos a um aluno e operações sobre esses dados.

Conceito de classe: Tipo de objeto. Ex: Caixas de Texto, rótulos…


o Propriedades e métodos.
o Construtores de objetos de classe.
o Métodos.
 Objeto: instância de uma classe e permite representar um objecto concreto. É de uma determinada classe
(tipo de dados), cada objeto contém dados diferentes nas propriedades, mas realiza as mesmas operações da
sua classe.
Notação uml: representação gráfica e mais fácil de ler de classes.
Exemplo de declaração de classe em java:

import java.util.*;

public class Jogador {


String Nome;
Integer pontuacao;

public Jogador(String Nome, int pontos)


{ this.Nome = Nome;
this.pontuacao=pontos;
}

@Override //redefinir um método que já existe numa classe superior.


public String toString()
{
return("nome=" + this.Nome + " pontuacao=" + this.pontuacao);
}
}

Exemplo de utilização da classe Jogador:

public class Main {

public static void main(String[] args) {


Jogador J = new Jogador("João",50);
System.out.println( J.toString() );
}
}

Exercícios:
1. Construir um programa orientado a objetos para armazenar e calcular Icq.
a. Declarar uma classe com o nome Icq capaz de armazenar os dados: Número do cartão de cidadão,
nome, perímetro de cintura (inteiro), perímetro do quadril (int) e sexo(String). A ficha pode ser
preenchida de 2 formas: todos os campos ou apenas os campos de perímetro de cintura e perímetro
de quadril.
b. Declarar uma classe com os construtores:
i. Icq_exc(cod_erro) para devolver um código de erro, número inteiro no caso de situações de
exceção em objetos do tipo Icq.
ii. Icq_exc(cod_erro), mensagem) para devolver um código de erro e uma mensagem no caso
de situações de exceção em objetos do tipo Icq.

c. Completar a definição na alínea a) para lançar exceções do tipo Icq_exc com código de erro ou
código de erro e mensagem no caso de dados inválidos para a ficha de Icq.

2. Criar uma classe com o nome Contacto para armazenar um nome, um número de telefone e o email.
a. Declarar construtores que criem um contacto no caso dos seguintes dados:
i. Nome, tel e email.
ii. Nome e tel
iii. Nome e email
b. De modo idêntico ao exercício anterior declarar uma classe Contacto_exc para representar situações
de exceção relativas a contactos.

3. Criar uma classe com o nome Aluno capaz de registar os seguintes dados: nome:texto, sexo: inteiro ( 0 –
masculino, 1 – feminino) , data_nascimento: data e morada_atual: texto.
a. Criar um método com o nome Idade(data_ref) que calcule a idade na data de data_ref.
b. Criar um método com o nome Idade() que calcule a idade em relação à data actual.

4. Uma classe com o nome Eq2grau capaz de representar uma equação do 2º grau ax2+bx+c=0.
a. Criar o métodos tem_solucoes() -> booleano que devolve verdadeiro ou falso conforma a equação
tem soluções ou não.
b. Criar o método soluções() -> Double[2] com as soluções da equação. Se a equação não tiver soluções
deve devolver NaN ou lançar uma exceção. No caso de ser lançada uma exceção escolher entre as
alternativas de usar uma das exceções pré-definidas no sistema ou criar a exceção Eq2grau_exc.

5. Criar uma classe com o nome ponto capaz de guardar as coordenadas (x,y).
 Definir um construtor de pontos que apenas crie pontos a partir de 2 números reais que representam as
coordenadas de um ponto.
 Definir um construtor de pontos que crie um ponto a partir de outro ponto, i.e., crie um novo ponto com
os valores das coordenadas do ponto inicial.
 Definir um método com o nome distância que receba como argumento um ponto e calcule a distância
deste ponto até esse ponto.
 Tornar os dados internos da classe (Lat e Lng) privados e definir os métodos necessários para processar
esses dados.
6. Definir uma classe com o nome Triangulo capaz de armazenar um triângulo recorrendo a 3 pontos.
 Definir um método com o nome E_triangulo que indique se aqueles 3 pontos formam um triângulo
válido.
 Definir um método com o nome perímetro que calcule o perímetro do triangulo.
 Definir um método com o nome área que calcule a área do triângulo. Ver o exercício 19 da ficha 1.
 Definir um método com o nome classifica_triangulo que devolva como resultado o texto “Equilátero”,
“Isósceles” ou “Escaleno” conforme o triângulo for equilátero, Isósceles ou escaleno.

7. Resolver o exercício 4 – Correlações da FT4 – vetores e matrizes com programação orientada a objetos.
a. Utilizando a linguagem UML especificar a classe Correlação: atributos, construtores e métodos.
b. Construir um programa para testar o funcionamento da classe:
i. Construr/usar uma função ler_matriz_correlação que devolva uma matriz de dimensão
[2,n] com as n amostras da correlação.
8. Definir uma classe com o nome jogoGalo capaz de armazenar um tabuleiro de 3 x 3 inteiros para o jogo do
Galo. Cada célula pode conter um valor: 0=vazia, 1= jogador 1 e 2=jogador 2.
a. Declarar o construtor para criar a matriz e inicializar as células a zero.
b. Construir um método com o nome limpa_tabuleiro que coloque todas as células a 0, para indicar
vazio.
c. Construir um método com o nome jogada(linha,coluna,jogador) que coloque na célula indicada por
linha, coluna o valor indicado em jogador (1 ou 2).
d. Construir um método com o nome vitoria que devolva como resultado um dos seguintes números
conforme a situação:
0 – empate, ie, nenhum jogador ganhou e o tabuleiro está cheio.
1 – ganhou o jogador 1.
2 – ganhou o jogador 2.
3 – ainda nenhum ganhou mas o jogo ainda decorre, ie, há células livres.

9. Definir uma classe com o nome LocalizacaoGPS para armazenar uma localização fornecida por um sensor
GPS constituída por:
a. Latitude (Lat): um número real com 7 ou 8 casas decimais de precisão.
b. Longitude (Lng): um número real com 7 ou 8 casas decimais de precisão.
c. DataHora: uma data (DD-MM-AAAA) e hora (HH:MM:SS) correspondente à data e hora da leitura
da latitude e longitude.

10. Definir uma classe com o nome Pergunta, para que permita criar perguntas para um questionário de escolha
múltipla. Conforme forem sendo resolvidas as alíneas, construir um mapa uml da classe pergunta.
Uma pergunta é constituída por:
 id, um identificador (inteiro) único para a pergunta
 Questão (texto) que contém o texto da pergunta a colocarão utilizador.
 Opcao A, opcaoB, opcaoC e opcaoD (textos) que constituem as escolhas múltiplas a mostrar ao
utilizador. Não é obrigatório a questão ter 4 opções. A questão pode ter de 2 a 4 opções. Se, por
exemplo, só tiver 2 opções as opções opcaoc e opcaod devem ficar a null.
 Resposta_correta, um inteiro de 1 a 4 que indica qual a opção correta.
a. Declarar a classe.
b. Declarar um método de classe com o nome Contador_perguntas que indique quantas perguntas foram
criadas até ao momento.
c. Declarar construtores de Pergunta que permitam criar perguntas com 2 a 4 opções. O construtor deve
validar que o número da resposta correta é valido naquela pergunta, por exemplo, um pergunta com
2 opções não pode ter como resposta_correta 3. Lançar exceções especificas do tipo
Pergunta_Exc() em caso de exceções em perguntas.
d. Construir o método ToString() que crie um texto com os dados da pergunta.

11. Declarar uma classe com o nome perguntas capaz de armazenar um conjunto de perguntas. Para armazenar
as perguntas utilizar um array. Construir um programa de opções, com uma opção para cada método que for
sendo criado.
a. Declarar o método construtor de Perguntas(), que inicialmente deve criar um array de perguntas de
tamanho 0.

b. Construir o método Count() que devolve um inteiro a indicar quantas perguntas existem no array de
perguntas.

c. Construir o método ToString() que gere um texto com a lista de perguntas existentes no array.

d. Construir o método adiciona_pergunta(Pergunta) que receba uma pergunta e acrescente essa


pergunta ao array de perguntas.

e. Construir o método get_pergunta( id) que devolve como resposta a pergunta com o identificador id
do array de perguntas. Se a pergunta não existir no vetor devolver uma exceção do tipo
Perguntas_Exc().

f. Construir o método procura_pergunta(id ou Pergunta) que devolve um valor lógico a indicar se a


pergunta existe ou não no array de perguntas.

g. Construir o método elimina_pergunta(id ou pergunta) que elimine a pergunta do array de perguntas.


Se a pergunta não existir no array devolver uma exceção do tipo Perguntas_exc().
Nota: para eliminar a pergunta, procurar a posição dessa pergunta no array. Copiar a última
pergunta do array para essa posição e, por último eliminar a última posição do vetor.
Para eliminar a última pergunta do array -> copiar todas as perguntas para outro vetor de perguntas
exceto a última. Atribuir o novo vetor ao array de perguntas original.

12. Utilizando a fig.1 exemplificativa da notação uml construir um programa java com um conjunto de opções
que permitam registar cursos, módulos, alunos e inscrições conforme descrito na fig.
a. Declarar as classes necessárias para a representação da informação descrita.
b. Efetuar uma lista das operações que o programa deve permitir realizar, tais como registar alunos,
módulos, cursos, inscrições ou módulos concluídos.
c. No programa principal construir uma interface por menus e opções numeradas para cada uma das
operações de cada classe.

13. Criar uma classe para representar o registo de um livro com os seguintes atributos:
 Número de registo – indica o número de registo de entrada.
 ISBN – número internacional de conteúdo de livro.
 Titulo
a. Declarar uma variável de classe com o nome ContadorRegistos, inicialmente a 0. Este contador é
incrementado sempre que é criado um novo registo.
b. Construir uma função de classe com o nome dados_validos que receba um Isbn, um titulo e um autor e
devolva um booleano V/F a indicar se os dados formam um registo válido.
c. Declarar um construtor Livro(ISBN, titulo, Autor ) com Isbn >0 e autor≠ ””, titulo≠””.
d. Criar uma classe de exceção com o nome Livro_exc que além de um texto de erro possa ter um código
inteiro de erro. Alterar o construtor anterior para devolver uma exceção deste tipo se os dados não forem
válidos para o registo.
e. Redefinir o método toString para listar o conteúdo do registo do livro.
f. Redefinir o método Equals que devolva V/F respetivamente se 2 livros tiverem ISBN iguais ou não.
g. Redefinir o método HashCode() para devolver o nregisto do livro.

Você também pode gostar