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



Documentos relacionados
Técnicas de Programação II

Orientação a Objetos com Java

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

Programação por Objectos. Java

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

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

Reuso com Herança a e Composiçã

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

Programação Orientada a Objetos em Java

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

Sobre o Professor Dr. Sylvio Barbon Junior

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

Análise de Programação

Java 2 Standard Edition Como criar classes e objetos

Análise e Projeto Orientados por Objetos

Noções sobre Objetos e Classes

Keeper of Knowledge. Capítulo 2 Classes em Java

Linguagem de Programação III

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Java. Marcio de Carvalho Victorino

Herança. Alberto Costa Neto DComp - UFS

Programação por Objectos. Java

Capítulo 4. Packages e interfaces

Encapsulamento de Dados

Programação Orientada a Objetos (DPADF 0063)

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

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

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Projeto de Software Orientado a Objeto

Módulo 06 Desenho de Classes

Prof. Jhonatan Fernando

Classes Abstratas e Interfaces

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

Orientação a Objetos e a Linguagem Java

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

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

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

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

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

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

Padrão Básico de Projeto: Interfaces e Polimorfismo

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

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. Herança

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

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

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

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

Tópicos da Aula. Classes e Objetos. Classe Pública em Java. Classes em Java. Assinatura de Métodos. Corpo de Classes e Métodos. Conceitos de classe

THREADS EM JAVA. George Gomes Cabral

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

Classes, Superclasses e Subclasses

Programação Orientada a Objetos. Encapsulamento

Threads e Concorrência em Java (Material de Apoio)

Implementando uma Classe e Criando Objetos a partir dela

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

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

Programação Orientada a Objetos em java. Polimorfismo

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

CURSO DE PROGRAMAÇÃO EM JAVA

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

Aula 3 Objeto atual com referencia THIS e Classes com Herança

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

Capítulo 8. Introdução UML

SISTEMAS DISTRIBUÍDOS

Exercícios de Revisão Java Básico

Programação Orientada a Objetos (DPADF 0063)

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

Programação Orientada por Objetos

Capítulo 5 Reuso de Classes

Prototype, um Design Patterns de Criação

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

DEFINIÇÃO DE MÉTODOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Java TM e o Modelo de Objetos

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

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

Padrões de Projeto. Singleton

2 Orientação a objetos na prática

Programação Orientada a Objetos C++

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tópicos em Engenharia de Computação

Polimorfismo. Prof. Leonardo Barreto Campos 1

Orientação a Objetos

Curso Java Starter. 1

Documentação Usando o Javadoc

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

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

Java Threads. Introdução

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

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

UNIVERSIDADE FEDERAL DO PARANÁ

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

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

A Linguagem Java. Alberto Costa Neto DComp - UFS

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

Guia de Fatores de Qualidade de OO e Java

Transcrição:

Módulo 07 Características Avançadas de Classes Última Atualização: 15/06/2010 1

Objetivos Descrever variáveis, métodos e iniciadores static Descrever a semântica do modificador final em classes, métodos e variáveis. Explicar como e quando utilizar classes e métodos abstract Explicar como e quando utilizar uma Interface 2

A Palavra Reservada static A palavra reservada static é utilizada como um modificador em variáveis, métodos e classes aninhadas (inner classes). A palavra reservada static declara que o atributo ou método é associado com a classe como um todo ao invés de ser associado com uma instância em particular da classe. Portanto, membros static são freqüentemente conhecidos como membros da classe, atributos da classe ou métodos da classe 3

Atributos da Classe São compartilhados por todas as instâncias de uma classe public class Contador; public static int contador; private int numeroidentificacao; public Contador() { contador++; // Uma instância consegue acessar o atributo da classe numeroidentificacao = contador; 4

Acessando Atributos Estáticos Podem ser acessados fora dos limites da classe, sem uma instância da classe (se declaradas com o modificador de acesso adequado). 1 public class TestaContador { 2 public static void main (String [ ] args) { 3 Contador.contador++; // Variável contador com modificador de acesso adequado. 4 Contador c = new Contador(); 5 c.contador++; // É possível acessar um membro estático a partir de uma instância da classe 6 System.out.println(Contador.contador); // Qual o valor exibido? 7 8 5

Acessando Métodos Estáticos Podemos chamar um método estático sem uma instância da classe a qual o método pertence. 1 public class Contador2 { 2 private int numeroidentificao; 3 private static int contador; 4 5 public static int getcontador() { // Veja forma de acesso, via método, no próximo slide 6 return contador; 7 8 9 public Contador2() { 10 contador++; 11 numeroidentificacao = contador; 12 13 6

Acessando Métodos Estáticos (Cont.) 1 public class TestaContador2 { 2 public static void main(string[] args) { 3 System.out.println( O valor do contador é +Contador2.getContador()); 5 Contador2 c = new Contador2(); // Segunda maneira de acesso 6 System.out.println( "O valor do contador é " + c.getcontador()); 8 9 A saída do programa TestaContador2: O valor do contador é 0 O valor do contador é 1 7

Iniciadores Estáticos Uma classe pode conter código em um bloco estático que fica fora do conteúdo de um método. Blocos estáticos executam somente uma vez, quando a classe é carregada. Um bloco estático é normalmente utilizado para iniciar atributos estáticos de uma classe. 8

Iniciadores Estáticos 1 public class TestaIniciadorEstatico { 2 public static int contador; 3 static { // Início do bloco estático. Executado no momento de carregamento da classe 4 // Lê o argumento via linha de comando (Discutido novamente no capítulo 9) 4 contador= Integer.getInteger("parametroLinhaComando"); 5 6 7 public static void main(string[] args) { 8 System.out.println(TestaIniciadorEstatico.contador); 9 10 A saída do programa TestaIniciadorEstatico é: java -DparametroLinhaComando=5 TestaIniciadorEstatico contador= 5 9

O Design Pattern Singleton 10

Implementando o Design Pattern Singleton O código Singleton : 1 package transportadora.dominio; 2 3 public class Companhia { 4 private static Companhia instancia = new Companhia(); 5 private String nome; 6 private Veiculo[] frota; 7 8 public static Companhia getcompanhia() { 9 return instancia; 10 11 12 private Companhia() {... // Repare que o construtor deve ser private!!! 13 14 // mais código... 15 11

Implementando o Design Pattern Singleton (Cont.) Código que utiliza o Singleton: 1 package transportadora.relatorios; 2 3 import transportadora.dominio.*; 4 5 public class RelatorioNecessidadeCombustivel { 6 public void gerarelatório() { 7 Companhia c = Companhia.getCompanhia(); 8 // use o objeto do tipo Companhia para recuperar a frota de veículos 9... 10 11 12

A Palavra Reservada final Não podemos especializar (criar uma subclasse) declarada como final. Não podemos sobreescrever um método final. Uma variável declarada com final se torna uma constante. Podemos iniciar o conteúdo de uma variável final apenas uma vez, mas a atribuição não necessita ser feita no momento da declaração (Variável final não iniciada - blank final variable. ) 13

A Palavra Reservada final Uma variável de classe final, não iniciada deve ser iniciada no construtor da classe. Uma variável local final, não iniciada deve ser iniciada no conteúdo do método antes de ser utilizada. Uma variável de classe definida como static final deve ser iniciada explicitamente ou dentro de um bloco estático. Não pode ser iniciada dentro de um construtor. Uma variável de referência final não pode apontar para outros objetos. 14

Constantes: public class Matematica { private static final double PI=3.1213;... // mais declarações Variáveis final Variável de classe final não iniciada: public class Cliente { private final long idcliente; public Cliente() { idcliente = criaid(); public long getid() { return idcliente; private long criaid() { return... // gera um novo Identificador... // mais declarações 15

Classes Abstratas: Cenário Código inicial da frota: 1 public class TransportadoraPrincipal { 2 public static void main(string[] args) { 3 Companhia c = Companhia.getCompanhia(); 4 5 // preenche a companhia com uma frota de veículos 6 c.adicionarveiculo(new Caminhao(10000.0) ); 7 c.adicionarveiculo(new Caminhao(15000.0) ); 8 c.adicionarveiculo(new Balsa(500000.0) ); 9 c.adicionarveiculo(new Caminhao(9500.0) ); 10 c.adicionarveiculo(new Balsa(750000.0) ); 11 12 RelatorioNecessidadeCombustivel relatorio = new RelatorioNecessidadeCombustivel(); 13 relatorio.gerartexto(); 14 15 16

Classes Abstratas: Cenário Código de RelatorioNecessidadeCombustivel: 1 public class RelatorioNecessidadeCombustivel { 2 public void gerartexto( ) { 3 Companhia c = Companhia.getCompanhia(); 4 Veiculo v; 5 double combustivel; 6 double total_combustivel = 0.0; 7 8 for (int i=0; i < c.gettamanhofrota(); i++ ) { 9 v = c.getveiculo(i); 10 11 // Cálcula o combustível necessário para esta viagem 12 combustivel = v.calculadistanciaviagem() / v.calculaeficienciacombustivel(); 13 14 System.out.println(" Veículo " + v.getnome() + " necessita de " + combustivel + " litros de combustível."); 16 total_combustivel += combustivel; 17 18 output.println("total de combustível necessário é " + total_combustivel + " litros."); 19 20 17

Classes Abstratas: Solução Uma classe abstrata modela uma classe de objetos onde a implementação não é conhecida, mas é implementada por subclasses concretas. 18

Classes Abstratas: Solução 1 public abstract class Veiculo { 2 public abstract double calculaeficienciacombustivel(); 3 public abstract double calculadistanciaviagem(); 4 1 public class Caminhao extends Veiculo { 2 public Caminhao(double cargamaxima) {... 3 4 public double calculaeficienciacombustivel() { 5 /* Cálculo do consumo de combustível do caminhão para uma dada carga */ 6 7 public double calculadistanciaviagem() { 8 /* Cálculo da distância desta viagem */ 9 10 1 public class Balsa extends Veiculo { 2 public Balsa(double cargamaxiam) {... 3 4 public double calculaeficienciacombustivel() { 5 /* Cálculo a eficiência do combustível de uma balsa */ 6 7 public double calculadistanciaviagem() { 8 /* Cálculo a distância desta viagem rio a fora */ 9 19

Interfaces Uma interface pública é um contrato entre o código cliente e a classe que implementa a interface. uma Interface Java é uma declaração formal deste contrato no qual os métodos não contém implementação. Diversas classes não relacionadas podem implementar a mesma interface. Uma classe pode implementar várias interfaces não relacionadas. 20

Interfaces(Cont.) Sintaxe de uma classe Java: <modificador> class <nome> [extends <superclasse>] [implements <interface>, [<interface>]*] { <declarações>* 21

Exemplo de Interface public interface Voador { public void decolar(); public void aterrisar(); public void voar(); public class Aviao implements Voador { public void decolar() { // Acelera até decolar public void aterrisar() { // Desacelere public void voar() { // Mantenha os motores em funcionamento 22

Exemplo de Interface 23

Exemplo de Interface 24

Exemplo de Interface public class Passaro extends Animal implements Voador { public void decolar() { /* implementação da decolagem */ public void aterrisar() { /* implementação da aterrisagem */ public void voar() { /* Implementação do vôo */ public void construirninho() { /* Constrói ninho */ public void porovos() { /* Põe ovos */ public void comer() { /* Sobreescrita do método comer */ 25

Exemplo de Interface 26

Exemplo de Interface(Cont.) public class Aeroporto { public static void main( String[] args) { Aeroporto guarulhos = new Aeroporto(); Helicoptero helicoptero = new Helicoptero(); Planador planador = new Planador(); // Superman é um singleton Voador s = Superhomem.getSupehomem(); guarulhos.fornecepermissaoaterrisagem(helicoptero); guarulhos.fornecepermissaoaterrisagem(planador); guarulhos.fornecepermissaoaterrisagem(s); private void fornecepermissaoaterrisagem(voador f) { f.aterrisar(); 27

Exemplo Com Múltiplas Interfaces 28

Exemplo Com Múltiplas Interfaces public class PortoSantos { public static void main(string[] args) { PortoSantos porto = new PortoSantos(); Balsa balsa = new Balsa(); Planador planador = new Planador(); porto.fornecepermissaoatracar(balsa); porto.fornecepermissaoatracar(planador); private void fornecepermissaoatracar(navegador s) { s.atracar(); 29

Quando Usar Interfaces? Declaração de métodos que uma ou mais classes devem implementar Exibir a interface de programação de um objeto sem revelar o conteúdo da classe. Capturar semelhança entre classes não relacionadas sem a necessidade de um relacionamento de classes. Simular herança múltipla declarando uma classe que implementa várias interfaces 30

O que é preciso saber de interfaces para a prova SCJP? Todos os métodos de uma interface são implicitamente public e abstract Você precisa saber que ambas as definições abaixo são idênticas: public abstract interface Rolavel { public interface Rolavel { 31

O que é preciso saber de interfaces para a prova SCJP? Você precisa saber que todos os métodos de interfaces são public e abstract independente como forem escritos na definição da interface. Assim sendo, todos os métodos abaixo são válidos e idênticos: void rolar(); public void rolar(); abstract void rolar(); public abstract void rolar(); abstract public void rolar(); 32

O que é preciso saber de interfaces para a prova SCJP? As declarações abaixo não compilam: final void rolar() // final e abstract nunca podem ser usadas em conjunto static void rolar() // interfaces definem métodos de instância private void rolar() // métodos de uma interface são sempre públicos protected void rolar(); // mesmo que acima 33

O que é preciso saber de interfaces para a prova SCJP? Interfaces podem ter constantes, que são sempre public static final A declaração de uma constante em uma interface com public static e final é opcional e possível em qualquer combinação Interfaces podem herdar de uma ou mais interfaces Interfaces não podem herdar de uma classe, ou implementar uma interface ou classe 34

Princípios de Design Programar para uma Interface e não para uma implementação o Em Java, interface pode ser uma classe abstrata ou uma interface Java. Favorecer a composição em detrimento da herança Encapsular o que varia o Base do design pattern Strategy 35

Programar para uma Interface 36

Favorecimento da Composição Sobre a Herança 37

Encapsular o que Varia 38

O Design Pattern Strategy Definir uma família de algoritmos, encapsular cada um e tornás-lo intercambiáveis. Strategy permite que algoritmos mudem independentemente dos clientes que os utilizam. 39

O Design Pattern Strategy 40

Perguntas? 41