Baixe o app para aproveitar ainda mais
Prévia do material em texto
Atributos e métodos finais Apresentação Na programação de computadores, são utilizadas classes de objetos, que armazenam determinadas características e comportamentos — em outras palavras, atributos e métodos. Os atributos são as propriedades dos objetos computacionais. Já os métodos são as ações ou funções que esse objeto pode realizar. Por exemplo, se um objeto fosse uma motocicleta, atributos possíveis seriam seu modelo, ano de fabricação, quantidade de cilindradas e cor. Os métodos da motocicleta seriam andar ou correr, etc. Os atributos e métodos podem ser sobrepostos ou herdados entre objetos, o que é uma função útil em muitas aplicações. Nos casos em que não se quer que isso ocorra, na linguagem de programação Java é possível utilizar a palavra-chave “final”. Atributos e métodos finais são utilizados para garantir que determinada implementação não tenha modificações, isto é, para garantir a sua imutabilidade. Nesta Unidade de Aprendizagem, você vai estudar atributos e métodos finais, assim como sua aplicação. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Reconhecer método final.• Definir atributo final.• Construir uma aplicação utilizando atributos e métodos finais.• Infográfico Quando atributos ou métodos são declarados como finais, eles passam a ser imutáveis. Isso quer dizer que eles deixam de permitir herança entre as classes de uma aplicação. No caso específico dos atributos, se você tentar modificá-los depois de a declaração da classe ser inicializada, o compilador gerará um erro como “não pode atribuir valor ao atributo final”. E, se tentar acessar o valor de um atributo final antes que ele seja inicializado, a mensagem de erro será algo como “o atributo pode não ter sido inicializado”. Essa funcionalidade é muito utilizada para garantir que o comportamento das classes não seja modificado em diferentes tipos de dados, como Integer, Double e Math. Neste Infográfico, você vai ver um exemplo de utilização de atributo e método final em uma mesma classe. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/e21b4eed-0439-4fa4-bbdc-7ed436ad549e/410a5d9d-fa8b-4c5e-b605-7d01ecfe8284.png Conteúdo do livro Qualquer que seja a razão, em Java, com o uso da palavra-chave "final", é fácil impedir que um método seja sobreposto ou uma classe seja herdada. Acompanhe um trecho do livro Java para iniciantes, que traz uma abordagem sobre o uso da palavra-chave "final". O livro servirá de base teórica para esta Unidade de Aprendizagem. Inicie o estudo pelo tópico "Usando final" e finalize em "Pergunte ao especialista". Boa leitura. Atualizado para JAVA SE 8 (JDK 8) Java para iniciantes Crie, compile e execute programas Java rapidamente Herbert Schildt Catalogação na publicação: Poliana Sanchez de Araujo – CRB 10/2094 S334j Schildt, Herbert. Java para iniciantes : crie, compile e execute programas Java rapidamente [recurso eletrônico] / Herbert Schildt ; tradução: Aldir José Coelho Corrêa da Silva ; revisão técnica: Maria Lúcia Blanck Lisbôa. – 6. ed. – Porto Alegre : Bookman, 2015. Editado como livro impresso em 2015. ISBN 978-85-8260-337-6 1. Linguagem de programação - Java. I. Título. CDU 004.438Java O autor O autor de best-sellers Herbert Schildt escreve incansavelmente sobre programação há quase três décadas e é uma das principais autoridades na linguagem Java. Seus livros de programação venderam milhões de cópias no mundo inteiro e foram tra- duzidos para diversos idiomas. É autor de vários livros sobre Java, incluindo Java: The Complete Reference, Herb Schildt’s Java Programming Cookbook e Swing: A Beginner’s Guide. Ele também escreveu sobre C, C++ e C#. Embora tenha interesse em todas as áreas da computação, seu foco principal são as linguagens de progra- mação, incluindo compiladores, interpretadores e linguagens de controle robótico. Também tem grande interesse na padronização de linguagens. Schildt tem gradua- ção e pós-graduação pela Universidade de Illinois. Seu site é www.HerbSchildt.com. O editor técnico Dr. Danny Coward trabalhou em todas as edições da plataforma Java. Ele conduziu a definição dos Java Servlets para a primeira versão da plataforma Java EE e para além dela, os serviços web para a plataforma Java ME, e a estratégia e planejamento de Java SE 7. Fundou a tecnologia JavaFX e, mais recentemente, projetou o maior acréscimo feito ao padrão Java EE 7, a API Java WebSocket. Da codificação em Java ao projeto de APIs com especialistas da indústria e ao trabalho por vários anos como executivo do Java Community Process, ele adquiriu uma perspectiva singularmente ampla de vários aspectos da tecnologia Java. Além disso, é autor de JavaWebSo- cket Programming e de um livro ainda a ser publicado sobre Java EE. Dr. Coward tem graduação, mestrado e doutorado em Matemática pela Universidade de Oxford. 256 Java para Iniciantes Usando final Mesmo com a sobreposição de métodos e a herança sendo tão poderosas e úteis, podemos querer evitar que ocorram. Por exemplo, podemos ter uma classe que en- capsule o controle de algum dispositivo de hardware. Além disso, essa classe pode dar ao usuário a oportunidade de inicializar o dispositivo, fazendo uso de informa- ções privadas. Nesse caso, não vamos querer que os usuários de nossa classe possam sobrepor o método de inicialização. Qualquer que seja a razão, em Java, com o uso da palavra-chave final, é fácil impedir que um método seja sobreposto ou uma classe seja herdada. A palavra-chave final impede a sobreposição Para impedir que um método seja sobreposto, especifique final como modificador no início de sua declaração. Métodos declarados como final não podem ser sobrepostos. O fragmento a seguir ilustra final: class A { final void meth() { System.out.println("This is a final method."); } } class B extends A { void meth() { // ERRO! não pode sobrepor. System.out.println("Illegal!"); } } Já que meth( ) é declarado como final, não pode ser sobreposto em B. Se você tentar fazê-lo, ocorrerá um erro de tempo de compilação. A palavra-chave final impede a herança Você pode impedir que uma classe seja herdada precedendo sua declaração com final. A declaração de uma classe como final também declara implicitamente todos os seus métodos como final. Como era de se esperar, é inválido declarar uma classe como abstract e final, uma vez que uma classe abstrata é individualmente incomple- ta e depende de suas subclasses para fornecer implementações completas. Aqui está um exemplo de uma classe final: final class A { // ... } // A classe seguinte é inválida. class B extends A { // ERRO! não pode criar uma subclasse de A // ... } Como os comentários sugerem, é inválido B herdar A, já que A é declarada como final. Capítulo 7 Herança 257 Usando final com membros de dados Além dos usos que acabei de mostrar, final também pode ser aplicada a variáveis mem- bros para criar o que seriam constantes nomeadas. Se você preceder o nome da variável de uma classe com final, seu valor não poderá ser alterado durante todo o tempo de vida do programa. Certamente, você pode dar a essa variável um valor inicial. Por exemplo, no Capítulo 6, uma classe simples de gerenciamento de erros chamada ErrorMsg foi mostrada. Essa classe mapeava um string legível por humanos para um código de erro. Aqui, a versão original da classe será melhorada pelo acréscimo de constantes final, que representam os erros. Agora, em vez de passar para getErrorMsg( ) um número como 2, você pode passar a constante int nomeada DISKERR. // Retorna um objeto String. class ErrorMsg { // Códigos de erro. final int OUTERR = 0; final int INERR = 1; final int DISKERR = 2; final int INDEXERR = 3; String msgs[] = { "Output Error", "Input Error", "Disk Full", "Index Out-Of-Bounds"}; // Retorna a mensagem de erro. String getErrorMsg(int i) { if(i >=0 & i < msgs.length) return msgs[i]; else return "Invalid Error Code"; } } class FinalD { public static void main(String args[]) { ErrorMsg err = new ErrorMsg(); System.out.println(err.getErrorMsg(err.OUTERR)); System.out.println(err.getErrorMsg(err.DISKERR)); } } Observe como as constantes final são usadas em main( ). Uma vez que são membros da classe ErrorMsg, devem ser acessadas via um objeto dessa classe. É claro que também podem ser herdadas pelas subclasses e acessadas diretamente dentro delas. Por uma questão estilística, muitos programadores de Java usam identificado- res maiúsculos em constantes final, como no exemplo anterior, mas essa não é uma regra fixa. Declara constantes final. Usa constantes final. Dica do professor Para que atributos e métodos não sejam sobrepostos ou herdados entre objetos, utiliza-se a palavra-chave “final”. Atributos e métodos finais garantem a imutabilidade dos dados a que forem relacionados, ou seja, eles só podem ser inicializados uma vez, direto na declaração da classe ou no método construtor. Quando “final” é aplicado a uma classe, entende-se que ela chegou a um nível máximo de especialização e não poderá mais ser especializada, ou seja, a classe deixa de poder repassar herança para outra. Uma das vantagens do uso da palavra-chave "final" em métodos é a melhoria no desempenho de execução das aplicações, já que as chamadas de métodos “final” são substituídas pelo código que está na definição do método. Assim, o compilador substitui a chamada desse método pelo seu código, o que evita desvio de fluxo. Nesta Dica do Professor, você vai ver um exemplo de aplicação de atributos e métodos finais utilizando o IDE NetBeans. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/7aa7bd09ee40b4c5c3176628b3241538 Exercícios 1) Os atributos e métodos finais são úteis em diferentes tipos de sistemas e aplicações, com uma função específica. Nesse contexto, assinale a alternativa que descreve corretamente o objetivo do uso da palavra-chave "final" na API Java. A) Criar encapsulamento. B) Dar visibilidade pública aos membros da classe. C) Deixar os membros visíveis em sua classe e subclasses. D) Deixar o membro imutável. E) A palavra-chave "final" é utilizada apenas em classe. 2) Os atributos são as propriedades dos objetos computacionais, representados na API Java por classes. Em relação aos atributos de uma classe, a palavra-chave "final" é usada para uma função específica. Nesse contexto, assinale a alternativa correta. A) Declarar nomes do tipo Integer. B) Declarar uma constante. C) Declarar atributos estáticos. D) Declarar atributos que receberam valor de ponto flutuante. E) Não declarar dois ou mais atributos com o mesmo nome. Os métodos são as ações ou funções que um objeto pode realizar. Em relação aos métodos de uma classe, a palavra-chave "final" é usada para uma função específica. Nesse contexto, veja as afirmações a seguir: 3) I. A palavra-chave "final" impede que um método seja sobreposto. II. A palavra-chave "final" garante que um método seja sobreposto. III. A palavra-chave "final" impede que um método seja visível para outras classes. IV. A palavra-chave "final" informa que o método é sem retorno. V. A palavra-chave "final" impede que um método seja herdado por outras classes. Está correto o que se afirma em: A) I e V. B) II, III e IV. C) I, III e IV. D) III e IV. E) II e III. Atributos e métodos finais podem ser utilizados em muitos tipos de aplicativos, seja naqueles que executam cálculos, que definem áreas de objetos gráficos ou que armazenam informações privadas. Nesse sentido, observe os trechos de códigos-fonte que utilizam a palavra-chave "final" e os relacione com suas respectivas descrições: I. private final int num = 2; II. private final int num1 = 6; private final int num2 = 4; private int result; public final void(){ result = num1 + num2; } III. static private final double pi = 3.1416; private double raio = 2; private double area; public void setRaio(){ this.raio = raio; area = pi * (raio*raio); ( ) Calcula a área do círculo cujo raio é 2. ( ) Calcula a soma entre num1 e num2. ( ) Declara uma constante com modificador de acesso privado recebendo um valor 2. 4) Agora, assinale a alternativa em que é apresentada a ordem correta. A) I, II, III. B) III, I, II. C) III, II, I. D) I, III, II. E) II, III, I. O uso da palavra-chave "final" no desenvolvimento de um código-fonte deve obedecer à sintaxe da linguagem de programação utilizada. Há locais específicos na estrutura do código em que a palavra "final" deve ser inserida para que seja especificada para atributos, métodos ou para a classe do objeto. Nesse contexto, analise o código-fonte a seguir: 5) Agora, veja as afirmações a seguir sobre o código apresentado: I. A classe Pessoa tem um método final. II. Os atributos da classe Pessoa foram declarados como constantes. III. A classe Homem está herdando os membros da classe Pessoa. IV. Se instanciarmos a classe Pessoa, chamarmos o método calculaIdade e passarmos os valores referentes a ano de nascimento e ano atual por parâmetros no método, teremos como resultado a idade. V. Se instanciarmos a classe Homem, chamarmos o método calculaIdade e passarmos os valores referentes a ano de nascimento e ano atual por parâmetros no método, teremos como resultado a idade. Está correto o que se afirma em: A) I, II e III. B) II e IV. C) II e III. D) II, III e IV. E) I, III e IV. Na prática Apesar de funcionalidades como herança e sobreposição de atributos e métodos serem práticas e poderosas, há casos em que elas precisam ser evitadas, como, por exemplo, uma classe que contenha informações privadas e que tenha o controle de inicialização de determinado hardware de armazenamento. Nesse caso, você pode não querer que os usuários dessa classe consigam sobrepor o método de inicialização. Confira, Na Prática, o caso de uma fábrica de jogos digitais que emprega a palavra-chave "final" para impedir a sobreposição de atributos e métodos. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/8cc2a5db-522d-4628-a579-0113c3e429da/e2340b69-f85a-4482-8237-ccb8e3fa8e89.png Saiba + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Imutabilidade e código limpo Neste artigo, você vai conhecer alguns exemplos de como tornar atributos e métodos imutáveis utilizando a API Java, desde as classes String e Wrappers até o uso das palavras-chave "private" e "final". Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Métodos e classes final Para conhecer mais conceitos e exemplos do uso da palavra-chave "final" em Java, consulte o texto “Métodos e classes final”, nas páginas 569 e 570 do livro Android: como programar. Ele está disponível na Biblioteca A, no link a seguir. Conteúdo interativo disponível na plataforma de ensino! Final aplicado em classes, métodos e variáveis Neste vídeo, você vai ver um exemplo prático de inclusão da palavra-chave "final" em uma nova classe na API Java. São apresentados classes, métodos e variáveis (atributos) relacionados a animais. Não se esqueça de ativar as legendas em português. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Atributos e a palavra-chave "final" https://www.devmedia.com.br/o-reflexo-da-imutabilidade-no-codigo-limpo/30697 https://www.youtube.com/embed/r9CMJZ4T__8 Neste vídeo, você vai ver um pouco mais os conceitos de Java relacionados a atributos finais, assim como um exemplo prático de inclusão da palavra-chave "final"em uma classe que trata de números inteiros, dados pessoais, alunos de uma escola, etc. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://www.youtube.com/embed/rYaWPpVJH4U
Compartilhar