0% acharam este documento útil (0 voto)
3 visualizações21 páginas

Introdução à Programação em Java

O documento é um fascículo de exercícios práticos sobre Programação Orientada a Objetos em Java, destinado a alunos do segundo ano de SEIoT/IRS. Ele cobre tópicos como compilação, execução de programas, estruturas condicionais, manipulação de arrays e inclui exercícios práticos para reforçar o aprendizado. O material é estruturado em várias seções, cada uma abordando conceitos fundamentais e exercícios relacionados.

Traduzido por

ScribdTranslations
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações21 páginas

Introdução à Programação em Java

O documento é um fascículo de exercícios práticos sobre Programação Orientada a Objetos em Java, destinado a alunos do segundo ano de SEIoT/IRS. Ele cobre tópicos como compilação, execução de programas, estruturas condicionais, manipulação de arrays e inclui exercícios práticos para reforçar o aprendizado. O material é estruturado em várias seções, cada uma abordando conceitos fundamentais e exercícios relacionados.

Traduzido por

ScribdTranslations
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Universidade de Cartago Departamento de Informática e Telecomunicações

Instituto Superior de Ciências Aplicadas e Tecnologia


Mateur

Fascículo TP
Programação Orientada a Objetos
(Linguagem Java)

Para os estudantes de 2eme


` ann´ee SEIoT/IRS

AymenFerjani
[Link]@[Link]

Ano letivo 2021/2022


SOMMAIRE
Página

TP1: Introduction au langage Java 1

TP2: Introdução à linguagem Java (continuação) 6

TP3: Conceitos básicos do Oriente´


e objeto 10

TP4: Hh́erança, Polimorfismo e classe abstrata 13

TP5: Impl´
implementação de interfaces e gestão de exceções 18
Fascículo TP Departamento de Informática
et T´el´ecoms
Programação Orientada a ObjetosNível: 2eme
`
SEIoT/IRS

TP1: Introdução à linguagem Java


Objetivos

— Compilação e execução de um programa Java.


— Introdução de valores.
— Passagem de valores em linhas de comando (argumentos).
— Utilização de estruturas condicionais e iterativas.

1 Notions de cours
1.1 Compilação e execução de um programa Java
Antes de começar a escrever código Java, é necessário instalar um JDK (Java Development Kit).
kit de desenvolvimento) a fim de poder compilar e executar nosso código.
A escrita de um código fonte Java deve ser feita em um arquivo com a extensão .java.
a compilação deste último gerará outro arquivo com a extensão .classet que contém
pseudo-código. É este arquivo que é interpretado e executado pela máquina virtual Java (JVM).
A JVM é uma parte integrante do JDK.
A compilação e a execução de um arquivo Java podem ser feitas de duas maneiras diferentes,
seja com um IDE (Ambiente de Desenvolvimento Integrado), ou com um console.

1.1.1 Com um IDE


Vários IDEs Java existem no mercado, como por exemplo NetBeans, Eclipse,
IntelliJ, etc. A escrita do código é frequentemente assistida, assim como a compilação e a execução que
são lançadas com um simples clique.

1.1.2 Em modo console


Com o console, é necessário conhecer o comando de compilação (exemplo javac)
pois existem vários compiladores para Java. No entanto, a execução é sempre realizada
com o comando java seguido pelo nome da classe (sem a extensão). Aqui está um exemplo de
compilação e execução de um arquivo Java com o console Linux :

DossierDeTravail$ javac [Link]


DossierDeTravail$ java Olá
Olá a todos

1.2 Estrutura básica de um arquivo Java


public classNomeDaClasse{
// Os atributos (propriedades) desta classe
...
// Os métodos desta classe
...
// La m´ethode principale main doit^etre pr´esente dans une seule classe du projet
public staticvoidmain(String[]args) {
...
}
}

Aymen FERJANI página 1 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

Um arquivo fonte Java contém uma ou mais classes, mas apenas uma classe declarada.
publique. O nome do arquivo deve corresponder ao nome desta classe.
— Se o projeto desenvolvido é composto por um único arquivo, então este último deve necessariamente conter
a metodologia principal.
— Na programação procedural, os métodos são vistos como funções.
— O método principal deve sempre ter a seguinte assinatura:

public static void main(String[] args)

1.3 Tipos primitivos das variáveis

Tipo Signification

int Número inteiro entre -231 e 231-1.

duplo Código real em 64 bits.

caractere Caractere

booleano Bool´een

Observação
Existem também os tipos byte, short e long que são tipos inteiros.
— Também encontramos o tipo float que representa um real.
— Para as cadeias de caracteres, é preferível usar a classe String (que não é um
tipo primitivo).

1.4 Estruturas condicionais e iterativas


As estruturas condicionais e iterativas da linguagem C são retomadas em Java. Assim,
encontre as estruturas condicionais if e switch, mas também as estruturas repetitivas for, do
Enquanto enquanto. Existe também um loop chamado foreach prático para percorrer e exibir
os elementos de uma tabela ou de uma coleção:

int[]tab={20,-9,13,100,5};
// percorre e exibe cada elemento do array tab
para(intx: tab) {
[Link](x);
}

Aymen FERJANI página 2 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
e T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

1.5 Entrada de valores


A partir da versão Java 5, é possível operar a entrada de valores graças à classe
Scanner. Aqui está um exemplo :

import [Link]; // Importar a classe Scanner para entrada

public classExempleSaisie{
public static void main(String[] args) {
String cadeia;
inteiro
duplamente;
// Cr´eation d'un objet Scanner
Scanner lectureClavier=new Scanner([Link]);

// Exibição de uma mensagem antes da entrada


[Link]("Dê uma cadeia de caracteres: ");
// Entrada de uma cadeia de caracteres
chaine=[Link]();

// Exibição de uma mensagem antes da entrada


[Link]("Forneça um inteiro: ");
// Saisie d'un entier
x=[Link]();

// Exibição de uma mensagem antes da entrada


[Link]("Dê um real: ");
// Entrada de um real
y=[Link]();
}
}

1.6 Passagem de valores em linha de comandos (argumentos)


Seja a classeTeste a seguir:

public classTest{
public static void main(String[] args) {
[Link]("O primeiro argumento é " + args[0]);
[Link]("O segundo argumento é " + args[1]);
[Link]("O terceiro argumento é " + args[2]);
}
}

A passagem de argumentos para este programa em modo console se faz assim:

DossierDeTravail$ java Test bonjour158hello


O primeiro argumento é bom dia
O segundo argumento é 158
O terceiro argumento é hello

Aymen FERJANI página 3 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
e T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

2 Exercícios práticos
Para cada exercício, um novo projeto será criado.

Exercice 1
Criar a classe Hello com o seguinte código e, em seguida, testá-la:

public classHello{
public static void main(String[] args) {
[Link]("Olá a todos");
}
}

Exercício 2
Cr´eer la classeEx2, puis :
´
1. Escrever o método public int adição(int x, int y, int z) que retorna a soma de 3
entiersx,yetz.
2. Adicionar o método public int max(int x, int y, int z) que retorna o máximo entre
3 inteiros x, y, z.
3. Adicionar o método público booleano primo(int x) que verifica se x é um número primo
primeiro ou não.
4. Testar esses 3 métodos assim:

importar [Link];
classe pública Ex2{
//Definições dos métodos das questões 1, 2 e 3
...
public static void main(String[] args) {
Scanner saisie=new Scanner([Link]);
inta, b, c;
[Link]("Dê 3 inteiros: ");
a=[Link]();
b=[Link]();
c=[Link]();
Ex2 obj=newEx2();//Criação duma instância da classe Ex2
[Link](a+"+"+b+"+"+c+"="+[Link](a, b, c));
[Link]("O máximo dos 3 inteiros é " + [Link](a, b, c));
se([Link](a)) {
[Link](a+" é um número primo");
}
senão{
[Link](a + " nnão é um número primo);
}
}
}

Aymen FERJANI página 4 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

Exercício 3
Écrire un programme qui calcule et affiche la somme et le produit de 4 entiers pass´es en
argumentos.
Pour chaque argument, utiliser la m´ethode pr´ed´efi[Link](x)pour obtenir un
entier a partir de cet argument.

Exercício 4
´
Escrever um programa que permita ler um inteiro positivo introduzido na linha de comando
e exibi-lo na forma binária.

Aymen FERJANI página 5 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et Télémóveis
Programação Orientada a ObjetosNiveau: 2uma
`
SEIoT/IRS

TP2: Introdução à linguagem Java (continuação)


Objectifs

— Entrada de valores.
— Passagem de valores em linha de comando (argumentos).
— Utilização de estruturas condicionais e iterativas.
Manipulação de tabelas.

1 Noções de curso
1.1 Criação e manipulação de um array de tamanho fixo
A criação de um array de tamanho fixo é feita pela seguinte instrução:

type[]nomTableau=newtype[NombreElements];

Aqui, "tipo" designa um tipo básico ou uma classe. Aqui está um exemplo:

// Cr´eation d'un tableau de 5 entiers


int[]tab=newint[5];

Também podemos criar e inicializar um array ao mesmo tempo. Exemplo:

// Criação e inicialização de um array de 3 inteiros


int[]x={9,45,-22};

A manipulação de arrays em Java é idêntica à do linguagem C, com


a vantagem de poder conhecer o tamanho de um array graças ao atributo length.

1.2 Exemple
// Criação e inicialização de um array de 4 reais
double[]tab={12.0,2.6,0.5,100.11};

tab[2] = -16.125;// modifie lelemento de índice 2

// Exibição dos elementos do array


// [Link] retorna o tamanho do array
for(int i = 0; i < [Link]; i++) {
[Link](tab[i]);
}
/* ou bem com um loop foreach:
for(double x : tab) {
[Link](x);
} */

Aymen FERJANI página 6 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et Télémons
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

2 Exercices pratiques
Exercice 1
Écrire la classeAnn´eeavec une m´ethode qui permet de d´eterminer si une ann´ee est bissextile
ou não. Um ano é bissexto se tivermos um dos dois casos a seguir:
— O ano é divisível por 4 e não é divisível por 100.
— O ano é divisível por 400.

Exercício 2
Éscrever a classeDiaDaSemana com um método que, a partir de um inteiro representando um
jour de la semaine (entre 1 et 7), affiche le nom correspondant de ce jour.
Exemplos:
jour = 1 =>Affichage : ”C’est lundi”
jour = 2 =>Affichage : ”C’est mardi”

Exercício 3
Éscrever um programa que leia 2 argumentos que são um número inteiro positivo (denotado por n) e
uma cadeia de caracteres, então exibe essa cadeia n vezes (em linhas diferentes).
Por exemplo, se o usuário passar como argumentos "5" e "Olá", teremos a exibição seguinte
vant:

Bom dia1vez

Bonjour2fois

Bonjour3fois

Bonjour4fois

Bonjour5fois

Exercício 4
Éscreva a classe Perfeita com um método que recebe um inteiro positivo e indica se este último
é um número perfeito ou não. Um número perfeito é igual à soma de seus divisores próprios
(exceto ele mesmo).
Exemplos de números perfeitos:
6=1+2+3
28 = 1 + 2 + 4 + 7 + 14
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248

Exercício 5
Écrire un programme qui calcule et affiche la somme des entiers pass´es en argument.

Exercício 6
Éscrever a classe Par que possui 2 métodos. O primeiro permite preencher um array de inteiros.
A segunda exibe os elementos pares de um array de inteiros.

Aymen FERJANI página 7 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
e T´el´ecoms
Programação Orientada a ObjetosNível: 2eme
`
SEIoT/IRS

importar [Link];
classe pública Par
public void preencherTab(int[] t)
{/* preencher t com inteiros inseridos */}
publicvoidaffichagePair(int[]t)
{/* exibir os elementos pares de t */}

public static void main(String[] args) {


intn;
Scanner saisie = new Scanner([Link]);
faça{
[Link]("Informe o tamanho do array (>=2): ");
n=[Link]();
}
enquanto(n < 2);
inttab[] = new int[n];//Criação dum quadro de n inteiros
Par p=newPair();//Criação duma instância da classe Par
[Link](tab);
[Link]("Exibição dos elementos pares do array:");
[Link](tab);
}
}

Exercice 7
Éscrever a classe Tabayant com 3 métodos. O primeiro permite criar um array de inteiros de
taillen(`a saisir) e de le remplir. A segunda exibe os elementos de um array de inteiros. A
terceiro retorna o elemento mais alto de um array de inteiros.

importar [Link];
public classTab{
public staticint[]cr´eationTableau() {
/* 1. introduzir o tamanho do array, criação do array
[Link] le tableau`a partir d'entiers saisis
[Link] este quadro */}

public static void affichageTableau(int[] t)


/* exibir os elementos do array t */

public static int maxTableau(int[] t)


/* retornar l´el´ement le plus grand de t *}

public static void main(String[] args) {


Tab tab=newTab();//Criação duma instância da classe Tab
intt[] =[Link]´ationTableau();
[Link]("Exibição dos elementos do array:");
[Link](t);
[Link]("O máximo do array é " + [Link](t));
}
}

Aymen FERJANI page 8 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et Télècoms
Programação Orientada a ObjetosNível: 2eme
`
SEIoT/IRS

Exercício 8
Éscrever um programa que cria e preenche um array de reais a partir dos argumentos, então
inverta esta tabela e exiba esses elementos.

Exercice 9
Éscrever um programa que captura e preenche um array de strings, depois captura
uma cadeia e indica se essa cadeia se encontra no array. No caso de a cadeia existir,
o programa também deverá exibir sua posição na tabela.
Nota: Use o método [Link](cadeia) para comparar entre duas cadeias.
Exemplos:

String ch1="bonjour", ch2="bonjour", ch3="Bonjour";


[Link](ch2)// retorna verdadeiro
[Link](ch3)// retorna falso

Exercício 10
Éscrever um programa que permite inserir e preencher os elementos de um array
d inteiros, depois realiza a ordenação por seleção em ordem crescente neste array, e por fim exibe
o quadro.
Príncipe :
Para cada elemento tab[i], determinar o índice do menor elemento à direita de tab[i]
(menor que tab[i]), então permutertab[i] e tab[min]. Se não encontrarmos um elemento mais
pequeno quetab[i], então nenhuma permutação é realizada.

Aymen FERJANI página 9 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
e T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

TP3: Conceitos básicos da programação orientada a objetos

Objetivos

— Criar classes, instanciar objetos e chamar métodos.


— Compreender o princípio de encapsulamento de dados.

1 Exercícios práticos
Exercício 1
Deseja-se modelar um ponto em um plano com um sistema de coordenadas ortonormal.
´
1. Escrever a classe Ponto contendo os atributos necessários assim como um construtor recebendo
parâmetros.
2. Adicionar outro construtor sem parâmetros que inicializa um ponto na posição (0,0).
3. Para cada atributo, adicione um método acessor (get) para retornar o valor de
o atributo, e um método mutador (set) para modificar o valor do atributo.
4. Adicionar o método public void modificarCoord(double x, double y) que
permite modificar as coordenadas de um ponto.
´
5. Escreva o método público booleano mesmaPosição(Ponto p) que verifica se um ponto tem as
mês coordenadas que o ponto p.
´
6. Escrever o método público booleano éSimétrico(Point p) que verifica se um ponto é
simétrico ao ponto p em relação à origem do referencial (0,0).
7. Adicionar o método público double distancia(Point p) que permite calcular e
retourner la distance entre un point et le point p selon la formule suivante:
(x−xp )2+ (y−yp )2
p
Utilizar os métodos pré-definidos [Link](x, 2) para calcular o quadrado de um x e [Link](x)
para a raiz quadrada de um x.
8. No mesmo pacote, crie a classe TestPoint contendo o método main para
tester les m´ethodes de la classePoint:
classe pública TestPoint
{
public static void main(String[] args)
{
Ponto p1=newPoint(5,3);
Ponto p2 = novoPonto();
[Link]("p1("+[Link]()+","+[Link]()+")");
[Link]("p2("+[Link]()+","+[Link]()+")");
[Link](5,10);
[Link]("p2("+[Link]()+","+[Link]()+")");
se(![Link](p2))
[Link]("p1 e p2 n")não têm a mesma posição);
Ponto p3=newPoint(-5,-3);
[Link]("p3("+[Link]()+","+[Link]()+")");
se([Link](p3))
[Link]("p1 e p3 são simétricos");
[Link]("A distância entre p1 e p2 é " + [Link](p2));
}
}

Aymen FERJANI página 10 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
e T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

Exercício 2
Deseja-se modelar uma data caracterizada por um dia, um mês e um ano.
´
1. Escrever a classe Data com os atributos necessários, bem como um construtor que
inicializar uma data.
2. Para cada atributo, adicione um método acessor (get) para retornar o valor de
o atributo, e um método mutador (set) para modificar o valor do atributo.
3. Redefinir o método público String toString() que retorna uma data na forma:
dia/mês/ano
4. Adicionar o método privado booleano anoBissexto() que verifica se o ano de uma data
é bissexto ou não. Um ano é bissexto nas seguintes situações:
— Ela é divisível por 4 e não por 100.
— Ela é divisível por 400.
5. Adicionar o método privado int numeroDiasDoMes() que retorna o número de dias
du mois (exemple: mois = 1⇒nombre de jours = 31). Utiliser la m´ethode pr´ec´edente.
´
6. Escrever o método público booleano estValide() permitindo verificar se uma data é
correto ou não. Usar o método anterior.
7. Adicionar o método público booleano maisRecente(Data d) que indica se uma data é
mais recente do que a data d.
8. No mesmo pacote, crie a classe TestDate contendo o método main a fim de testar
os métodos da classe Data:
public class TestDate
{
público estático vazio principal(String[] args)
{
Date d1=newDate(28,2,2018);
se([Link]())
[Link](d1+" é válido");
Data d2=new Date(30,2,2017);
if(![Link]())
[Link](d2+" n'não é válido);
Data d3=newDate(17,10,2020);
se([Link](d1))
[Link](d3 + " é mais recente do que " + d1);
}
}

Exercice 3
Desejamos modelar uma pilha de inteiros armazenada sob a forma de um array.
1. Definir a classePilha tendo como atributos um inteiro tamanho (o tamanho da pilha), um
outro inteiro nome detalheMax (o tamanho máximo da pilha, uma constante) e um array
de inteiros nomep.
2. Adicionar um construtor, que recebe um parâmetro inteiro não nulo, que inicializa o tamanho como zero
defina tailleMax, e então crie o array com o tamanho tailleMax.
3. Adicionar o método acessor público int getTaille() permitindo retornar o tamanho de
a pilha.
´
4. Ecrire la m´ethodepublic boolean estVide()qui indique si la pile est vide ou pas.
5. Adicione o método público boolean estPleine() que indica se a pilha está cheia ou não.

Aymen FERJANI página 11 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
e T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

6. Adicionar o método público void exibir() que exibe os elementos da pilha.


´
7. Escreva o método público void empilhar(int x) que adiciona x ao final da pilha e incrementa
retorne 1 se a pilha não estiver cheia. Exiba uma mensagem se a pilha já estiver cheia.
´
8. Escrever o método público void depilar() que depila o último elemento (basta de
diminuir o tamanho de 1) se a pilha não estiver vazia. Exibir uma mensagem se a pilha já estiver
vide.
9. No mesmo pacote, definir a classe TestPile com o método main e testar os
métodos da classe Pilha.

Exercício 4
Desejamos modelar uma lista encadeada composta por vários nós onde cada nó
contém um inteiro.
´
1. Escrever a classeNoeudayant com atributos um inteiro e uma referência ao nó
seguinte nomee seguinte (tipoNoeud).
2. Adicionar um construtor à classe Noeud, que recebe um parâmetro inteiro, que inicializa val
a valor do parâmetro. A referência a seguir apontará para nulo.
3. Adicionar métodos acessores e mutadores à classe Nó que permitem recuperar
e de modificar os atributos desta classe.
4. Adicionar, no mesmo pacote, a classe Lista com como atributos uma referência sobre a
tˆete de liste nomm´eetˆete(typeNoeud) et un entiertaillequi est la taille de cette liste.
5. Adicionar um construtor à classe Lista, sem parâmetro, que inicializa a referência cabeça
.orezaelliattelluna
6. Adicionar métodos acessores e mutadores à classe Lista que permitem recuperar a
tê e a altura e de modificar apenas a tê.
7. Adicionar o método público booleano estVide() que indica se a lista está vazia ou não.
8. Adicionar o método público void afficher() que percorre a lista e exibe os valores de
seus nós.
9. Adicionar o método público void adicionarInteiro(int val) que adiciona um nó, tendo a
valor inteiro, no final da lista e incremento de 1.
´
10. Escrever o método public void removerInteiro(int val) que remove o primeiro nó
encontrado desde a cabeça com o valor val, e decremento detalhado de 1 se este nó foi
encontrado.
11. No mesmo pacote, adicione a classe TesteLista contendo o método main com o
código seguinte:
Lista lst=newListe();
[Link](15);
[Link](-9);
[Link](5);
[Link](-26);
[Link](42);
[Link]();
[Link]("Supressão de -26 depois 15:");
[Link](-26);
[Link](15);
[Link]();
[Link]("Adicionando 103:");
[Link](103);
[Link]();
[Link]("A lista contém " + [Link]() + " nós");

Aymen FERJANI page 12 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

TP4: Patrimônio, Polimorfismo e classe abstrata


Objetivos

— Utilização do patrimônio.
— Compreender o polimorfismo.
— Compreender a utilidade de uma classe abstrata.
— Criação e utilização de uma tabela dinâmica.

1 Noções de curso
1.1 Criação e manipulação de um array dinâmico
Para criar um array redimensionável, pode-se utilizar a classe ArrayList:
// Importar a classe ArrayList no início do arquivo
importar [Link];
...
// Criação de um array dinâmico de String
ArrayList<String>tab=newArrayList<>();

É preciso levar em conta que esta classe não permite criar arrays de tipos primitivos.
Para remediar essa falta, podemos utilizar as classes envoltórias.

1.2 Classes envoltórias (Wrappers)


As classes envelopadoras ou wrappers encapsulam os tipos primitivos. Cada tipo primitivo
possui então sua classe que lhe permite se comportar como um objeto:

Tipo primitivo Classe envoltório


booleano Booleano
caráter Personagem
byte Byte
curto Curto
int Inteiro
longo Longo
flutuar Flutuar
dobro Duplo

1.3 Algumas métodos da classe ArrayList


Voici quelques m´ethodes pratiques de la classeArrayList:

Aymen FERJANI página 13 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

Método Rˆole
adicionar(Objecte) Adicione o objeto ao final da tabela.

adicionar(inti, Objeto) Adicione o objeto ao índice do array.

remover(inti) Supprime l’´el´ement ayant l’indexidu tableau.

size() Retorne o tamanho do array.

obter(inti) Retorna o elemento do array com o índice i.

set(int, Objecte) Afete o objeto no índice da tabela.

1.4 Exemple
// Importar a classe ArrayList no início do arquivo, logo após o pacote
importar [Link];
...
ArrayList<String>tab=new ArrayList<>();

[Link]("Olá");
[Link]("Olá");
[Link](0,"Coucou");// adiciona ao início do array
Adeus
[Link]("Obrigado");

[Link](2);// suprime lelemento de índice 2 ("saudação")

for(inti= 0; i<[Link](); i++) {// parcourt le tableau


[Link]([Link](i));// exibe cada elemento
}

2 Exercícios práticos
Exercice 1
Uma empresa deseja gerenciar a lista de seus empregados com uma aplicação Java. Há
principalmente dois tipos de empregados: os executivos e os operários.
1. Sabendo que um empregado é descrito por seu número de matrícula, seu nome, sua idade e seu salário, definir
a classe Empregado com um construtor com parâmetros que inicializa todos os seus atributos.
2. Adicionar um atributo inteiro estático número inicializado em 0 e que será incrementado em 1
cada vez que um empregado é criado.
3. Adicionar os métodos getIdade, getSalario e setSalario, assim como o método estático
getNombre.
4. Red´efinir la m´ethode publiquetoStringqui retourne les informations d’un employ´e selon
esta forma:
matricule nom,a^ge ans, salaire dt
//Exemplo: E10268 Ahmed SASSI, 34 anos, 1200 dt

Aymen FERJANI página 14 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et Télécos
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

5. Definir, no mesmo pacote, a classe Operario sabendo que um operário tem as mesmas
propri´et´es d’un employ´e. Ajouter un constructeur avec param`etres qui initialise les valeurs
dos atributos.
6. Definir, no mesmo pacote, a classe Cadre sabendo que, além das propriedades de um
empregado, cada quadro tem uma função. Adicionar um construtor com parâmetros que
inicializar os valores dos atributos.
7. Redefinir o método toString na classe Ouvrier adicionando a palavra "Ouvrier".
fim da cadeia retornada. Exemplo:
E10270 Mounir DRIDI, 36 anos, 900 dt, Operário

8. Redefinir o método toString na classe Quadro adicionando a função do quadro


o fim da cadeia revertida. Exemplo:
E10268 Ahmed SASSI, 34 anos, 1200 dt, Analista

9. A empresa decidiu aumentar os salários de seus empregados de acordo com esta fórmula:
— Para os trabalhadores, um aumento de 100 dt.
— Para os executivos :
— Um aumento de 200 dt se a idade for inferior a 35 anos.
— Um aumento de 300 dt se a idade estiver entre 35 anos e 45 anos.
— Um aumento de 400 dt para os outros.
Declarar o método abstrato público aumentar na classe Empregado. Assim, a
classeEmpregado deverá ser abstrata, e o método aumentar deverá ser definido em
les classesOuvrieretCadre.
10. A fim de testar essas classes e seus métodos, crie, no mesmo pacote, a classe
TestEmpregado com o método mão com o seguinte código:
Empregado[] lista = novo Empregado[5];
liste[0] =newCadre("E10268","Ahmed SASSI",34,1200,"Analyste");
liste[1] =newCadre("E10269","Ridha DRIDI",46,1350,"Comptable");
liste[2] =newOuvrier("E10270","Mounir DRIDI",36,900);
liste[3] =newOuvrier("E10271","Alia ARBI",29,850);
liste[4] =newCadre("E10272","Amal TOUATI",38,1850,"Directeur RH");

for(int i = 0; i < [Link]; i++) {


liste[i].aumentar();
[Link](liste[i]);
}

[Link]("Foi criado " + Employé.getNombre() + " empregados");

11. Transformar a tabela lista em ArrayList.

Aymen FERJANI página 15 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et Télécops
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

Exercício 2
Queremos modelar os conceitos veículo, carro e avião.
1. Definir a classe Veículo que possui atributos de informações válidas para todo tipo
de v´ehicule: son mod`ele, son ann´ee d’achat, son prix d’achat et son prix courant.
2. Adicionar um construtor com 3 parâmetros (modelo, ano de compra e preço de compra) que
inicializar todos esses atributos. O preço corrente será fixado ao preço de compra.
3. Redefinir o método toString que retorna as informações de um veículo segundo a forma
seguinte:
mod`ele, ann´eeAchat, prixAchat dt, prixCourant dt
//Exemple: Peugeot 206, 2005, 16000 dt, 12000 dt

4. Adicionar os métodos acessores e mutadores getAnoCompra, getPrecoCompra


setPrixCouant.
5. Definir, no mesmo pacote, a classe Carro que herda de Veículo e tendo os
atributos adicionais a seguir:
— nome das portas
— potência fiscal
quilometragem
Adicionar um construtor com parâmetros que inicializa todos os atributos. Novamente, o
o preço corrente será fixado ao preço de compra.
6. Definir, no mesmo pacote, a classe Avion que também herda de Veículo e tendo
os seguintes atributos adicionais:
— nombre de passagers
— horas de voo
Adicionar um construtor com parâmetros que inicializa todos os atributos. Aqui também, o
o preço corrente será fixado ao preço de compra.
7. Redefinir o método toString na classe Carro adicionando as informações apropriadas
a la voiturea a fin da cadeia revertida. Exemplo:
PEUGEOT206,2005,20000.0dt,10000.0dt,4portes,5cv,200000km

8. Red´efinir la m´ethodetoStringdans la classeAvionen ajoutant les informations propres


o avião no final da cadeia revertida. Exemplo:
CESSNA CITATION II,1982,4000000.0dt,2200000.0dt,9passagers,15300heures

9. Declarar o método abstrato público modificarPrecoAtual(int anoAtual) em


a classe Veículo.
10. Definir o método anterior nas duas subclasses Carro e Avião de forma que
calcular o preço atual com base em certos critérios e atualizar o atributo
correspondente ao preço corrente:
Para um carro, o preço corrente é igual ao preço de compra:
— menos 2% para cada ano desde a compra até o ano atual.
— menos 1% para cada tranche de 10000km percorridos.
— Para um avião, o preço corrente é igual ao preço de compra menos 3% para cada
tranche de 1000 horas de voo, e menos de 1% para cada ano desde a compra até
ann´eeActuelle.
Atenção, nessas duas metodologias, se o preço se tornar negativo, então o colocamos em zero.
Aymen FERJANI página 16 de 19 AU: 2021/2022
Fascículo TP Departamento de Informática
e T´el´ecoms
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

11. A fim de testar essas classes e seus métodos, crie, no mesmo pacote, a classe
TestVeículo que tem o método main com o código a seguir:
ArrayList<V´ehicule>tab=newArrayList<>();

[Link](newVoiture("PEUGEOT 206",2005,20000,4,5,200000));
[Link](novaCarro('SUZUKI SWIFT', 2016, 30000, 4, 4, 38000));
[Link](newVoiture("FIAT 500",2010,20000,4,4,150000));
[Link](newAvion("CESSNA CITATION II",1982,4000000,9,15300));
[Link](newAvion("DAHER-SOCATA TBM 700",2001,3500000,5,18000));

for(V´ehicule v: tab) {// loop foreach


[Link](2020);
[Link](v);
}

Aymen FERJANI página 17 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et Télécos
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

TP5: Implementação de interfaces e gestão de


exceções
Objectifs

— Criar e implementar interfaces.


— Gerenciar as exceções.

1 Exercício prático
On veut impl´ementer le diagramme de classe suivant :

Respeitando os dados do diagrama:


1. Criar a interface Adicionável.
2. Definir a classe Reel que representa um número real.
O método plus(Object o) deve retornar um novo objeto do tipo Real que representa
a soma dos dois reais (o objeto corrente e o parâmetro o).
3. Na método raizQuadrada() da classe Real, lance uma nova exceção (do tipo
Exception) com a mensagem ''Impossível calcular a raiz de um número negativo n'' (n`a
substituir pelo valor do real) quando o número é negativo.
4. Definir a classe Complexe que representa um número complexo.
O método toString() deverá retornar a representação seguinte do número complexo:

(pReele + pImaginaire*i)
(5.2 + 3.6*i)

O método plus(Object o) deve retornar um novo objeto do tipo Complexo que


representa a soma dos dois números complexos (o objeto corrente e o parâmetro o).
5. A fim de testar essas classes e seus métodos, crie a classe Teste que tenha o método main
com o código seguinte:

Aymen FERJANI página 18 de 19 AU: 2021/2022


Fascículo TP Departamento de Informática
et Télécops
Programação Orientada a ObjetosNiveau: 2eme
`
SEIoT/IRS

Complexo c1=newComplexo(2,3.6);
Complexo c2=newComplexo(5.1,10.22);
Complexo c3=(Complexo)[Link](c2);
[Link](c1+" + "+c2+" = "+c3);

Rolo r1 = novoRolo(9.0);
Reel r2=newReel(-2.1);
tente{
[Link]("A raiz quadrada de " + r1 + " é " + [Link]());
}
capturar(Exceção e) {
[Link]([Link]());
}
tente{
[Link]("A raiz quadrada de " + r2 + " é " + [Link]());
}
capturar(Exception e) {
[Link]([Link]());
}
Reel r3=(Reel)[Link](r2);
[Link](r1+" + "+r2+" = "+r3);

6. Definir a exceção personalizada ExceptionValorNegativo com o método redefinido


public String getMessage()qui devra retourn´ee le message ”Impossible d’effectuer la
raiz do número negativo n” (n deve ser substituído pelo valor do real).
Modificar o método raizQuadrada() da classe Reel para que ele lance essa exceção
quando o número é negativo.
Modifier aussi la m´ethodemainde la classeTesten rempla¸cantExceptionpar
ExceçãoValorNegativo.

Aymen FERJANI página 19 de 19 AU: 2021/2022

Você também pode gostar