JAVA
Marcio de Carvalho Victorino
1
Orientação a Objetos
2
Introdução a Orientação
Objetos
a
3
Orientação a Objetos
• Propósitos da Programação Orientada a Objetos
Prover mecanismos para visualizar a complexidade do
desenvolvimento de software da mesma forma que
visualizamos a complexidade do mundo real;
Acelerar o desenvolvimento de softwares com base na
modularidade e acoplamento;
Melhorar a qualidade do software desenvolvido.
4
Classes - conceitos
• definem a estrutura e o
comportamento de um tipo de
objeto;
• atuam como templates;
• permitem a instanciação de um ou
mais objetos de um mesmo tipo.
Nome
Atributos
Métodos
5
Classes
Visão do mundo real:
• moldes para criação de objetos;
• especificam propriedades e ações em comum a todos seus
objetos.
Classe
Automóvel
6
Objetos - conceitos
• Objeto é uma representação abstrata de uma
entidade do mundo real, que tem um identificador
único, propriedades embutidas e a habilidade de
interagir com outros objetos e consigo mesmo.
• Estado do objeto é um conjunto de valores que os
atributos do objeto podem ter em um determinado
instante do tempo.
7
Objetos
Visão em POO:
Um conjunto distinto de atributos e métodos que representam
entidades do mundo real, implementados por software e gerados
(instanciados) através de classes.
Métodos
Métodos
Atributos
Métodos
Métodos
8
Objetos
Visão em POO:
• Objeto: pacote de software contendo dados e código
(procedimentos) relacionados.
• Os procedimentos são chamados métodos. Os dados dos
objetos são chamados variáveis ou componentes do estado.
Variá
Variáveis
(estado)
Métodos
(interface)
Representaç
Representação
Simplificada
Doughnuts
(donuts)
donuts)
9
Criando Objetos em Java
• Objetos são criados através da declaração new, seguida
de um método construtor. Exemplo:
Automovel gol = new Automovel();
• Uma classe pode ter construtores especializados ou
somente o construtor default (gerado pelo compilador);
• Um construtor recebe sempre o mesmo nome da sua
classe;
• O método construtor gera uma instância do objeto em
memória e o seu código é executado imediatamente após
a criação do objeto provendo-lhe um estado inicial;
10
Criando Objetos em Java
• Valores de parâmetros são passados no momento da
criação;
• Quando declaramos variáveis de qualquer tipo
primitivo (boolean, byte, short, char, int, long, float,
ou double) o espaço em memória (na área de dados) é
alocado como parte da operação;
• A declaração de uma variável referência a um objeto
não aloca espaço em memória;
• A alocação de memória (no heap) é feita somente
quando o objeto é criado.
11
Criando Objetos em Java
• Considere o exemplo abaixo:
Automovel gol;
gol = new Automovel();
• O primeiro comando, a declaração, aloca apenas o
espaço suficiente para a referência. O segundo,
aloca o espaço para os atributos do objeto gol.
• Somente após a criação do objeto é que seus
membros (atributos e métodos) podem ser
referenciados.
12
Criando Objetos em Java
• Alocação e layout
No corpo do método, a declaração
Automovel gol aloca espaço somente para a referência:
gol
????????
O comando new Automovel() aloca e inicializa o
espaço:
String modelo
String cor
int
ano
?
?
0
13
Criando Objetos em Java
• Alocação e layout
Finalmente, atribuindo a variável referência o
endereço do objeto alocado.
gol = new Automovel();
gol
0x01abdfe
String modelo
String cor
int
ano
?
?
0
14
Atributos
• propriedades associadas a uma classe e seus objetos;
• atributos armazenam resultados do processamento feito
pelos métodos da classe.
instância
atributos do objeto
atributos da classe (estáticos)
• Nome
• Cor do pêlo
• Idade
• Número de patas
15
Métodos
• Operações que manipulam o estado do objeto.
• Podem fazer parte da interface do objeto ou
realizar uma função interna.
Classe: Lâmpada
Objeto: philips60w
Métodos
• acender
• apagar
• indicarVoltagem
16
Referência a Membros de Objetos e Classes
Variável
< referência.variável>
fusca.ano = 69;
Método
< resultado = referência.método( parâmetros )>
fusca.ligaMotor();
• Resgatar o resultado é opcional
• Os parâmetros, quando existentes, são posicionais e são tipados
• Número de parâmetros é verificado em tempo de compilação
17
Retornando valor em métodos
• Na definição do nome do método deve ser
indicado se haverá ou não o retorno de valores.
– Com retorno de valores:
public int quadrado (int y)
{
return y * y;
}
– sem retorno de valores:
public void setValor (int y)
{
valor = y;
}
18
Membros Estáticos
• Acessíveis através de uma instância ou diretamente
através da classe
• Campos estáticos
– Uma única variável cujo o valor é compartilhado por
todos os objetos da classe
– Comparáveis à variáveis globais
• Métodos estáticos
– Tarefas que envolvem um conjunto dos objetos
– Podem fazer acesso somente a membros estáticos
19
Dados Estáticos
• Os dados estáticos relativos a classe são únicos
para todos os objetos da classe. Funciona de
forma análogo a uma variável global.
20
Métodos Estáticos = métodos da classe
• Da mesma forma como há dados que pertencem a
uma classe como um todo, também existem
métodos estáticos, que, em vez de serem aplicados
a um objeto individual, executam operações que
afetam a classe inteira
• Métodos estáticos não podem acessar os dados de
instâncias
• Métodos estáticos só podem acessar diretamente
campos estáticos
21
Orientação a Objetos em Java
22
Orientação a Objetos
Conceitos a serem abordados:
• Características:
Abstração
Herança
Mensagem
Encapsulamento
Polimorfismo
Interfaces
23
Abstração
• “Extrair tudo o que for essencial e nada mais” (Aaron
Walsh)
• “A abstração é o processo de filtragem de detalhes sem
importância do objeto, para que apenas as
características apropriadas que o descrevem
permanecam.” (Peter Van Der Linden)
• conceito aplicado a criação de software baseado em
objetos, partindo do princípio que devemos considerar
a essência de cada objeto e não pensar em todos os
detalhes de implementação;
• semelhante ao que normalmente fazemos na nossa
vida em relação aos objetos que nos rodeiam.
24
Abstração
Visão do mundo real:
• Estamos acostumados a sempre abstrair de objetos aquilo
que nos interessa.
placa
cor
númeroChassi
aplicarMulta()
cor
cilindrada
velocidadeMax
acelerar()
25
Encapsulamento
• mecanismo utilizado visando obter segurança,
modularidade e autonomia para objetos;
• conseguido através da definição de visibilidade
privada dos atributos, ganhando-se assim autonomia
para definir o que o mundo externo ao objeto poderá
visualizar e acessar, normalmente através de métodos
públicos.
dica: sempre defina os atributos de uma classe como
privados, a não ser que tenha uma boa justificativa para
não serem.
26
Modificadores de visibilidade
public
Estes atributos e métodos são sempre acessíveis em
todos os métodos de todas as classes. Este é o nível
menos rígido de encapsulamento, que equivale a não
encapsular.
private
Estes atributos e métodos são acessíveis somente nos
métodos (todos) da própria classe. Este é o nível mais
rígido de encapsulamento.
protected Estes atributos e métodos são acessíveis no pacote, nos
métodos da própria classe e suas subclasses, o que será
visto em Herança.
<default> Visível no pacote e na classe.
27
Herança
• Herança significa ser capaz incorporar os dados e
métodos de uma classe previamente definida.
Assim como a herança de todas as operações e
dados, você pode especializar métodos da classe
ancestral e especificar novos operações e dados,
para refinar, especializar, substituir ou estender a
funcionalidade da classe progenitora.
28
Herança
• Você pode fazer sempre com que um objeto mais
geral armazene um objeto mais especializado, mas
o contrário não é verdadeiro sem uma conversão
explícita de tipos.
• Todos os cítricos são frutas, mas nem todas as
frutas são cítricos!
29
Herança - terminologia
• estender = criar uma nova classe que herda todo o
conteúdo da classe existente.
• superclasse = uma classe progenitora ou “base”.
• subclasse = uma classe filha que herda, ou estende,
uma superclasse.
30
Hierarquia de Classes
Em Java, a classe “Object” é raiz de todas as classes:
Object
Sobremesa
Bolo
Torta
LuisFilipe
31
Declaração de Atributos
Forma
[<controleAcesso>] [static] [final] <tipo> <nomeCampo>;
•
•
•
•
•
controle de acesso
– define o escopo de visibilidade de um atributo.
static
– define se o atributo diz respeito à classe (gerado uma única vez)
ou ao objeto.
final
– especifica que o valor do campo é constante.
tipo
– define a espécie do atributo, que pode ser um tipo primitivo (int,
long, double, boolean) ou um objeto (String, etc.).
nome do campo
– especifica um nome para a propriedade.
32
Atributos - controle de acesso
Visibilidade dos membros de uma classe
Especificador
private
protected
public
<branco>
Classe
Subclasse
Package
Mundo
33
this
• this é uma palavra-chave usada
num método como referência para o
objeto corrente.
• ela tem o significado de: “o objeto para
o qual este trecho de código está sendo
executado”.
34
this
Refere-se ao objeto corrente quando
usado no código de um método não estático
Usado com freqüência para passar uma referência do objeto
corrente num envio de mensagem para um outro objeto
A
this
B
A = this
35
super
• super é uma palavra chave usada
numa
subclasse como referência para membros da
superclasse.
• ela tem o significado de: “a superclasse da classe
corrente”.
Observação: normalmente utilizado com métodos.
36
Declarações de Métodos
accessLevel
static
abstract
final
synchronized
returnType
public, protected, private, package (default).
Declara que o método é da classe, ao invés de ser do
objeto.
O método não tem implementação e deve ser membro
de uma classe abstrata.
O método não pode ser sobreposto por uma
subclasse.
Usado na declaração de threads.
Tipo de retorno do método. Se não tem retorno,
especificar: void.
37
Mensagem - chamada de método
Forma
< resultado = referência.método( parâmetros );>
resultado = terra.nomeOrbita();
• A captura do retorno é opcional.
• Parâmetros possuem tipo.
• O número de parâmetros é verificado em tempo de
compilação.
38
Polimorfismo
• ocorre quando uma classe possui um método com o
mesmo nome e assinatura (número, tipo e ordem de
parâmetros) de um método na sua superclasse;
• toda vez que isto ocorrer, a máquina virtual irá executar o
método da classe mais especializada (a subclasse) e não o
método da superclasse (sobreposição). Note que esta
decisão ocorre em tempo de execução;
• polimorfismo ocorre também quando existem dois
métodos com mesmo nome, na mesma classe com e
assinaturas diferentes. O método será escolhido de acordo
com o número de parâmetros, tipo ou valor de retorno
esperado. Note que esta decisão ocorre em tempo de
compilação.
39
Polimorfismo
• Membros com mesmos identificadores substituem
membros herdados.
• Os membros definidos na superclasse podem ser
acessados na subclasse através do qualificador super.
• Métodos declarados como final não podem ser
redefinidos.
• Métodos abstratos devem ser redefinidos ou declarados
como abstratos.
40
Polimorfismo -Sobreposição
Substituir a implementação de um método herdado
por uma implementação própria da subclasse
public class Super
{
...
public void metodo1()
{
a = b * c;
}
}
public class Sub extends Super
{
...
public void metodo1()
{
x = y + z;
}
}
41
Polimorfismo - Sobreposição
class Fruta {
int gramas;
int calorias_por_grama;
Fruta()
{
gramas=55;
calorias_por_grama=0;
}
Fruta(int g, int c)
{
sobreposição
gramas =g;
calorias_por_grama =c;
}
void descascar ()
{
System.out.println(“Aqui eu descasco frutas”);
}
}
42
Polimorfismo - Sobreposição
class Citros extends Fruta {
private int acidoCitrico;
public Citros()
{
super();
this.acidoCitrico=1000;
}
public Citros(int g, int c, int a)
{
super(g,c);
this.setAcidoCitrico(a);
}
43
Polimorfismo - Sobreposição
int getAcidoCitrico()
{
return acidoCitrico;
}
void setAcidoCitrico(int acido)
{
this.acidoCitrico=acido;
sobreposição
}
void descascar ()
{
System.out.println(
“Aqui eu descasco so citricos”);
}
}
44
Polimorfismo - Sobrecarga
public class Fruta
{
int gramas;
int calorias_por_grama;
public Fruta()
sobrecarga
{
gramas=55;
calorias_por_grama=0;
}
public Fruta(int g, int c)
{
this.gramas =g;
this.calorias_por_grama =c;
}
}
45
Polimorfismo - Sobrecarga
public class Feira
{
public static void main(String args[])
{
Fruta melancia = new Fruta(4000, 5);
Fruta manga = new Fruta ();
manga.gramas=100;
manga.calorias_por_grama=100;
System.out.println(“manga “+ manga.gramas +
“ gs “ + manga.calorias_por_grama);
}
}
46
Classes Abstratas
Modelagem de um conceito abstrato
Classe abstrata não pode conter instâncias
Conta
PessoaFisica
PessoaJuridica
Poupança
47
Classes Abstratas
• Quando a palavra-chave “abstract”
aparece no início de uma declaração de
classe, significa que a mesma nunca
gerará instâncias.
• Um método abstrato não tem corpo; o
seu propósito é forçar uma subclasse a
sobrepô-lo
e
fornecer
uma
implementação concreta do método.
48
Classes Abstratas: Exemplo
public abstract class VeiculoAquatico
{
abstract void definirRumo (int n);
abstract void definirVelocidade (int n);
}
class Canoa extends VeiculoAquatico
{
void definirRumo (int n)
{
....
}
void definirVelocidade (int n)
{
...
}
}
49
Interface
• interface pode ser considerada como a
forma com que um objeto se apresenta para
outros, no que diz respeito aos seus métodos
(sua funcionalidade);
• é a representação externa de um objeto.
50
Interface
Visão do mundo real:
• Na nossa vida, estamos acostumados a lidar com objetos através
de sua interface, ignorando sua complexidade.
51
Interfaces em Java
• Criadas com a palavra reservada interface.
• implementadas pelas classes com a palavra
reservada implements.
• Seus métodos sempre são públicos.
• Seus atributos sempre static final.
52
Interface - exemplo
public interface ControleRemoto
{
public void ligaTV();
public void desligaTV();
public void mudaCanalTV(int canalNovo);
}
public class TV implements ControleRemoto
{
public void ligaTV() {...}
public void desligaTV() {...}
public void mudaCanalTV(int canalNovo) {...}
}
53
Modificadores de Classes em Java
public A classe pode ser usada por qualquer outra classe de
qualquer pacote (package).
A classe não pode ser instanciada (contém métodos
abstratos).
final A classe não pode ter subclasse (folha da árvore de
classes).
extends A classe é uma subclasse da superclasse especificada.
abstract
implements A classe implementa a(s) interface(s) especificadas.
strictfp IEEE754 standard para pontos flutuantes.
Padrão: não publica, não abstrata, não final, subclasse de Object e sem
54
implementar nenhuma interface.
Pacotes
• O java provê um mecanismo de pacotes como uma
forma de agrupar classes relacionadas.
• Pode-se indicar que as classes de um programa irão
compor um determinado pacote, através do
comando package.
// Classe empregado do departamento financeiro
// da companhia ABC
package abc.FinanceDept;
public class Empregado {
...
}
55
Utilização de pacotes
• Quando se deseja utilizar as facilidades de um
pacote, deve-se usar o comando import para
informar ao compilador onde encontrar as classes
que serão utilizadas.
import abc.FinanceDept.*;
public class Gerente extends
Empregado {
String departamento;
Empregado[] subordinados;
}
56
Exceções
1
57
O que são Exceções
• Exceções são situações excepcionais que impedem o método
atual de prosseguir executando normalmente. Se esse método
for incapaz de lidar com a exceção, ele delegará o tratamento a
outro objeto.
• Quando ocorre uma dessas situações excepcionais, um objeto
de exceção é criado na pilha de ativação.
• O mecanismo de exceção assume o controle e começa a
procurar, na pilha de ativação, por um local apropriado para
continuar a execução do programa.
• Este local é um método com um exception handler apropriado
para o tipo de exceção, cuja responsabilidade é a de recuperar
a situação. Caso não seja codificado nenhum manipulador de
exceções, o manipulador padrão do runtime é executado.
58
Hierarquia das Exceções
• Error indica a ocorrência de problemas sérios que a maioria
das aplicações não devem tentar capturar. Grande parte de
tais erros acontece em condições bastante irregulares.
• RuntimeExceptions são exceções tais como divisão por zero
ou índice fora do limite. O compilador não exige que essas
exceções sejam verificadas, embora se possa fazê-lo.
Acontecem em qualquer ponto do programa e tendem a ser
numerosas. O custo excede o benefício.
• Exceções controladas (checked exceptions) são os demais
tipos, desde que não envolvam Error e nem
RuntimeException. São verificadas pelo compilador, ou
seja, devem obrigatoriamente ser tratadas (requisito
“capture ou declare”).
59
Hierarquia das Exceções - Exception
Construtores:
Exception()
Constrói um novo objeto do tipo
Excepetion com mensagem de
detalhe nula.
Exception(String s) Constrói um novo objeto do tipo
Exception com a mensagem de
detalhe s.
Métodos:
Todos os métodos são herdados da superclasse Throwable.
60
Hierarquia das Exceções - Exception
61
Capturando Exceções - try
• Inclui-se em um bloco try o código que pode gerar
uma exceção.
• O bloco try é encerrado quando ocorre a exceção.
Com isso, seu conteúdo expira e a execução é desviada
para o bloco catch correspondente ao tipo de exceção
disparada.
• Uma vez expirado o bloco que lançou a exceção, o
programa não mais poderá retornar a esse ponto de
disparo. Java utiliza o modelo de terminação ao invés
do modelo de retomada.
62
Capturando Exceções - try
• O primeiro passo na construção de um exception handler
é colocar os comandos que podem gerar as exceções
dentro de um bloco try, da seguinte forma:
try
{
comandos Java
}
• Um bloco try deve ser seguido por, pelo menos, um
bloco catch ou um bloco finally (um ou outro, ou
os dois).
63
Capturando Exceções - catch
• O objetivo da cláusula catch (tratador de exceção) é
o de resolver a condição de exceção e retomar o
processamento de forma adequada.
• Um tratador não pode acessar variáveis no escopo do
bloco try porque esse já expirou. As informações
necessárias são passadas no objeto disparado.
• Podem existir zero ou “n” blocos do tipo catch.
• Cada bloco catch indica, através de um único
parâmetro, o tipo de exceção a ser capturado:
try { . . . }
catch (ThrowableClasse1 e) {. . .}
catch (ThrowableClasse2 e) {. . 64.}
O bloco finally
• O bloco finally é opcional. Se existente, ele deve ser
colocado após o último bloco catch.
• finally é utilizado quando se quer liberar recurso e
deixar o estado dos objetos coerente, independentemente
de ter ou não ocorrido uma exceção, evitando a perda de
recurso.
try {
comandos que adquirem recursos do sistema;
}
catch (UmTipoDeException e) {
comandos que manipulam exceções;
}
finally {
comandos que liberam recursos;
}
65
O bloco finally
• Java garante que o bloco finally (se
existir) será executado independentemente
de uma exceção ser ou não lançada no bloco
try.
• Também é garantida a execução do bloco
finally caso o bloco try seja terminado
via os comandos return, break ou
continue.
66
Lançamento de exceção
public class MinhaException extends Exception {
public MinhaException() {
super(“Valores não compatíveis.");
}
}
public int divide(int i, int j) throws MinhaException{
if(i > j)
throw new MinhaException();
return (j – i);
}
67
FIM
68
Download

Orientação a Objetos