SlideShare uma empresa Scribd logo
1 de 38
Java Básico
Aula 03
Natanael Fonseca - Arquiteto de Software
Ementa
• Encapsulamento e Construtores;
• Modificador Static e Enumerations;
• Herança, sobrescrita, covariância e
polimorfismo;
Encapsulamento
- Em programação orientada a objetos significa separar o
programa em partes, o mais isoladas possível. A ideia é tornar
o software mais flexível, fácil de modificar e de criar novas
implementações.
- Uma grande vantagem do encapsulamento é que toda parte
encapsulada pode ser modificada sem que os usuários da
classe em questão sejam afetados.
- Em Java é possível alcançar o encapsulamento simplesmente
protegendo as variáveis com o modificador private e
fornecendo métodos de acesso para alteração e consulta
dessas informações.
Encapsulamento e Construtores 3
Getters e Setters
São métodos que permitem a leitura de atributos da classe. É
uma boa prática criá-los para cada atributo que será
encapsulado.
Métodos get
<modificadores> <tipoAtributo> get + <nomeAtributo> ()
String getNome()
long getRG()
Métodos set
<modificadores> void set+<nomeAtributo> (<tipoAtributo> nomeParametro)
void setNome(String nome)
void setRG(long rg)
Métodos is
boolean is+<nomeAtributo>()
boolean isConnected()
boolean isOk()
Encapsulamento e Construtores 4
Encapsulamento
Vejamos o exemplo abaixo:
Encapsulamento e Construtores 5
1) Classe Pessoa
public class Pessoa{
private String nome;
public String getNome(){
return this.nome;
}
public void setNome(String nome){
this.nome = nome;
}
}
2) Classe Principal
public class Principal{
public static void main(String[] args){
Pessoa p = new Pessoa();
p.setNome(“Joaozinho”);
System.out.println(“Nome :” + p.getNome() );
}
}
this
Conceito que gera muita confusão, mas de um modo geral essa é a palavra
reservada que pode ser utilizada para referenciar o objeto corrente.
Dica: O uso do this não é obrigatório, mas ajuda a evitar ambiguidade.
Encapsulamento e Construtores 6
1) Classe Pessoa
public Pessoa{
private String nome;
//Construtor sem argumento
public Pessoa(){
this.nome = “Pedro”;
}
}
2) Classe Principal
public class Principal{
public static void main(String[] args){
Pessoa p = new Pessoa();
}
}
Sobrecarga de método
Criar vários nomes para métodos que fazem basicamente a
mesma coisa não parece uma abordagem interessante, a solução
para este problema se chama “sobrecarga”;
Sobrecarregar um método é escrever métodos com nomes
iguais, mas com quantidades e tipos de parâmetros diferentes.
Encapsulamento e Construtores 7
1) Classe Calculadora
public class Calculadora {
public int somar(int x, int y){}
public int somar(int x, int y, int z){}
public int somar(int[] numeros){}
}
2) Classe Principal
public class Principal{
public static void main(String[] args){
Calculadora calc = new Calculadora();
calc.somar( 4,4 );
}
}
Construtor
Método especial que serve para inicializar o objeto de uma classe quando o
objeto for criado. Este método não possui declaração de retorno, pois como
foi dito serve para configurar o objeto em questão.
Encapsulamento e Construtores 8
1) Classe Pessoa
public Pessoa{
private String nome;
//Construtor sem argumento
public Pessoa(){
this.nome = “Pedro”;
}
//Construtor que recebe o nome como argumento.
public Pessoa(String nome){
this.nome = nome;
}
//....gets e sets
}
2) Classe Principal
public class Principal{
public static void main(String[] args){
Pessoa p = new Pessoa();
System.out.println(“Nome :” + p.getNome() );
Pessoa p2 = new Pessoa(“Kratos”);
System.out.println(“Nome :” + p2.getNome() );
}
}
Construtor
Algumas regras devem seguidas quando estivermos
criando construtores:
• Ter obrigatoriamente o mesmo nome da classe em
que são definidos;
• Não possuir nenhum valor de retorno(nem mesmo
void);
Além disso, devemos lembrar de que:
• Caso não seja fornecido nenhum construtor a própria
JVM irá incluir um padrão sem argumento.
• E caso seja fornecido um construtor para a classe a
JVM não irá criar um construtor padrão.
Encapsulamento e Construtores 9
Chamando construtores
da própria classe
Para alcançar um nível de reaproveitamento pode-se chamar um
construtor já criado a partir de outro.
Sintaxe:
this( <zero ou mais argumentos> ); //Deve ser a primeira instrução no construtor
Encapsulamento e Construtores 10
public Pessoa{
private String nome;
private String telefone;
private String email;
public Pessoa(String nome, String telefone, String email){
this(nome, telefone);
this.email = email;
}
public Pessoa(String nome, String telefone){
this.nome = nome;
this.telefone = telefone;
}
}
Destrutor em Java ?
• Em algumas linguagens é possível encontrar uma parte do código onde o
programador inclui instruções de finalização, normalmente chamado de
“destrutor”.
• Em Java outro modelo de programação é utilizado, A JVM assume a
responsabilidade de remover os objetos indesejados da memoria valendo-se
do mecanismo “Garbage Collector” (Coletor de Lixo).
• Para descartar um objeto, o programador Java deve, no máximo, atribuir valor
nulo as variáveis reference que apontam para este objeto, ou atribuir um
outro objeto a essas variáveis.
• Um objeto não é necessariamente removido da memória pelo GC no instante
em que perde todas as referencias e se torna “descartável”. A especificação
formal da JVM permite que o GC decida o melhor momento da remoção dos
objetos descartáveis da memoria.
• Em Java existe o método finalize, que pode ser utilizado pelo programador
para estabelecer um conjunto de instruções de finalização.
Encapsulamento e Construtores 11
Lembre-se
Apesar da linguagem fornecer os métodos System.gc e
Runtime.getRumtime.gc a JVM não tem obrigação de
aceitar estas sugestões.
Vale a pena ler os artigos:
• http://www.ibm.com/developerworks/library/j-leaks/
• http://docs.oracle.com/cd/A97688_16/generic.903/bp/java.htm
• http://www.javaworld.com/article/2077581/learn-java/java-tip-
79--interact-with-garbage-collector-to-avoid-memory-leaks.html
Encapsulamento e Construtores 12
Exercício
Crie um programa que por meio de
JOptionpane receba os atributos da
classe empregado(nome, rg e salário),
entretanto, deve-se utilizar as técnicas
aprendidas até agora, tais como:
construtores e encapsulamento.
Encapsulamento e Construtores 13
Modificador Static
Utilizado para indicar que uma variável ou método
pertence a classe e não a instancia.
Se formos entrar no conceito da orientação a objeto
seria como dizer que a variável ou método pertence ao
modelo e não a implementação em si.
Um modo mais grosseiro de entender esse modificador
é pensar que a variável ou método será compartilhada
por todos os objetos, ou seja, alterar o valor de uma
variável estática de um objeto irá fazer com que todos
os outros objetos sofram esta alteração.
Modificador Static e Enumerations 14
Acessando uma variável com
modificador static
Modificador Static e Enumerations 15
1) Classe Pessoa
public Pessoa{
public static int id;
}
2) Classe Principal
public class Principal{
public static void main(String[] args){
Pessoa p = new Pessoa();
System.out.println(“Nome :” + p.getNome() );
Pessoa p2 = new Pessoa(“Kratos”);
System.out.println(“Nome :” + p2.getNome() );
}
}
Vejamos o exemplo a seguir:
Métodos estáticos
Modificador Static e Enumerations 16
1) Classe Math
public Math {
public static int somar(int x,inty){
return x+y;
}
}
2) Classe Principal
public class Principal{
public static void main(String[] args){
System.out.println( Math.somar( 4,4 ) );
}
}
De maneira semelhante ao que ocorre para atributos, o uso do modificador
static em métodos faz sua associação a classe em vez de faze-lo a instancia.
Bloco de Inicialização estático
Para atributos estáticos é possível inicializa-los ou na
declaração ou por meio de blocos estáticos.
Modificador Static e Enumerations 17
1) Classe Pessoa
public Pessoa{
public static int id;
static {
id = 40;
}
}
• Um bloco estatico é executado somente uma vez:
Imediatamente após a primeira referencia a classe, isto é,
no seu carregamento.
• Como o bloco de inicialização estático é executado
no carregamento da classe, será executado antes do
construtor da classe.
• Dentro do bloco somente são acessados atributos e métodos
estáticos;
• Não podem lançar exceções checked;
• É possível criar vários blocos de inicialização, neste caso
serão executados na ordem em que aparecem.
Enumerations
Utiliza-se a palavra reservada enum seguida do nome
desejado, seguindo a convenção de nomes de classes.
Sintaxe para a declaração de enumerações:
<modificadores> enum nomeEnum { listaValores }
Exemplo:
public class Cliente{
public enum TipoCliente{ PESSOA_FISICA, PESSOA_JURIDICA };
}
Modificador Static e Enumerations 18
Imprimindo elementos da enumeração
Todas as enumerações tem um método estático values(),
que retorna um array com os elementos da enumeração da
mesma ordem em que foram declarados. Desta forma pode
ser utilizado um laço for, ou mais facilmente o enhanced for
para imprimir os elementos da enumeração.
Exemplo:
for( Cliente.TipoCliente tipo: Cliente.TipoCliente.values() ){
System.out.println( tipo );
}
Modificador Static e Enumerations 19
Exercício
A classe java.util.Arrays contém vários métodos para
ordenação, busca, comparação e preenchimento de arrays.
E muitos destes métodos são estáticos ! Escreva um
programa em java que crie um array de 100 posições com
números randomicos e teste os diversos métodos existentes
na classe Arrays.
Utilize o javadoc para saber mais detalhes sobre esta classe.
Modificador Static e Enumerations 20
Exercício
Modifique a classe empregado criada durante o curso
adicionando mais um atributo chamado HUMOR, essa
variável será do tipo ENUM, podendo ter dois valores: FELIZ
ou TRISTE. Realize um teste condicional no método
setSalario() para que caso o valor recebido como
argumento seja menor que 100 altere o humor para TRISTE,
caso contrário deverá ser FELIZ;
Modificador Static e Enumerations 21
Herança
Conceito da Orientação a Objetos que permite que uma classe herde
características e métodos de outra classe.
Em Java é utilizado a palavra extends para indicar tal relação.
Em Java a classe Object é chamada de superclasse de todas as classes, por
que todas as classes são derivadas dela direta ou indiretamente.
Herança, Sobrescrita, Covariância e
Polimorfismo
22
1) Classe Pai
public SerHumano{
}
2) Classe Filha
public class Pessoa extends SerHumano {
}
Construtores x Herança
• Construtores não são herdados em hipótese nenhuma !
• Cada classe deve declarar seus próprios construtores;
• Toda classe deve chamar o construtor da superclasse dentro de seu
próprio construtor;
• A chamada ao construtor da superclasse deve ser a primeira instrução do
construtor da classe;
• Caso a chamada não seja feita explicitamente no código da classe, o
compilador irá acrescentar uma chamada implícita ao construtor sem
parâmetros da superclasse.
Herança, Sobrescrita, Covariância e
Polimorfismo
23
Sequencia completa de inicialização
dos objetos
• Espaço em memória é alocado para o objeto sendo construído;
• Cada um dos atributos do objeto é criado e inicializado para seu valor default;
• É chamado o construtor da superclasse;
• Cada um dos atributos da superclasse é criado e inicializado para seu valo
default;
• A inicialização dos atributos via declaração e o código do bloco de inicialização
da superclasse executados na ordem em que aparecem;
• O código do construtor da superclasse é executado;
• A inicialização dos atributos via declaração e o código do bloco de inicialização
da classe são executados na ordem em que aparecem;
• O código do construtor da classe;
Herança, Sobrescrita, Covariância e
Polimorfismo
24
Referencia implícita super
Utilizada para acessar atributos e métodos da superclasse, desde que visíveis
de acordo com os modificadores de acesso.
Herança, Sobrescrita, Covariância e
Polimorfismo
25
1) Classe Pai
public Pessoa{
protected String nome;
protected String rg;
}
2) Classe Filha
public class Funcionario extends Pessoa {
private double salario;
public void impressaoRecibo(){
System.out.print(“Eu” + super.nome + “ ” );
System.out.print(“Portador do rg -” + super.rg + “ ” );
System.out.print(“Declaro que recebi o valor de -” + this.salario );
}
}
Sobrescrita
Quando se estende uma classe e se pretende alterar o comportamento de um
método herdado, é necessário reescrever o método na classe filha.
sobrescrevendo o método herdado da superclasse.
Herança, Sobrescrita, Covariância e
Polimorfismo
26
1) Classe Pai
public Pessoa{
private String nome;
public void imprimir(){
System.out.println(“Aluno - ” + nome );
}
}
2) Classe Filha
public class Funcionario extends Pessoa {
private String matricula;
@override
public void imprimir(){
System.out.print(“Funcionario - ” + matricula );
}
}
Regras para Sobrescrita
As seguintes regras devem ser respeitadas para sobrescrever um método de
uma superclasse:
• O novo método deve ter exatamente o mesmo nome daquele que quer se
sobrescrever.
• O método deve ter a mesma lista de parâmetros, caso contrário será uma
sobrecarga e não sobrescrita;
• O tipo do valor de retorno deverá ser o mesmo do método que esta se
sobrescrevendo, caso contrário ocorrerá um erro de compilação.
• A partir do Java 5 foi introduzido a covariância de valores de retorno.
• Não se pode lançar exceções que não estejam declaradas no método, mas
apenas as mesmas exceções declaradas na assinatura do método ou que
sejam subclasses daquela declarada.
• Um método static não pode sobrescrever um método não static e vice e
versa;
• Um método não deve ter o modificador de acesso mais restritivos que o
método sobrescrito.
Herança, Sobrescrita, Covariância e
Polimorfismo
27
toString()
Método existente na classe Object que possui a função de descrever o
próprio objeto. Esta representação pode ser utilizada para imprimir o objeto
no console.
Por padrão ao imprimir o objeto no console será exibido uma msg no
formato: <nomeDaClasse>@hashcode
Exemplo:
public class Pessoa{
private String nome;
@override
public String toString(){
return “[Nome - ” + this.nome + “ ]”;
}
}
Herança, Sobrescrita, Covariância e
Polimorfismo
28
Modificador final
Utilizado na declaração de atributos, métodos e classes,
tendo comportamentos diferentes em cada uma das
situações.
Na declaração de classes:
- Indica que a classe não pode ser estendida por outra
classe, ou seja, não poderá ser herdada.
Na declaração de um método:
- Indica que o método em questão não pode ser
sobrescrito.
Na declaração de uma variável:
- Define que somente uma atribuição deverá ser feita ao
atributo, podendo ser feita na declaração ou no
construtor. Isto é o equivalente a criação de constantes.
Herança, Sobrescrita, Covariância e
Polimorfismo
29
Classe Abstrata
O modificador abstract é usado para indicar que uma classe não
está pronta para ser utilizada e não pode ser instanciada, mas
apenas estendida.
Sintaxe para declaração de classes abstratas
abstract class NomeDaClasse{
}
O modificador abstract pode ser combinado com outros
modificadores, em qualquer ordem.
Herança, sobrescrita, covariância e
polimorfismo;
30
Método Abstrato
Um método abstrato é utilizado quando o desenvolvedor ou projetista
percebe que:
• É possível implementar um método de varias maneiras interessantes;
• Ainda não existem requisitos bem definidos para decidir por uma
implementação de método.
Sintaxe:
Abstract <tipoRetorno> nomeDoMetodo(<parametrosDeMetodos>);
Regras:
• Sempre que se declara um método abstrato, a classe deve também ser abstrata;
• todas as classes filhas deverão implementar o método abstrato ou declara-lo como
abstrato.
Herança, sobrescrita, covariância e
polimorfismo;
31
Interface
Define um contrato de comunicação entre classes. A interface é um protótipo de classe, com uma
estrutura semelhante a de uma classe abstrata. Uma diferença importante é que uma classe abstrata
pode definir métodos concretos e uma interface só pode definir métodos abstratos.
<modificadores> interface nomeDaInterface{
//Definição de constantes
//Definição de métodos abstratos
}
Exemplo:
public interface Transportavel{
public String UNIDADE_PESO = “kg”
public double getVolume();
public double getPeso();
}
Herança, sobrescrita, covariância e
polimorfismo;
32
Implementando uma Interface
Para implementar uma interface em uma classe utiliza-se a
instrução implements, sendo obrigatório implementar todos os
métodos definidos pela interface, e respeitar a assinatura dos
métodos.
Sintaxe para implementação de interfaces
<modificadores> class nomeDaClasse implements NomeDaInterface{}
Dica: Uma classe abstrata pode implementar uma interface sem implementar
todos os seus métodos.
Herança, sobrescrita, covariância e
polimorfismo;
33
Estendendo uma Interface
Uma interface pode ser estendida por outras,
fazendo com que a interface filha herde todos os
métodos definidos pela super-interface, ou seja, as
classes que implementam a interface filha terão
que implementar todos os métodos definidos nas
duas interfaces.
Exemplo:
public interface Inflamavel extends Transportavel{
public int getTemperaturaMaxima();
}
Herança, sobrescrita, covariância e
polimorfismo;
34
Polimorfismo
O polimorfismo é um conceito de orientação a objetos que permite
ver um objeto de várias formas. Polimorfismo pode ser usado em
diferentes situações: na criação de objetos, nos parâmetros de método
e etc.
Vejamos o exemplo abaixo:
//criando uma instância da classe cliente
Cliente cliente = new Cliente();
//vendo a instância de cliente como pj
PessoaJuridica pJuridica = cliente;
//vendo cliente como pj, e a pj como pessoa
Pessoa pessoa = pJuridica;
Herança, sobrescrita, covariância e
polimorfismo;
35
Covariância
O retorno covariante é uma funcionalidade adicionada na plataforma Java a partir
da versão 5 que permite utilizar a hierarquia das classes no retorno de métodos.
A ideia é permitir que em uma sobrescrita seja retornado um objeto mais
especifico e compatível com o retorno declarado na classe pai.
Vejamos o exemplo abaixo:
Herança, sobrescrita, covariância e
polimorfismo;
36
1) Classe Pai
public X{
public Object getValue(){
}
}
2) Classe Filha
public class Y extends X {
@override
public String getValue(){
}
}
Exercício
Padrões GoF ('Group of Four')
• Os padrões "GoF" são organizados em 3 famílias :
• Padrões de criação : relacionados à criação de objetos
• Padrões estruturais : tratam das associações entre classes e
objetos.
• Padrões comportamentais : tratam das interações e
divisões de responsabilidades entre as classes ou objetos.
Com base no que foi aprendido durante a aula, tente
implementar em Java os padrões FACTORY, DAO, SINGLETON e
TEMPLATE METHOD.
Herança, sobrescrita, covariância e
polimorfismo;
37
Fim da Terceira Aula
Obrigado !

Mais conteúdo relacionado

Mais procurados

Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)Mario Sergio
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01John Godoi
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)Mario Sergio
 

Mais procurados (18)

Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Java5
Java5Java5
Java5
 
Java6
Java6Java6
Java6
 
Java8
Java8Java8
Java8
 
Java2
Java2Java2
Java2
 
JAVA - Pacotes
JAVA - PacotesJAVA - Pacotes
JAVA - Pacotes
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Java 07
Java 07Java 07
Java 07
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 

Destaque

Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4PeslPinguim
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2PeslPinguim
 
Aula 02 implementação objeto
Aula 02   implementação objetoAula 02   implementação objeto
Aula 02 implementação objetoDanilo Alves
 
Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)raquelcarsi
 
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
Poo1   aula 3 - java - comentários instruções e blocos-palavras chavePoo1   aula 3 - java - comentários instruções e blocos-palavras chave
Poo1 aula 3 - java - comentários instruções e blocos-palavras chaveDenis Sobrenome
 
Apresentação java
Apresentação javaApresentação java
Apresentação javamunosai
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003elliando dias
 
Curso de Java - Antonio Alves - Aula 03
Curso de Java - Antonio Alves - Aula 03Curso de Java - Antonio Alves - Aula 03
Curso de Java - Antonio Alves - Aula 03Antonio Alves
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Eduardo Carvalho
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasBreno Vitorino
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java BasicoJoel Lobo
 

Destaque (19)

Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
Aula 02 implementação objeto
Aula 02   implementação objetoAula 02   implementação objeto
Aula 02 implementação objeto
 
Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)
 
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
Poo1   aula 3 - java - comentários instruções e blocos-palavras chavePoo1   aula 3 - java - comentários instruções e blocos-palavras chave
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
 
ApresentaçãO De Java
ApresentaçãO De JavaApresentaçãO De Java
ApresentaçãO De Java
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
Java modulo 01 - Introdução
Java modulo 01 - IntroduçãoJava modulo 01 - Introdução
Java modulo 01 - Introdução
 
Curso de Java - Antonio Alves - Aula 03
Curso de Java - Antonio Alves - Aula 03Curso de Java - Antonio Alves - Aula 03
Curso de Java - Antonio Alves - Aula 03
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Curso de Java #05 - Swing e JavaFX
Curso de Java #05 - Swing e JavaFXCurso de Java #05 - Swing e JavaFX
Curso de Java #05 - Swing e JavaFX
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 

Semelhante a Java Básico: Encapsulamento, Construtores, Static e Herança

Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...
Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...
Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...Professor Samuel Ribeiro
 
07 construtores e finalize
07   construtores e finalize07   construtores e finalize
07 construtores e finalizeArtur Todeschini
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e ExercíciosArthur Emanuel
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaArthur Emanuel
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Construtores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxConstrutores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxJoberthSilva
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetosMateus Parente
 

Semelhante a Java Básico: Encapsulamento, Construtores, Static e Herança (20)

Aula5
Aula5Aula5
Aula5
 
Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...
Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...
Java básico - Módulo 08 - Introdução à programação orientada à objetos oo - c...
 
Refactoring
RefactoringRefactoring
Refactoring
 
07 construtores e finalize
07   construtores e finalize07   construtores e finalize
07 construtores e finalize
 
Aula4
Aula4Aula4
Aula4
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Aula5
Aula5Aula5
Aula5
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de Java
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Construtores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxConstrutores_Sobrecarga.pptx
Construtores_Sobrecarga.pptx
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 

Mais de Natanael Fonseca

Microservices With Istio Service Mesh
Microservices With Istio Service MeshMicroservices With Istio Service Mesh
Microservices With Istio Service MeshNatanael Fonseca
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixNatanael Fonseca
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Natanael Fonseca
 
Desafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidDesafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidNatanael Fonseca
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)Natanael Fonseca
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma AndroidNatanael Fonseca
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509Natanael Fonseca
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509Natanael Fonseca
 
Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Natanael Fonseca
 
Introdução a criptografia
Introdução a criptografiaIntrodução a criptografia
Introdução a criptografiaNatanael Fonseca
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring FrameworkNatanael Fonseca
 
Validação de certificados digitais
Validação de certificados digitaisValidação de certificados digitais
Validação de certificados digitaisNatanael Fonseca
 

Mais de Natanael Fonseca (15)

Microservices With Istio Service Mesh
Microservices With Istio Service MeshMicroservices With Istio Service Mesh
Microservices With Istio Service Mesh
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Desafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidDesafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma Android
 
Fragmentos
FragmentosFragmentos
Fragmentos
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma Android
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
 
Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)
 
Introdução a criptografia
Introdução a criptografiaIntrodução a criptografia
Introdução a criptografia
 
Transações em EJB
Transações em EJBTransações em EJB
Transações em EJB
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring Framework
 
Java annotation
Java annotationJava annotation
Java annotation
 
Validação de certificados digitais
Validação de certificados digitaisValidação de certificados digitais
Validação de certificados digitais
 

Java Básico: Encapsulamento, Construtores, Static e Herança

  • 1. Java Básico Aula 03 Natanael Fonseca - Arquiteto de Software
  • 2. Ementa • Encapsulamento e Construtores; • Modificador Static e Enumerations; • Herança, sobrescrita, covariância e polimorfismo;
  • 3. Encapsulamento - Em programação orientada a objetos significa separar o programa em partes, o mais isoladas possível. A ideia é tornar o software mais flexível, fácil de modificar e de criar novas implementações. - Uma grande vantagem do encapsulamento é que toda parte encapsulada pode ser modificada sem que os usuários da classe em questão sejam afetados. - Em Java é possível alcançar o encapsulamento simplesmente protegendo as variáveis com o modificador private e fornecendo métodos de acesso para alteração e consulta dessas informações. Encapsulamento e Construtores 3
  • 4. Getters e Setters São métodos que permitem a leitura de atributos da classe. É uma boa prática criá-los para cada atributo que será encapsulado. Métodos get <modificadores> <tipoAtributo> get + <nomeAtributo> () String getNome() long getRG() Métodos set <modificadores> void set+<nomeAtributo> (<tipoAtributo> nomeParametro) void setNome(String nome) void setRG(long rg) Métodos is boolean is+<nomeAtributo>() boolean isConnected() boolean isOk() Encapsulamento e Construtores 4
  • 5. Encapsulamento Vejamos o exemplo abaixo: Encapsulamento e Construtores 5 1) Classe Pessoa public class Pessoa{ private String nome; public String getNome(){ return this.nome; } public void setNome(String nome){ this.nome = nome; } } 2) Classe Principal public class Principal{ public static void main(String[] args){ Pessoa p = new Pessoa(); p.setNome(“Joaozinho”); System.out.println(“Nome :” + p.getNome() ); } }
  • 6. this Conceito que gera muita confusão, mas de um modo geral essa é a palavra reservada que pode ser utilizada para referenciar o objeto corrente. Dica: O uso do this não é obrigatório, mas ajuda a evitar ambiguidade. Encapsulamento e Construtores 6 1) Classe Pessoa public Pessoa{ private String nome; //Construtor sem argumento public Pessoa(){ this.nome = “Pedro”; } } 2) Classe Principal public class Principal{ public static void main(String[] args){ Pessoa p = new Pessoa(); } }
  • 7. Sobrecarga de método Criar vários nomes para métodos que fazem basicamente a mesma coisa não parece uma abordagem interessante, a solução para este problema se chama “sobrecarga”; Sobrecarregar um método é escrever métodos com nomes iguais, mas com quantidades e tipos de parâmetros diferentes. Encapsulamento e Construtores 7 1) Classe Calculadora public class Calculadora { public int somar(int x, int y){} public int somar(int x, int y, int z){} public int somar(int[] numeros){} } 2) Classe Principal public class Principal{ public static void main(String[] args){ Calculadora calc = new Calculadora(); calc.somar( 4,4 ); } }
  • 8. Construtor Método especial que serve para inicializar o objeto de uma classe quando o objeto for criado. Este método não possui declaração de retorno, pois como foi dito serve para configurar o objeto em questão. Encapsulamento e Construtores 8 1) Classe Pessoa public Pessoa{ private String nome; //Construtor sem argumento public Pessoa(){ this.nome = “Pedro”; } //Construtor que recebe o nome como argumento. public Pessoa(String nome){ this.nome = nome; } //....gets e sets } 2) Classe Principal public class Principal{ public static void main(String[] args){ Pessoa p = new Pessoa(); System.out.println(“Nome :” + p.getNome() ); Pessoa p2 = new Pessoa(“Kratos”); System.out.println(“Nome :” + p2.getNome() ); } }
  • 9. Construtor Algumas regras devem seguidas quando estivermos criando construtores: • Ter obrigatoriamente o mesmo nome da classe em que são definidos; • Não possuir nenhum valor de retorno(nem mesmo void); Além disso, devemos lembrar de que: • Caso não seja fornecido nenhum construtor a própria JVM irá incluir um padrão sem argumento. • E caso seja fornecido um construtor para a classe a JVM não irá criar um construtor padrão. Encapsulamento e Construtores 9
  • 10. Chamando construtores da própria classe Para alcançar um nível de reaproveitamento pode-se chamar um construtor já criado a partir de outro. Sintaxe: this( <zero ou mais argumentos> ); //Deve ser a primeira instrução no construtor Encapsulamento e Construtores 10 public Pessoa{ private String nome; private String telefone; private String email; public Pessoa(String nome, String telefone, String email){ this(nome, telefone); this.email = email; } public Pessoa(String nome, String telefone){ this.nome = nome; this.telefone = telefone; } }
  • 11. Destrutor em Java ? • Em algumas linguagens é possível encontrar uma parte do código onde o programador inclui instruções de finalização, normalmente chamado de “destrutor”. • Em Java outro modelo de programação é utilizado, A JVM assume a responsabilidade de remover os objetos indesejados da memoria valendo-se do mecanismo “Garbage Collector” (Coletor de Lixo). • Para descartar um objeto, o programador Java deve, no máximo, atribuir valor nulo as variáveis reference que apontam para este objeto, ou atribuir um outro objeto a essas variáveis. • Um objeto não é necessariamente removido da memória pelo GC no instante em que perde todas as referencias e se torna “descartável”. A especificação formal da JVM permite que o GC decida o melhor momento da remoção dos objetos descartáveis da memoria. • Em Java existe o método finalize, que pode ser utilizado pelo programador para estabelecer um conjunto de instruções de finalização. Encapsulamento e Construtores 11
  • 12. Lembre-se Apesar da linguagem fornecer os métodos System.gc e Runtime.getRumtime.gc a JVM não tem obrigação de aceitar estas sugestões. Vale a pena ler os artigos: • http://www.ibm.com/developerworks/library/j-leaks/ • http://docs.oracle.com/cd/A97688_16/generic.903/bp/java.htm • http://www.javaworld.com/article/2077581/learn-java/java-tip- 79--interact-with-garbage-collector-to-avoid-memory-leaks.html Encapsulamento e Construtores 12
  • 13. Exercício Crie um programa que por meio de JOptionpane receba os atributos da classe empregado(nome, rg e salário), entretanto, deve-se utilizar as técnicas aprendidas até agora, tais como: construtores e encapsulamento. Encapsulamento e Construtores 13
  • 14. Modificador Static Utilizado para indicar que uma variável ou método pertence a classe e não a instancia. Se formos entrar no conceito da orientação a objeto seria como dizer que a variável ou método pertence ao modelo e não a implementação em si. Um modo mais grosseiro de entender esse modificador é pensar que a variável ou método será compartilhada por todos os objetos, ou seja, alterar o valor de uma variável estática de um objeto irá fazer com que todos os outros objetos sofram esta alteração. Modificador Static e Enumerations 14
  • 15. Acessando uma variável com modificador static Modificador Static e Enumerations 15 1) Classe Pessoa public Pessoa{ public static int id; } 2) Classe Principal public class Principal{ public static void main(String[] args){ Pessoa p = new Pessoa(); System.out.println(“Nome :” + p.getNome() ); Pessoa p2 = new Pessoa(“Kratos”); System.out.println(“Nome :” + p2.getNome() ); } } Vejamos o exemplo a seguir:
  • 16. Métodos estáticos Modificador Static e Enumerations 16 1) Classe Math public Math { public static int somar(int x,inty){ return x+y; } } 2) Classe Principal public class Principal{ public static void main(String[] args){ System.out.println( Math.somar( 4,4 ) ); } } De maneira semelhante ao que ocorre para atributos, o uso do modificador static em métodos faz sua associação a classe em vez de faze-lo a instancia.
  • 17. Bloco de Inicialização estático Para atributos estáticos é possível inicializa-los ou na declaração ou por meio de blocos estáticos. Modificador Static e Enumerations 17 1) Classe Pessoa public Pessoa{ public static int id; static { id = 40; } } • Um bloco estatico é executado somente uma vez: Imediatamente após a primeira referencia a classe, isto é, no seu carregamento. • Como o bloco de inicialização estático é executado no carregamento da classe, será executado antes do construtor da classe. • Dentro do bloco somente são acessados atributos e métodos estáticos; • Não podem lançar exceções checked; • É possível criar vários blocos de inicialização, neste caso serão executados na ordem em que aparecem.
  • 18. Enumerations Utiliza-se a palavra reservada enum seguida do nome desejado, seguindo a convenção de nomes de classes. Sintaxe para a declaração de enumerações: <modificadores> enum nomeEnum { listaValores } Exemplo: public class Cliente{ public enum TipoCliente{ PESSOA_FISICA, PESSOA_JURIDICA }; } Modificador Static e Enumerations 18
  • 19. Imprimindo elementos da enumeração Todas as enumerações tem um método estático values(), que retorna um array com os elementos da enumeração da mesma ordem em que foram declarados. Desta forma pode ser utilizado um laço for, ou mais facilmente o enhanced for para imprimir os elementos da enumeração. Exemplo: for( Cliente.TipoCliente tipo: Cliente.TipoCliente.values() ){ System.out.println( tipo ); } Modificador Static e Enumerations 19
  • 20. Exercício A classe java.util.Arrays contém vários métodos para ordenação, busca, comparação e preenchimento de arrays. E muitos destes métodos são estáticos ! Escreva um programa em java que crie um array de 100 posições com números randomicos e teste os diversos métodos existentes na classe Arrays. Utilize o javadoc para saber mais detalhes sobre esta classe. Modificador Static e Enumerations 20
  • 21. Exercício Modifique a classe empregado criada durante o curso adicionando mais um atributo chamado HUMOR, essa variável será do tipo ENUM, podendo ter dois valores: FELIZ ou TRISTE. Realize um teste condicional no método setSalario() para que caso o valor recebido como argumento seja menor que 100 altere o humor para TRISTE, caso contrário deverá ser FELIZ; Modificador Static e Enumerations 21
  • 22. Herança Conceito da Orientação a Objetos que permite que uma classe herde características e métodos de outra classe. Em Java é utilizado a palavra extends para indicar tal relação. Em Java a classe Object é chamada de superclasse de todas as classes, por que todas as classes são derivadas dela direta ou indiretamente. Herança, Sobrescrita, Covariância e Polimorfismo 22 1) Classe Pai public SerHumano{ } 2) Classe Filha public class Pessoa extends SerHumano { }
  • 23. Construtores x Herança • Construtores não são herdados em hipótese nenhuma ! • Cada classe deve declarar seus próprios construtores; • Toda classe deve chamar o construtor da superclasse dentro de seu próprio construtor; • A chamada ao construtor da superclasse deve ser a primeira instrução do construtor da classe; • Caso a chamada não seja feita explicitamente no código da classe, o compilador irá acrescentar uma chamada implícita ao construtor sem parâmetros da superclasse. Herança, Sobrescrita, Covariância e Polimorfismo 23
  • 24. Sequencia completa de inicialização dos objetos • Espaço em memória é alocado para o objeto sendo construído; • Cada um dos atributos do objeto é criado e inicializado para seu valor default; • É chamado o construtor da superclasse; • Cada um dos atributos da superclasse é criado e inicializado para seu valo default; • A inicialização dos atributos via declaração e o código do bloco de inicialização da superclasse executados na ordem em que aparecem; • O código do construtor da superclasse é executado; • A inicialização dos atributos via declaração e o código do bloco de inicialização da classe são executados na ordem em que aparecem; • O código do construtor da classe; Herança, Sobrescrita, Covariância e Polimorfismo 24
  • 25. Referencia implícita super Utilizada para acessar atributos e métodos da superclasse, desde que visíveis de acordo com os modificadores de acesso. Herança, Sobrescrita, Covariância e Polimorfismo 25 1) Classe Pai public Pessoa{ protected String nome; protected String rg; } 2) Classe Filha public class Funcionario extends Pessoa { private double salario; public void impressaoRecibo(){ System.out.print(“Eu” + super.nome + “ ” ); System.out.print(“Portador do rg -” + super.rg + “ ” ); System.out.print(“Declaro que recebi o valor de -” + this.salario ); } }
  • 26. Sobrescrita Quando se estende uma classe e se pretende alterar o comportamento de um método herdado, é necessário reescrever o método na classe filha. sobrescrevendo o método herdado da superclasse. Herança, Sobrescrita, Covariância e Polimorfismo 26 1) Classe Pai public Pessoa{ private String nome; public void imprimir(){ System.out.println(“Aluno - ” + nome ); } } 2) Classe Filha public class Funcionario extends Pessoa { private String matricula; @override public void imprimir(){ System.out.print(“Funcionario - ” + matricula ); } }
  • 27. Regras para Sobrescrita As seguintes regras devem ser respeitadas para sobrescrever um método de uma superclasse: • O novo método deve ter exatamente o mesmo nome daquele que quer se sobrescrever. • O método deve ter a mesma lista de parâmetros, caso contrário será uma sobrecarga e não sobrescrita; • O tipo do valor de retorno deverá ser o mesmo do método que esta se sobrescrevendo, caso contrário ocorrerá um erro de compilação. • A partir do Java 5 foi introduzido a covariância de valores de retorno. • Não se pode lançar exceções que não estejam declaradas no método, mas apenas as mesmas exceções declaradas na assinatura do método ou que sejam subclasses daquela declarada. • Um método static não pode sobrescrever um método não static e vice e versa; • Um método não deve ter o modificador de acesso mais restritivos que o método sobrescrito. Herança, Sobrescrita, Covariância e Polimorfismo 27
  • 28. toString() Método existente na classe Object que possui a função de descrever o próprio objeto. Esta representação pode ser utilizada para imprimir o objeto no console. Por padrão ao imprimir o objeto no console será exibido uma msg no formato: <nomeDaClasse>@hashcode Exemplo: public class Pessoa{ private String nome; @override public String toString(){ return “[Nome - ” + this.nome + “ ]”; } } Herança, Sobrescrita, Covariância e Polimorfismo 28
  • 29. Modificador final Utilizado na declaração de atributos, métodos e classes, tendo comportamentos diferentes em cada uma das situações. Na declaração de classes: - Indica que a classe não pode ser estendida por outra classe, ou seja, não poderá ser herdada. Na declaração de um método: - Indica que o método em questão não pode ser sobrescrito. Na declaração de uma variável: - Define que somente uma atribuição deverá ser feita ao atributo, podendo ser feita na declaração ou no construtor. Isto é o equivalente a criação de constantes. Herança, Sobrescrita, Covariância e Polimorfismo 29
  • 30. Classe Abstrata O modificador abstract é usado para indicar que uma classe não está pronta para ser utilizada e não pode ser instanciada, mas apenas estendida. Sintaxe para declaração de classes abstratas abstract class NomeDaClasse{ } O modificador abstract pode ser combinado com outros modificadores, em qualquer ordem. Herança, sobrescrita, covariância e polimorfismo; 30
  • 31. Método Abstrato Um método abstrato é utilizado quando o desenvolvedor ou projetista percebe que: • É possível implementar um método de varias maneiras interessantes; • Ainda não existem requisitos bem definidos para decidir por uma implementação de método. Sintaxe: Abstract <tipoRetorno> nomeDoMetodo(<parametrosDeMetodos>); Regras: • Sempre que se declara um método abstrato, a classe deve também ser abstrata; • todas as classes filhas deverão implementar o método abstrato ou declara-lo como abstrato. Herança, sobrescrita, covariância e polimorfismo; 31
  • 32. Interface Define um contrato de comunicação entre classes. A interface é um protótipo de classe, com uma estrutura semelhante a de uma classe abstrata. Uma diferença importante é que uma classe abstrata pode definir métodos concretos e uma interface só pode definir métodos abstratos. <modificadores> interface nomeDaInterface{ //Definição de constantes //Definição de métodos abstratos } Exemplo: public interface Transportavel{ public String UNIDADE_PESO = “kg” public double getVolume(); public double getPeso(); } Herança, sobrescrita, covariância e polimorfismo; 32
  • 33. Implementando uma Interface Para implementar uma interface em uma classe utiliza-se a instrução implements, sendo obrigatório implementar todos os métodos definidos pela interface, e respeitar a assinatura dos métodos. Sintaxe para implementação de interfaces <modificadores> class nomeDaClasse implements NomeDaInterface{} Dica: Uma classe abstrata pode implementar uma interface sem implementar todos os seus métodos. Herança, sobrescrita, covariância e polimorfismo; 33
  • 34. Estendendo uma Interface Uma interface pode ser estendida por outras, fazendo com que a interface filha herde todos os métodos definidos pela super-interface, ou seja, as classes que implementam a interface filha terão que implementar todos os métodos definidos nas duas interfaces. Exemplo: public interface Inflamavel extends Transportavel{ public int getTemperaturaMaxima(); } Herança, sobrescrita, covariância e polimorfismo; 34
  • 35. Polimorfismo O polimorfismo é um conceito de orientação a objetos que permite ver um objeto de várias formas. Polimorfismo pode ser usado em diferentes situações: na criação de objetos, nos parâmetros de método e etc. Vejamos o exemplo abaixo: //criando uma instância da classe cliente Cliente cliente = new Cliente(); //vendo a instância de cliente como pj PessoaJuridica pJuridica = cliente; //vendo cliente como pj, e a pj como pessoa Pessoa pessoa = pJuridica; Herança, sobrescrita, covariância e polimorfismo; 35
  • 36. Covariância O retorno covariante é uma funcionalidade adicionada na plataforma Java a partir da versão 5 que permite utilizar a hierarquia das classes no retorno de métodos. A ideia é permitir que em uma sobrescrita seja retornado um objeto mais especifico e compatível com o retorno declarado na classe pai. Vejamos o exemplo abaixo: Herança, sobrescrita, covariância e polimorfismo; 36 1) Classe Pai public X{ public Object getValue(){ } } 2) Classe Filha public class Y extends X { @override public String getValue(){ } }
  • 37. Exercício Padrões GoF ('Group of Four') • Os padrões "GoF" são organizados em 3 famílias : • Padrões de criação : relacionados à criação de objetos • Padrões estruturais : tratam das associações entre classes e objetos. • Padrões comportamentais : tratam das interações e divisões de responsabilidades entre as classes ou objetos. Com base no que foi aprendido durante a aula, tente implementar em Java os padrões FACTORY, DAO, SINGLETON e TEMPLATE METHOD. Herança, sobrescrita, covariância e polimorfismo; 37
  • 38. Fim da Terceira Aula Obrigado !