Baixe o app para aproveitar ainda mais
Prévia do material em texto
PROGRAMAÇÃO ORIENTADA A OBJETOS Professor: Cristiano de Macêdo Neto E-mail: cristiano.neto@prof.una.br • Forma padronizada de permitir o acesso aos atributos de maneira controlada (encapsulamento) • Os nomes dos métodos são criados a partir das palavras get ou set antes do nome do atributo. Getters e Setters palavras get ou set antes do nome do atributo. • O padrão do método get não vale para as variáveis de tipo boolean: – Neste caso utilizamos is e set – Exemplo: para verificar se a lâmpada esta ligada, criaríamos os métodos isLigado e não getLigado 2 Javabeans • Um JavaBean é um componente reutilizável que tem como finalidade representar um modelo de dados. – Define convenções para que os atributos de dados – Define convenções para que os atributos de dados sejam tratados como “propriedade” – Permite manipulação de suas propriedades, ativação de eventos, etc. através de um framework que reconheça as convenções utilizadas. Javabeans • Traduzindo: JavaBean é uma classe Java qualquer, que tem as seguintes características: – Construtor público default (sem argumentos) – Atributos de dados private– Atributos de dados private –Metodos de acesso (acessors / getter) e/ou alteração (mutators / setter) para cada atributo usando a convenção getAtributo() ou isAtributo (boolean) e setAtributo ☺ JavaBeans Exemplo Palavra-chave Modificadora • Pode-se utilizar, opcionalmente, uma das quatro opções de palavra-chave modificadora: – final: • define o atributo como constante e permite ao compilador fazer ajustes e otimizações internas – static :– static : • Define o atributo ou método como estático, ou seja, todos os objetos compartilham a mesma variável e não instancias distintas – volatile : • Define um atributo como volátil, o que indica que várias Threads poderão acessar esse atributo (não estudo na disciplina) – transient: • Indica que o atributo não será utilizado em uma operação de serialização do objeto. (não estudo na disciplina) Atributos de objetos (de instância) • São os atributos que pertencem aos objetos (instâncias) e não às classes. – Somente é enxergado pelo objeto a qual pertence – É criado quando o objeto é criado (comando new)– É criado quando o objeto é criado (comando new) – É destruído quando o objeto a que pertence for destruído – É o tipo de atributo mais comumente utilizado em POO Prefixo this • Palavra-chave que identifica o objeto atual no código-fonte. • Quando você utiliza esse prefixo, você diz: “acesse o atributo pertencente a esse objeto, “acesse o atributo pertencente a esse objeto, cujo nome é o seguinte...”. • O nome do atributo vem após o ponto. • Sua utilização é aconselhável em todas as situações que se deseja acessar um atributo do objeto (atributo de instância) Prefixo this O problema • Controlar a quantidade de lâmpadas instanciadas pelo classe que possui o método main() • Soluções:• Soluções: – Simples mas problemática Lampada l1 = new Lampada(...); totalDeLampadas += 1; – Atributo totalizador Atributos de Classe • Problema com a solução do atributo totalizador – Cada objeto tem o seu atributo e não é possível saber o total de objetos instanciados Qual a solução?• Qual a solução? – A solução seria ter um atributo que fosse compartilhado por todos os objetos (instâncias) da classe Lampada. – Como fazer isto? • Basta utilizar o modificador static Atributos de Classe • Um atributo de classe é um atributo declarado com o modificador static. • Os atributos de classe são associados com a classe e não com os objetos (ou instâncias) classe e não com os objetos (ou instâncias) criados a partir dela. – Isso significa que quando um atributo de classe é modificado, todos os objetos criados a partir da mesma classe enxergam a alteração. Métodos de Classe • Similarmente, você pode definir métodos de classe e métodos de objeto. – A função main de um programa é um exemplo. Note que ela sempre é definida como um método Note que ela sempre é definida como um método de classe, pois possui o modificador static Exemplo Modificadores de Classe • Os modificadores de método são: – abstract • Define um método sem corpo – final • Define um método que não pode ser modificado em sub- classes • Define um método que não pode ser modificado em sub- classes – static • Define um método de classe – native • Indica um método escrito em C++ – Synchronized • Indica que somente uma thread por vez pode executa-lo. Métodos de Instância • São os métodos de objetos. • Podem acessar atributos de instância e atributos de classe declarados na sua classe. • Para declarar um método de instância, não • Para declarar um método de instância, não especifique a palavra-chave static. Método de Classe • Um método de classe é um método que acessa somente os atributos de classe definidos na sua própria classe. – Na declaração utiliza-se a palavra-chave static– Na declaração utiliza-se a palavra-chave static – Não pode utilizar this em um método de classe – Na chamada, prefixe o método com o nome de sua classe seguido do operador de ponto Observações Importantes • Métodos e atributos estáticos só podem acessar outros métodos e atributos estáticos da mesma classe – Não possui referência “this”– Não possui referência “this” • Usar static significa programar semelhantes à programação estruturada, porém em alguns casos é aceitável utilizar tal “recurso técnico”. Sobrecarga de Métodos • Declarar múltiplos métodos que possuam o mesmo nome, porém com listas de parâmetros diferentes, é uma técnica denominada sobrecarga de método (method overloading). sobrecarga de método (method overloading). – Neste caso, o compilador seleciona o método apropriado escolhendo aquele cujo nome, número e tipo de argumentos coincidir com a chamada de um método com o mesmo nome, número e tipo de argumentos (através da comparação de assinaturas). Sobrecarga de Métodos Tratamento de Exceções • Uma exceção é um evento que ocorre durante a execução de um programa que rompe o fluxo normal de instruções. • Exemplos:• Exemplos: – falha ao ler um dispositivo; – retirar um elemento de uma coleção vazia; – falha na conexão de rede; – divisão por zero; – etc Tratamento de Exceções • Na programação tradicional, a detecção, documentação e tratamento de erros geralmente leva ao confuso código espaguete. • Por exemplo, considere a ação que lê um arquivo: lerArquivo() { lerArquivo() { abrir o arquivo; determinar seu tamanho; alocar esta quantidade de memória; transferir o arquivo para a memória; fechar o arquivo; } Tratamento de Exceções • Qual o problema do código anterior? – que acontece se o arquivo não puder ser aberto? – que acontece se o tamanho do arquivo não puder ser determinado? ser determinado? – que acontece se não puder ser alocada memória suficiente? – que acontece se a leitura falhar? – que acontece se o arquivo não puder ser fechado? Tratamento de Exceções • E onde fica o código espaguete? – Para responder as questões anteriores, faz-se necessário adicionar uma porção de código para fazer a detecção do erro, documentação e fazer a detecção do erro, documentação e tratamento Tratamento de Exceções • As exceções permitem que você escreva o fluxo principal de seu código e trate dos casos excepcionais em outro lugar. • Ou seja, o tratamento de exceções serve para • Ou seja, o tratamento de exceções serve para separar o código normal do código de tratamento de erros Código sem Tratamento de Exceções e Erro Código Espaguetecom Tratamento de Erro Tratamento de Exceção • Como tratar exceção em Java? – try, catch e finally • Define um bloco de tratamento de exceção – throws– throws • Declara que um método pode lançar exceção – throw • Lança um exceção Tratamento de Exceção • Sintaxe try { ... }catch (Excecao e1){ ... ... }catch (Excecao e2){ ... }finally { ... } Código com Tratamento de Exceções
Compartilhar