Buscar

MATERIAL OFICIAL

Prévia do material em texto

CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
CONTEÚDO PROGRAMÁTICO
Unidade I - Conceitos Fundamentais de Programação Orientada a
Objetos
1. – Histórico da linguagem Java;
2. – Definição de Classes e Objetos;
3. – Comandos básicos da linguagem Java.
Unidade II - Classes e Objetos
1. – Definição e implementação de classes;
2. – Atributos e métodos;
3. – Membros privados e membros públicos;
4. – Criação de objetos como instâncias de classes.
Unidade III - Métodos
1. – Métodos-membro, acessadores e modificadores (getters 
& setters);
2. – Funções construtoras;
3. – Sobrecarga.
Unidade IV – Herança e Polimorfismo
1 – Derivação de classes;
2 – Relações entre classes-base e classes derivadas;
3 – Herança;
4 - Sobreposição de métodos;
5 – Classes abstratas;
6 – Interfaces de Objetos.
Unidade V - Entrada e Saída
1 – Processamento de arquivos;
2 – Classes e objetos stream;
3 – Leitura e gravação em arquivos-texto e binário;
4 – Leitura e gravação de objetos.
1
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Unidade VI - Exceções
1 – Tratamento de erros
2 – Capturando exceções
Unidade VII - Conceitos Avançados
1 – Assertions;
2 – Garbage Collection;
3 – Classes fundamentais do pacote java.lang;
4 – O framework Collections.
Unidade VIII - Threads
1 – Classe Threads e Métodos;
2 – Ciclo de Vida de um Thread;
3 – Prioridades e Agendamentos;
4 – Sincronização;
5 – Relacionamento Produtor/Consumidor;
6 – Threads Daemon e a Interface Runnable;
7 – Multi-threads.
2
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
UNIDADE – I
HISTÓRICO DA LINGUAGEM JAVA 
Na busca de Inovações tecnológicas a Sun em 1992 formou um
time que, liderado por James Goslin trabalharam em um projeto para
comunicar computadores com outros aparelhos eletrônicos.
Criaram um interpretador para trabalhar com diversos
aparelhos tais como: videocassete, TV e aparelhos de TV a cabo). Mas
a ideia não funcionou pois exigia recursos avançados para a época.
Com o aparecimento da Internet, a Sun resolveu usar sua ideia
para rodar aplicações dentro dos browsers.
• Grande quantidade de sistemas operacionais e browsers
• Na época os browsers só renderizavam HTML
• Criação das applets
Assim:
• O Java nasceu com um objetivo (Interoperabilide entre
aparelhos eletrônicos)
• Foi lançado com outro objetivo (Interoperabilide entre
browsers e plataformas)
• Firmou-se como tecnologia de desenvolvimento de
aplicações no lado servidor (mais forte)
• Em 2009 a Oracle comprou a Sun Microsystems e
passou a cuidar do desenvolvimento da linguagem Java
JAVA VIRTUAL MACHINE - JVM
A Máquina Virtual é uma camada intermediária entre o
sistema operacional e a aplicação. A aplicação se comunica
apenas com a JVM e não com o sistema operacional, ou seja
não ficam atreladas a um sistema operacional específico.
3
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
• Isolamento total da aplicação
• Como tudo passa pela JVM, é possível obter métricas e trabalhar
com otimização
• Garbage collection
• Princípio WORA – “Write Once, Run Anywhere”
EVOLUÇÃO DAS VERSÕES DO JAVA
• Java 1.0 e 1.1
– Primeiras versões
• Java 2 (Java 1.2)
– Aumento significativo no tamanho da API
• Java 2 (Java 1.3 e 1.4)
– Melhorias na API
– Java 1.3.1, 1.4.1, 1.4.2, etc.
• Java 5 (Java 1.5)
– Diversas mudanças significativas
4
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
• Java 6 (Java 1.6)
– Mais recursos na API
– Muitas melhorias de performance da JVM
• Java 7
– Novas APIs
– Novos recursos na linguagem
– Melhorias internas na JVM
• Java 8
– Nova API de data e hora
– Suporte a expressões lambda
RAMIFICAÇÕES DO JAVA
• Java SE (Standard Edition)
– Base do Java
– Ambiente de execução e bibliotecas comuns
• Java EE (Enterprise Edition)
– Aplicações corporativas e internet
• Java ME (Micro Edition)
– Dispositivos móveis
5
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
DEFINIÇÃO DE CLASSES E OBJETOS
Classe é a representação de um tipo de dados, é uma
estrutura. É definida pelo programador. 
Objeto é a instância de uma classe, ou seja é criado com
base em uma estrutura (classe)
COMANDOS BÁSICOS – Primeiro programa
 Programa simples que imprime a mensagem “Olá Mundo”
j
Ao ser executada, a máquina virtual (JVM) procura pelo bloco main
declarado em sua classe. Esse é um bloco especial (ou método, como
passaremos a chamar a partir de agora).
Suas aplicações Java, em geral, vão possuir apenas um método
main , um único ponto de partida. Quando rodamos o comando java
passando o nome de nossa classe, dissemos para a JVM executar todo
o conteúdo que estiver dentro do corpo (das chaves) desse método.
Em nosso exemplo, foi uma simples instrução de impressão, o
System.out.println("Olá Mundo") .
Há ainda como passar argumentos para o método main ao
executar um programa Java. O parâmetro String[] args que o método
recebe dentro de seus parênteses será o responsável por armazenar
esses argumentos para que possam ser acessados em nosso código.
Mas, afinal, o que é esse String[] ? Um array de String em Java,
porém, por enquanto não estamos interessados em entender um
array e todos os seus detalhes, tudo o que precisamos saber é que
ele vai armazenar uma multiplicidade de Strings.
6
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Vamos alterar a nossa classe para:
COMANDOS BÁSICOS (Antes da OO e Utilizando a IDE Eclipse)
Em java, toda variável tem um tipo e um nome
 Com isso a variável é declarada e passa a existir a partir desse
momento, podendo ser utilizada, primeiro atribuindo valores.
É possível fazer uso de operadores aritméticos: +, -, *, e /
7
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
8 Tipos primitivos do java. Um tipo de dado primitivo é pré-
definido pela linguagem e é chamado por uma palavra reservada.
Operadores de comparação
8
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Operadores Lógicos utilizados em estrutura de repetição e de controle
Operadores Importantes
Operadores de Incremento e Decremento
9
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Casting – Alguns valores são incompatíveis se você tentar fazer uma
atribuição direta. Enquanto um número real costuma ser
representado em uma variável do tipo double, tentar atribuir ele a
uma variável int não funciona.
Ex: double d = 3.1415; 
 int i = d; // não compila
O mesmo ocorre no seguinte trecho:
 int i=3.1415;
Nem o seguinte trecho compila
 double d=5; //double pode conter números inteiros
 int i=d; //não compila
Casting Implícito
10
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Casting Implícito
11
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Casting Explícito
Estrutura If-Else:
- Sintaxe básicaif (<condição_booleana>) {
<código_se_condição_verdadeira>;
}
- Opcionalmente, pode existir uma cláusula else
if (<condição_booleana>) {
<código_se_condição_verdadeira>;
} else {
<código_se_condição_falsa>;
}
A condição booleana pode ser qualquer expressão cujo resultado seja
true ou false
int x = 50;
if (x > 30) {
System.out.println("Número maior que 30");
} else {
System.out.println("Número menor que 30");
}
12
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Outra possibilidade é utilizar o operador ternário para substituir o if-
else:
int x = 50;
boolean r;
if (x > 30) {
r = true;
} else {
r = false;
}
--→>>
int x = 50;
boolean r;
r = x > 30 ? true : false;
Estruturas de Controle: switch
int i = 1;
switch (i) {
case 1:
System.out.println("Valor = 1");
break;
case 2:
System.out.println("Valor = 2");
break;
default:
System.out.println("Valor não reconhecido");
}
Estruturas de Controle: while
Repete determinado código enquanto uma condição for verdadeira
A condição é testada no início do bloco
int idade = 15;
while (idade < 18) {
System.out.println(idade);
idade = idade + 1;
}
13
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Estruturas de Controle: do-while
Semelhante ao while
A condição é testada no fim do bloco int contador = 10;
do {
System.out.println(contador);
contador = contador + 1;
} while (contador < 20);
Estruturas de Controle: for
Semelhante ao while , mas possui seção para declaração de variáveis
para o loop
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
break Permite forçar a saída de um loop
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
Estruturas de Controle: continue
Força o loop a executar o próximo passo
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
System.out.println(i);
}
Comentando Código em Java
 Comentários em uma linha (//)
 //exemplo de comentário no código em apenas uma linha
 Comentários em múltiplas linhas (/* */)
/*
Exemplo de comentário no código onde mais de uma linha
pode ser utilizada
*/
14
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Exercício
1 - Um aluno tirou notas 8.5, 7.5 e 6.0 em provas que tinham peso 3,
2 e 5, respectivamente.
Escreva um programa que imprima a média do aluno.
2 - Neste exercício, você deve completar 4 tarefas:
a. Imprima todos os números inteiros de 10 a 25 utilizando uma
estrutura de repetição.
b. Imprima a soma dos números de 1 a 100, pulando de dois em dois
(1, 3, 5, 7, etc.).
c. Começando em 0, imprima os números seguintes, enquanto a
soma dos números já impressos for menor que 100.
d. Imprima a tabuada do 9 (até o décimo valor).
3 - Escreva um programa que imprime na saída os valores assumidos
por x . Esta variável x deve iniciar com algum valor escolhido por
você. Se x for par, x deve receber o valor dele mesmo somado com 5.
Já se x for ímpar, x deve receber o valor dele multiplicado por 2. O
programa termina assim que x for maior que 1000.
Por exemplo, para x = 10 , a saída deve ser: 15, 30, 35, 70, 75, 150,
155, 310, 315, 630, 635,
1270 . Crie este programa primeiro usando a estrutura de controle if-
else e depois usando a estrutura de controle switch .
4 - Verifique a validade de uma data e mostre uma mensagem na tela
dizendo se a data é válida ou inválida. Deve haver três variáveis para
armazenar esta data: uma para o dia, outra para o mês e outra para o
ano. Considere que fevereiro pode ter somente 28 dias.
5 - Crie uma aplicação que possibilita a entrada via console de um
conjunto de notas de um aluno.
Assim que -1 for informado como nota, calcule a média das notas
informadas anteriormente e mostre na tela. Caso a nota do aluno seja
inválida, mostre uma mensagem na tela solicitando uma nova nota.
A entrada via console deve ser feita utilizando a classe Console,
fornecida pelo professor. Copie o arquivo Console.java para dentro do
seu projeto e você poderá utilizá-la. Para ler uma nota do teclado,
utilize o seguinte código:
double nota = Console.readDouble();
Após a digitação da nota seguida de ENTER, o valor digitado será
armazenado na variável nota.
15
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
UNIDADE – II
ORIENTAÇÃO A OBJETOS
Esse paradigma existe desde a década de 70, mas foi depois do
surgimento do Java que ficou bastante famoso e que passou a ser
levado mais a sério.
Se você já está acostumado com algum outro paradigma, esse
é o momento de abrir a sua mente. Repare que esse é um paradigma
totalmente diferente, você precisará pensar de maneira diferente e
escrever seu código de outra forma.
Imagine escrever um programa que fará o tratamento das
informações de um livro. Agora você quer saber quanto em livros
você tem em estoque, ou ainda, você quer listar todas as informações
dos livros como: ISBN, Titulo, Autor, Editora, Páginas, Valor, etc..
O grande problema do paradigma procedural é que não existe
uma forma simples de conectar todos esses elementos, já na
orientação a objetos podemos fazer isso de um jeito muito simples!
Assim como no contexto real, podemos criar um objeto para
representar tudo o que um livro tem e o que ele faz.
A O.O vai te ajudar em muito em se organizar e escrever
menos, além de concentrar as responsabilidades nos pontos certo,
flexibilizando sua aplicação
Programação Procedural – Problemas
– Mudança de requisitos na aplicação
– Mudança de desenvolvedor
– Mesmo código em vários lugares
Orientação a Objetos – Benefícios
– Escrever menos código
– Concentrar responsabilidades nos locais certos
– Flexibilizar a aplicação
– Encapsular lógica de negócio
– Polimorfismo (variação do comportamento)
Classes e Objetos
Uma classe é apenas um molde. Uma especificação que define
para a máquina virtual o que um objeto desse tipo deverá ter e como
ele deve se comportar. Em uma livraria poderá ter milhares de livros
(objetos), mas existirá apenas uma classe Livro (molde). Cada objeto
que criarmos do tipo Livro terá seus próprios valores, ou seja, cada
16
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
livro terá o seu próprio nome, sua descrição, um valor e um número
de ISBN. 
- Uma Classe representa um tipo de Dados.
- É uma estrutura, é definida pelo programador.
Possui Atributos, que são: suas características, representados por
substantivos.
Possui Métodos, que são: as operações que é capaz de realizar,
representados por verbo
17
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Uma classe representa um tipo de dados, O objeto é a “instância” de
uma classe;
Declarar Classe no Java
Declarar Métodos e Atributos
18
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
UML – Diagrama de Classe
Assinatura de Um método
Sobrecarrega de Método
Sobrecarregar um método significa criar outros métodos com o
mesmo nome, mas com assinatura diferente
19
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Criando e Manipulando Objetos
Objetos e Referência
 - Uma variável cujo tipo é uma classe não guarda o objeto
diretamente;
- A variável guarda uma referência ao objeto;
- Onew aloca uma área de memória e retorna a referência da área de
memória alocada;
- As variáveis declaradas em métodos são criadas numa área de
memória chamada stack;
- Os objetos são criados numa área de memória chamada heap;
20
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Como funciona a Stack
Como funciona a Heap
21
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Garbage Collector
- Serviço da JVM que executa em segundo plano;
- Procura objetos no heap que não são mais utilizados pela aplicação
e os remove;
- Não pode ser controlado pelo desenvolvedor; 
Exemplo Cadastro de Livros
1 – Cadastro
2 – Teste na referência com Autor
3 – Teste na referência com dois objetos do tipo Autor
22
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Exercício
1 - Crie as classes Relogio e Ponteiro e escreva um método main()
para treinar a chamada aos métodos e atributos.
Atributos da classe Relogio:
ponteiroHora (tipo Ponteiro)
ponteiroMinuto (tipo Ponteiro)
ponteiroSegundo (tipo Ponteiro)
Métodos da classe Relogio:
acertarRelogio(int, int, int): Acerta o relógio, posicionando
adequadamente cada ponteiro do relógio. Os parâmetros passados
são hora, minuto e segundo.
lerHora(): retorna a hora atual do relógio.
lerMinuto(): retorna o minuto atual do relógio.
lerSegundo(): retorna o segundo atual do relógio.
Atributos da classe Ponteiro:
posicao(int): indica em qual posição está o ponteiro (1, 2, 3, 4,
etc.)
2 - Crie a classe Fracao, que representa uma fração matemática. Esta
classe deve ser capaz de armazenar o numerador e o denominador
da fração. Ela ainda deve ter métodos que recebem uma fração como
parâmetro, multiplicam ambas as frações, e retornam uma nova
fração como resultado.
Crie um programa simples que instancia duas frações, define
seus valores, calcula o valor da multiplicação entre elas e mostra o
resultado.
3 - Crie classes que representam as figuras geométricas: Triangulo,
Quadrado, Circunferencia e Trapezio. Cada uma destas classes deve
ter um método para calcular a sua área, com a seguinte assinatura:
double calcularArea().
Note que o método calcularArea() não recebe parâmetros.
Portanto todos os dados necessários devem ser armazenados no
objeto da classe em forma de atributos para depois serem utilizados
pelo método.
23
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
As fórmulas para p cálculo são as seguintes:
4 -
Observe uma descrição sobre o que cada método de cada classe faz:
Crie uma aplicação que instancia uma turma, três alunos na turma e
as duas provas para cada aluno. Defina também notas para as
provas. A aplicação deve mostrar mensagens informando a média de
cada aluno e a média geral da turma.
24
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Para a definição das notas, utilize as seguintes informações:
25
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
UNIDADE – III
Métodos
Modificadores de Acesso
Os modificadores são utilizados para restringir o acesso a
elementos de uma classe, atributos e métodos.
Inicialmente vamos estudar 2 modificadores:
private: visível apenas para a classe que o declarada
public: visível a todas as classes
 
Visibilidade dos Atributos e Métodos 
Marcar um atributo ou método como private esconde o atributo
de quem usa a classe.
É interessante marcar métodos como private quando este é um
método auxiliar da classe, que não deve ser acessível externamente
Ex:
– Atributos são declarados como private
– Métodos são declarados como public
• Esta abordagem faz sentido, já que o ideal é que objetos colaborem
através de troca de mensagens (chamadas de métodos), e não
através da manipulação direta de atributos
26
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Encapsulmento
Encapsular é esconder detalhes de funcionamento do programa.
Métodos Getters e Setters
Quando os atributos são declarados como private , getters e setters
podem ser usados
Getters: usados para expor os valores de atributos.
Setters: usados para alterar os valores de atributos.
Protegem os atributos.
Evitam a mudança de código em vários lugares.
Não utilize getters e setters quando não for necessário
27
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Assinatura do Getters e Setters
Construtores
O construtor de uma classe é chamado toda vez que um objeto da
classe é instanciado.
O construtor possui o mesmo nome da classe.
public class SalaDeAula {
public SalaDeAula() {
conteúdo
}
}
//Invoca o construtor
SalaDeAula s = new SalaDeAula();
Quando o construtor não é fornecido, o Java fornece um
construtor padrão (sem parâmetros).
Construtores podem receber parâmetros da mesma forma que
métodos.
public class SalaDeAula {
private int numAlunos;
public SalaDeAula(int numAlunos) {
this.numAlunos = numAlunos;
}
}
//Invoca o construtor
SalaDeAula s = new SalaDeAula(20);
28
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Sobrecarga de Construtores
Atributos e Métodos Estáticos
• Algumas vezes, atributos e/ou métodos podem não estar atrelados
a um objeto específico, mas sim à classe
• Atributos ou métodos da classe são assim definidos através do
modificador static .
O acesso é feito utilizando diretamente a classe. Não é necessário
criar um objeto:
String banco = ContaBancaria.getBanco();
29
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Criação de Constante
Atributos estáticos são uma forma bastante usada para criar
constantes no Java
Bloco Static
Uma classe pode ter um bloco static, o qual será executado quando a
classe é referenciada pela primeira vez
– Inicializar atributos estáticos
– Executar um código antes que a classe seja utilizada
30
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Exercício
1 - Crie uma classe Lampada que possui um atributo ligada, o qual
indica se a lâmpada está ligada ou desligada.
Ao construir uma lâmpada, o estado dela (ligada ou desligada)
deve ser fornecido. Para ligar e desligar a lâmpada, os métodos ligar()
e desligar() devem ser chamados, respectivamente. Aliás, esta é a
única forma de alterar o estado da lâmpada, já que o atributo ligada
não deve ser visível fora da classe.
A lâmpada também deve possuir um método imprimir().
Quando chamado, ele mostra as mensagens “ Lâmpada ligada ” ou “
Lâmpada desligada ”, dependendo do estado atual.
Construa uma aplicação que cria uma lâmpada ligada, muda o
estado dela e também imprime o estado atual após cada chamada
aos métodos ligar() e desligar().
2 - Crie uma classe Data que possui dois construtores. O primeiro
recebe um dia, mês e ano. O segundo, além destas informações,
recebe também uma hora, minuto e segundo (a hora fornecida deve
estar entre 0 e 23). É importante que este segundo construtor
invoque o primeiro para evitar a duplicação de código.
Os construtores devem armazenar os dados fonecidos como
parâmetrosem atributos privados. Estes atributos devem ter métodos
getters associados, que irão expor os valores para códigos externos à
classe.
A classe Data deve ter também um método imprimir() utilizado
para imprimir a data e a hora representados pelo objeto. Este método
recebe como parâmetro o formato de hora que deve ser utilizado para
imprimir as horas (12 ou 24h). Se o objeto foi construído sem
informação de horário, este parâmetro não afeta a impressão.
Os formatos da hora são do tipo int, mas devem ser representados
por duas constantes na classe Data: FORMATO_12H e FORMATO_24H.
Para entender melhor o funcionamento do método imprimir(), observe
como ele deve se comportar em diversas situações:
31
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
UNIDADE IV
A herança é um mecanismo que permite que uma classe possa
herdar o comportamento de outra classe, ao mesmo tempo em que
novos comportamentos podem ser estabelecidos
A vantagem da herança é agrupar coisas comuns para poder
reaproveitar código
32
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
O MODIFICADOR PROTECTED
Sobrescrita De Métodos
Técnica também conhecida como overriding
Quando uma classe herda de outra, ela pode redefinir métodos da
superclasse, isto é, sobrescrever métodos:
– Os métodos sobrescritos substituem os métodos da
superclasse
– A assinatura do método sobrescrito deve ser mesma do método
original
33
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
34
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Usando o super
O método que foi sobrescrito pode ser acessado pelo método que o
sobrescreveu através da palavra-chave super
class Orelhao extends Telefone {
public void telefonar() {
super.telefonar() // chama o método as superclasse
}
}
Polimorfismo
É a capacidade que um método tem de agir de diferentes formas,
dependendo do objeto sobre o qual está sendo chamado.
Quando ocorre a chamada de um método, a JVM decide qual método
invocar dependendo do objeto instanciado na memória
Ex:
35
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
36
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
O Operador Instanceof
Utilizado para verificar se um objeto pertence à determinada classe
37
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Atividade IV
1 - Crie a classe Figura que representa figuras geométricas,
representadas pelas classes Quadrado e Retangulo. Uma figura pode
ter sua área calculada a partir do método calcularArea(), que retorna
a área calculada da figura em forma de um double. 
Crie também a classe FiguraComplexa. Uma figura complexa é
também uma figura, mas a diferença é que ela é composta por várias
figuras (quadrados, retângulos ou até outras figuras complexas). Para
calcular a área de uma figura complexa, basta somar a área de todas
as figuras que a compõem.
Para executar a aplicação, crie a classe Calculador, que é
responsável por criar uma figura complexa e calcular a sua área. Esta
figura deve ser composta por:
• 1 quadrado com 3 de lado
• 1 quadrado com 10 de lado
• 1 retângulo com lados 2 e 7
• 1 retângulo com lados 5 e 3
Dica: Perceba a diferença entre uma classe ser uma figura e ter uma
ou mais figuras. A primeira relação é de herança, enquanto a segunda
implica em uma composição.
2 - Crie duas classes: Ponto2D e Ponto3D. Ponto2D possui como
atributos as coordenadas x e y, enquanto Ponto3D, além delas,
também possui a coordenada z. Utilize a relação de herança para
representar estas classes.
A respeito dos construtores, Ponto2D deve ter apenas um
construtor, que recebe os valores de x e y como parâmetros (tipo
double). Já Ponto3D também deve ter apenas um construtor, que
deve receber x, y e z como parâmetros (também do tipo double).
Dica: Se a relação de herança e a declaração dos construtores
foram feitas corretamente, você deverá, obrigatoriamente, chamar o
construtor da superclasse explicitamente.
Ambas as classes devem sobrescrever o método toString(), que
é originalmente declarado na classe Object. Este método deve
retornar uma representação do objeto em forma de String, indicando
qual o valor de cada coordenada. É importante que Ponto3D tire
proveito do método toString() de Ponto2D para mostrar os valores das
coordenadas x e y.
38
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Classes Abstratas
39
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Métodos Abstratos
40
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Interfaces
41
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Interfaces
42
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Interfaces
43
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Métodos Default
Java 8
• Uma interface pode definir métodos com o modificador default
• Neste caso, o método é implementado diretamente na interface
• Este recurso surgiu no Java 8
44
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Métodos Estáticos
Java 8
45
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Classes Abstratas ou Interfaces?
46
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Atividade V
1 - Crie uma interface AreaCalculavel com um método calcularArea()
e crie classes de figuras geométricas que implementam este método
(como quadrado, circunferência e retângulo). Depois crie uma classe
com um método main() para exercitar as chamadas aos métodos que
calculam a área.
2 - Crie uma classe ContaBancaria, que representa uma conta
bancária genérica e não pode ser instanciada. Esta classe deve ter
um atributo saldo (visível apenas para ela e para as suas subclasses)
e os métodos depositar(double), sacar(double) e transferir(double,
ContaBancaria). Estes métodos devem depositar um valor na conta,
sacar um valor da conta e transferir um valor da conta de origem
para uma conta de destino, respectivamente.
Além destes, ContaBancaria deve ter um método
calcularSaldo(). Este método possui a regra do cálculo do saldo final
(que pode ser diferente do saldo armazenado no atributo saldo) e
deve ser obrigatoriamente implementado pelas subclasses de
ContaBancaria, pois cada classe possui suas próprias regras de
cálculo.
Crie duas subclasses de ContaBancaria: ContaCorrente e
ContaInvestimento. Cada uma deverá implementar suas regras para
calcular o saldo (método calcularSaldo()). No caso de ContaCorrente,
o saldo final é o saldo atual subtraído de 10%, referente a impostos
que devem ser pagos. Já para a ContaInvestimento, o saldo final é o
saldo atual acrescido de 5%, referente aos rendimentosdo dinheiro
investido.
Crie uma aplicação que instancia uma conta corrente e uma
conta investimento e executa as operações de depósito, saque,
transferência e cálculo de saldo. Verifique se os resultados obtidos
são consistentes com a proposta do modelo e com as regras de
cálculo estabelecidas.
3 - O Java possui uma interface chamada Cloneable, que pode ser
implementada por classes que são capazes de gerar cópias de
objetos. Esta interface não possui métodos, mas classes que a
implementam devem sobrescrever o método clone(), definido na
classe Object. Dentro deste método é implementada a lógica para
criar um novo objeto com base no objeto original.
Com base nisto, crie uma classe Porta que suporta a criação de
novos objetos (cópia). Ela deve ter os atributos altura (double),
largura (double) e aberta (boolean). Também deve possuir os
métodos abrir(), fechar() e os métodos getters correspondentes aos
atributos.
47
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Como uma porta pode criar outras cópias dela mesma, você
deve sobrescrever o método clone(), o qual deve criar um novo objeto
com os valores dos atributos copiados e retorná-lo.
Dica: O método clone() lança uma exceção
(CloneNotSupportedException). Não é preciso se preocupar com ela
neste momento, então declare o método main() da sua aplicação da
seguinte forma:
public static void main(String[] args) throws 
CloneNotSupportedException {
//...
}
48
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Tratando Exceções
Você precisa avisar quem chamou o método e informar que o método 
não executou
como deveria. Como fazer?
– As abordagens mais comuns são
• Usar booleanos
• Usar magic numbers
Exceções representam algo estranho ao sistema que normalmente 
não ocorre
• Em Java, o tratamento de exceções é feito por um código diferente 
do código executado quando não ocorre a exceção
49
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Classes Que Representam Exceções
Exceções são representadas por classes
• As classes devem herdar direta ou indiretamente de Exception
• O Java tem classes que representam diversos tipos de exceção, mas
o programador pode criar exceções específicas de acordo com a
necessidade
50
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Checked Exceptions
Herdam direta ou indiretamente de Exception, mas não podem herdar
de RuntimeException
Unchecked Exceptions
Também chamadas de runtime exceptions
Herdam direta ou indiretamente de RuntimeException
51
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Lançando Exceções
• O lançamento de exceções é feito através do throw
52
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
53
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Tratando Exceções
54
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
A API de I/O do Java
 Está localizada no pacote java.io
• A API de I/O gerencia a entrada e saída de dados
– Console, arquivos, sockets, etc.
Todas as operações de I/O são baseadas em fluxo de dados
( streams )
– InputStream : fluxo de entrada
– OutputStream : fluxo de saída
A API usa polimorfismo para esconder detalhes de onde a informação
vem e para onde ela vai
Pelas streams, trafegam bytes
– InputStream : é capaz de ler bytes de algum lugar
– OutputStream : é capaz de escrever bytes em algum lugar
Ex:
55
CURSO DE PÓS-GRADUAÇÃO EM
LINGUAGEM DE PROGRAMAÇÃO
JAVA
Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos
Projeto
Criar um programa que grave e leia “itens” em um arquivo de texto.
O programa deverá ter uma interface chamada Dados com os
métodos:
List<String> ler() throws IOException;
PrintWriter criarPrinter() throws IOException;
void listar(List<String> lista_dados);
Uma classe chamada Arquivo irá implementar a interface Dados.
A classe Arquivo possuirá uma constante responsável por indicar o
arquivo onde os itens serão gravados. O método criarPrinter() utilizará
a referida constante para instanciar um objeto do tipo PrintWriter.
O método ler() será responsável por ler as informações contidas no
arquivo texto.
O método listar(List<String> lista_dados) será responsável por imprimir na
telas a lista de itens cadastrados.
Uma classe abstrata Menu deve ser criada com um método
 static void opcoes() que irá imprimir na telas as seguintes opções:
0) Sair
1) Listar
2) Inserir Contato
As opções sugerem as regras de negócio do programa.
56

Outros materiais