Orientação a objetos e linguagem Java
PET Computação
Vantagens da orientação a objetos
• Torna mais rápidas as atividades de programação e manutenção de
sistemas de informação;
• Tem caráter unificador: trata todas as etapas do desenvolvimento de
sistemas e ambientes sob uma única abordagem;
Principais Vantagens:
• Reusabilidade de código
• Escalabilidade de aplicações
• Mantenabilidade
• Apropriação
Orientação a objetos e linguagem Java
PET Computação
O que é uma classe
• Uma classe surge da identificação de características e operações
similares em objetos distintos;
• A classe então é a representação de um conjunto de objetos que
compartilham a mesma estrutura de atributos, operações e
relacionamentos;
• A classe especifica a estrutura de um objeto sem informar quais serão
seus valores;
Orientação a objetos e linguagem Java
PET Computação
O que é uma classe
• Num sistema, trabalha-se com instâncias das classes
• Uma instância de uma classe é um objeto, onde são carregados os
dados pertencentes à instância;
• Uma classe pode ter qualquer número de atributos, ou mesmo atributo
nenhum. Também pode ter qualquer número de operações, ou mesmo
nenhuma.
• Exemplos: formulários, receitas
Orientação a objetos e linguagem Java
PET Computação
Identificação de classes
• Numa descrição de um software, normalmente classes são
substantivos, enquanto verbos são operações candidatas;
• Objetivo é modelar somente as coisas importantes para o software;
• Cada classe deve corresponder a uma abstração de dados relevante
para a aplicação;
• Exemplo: o elevador fecha a sua porta e depois move-se para outro
andar;
Orientação a objetos e linguagem Java
PET Computação
Alertas
• Classes não devem “fazer” alguma coisa, mas sim oferecer um número
de serviços ou objetos de certo tipo;
• Cuidado ao projetar uma classe que na verdade deveria ser uma rotina
de outra classe;
• Não começar a se preocupar com herança muito no início do processo
de modelagem;
Orientação a objetos e linguagem Java
PET Computação
A classe ideal deve
• Estar claramente associada a uma abstração relevante para o sistema;
• Ter o nome da classe como um substantivo, que caracteriza
adequadamente a abstração;
• Representar um conjunto possível de objetos de tempo de execução;
• Possuir diversas operações disponíveis para ler as propriedades de
uma instância;
• Possuir diversas operações disponíveis para mudar o estado de uma
instância;
Orientação a objetos e linguagem Java
PET Computação
Categorias de classes
• Existem três categorias de classes:
• Classe de análise: descreve uma abstração de dados
diretamente do domínio do problema;
• Classe de projeto: pertencem ao espaço da solução;
• Classe de implementação: descreve uma abstração de dados
introduzida para as necessidades internas dos algoritmos do
software (ex.: LinkedList, Array, Vector, etc...);
Orientação a objetos e linguagem Java
PET Computação
Objetos
• Difícil separação entre classes e objetos
• Classe serve de modelo para a criação dos objetos
• Na classe é definida toda a estrutura e comportamento de um objeto
• O tópico classes foi abordado primeiro pois é a partir das classes que
objetos são gerados
Orientação a objetos e linguagem Java
PET Computação
Identificação de Objetos
• A identificação de um objeto ocorre segundo suas característica
(atributos) e comportamentos (métodos);
• Na modelagem de sistemas, um objeto é qualquer coisa existente no
mundo real;
• É possível a existência objetos concretos ou abstaratos, por exemplo:
aluno, mesa, disciplina, estoque, avaliação e etc;
• Representa a modelagem de conceitos existentes no cotidiano;
Orientação a objetos e linguagem Java
PET Computação
Atributos
• As características ou propriedades de um objeto são chamados seus
atributos;
• Os atributos identificam o estado de um objeto e representam uma
abstração do tipo de dados do mesmo;
• Conforme aumenta o número de atributos, mais fácil é de identificar
este objeto;
Orientação a objetos e linguagem Java
PET Computação
Comportamento
• Comportamentos modificam o estado do objeto ou prestam serviços a
outros objetos (operações);
• Quando o estado de um objeto for alterado externamente, esta
alteração DEVE ser realizada através de operações;
• Método é a implementação de uma operação;
Orientação a objetos e linguagem Java
PET Computação
Métodos
• Os métodos de uma classe manipulam somente as estruturas de dados
daquela própria classe, não podendo acessar diretamente dados de
outra classe (encapsulamento) ;
• O acesso aos dados de outra classe DEVE ser feito através da
solicitação de serviços;
• Mensagem é a chamada de uma operação de um objeto sobre outro;
Orientação a objetos e linguagem Java
PET Computação
Modelagem de objetos
• Realizar uma avaliação da relação entre atributos e métodos
• Todo objeto possui limites nítidos com relação ao problema em estudo,
portanto, a modelagem deve ser feita dentro de um determinado
contexto;
• Alerta: excesso de atributos e métodos pode significar divisão de
classes;
Orientação a objetos e linguagem Java
PET Computação
Identidade de um objeto
• Os objetos se distinguem uns dos outros pela sua própria existência, e
não pelos valores de seus atributos;
• Os objetos, assim como na vida real ocupam espaço físico, no
computador ocupam memória;
Orientação a objetos e linguagem Java
PET Computação
Encapsulamento
• A utilização de um sistema orientado a objetos não deve depender de
sua implementação interna, e sim somente de sua interface;
• O encapsulamento é a propriedade que mantém protegidos os
atributos e determinadas operações;
• Os atributos de um objeto só podem ser acessados e atualizados pelas
operações do próprio objeto;
Orientação a objetos e linguagem Java
PET Computação
Interface
• A interface de uma classe serve como camada intermediára entre esta
classe e o mundo externo;
• Ela protege os usuários de uma classe de quaisquer alterações, as
quais têm de ser feitas de modo transparente para o usuário;
• As operações (métodos) são a interface da classe, pois é a partir dela
que outros objetos se relacionam com a classe;
Orientação a objetos e linguagem Java
PET Computação
Ocultamento
• Objetos tem a propriedade de ocultamento de informações
• Normalmente, não se permite que os objetos saibam como os outros
objetos são implementados;
• Os detalhes de implementação são ocultados no próprio objeto;
• Exemplo: carro;
Orientação a objetos e linguagem Java
PET Computação
Acesso a informações
• 4 tipos de encapsulamento para acessar informações de um objeto:
Privado
(private)
Menor Visibilidade
Package/
Default
Protegido
(protected)
Público
(public)
Maior visibilidade
Orientação a objetos e linguagem Java
PET Computação
Modificando a acessibilidade
• Privado: somente o objeto que possui o atributo pode alterar ou
acessar este atributo para ler ou alterar o valor que está armazenado
nele;
• Default/Package: permite que o objeto que contém o atributo mais
os outros membros do mesmo pacote* possam acessar o atributo sem
restrições;
* Pacote: ítem de agrupamento utilizado nas linguagens orientadas a
objetos – pode ser visto simplesmente como um grupo de elementos;
Orientação a objetos e linguagem Java
PET Computação
Modificando a acessibilidade
• Protegido: o próprio objeto, objetos do mesmo pacote, e ainda seus
objetos descendentes podem acessar/modificar o valor do atributo;
• Público: o atributo pode ser acessado diretamente por qualquer outro
objetosem que se tenha que chamar uma operação no objeto que possui
este atributo;
Orientação a objetos e linguagem Java
PET Computação
Acessibilidade dos métodos
• Os mesmos tipos de encapsulamento aplicados aos atributos podem
ser usados com os métodos → operações internas;
• Não é necessário conhecer a implementação de uma operação para
poder usá-la;
• Possibilita a alteração de como a operação funciona sem que os outros
objetos e as chamadas a esta operação tenham que ser alterados;
Orientação a objetos e linguagem Java
PET Computação
Herança
• Exemplo: funcionário e pessoa
• Atributos possíveis de funcionário?
• Nome, endereço, data de nascimento, estado civil, sexo, data de
admissão, cargo, salário;
• Atributos possíveis de pessoa?
• Nome, endereço, data de nascimento, estado civil, sexo;
Orientação a objetos e linguagem Java
PET Computação
Herança
Generalização
Pessoa
Funcionário
Especialização
Orientação a objetos e linguagem Java
PET Computação
Herança
• Classe mais genérica: Classe mãe ou superclasse;
• Classe mais específica: Classe filha ou subclasse;
• O mecanismo de herança das linguagens garante que subclasses
recebam, automaticamente, atributos e operações da superclasse;
Orientação a objetos e linguagem Java
PET Computação
Herança múltipla
• Tipo especial de herança → Java NÃO suporta;
• Permite que uma classe possua mais de uma superclasse e herde
características de todos seus ancestrais;
• Classe com mais de uma superclasse: classe dejunção;
Orientação a objetos e linguagem Java
PET Computação
Herança múltipla
• Vantagem: potencial para maior compartilhamento de código
• Desvantagem: possibilidade de conflitos de nomes entre as
operações herdadas
• Consequência: maior complexidade dos sistemas;
Orientação a objetos e linguagem Java
PET Computação
Exemplo herança múltipla
Veiculo
numPassageiros
potencia
ano
Carro
Barco
rodas
numPortas
tamanhoPes
registroMarinha
Anfibio
Orientação a objetos e linguagem Java
PET Computação
Herança
• Contribuição original do paradigma de objetos, que o diferencia da
programação com tipos abstratos;
• Viabiliza a construção de sistemas a partir de componentes reusáveis;
• Facilita diretamente a extensibilidade em um mesmo sistema;
Orientação a objetos e linguagem Java
PET Computação
Herança
• Herança não é limitada a apenas um nível;
• A árvore de herança (hierarquia de classes) pode ser tão profunda
quanto necessário;
• Métodos e variáveis internas são herdados por todos os objetos dos
níveis para baixo;
• Quanto mais para baixo na hierarquia uma classe estiver, mais
especializado o seu comportamento;
Orientação a objetos e linguagem Java
PET Computação
Exemplo Herança
Empregado
Executivo
Presidente
Gerente
Diretor
Gerente
Treinamento
Colaborador
Gerente
Desenvolvimento
Orientação a objetos e linguagem Java
PET Computação
Exemplo Herança
• Interpretação: Se B é subclasse de A, então
• Os objetos da classe B suportam todas as operações suportadas
pelos objetos da classe A, exceto aquelas redefinidas;
• As variáveis de instância de B incluem todas as variáveis de
instância de A;
Orientação a objetos e linguagem Java
PET Computação
Precaução
• A utilização de herança em linguagens orientadas a objetos pode
afetar o encapsulamento de informação;
• Surge nova categoria de clientes – as subclasses;
• Mudanças na implementação de uma classe poderão comprometer a
implementação de suas subclasses;
Orientação a objetos e linguagem Java
PET Computação
Composição
• A composição permite que objetos sejam compostos pela agregação
de outros objetos ou componentes;
• Instâncias (objetos) de uma classe são compostas por instâncias de
outras classes
• Formação de uma nova classe como um agregado de classes preexistentes;
Orientação a objetos e linguagem Java
PET Computação
Composição
Decomposição
Composição
Exemplo: Carro → objeto composto por outros objetos
Orientação a objetos e linguagem Java
PET Computação
Polimorfismo
• É a capacidade de dois ou mais objetos responderem à mesma
mensagem, cada um com seu próprio modo
• Muitas vezes (nem sempre) o conceito de polimorfismo está ligado à
herança.
• Exemplo : formas geométricas
Orientação a objetos e linguagem Java
PET Computação
Exemplo polimorfismo
• Supondo que obj é um objeto, podendo ser retangulo, triangulo ou
esfera;
• Cada objeto tem a propriedade de desenhar a si mesmo
obj.desenharRetangulo();
obj.desenharTriangulo();
obj.desenharEsfera();
DESPERDÍCIO!
Orientação a objetos e linguagem Java
Exemplo polimorfismo
• Se quiséssemos desenhar objetos
for (...) {
if (obj é retângulo) {
obj.desenharRetangulo();
} else if (obj é triângulo) {
obj.desenharTriangulo();
} else if (obj é esfera) {
obj.desenharEsfera();
}
}
PET Computação
Orientação a objetos e linguagem Java
PET Computação
Exemplo polimorfismo
• Entretanto, podemos criar uma classe chamada forma geométrica:
class FormaGeometrica {
desenhar();
}
• Então, fazemos as classes retângulo, triângulo e esfera herdarem de
forma geométrica;
Orientação a objetos e linguagem Java
PET Computação
Exemplo polimorfismo
• Com o polimorfismo, não é mais necessário ter uma operação com
nome diferente em cada uma das classes para desenhar;
• Existe uma operação na classe pai (FormaGeometrica), e nas classes
filhas (as classes Retangulo, Triangulo e Esfera) a operação é
implementada de formas diferentes, de forma específica para cada
situação;
• O objetivo principal do polimorfismo não é a reutilização de código, e
sem de simplificar a compreensão do programa;
Orientação a objetos e linguagem Java
PET Computação
Exemplo polimorfismo
• Se uma grande quantidade de objetos compartilham o mesmo
coportamento com implementações ligeiramente diferentes, encontrar
uma maneira de diminuir o número de linhas de código para invocar este
comportamento auxilia imensamente;
• No exemplo, o objeto referenciado por obj será polimórfico, pois pode
assumir papel de retângulo, triângulo ou esfera;
• Desta forma, todos os objetos são tratados como forma geométrica;
Orientação a objetos e linguagem Java
PET Computação
Exemplo polimorfismo
• O exemplo anterior implica a existência de métodos com
implementação diferente com o mesmo nome em classes distintas;
• Outras formas simples de polimorfismo:
• Polimorfismo paramétrico;
• Overloading;
• Permite a existência de vários métodos com o mesmo nome, definidos
na mesma classe, se diferenciando pelo tipo ou número de parâmetros
suportados
Orientação a objetos e linguagem Java
PET Computação
Exemplo polimorfismo
• Exemplo: classe Empregado
Empregado
salario;
getSalario();
getSalario(horas);
Orientação a objetos e linguagem Java
PET Computação
Java – Simples e orientada a objetos
• Projetada pela Sun Microsystems inicialmente para eletrodomésticos
em 1991;
• Atualmente, uma das linguagens de mais ampla difusão e de mais
abrangente uso.
• Concebida inicialmente como um subconjunto de C++;
• Eliminou construções consideradas complexas ou desnecessárias;
• Reduzido conjunto de palavras reservadas e um grande poder de
expressão.
Orientação a objetos e linguagem Java
PET Computação
Linguagem robusta
• Fortemente tipada;
• Ampla verificação de erros e checagem de tipos em tempo de
compilação;
• Não existem apontadores, e sim referências a objetos criados;
• Gerência automática da memória (garbage collection).
Orientação a objetos e linguagem Java
PET Computação
Interpretada e portável
• Após a compilação, os fontes Java não são executados diretamente
pelo hardware;
• Geração de código intermediário que independe da plataforma e
interpretação do mesmo pela máquina virtual Java (JVM);
• O código intermediário, portanto, não se limita a uma determinada
arquitetura;
• Basta que exista uma JVM – sem ela não há como executar um
programa.
.java  compilação  .class
Orientação a objetos e linguagem Java
PET Computação
Interpretada e portável (cont.)
Programa
Java
abc.java
Compilador
abc.class
Interpretador
Interpretador
Interpretador
PC
Windows
Linux
Sun
Solaris
Mac
Orientação a objetos e linguagem Java
PET Computação
JVM – Java Virtual Machine
• Camada intermediária entre o sistema operacional e as aplicações
Java;
• Traduz os bytecodes (arquivos .class) em instruções de máquina;
• A grande maioria dos sistemas operacionais possui uma
implementação da JVM (Windows, Linux, Solaris, Mac, etc.);
• “Write once, run anywhere”.
Orientação a objetos e linguagem Java
PET Computação
Aspectos de segurança
• Java oferece várias camadas de controles de segurança que protegem
contra código malicioso;
• Programas Java não podem forjar ponteiros para a memória, nem
estourar arrays, nem ler memória que esteja fora das fronteiras de um
array ou string;
• Impede qualquer acesso direto à memória;
• Bytecodes de códigos de origem desconhecida que são carregados são
verificados;
• O código de origem desconhecida pode rodar, mas é mantido isolado,
para não causar danos – “caixa de areia”.
Orientação a objetos e linguagem Java
PET Computação
Just in Time (JIT) Compilers
• Traduzem Bytecodes Java para instruções nativas da máquina;
• Evitam a reinterpretação de blocos de código Java;
• Úteis se o mesmo bloco de código é executado mais de uma vez;
• Otimizam a execução de blocos de código repetitivo, como laços;
• Aumentam o desempenho de programas.
Orientação a objetos e linguagem Java
PET Computação
JDK – Java Development Kit
• Compilador Java (javac);
• Visualizador de applets (appletviewer);
• Interpretador de bytecodes (JVM);
• Gerador de documentação (javadoc);
• Debugger (jdb);
• Ferramenta de gerência de archives Java (jar);
• Gerador de cabeçalhos e de stub para chamada de métodos nativos
(javah);
• Disassembler (javap).
Orientação a objetos e linguagem Java
PET Computação
Criando a primeira aplicação
• Crie um arquivo de nome Hello.java em um editor de texto contendo:
public class Hello {
public static void main (String[ ] args) {
System.out.println ("Hello world!");
}
}
Orientação a objetos e linguagem Java
PET Computação
Criando a primeira aplicação (cont.)
• Compile o arquivo fonte usando o compilador Java (javac):
javac Hello.java
• O arquivo Hello.class, contendo os bytecodes Java, será criado pelo
compilador no mesmo diretório do arquivo fonte;
• Execute a aplicação usando a JVM:
java Hello.java
Orientação a objetos e linguagem Java
PET Computação
Importando pacotes
• Um pacote é um conjunto de classes relacionadas:
import java.sql.*;
import java.io.*;
• No caso acima, importamos todas as classes de um pacote;
• Pode-se importar apenas uma classe específica conforme indicado
abaixo:
Import javax.swing.JFrame;
Orientação a objetos e linguagem Java
PET Computação
Comentários no código
/**
documentação
*/
• O compilador ignora esse tipo de comentário. O utilitário javadoc, no
entanto, utiliza esses comentários para gerar a documentação
automática do programa;
/* texto /*
• O compilador ignora todo o texto contido entre as marcações;
// linha
• O compilador ignora todo o texto contido entre a marcação e o final da
linha.
Orientação a objetos e linguagem Java
PET Computação
Definição de classes
• Uma classe é uma coleção de dados e de métodos que manipulam
esses dados;
• Os dados referentes a uma classe são armazenados em variáveis e as
operações sobre eles são implementadas através de métodos;
• Métodos = construções semelhantes a funções e procedimentos.
Orientação a objetos e linguagem Java
Definição de classes (cont.)
public class Aluno { // Declaração da classe
// Variáveis da instância (do objeto)
private String nome;
private String matricula;
private int semestre;
// Construtores
public Aluno (String n, String m, int s) {
this.nome = n;
this.matricula = m;
this.semestre = s;
}
// Métodos de instância (do objeto)
public String getNome () {
return nome;
}
public void setNome (String n) {
nome = n;
}
}
PET Computação
Orientação a objetos e linguagem Java
PET Computação
Definição de variáveis e constantes
• Definir antes de usar;
• Conselho: definir as variáveis próximo de onde elas forem utilizadas;
• Variáveis definidas dentro de um bloco de código têm a existência
limitada ao bloco;
• Não são permitidas conversões implícitas de tipo.
Orientação a objetos e linguagem Java
PET Computação
Tipos primitivos
• O tamanho do tipo em bytes faz parte da especificação da linguagem.
Tipo
Tamanho
Variação
long
8 bytes
±9.223.372.036.854.775.808
int
4 bytes
±2.147.483.648
short
2 bytes
±32768
byte
1 byte
-128 a +127
double
8 bytes
±1,79769313486231570 E+308
float
4 bytes
±4,40282347 E+38
char
2 bytes
caracteres UNICODE
boolean
1 bit
true, false
Orientação a objetos e linguagem Java
PET Computação
Conversão de tipos
• Java permite conversão entre valores inteiros e valores reais;
• Conversão de ampliação: valor é convertido para um tipo mais amplo
Ex: int  float
• Conversão de redução: valor é convertido para outro com menos bits
Ex: double  int
• Cuidado: informação pode ser perdida!
Ex: converter o int 13000 para um byte
(compilador reclama)
• Conversão explícita (cast): é feita colocando-se o nome do tipo
pretendido entre parênteses antes da variável a ser convertida.
Orientação a objetos e linguagem Java
PET Computação
Conversão de tipos - cast
int i = 13;
byte b = (byte) i; // casting de int para byte
i = (int) 13.456 // casting de double para int
• Em conversões de números reais para inteiros, a parte fracionária do
número real é truncada;
• O tipo char funciona como um tipo inteiro a maior parte das vezes,
podendo, portanto, ser usado em qualquer lugar em que se espere um
int ou long.
Orientação a objetos e linguagem Java
PET Computação
Tipos de referência
• Classes:
Cada classe define um novo tipo de dado a ser manipulado.
• Vetores:
Um vetor representa uma lista de valores de um determinado tipo.
Ex: int[ ]  vetor de inteiros;
aluno[ ]  vetor de objetos da classe aluno;
aluno[ ][ ]  vetor de vetores de aluno.
Orientação a objetos e linguagem Java
PET Computação
Tipos de referência (cont.)
• Tipos definidos pelo programador são chamados tipos de referência;
• Classes e vetores são tipos de dados diferentes dos tipos primitivos –
são conhecidos como tipos compostos.
int [ ] vet = {1, 2, 3};
// define vetor de inteiros
String str = new String (“Java”);
// define a classe String
// como objeto
Orientação a objetos e linguagem Java
PET Computação
Sumário de operadores
Operadores
Tipo de operando
Operação executada
.
objeto, membro
acesso a membro do objeto
[ ]
vetor, inteiro
acesso a elemento do vetor
( args )
método, lista de args
invocação do método
++ --
variável
incremento, decremento
+
número
mais, menos
~
inteiro
complemento (NOT bit a bit)
!
booleano
NOT booleano
new
classe
criação de objetos
-
Orientação a objetos e linguagem Java
PET Computação
Sumário de operadores (cont.)
Operadores
Tipo de operando
Operação executada
( type )
tipo, qualquer coisa
cast (conversão explícita)
*, /, %
número, número
multiplicação, divisão e resto
+
string, qualquer coisa
concatenação
< <= > >=
número, número
menor/maior
==
primitivo, primitivo
igual (o mesmo valor)
!=
primitivo, primitivo
não igual (valores diferentes)
=
variável, valor
atribuição
*=, /=, %=, +=. -=, ...
variável, valor
Atribuição geminada com oper.
Orientação a objetos e linguagem Java
PET Computação
Exercícios
• Crie uma classe Teste para exercitar tipos básicos e operadores
conforme a seguir:
public class Teste {
public static void main (String[] args) {
}
}
• 1) Declare três variáveis inteiras (int): valor1, res1, res2. Inicialize-as
com os seguintes valores: 1000, pós-incremento de valor 1 e pré
decremento de valor 1. Mostrar os valores das variáveis utilizando o
comando System.out.println ( );
• 2) Declare uma variável do tipo float chamada valor2. Inicialize-a com
a variável valor1. Acumule o valor de valor1 novamente em valor2.
Mostre o valor da variável valor2;
Orientação a objetos e linguagem Java
PET Computação
Exercícios (cont.)
• 3) Declare uma variável do tipo double chamada valor3 e inicialize-a
com a variável valor2 multiplicada por 3. Mostre o valor de valor3;
• 4) Declare uma variável double chamada res3 que recebe a soma das
variáveis valor1, valor2 e valor3. A seguir mostre o valor de resultado3;
• Após a realização de todos os passos, compile e execute.
Orientação a objetos e linguagem Java
PET Computação
Comando if/else
• if (expressão) { comandos } else { comandos }
if (user == null) {
user = “administrador”;
} else user = nome;
• Os parênteses que envolvem a expressão são exigidos pela sintaxe;
• A palavra else é opcional:
Neste caso, a expressão condicional é avaliada e, se for verdadeira, o
comando que segue o if é executado e o comando após o else é pulado;
caso contrário, o comando após o else é executado.
Orientação a objetos e linguagem Java
PET Computação
Comando switch
• Provoca um desvio no fluxo de execução;
• Alternativa ao uso de vários comandos if;
switch (n) {
case 1: { comandos } break; // pára aqui
case 2: { comandos } break; // pára aqui
default: { comandos} break; // pára aqui
}
• A expressão associada com o comando deve ser byte, char, short ou
int. Valores booleanos ou reais não são suportaos, nem o tipo long,
apesar de ser um tipo inteiro;
• O comando só pode ter uma cláusula default.
Orientação a objetos e linguagem Java
PET Computação
Comando while
• Permite executar um bloco de código repetidas vezes:
while (expressão) {
comandos
}
• O comando começa por avaliar a expressão. Se falso, o fluxo de
execução vai para o próximo comando. Se verdadeiro, o corpo do laço é
executado e a expressão é reavaliada.
• Pode-se criar um laço infinito usando while (true).
Orientação a objetos e linguagem Java
PET Computação
Comando do
• Similar ao while, porém o teste da expressão é feito no final do laço;
• O corpo do laço é executado pelo menos uma vez:
do {
comandos
}
while (expressão);
• O laço requer tanto a palavra do para marcar seu início, quanto a
palavra while para marcar o seu término e introduzir a expressão
condicional;
• Na prática, o do é menos usado.
Orientação a objetos e linguagem Java
PET Computação
Comando for
• Elimina a necessidade de um contador;
• Os passos de inicialização, teste e atualização constituem as principais
manipulações feitas sobre as variáveis do laço e integram a sintaxe do
for:
for (declaração e inicialização ; teste ; atualização)
comando
• A expressão de inicialização é tipicamente uma expressão de
atribuição, enquanto a expressão de atualização é usualmente um
incremento/decremento;
Orientação a objetos e linguagem Java
PET Computação
Comando for (cont.)
for (int i = 0; i < 10; i++) {
System.out.println (i);
}
• O exemplo acima imprime os números de 0 a 9, sem necessidade de
atualizar a variável dentro do laço;
• Todas as informações são colocadas em uma única linha, facilitando a
compreensão;
• Tanto a expressão de inicialização quanto a de atualização podem
conter mais de uma variável, separadas por vírgulas:
for (int i = 0, j = 10; i < 10; i++, j--) {
soma += i * j;
}
Orientação a objetos e linguagem Java
PET Computação
Comando for (cont.)
• As expressões de inicialização, teste e atualização do comando são
todas opcionais, porém o caractere de ponto e vírgula que as separa é
obrigatório. Se a expressão do teste é omitida, presume-se que ela é
sempre verdadeira:
for ( ; ; ) // for infinito
Orientação a objetos e linguagem Java
PET Computação
Comando break
• Utilizado para transferir o controle para fora do corpo do comando de
laço ou switch mais próximo;
• Portanto, é usado para sair de qualquer tipo de laço;
• Muito útil para abortar um laço quando algum evento ocorre durante a
execução de seu corpo;
Orientação a objetos e linguagem Java
Comando break (cont.)
• O seguinte trecho utiliza o break junto ao while:
int i = 0;
int total = 0;
while (i < 100) {
total +=i; // total = total + i;
if (total >= 200) {
break;
}
System.out.println (i);
i++;
}
}
PET Computação
Orientação a objetos e linguagem Java
PET Computação
Comando break (cont.)
• O break é também utilizado junto ao switch, para sair do corpo do
comando:
switch (resposta) {
case 's':
case 'S': System.out.println ("A resposta é sim."); break;
case 'n':
case 'N': System.out.println ("A resposta é não."); break;
default: System.out.println ("Resposta inválida.")
}
Orientação a objetos e linguagem Java
PET Computação
Comando continue
• Usado para transferir o controle para o fim do corpo do laço, antes da
reavaliação da expressão de teste;
• Causa a interrupção da iteração do laço corrente e o pulo para a
próxima iteração do laço;
• No trecho abaixo, o continue é usado para interromper a execução do
resto do corpo do comando forem todos os números pares:
int total = 0;
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
total += i;
}
System.out.println (total);
Orientação a objetos e linguagem Java
PET Computação
Comando return
• Mecanismo pelo qual os métodos retornam os valores requeridos;
• Um return aceita um valor simples ou uma expressão que deve ser
compatível com o tipo de retorno do método em que está inserido:
public class Aluno {
.
.
.
public String getNome (Aluno x) {
return x.nome;
}
public void setNome (Aluno x, String n) {
x.nome = n;
return; // sintaxe para retorno void não é necessária
}
}
Orientação a objetos e linguagem Java
PET Computação
Comando return (cont.)
• Quando um return é encontrado, o fluxo de execução abandona o
método imediatamente, ignorando quaisquer comandos que existam
entre o comando de retorno e o final do método;
• Se um método for void, o return não aceitará nenhum valor de retorno
ou expressão.
Orientação a objetos e linguagem Java
PET Computação
Classes
• Uma classe encapsula todos os dados e comportamentos que definem
um objeto;
• Contém atributos que são atribuídos a todos os novos objetos desta
classe;
• Dados armazenados em um objeto podem ser tanto primitivos, tais
como inteiros ou caracteres, ou referências para outros objetos;
• Pode conter também métodos que especificam as ações que um objeto
pode realizar;
• Java utiliza pacotes para agrupar classes que estão logicamente
relacionadas;
• Pacotes consistem de classes localizadas num mesmo diretório.
Orientação a objetos e linguagem Java
PET Computação
Pacotes
• É um recipiente para classes que estão logicamente relacionadas, por
pertencerem a uma mesma aplicação ou por terem funções afins;
• Ajudam a segmentar partes de uma aplicação complexa em pedaços
gerenciáveis;
• A JVM usa uma construção conhecida como espaço de nomes para
gerenciar nomes de identificadores dentro de um programa. É uma
porção de memória especialmente alocada para tal:
Ex: se o JDK ou outra classe usa um identificador chamado count,
um programa não poderá definir uma variável com
esse nome.
Orientação a objetos e linguagem Java
PET Computação
Modificadores de acesso
• Java provê controle de acesso às classes através de modificadores de
acesso:
- public – o menos restritivo de todos os modificadores de acesso. Uma
classe declarada como public pode ser vista e usada por todas as demais
classes;
- protected – o próximo nível de controle. Uma classe definida como
protected pode ser vista por qualquer uma de suas subclasses ou por
qualquer outra classe definida no mesmo pacote;
- private – o mais restritivo modificador. Uma classe private não pode
ser acessada por nenhuma outra classe;
• Se um modificador de acesso não é especificado, a classe pode ser
vista e usada por qualquer classe dentro do mesmo pacote.
Orientação a objetos e linguagem Java
PET Computação
Classes e objetos
• Uma classe é um gabarito para a construção de objetos dessa classe.
Um objeto é uma instância de uma classe;
• Cada objeto de uma classe tem a mesma estrutura de dados e
operações. Porém, os valores mantidos nesta estrutura de dados são
únicos para cada objeto, e são chamados variáveis de instância.
Orientação a objetos e linguagem Java
PET Computação
Criação de um objeto
• Objetos são criados usando o operador new;
• new cria uma instância de uma classe e retorna uma referência para o
novo objeto criado:
Aluno a1 = new Aluno (“José”);
Aluno a2;
a2 = new Aluno (“José”);
• O operador new retorna uma referência ao novo objeto e não o próprio
objeto.
Orientação a objetos e linguagem Java
PET Computação
Criação de um objeto (cont.)
• O operador new faz três coisas:
• Aloca memória para o novo objeto. O operador sabe quanta memória é
necessária olhando a definição da classe;
• Utiliza o construtor da classe para inicializar as variáveis de instância
do novo objeto;
• Retorna uma referência para o objeto criado. Para a referência ao
objeto no futuro, ela deve ser guardada em uma variável.
Orientação a objetos e linguagem Java
PET Computação
Criação de um objeto (cont.)
Aluno a1 = null;
• Foi declarada uma variável com uma referência chamada null. Isto
indica que a variável de referência a1 não se refere a nenhum objeto
ainda;
• null pode ser usado com o operador de igualdade para verificar se uma
variável de referência já tem uma referência a um objeto:
if (a1 == null) {
.
.
.
}
• Pode-se atribuir null a um objeto quando seu uso não for mais
necessário. Se nenhuma referência for feita a ele após isso, esse será
recolhido pelo garbage collector.
Orientação a objetos e linguagem Java
PET Computação
Atribuindo referências
• Quando uma variável de referência um objeto é declarada ela recebe o
valor null. Para usá-la é necessário inicializá-la:
Aluno a1 = new Aluno (“José”);
Aluno a2 = a1;
• Apenas um objeto foi criado. Atribuindo uma referência para um objeto
a outra referência, tem-se duas referências para o mesmo objeto, e não
uma cópia do objeto.
Orientação a objetos e linguagem Java
Variáveis de instância
• Devem ser declaradas dentro da definição da classe;
• Para acessar variáveis de instância:
public class Aluno {
public String nome;
private String matricula;
.
.
.
}
PET Computação
Orientação a objetos e linguagem Java
PET Computação
Variáveis de instância (cont.)
Aluno a1 = new Aluno ();
a1.nome = "José";
if (a1.nome.equals("José")) {
a1.matricula = "123456"; // erro de compilação
}
• Essa sintaxe somente é permitida se a variável de instância tiver sido
declarada como public.
Orientação a objetos e linguagem Java
PET Computação
Métodos
• Na definição de uma classe em um programa orientado por objetos, o
comportamento da mesma é implementado nos seus métodos;
• Um método em Java é equivalente a uma função ou procedimento em
outras linguagens;
• Os elementos integrantes de um método são:
• Modificador:
- Um método declarado como public poderá ser chamado a partir de
qualquer classe do programa;
- Se o método é declarado como private, ele somente poderá ser
invocado por outros métodos da mesma classe;
• Tipo de retorno:
- Primitivo, referência para um objeto e pode não haver retorno (void).
Orientação a objetos e linguagem Java
Métodos (cont.)
• Lista de parâmetros, podendo não haver nenhum.
public class Aluno {
.
.
.
// mod ret nome (argumentos)
public void SetNota (float n) {
nota = n;
}
}
PET Computação
Orientação a objetos e linguagem Java
PET Computação
Métodos get/set
• No exemplo, são definidos dois métodos de instância para a classe
Aluno: setNome e getNome. Cria-se um objeto Aluno e atribui-se a
referência para este objeto à variável a1. Através de a1, o método
getNome é usado para comparar o produto com o literal “José”.
• Caso se fizesse necessário alterar o nome do aluno, bastaria utilizar o
método setNome passando como parâmetro o novo nome desejado.
• COMPLETAR
Orientação a objetos e linguagem Java
PET Computação
Encapsulamento
• Uma classe bem definida deve separar a sua interface pública da
implementação interna. Logo, as variáveis de instância da classe devem
ser declaradas como private;
• Usuários da classe devem invocar os métodos da classe para acessar
ou alterar o estado de um objeto;
• Encapsular corretamente traz como benefício não ser necessário
alterar nenhuma linha de código além daquelas referentes à própria
implementação da classe.
Implementando Classes
PET Computação
Implementando Classes
Implementando Classes
PET Computação
Sobrecarga de Métodos
• Utilizamos esta ténica para que dois ou mais métodos tenham o
mesmo nome, desde que possuam assinaturas diferentes.
• Assinatura é composta por seu nome, juntamente com o número e
tipo dos parâmetros.
• O tipo de retorno não fará parte da assinatura, portanto não
poderá diferenciar métodos sobrecarregados.
• Ao chamar um método sobrecarregado, o compilador escolherá o
método correto a ser chamado, analisando os parâmetros passados na
chamada e comparando esses parâmetros com os esperados por cada
um dos métodos com aquele nome na definição da classe.
Implementando Classes
PET Computação
Sobrecarga de Métodos (cont)
• Exemplo de Método sobrecarregado:
public class Curso{
private String nomeCurso ;
public void setNome(){
nomeCurso = “Sem nome”;
}
public void setNome(String nome){
nomeCurso= nome;
}
}
Implementando Classes
PET Computação
Construtores
• São métodos especiais chamados quando um objeto é criado;
• Sempre tem o mesmo nome da classe;
• Não possui nenhum tipo de retorno;
• Pode esperar nenhum, um ou vários parâmetros;
• Pode existir mais de um contrutor por classe, cada um com uma
assinatura diferente.
Implementando Classes
PET Computação
Construtores (cont)
• Exemplo de construção de um construtor:
public class Curso{
public String nomeCurso;
public int codigoCurso;
public Curso(){
}
public Curso(String nome,int codigo){
nomeCurso=nome;
codigoCurso=codigo;
}
}
Implementando Classes
PET Computação
Construtores (cont)
• Exemplo de invocação de construtor:
// Chama o construtor sem parâmetros Curso()
Curso c1 = new Curso();
// Chama o construtor Curso(String nome,int codigo)
Curso c2 = new Curso( “ Word ”,12 );
Curso c2 = new Curso( “ Excel ”,15 );
Implementando Classes
PET Computação
Referência this
• O parâmetro this é uma referência implícita para objeto chamado, não
sendo necessário na maioria dos casos.
• Usado dentro do método de instância para se referir ao objeto
corrente.
• Exemplo:
public class Curso{
public String nomeCurso;
public Curso(String nome){
this.nome=nome;
}
}
Implementando Classes
PET Computação
Referência super
• Usamos em classe que possui um ancestral.
• Permite que seja acessado métodos da superclasse sobrescritos pela
subclasse.
• Exemplo:
public class Bola{
public float dimensao;
public Bola(float dimensao){
this.dimensao=dimensao;
}
}
public class BolaColorida{
public String cor;
public BolaColorida(float dimensao,String cor ){
this.cor=cor;
super(dimensao);
}
}
Implementando Classes
PET Computação
Variáveis de Classe
• As variáveis de classe também chamadas de variável estática(variável
static), são aquelas variáveis que pertence a todas instâncias de uma
classe.
• A alteração desta variável por qualquer uma das instâncias fará com
que todas elas sejam afetadas pela alteração.
• Exemplo:
public class Curso{
private static int quantidadeCurso; // var. de classe
public String nomeCurso;
// var. de instância
//..
}
Implementando Classes
PET Computação
Variáveis de Classe(cont)
• Como as variáveis de instância, as variáveis de classe também pode
ser inicializada com valores diferentes do valor default.
• NÃO pode utilizar construtores para inicializar variáveis de classe,
tendo em vista que construtores são utilizados para construir instâncias.
• Para inicializar também podemor utilizar o inicializador estático como
mostra o exemplo abaixo:
public class Curso{
private static int quantidadeCurso; // var. de classe
static{
Date dataAtual = new Date ( );
quantidadeCurso = getQuantidade(dataAtual)
}
}
Implementando Classes
PET Computação
Métodos de Classe
• Também conhecido como estático (método static), é um método que
pertence a classe e é compartilhado por todas as instâncias desta classe.
• Um método de classe só pode acessar variáveis de classe e invocar
métodos de classe.
• Exemplos:
public class Curso{
private static int quantidadeCurso; // var. de classe
public static void setQuantidadeCurso(int quant){
Curso.quantidadeCurso=quant;
}
}
//..
Curso.setQuantidadeCurso(20);
// ou
Curso c1 = new Curso ( );
c1.setQuantidadeCurso(20);
Implementando Classes
PET Computação
Variáveis final
• Uma variável final é uma constante, não pode ser modificada, deve ser
inicializada e é geralmente pública (public), permitindo o acesso externo.
• É uma técnica útil para evitar que programadores inadvertidamente ou
maliciosamente redefinam métodos essenciais que devem funcionar de
uma maneira esperada.
• Exemplo:
public class Curso{
private final static int maxDeCurso = 20;
//..
}
Implementando Classes
PET Computação
Método finalize
• Java não suporta destrutores, já que destrutores são normalmente
empregado para liberar recursos mantidos pelo objeto, tais como memória
secundária alocada, arquivos abertos e etc. A fim de permitir que um
objeto libere outro recurso que não seja memória (pois esta é
automaticamente gerenciada pelo Java), utilizamos o método finalize().
• O método finalize() é chamado automaticamente quando uma objeto é
coletado pelo sistema coletor de lixo.
• Exemplo:
public class Curso{
public void finalize ( ) {
// Libera todos os recursos alocados pela classe
}
}
Strings e Vetores
PET Computação
Strings e Vetores
Strings e Vetores
PET Computação
Strings
• Assim como na maioria das liguagens de programação, strings são
bastante usadas em Java. Java possui em sua API uma classe String para
facilitar a manipulação de caracteres.
• Alguns construtores da classe String:
• String ( ) – cria uma string vazia com o valor ““.
• String(String str) – cria uma cópia do objeto String referenciado por str.
• String(char [ ] array)-cria uma string a partir dos caracteres presentes no
vetor array;
Strings e Vetores
PET Computação
Criando Strings
• A maneira mais fácil de criar strings é a partir de uma constante
colocada entre aspas. Ex.:
String nome = “Joana”;
• Pode ser utilizado o operador (+) para concatenar duas strings. Ex.:
String nome = “Joana”+” “+”Freitas”;
Strings e Vetores
PET Computação
Concatenando Strings
• Para realizar a concatenação de duas string Java usa o operador (+) e
o método concat (). Ex.:
String nome = “Joana”+”Freitas” ;
nome = “Joana”.concat(“Freitas”) ;
• O tipo primitivo é implicitamente convertido para String na
concatenação. Ex.:
int posicao = 1;
String colocacao = posicao+“ º lugar”;
Strings e Vetores
PET Computação
Executando Operações em Objetos Strings
• Método length () – retorna o número de caractees de uma string.
• Método charAt () – retorna o caracter da posição especificado como
argumento do método.
• Método substring () – retorna uma substring especificada pelos dois
argumentos fornecidos.
• Método toUpperCase () – retorna uma nova string com todos
caracteres em maiúsculo.
• Método toLowerCase () – retorna uma nova string com todos
caracteres em minúsculo.
• Método trim () – retorna uma nova string contendo a cópia do original
com os espaços em branco removidos tanto do início quanto do fim.
Strings e Vetores
PET Computação
Executando Operações em Objetos Strings (cont)
• Exemplo dos métodos :
//--- método length( )
String nome = “Fernanda”
int tam = s.length( );
// tam = 8;
//--- método charAt( )
char c = nome.charAt ( 0 ); // c = F
//--- método substring( )
//
01234567
String nome = “Fernanda”;
String sub = s.substring (3,6) ; // sub = “nan”
String sub = s.substring (3) ; // sub = “nanda”
Strings e Vetores
PET Computação
Executando Operações em Objetos Strings (cont)
• Exemplo dos métodos :
//--- métodos toLowerCase ( )
String N = nome.toUpperCase ( );
// N=“FERNANDA”
//--- métodos toUpperCase ( )
String n = nome.toLowerCase ( );
// n=“fernanda”
//--- método trim ( )
String curso = “ Curso de Java “ ;
String tr = curso.trim( );
// tr = “Curso de Java”
Strings e Vetores
PET Computação
Comparando duas Strings
• O método equals() pode ser utilizado para comparar duas strings.
Quando as duas strings especificadas contêm o mesmo conteúdo, o
método retorna o valor true. Caso uma string seja null será retornado
false.
• Importante:
• Não utilize o operador == para comparar objetos Strings !
• O método equals diferencia maiúsculas de minúsculas, para isso
utilizamos o método equalsIgnoreCase()!
Ex.:
String fruta = “maça”;
boolean flag = fruta.equals (“Maça”); // flag = false;
flag = fruta.equalsIgnoreCase (“Maça”); // flag = true;
Strings e Vetores
PET Computação
Produzindo Strings a partir de Tipos Primitivos
• A classe String fornece um método estático valueOf() que retorna uma
string representando o tipo primitivo. Existe uma versão de valueOf()
para cada tipo primitivo.
• Exemplos:
String nove = String.valueof( 9 );
// chama valueOf ( int ) “9”
String doispontodois = String.valueof(2.2) // chama valueOf ( int ) “2.2”
Strings e Vetores
PET Computação
Produzindo Tipos Primitivos a partir de Strings
• Para converte um valor String para int e float é necessário utilizarmos
um método de conversão.
•Exemplos:
String valor_int = “12” ;
String valor_float =“1.4” ;
int v1 = Integer.parseInt (valor_int);
float v2 = Float.parseInt (valor_float);
Strings e Vetores
PET Computação
Concatenando Strings utilizando StringBuffer
• Um jeito eficiente de concatenar Strings é utilizando um objeto
StringBuffer e seu método append( );
// Utilizando o operador +
String texto = “Esta é a primeira linha do texto\n”;
texto = texto + “Ganhando outra linha\n”;
// Utilizando StringBuffer e append ( );
StringBuffer texto = new StringBuffer (“Esta é a primeira linha do texto\n”);
Texto.append( “Ganhando outra linha\n” );
Strings e Vetores
PET Computação
Vetores
• Podemos considerar um vetor como uma coleção de variáveis do
mesmo tipo.
• Cada elemento pode armazenar um único tipo e tem que ter um
comprimento fixo quando criado.
•Exemplo de declaração de vetores de tipos primitivos:
// Sintaxe – tipo [ ] nome
int [ ] numeros;
// Sintaxe – tipo nome [ ]
int numeros [ ];
Strings e Vetores
PET Computação
Vetores (cont.)
• Importante:
• Todos os elementos de um novo vetor tipo recebem
automaticamente o valor default para o tipo:
• Elementos char recebem ‘\u0000’;
byte,short,int recebem 0;
float e double recebem 0.0;
boolean recebem false;
• Exemplo de declaração de vetores:
// Declarando um array do tipo int com comprimento = 5
int [ ] numeros = new int [ 4 ];
Strings e Vetores
PET Computação
Vetores (cont.)
• Exemplos de construções válidas:
// Declarando um array do tipo int com comprimento = 5
int [ ] numeros = new int [ 4 ];
// Declarando um array em tempo de execução
int [ ] valores [ ];
int numeros = 10 ; // Números de alunos
Valores = new int [numeros];
•Exemplos de construções inválidas:
// O tamanho não faz parte da inicialização
int [6] numeros;
// variável não foi devidamente inicializada
int n;
int [ ] valores = new int [n] ;
Strings e Vetores
PET Computação
Inicializando Objetos de Vetores e propriedade length
• Existe duas maneiras de inicializar um vetor: Criar um inicializador ao
criá-lo ou atribuir um valor para cada elemento do vetor.
// Inicializa elemento por elemento
int [ ] numeros = new int [5];
for ( int i =0; i < numeros.length; i++ )
numeros[ i ] = 0;
// Inicializadores
String [ ] nomes = {“Raquel”,”Josiane”};
• Propriedade length é um atributo que contém o número de elementos
do vetor, eliminando a necessidade de armazenar o tamanho do vetor
em outra variável.
Strings e Vetores
PET Computação
Vetores multidimensionais
• Java suporta vetores multidimensionais, ou seja, um vetor de vetores.
•Exemplos de declaração:
// matriz [indiceLinha] [indiceColuna];
int [ ] [ ] numeros = new int [ 4 ] [ 4 ] ;
// Exemplo de matriz com 5 linha e número de colunas diferentes
// A primeira linha terá apenas 1 elemento, a segunda 2 elementos...
int [ ] [ ] matriz = new int [ 5 ] [ ] ;
for ( int i = 0 ; i <= matriz.length ; i++ )
matriz [ i ] = new int [ i+1 ];
Tratamento de Exceções
PET Computação
Tratamento de Exceções
Tratamento de Exceções
PET Computação
Introdução
• Um evento que ocorre durante a execução de um programa que
interrompe o fluxo normal das instruções é chamado de exceção. Muitos
erros podem causar excessões.
• Uma exceção que ocorre dentro de um método Java, o método cria um
objeto Exception, no qual contém informações sobre a exceção, tais
como seu tipo e o estado do programa quando ocorreu o erro.
• O ambiente de execução é responsável por encontrar um código que
manipule o erro, após o método levantar uma exceção.
• Vantagens na utilização de exceções: Separação de código,
Propagação de Erros, Agrupar Tipos de Erros e Exceções não são
ignoradas.
Tratamento de Exceções
PET Computação
Separação de Código
• No modo de programação tradicional para detectar os potenciais erros
para esta função, cada erro deve ser testado e atribuído para um código
de erro, acrescentando uma grande quantidade de código adicional.
• Exemplo de código para tratamento de abertura de arquivos com
retorno de valor, na programação tradicional.
int leituraArquivo {
int codErro = 0 ;
abre arquivo;
if ( erroAberturaArquivo )
codErro = -1;
else {
le arquivo;
if ( erroLeituraArquivo ) codErro = -2;
fecha arquivo;
if ( erroFechamentoArquivo ) codErro= -3;
}
return codErro; }
Tratamento de Exceções
Separação de Código (cont.)
• A mesma função exemplo anterior ficaria deste jeito.
leituraArquivo {
try {
abre arquivo;
le arquivo;
fecha arquivo;
}
catch (erroAberturaArquivo) {
Manipula erro;
}
catch (erroLeituraArquivo) {
Manipula erro;
}
catch (erroFechamentoArquivo) {
Manipula erro;
}
}
PET Computação
Tratamento de Exceções
PET Computação
Propagação de Erros
• Esta vantagem na utilização de exceções é a habilidade de propagar a
informação do erro através dos métodos da pilha de chamadas.
• A exceção Java é enviada para o manipulador apropriado, sem a
necessidade de comando if em cada nível para transmitir o erro acima
na pilha de chamadas.
Tratamento de Exceções
PET Computação
Agrupar tipos de Erros
• As exceções geralmente podem se enquadrar em categorias ou
grupos. Por exemplo erros manipulando vetores e E/S, podem ser
facilmente imaginados como um grupo de exceções, cada exceção
representando um dos tipos de erros.
• Importante: Manipuladores de exceções que são muito genéricos
podem tornar o código mais propenso a erros por capturar e tratar
exceções que não foram previstas, não sendo corretamente tratada
dentro do manipulador.
Tratamento de Exceções
PET Computação
Exceções não são ignoradas
• Quando um método gera uma exceção, ela não pode ser ignorada, ela
precisa ser capturada e manipulada em algum local.
Tratamento de Exceções
PET Computação
Manipulando Exceções
• A classe Throwable é uma superclasse de todos erros que possui duas
subclasses: Error e Exception.
• Subclasse Error : Erros são extensões da classe Error. Os erros não
devem ser capturados e geralmente causarão o término do programa.
Exemplo : Falta de memória durante a execução.
• Exceções Não Verificadas : São extensões da classe
RunTimeException, e são as que ocorrem dentro do ambiente de
execução java (JVM). Exemplo : Tentar acessar um objeto utilizando uma
referência nula.
Tratamento de Exceções
PET Computação
Tratando Exceções
• Quando um método levantar uma exceção, o programador pode
capturar a exceção e tratá-la, capturar a exceção e levantar uma
exceção diferente (que será manipulada em outro local) ou deixar a
exceção passar através do método (algum manipulador deve então
capturá-la em outro local).
• Podemos identificar se um método pode levantar alguma exceção na
documentação JDK.
Tratamento de Exceções
PET Computação
Manipulando Exceções
• Para manipularmos exceções em Java utilizamos os comando try/catch/
finally.
• Comando try : Delimita o bloco aonde a chamada de métodos pode
levantar exceções.
• Comando catch : É colocado após o bloco try e serve para tratar os
vários tipos de exceções. Pode ser definido zero ou mais blocos
catch.
• Comando finally : O bloco delimitado pelo comando finally serve
para finalização do método antes que o controle seja transferido
para outra parte do programa. Exemplo : Fechamento dos arquivos.
Tratamento de Exceções
PET Computação
Blocos para tratamento de exceções
try {
…
}
catch ( ExceptionType object ) {
…
}
finally {
…
}
Tratamento de Exceções
PET Computação
Exemplo Prático
• O exemplo a seguir apresentará um exemplo de uma classe
convertNumero, que tenta converter a string “palavra” para número.
public class convertNumero {
public static void main ( String argv [ ] ) {
int num;
try {
// String contida no argv [ 0 ] é “ palavra ”
num = Integer.parseInt (argv [ 0] );
}
catch ( NumberFormatException e ) {
System.out.println ( “Não foi possível converter a string
para inteiro. Verifique a string fornecida ” );
}
catch ( NumberArrayOutBoundsException e ) {
System.out.println (“ Nâo foi fornecido argumento ”);
}
finally { }
}
Reutilização e Abstração
PET Computação
Reutilização e Abstração
Reutilização e Abstração
PET Computação
Especificando Herança em Java
• Usamos a palavra reservada extends para especificar herança.
• Abaixo segue o exemplo da classe Bar e sua subclasse BarNoturno.
public class Bar {
// Definição da classe Bar
}
public class BarNoturno extends Produto {
// Métodos e atributos adicionais para distinguir
// dos outros tipos de Bar
}
Reutilização e Abstração
PET Computação
Objetos de Subclasses
• Uma superclasse define as variáveis que são relevantes para todos
tipos de Bar, e as subclasses herdam estas variáveis. Exemplo :
public class Bar {
private String nome; // Nome do Bar
private float entrada; // Valor da entrada
}
public class BarNoturno extends Produto {
private int idade; // Idade mínima para entrar no bar
}
• Deste jeito a classe Bar possui as variáveis nome e entrada, e a classe
BarNoturno possui as variáveis nome e entrada herdada da superclasse
e a variável idade.
Reutilização e Abstração
PET Computação
Utilizando contrutores da Superclasse
• Como a subclasse não herda nenhum construtor de sua superclasse,
caso não seja definido nenhum contrutor, a subclasse terá apenas o
contrutor default ( que não recebe parâmetro algum ).
• Podemos também utilizar os contrutores da superclasse na subclasse,
como mostra o exemplo abaixo:
public Bar ( String n, float e ) {
nome = n;
entrada = e;
}
public BarNoturno ( String n, float e, int i ){
idade = i;
super ( n , e ); // Referencia o construtor da
// superclasse
}
Reutilização e Abstração
PET Computação
Especificando Métodos Adicionais
• A superclasse deve definir todos os métodos que são relevantes para
todas as subclasses.
• A subclasse herda todos os métodos da superclasse e pode definir
métodos específicos. Exemplo :
// Métodos da superclasse Bar
public class Bar {
public float getEntrada( );
public String getNome( );
}
//Métodos da Subclasse BarNoturno
public classBarNoturno {
public int getIdade( );
// BarNoturno possui os métodos herdado pela
//superclasse e um novo método getIdade( );
}
Reutilização e Abstração
PET Computação
Sobrescrevendo Métodos da Superclasse
• A subclasse herda todos os métodos da superclasse e pode modificar o
comportamento de um método de sua superclasse sobrescrevendo-o,
• Exemplo :
public class Produto {
public float getPreco ( ) {
return preco;
}
}
public class CD extends Produto {
public float getPreco ( ) {
float x = getCustoCD( ) + getRoyalle ( );
return x;
}
}
Reutilização e Abstração
PET Computação
Sobrescrevendo Métodos da Superclasse (cont.)
• Para sobrescrever um método de uma superclasse, a subclasse deve
definir o método exatamente com a mesma assinatura e tipo de retorno
do método da superclasse.
• Sobrecarga de métodos : É quando você define vários métdos com
o mesmo nome e diferente assinaturas.
• Sobrescrita de métodos : É quando você fornece um método com
exatamente o mesmo nome e a mesma assinatura que este métodos
possui na superclasse.
Reutilização e Abstração
PET Computação
Invocando Métodos da Superclasse
• Como foi visto anteriormente quando sobrescrevemos um método da
superclasse, estamos escondendo este método. Apesar disto, durante a
definição do método da subclasse, podemos chamar o método
sobrescrito. Ex.:
public class Produto {
public float getPreco ( ) {
return preco;
}
}
public class CD extends Produto {
public float getPreco ( ) {
float x = super.getPreco( ) + getRoyalle ( );
return x;
}
}
Reutilização e Abstração
PET Computação
Operador instanceof
• Utilizamos o operador instanceof para determinar o tipo de um objeto
em tempo de execução.
• Sintaxe do operador instanceof :
refObjeto instanceof nomeClasse
• Exemplo :
public void metodo (Produto i){
// …
if ( i instanceof CD) {
((CD) i).play( );
}
• Neste exemplo se o Produto i é instância de CD, chama o método
play();
Reutilização e Abstração
PET Computação
Métodos e Classes Final
• Declaramos métodos e classe final por suas principais razões:
Segurança e Otimização.
• Se um método executa alguma operação vital, ela deve ser declarada
como final, para evitar que seja sobrescrito por um método malintencionado que procura passar pelas verificações de segurança.
• Quando declaramos uma classe como final, ela não poderá nunca mais
ser estendida por nenhuma outra classe. Ex.:
public final class Criptografia {
private String senha;
public final void getSenha (String senha) {
getCriptografia (senha,256);
}
}
Reutilização e Abstração
PET Computação
Abstração
• Classes Abstratas : Esta classe é simplesmente uma classe que não
pode ser instanciada, somente suas subclasses podem.
• Métodos Abstratos : Um método definido dentro de uma classe
abstrata deve ser implementado pela subclasses destas. Esta técnica
permite que o projetista decida quais comportamento as subclasses
devem ter.
• Interfaces : É a especificação de um conjunto de método, similare a
uma classe abstrata, oferecendo também herança múltipla. Uma classe
pode implementar um número ilimitado de interfaces, mas pode
estender somente uma única superclasse.
Reutilização e Abstração
PET Computação
Definindo Classes Abstratas
• Utilizamos a palavra reservada abstract para indicar uma classe
abstrata. No exemplo mostrado abaixo declaramos a classe Produto
como abstrata.
public abstract class Produto {
private float preco;
public boolean isImportant( );
}
• Produto é declarada como uma classe abstrata porque não possui
informação ou comportamento suficientes para representar um objeto
autônomo.
• Caso você tente instanciar uma classe abstrata, será gerado um erro
na hora da compilação.
• O modificador abstract pode ser aplicado apenas a classes e métodos.
Classes abstratas provem um modo de adiar a implementação de
métodos para as subclasses.
Reutilização e Abstração
PET Computação
Métodos Abstratos
• Devemos declarar métodos abstratos quando existe uma operação que
todas as classes deverão ter, cada um de sua maneira.
• Ex.:
public abstract class Produto {
public abstract boolean getValor( );
}
• Ao declarar um método abstrato, você deve fornecer somente a
assinatura do método que compreende: o nome do método, a lista de
parâmetros e o tipo de retorno. Não fornece um corpo para o método.
• Como este método é abstrato, todas as subclasses devem fornecer
uma implementação para ele.
Reutilização e Abstração
PET Computação
Interfaces
• Uma interface é similar a uma classe abstrata, exceto que ela não
possui nenhum método concreto ou variáveis de instâncias. Será apenas
uma coleção de declarações de métodos abstratos e contantes.
• Podemos relacionar interface como um contrato que a subclasse deve
obedecer.
• Implementar uma interface significa : Herdar as suas constantes e
comprometer-se a definir todos os seus métodos.
• Exemplo de interface:
public interface MyInterface {
int var = 0;
void method ( );
}
Reutilização e Abstração
PET Computação
Definindo Interfaces
• Deve-se definir interface utilizando a palavra reservada interface.
Todos os métodos especificados em uma interface são implicitamente
públicos e abstratos. Qualquer variáveis definidas em uma interface são
implicitamente públicas, estáticas e constantes.
• Interface Connection do pacote java.sql.
public interface Connection {
void commit ( ); // equilvalete a public abstract void commit ( );
void rollback ( );
void close ( );
// …
}
Reutilização e Abstração
PET Computação
Implementando Interfaces
• No exemplo abaixo será mostrado a implementação da interface
Connection, mostrado no exemplo anterior.
public class Aplicacao implements Connection {
public void commit ( ){
//… codigo do método
}
void rollback ( ) {
//… codigo do método
}
void close ({
//… codigo do método
}
// …
}
• Utilizamos a cláusula implements seguida do nome da interface para
definir que estamos implementando uma interface.
Download

Vantagens da orientação a objetos