Profª Me. Cristiane Fidelix
(Simbologia clássica)
Linguagem de Programação
Java
 Conceitos:
- Encapsulamento
- Herança
- Polimorfismo
Encapsulamento
O que é o encapsulamento?
Mecanismo da linguagem de programação
para restringir o acesso a alguns
componentes dos objetos, escondendo os
dados de uma classe e tornando-os
disponíveis somente através de métodos.
O que é o encapsulamento?
• Na verdade, o mecanismo para restringir o acesso a alguns dos
componentes do objeto é a definição de ocultação de
informações. O encapsulamento é um conceito da Programação
Orientada a Objetos onde o estado de objetos (as variáveis da
classe) e seus comportamentos (os métodos da classe) são
agrupados em conjuntos segundo o seu grau de relação.
• Em programação orientada a objetos,
modificador de acesso, é a palavra-
chave que define como um atributo,
método, ou classe será visto no
contexto que estiver inserido.
Para utilizar estes modificadores de
acesso, basta que o escreva antes do
nome do atributo, método ou classe:
• Public: O modificador public
deixará visível a classe ou
membro para todas as outras
classes, subclasses e pacotes do
projeto Java.
• Protected: O modificador protected
deixará visível o atributo para todas
as outras classes e subclasses que
pertencem ao mesmo pacote. A
principal diferença é que apenas as
classes do mesmo pacote têm acesso
ao membro. O pacote da subclasse
não tem acesso ao membro.
• Private: O modificador private
deixará visível o atributo apenas
para a classe em que este
atributo se encontra.
• Em um processo de encapsulamento os
atributos das classes são do tipo private. Para
acessar esses tipos de modificadores, é
necessário criar métodos setters e getters.
• Por entendimento os métodos setters servem
para alterar a informação de uma propriedade
de um objeto. E os métodos getters para
retornar o valor dessa propriedade.
Veja um exemplo de encapsulamento, na Listagem 2 gera-se os
atributos privados (private) e é realizado o processo de geração
dos métodos setters e getters.
Ex1 - Encapsulamento da classe
Funcionário
1º Criar: a classe
public class Funcionario {
private double salario;
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setSalario(double salario) {
this.salario = salario;
}
public double getSalario() {
return salario;
}
}
2º criar: Classe Testadora dos métodos getters e
setters.
public class TestaFuncionario {
public static void main(String[] args) {
Funcionario funcionario = new Funcionario();
funcionario.setNome("Thiago");
funcionario.setSalario(2500);
System.out.println(funcionario.getNome());
System.out.println(funcionario.getSalario());
}
}
• Na classe testadora é instanciado a classe
“Funcionario”, onde a variável de referência é
usada para invocar os métodos setters,
informando algum dado.
• Ao final, é usado os métodos getters dentro
do “System.out.println” para gerar a saída dos
resultados que foram passados nos métodos
setters.
Herança
Conceito de Herança:
• Na Programação Orientada a Objetos o significado de
herança tem o mesmo significado para o mundo real.
• Assim como um filho pode herdar alguma
característica do pai, na Orientação a Objetos é
permitido que uma classe herde atributos e métodos
da outra, tendo apenas uma restrição para a
herança.
• Os modificadores de acessos das classes, métodos e
atributos só podem estar com
visibilidade public e protected para que sejam
herdados.
Conceito de Herança:
• Uma das grandes vantagens de usar o recurso da
herança é na reutilização do código.
• Esse reaproveitamento pode ser acionado quando
se identifica que o atributo ou método de uma classe
será igual para as outras.
• Para efetuar uma herança de uma classe é utilizada a
palavra reservada chamada extends.
Exemplo: A superclasse “Funcionario” que
servirá de base para as subclasses
usarem seus atributos ou
métodos.
1º Criar a
superclasse
Funcionario:
public class Funcionario {
private String nome;
private double salario;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
public double calculaBonificacao(){
return this.salario * 0.1;
}
}
2º Criar a
subclasse
Gerente:
public class Gerente extends Funcionario {
private String usuario;
private String senha;
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public double calculaBonificacao(){
return this.getSalario() * 0.6 + 100;
}
}
• Podemos ver que a classe “Gerente” está
herdando da classe “Funcionario” através da
palavra reservada extends.
• Acontece também a mudança do
comportamento de herança, a partir do
método “calculaBonificacao” que é
sobrescrito, pois entende-se que o valor da
classe “Gerente” é diferente para as demais.
3º Criar a subclasse Secretaria:
public class Secretaria extends
Funcionario {
private int ramal;
public void setRamal(int ramal) {
this.ramal = ramal;
}
public int getRamal() {
return ramal;
}
}
4º Criar a subclasse Telefonista:
public class Telefonista extends Funcionario {
private int estacaoDeTrabalho;
public void setEstacaoDeTrabalho(int estacaoDeTrabalho) {
this.estacaoDeTrabalho = estacaoDeTrabalho;
}
public int getEstacaoDeTrabalho() {
return estacaoDeTrabalho;
}
}
• Na classe TestaFuncionario são apresentadas
todas as classes e mostrada a reutilização de
código, um exemplo são os atributos “nome” e
“salario”. Portanto, não foi preciso criar em todas
as classes, apenas criou-se na superclasse.
• Apenas lembrando que o acesso dos atributos ou
métodos de uma superclasse é permitido
somente se estão definidos com o modo de
visibilidade como “public” ou “protected”.
5º Criar a classe TestaFuncionario:
public class TestaFuncionario {
public static void main(String[] args) {
Gerente gerente = new Gerente();
gerente.setNome("Carlos Vieira");
gerente.setSalario(3000.58);
gerente.setUsuario("carlos.vieira");
gerente.setSenha("5523");
Funcionario funcionario = new Funcionario();
funcionario.setNome("Pedro Castelo");
funcionario.setSalario(1500);
Telefonista telefonista = new Telefonista();
telefonista.setNome("Luana Brana");
telefonista.setSalario(1300.00);
telefonista.setEstacaoDeTrabalho(20);
Secretaria secretaria = new Secretaria();
secretaria.setNome("Maria Ribeiro");
secretaria.setSalario(1125.25);
secretaria.setRamal(5);
System.out.println("##### Gerente #####");
System.out.println("Nome.: "+gerente.getNome());
System.out.println("Salário.: "+gerente.getSalario());
System.out.println("Usuário.: "+gerente.getUsuario());
System.out.println("Senha.: "+gerente.getSenha());
System.out.println("Bonificação.: "+gerente.calculaBonificacao());
System.out.println();
System.out.println("##### Funcionário #####");
System.out.println("Nome.: "+funcionario.getNome());
System.out.println("Salário.: "+funcionario.getSalario());
System.out.println("Bonificação.: "+funcionario.calculaBonificacao());
System.out.println();
System.out.println("##### Telefonista #####");
System.out.println("Nome.: "+telefonista.getNome());
System.out.println("Salário.: "+telefonista.getSalario());
System.out.println("Estação de Trabalho.:
"+telefonista.getEstacaoDeTrabalho());
System.out.println("Bonificação.: "+telefonista.calculaBonificacao());
System.out.println();
System.out.println("##### Secretária #####");
System.out.println("Nome.: "+secretaria.getNome());
System.out.println("Salário.: "+secretaria.getSalario());
System.out.println("Ramal.: "+secretaria.getRamal());
System.out.println("Bonificação.: "+secretaria.calculaBonificacao());
System.out.println();
}
}
Poliformismo
• Poliformismo significa "muitas formas“.
• É o termo definido em linguagens orientadas
a objeto, como por exemplo Java, C# e C++,
que permite ao desenvolvedor usar o mesmo
elemento de formas diferentes;
• Polimorfismo denota uma situação na qual
um objeto pode se comportar de maneiras
diferentes ao receber uma mensagem, ou
seja, ocorre quando um método definido no
ancestral é redefinido no descendente com
um comportamento diferente.
As classes fazem a mesma operação
(método). Mas de forma diferente.
Exercício:
• Dos objetos a seguir, separe em grupos
aqueles que possuem “métodos” em
comum, mas que são executados de
forma diferente, ou seja, apresentam
poliformismo entre eles.
Poliformismo
Poliformismo
Poliformismo
Poliformismo: codigo java
Poliformismo: codigo java
• A essência do poliformismo é que, em vez de
perguntar a um objeto qual é o seu tipo e
então chamar algum comportamento baseado
nessa resposta, você simplesmente chama o
comportamento.
• O objeto, dependendo do seu tipo, faz a coisa
certa.
• No Poliformismo temos dois tipos:
• O Poliformismo Estático;
• O Poliformismo Dinâmico;
• O Poliformismo Estático :
Se dá quando temos a mesma operação
implementada várias vezes na mesma classe.
A escolha de qual operação será chamada
depende da assinatura dos métodos
sobrecarregados.
Sobrecarga de métodos
Exemplo:
Sobrecarga de Métodos
Sobrecarga de Métodos
• O Poliformismo Dinâmico:
Acontece na herança, quando a subclasse
sobrepõe o método original.
A escolha de qual método será chamado
depende do tipo do objeto que recebe a
mensagem.
Sobreposição de métodos:
Exemplo de Poliformismo:
Exemplo de Poliformismo:
Exemplo de Poliformismo:
Exercícios

Aula 3 - Java Prof.ª Cristiane Fidelix

  • 1.
    Profª Me. CristianeFidelix (Simbologia clássica) Linguagem de Programação Java
  • 2.
     Conceitos: - Encapsulamento -Herança - Polimorfismo
  • 3.
  • 4.
    O que éo encapsulamento? Mecanismo da linguagem de programação para restringir o acesso a alguns componentes dos objetos, escondendo os dados de uma classe e tornando-os disponíveis somente através de métodos.
  • 5.
    O que éo encapsulamento? • Na verdade, o mecanismo para restringir o acesso a alguns dos componentes do objeto é a definição de ocultação de informações. O encapsulamento é um conceito da Programação Orientada a Objetos onde o estado de objetos (as variáveis da classe) e seus comportamentos (os métodos da classe) são agrupados em conjuntos segundo o seu grau de relação.
  • 6.
    • Em programaçãoorientada a objetos, modificador de acesso, é a palavra- chave que define como um atributo, método, ou classe será visto no contexto que estiver inserido. Para utilizar estes modificadores de acesso, basta que o escreva antes do nome do atributo, método ou classe:
  • 7.
    • Public: Omodificador public deixará visível a classe ou membro para todas as outras classes, subclasses e pacotes do projeto Java.
  • 8.
    • Protected: Omodificador protected deixará visível o atributo para todas as outras classes e subclasses que pertencem ao mesmo pacote. A principal diferença é que apenas as classes do mesmo pacote têm acesso ao membro. O pacote da subclasse não tem acesso ao membro.
  • 9.
    • Private: Omodificador private deixará visível o atributo apenas para a classe em que este atributo se encontra.
  • 10.
    • Em umprocesso de encapsulamento os atributos das classes são do tipo private. Para acessar esses tipos de modificadores, é necessário criar métodos setters e getters. • Por entendimento os métodos setters servem para alterar a informação de uma propriedade de um objeto. E os métodos getters para retornar o valor dessa propriedade.
  • 11.
    Veja um exemplode encapsulamento, na Listagem 2 gera-se os atributos privados (private) e é realizado o processo de geração dos métodos setters e getters.
  • 12.
    Ex1 - Encapsulamentoda classe Funcionário
  • 13.
    1º Criar: aclasse public class Funcionario { private double salario; private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public void setSalario(double salario) { this.salario = salario; } public double getSalario() { return salario; } }
  • 14.
    2º criar: ClasseTestadora dos métodos getters e setters. public class TestaFuncionario { public static void main(String[] args) { Funcionario funcionario = new Funcionario(); funcionario.setNome("Thiago"); funcionario.setSalario(2500); System.out.println(funcionario.getNome()); System.out.println(funcionario.getSalario()); } }
  • 15.
    • Na classetestadora é instanciado a classe “Funcionario”, onde a variável de referência é usada para invocar os métodos setters, informando algum dado. • Ao final, é usado os métodos getters dentro do “System.out.println” para gerar a saída dos resultados que foram passados nos métodos setters.
  • 16.
  • 17.
    Conceito de Herança: •Na Programação Orientada a Objetos o significado de herança tem o mesmo significado para o mundo real. • Assim como um filho pode herdar alguma característica do pai, na Orientação a Objetos é permitido que uma classe herde atributos e métodos da outra, tendo apenas uma restrição para a herança. • Os modificadores de acessos das classes, métodos e atributos só podem estar com visibilidade public e protected para que sejam herdados.
  • 18.
    Conceito de Herança: •Uma das grandes vantagens de usar o recurso da herança é na reutilização do código. • Esse reaproveitamento pode ser acionado quando se identifica que o atributo ou método de uma classe será igual para as outras. • Para efetuar uma herança de uma classe é utilizada a palavra reservada chamada extends.
  • 19.
    Exemplo: A superclasse“Funcionario” que servirá de base para as subclasses usarem seus atributos ou métodos.
  • 20.
    1º Criar a superclasse Funcionario: publicclass Funcionario { private String nome; private double salario; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public double getSalario() { return salario; } public void setSalario(double salario) { this.salario = salario; } public double calculaBonificacao(){ return this.salario * 0.1; } }
  • 21.
    2º Criar a subclasse Gerente: publicclass Gerente extends Funcionario { private String usuario; private String senha; public String getUsuario() { return usuario; } public void setUsuario(String usuario) { this.usuario = usuario; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } public double calculaBonificacao(){ return this.getSalario() * 0.6 + 100; } }
  • 22.
    • Podemos verque a classe “Gerente” está herdando da classe “Funcionario” através da palavra reservada extends. • Acontece também a mudança do comportamento de herança, a partir do método “calculaBonificacao” que é sobrescrito, pois entende-se que o valor da classe “Gerente” é diferente para as demais.
  • 23.
    3º Criar asubclasse Secretaria: public class Secretaria extends Funcionario { private int ramal; public void setRamal(int ramal) { this.ramal = ramal; } public int getRamal() { return ramal; } }
  • 24.
    4º Criar asubclasse Telefonista: public class Telefonista extends Funcionario { private int estacaoDeTrabalho; public void setEstacaoDeTrabalho(int estacaoDeTrabalho) { this.estacaoDeTrabalho = estacaoDeTrabalho; } public int getEstacaoDeTrabalho() { return estacaoDeTrabalho; } }
  • 25.
    • Na classeTestaFuncionario são apresentadas todas as classes e mostrada a reutilização de código, um exemplo são os atributos “nome” e “salario”. Portanto, não foi preciso criar em todas as classes, apenas criou-se na superclasse. • Apenas lembrando que o acesso dos atributos ou métodos de uma superclasse é permitido somente se estão definidos com o modo de visibilidade como “public” ou “protected”.
  • 26.
    5º Criar aclasse TestaFuncionario: public class TestaFuncionario { public static void main(String[] args) { Gerente gerente = new Gerente(); gerente.setNome("Carlos Vieira"); gerente.setSalario(3000.58); gerente.setUsuario("carlos.vieira"); gerente.setSenha("5523"); Funcionario funcionario = new Funcionario(); funcionario.setNome("Pedro Castelo"); funcionario.setSalario(1500); Telefonista telefonista = new Telefonista(); telefonista.setNome("Luana Brana"); telefonista.setSalario(1300.00); telefonista.setEstacaoDeTrabalho(20); Secretaria secretaria = new Secretaria(); secretaria.setNome("Maria Ribeiro"); secretaria.setSalario(1125.25); secretaria.setRamal(5);
  • 27.
    System.out.println("##### Gerente #####"); System.out.println("Nome.:"+gerente.getNome()); System.out.println("Salário.: "+gerente.getSalario()); System.out.println("Usuário.: "+gerente.getUsuario()); System.out.println("Senha.: "+gerente.getSenha()); System.out.println("Bonificação.: "+gerente.calculaBonificacao()); System.out.println(); System.out.println("##### Funcionário #####"); System.out.println("Nome.: "+funcionario.getNome()); System.out.println("Salário.: "+funcionario.getSalario()); System.out.println("Bonificação.: "+funcionario.calculaBonificacao()); System.out.println(); System.out.println("##### Telefonista #####"); System.out.println("Nome.: "+telefonista.getNome()); System.out.println("Salário.: "+telefonista.getSalario()); System.out.println("Estação de Trabalho.: "+telefonista.getEstacaoDeTrabalho()); System.out.println("Bonificação.: "+telefonista.calculaBonificacao()); System.out.println();
  • 28.
    System.out.println("##### Secretária #####"); System.out.println("Nome.:"+secretaria.getNome()); System.out.println("Salário.: "+secretaria.getSalario()); System.out.println("Ramal.: "+secretaria.getRamal()); System.out.println("Bonificação.: "+secretaria.calculaBonificacao()); System.out.println(); } }
  • 29.
  • 30.
    • Poliformismo significa"muitas formas“. • É o termo definido em linguagens orientadas a objeto, como por exemplo Java, C# e C++, que permite ao desenvolvedor usar o mesmo elemento de formas diferentes; • Polimorfismo denota uma situação na qual um objeto pode se comportar de maneiras diferentes ao receber uma mensagem, ou seja, ocorre quando um método definido no ancestral é redefinido no descendente com um comportamento diferente.
  • 31.
    As classes fazema mesma operação (método). Mas de forma diferente.
  • 34.
    Exercício: • Dos objetosa seguir, separe em grupos aqueles que possuem “métodos” em comum, mas que são executados de forma diferente, ou seja, apresentam poliformismo entre eles.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
    • A essênciado poliformismo é que, em vez de perguntar a um objeto qual é o seu tipo e então chamar algum comportamento baseado nessa resposta, você simplesmente chama o comportamento. • O objeto, dependendo do seu tipo, faz a coisa certa.
  • 42.
    • No Poliformismotemos dois tipos: • O Poliformismo Estático; • O Poliformismo Dinâmico;
  • 43.
    • O PoliformismoEstático : Se dá quando temos a mesma operação implementada várias vezes na mesma classe. A escolha de qual operação será chamada depende da assinatura dos métodos sobrecarregados.
  • 44.
  • 45.
  • 46.
  • 47.
  • 49.
    • O PoliformismoDinâmico: Acontece na herança, quando a subclasse sobrepõe o método original. A escolha de qual método será chamado depende do tipo do objeto que recebe a mensagem.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.