15-09-2009. Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido



Documentos relacionados
Encapsulamento de Dados

POO Programação Orientada a Objetos. Classes em Java

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Análise de Programação

Implementação de Classe e Auto-Relacionamento em Java

REVISÃO PROGRAMAÇÃO ORIENTADA A OBJETOS UTILIZANDO JAVA

Projeto de Software Orientado a Objeto

Orientação a Objetos com Java

Unidade IV: Ponteiros, Referências e Arrays

Programação Orientada a Objetos. Encapsulamento

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Programação Orientada a Objetos em Java

Desenvolvimento OO com Java Orientação a objetos básica

Técnicas de Programação II

Sobre o Professor Dr. Sylvio Barbon Junior

Programação por Objectos. Java

Módulo 07 Características Avançadas de Classes

Noções sobre Objetos e Classes

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Implementando uma Classe e Criando Objetos a partir dela

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

A Introdução à Programação Orientada a Objetos. Programação e Sistemas de Informação

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Java. Marcio de Carvalho Victorino

Capítulo 5 Reuso de Classes

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Modificador static e Pacotes. Alberto Costa Neto DComp - UFS

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Introdução a Java. Hélder Nunes

Prof. Jhonatan Fernando

Programação por Objectos. Java

Programação com Acesso a BD. Programação com OO Acesso em Java

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

Linguagem de Programação III

Programação por Objectos. Java

Módulo 06 Desenho de Classes

Algoritmos e Programação II. Sobrecarga

Exercícios de Revisão Java Básico

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

2 Orientação a objetos na prática

Guia de Fatores de Qualidade de OO e Java

Programação Orientada a Objetos C ++ 4 Conceitos de OO em Java Classes e Objetos

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

Java 2 Standard Edition Como criar classes e objetos

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

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

Análise e Projeto Orientados por Objetos

Orientação a Objetos e a Linguagem Java

Simulado de Linguagem de Programação Java

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

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

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Herança. Alberto Costa Neto DComp - UFS

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Programação Orientada a Objetos em Java. Herança

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Programação Orientada a Objetos C++

BSI UFRPE Prof. Gustavo Callou

Linguagem de Programação I. Orientação a Objetos em Java

ESTRUTURA BÁSICA DE UM PROGRAMA JAVA

Material de Apoio 5. int getres() { return res; O que estas classes possuem em comum? 1) 2) 3)

Programação Orientada a Objetos em java. Polimorfismo

Capítulo 4. Packages e interfaces

FBV - Linguagem de Programação II. Um pouco sobre Java

Prof. Esp. Adriano Carvalho

Orientação a Objetos

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Reuso com Herança a e Composiçã

3 Classes e instanciação de objectos (em Java)

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

NetBeans. Conhecendo um pouco da IDE

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Projeto de sistemas em Java. Algoritmos e Programação I. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario

Caso não exista nenhum listener registado no objecto que gera o evento, este não terá qualquer efeito.

Capítulo 3. Programação por objectos em Java

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Herança. Algoritmos e Programação II. Aula 5 Herança

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

CURSO DE PROGRAMAÇÃO EM JAVA

A Linguagem Java. Alberto Costa Neto DComp - UFS

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

CONVENÇÃO DE CÓDIGO JAVA

Modulo IIa Extra: Object

insfcanceof new public switch transient while byte continue extends for int null

Programação Orientada a Objetos. Pacotes e CLASSPATH: Definifdo e Usando Pacotes

Programação Orientada a Objeto

Transcrição:

PARTE III: Java e OO - detalhes Membros de classe e instâncias Pacotes Visibilidade Classes aninhadas Membros de classe e de instância De classe Static Método não necessita de objeto para ser chamado. Atributo existe um só cópia para todos os objetos da classe. De instância não static necessita de objeto para ser chamado. há uma cópia para cada objeto instanciado. 1 2 Exercício public class A { public static int x = 7; public int y = 3; public static int somar(int v) { return x + v; public int multiplicar() { return x * y; a. Quais são os atributos e métodos de classe? b. Quais são os atributos e métodos de instância? Exemplo 1: método 3. public void imprimir() { 7. 8. public static void main(string[] args) { 9. imprimir(); 10. 11. ERRO! non-static method imprimir() cannot be referenced from static context Fonte http://java.sun.com/docs/books/tutorial/java/javaoo/qande/creating-questions.html 3 4 Exemplo 1 corrigido 3. public static void imprimir() { 7. 8. public static void main(string[] args) { 9. imprimir(); 10. 11. Exemplo 1 corrigido versão 2 3. public void imprimir() { 7. 8. public static void main(string[] args) { 9. ImprimirStrings is = new ImprimirStrings(); 10. is.imprimir() 11. 12. 5 6 1

Exemplo 2: atributo 3. public static void imprimir() { 7. System.out.println(str); 8. 9. public static void main(string[] args) { 10. imprimir(); 11. 12. Exemplo 2 corrigido 3. public void imprimir() { 7. System.out.println(str); 8. 9. public static void main(string[] args) { 10. ImprimirStrings obj = new ImprimirStrings(); 11. obj.imprimir(); 12. 13. ERRO! non-static variable str cannot be referenced from static context 7 8 Exemplo 3: métodos e atributos de utilidade 1.public class Circle { 2. public static double calculaarea(double raio) { 3. return Math.PI * ( raio * raio ); 4. 5. 6.// Dentro de um método qualquer... 7.// utilizamos o nome da classe na chamada 8. double circlearea = Circle.calculaArea(5); 9. Exercícios Da apostila: 09 (num autos feitos) 10 (num instâncias de sinaleiros) JAVARepositorio/JRevisaoOO/JExercSinaleiroInstanciasSol Não abusar do uso de métodos static se não criamos programas sem objetos 9 10 PARTE III: Java e OO - detalhes Membros de classe e instâncias Pacotes Visibilidade Classes aninhadas Pacotes em Java Declaração em Java: Deve ser a 1ª declaração do arq. Sintaxe: package <nome>; Exemplos: package poligono; package primitiva; 11 Importar pacotes import primitiva.*; Somente as classes utilizadas no programa são carregadas pela JVM import primitiva.ponto; 12 2

Pacotes: packages Pacotes: representação UML É uma coleção de classes Melhorar organização do código Reduzir conflito de nomes Convenção Sun edu.utfpr.<nome do pacote> edu.utfpr.dainf.<nome do pacote> com.uol.<nome do pacote> Nome do pacote Relação 13 14 Pacotes em Java: conflito de nomes Pacotes: organização do código Dois pacotes com classes ponto package primitiva class Ponto... package base class Ponto... Para distingui-las: primitiva.ponto base.ponto 15 Diretório dos fontes <proj>/src/ poligono Regular.java Hexagono.java Pentagono.java primitiva Linha.java Ponto.java > cd <proj>/src Diretório.class <proj>/build/classes/ poligono Regular.class Hexagono.class Pentagono.class primitiva Linha.class Ponto.class > javac poligono/*.java primitiva/*.java -d../build/classes opção d: compilador cria diretórios com base na declaração package; o 16 diretório../build/classes deve existir!!! PARTE III: Java e OO - detalhes Visibilidade classes, métodos e atributos Membros de classe e instâncias Pacotes Visibilidade Classes aninhadas Níveis de controle de acesso - Privado # Protegido + Público ~ De Pacote (default) 17 18 3

Visibilidade privada Elemento Classe top-level Classe aninhada Método Atributo Aplica-se NÃO - Membros privados somente podem ser acessados na mesma classe. Assim, classes derivadas não podem acessar membros privados da classe base Membros private de uma classe base não são herdados pelas classes derivadas Membros = métodos/atributos 19 Visibilidade atributos privados Pessoa -nome: String josé:pessoa Nome= José class Pessoa { private String nome; public Pessoa(String nome) { this.nome = nome; void copiarnome(pessoa outra) { nome = outra.nome; joão:pessoa Nome= João O objeto José pode acessar o atributo privado de João? 20 Visibilidade método privado Aluno Pessoa -nome: String -anonasc: int -calcidade: int -curso: String :Aluno curso= informatica Nome has private access in Pessoa O objeto aluno pode ver os atributos nome e anonasc, e o método calcidade de Pessoa? class Main { public static void main(string args[]) { Aluno a = new Aluno(); a.curso = informatica ; a.nome = Jairo ; a.anonasc = 1975; int i = a.calcidade(); Cannot find method Visibilidade protegida Elemento Classe top-level Classe aninhada Método Atributo Aplica-se NÃO # Membros protegidos podem ser acessados por classes do mesmo pacote Membros protegidos são herdados; assim classes derivadas podem acessá-los (mesmo se estiverem em pacotes diferentes). 21 22 Visibilidade protegida (exemplo) Aluno Pessoa #nome: String #anonasc: int #calcidade: int #curso: String :Aluno curso= informatica OK O objeto aluno pode ver os atributos nome e anonasc, e o método calcidade de Pessoa? class Main { public static void main(string args[]) { Aluno a = new Aluno(); a.curso = informatica ; a.nome = Jairo ; a.anonasc = 1975; int i = a.calcidade(); OK 23 Visibilidade default Elemento Classe top-level Classe aninhada Método Atributo Aplica-se ~ É o valor assumido, quando nada é especificado Membros sem modificadores podem ser acessados por classes do mesmo pacote Membros default são herdados; assim classes derivadas podem acessá-los (somente se estiverem no mesmo pacote diferente do protegido). 24 4

Visibilidade pública Elemento Classe Classe aninhada Método Atributo Aplica-se + Todas as classes podem visualizar atributos, métodos e classes públicas, independente do pacote onde estejam. Obs: somente uma classe pública é permitida por arquivo fonte.java VISIBILIDADE: quadro resumo Privado private Protegido protected Pacote default Público public Classe* NÃO NÃO Aninhada Método Atributo * classes não aninhadas 25 26 Exercícios Apostila 11 JRevisaoOO\JExercSinaleiroConstrutoraPrivate 12 JRevisaoOO\JExercPacotes 13 JRevisaoOO\JCadastroUsuario PARTE III: Java e OO - detalhes Membros de classe e instâncias Pacotes Visibilidade Classes aninhadas 27 28 Classes aninhadas Uma classe é definida como membro de outra classe CLASSE EXTERNA CLASSE ANINHADA Exemplo public class JLinha { private static int totlinha=0; private int idlinha; protected Ponto pt1; protected Ponto pt2; public JLinha(int x1, int y1, int x2, int y2) { idlinha = ++totlinha; pt1 = new Ponto(x1, y1); pt2 = new Ponto(x2, y2); public JLinha() { idlinha = ++totlinha; public class Ponto { protected int x; protected int y; protected Ponto(int x, int y) { this.x = x; this.y = y; protected String pontostr() { return "(" + x + ", " + y + ")"; 29 protected String pontostrcomid(){ return "Linha " + idlinha + " " + pontostr(); Tem acesso aos membros da classe JLinha 30 5

Instanciação de classes aninhadas Há duas formas como mostram os slides a seguir: 1. a construtora de Jlinha instancia os pontos 2. instancia-se Jlinha para depois instanciar os pontos Instanciação: forma 1 public class JMain { public static void main(string args[]) { // Forma 1: a construtora de linha instancia // os dois pontos JLinha l1 = new JLinha(5, 15, 7, 17); System.out.println(l1.pt1.pontoStr() + " " + l1.pt2.pontostr()); Observar que o acesso aos pontos se faz pela linha 31 32 JRevisaoOO\JLinhaClasseAninhada Instanciação: forma 2 Objetos de classes internas public class JMain { public static void main(string args[]) { // Forma 2: instancia-se linha e depois os pontos JLinha l2 = new JLinha(); JLinha.Ponto p1 = l2.new Ponto(10, 10); JLinha.Ponto p2 = l2.new Ponto(20, 20); l2.pt1 = p1; l2.pt2 = p2; System.out.println(l2.pt1.pontoStrComId() + " " + l2.pt2.pontostrcomid()); Observar que a classe Ponto só existe no contexto da JLinha!!! Importante!!! Pontos só podem existir se houver uma linha Ponto 1 obj. interno Linha = objeto externo Ponto 2 obj. interno JRevisaoOO\JLinhaClasseAninhada 33 34 Exercícios Baixe o código das classes aninhadas disponível em http://www.dainf.ct.utfpr.edu.br/~tacla/javarepositorio/jrevisaooo/jlinhaclasseaninhada/ Observe a existência do JLinha$Ponto.class Desaninhe a classe Ponto de JLinha preservando os mesmos comportamentos Representanção em UML JLinha -totlinha:int=0 +JLinha(x:int, y:int, x2:int, y2:int) +linhatostring():string Agregação por composição 1 Os dois exemplos Ponto aninhado e não aninhado são representados de forma similar em UML. 2 Ponto #x: int #y: int #Ponto(x:int, y:int) #pontotostring():string 35 36 6

Exercícios: interface e aninhamento Fazer exercício 14 da apostila (transcrito abaixo) Utilize uma classe interna que implemente a interface Iteratore permita navegar num vetor de 10 inteiros aleatórios armazenados em um atributo de instância da classe externa. O método next() do Iteratordeve retornar somente os valores ímpares armazenados no vetor. Por exemplo, se no vetor existirem os seguintes números: [100, 39, 88, 13, 4, 4, 2, 5, 94, 32], a sequência de invocações de next() produz: next() -> 39 next() -> 13 next() -> 5 next() -> throw NoSuchElementExecption O métod hasnext() verifica se há um ímpar em alguma posição além das já pesquisadas. A implementação do método remove() é opcional e, caso não seja feita, deve retornar uma instância de UnsupportedOperationException(com throw) Solução em \JRevisaoOO\JAninhadaIteratorSol 37 Classe Aninhada Estática 1.public class JRadar { 2. private int velocidademaxima; 3. 4. public JRadar(int v) { 5. velocidademaxima = v; 6. 7. public Boolean multar(int v) { 8. // multar return true qdo a velocidade detectada pelo 9. // radar excede em 10% a velocidade maxima; 10. if (v > (velocidademaxima * 1.1)) 11. return true; 12. else 13. return false; 14. 15. public static class TesteJRadar{ 16. public static void main(string args[]) { 17. JRadar r[] = {new JRadar(40), new JRadar(60), new JRadar(110); 18. int v[] = {44, 67, 110; 19. Boolean res[]={false, true, false; 20. for (int i=0; i < r.length; i++) { 21. if (r[i].multar(v[i]) == res[i]) 22. System.out.println("OK"); 23. else 24. System.out.println("ERRO: radar " + i); 25. 26. 27. 28. 38 RepositorioJAVA\JRevisaoOO\JExemClasseAninhadaEstaticaRadar Classe aninhada estática Observe os.class gerados por javac JRadar.class JRadar$TesteJRadar.class Para executar na linha de comando java JRadar$TesteJRadar Exercícios Fazer exercício 15 da apostila (transcrito abaixo) Utilize uma classe aninhada estática para testar uma classe externa que calcula o dígito verificador de um código composto por três dígitos da seguinte forma: 829 => 8*4+ 2*3+ 9*2= 56=> 56 %10= 6 (dígito verificador). O teste deve ser feito para dois códigos cujos dígitos verificadores são conhecidos. Solução JRevisaoOO\JExerClasseAninhadaEstaticaDVSol 39 40 Por que utilizar classes aninhadas? Quando a classe interna for utilizada somente pela externa Aumenta encapsulamento Se as classes aninhadas forem pequenas Aumenta legibilidade código mais próximo da onde é utilizado Tipos de classe aninhada 1. class Externa { 2.... 3. class Interna { 4.... 5. 6. 7. class static AninhadaEstatica { 8.... 9. 10. 41 42 7

Interna x Aninhada static Classes internas anônimas Necessário instanciar objeto da classe externa? Classe interna tem acesso a atributos de instância e métodos da classe externa? Um objeto da classe interna tem implicitamente uma referência ao objeto da sua classe externa? Interna (não static) Aninhada Static NÃO NÃO NÃO (não há objeto) 1.Button b = new Button("Ok"); 2.b.addActionListener( 3. new ActionListener() { 4. public void actionperformed(actionevent e) { 5. tratarok(); 6. 7. 8.); As linhas [3, 7] instanciam um objeto da classe ActionListener e sobrescrevem o método actionperformed. Este objeto é passado como argumento do método addactionlistener na linha 2. ActionListener é uma classe interface. 43 44 Classes internas anônimas (e.g. 2) 1. public static void main(string args[]) { 2. java.awt.eventqueue.invokelater( 3. new Runnable() { 4. public void run() { 5. new IUEditor().setVisible(true); 6. 7. 8. ); 9. Somente podemos instanciar classes anônimas que estendemoutra classe ou que implementemoutra classe (não as duas coisas ao mesmo tempo e nem mais de uma classe de interface). Por exemplo, a classe Runnable é de interface e, neste exemplo, é instanciada. 45 8