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

Introdução à Programação Orientada a Objetos

O documento aborda conceitos de programação orientada a objetos em Java, incluindo a definição de classes, métodos, arrays e herança. Ele apresenta uma série de exercícios práticos que envolvem a criação de classes como Retângulo e Disque, além de manipulação de dados e tratamento de exceções. O conteúdo é voltado para estudantes de Licenciatura em Informática, com foco em desenvolver habilidades de programação e resolução de problemas.

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ções15 páginas

Introdução à Programação Orientada a Objetos

O documento aborda conceitos de programação orientada a objetos em Java, incluindo a definição de classes, métodos, arrays e herança. Ele apresenta uma série de exercícios práticos que envolvem a criação de classes como Retângulo e Disque, além de manipulação de dados e tratamento de exceções. O conteúdo é voltado para estudantes de Licenciatura em Informática, com foco em desenvolver habilidades de programação e resolução de problemas.

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

Programação orientada a objetos

Licenciatura 2 em Informática --- Folha n° 1

Primeiros passos
Lembre-se de que é preferível em Java que cada classe seja definida em um
arquivo que lhe é próprio. O nome do arquivo deve ser o nome da classe que ele
contém, ao qual se adiciona o [Link] nomes das classes devem ser
constituídos de palavras coladas com a primeira letra em maiúscula.

Exercício n° 1 (Olá Groland!)

Escrever um programa em Java que exibeOlá Groland!Compilar e executar isso


programa

Exercício n° 2

En Java, les chaînes de caractères sont représentées par des objets de la


classeString, cujas instâncias são não mutáveis. Desejamos poder converter
de cadeias de caracteres contendo números em valores inteiros. Fazer isso em
utilizando o método estáticostatic int parseInt(String)da classeInteiro.
Definir uma cadeia de caracteres contendo um inteiro e obter seu valor em forma
de inteiroint). Faire attention au fait que la méthode parseIntpode levantar
a exceçãoNumberFormatException. Declarar uma string contendo um
nome real e obter seu valor na forma de um ponto flutuante (duplo).

Exercício n° 3 (Tabelas)

• Declarar dois arrayst1et2de inteiros.


• Criar parat1et2arrays de 5 inteiros.
• Inicializadort2com os valores1, 567, -23, 78e4.
• Como fazer a declaração, a criação e a inicialização de um
tabelat3em uma única instrução?
• Escrever um método estático para encontrar o menor elemento de um
tábua.
• Écrire une méthode statique pour trier les éléments d'un tableau.

Exercício n° 4

Escreva um programa que receba uma expressão pela linha de comando


matemática em notação prefixada, da forma operador número número e que
ele avalia.
Exercício n° 5

Escrever um programa que aceita uma lista de inteiros na linha de comando, os


recopie em um array de inteiros, ordene o array e por fim exiba o conteúdo
do quadro.

Exercício n° 6 (Referências e igualdades)

• Criaruma tabelat de 4 referências sobre cadeias de caracteres. Criar uma


cadeia de caracteres cujo conteúdo éBomAtribuir os 2 primeiros
elementos da tabela com esta cadeia e o terceiro com a
cadeiaOláCriar uma nova cadeia de caracteres cujo conteúdo
est à nouveauBome afetar esta cadeia ao último elemento do
tabelat. Comparar 2 a 2 os elementos da tabela utilizando os
mé[Link](), [Link](), e o operador==. Que
constatamos?
• Concatenart[0]com a correntediausando a
mé[Link]()ou o operador+. Comparar 2 a 2 os elementos do
tabelas usando os mé[Link](), [Link](), e
o operador==O que se constata?

Exercício n° 7

• Escrever uma classePontorepresentando um ponto no plano e possuindo um


construtorPonto(int, int), um método realizando uma translação, e
um método de comparação de assinaturaboolean mesmoQue(Ponto).
• Criar um ponto e designá-lo por duas referênciasp1etp2.
Compararp1ep2com o operador==e com o métodosameAsEfectuar
uma tradução dep1e refazer as comparações. O que se constata?
• Seja o código seguinte
• p1 = new Point(1,1);
• p2 = novo Ponto(1,1);

Comparar novamentep1ép2. O que se constata? Execute a tarefap1


= p2O que se torna o objeto que estava referenciado porp2.

Exercice n° 8

Declarar um arrayt1contendo os valores2, 7, 5, 21e-7Recopiart1em um


tabelat2Comparar as tabelast1et2usando o operador==e lá
métodoigual.
Programmation orientée objet
Licença 2 de informática --- Folha nº 2

Classes e objetos
Consideramos retângulos no plano. Em um primeiro momento, supomos que para
simplificar que os lados dos retângulos são paralelos aos eixos. Um retângulo é
portanto completamente determinado pelo ponto na parte inferior esquerda e pelas suas dimensões
horizontal e vertical.

Exercice n° 1 (Rectangle)

Definir uma classeRetângulopermitindo manipular tais objetos. Definir três


construtores recebendo respectivamente como parâmetro 2 pontos, 1 ponto e 2 comprimentos
ou 4 comprimentos.

Exercício n° 2

Escrever um métodosuperfíciequi calcule a superfície do retângulo. Escreva uma


métodotraduzirque move um retângulo movendo o ponto na parte inferior e para
esquerda. O que acontece se vários retângulos compartilham o mesmo ponto.

Exercício n° 3

Escrever um métodocontémque teste se um ponto dado (em parâmetro) está em


o interior do retângulo. Escrever outro métodocontémqui teste se um retângulo
dado está dentro do retângulo.

Exercício n° 4

Escrever um métodomesmoQueque testa a igualdade de dois retângulos.

Exercice n° 5

Adicionar à classeRetânguloum atributonbrquem contabiliza o número de objetos de


a classeRetângulo.

Exercício n° 6

Escrever um métodocascoquem calcula o retângulo que envolve um conjunto de


retângulos. Este método recebe como parâmetro um array de retângulos e retorna
o menor retângulo que contém todos os retângulos da tabela.
Considera-se que um desenho é constituído por um conjunto de retângulos.

Exercício n° 7 (Desenhos)

Definir uma classeDesenho. Cada objeto desta classe contém um array de


retângulos cuja dimensão é definida na construção do objeto. No início, um desenho não
não contém nenhum retângulo. Escrever um métodoadicionarque permite adicionar um retângulo
a um desenho.

Exercício n° 8

Escrever métodossuperfícieettraduzirpara a classeDesenho. A superfície de um


o desenho é a soma das superfícies de seus retângulos, mesmo que estes se sobreponham.
Traduzir um desenho consiste em traduzir cada um de seus retângulos.

Exercício n° 9

Adicionar à classeDesenhoum métodocascoque calcula o retângulo envolvente dos


retângulos do desenho. A fim de poder calcular de maneira incremental este retângulo
englobante, adicionar um atributohullRectà classeDesenhoe modificar os métodos
para que levem em conta esse atributo.

Programação orientada a objetos


Licença 2 de informática ---

Herdando, mascaramento de método e ligação


tardia
Considera-se retângulos cujos lados já não são necessariamente paralelos.
aos eixos. Um tal retângulo é visto como um retângulo com lados paralelos que teria
inclinação de um certo ângulo em relação ao horizontal.

Exercício n° 1

Usando herança, defina uma classeRetângulo Inclinadopermitindo manipular


de tais objetos. Definir construtores apropriados.

Exercício n° 2
Definir um métodorotacionarno espírito do métodotraduzir.

Exercício n° 3

De quais métodos herda a classeRetânguloInclinadaRedefinir aquelas que o


necessitante.

Exercício nº 4

Para cada uma das chamadas de método abaixo, diga se será compilado
corretamente e, nesse caso, qual método é realmente chamado na execução
?
Ponto p = novo Ponto(1,2);
Retângulo r = novo Retângulo(p, 2, 3);
Rectangle t = new SlantedRectangle(p, 2, 3);
SlantedRectangle s = new SlantedRectangle(p, 2, 3);

[Link]([Link]ície());
[Link](2);
[Link]([Link](p));

[Link]([Link]ície());
[Link](2);
[Link]([Link](p));

[Link]([Link]ície());
[Link](2);
[Link]([Link](p));

Exercício n° 5

É a classeDesenhodefinido anteriormente pode conter retângulos


inclinados? Será que os métodossuperfície, contémetcascoda
classeDesenhoainda funcionam corretamente?

Exercice n° 6

Definir um métodoString toString()na sala de aulaRetânguloÉ na verdade


uma definição ou uma redefinição? É necessário redefini-la na
classeSlantedRectangle?

Exercice n° 7

Redefinir o métodoigualnas aulasRetânguloeSlantedRectangle.

Considera-se as seguintes definições de classes


classe A {
void f(A o) {
[Link]("void f(A o) na A");
}
}
classe B estende A {
void f(A o) {
[Link]("void f(A o) dans B");
}
}

Exercício n° 8

O que exibe o fragmento de programa a seguir?


A a = new A();
A ab = new B();
B b = new B();

a.f(a);
a.f(ab);
a.f(b);
ab.f(a);
ab.f(ab);
ab.f(b);
b.f(a);
b.f(ab);
b.f(b);

Exercício nº 9

Agora adicionamos à classeB o método seguinte


void f(B o) {
[Link]("void f(B o) na B");
}
É uma redefinição ou uma sobrecarga? O que exibe então o fragmento de
programa de l'exercício 8?

Exercício n° 10

Finalmente, adicionamos à classeA o método seguinte


void f(B o) {
[Link]("void f(B o) na A");
}
É uma redefinição ou uma sobrecarga? O que o fragmento então exibe?
programa do'exercício 8?

Exercício nº 11

O que exibe o fragmento de programa a seguir?


[Link](a instanceof A);
[Link](ab instanceof A);
[Link](b instanceof A);
[Link](a instanceof B);
[Link](ab instanceof B);
[Link](b instanceof B);

Exercício n° 12

Na sala de aulaRetângulofoi definida uma metodologiaboolean contém(Retângulo).


Esse método deve ser redefinido na classeRetânguloInclinado? Quais casos
não estão cobertos por esta redefinição? Adicionamos então um métodobooleano
contém(PowerPointInclinado)nas aulasRetânguloeRetângulo Inclinado. Quais
cas não estão sempre cobertos por esses acréscimos?

Exercice n° 13

Consideramos as definições das seguintes classes


classe C {
char ch = 'C';
char getCh() { return ch; }
}
classe D estende C {
char ch = 'D';
char getCh() { return ch; }
}
O que exibe o fragmento de programa a seguir?
C c = new C();
C cd = novo D();
D d = new D();

[Link]([Link]);
[Link]([Link]());
[Link]([Link]);
[Link]([Link]());
[Link]([Link]);
[Link]([Link]());
Programação orientada a objetos
Licenciatura 2 em Informática --- Folha n° 4

Interfaces e classes abstratas


Além dospontose dosretângulosvimos nas sessões anteriores, estamos interessados
agora aos discos. Considera-se que um disco é determinado por seu centro e
son rayon.

Exercício n° 1

Definir uma classeDisquecom construtores apropriados assim como


métodostraduzir, superfícieecontém.

Nas sessões anteriores, foi definida uma classeDesenhoque permitia


reagrupando retângulos.

Exercice n° 2

Qual é o bom método para ter desenhos capazes de reunir ao mesmo tempo
retângulos e discos. Poderá usar uma interfaceFigura.

Exercice n° 3

La classe Desenhopossui métodostraduzir, superfícieecontémPode ela


implementar a interfaceFigure? Qual é o objetivo de fazer isso?

2 Expressões aritméticas
Agora consideramos expressões aritméticas formadas a partir de
constantes reais (números flutuantes) e utilizando as quatro operações aritméticas
usuais (adição, subtração, multiplicação e divisão). Uma tal expressão é
por exemplo3 + (4.7 + 2.3) * 5.

Essas expressões aritméticas são representadas por árvores binárias. Os nós


Os nós internos da árvore contêm os operadores, enquanto as folhas da árvore
contêm as constantes. Os filhos esquerdo e direito de um nó interno representam
as duas sub-expressões à esquerda e à direita. A expressão 3 + (4,7 + 2,3) * 5
a árvore da figura abaixo.
FIG 1. A árvore da expressão 3 + (4.7 + 2.3) * 5

A organização em interfaces e classes

Exercício nº 4

Definir uma interfaceExprAritmque declara as funcionalidades de uma expressão


aritmética. A única funcionalidade necessária é poder ser avaliada. Declarar
em consequência uma métodoavaliarum bom tipo.

Para representar a expressão, vamos criar objetos para cada um dos nós. Esses
objetos serão, é claro, instâncias de classes diferentes dependendo se se trata de
nós internos ou de folhas.

Exercício n° 5

Definir uma classeConstantpour représenter les constantes des expressions.

Exercício n° 6

Definir quatro classesAdição, Subtração, MultiplicaçãoeDivisionpara os


operações aritméticas. Observa-se que essas quatro classes compartilham muitos de
propriétés. Comment faut-il faire pour partager le code ?

Exercício n° 7

Redefinir o métodotoStringa fim de exibir as expressões em notação infixa.


Escrever métodosprefixoesufixopermitindo exibir as expressões em
notação prefixo e sufixo.

Exercice n° 8

O que é necessário adicionar para que as expressões aritméticas possam conter


variáveis como na expressão 3 * x + 7? Como definir a
métodoavaliaçãopara uma variável?
Parseurs

A leitura de uma expressão aritmética é feita por meio de um analisador.


parseur é um objeto capaz de criar uma expressão aritmética a partir de uma
cadeia de caracteres.

Exercice n° 9

Definir uma classe abstrataParserDeExpressãoAritméticatendo dois métodosanalisar. A


a primeira método recebe como parâmetro uma cadeia de caracteres, enquanto a segunda
prend un Leitor.

Exercice n° 10

Escrever uma classeAnalisadorPrefixopermitindo ler uma expressão aritmética em


notação prefixa.

Exercício n° 11 (difícil)

Escrever uma classeAnalisador Infixpermitindo ler uma expressão aritmética em


notação infixa.
Programação orientada a objetos
Licenciatura 2 em Informática --- Folha n° 5

Exceptions
Exercício n° 1

Escreva uma função que procure um objeto em um array. Se o objeto for encontrado, a
a função retorna a primeira posição onde o objeto está. Caso contrário, a função lança
uma exceçãoNoSuchElementException.

Exercício n° 2

Escreva uma função que procure um objeto em uma lista. Se o objeto for encontrado, a
a função retorna a primeira célula onde o objeto está localizado. Caso contrário, a função gera uma
exceçãoNoSuchElementExceptionPoderemos usar uma exceção quando o objeto
est trouvé.

Exercício n° 3

Escrever uma função que recebe um array de strings como parâmetro e que retorna a
valor inteiro da primeira cadeia que pode ser lida como um inteiro pela
méthode parseInt. Se nenhuma cadeia puder ser lida como um inteiro, a função
levanta uma exceçãoNumberFormatException.

Exercício n° 4

Qual é a exibição do trecho de código abaixo?


class Essai1Exception estende Exception {
Essai1Exception(String s) { super(s); }
}
class Essai2Exception estende Exception {
Essai2Exception(String s) { super(s); }
}
classe Essai3Exception estende Essai1Exception {
Essai3Exception(String s) { super(s); }
}
classe Exemplo {
static void throwEssais(int i) lança Exceção {
tente {
switch (i) {
caso 1: lançar nova Essai1Exception("Essai1Exception de throwEssais");
caso 2: lançar nova Essai2Exception("Essai2Exception de throwEssais");
caso 3: lançar nova Essai3Exception("Essai3Exception de throwEssais");
padrão: lançar nova Exceção("Exceção de throwEssais");
}
}
finalmente {
[Link]("Finalmente de throwEssais");
}
}
public static void main(String [] args)
{
para (int i = 1; i < 4; i++) {
try { throwEssais(i); }
catch (Essai3Exception e) { [Link]("Catch Essais3"); }
catch (Essai1Exception e) { [Link]("Capturar Essai1"); }
catch (Exceção e) { [Link]("Capturar Exceção"); }
finalmente { [Link]("Finalmente de main"); }
}
}
}
Programação orientada a objetos
Licença 2 de informática --- Folha n° 6

Flots
Exercício n° 1

Écrire un programme Java qui effectue la copie d'un fichier. Ce programme prend
na linha de comando o nome do arquivo fonte e o nome do arquivo de destino.

Exercício n° 2

Escrever um programa Java que exiba o conteúdo de um arquivo destacando


MAJUSCULE TOUS LES CARACTÈRES QUI PEUVENT L'ÊTRE.

Exercice n° 3

Escrever um programa Java que escreve em um arquivo um array e uma lista e depois lê novamente
esses objetos.

Exercício n° 4

Escreva um programa que remove os espaços em branco no final de cada linha de um arquivo.

Exercice n° 5

Escrever classesBitInputStreametBitOutputStreampermitindo fazer


entradas/saídas bit a bit.
Programação orientada a objetos
Licença 2 de informática --- Folha n° 7

Coleções

FIG 1 - A hierarquia das coleções

FIG 2 - A hierarquia dos mapas

Exercício n° 1

Escrever um programa Java que indexe as linhas de um arquivo. Para cada linha
diferente, o programa memoriza o número de ocorrências desta linha no
arquivo.

Exercício nº 2

Repetir o exercício anterior indexando as palavras em vez de indexar as linhas.

Exercício n° 3

Escrever um programa Java que classifique as linhas de um arquivo em ordem lexicográfica.


Exercice n° 4

Repetir o exercício anterior usando a ordem inversa.

Exercício n° 5

Implementar a interfaceListacoleções Java sobre listas programadas a uma


sessão anterior. Vamos implementar em particular o iterador com a ajuda de uma classe
interno.

Você também pode gostar