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



Documentos relacionados
Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Classe Abstrata e Interface

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Palavras Reservadas da Linguagem Java

Programação Orientada a Objetos

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Programação por Objectos. Java

Vamos imaginar que queremos projetar um jogo em que haja diferentes personagens:

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação de Computadores - I. Profª Beatriz Profº Israel

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Linguagem de Programação III

Programação Orientada a Objetos em Java

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Linguagem de Programação II Implementação

Herança e Polimorfismo

9 Classes Abstractas e Interfaces

Herança. Prof. Leonardo Barreto Campos 1

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

Programação Orientada a Objeto Java

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objetos II

4 Conceito de Herança

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

ção a Objetos em Java

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Linguagem de Programação III

Lista de Exercícios Nro. 1 Programação Orientada a Objetos - SCC204

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Linguagem de Programação II Implementação

Herança e Classes Abstratas. João Paulo Q. dos Santos

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Linguagem de Programação. Diagrama de classes

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Programação por Objectos. Java

Lição 11 Herança, polimorfismo e interfaces

Laboratório de programação II

Orientação a Objetos (em Java)

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

Notas de Aula 09: Tratamento de exceções

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

POO29004 Programação Orientada a Objetos

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Programação Orientada a Objetos

UNIFEI Disciplina Professor

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Desenvolvimento Web TCC Turma A-1

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.1/26

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

extendsé usado para indicar herança em JAVA

Interfaces e Classes Abstratas

Instituto de Informática Estrutura de Dados II

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Linguagem de Programação IV Introdução

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Introdução à Programação. Encapsulamento e Herança

Programação Orientada a Objetos

Java na Prática. Célio Silva Aula 3

Interface gráfica em Java: Swing e SWT

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Orientação a Objetos (em Java)

Orientação a Objetos

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Introdução ao Java. Prof. Herbert Rausch Fernandes

Avançando em Java com Polimorfismo. Prof.: Hugo Barros

Transcrição:

Orientação a Objetos em Java LPGII - Java Orientação a Objetos em Java Roberto Vedoato vedoato@joinville.udesc.br 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 2 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) Membros de Classe Variáveis de instância definem a estrutura dos objetos derivados da classe podem ser de tipo ples 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 método especial para criar objetos; Orientação a Objetos em Java 3 Orientação a Objetos em Java 4

Exemplo Modificadores de Acesso 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 ; 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 Orientação a Objetos em Java 5 Orientação a Objetos em Java 6 Exemplo Criação de Objetos 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 ; 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 circ.deforigem (1.5, 2.0); // envia mensagem Orientação a Objetos em Java 7 Orientação a Objetos em Java 8

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 9 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 10 Exercício Sobrecarga de Construtor Herança 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 11 Java implementa herança ples 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 biblioteca classes de usuário Orientação a Objetos em Java 12

Definição de Subclasses Redefinindo Métodos Superclasse deve ser indicada na declaração da classe Exemplo: class Frame extends Window {... public class Square { double lado; public double area ( ) Square Superclasse omitida na declaração da classe significa que a classe é subclasse direta de Object Exemplo: class Circulo {... { return lado*lado ; lado area() Método redefinido em subclasse redeclaração esconde componente herdado super traz o componente herdado de volta ao escopo public class Rectangle extends Square { double altura; public double area ( ) { return lado*altura ; Rectangle altura area() Orientação a Objetos em Java 13 Orientação a Objetos em Java 14 Chamada a Métodos Chamada a Métodos da Superclasse chamada de método (envio de mensagem) <nome_objeto>. <nome_método> ( <params> ) Quando método é prefixado com super, a procura inicia na superclasse imediata à classe que contém o método 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 class Janela extends Frame { void paint( ); {... super.paint( );... Frame paint() Janela paint() Orientação a Objetos em Java 15 Orientação a Objetos em Java 16

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 ; Sobrecarga class Base { int i = 1; String teste() { return "Base"; class Derivada extends Base { 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 17 Orientação a Objetos em Java 18 Exercício Encadeamento de Construtores 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 19 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 Orientação a Objetos em Java 20

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"); 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(); void teste() { System.out.println("Metodo SubClasse"); Orientação a Objetos em Java 21 Orientação a Objetos em Java 22 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 Orientação a Objetos em Java 23 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 Orientação a Objetos em Java 24

Destruição de Objetos Curiosidades sobre 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 pelo garbage collector antes do objeto ser destruído void finalize ( ) {... 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 25 Orientação a Objetos em Java 26 O Uso de Bibliotecas Modificadores de Acesso 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 27 Acesso dentro do package onde a classe foi declarada Modificador Herança (métodos) Acessível (atributos e métodos) default public protected private não não Acesso fora do package onde a classe foi declarada Modificador Herança (métodos) Acessível (atributos e métodos) default não não public protected private não não Orientação a Objetos em Java 28

Modificadores de Acesso - Exercício Compatibilidade de Classes 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 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 Orientação a Objetos em Java 29 Orientação a Objetos em Java 30 Compatibilidade de Classes - Exemplo Operador instanceof 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 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 Orientação a Objetos em Java 31 Orientação a Objetos em Java 32

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 Modificadores Modificadores funcionam como delimitadores de características Final Static Abstract Orientação a Objetos em Java 33 Orientação a Objetos em Java 34 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) {... 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 super Orientação a Objetos em Java 35 Orientação a Objetos em Java 36

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++; 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 Orientação a Objetos em Java 37 Orientação a Objetos em Java 38 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() Orientação a Objetos em Java 39 Orientação a Objetos em Java 40

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 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 41 Orientação a Objetos em Java 42 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 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 Orientação a Objetos em Java 43 Orientação a Objetos em Java 44

Interfaces Perguntas 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 ular herança múltipla Interfaces podem ser especializadas? Interfaces formam hierarquias independentes? São derivadas da classe Object? Orientação a Objetos em Java 45 Orientação a Objetos em Java 46 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. Interfaces: Melhor solução Orientação a Objetos em Java 47