• Nenhum resultado encontrado

Orientação a Objetos em Java. LPGII - Java. Orientação a Objetos em Java. Definição de classes. Membros de Classe

N/A
N/A
Protected

Academic year: 2021

Share "Orientação a Objetos em Java. LPGII - Java. Orientação a Objetos em Java. Definição de classes. Membros de Classe"

Copied!
12
0
0

Texto

(1)

LPGII - Java

Orientação a Objetos em Java

Roberto Vedoato [email protected]

Orientação a Objetos em Java 2

Orientação a Objetos em Java

„ Definição de classes „ Criação de objetos „ Herança

„ Polimorfismo „ Ligação Dinâmica

„ Uso de Bibliotecas (packages)

„ Compatibilidade entre classes (casting) „ Operador instance of

„ Modificadores: final, static e abstract „ Interfaces

Orientação a Objetos em Java 3

Definição de classes

„ Classe é o único meio de criar novos tipos de dados „ Formato geral de classe:

class nome {

// declaração de atributos (campos do objeto) //definição de métodos (funções/comportamento) }

Orientação a Objetos em Java 4

Membros de Classe

„ Variáveis de instância

„ definem a estrutura dos objetos derivados da classe „ podem ser de tipo simples ou derivado de outra classe

„ Variáveis de classe (static)

„ compartilhada por todos os objetos da classe „ são alocadas quando a classe é carregada

„ Constantes (final) „ Métodos

„ funções/procedimentos que implementam o comportamento dos objetos da classe;

„ Construtor

(2)

Orientação a Objetos em Java 5

Exemplo

class Circulo {

float xpos, ypos, raio; // variáveis de instância

static int numCirc; // variável de classe

void defOrigem (float x, float y) // métodos { xpos = x; ypos = y ; }

void defRaio ( float r) { raio = r ; }

float calcArea ( )

{ return 3.1416 * raio * raio ; } }

Orientação a Objetos em Java 6

Modificadores de Acesso

„ membros de classe podem ter restrição de acesso

„ private, protected, public

„ estabelecida por atributos de visibilidade

„

public -

sem restrições

„acessível em qualquer classe

„

protected

„acessível na própria classe e nas classes filhas

„

private

„acessível apenas na própria classe

„ classes devem ser declaradas public ou protected

Exemplo

class Circulo {

private float xpos, ypos, raio; // variáveis de instância public void defOrigem (float x, float y) // métodos

{ xpos = x; ypos = y ; }

public void defRaio ( float r)

{ raio = r ; }

public float calcArea ( )

{ return 3.1416 * raio * raio ; } }

Criação de Objetos

„ Objetos são instâncias de classe, alocados

dinamicamente

„ Saõ criados através do operador new que chama o

construtor da classe

„ Construtor aloca espaço de memória para objeto „ Variáveis do tipo classe são ponteiros para objetos da

classe

„ Exemplo

class Circulo { … }; // declara classe

Circulo circ ; // declara variável do tipo da classe circ = new Circulo( ); // cria objeto

(3)

Orientação a Objetos em Java 9

Construtores

„ Servem para criar e iniciar novos objetos

„ Construtor aloca memória (e inicia), não retorna valor „ Valores para iniciar são passados como parâmetros „ Uma classe pode ter um ou mais construtores de

objetos

„ São declarados com o mesmo nome da classe „ Construtores devem ser definidos como public

„ Caso não haja um construtor explícito Java executa o

construtor pai por padrão

Orientação a Objetos em Java 10

Exemplo

class Circulo {

// atributos de instância private float xpos,ypos,raio;

// construtores public Circulo ( )

{ xpos = 0; ypos = 0; radius = 0 ; }

public Circulo (float x, float y, float r) {xpos = x; ypos = y; radius = r ; }

// método

public float calcArea ( )

{ return 3.1416 * raio * raio ; } }

Orientação a Objetos em Java 11

Exercício – Sobrecarga de Construtor

„ Considere a classe abaixo, teste a criação de objetos

com os três construtores, imprima na tela os valores dos atributos e explique os resultados

class Exemplo04 { int x, y;

public Exemplo04(int num1) { x = num1;

y = num1 * 2; }

public Exemplo04(int num1, num2) { x = num1;

y = num2; }

public static void main (String args[ ]) { Exemplo04 obj1 = new Exemplo04(); System.out.println(“x = “ + obj1.x); System.out.println(“y = “ + obj1.y); Exemplo04 obj2 = new Exemplo04(2); System.out.println(“x = “ + obj2.x); System.out.println(“y = “ + obj2.y); Exemplo04 obj3 = new Exemplo04(2,5); System.out.println(“x = “ + obj2.x); System.out.println(“y = “ + obj2.y); }

}

Orientação a Objetos em Java 12

Herança

„ Java implementa herança simples

„ Object é a classe raiz de todas as classes, fornece o

comportamento básico de todas as classes

„ Todas as classes do usuário são obtidas por especialização de

classes do ambiente Java

„ Subclasse herda os componentes da superclasse „ pode adicionar novos componentes;

„ não pode remover definições da superclasse „ pode redefinir métodos

Object classes de

(4)

Orientação a Objetos em Java 13

Definição de Subclasses

„ Superclasse deve ser indicada na declaração da classe

Exemplo: class Frame extends Window { . . . }

„ Superclasse omitida na declaração da classe significa

que a classe é subclasse direta de Object

Exemplo: class Circulo {. . . }

„ Método redefinido em subclasse

„ redeclaração esconde componente herdado

„ super traz o componente herdado de volta ao escopo

Orientação a Objetos em Java 14

Redefinindo Métodos

public class Square { double lado;

public double area ( )

{ return lado*lado ; } }

public class Rectangle extends Square { double altura;

public double area ( ) { return lado*altura ; } } Rectangle Square lado area() altura area()

Chamada a Métodos

„ chamada de método (envio de mensagem)

<nome_objeto> . <nome_método> ( <params> )

„ Exemplo de chamada a método de instância:

class Janela extends Frame {. . . } // define classe

Janela tela1 = new Janela( ); // declara e cria objeto tela1.show( ); // envia mensagem

Chamada a Métodos da Superclasse

„ Quando método é prefixado com super, a procura

inicia na superclasse imediata à classe que contém o método

class Janela extends Frame { void paint( ); { . . . super.paint( ); . . . } } Frame Janela paint() paint()

(5)

Orientação a Objetos em Java 17

Chamada a Métodos da Superclasse

„ Dentro de um método,

this

identifica o próprio

objeto para o qual a mensagem foi enviada

class Cilindro {

float xpos, ypos, raio, altura;

public float calcArea ( )

{ return 3.1416 * raio * raio ; }

public float calcVolume ( )

{ return this.calcArea() * altura ; }

Orientação a Objetos em Java 18

Sobrecarga

class Base{ int i = 1; String teste() { return "Base"; } }

class Derivada extendsBase{ int i = 2; String teste() { return "Derivada"; } } Base int i=1; String teste() Derivada int i=2; String teste()

Orientação a Objetos em Java 19

Exercício

Crie a aplicação TesteHerança. Quais serão os resultados? class TesteHeranca {

public static void main (String arg[]) { Base base = new Base();

Derivada derivada = new Derivada(); Base baseDerivada = new Derivada(); int x = base.i;

int y = derivada.i; int z = baseDerivada.i; String xfun = base.teste(); String yfun = derivada.teste(); String zfun = baseDerivada.teste(); System.out.println("Teste de Herança");

System.out.println(“Atributos = "+x+" - "+y+" - "+z); System.out.println("Metodos = "+xfun+" - "+yfun+" - "+zfun); }

Teste de Herança Atributos = 1 - 2 - 1

Metodos = Base - Derivada - Derivada

Orientação a Objetos em Java 20

Encadeamento de Construtores

„ Um construtor pode chamar outro construtor, isto se

chama “encadeamento de métodos construtores”

„ Caso não haja um construtor explícito Java prove um

construtor padrão

„ Primeiro comando de construtor é uma chamada a

outro construtor

„ da mesma classe por this ( ) „ da superclasse por super ( )

„ Construtor que não contém tal chamada, inclui

implicitamente chamada super ( )

„ uma cadeia completa de construtores é chamada até a raiz

(6)

Orientação a Objetos em Java 21

Exercício

class SuperClasse { SuperClasse() { System.out.println("Construtor SuperClasse"); } void teste() { System.out.println("Metodo SuperClasse");} }

class SubClasse extends SuperClasse { SubClasse() {

System.out.println("Construtor SubClasse"); } void teste() {

System.out.println("Metodo SubClasse"); } }

Orientação a Objetos em Java 22

Exercício

„ Crie a aplicação TesteHerança2. Qual é o resultado?

class TesteHeranca2 {

public static void main (String arg[]) {

System.out.println(“Teste de Heranca 2”); Subclasse sub = new Subclasse();

sub.teste(); }

}

Curiosidades sobre Construção de Objetos

„ Seqüência de execução na chamada de um construtor

„ 1. Inicialização default de campos de dados (0, null, false)

„ 2. Chamada recursiva ao construtor da superclasse (até Object)

„2.1 Inicialização default dos campos de dados da superclasse

(recursivo, subindo a hierarquia)

„2.2 Inicialização explicita dos campos de dados

„2.3 Execução do conteúdo do construtor (a partir de Object,

descendo a hierarquia)

„ 3. Inicialização explícita dos campos de dados „ 4. Execução do conteúdo do construtor

Curiosidades sobre Construção de Objetos

„ Evite chamar métodos locais dentro de construtores

„ Construtor (qualquer um da hierarquia) sempre usa versão sobreposta do método

„ Isto pode trazer resultados inesperados se alguém

estender a sua classe com uma nova implementação do método que

„ Dependa de variáveis da classe estendida

„ Chame métodos em objetos que ainda serão criados (provoca NullPointerException)

„ Dependa de outros métodos sobrepostos

„ Use apenas métodos finais em construtores

„ Métodos declarados com modificador final não podem ser sobrepostos em subclasses

(7)

Orientação a Objetos em Java 25

Destruição de Objetos

„ Java desaloca objetos através do garbage collector „ Referência a objeto pode ser removida atribuindo a

null

„ memória alocada para objeto não é liberada de

imediato

„ Garbage colletor executa em baixa prioridade „ Desejando-se realizar outras ações associadas à

destruição de objetos (exemplo: fechar arquivos): método finalize

„ finalize chamado pelogarbage collector antes do

objeto ser destruído

void finalize ( ) { . . . }

Orientação a Objetos em Java 26 Curiosidades sobre Destruição de Objetos

„ Objetos são destruídos automaticamente pelo garbage

colector quando perdem sua referência, porém, o sistema garbage colector não faz finalização

„ Método finalize(), herdado de Object, teoricamente permite ao programador controlar a finalização de qualquer objeto

„ finalize() não funciona 95% das vezes - não use! Se precisar de finalização, coloque seu código em um bloco try {...} finally {...}

Orientação a Objetos em Java 27

O Uso de Bibliotecas

„ As classes Java são agrupadas em pacotes „ O pacote padrão é: java.lang

„ Classes que pertencem a outros pacotes devem ser

importadas

„ O comando import carrega arquivos .class „ Exemplos de importação

import java.awt.Rectangle; import java.awt.*;

Orientação a Objetos em Java 28

Modificadores de Acesso

„ Acesso dentro do package onde a classe foi declarada

não não private sim sim protected sim sim public sim sim default

Acessível (atributos e métodos) Herança (métodos)

Modificador

„ Acesso fora do package onde a classe foi declarada

não não private sim sim protected sim sim public não não default

Acessível (atributos e métodos) Herança (métodos)

(8)

Orientação a Objetos em Java 29

Modificadores de Acesso - Exercício

„ Crie uma classe pai, ClassePai, com atributos (a,b) e

métodos (alteraA, alteraB), privados (a, alteraA) e

públicos (b, alteraB). Crie uma classe filha,

ClasseFilha, que possua métodos para tentar:

„ Ler o atributo a e o atributo b „ Alterar o atributo a e o atributo b

„ Chamar o método alteraA e o método alteraB

„ Verifique se é verdadeira a afirmação de que métodos

e atributos privados não são herdados.

„ Observação: não utilize super

Orientação a Objetos em Java 30

Compatibilidade de Classes

„ um objeto pode ser atribuído a qualquer objeto da

mesma classe ou de superclasse

Figura f1, f2; f1 = new Figura(); f2 = f1 ;

Retangulo r = new Retangulo (); f1 = r ; // é possível? r = f2; // é possível? Object Figura Retangulo RoundRet Elipse

Compatibilidade de Classes - Exemplo

Retangulo ret = new Retangulo( ); Figura fig = new Figura ( ); Object obj = new Object ( );

RoundRet round = new RoundRet ( ); Elipse eli = new Elipse ( );

fig = eli; obj = round;

ret = fig; // erro de compilação fig = new Retangulo( );

ret = (Retangulo) fig; // casting torna atribuição correta Object Figura Retangulo RoundRet Elipse

Operador

instanceof

„ Operador para investigar a classe de um objeto „ Resulta true se o objeto é da classe ou de subclasse

<objeto> instanceof <classe>

„ Exemplo:

Figura[] fig = new Figura[3]; fig[0] = new Retangulo( ); fig[1] = new Elipse( ); fig[2] = new RoundRect( );

fig[0] instanceof Figura // retorna true fig[2] instanceof Retangulo //retorna true fig[1] instanceof Retangulo //retorna false

(9)

Orientação a Objetos em Java 33

Exercício

„ 1. Escreva uma classe Ponto

„  contém x e y que podem ser definidos em construtor „  métodos getX() e getY() que retornam x e y

„  métodos setX(int) e setY(int) que mudam x e y

„ 2. Escreva uma classe Circulo, que contenha

„  raio inteiro e origem Ponto

„  construtor que define origem e raio „  método que retorna a área

„  método que retorna a circunferência „  use java.lang.Math.PI (Math.PI)

„ 3. Crie um segundo construtor para Circulo que aceite

„  um raio do tipo int e coordenadas x e y

Orientação a Objetos em Java 34

Modificadores

„ Modificadores funcionam como delimitadores de

características

„ Final „ Static „ Abstract

Orientação a Objetos em Java 35

Modificador Final

„ Variáveis final

„ são constantes, não podem ser modificadas „ Exemplo: final double PI = 3.14159265;

„ Métodos final

„ não podem ser redefinidos nas subclasses

„ Classes final

„ não podem ser especializadas

„ todos os métodos são considerados final „ Exemplo:

final float Consulta(String num) { ...}

Orientação a Objetos em Java 36

Modificador Static

„ Uma classe pode conter membros de classe (atributos

e métodos), sendo

„ compartilhados por todos os objetos daquela classe „ alocados quando a classe é carregada

„ Podem ser acessados diretamente, sem necessidade

da existência de um objeto. Exemplos:

„ NomedaClasse.variavelestatica = 12; „ NomedaClasse.metodoestatico;

„ Métodos estáticos podem referenciar apenas métodos

estáticos e não podem referenciar operadores this e

(10)

Orientação a Objetos em Java 37

Modificador Static

„ Exemplo:

class Pessoa {

static int numpessoas = 0; int id; Pessoa () { id = numpessoas; numpessoas++; } ... } Pessoa p1 = new(Pesssoa);

p1.numpessoas++; // mesmo efeito que abaixo Pessoa.numpessoas++;

Orientação a Objetos em Java 38

Static Initializer

„ Para iniciar variáveis de classe, inicializers são

executados automaticamente na carga da classe

„ Exemplo:

static double[] sin256 = new double [256]; static {

for (int i=0; i <256; i ++)

sin256[i] = Math.sin ( i/256*2Math.PI); }

„ Não é função, não tem argumentos

„ Uma classe pode ter vários static initializers, sendo

executados na ordem em que aparecem

Perguntas

„ Porque um método estático não pode referenciar

elementos que não sejam estáticos ?

„ Em que situação um método final pode ser útil ?

Modificador Abstract

„ Indica classe ou método abstrato, com o objetivo de

„ definir generalizacões „ especializar em subclasses

„ classe abstrata: pelo menos um método abstrato „ método abstrato: sem corpo, apenas assinatura

„ Exemplos:

„ public abstract class Number

(superclasse de Integer, Double, Float) „ public abstract int intValue()

„ public abstract float floatValue() „ public abstract double doubleValue()

(11)

Orientação a Objetos em Java 41

Modificador Abstract

„ Classes abstratas

„ definem protocolos para hierarquia, fornecendo apenas modelos de comportamento

„ representam generalizações

„ contém pelo menos um método abstrato

„ Métodos abstratos

„ método sem corpo (sem implementação, apenas assinatura)

„ representa comportamento comum a todas subclasses, mas com distinta implementação em cada subclasse „ métodos abstratos são implementados em subclasses

Orientação a Objetos em Java 42

Modificador Abstract

„ Classe contendo método abstrato não pode ser instanciada „ Construtores e métodos private ou static não podem ser

declarados como abstract

„ Declaração de classes e métodos abstratos:

abstract public class <nome_classe>

{ // pelo menos um método abstrato . . .

}

abstract public <tipo_retorno > <nome_método >( ) ;

Orientação a Objetos em Java 43

Interfaces

„ Classe na qual todos os métodos são abstratos „ coleção de métodos abstratos

„ Simula herança múltipla

„ Constituem-se, estritamente, em modelos de comportamento „ Não podem ser instaciadas

„ Variáveis não podem ser herdadas de uma Interface

„ Todos os métodos de interface devem ser publicos e abstratos „ Uma classe implementa uma interface quando indicada pela

palavra implements

„ Uma classe pode implementar várias interfaces

„ Hierarquia de interface não é relacionada com a hierarquia de

classes

Orientação a Objetos em Java 44

Interfaces

„ Exemplo

public class Printer// classe concreta { . . . }

public interface Copier

{ public void copyDoc (Doc d ) ; }

public interface Fax

{ public void transmitDoc (Doc d ) ; }

Public class MultiFunctionPrinter extends Printer

implements Copier, Fax { public void copyDoc (Doc d) { // implemta concreta }

public void transmitDoc (Doc d) {//implemta concreta } }

(12)

Orientação a Objetos em Java 45

Interfaces

„ Uma classe que implementa uma interface não herda,

apenas promete implementar os métodos definidos na interface (implements)

„ O modificador abstract não deve ser usado na

declaração dos métodos

„ Vantagem do uso de interfaces:

„ definição de protocolos para classes abstratas sem se preocupar com detalhes de implementação

„ compartilhar uma mesma interface com várias classes „ simular herança múltipla

Orientação a Objetos em Java 46

Perguntas

„ Interfaces podem ser especializadas?

„ Interfaces formam hierarquias independentes? „ São derivadas da classe Object?

Classes Abstratas X Interfaces

„ Questões semânticas

„ Quando usar uma ou outra

„ Exemplo:

„ Célula de uma planilha

„ Deve manipular tipos como String, Float, Data, etc... „ Possíveis soluções:

„Definir métodos no ancestral comum

„Criar um novo ancestral e redefinir tipos presentes na célula da

planilha.

Referências

Documentos relacionados