SlideShare uma empresa Scribd logo
1 de 34
Programação Orientada a
Objetos
Aula 5
Curso: Análise e Desenvolvimento de Sistemas
Professor: Rafael Wendel Pinheiro
• Roteiro da Aula
– Encapsulamento
– Associação
– Polimorfismo
– Exercícios
2
Encapsulamento
3
• Encapsulamento
– O conceito de encapsulamento visa
“esconder” atributos e métodos de uma
classe que são interessantes não serem
“vistos” fora da classe.
– Nesse contexto, quem for consumir a classe,
saberá “o que ela faz” e não “como ela
faz”.
– A classe será acessada apenas por seus
métodos públicos, que são as “interfaces da
classe”. 4
• Encapsulamento
– Imagine a classe “Carro”. Essa classe possui
os atributos capacidadeTanque e
qtdeCombustivel.
– É interessante que esses atributos sejam
implementados como “privados” para garantir
que anomalias como quantidade >
capacidade.
5
• Encapsulamento
6
public class Carro{
private int capacidadeTanque;
private int qtdeCombustivel;
public Carro(int capacidadeTanque){
this.capacidadeTanque = capacidadeTanque;
}
public void abastecer(int qtdeCombustivel){
if((this.qtdeCombustivel + qtdeCombustivel) > this.capacidadeCombustivel){
System.out.println(“Quantidade excede o limite do tanque!”);
}
else{
this.qtdeCombustivel = this.qtdeCombustivel + qtdeCombustivel;,
System.out.println(“Carro abastecido. Quantidade atual: ” + this.qtdeCombustivel );
}
}
}
• Encapsulamento
7
Carro c = new Carro(50);
c.abastecer(40); // Imprime: “Carro abastecido. Quantidade atual: 40”
c.abastecer(15); // Imprime: “Quantidade excede o limite do tanque”
c.abastecer(10); // Imprime: “Carro abastecido. Quantidade atual: 50”
Externamente não é possível saber que o método abastecer está acessando
os atributos capacidadeTanque e qtdeCombustivel e por vezes alterando
esse segundo.
• Encapsulamento
– É interessante que todos os atributos de uma
classe sejam encapsulados, ou seja, não
sejam públicos.
– Dessa forma, eles não poderão ser
acessados/modificados diretamente fora da
classe, apenas através de comportamentos
(métodos).
– Para isso, deve-se implementar os métodos
set e get.
8
• Encapsulamento
– Método set serve para atribuir um valor a uma
propriedade da classe.
– Método get serve para recuperar/visualizar o
valor de uma propriedade da classe
9
• Encapsulamento
10
public class Pessoa{
private String nome;
private String email;
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return this.nome;
}
public void setEmail(String email){
this.email = email;
}
public String getEmail(){
return this.email;
}
}
• Encapsulamento
11
Pessoa p = new Pessoa();
p.setNome(“Joao”);
p.setEmail(“joao@ifspcapivari.com.br”);
System.out.println(“Nome: ” + p.getNome() );
System.out.println(“Email: ” + p.getEmail() );
• Exercício 1:
– Crie a classe Usuario com os atributos nome,
login e senha.
– Como você implementaria a classe para que o
atributo nome só salvasse nomes com CAIXA
ALTA, login só caixa baixa e senha uma String
com limite de 16 caracteres?
– Implemente!!!
12
Associação
13
• Associação
– A associação entre classes ocorre quando o
atributo de uma classe é do tipo de outra
classe.
– Por exemplo, imagine a classe Endereço com
os atributos rua e numero. Imagine também a
classe Cliente que tem os atributos nome e
idade. Cliente possui Endereço, logo, nessa
classe terá um atributo do tipo Endereço.
14
• Associação
15
public class Endereco{
private String rua;
private String numero;
public void setRua(String rua){
this.rua = rua;
}
public String getRua(){
return this.rua;
}
public void setNumero(String numero){
this.numero = numero;
}
public String getNumero(){
return this.numero;
}
}
16
public class Cliente{
private String nome;
private int idade;
private Endereco endereco;
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return this.nome;
}
public void setIdade(int idade){
this.idade = idade;
}
public int getIdade(){
return this.idade;
}
public void setEndereco(Endereco endereco){
this.endereco = endereco;
}
public Endereco getEndereco(){
return this.endereco;
}
}
• Associação
17
Endereco e = new Endereco();
e.setRua(“Rua das Flores”);
e.setNumero(“123”);
Cliente c = new Cliente();
c.setNome(“Joao”);
c.setIdade(30);
c.setEndereco(e);
System.out.println(“Rua: ” + c.getEndereco().getRua() );
//Imprime: “Rua: Rua das Flores”
Polimorfismo
18
• Polimorfismo
– Polimorfismo é a capacidade de uma instância
se portar de várias formas de acordo com sua
referência.
– Por exemplo, retome o projeto da aula anterior
onde existia a classe Funcionario e Gerente.
– Sabe-se que todo gerente é um funcionário, e
isso é viabilizado através da herança.
19
• Polimorfismo
20
Gerente g = new Gerente(“Joao”);
g.salario = 1500;
g.horasExtras = 10;
Funcionario f = g;
f.calcularSalarioTotal();
Vai ser executado o método da
classe Funcionario ou Gerente?
Interfaces
21
• Interfaces
– Em OO, as Interfaces fornecem uma lista de
métodos que as classes que a implementarem
deverão ter.
– Sua principal função é fornecer um mecanismo
de desacoplar as classes (diminuir a
dependência entre as classes)
– Serve como um “contrato” que todas as classes
devem cumprir quando assumem a
implementação da Interface.
22
• Interfaces
– Exemplo: Organograma de Funcionários da
Empresa XYZ.
23
• Interfaces
– No Sistema da Empresa XYZ os Diretores e
Gerentes possuem acesso através de um
login/senha. Os Operadores NÃO POSSUEM
acesso ao sistema.
– Como fazer?
24
• Interfaces
– Incompatibilidade: Operador não “autentica” no
sistema.
25
• Interfaces
– Nesse caso, pode-se criar uma Interface
“IAutenticavel” e nela declarar o método
“autenticar(): boolean”. Todas as classes que
tiverem acesso através de login e senha
deverão implementar essa Interface e
consequentemente possui o método
“autenticar(): boolean”
26
• Interfaces
27
• Implementação
28
Classe Funcionario
(Super-classe
Interface
IAutenticavel
• Implementação
– Classe Gerente
29
• Implementação
– Classe Diretor
30
• Interfaces
– Uma classe pode implementar várias Interfaces
distintas
– A classe pode ter outros métodos particulares
além daqueles declarados pela Interface a qual
implementa
– Uma variável do tipo “Interface” pode receber
uma instância de qualquer classe que a
implementa.
31
32
• Exercício 2:
– Crie uma classe chamada ContaBancaria. Essa classe
deverá ter os atributos numeroConta, saldo e
historico. Faça os métodos:
• Construtor para receber o numero e o saldo inicial da conta.
• depositar: recebe um valor e acopla ao saldo
• sacar: recebe um valor a ser sacado do saldo
• consultarSaldo: Imprime o número da conta e o saldo atual.
(Obs: cada consulta resulta em uma taxa de 0,25 no saldo)
• aplicarReajuste: Atualiza o saldo em 0,02%
• exibirHistorico: deverá exibir todas as ações já executadas
por essa conta.
33
• Fim!
34

Mais conteúdo relacionado

Mais procurados

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 
Introdução à programação
Introdução à programação Introdução à programação
Introdução à programação João Piedade
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidJosé Alexandre Macedo
 

Mais procurados (20)

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Introdução à programação
Introdução à programação Introdução à programação
Introdução à programação
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
Aula 06 - Diagrama de classes
Aula 06 - Diagrama de classesAula 06 - Diagrama de classes
Aula 06 - Diagrama de classes
 
POO - Aula 1
POO - Aula 1POO - Aula 1
POO - Aula 1
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento Android
 

Destaque

Caderno de Linguagem de Programação para Web
Caderno de Linguagem de Programação para WebCaderno de Linguagem de Programação para Web
Caderno de Linguagem de Programação para Webgeysasz
 
Conheça mais o SlideShare
Conheça mais o SlideShareConheça mais o SlideShare
Conheça mais o SlideShareRafael Pinheiro
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-paneRafael Pinheiro
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPPHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPiMasters
 
TESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot WordTESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot WordP.ESPERANCA
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1Norivan Oliveira
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShareSlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShareSlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShareSlideShare
 

Destaque (20)

PHP - Arrays
PHP - ArraysPHP - Arrays
PHP - Arrays
 
POO - Aula 1 introducao
POO - Aula 1   introducaoPOO - Aula 1   introducao
POO - Aula 1 introducao
 
Caderno de Linguagem de Programação para Web
Caderno de Linguagem de Programação para WebCaderno de Linguagem de Programação para Web
Caderno de Linguagem de Programação para Web
 
Conheça mais o SlideShare
Conheça mais o SlideShareConheça mais o SlideShare
Conheça mais o SlideShare
 
Mini Curso Wordpress
Mini Curso WordpressMini Curso Wordpress
Mini Curso Wordpress
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-pane
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
Metodologia SCRUM
Metodologia SCRUMMetodologia SCRUM
Metodologia SCRUM
 
PHP Orientado a Objetos
PHP Orientado a ObjetosPHP Orientado a Objetos
PHP Orientado a Objetos
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPPHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
Php array
Php arrayPhp array
Php array
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
TESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot WordTESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot Word
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Semelhante a POO Aula 5

ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#biandamakengo08
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteIlton Barbosa
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Ilton Barbosa
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersStefan Teixeira
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Elaine Cecília Gatto
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dadosSérgio Souza Costa
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Thyago Maia
 
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
 
Pacotes -organizando_suas_classes_e_bibliotecas
Pacotes  -organizando_suas_classes_e_bibliotecasPacotes  -organizando_suas_classes_e_bibliotecas
Pacotes -organizando_suas_classes_e_bibliotecasPedro Neto
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceArthur Emanuel
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)Mario Sergio
 
Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3Thyago Maia
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 

Semelhante a POO Aula 5 (20)

ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
Java11
Java11Java11
Java11
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dados
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
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
 
Pacotes -organizando_suas_classes_e_bibliotecas
Pacotes  -organizando_suas_classes_e_bibliotecasPacotes  -organizando_suas_classes_e_bibliotecas
Pacotes -organizando_suas_classes_e_bibliotecas
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 

POO Aula 5

  • 1. Programação Orientada a Objetos Aula 5 Curso: Análise e Desenvolvimento de Sistemas Professor: Rafael Wendel Pinheiro
  • 2. • Roteiro da Aula – Encapsulamento – Associação – Polimorfismo – Exercícios 2
  • 4. • Encapsulamento – O conceito de encapsulamento visa “esconder” atributos e métodos de uma classe que são interessantes não serem “vistos” fora da classe. – Nesse contexto, quem for consumir a classe, saberá “o que ela faz” e não “como ela faz”. – A classe será acessada apenas por seus métodos públicos, que são as “interfaces da classe”. 4
  • 5. • Encapsulamento – Imagine a classe “Carro”. Essa classe possui os atributos capacidadeTanque e qtdeCombustivel. – É interessante que esses atributos sejam implementados como “privados” para garantir que anomalias como quantidade > capacidade. 5
  • 6. • Encapsulamento 6 public class Carro{ private int capacidadeTanque; private int qtdeCombustivel; public Carro(int capacidadeTanque){ this.capacidadeTanque = capacidadeTanque; } public void abastecer(int qtdeCombustivel){ if((this.qtdeCombustivel + qtdeCombustivel) > this.capacidadeCombustivel){ System.out.println(“Quantidade excede o limite do tanque!”); } else{ this.qtdeCombustivel = this.qtdeCombustivel + qtdeCombustivel;, System.out.println(“Carro abastecido. Quantidade atual: ” + this.qtdeCombustivel ); } } }
  • 7. • Encapsulamento 7 Carro c = new Carro(50); c.abastecer(40); // Imprime: “Carro abastecido. Quantidade atual: 40” c.abastecer(15); // Imprime: “Quantidade excede o limite do tanque” c.abastecer(10); // Imprime: “Carro abastecido. Quantidade atual: 50” Externamente não é possível saber que o método abastecer está acessando os atributos capacidadeTanque e qtdeCombustivel e por vezes alterando esse segundo.
  • 8. • Encapsulamento – É interessante que todos os atributos de uma classe sejam encapsulados, ou seja, não sejam públicos. – Dessa forma, eles não poderão ser acessados/modificados diretamente fora da classe, apenas através de comportamentos (métodos). – Para isso, deve-se implementar os métodos set e get. 8
  • 9. • Encapsulamento – Método set serve para atribuir um valor a uma propriedade da classe. – Método get serve para recuperar/visualizar o valor de uma propriedade da classe 9
  • 10. • Encapsulamento 10 public class Pessoa{ private String nome; private String email; public void setNome(String nome){ this.nome = nome; } public String getNome(){ return this.nome; } public void setEmail(String email){ this.email = email; } public String getEmail(){ return this.email; } }
  • 11. • Encapsulamento 11 Pessoa p = new Pessoa(); p.setNome(“Joao”); p.setEmail(“joao@ifspcapivari.com.br”); System.out.println(“Nome: ” + p.getNome() ); System.out.println(“Email: ” + p.getEmail() );
  • 12. • Exercício 1: – Crie a classe Usuario com os atributos nome, login e senha. – Como você implementaria a classe para que o atributo nome só salvasse nomes com CAIXA ALTA, login só caixa baixa e senha uma String com limite de 16 caracteres? – Implemente!!! 12
  • 14. • Associação – A associação entre classes ocorre quando o atributo de uma classe é do tipo de outra classe. – Por exemplo, imagine a classe Endereço com os atributos rua e numero. Imagine também a classe Cliente que tem os atributos nome e idade. Cliente possui Endereço, logo, nessa classe terá um atributo do tipo Endereço. 14
  • 15. • Associação 15 public class Endereco{ private String rua; private String numero; public void setRua(String rua){ this.rua = rua; } public String getRua(){ return this.rua; } public void setNumero(String numero){ this.numero = numero; } public String getNumero(){ return this.numero; } }
  • 16. 16 public class Cliente{ private String nome; private int idade; private Endereco endereco; public void setNome(String nome){ this.nome = nome; } public String getNome(){ return this.nome; } public void setIdade(int idade){ this.idade = idade; } public int getIdade(){ return this.idade; } public void setEndereco(Endereco endereco){ this.endereco = endereco; } public Endereco getEndereco(){ return this.endereco; } }
  • 17. • Associação 17 Endereco e = new Endereco(); e.setRua(“Rua das Flores”); e.setNumero(“123”); Cliente c = new Cliente(); c.setNome(“Joao”); c.setIdade(30); c.setEndereco(e); System.out.println(“Rua: ” + c.getEndereco().getRua() ); //Imprime: “Rua: Rua das Flores”
  • 19. • Polimorfismo – Polimorfismo é a capacidade de uma instância se portar de várias formas de acordo com sua referência. – Por exemplo, retome o projeto da aula anterior onde existia a classe Funcionario e Gerente. – Sabe-se que todo gerente é um funcionário, e isso é viabilizado através da herança. 19
  • 20. • Polimorfismo 20 Gerente g = new Gerente(“Joao”); g.salario = 1500; g.horasExtras = 10; Funcionario f = g; f.calcularSalarioTotal(); Vai ser executado o método da classe Funcionario ou Gerente?
  • 22. • Interfaces – Em OO, as Interfaces fornecem uma lista de métodos que as classes que a implementarem deverão ter. – Sua principal função é fornecer um mecanismo de desacoplar as classes (diminuir a dependência entre as classes) – Serve como um “contrato” que todas as classes devem cumprir quando assumem a implementação da Interface. 22
  • 23. • Interfaces – Exemplo: Organograma de Funcionários da Empresa XYZ. 23
  • 24. • Interfaces – No Sistema da Empresa XYZ os Diretores e Gerentes possuem acesso através de um login/senha. Os Operadores NÃO POSSUEM acesso ao sistema. – Como fazer? 24
  • 25. • Interfaces – Incompatibilidade: Operador não “autentica” no sistema. 25
  • 26. • Interfaces – Nesse caso, pode-se criar uma Interface “IAutenticavel” e nela declarar o método “autenticar(): boolean”. Todas as classes que tiverem acesso através de login e senha deverão implementar essa Interface e consequentemente possui o método “autenticar(): boolean” 26
  • 31. • Interfaces – Uma classe pode implementar várias Interfaces distintas – A classe pode ter outros métodos particulares além daqueles declarados pela Interface a qual implementa – Uma variável do tipo “Interface” pode receber uma instância de qualquer classe que a implementa. 31
  • 32. 32
  • 33. • Exercício 2: – Crie uma classe chamada ContaBancaria. Essa classe deverá ter os atributos numeroConta, saldo e historico. Faça os métodos: • Construtor para receber o numero e o saldo inicial da conta. • depositar: recebe um valor e acopla ao saldo • sacar: recebe um valor a ser sacado do saldo • consultarSaldo: Imprime o número da conta e o saldo atual. (Obs: cada consulta resulta em uma taxa de 0,25 no saldo) • aplicarReajuste: Atualiza o saldo em 0,02% • exibirHistorico: deverá exibir todas as ações já executadas por essa conta. 33