Eduardo Ricoldi
Eduardo Ricoldi
O curso
O aprendizado em uma linguagem orientada a objetos
começa muito antes do conhecimento de recursos ...
Eduardo Ricoldi
O que é O.O
Na qualidade de método de modelagem, é tida como a
melhor estratégia para se eliminar o GAP se...
Eduardo Ricoldi
Vantagens
Quando, existem dois objetos semelhantes, pode-se
escrever os métodos apenas uma vez e usá-los p...
Eduardo Ricoldi
O conceito
A Orientação Objeto depende mais da mentalidade do
programador do que da linguagem de programaç...
Eduardo Ricoldi
O conceito
Em orientação objeto, o enfoque com que se encara a
frase é diferente: primeiro pensaríamos no ...
Eduardo Ricoldi
O conceito
Pratica: Encontrar os objetos e a ações das frases abaixo
1. “Verifiquei a água do radiador”
2....
Eduardo Ricoldi
A variável e a memória
Em linguagens de baixo nível o programador tem
obrigatoriamente a responsabilidade ...
Eduardo Ricoldi
A variável e a memória
Supondo que X possui quatro bytes e estivesse na
posição E2 de memória. Cada posiçã...
Eduardo Ricoldi
A variável e a memória
Uma variável muda de tamanho de acordo com o
tipo, seu conteúdo, o modo como o comp...
Eduardo Ricoldi
A variável e a memória
Podemos dizer que blocos de informações na memória
sendo referenciados por rótulos ...
Eduardo Ricoldi
Mapa de objetos
O mapa de objeto é um conjunto de instruções que
dizem ao compilador como o objeto é e dev...
Eduardo Ricoldi
Mapa de objetos
Um exemplo de primitivo é o tipo char, que tem uma
representação direta na memória, o comp...
Eduardo Ricoldi
Mapa de objetos
Um objeto comum dos compiladores de alto nível é do
tipo String. Que possui alem do valor ...
Eduardo Ricoldi
Mapa de objetos
Abaixo um exemplo para um mapa de objetos do tipo
String que é simplesmente um tipo “Texto...
Eduardo Ricoldi
Mapa de objetos
letras: [O][i]
O
0100
1111
i
0110
1001
String Char Bytes
16
Eduardo Ricoldi
Mapa de objetos
Definiremos a partir de agora que o mapa de objetos
será chamado de Classe, sendo assim um...
Eduardo Ricoldi
Mapa de objetos
É necessário lembrar que um mapa de objeto (ou
classe como definimos agora) só existe fora...
Eduardo Ricoldi
Atributos
São as propriedades de um objeto (também
conhecidos como variáveis do objeto).
Atributos são, ba...
Eduardo Ricoldi
Atributos
Na classe String de exemplo, o array de chars rotulado
de letras, seria um atributo de nosso obj...
Eduardo Ricoldi
Atributos
Classe do tipo pessoa e alguns atributos.
classe Pessoa{
String nome;
int idade;
}
21
Eduardo Ricoldi
Atributos
Pratica: Criar as classes abaixo com seus atributos
1. Taxista
2. Celular
3. Navio
4. Radiador
5...
Eduardo Ricoldi
Atributos
Pratica: Criar as classes abaixo com seus atributos
Navio
classe Navio{
String nome
int tamanho
...
Eduardo Ricoldi
Atributos
Atributos podem ser de qualquer tipo, desde que
respeite as regras de relacionamentos.
Por exemp...
Eduardo Ricoldi
Atributos
Pratica:
1. Criar uma classe Carro que leve 1 pessoa.
2. Criar uma classe navio que leve pessoas...
Eduardo Ricoldi
Atributos
Pratica:
1. Criar uma classe navio que leve pessoas e carros.
classe Navio {
Pessoa[] pessoas
Ca...
Eduardo Ricoldi
Atributos
Um programa escrito com orientação a objetos pode
se tornar um labirinto de ramificações quando ...
Eduardo Ricoldi
Métodos
Métodos são declarados dentro de uma classe para
representar as operações que os objetos pertencen...
Eduardo Ricoldi
Métodos
Métodos são essencialmente procedimentos que
podem manipular atributos de objetos para os quais o
...
Eduardo Ricoldi
Métodos
Exemplo:
nome(argumentos) {
corpo do método
}
classe Pessoa{
String nome
defineNome(String novoNom...
Eduardo Ricoldi
Métodos
O tipo é um indicador do tipo de retorno do método,
que pode ser um dos tipos primitivos da lingua...
Eduardo Ricoldi
Métodos
Exemplo:
tipo nome(argumentos) {
corpo do método
retorno
}
classe Pessoa{
String nome
int defineNo...
Eduardo Ricoldi
Métodos
Pratica:
1. Criar os métodos para definir e pegar os passageiros
classe Carro{
Pessoa[] passageiro...
Eduardo Ricoldi
Métodos
Pratica:
1. Criar os métodos para definir e pegar os atributos
classe Navio {
Pessoa[] pessoas
Car...
Eduardo Ricoldi
Métodos
Pratica:
classe Navio {
Pessoa[] pessoas
Carro[] carros
definePessoas(Pessoa[] novasPessoas){
pess...
Eduardo Ricoldi
Métodos
As funções de definir e resgatar valores de atributos
são chamadas de modificadores de atributos, ...
Eduardo Ricoldi
Métodos
Exemplo:
Classe Pessoa{
String nome
int idade
defineNome(String nome)
defineIdade(int idade)
Strin...
Eduardo Ricoldi
Métodos
Pratica: Fazer atributos e métodos em mapas de
objetos escolhidos aleatoriamente.
*Não é necessári...
Eduardo Ricoldi
Analisando o ambiente
Um sistema para controle de estoque em uma
farmácia.
Defina seus objetos
Defina os r...
Eduardo Ricoldi
Usando seus objetos
Quando o compilador encontra no seu código uma
instrução de que você deseja criar uma ...
Eduardo Ricoldi
Carregando objetos
Criamos 2 variáveis (Objetos) do tipo pessoa em um
método qualquer de outra classe:
car...
Eduardo Ricoldi
Carregando objetos
Olhando dentro da memória (em alto nível):
pessoa1 pessoa2
42
Eduardo Ricoldi
Carregando objetos
Como podemos ver nossos espaços de memória estão
reservados mas o compilador não constr...
Eduardo Ricoldi
Construtores
Para o objeto estar pronto para trabalhar o compilador
deve construir a sua instancia de acor...
Eduardo Ricoldi
Construtores
Exemplo:
classe Pessoa{
String nome
Int idade
Pessoa(){
nome = “”
idade = 0;
}
Pessoa(String ...
Eduardo Ricoldi
Construtores
Pratica: Criar os construtores para as classes criadas
anteriormente.
*Não é necessário o con...
Eduardo Ricoldi
Carregando objetos
Digamos que a palavra reservada para dizer ao
compilador carregar a classe para dentro ...
Eduardo Ricoldi
Utilizando objetos
Olhando dentro da memória (em alto nível):
String nome
Int idade
defineNome()
pegaNome(...
Eduardo Ricoldi
Utilizando objetos
E se mandarmos exibir o conteúdo do atributo nome
em cada pessoa:
carregarPessoasMostra...
Eduardo Ricoldi
Utilizando objetos
Definindo um nome para a pessoa 1:
carregarPessoasMostraNomes(){
Pessoa pessoa1 = nova ...
Eduardo Ricoldi
Utilizando objetos
Olhando dentro da memória (em alto nível):
String nome = “Joao”
Int idade
defineNome()
...
Eduardo Ricoldi
Objetos úteis
Pratica:
1. Fazer uma classe calculadora que pode operar com 2
números (Atributos e modifica...
Eduardo Ricoldi
Objetos úteis
Pratica:
1. Fazer uma classe calculadora que pode operar com 2
números (Atributos e modifica...
Eduardo Ricoldi
Objetos úteis
Exemplo:
classe Calculadora{
int numero1
int numero2
int resultado
Calculadora(int novoNumer...
Eduardo Ricoldi
Objetos úteis
Com nosso mapa de objetos pronto, podemos carregar e
utilizar objetos para efetuar somas de ...
Eduardo Ricoldi
Objetos úteis
Pratica:
fazConta(){
Calculadora objeto = nova Calculadora(1, 1)
}
56
Eduardo Ricoldi
Objetos úteis
Olhando na memória o objeto da classe calculadora
Int numero1 = 1
Int numero2 = 1
Int result...
Eduardo Ricoldi
Objetos úteis
Pratica:
fazConta(){
Calculadora objeto = nova Calculadora(1, 1)
objeto.somar()
objeto.retor...
Eduardo Ricoldi
Objetos úteis
Olhando na memória o objeto da classe calculadora
Int numero1 = 1
Int numero2 = 1
Int result...
Eduardo Ricoldi
Objetos úteis
Pratica:
1. Fazer uma classe Numero que receba um inteiro
entre 1 e 10. sintaxe do condicion...
Eduardo Ricoldi
Objetos úteis
Pratica:
classe Numero{
int numero
Numero(int nNumero){
se (nNumero > 0) e (nNumero < 10){
n...
Eduardo Ricoldi
Objetos úteis
classe Calculadora{
Numero num1
Numero num2
Calculadora(Numero novo1, Numero novo2){
num1 = ...
Eduardo Ricoldi
Mensagens e relacionamentos
O nome que damos a um objeto chamando um
método de outro objeto é troca de men...
Eduardo Ricoldi
Mensagens e relacionamentos
Um exemplo de relacionamento “tem-um”
classe Calculadora{
Numero num1
}
A clas...
Eduardo Ricoldi
Mensagens e relacionamentos
Um exemplo de relacionamento “é-um”
classe Computador estende Calculadora{
}
A...
Eduardo Ricoldi
Herança
É o mecanismo pelo qual uma classe pode utilizar o
mapa de objeto de outra classe, aproveitando se...
Eduardo Ricoldi
Herança
classe Calculadora{
int num1
int num2
Calculadora(int novo1, int novo2){
num1 = novo1
num2 = novo2...
Eduardo Ricoldi
Herança
Int numero1 = 1
Int numero2 = 1
Calculadora
somar()
calculadora
Olhando dentro da memória podemos ...
Eduardo Ricoldi
Herança
Em um objeto de uma classe com herança não é
possível nem necessário saber se o método, atributo o...
Eduardo Ricoldi
Herança
Portanto se estivermos dentro de uma classe e formos
chamar o construtor da super classe faremos:
...
Eduardo Ricoldi
Herança
Portanto se estivermos dentro de uma classe e formos
chamar um método da super classe faremos:
cla...
Eduardo Ricoldi
Herança
Pratica:
1. Fazer uma classe Carro e uma Classe Conversível.
Não é necessário fazer o conteúdo de ...
Eduardo Ricoldi
Herança
Pratica:
classe Carro{
String modelo
int portas
Carro(String nModelo, int nPortas){
modelo = nMode...
Eduardo Ricoldi
Herança
Pratica:
classe Conversivel estende Carro{
Conversivel (String nModelo, int nPortas){
super(nModel...
Eduardo Ricoldi
Herança
Uma fabrica que constrói e testa carros
Exemplo:
classe Fabrica{
criarTestar(){
Carro carango = no...
Eduardo Ricoldi
Herança
Exemplo:
classe Fabrica{
criarTestar(){
Conversivel carango = nova Conversivel()
carango.frear()
c...
Eduardo Ricoldi
Herança - Generalização
A herança é um modo de generalizar dizendo que
todos os objetos descendentes daque...
Eduardo Ricoldi
Herança - Generalização
Exemplo:
classe Manobrista{
estacionar(Carro odroga){
odroga.acelerar()
odroga.fre...
Eduardo Ricoldi
Herança - Generalização
Exemplo:
classe Hotel{
Manobrista ze = nova Manobrista()
estacionamento(){
ze.esta...
Eduardo Ricoldi
Herança - Generalização
Exemplo:
classe Manobrista{
estacionar(Carro odroga){
odroga.acelerar()
odroga.fre...
Eduardo Ricoldi
Abstração
É a habilidade de concentrar os aspectos essenciais de
um contexto qualquer, ignorando caracterí...
Eduardo Ricoldi
Abstração
Não é possível dizer como um veiculo estaciona ou
freia só chamando ele de veiculo. Uma moto é u...
Eduardo Ricoldi
Abstração
Para dizer que uma classe é abstrata existe uma palavra
reservada, aqui ela será “abstrata” e de...
Eduardo Ricoldi
Abstração - Responsabilidade
A classe abstrata por sempre e somente ser pai de outra
classe pode delegar r...
Eduardo Ricoldi
Abstração - Responsabilidade
Por se tratar de uma responsabilidade a classe abstrata
não implementa o cont...
Eduardo Ricoldi
Abstração - Responsabilidade
Pratica: Implemente os atributos e as assinaturas dos
métodos de ação das cla...
Eduardo Ricoldi
Abstração - Responsabilidade
Pratica: Implemente os atributos e as assinaturas dos
métodos de ação para um...
Eduardo Ricoldi
Abstração - Responsabilidade
classe abstrata Veiculo {
String modelo
String cor;
Veiculo(String pModelo, S...
Eduardo Ricoldi
Abstração - Responsabilidade
classe Moto estende Veiculo{
int cilindradas
acelerar(){
torce o cabo
}
frear...
Eduardo Ricoldi
Abstração - Responsabilidade
classe Carro estende Veiculo{
int portas
acelerar(){
pisa no pedal do acelera...
Eduardo Ricoldi
Abstração - Responsabilidade
Se o objeto manobrista estacionar veículos ele aceitará
carros e motos, pois ...
Eduardo Ricoldi
Polimorfismo
Consiste em quatro propriedades que a linguagem tem
a liberdade de implementar, porem para or...
Eduardo Ricoldi
Polimorfismo - Inclusão
Na classe Manobrista o tipo do parâmetro recebido é
Veiculo mas dentro esta inseri...
Eduardo Ricoldi
Polimorfismo - Sobrecarga
Quando mais de um método possui o mesmo nome
mas tem parâmetros diferentes o com...
Eduardo Ricoldi
Polimorfismo - Sobrecarga
classe Mae{
darNome(Filho filho){
filho.defineNome(“João”)
}
darNome(Filha filha...
Eduardo Ricoldi
Polimorfismo - Sobrecarga
classe Mae{
darNome(Filho filho){
filho.defineNome(“João”)
}
darNome(Filha filha...
Eduardo Ricoldi
Polimorfismo – Coerção ou
Generalização
Coerção é a parte automática do compilador para
efetuar uma genera...
Eduardo Ricoldi
Polimorfismo – Coerção
(Generalização)
classe Pessoa{
conversar(){
retorna “novela”
}
desligar(){
conteúdo...
Eduardo Ricoldi
Polimorfismo – Coerção
(Convertendo)
classe Pessoa{
conversar(){
retorna “novela”
}
desligar(){
conteúdo
}...
Eduardo Ricoldi
Interface
É um contrato entre a classe e o mundo do programa.
Quando uma classe implementa uma interface, ...
Eduardo Ricoldi
Interface
Exemplo
comer()
Classe abstrata Animal
comer()
Classe Cachorro
estende Animal
comer()
falar()
Cl...
Eduardo Ricoldi
Interface
Neste caso temos que as classes Cachorro, Pessoa e
Papagaio estendem de animal, porem nem todas ...
Eduardo Ricoldi
Interface
Voltando ao exemplo da classe Telefone:
classe Telefone{
escutarConversa(Pessoa pessoa){
pessoa....
Eduardo Ricoldi
Interface
Nossa classe alterada:
classe Telefone{
escutarConversa(Falador falante){
falante.falar()
}
}
104
Eduardo Ricoldi
Interface
Pratica: Fazer o conjunto de classes necessárias para
um sistema de banco de dados com objetos d...
Eduardo Ricoldi
Interface
interface ObjetoBanco{
String montaInsert()
String montaSelect()
String montaUpdate()
String mon...
Eduardo Ricoldi
Interface
classe Cliente implementa ObjetoBanco{
int id
String nome
String montaInsert(){
retorna “insert ...
Eduardo Ricoldi
Interface
classe Produto implementa ObjetoBanco{
int codigo
String descricao
int quantidade
...
String mon...
Eduardo Ricoldi
Interface
classe Banco {
boolean inserir(ObjetoBanco objeto){
String sql = objeto.montaInsert()
retorna dr...
Eduardo Ricoldi
Encapsulamento
Consiste na separação de aspectos internos e externos de
um objeto. Este mecanismo é utiliz...
Eduardo Ricoldi
Encapsulamento
Os principais modificadores de acesso em orientação a
objetos são:
Private
Protected
Public...
Eduardo Ricoldi
Encapsulamento
Private
É o modificador que define que o atributo ou método para
só poder ser visto dentro ...
Eduardo Ricoldi
Encapsulamento
Protected
É o modificador que define o atributo ou método para só poder ser visto por
uma s...
Eduardo Ricoldi
Encapsulamento
Public
É o modificador que define para atributo ou método que o
mesmo pode ser visto de qua...
Eduardo Ricoldi
Encapsulamento
public classe Calculadora{
public int n1
public int n2
public int op
public Calculadora(int...
Eduardo Ricoldi
Encapsulamento
public classe Calculadora{
private int n1
private int n2
private int op
public Calculadora(...
Eduardo Ricoldi
Aplicando orientação a objetos
Pratica: Um sistema de um banco clientes que possuem contas (simples e
espe...
Próximos SlideShares
Carregando em…5
×

[Lógica] Orientação a Objetos descomplicada

745 visualizações

Publicada em

O aprendizado em uma linguagem orientada a objetos começa muito antes do conhecimento de recursos da mesma, mas no modo de trabalhar sobre ela, como é definido o raciocínio e localização dos trechos de código. Visando esta etapa do estudo com intenção de promover para o desenvolvedor o conhecimento básico para uma migração tranqüila da programação estruturada para a orientada a objetos.

A Orientação Objeto depende mais da mentalidade do programador do que da linguagem de programação que está sendo utilizada.

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
745
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
23
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

[Lógica] Orientação a Objetos descomplicada

  1. 1. Eduardo Ricoldi
  2. 2. Eduardo Ricoldi O curso O aprendizado em uma linguagem orientada a objetos começa muito antes do conhecimento de recursos da mesma, mas no modo de trabalhar sobre ela, como é definido o raciocínio e localização dos trechos de código. Visando esta etapa do estudo com intenção de promover para o desenvolvedor o conhecimento básico para uma migração tranqüila da programação estruturada para a orientada a objetos. 2
  3. 3. Eduardo Ricoldi O que é O.O Na qualidade de método de modelagem, é tida como a melhor estratégia para se eliminar o GAP semântico*, dificuldade recorrente no processo de modelar o mundo real do domínio do problema em um conjunto de componentes de software que seja o mais fiel na sua representação deste domínio. *A distancia entre o mundo real e o modelo abstrato construído 3
  4. 4. Eduardo Ricoldi Vantagens Quando, existem dois objetos semelhantes, pode-se escrever os métodos apenas uma vez e usá-los para os dois objetos. Apenas os métodos que realmente forem diferentes para os dois objetos é que precisam ser escritos individualmente. Permite que, quando for necessária alguma alteração, modifique-se apenas o objeto que necessita desta alteração, e ela propagar-se-á automaticamente às demais partes do software que utilizam este objeto. 4
  5. 5. Eduardo Ricoldi O conceito A Orientação Objeto depende mais da mentalidade do programador do que da linguagem de programação que está sendo utilizada. “O navio atraca no porto e descarrega sua carga.” 5
  6. 6. Eduardo Ricoldi O conceito Em orientação objeto, o enfoque com que se encara a frase é diferente: primeiro pensaríamos no objeto navio, no objeto porto e no objeto carga, pensando como eles seriam e procurando definir seu comportamento. Após isto é que pensaremos em como o navio se relaciona com o porto e com a carga, e como o porto se relaciona com carga. De modo grosseiro, podemos dizer que ao analisarmos uma frase pensando estruturadamente, damos ênfase aos verbos, e pensando orientado a objetos, damos ênfase aos substantivos. 6
  7. 7. Eduardo Ricoldi O conceito Pratica: Encontrar os objetos e a ações das frases abaixo 1. “Verifiquei a água do radiador” 2. “Liguei para o 190” 3. “O Passageiro entra no taxi e depois paga a corrida” 4. “Os carros já estão na pista de corrida” 5. “De todas as caixas do armário só tirei a vermelha” 6. “Coloquei as compras no carrinho, fui até o caixa e paguei a compra com o cartão de credito” 7
  8. 8. Eduardo Ricoldi A variável e a memória Em linguagens de baixo nível o programador tem obrigatoriamente a responsabilidade sobre a memória, em alguns casos até qual endereço físico será utilizado, o problema é que nenhuma posição de memória se torna segura, já que qualquer programa pode acessá-la e alterar seu valor, gerando uma inconsistência de dados e muito provavelmente atitudes inesperadas por parte dos programas. Em uma linguagem de alto nível uma variável é representada por um rotulo. 8
  9. 9. Eduardo Ricoldi A variável e a memória Supondo que X possui quatro bytes e estivesse na posição E2 de memória. Cada posição de memória corresponde apenas a um byte e nossa variável inteira ocupa quatro. Ou seja, o número 9 não vai estar representado numa única posição de memória, mas sim em E2, E3, E4 e E5. Aliás, aquilo que está nessas posições de memória é a representação em binário do número 9. Sendo assim uma variável é um nome que referencia uma porção de bytes. 9
  10. 10. Eduardo Ricoldi A variável e a memória Uma variável muda de tamanho de acordo com o tipo, seu conteúdo, o modo como o compilador representa esse tipo e como o processador os interpreta. 10
  11. 11. Eduardo Ricoldi A variável e a memória Podemos dizer que blocos de informações na memória sendo referenciados por rótulos são variáveis, sendo assim uma representação mundo real seria um armário de caixas rotuladas com informações dentro. Se uma caixa é um objeto no mundo real, então uma variável é um objeto no mundo virtual. 11
  12. 12. Eduardo Ricoldi Mapa de objetos O mapa de objeto é um conjunto de instruções que dizem ao compilador como o objeto é e deve ser manipulado na memória (Escrito ou lido). Quando o compilador conhece nativamente o mapa do objeto este objeto pode ser chamado de primitivo caso seja somente uma representação direta de valor ou objeto caso possua métodos e propriedades. 12
  13. 13. Eduardo Ricoldi Mapa de objetos Um exemplo de primitivo é o tipo char, que tem uma representação direta na memória, o compilador sabe que ele é uma massa binária com representação inteira. 13
  14. 14. Eduardo Ricoldi Mapa de objetos Um objeto comum dos compiladores de alto nível é do tipo String. Que possui alem do valor real propriedades e métodos descritos em seu conjunto de instruções que podem ser chamados de Classe ou Templates. 14
  15. 15. Eduardo Ricoldi Mapa de objetos Abaixo um exemplo para um mapa de objetos do tipo String que é simplesmente um tipo “Texto”. String { char[] letras; } Assim o compilador sabe que um objeto String deve ser quebrado em N objetos char e que objetos char são inteiros convertidos em binário na memória. 15
  16. 16. Eduardo Ricoldi Mapa de objetos letras: [O][i] O 0100 1111 i 0110 1001 String Char Bytes 16
  17. 17. Eduardo Ricoldi Mapa de objetos Definiremos a partir de agora que o mapa de objetos será chamado de Classe, sendo assim uma classe é definida por: 1. Nome da classe 2. Nome da classe pai caso exista 3. Nome de seus atributos 4. Nomes e as definições de todas as operações associadas a esta classe 17
  18. 18. Eduardo Ricoldi Mapa de objetos É necessário lembrar que um mapa de objeto (ou classe como definimos agora) só existe fora do programa em execução, pois ele não é alterado, excluído ou se cria um enquanto o programa esta rodando. Afinal caracterizamos um programa em execução quando o mesmo esta alocando recursos (Memória, processador e etc...) o compilador roda o script da classe e cria o só objeto na memória com as informações de seu mapa. 18
  19. 19. Eduardo Ricoldi Atributos São as propriedades de um objeto (também conhecidos como variáveis do objeto). Atributos são, basicamente, as informações que representam o objeto. Atributos de classe devem ser constantes para não fugir a regra de orientação a objetos. 19
  20. 20. Eduardo Ricoldi Atributos Na classe String de exemplo, o array de chars rotulado de letras, seria um atributo de nosso objeto. String { char[] letras; } 20
  21. 21. Eduardo Ricoldi Atributos Classe do tipo pessoa e alguns atributos. classe Pessoa{ String nome; int idade; } 21
  22. 22. Eduardo Ricoldi Atributos Pratica: Criar as classes abaixo com seus atributos 1. Taxista 2. Celular 3. Navio 4. Radiador 5. Porto classe Nome{ Tipo Rotulo1 Tipo Rotulo2 } 22
  23. 23. Eduardo Ricoldi Atributos Pratica: Criar as classes abaixo com seus atributos Navio classe Navio{ String nome int tamanho String carga int peso } 23
  24. 24. Eduardo Ricoldi Atributos Atributos podem ser de qualquer tipo, desde que respeite as regras de relacionamentos. Por exemplo um Navio transportando um carro: classe Navio{ Carro carga } classe Navio{ Carro[] carga } 24
  25. 25. Eduardo Ricoldi Atributos Pratica: 1. Criar uma classe Carro que leve 1 pessoa. 2. Criar uma classe navio que leve pessoas e carros. 25
  26. 26. Eduardo Ricoldi Atributos Pratica: 1. Criar uma classe navio que leve pessoas e carros. classe Navio { Pessoa[] pessoas Carro[] carros } 26
  27. 27. Eduardo Ricoldi Atributos Um programa escrito com orientação a objetos pode se tornar um labirinto de ramificações quando um objeto possui outros objetos como atributos Carro Pessoa Classe Navio Bagagem Classe Carro Classe Pessoa Classe Bagagem Pessoa Bagagem Classe Ônibus 27
  28. 28. Eduardo Ricoldi Métodos Métodos são declarados dentro de uma classe para representar as operações que os objetos pertencentes a esta classe podem executar. Um método é a implementação de uma rotina, ou seja, o código propriamente dito. Pode ser comparado a um procedimento ou função. 28
  29. 29. Eduardo Ricoldi Métodos Métodos são essencialmente procedimentos que podem manipular atributos de objetos para os quais o método foi definido recebendo e retornando parâmetros. Assinatura é a primeira linha do método onde o nome (um identificador válido) e o tipo dos argumentos são definidos. 29
  30. 30. Eduardo Ricoldi Métodos Exemplo: nome(argumentos) { corpo do método } classe Pessoa{ String nome defineNome(String novoNome){ nome = novoNome } 30
  31. 31. Eduardo Ricoldi Métodos O tipo é um indicador do tipo de retorno do método, que pode ser um dos tipos primitivos da linguagem, um tipo de objeto (nome de classe ou interface), ou vazio se não houver nenhum valor de retorno. 31
  32. 32. Eduardo Ricoldi Métodos Exemplo: tipo nome(argumentos) { corpo do método retorno } classe Pessoa{ String nome int defineNome(String novoNome){ nome = novoNome retorna 1 } 32
  33. 33. Eduardo Ricoldi Métodos Pratica: 1. Criar os métodos para definir e pegar os passageiros classe Carro{ Pessoa[] passageiros } 33
  34. 34. Eduardo Ricoldi Métodos Pratica: 1. Criar os métodos para definir e pegar os atributos classe Navio { Pessoa[] pessoas Carro[] carros } 34
  35. 35. Eduardo Ricoldi Métodos Pratica: classe Navio { Pessoa[] pessoas Carro[] carros definePessoas(Pessoa[] novasPessoas){ pessoas = novasPessoas } defineCarros(Carro[] novosCarros){ carros = novosCarros } } 35
  36. 36. Eduardo Ricoldi Métodos As funções de definir e resgatar valores de atributos são chamadas de modificadores de atributos, mas os métodos não possuem somente esta serventia, eles executam ações que o objeto é capaz de fazer. Uma classe Pessoa possui seus atributos, seus modificadores de atributos e suas ações. 36
  37. 37. Eduardo Ricoldi Métodos Exemplo: Classe Pessoa{ String nome int idade defineNome(String nome) defineIdade(int idade) String pegaNome() int PegaIdade() andar() falar() comer() } 37
  38. 38. Eduardo Ricoldi Métodos Pratica: Fazer atributos e métodos em mapas de objetos escolhidos aleatoriamente. *Não é necessário fazer os conteúdos dos métodos 38
  39. 39. Eduardo Ricoldi Analisando o ambiente Um sistema para controle de estoque em uma farmácia. Defina seus objetos Defina os relacionamentos 39
  40. 40. Eduardo Ricoldi Usando seus objetos Quando o compilador encontra no seu código uma instrução de que você deseja criar uma variável ele vai até o mapa de objetos referente ao tipo da variável e aloca na memória o espaço necessário de acordo com os atributos, alem disso joga dentro do seu objeto os métodos que o mapa de objetos diz que ele possui. 40
  41. 41. Eduardo Ricoldi Carregando objetos Criamos 2 variáveis (Objetos) do tipo pessoa em um método qualquer de outra classe: carregarPessoas(){ Pessoa pessoa1 Pessoa pessoa2 } 41
  42. 42. Eduardo Ricoldi Carregando objetos Olhando dentro da memória (em alto nível): pessoa1 pessoa2 42
  43. 43. Eduardo Ricoldi Carregando objetos Como podemos ver nossos espaços de memória estão reservados mas o compilador não construiu o conteúdo de nossos objetos. Por isso ao tentarmos chamar o método pegaNome() ira ocorrer um erro de objeto nulo, já que o objeto não possui seus atributos ou métodos só por ter sido declarado. carregarPessoas(){ Pessoa pessoa1 pessoa1.pegaNome() << Erro de objeto sem conteúdo! } 43
  44. 44. Eduardo Ricoldi Construtores Para o objeto estar pronto para trabalhar o compilador deve construir a sua instancia de acordo com o mapa de objetos, sendo necessário dizer no mapa de objetos como o compilador carregar aquele tipo. Esta parte do mapa de objeto é chamada de “construtor” e diz ao compilador como seus atributos devem ser iniciados. 44
  45. 45. Eduardo Ricoldi Construtores Exemplo: classe Pessoa{ String nome Int idade Pessoa(){ nome = “” idade = 0; } Pessoa(String nomeEntrada, int idadeEntrada){ nome = nomeEntrada idade = idadeEntrada } ... } 45
  46. 46. Eduardo Ricoldi Construtores Pratica: Criar os construtores para as classes criadas anteriormente. *Não é necessário o conteúdo dos construtores 46
  47. 47. Eduardo Ricoldi Carregando objetos Digamos que a palavra reservada para dizer ao compilador carregar a classe para dentro do objeto vazio é “nova”. Assim possuímos um código qualquer que declara 2 objetos e carrega 1 objeto do tipo pessoa carregarPessoas(){ Pessoa pessoa1 Pessoa pessoa2 pessoa1 = nova Pessoa() } 47
  48. 48. Eduardo Ricoldi Utilizando objetos Olhando dentro da memória (em alto nível): String nome Int idade defineNome() pegaNome() defineIdade() pegaIdade() pessoa1 pessoa2 48
  49. 49. Eduardo Ricoldi Utilizando objetos E se mandarmos exibir o conteúdo do atributo nome em cada pessoa: carregarPessoasMostraNomes(){ Pessoa pessoa1 = nova Pessoa() Pessoa pessoa2 = nova Pessoa(“José”, 53) pessoa1.pegaNome() pessoa2.pegaNome() } 49
  50. 50. Eduardo Ricoldi Utilizando objetos Definindo um nome para a pessoa 1: carregarPessoasMostraNomes(){ Pessoa pessoa1 = nova Pessoa() pessoa1.defineNome(“Joao”) Pessoa pessoa2 = nova Pessoa(“José”, 53) pessoa1.pegaNome() pessoa2.pegaNome() } 50
  51. 51. Eduardo Ricoldi Utilizando objetos Olhando dentro da memória (em alto nível): String nome = “Joao” Int idade defineNome() pegaNome() defineIdade() pegaIdade() pessoa1 String nome=“josé” Int idade = 53 defineNome() pegaNome() defineIdade() pegaIdade() pessoa2 51
  52. 52. Eduardo Ricoldi Objetos úteis Pratica: 1. Fazer uma classe calculadora que pode operar com 2 números (Atributos e modificadores de atributos). 52
  53. 53. Eduardo Ricoldi Objetos úteis Pratica: 1. Fazer uma classe calculadora que pode operar com 2 números (Atributos e modificadores de atributos). 1. Fazer um método somar() que soma os 2 atributos e atribui o resultado em uma outra variável. 2. Fazer um método que retorna o total da soma. 53
  54. 54. Eduardo Ricoldi Objetos úteis Exemplo: classe Calculadora{ int numero1 int numero2 int resultado Calculadora(int novoNumero1, int novoNumero2){ numero1 = novoNumero1 numero2 = novoNumero2 } somar(){ resultado = numero1 + numero2 } int retornaResultado(){ return resultado } } 54
  55. 55. Eduardo Ricoldi Objetos úteis Com nosso mapa de objetos pronto, podemos carregar e utilizar objetos para efetuar somas de 2 valores inteiros. Pratica: 1. Fazer uso da classe calculadora para efetuar uma soma e exibir o valor. fazConta(){ ... } 55
  56. 56. Eduardo Ricoldi Objetos úteis Pratica: fazConta(){ Calculadora objeto = nova Calculadora(1, 1) } 56
  57. 57. Eduardo Ricoldi Objetos úteis Olhando na memória o objeto da classe calculadora Int numero1 = 1 Int numero2 = 1 Int resultado Calculadora somar() retornaResultado() calculadora 57
  58. 58. Eduardo Ricoldi Objetos úteis Pratica: fazConta(){ Calculadora objeto = nova Calculadora(1, 1) objeto.somar() objeto.retornaResultado() } 58
  59. 59. Eduardo Ricoldi Objetos úteis Olhando na memória o objeto da classe calculadora Int numero1 = 1 Int numero2 = 1 Int resultado = 2 Calculadora somar() retornaResultado() calculadora 59
  60. 60. Eduardo Ricoldi Objetos úteis Pratica: 1. Fazer uma classe Numero que receba um inteiro entre 1 e 10. sintaxe do condicional “se (numero >= 1) e (numero <=10){}” 2. Fazer uma classe Calculadora que receba 2 objetos da classe Numero. 3. Fazer um método na classe Calculadora para somar os 2 objetos do tipo Numero e retornar um outro objeto do tipo numero com o resultado. 60
  61. 61. Eduardo Ricoldi Objetos úteis Pratica: classe Numero{ int numero Numero(int nNumero){ se (nNumero > 0) e (nNumero < 10){ numero = nNumero } int pegarNumero(){ return numero; } } 61
  62. 62. Eduardo Ricoldi Objetos úteis classe Calculadora{ Numero num1 Numero num2 Calculadora(Numero novo1, Numero novo2){ num1 = novo1 num2 = novo2 } Numero somar(){ Numero resultado = nova Numero(numero1.pegarNumero() + numero2.pegarNumero()) return resultado } } 62
  63. 63. Eduardo Ricoldi Mensagens e relacionamentos O nome que damos a um objeto chamando um método de outro objeto é troca de mensagens. Ela esta embutida em um conceito chamado de “Associação” que é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples “tem-um" ou de um acoplamento “é-um". 63
  64. 64. Eduardo Ricoldi Mensagens e relacionamentos Um exemplo de relacionamento “tem-um” classe Calculadora{ Numero num1 } A classe Calculadora tem um objeto do tipo Numero. 64
  65. 65. Eduardo Ricoldi Mensagens e relacionamentos Um exemplo de relacionamento “é-um” classe Computador estende Calculadora{ } A classe Computador parte de uma classe Calculadora ou seja computador também é uma calculadora. É o que chamamos normalmente de “herança” ou seja Computador herda de calculadora tudo que Calculadora diz que tem e é capaz de fazer o que uma calculadora pode fazer. 65
  66. 66. Eduardo Ricoldi Herança É o mecanismo pelo qual uma classe pode utilizar o mapa de objeto de outra classe, aproveitando seus comportamentos (métodos) e possíveis variáveis (atributos). Com a herança podemos pegar objetos diferentes mas que possuem alguma semelhança e economizar trechos de código fonte em um mapa de objetos. Então o que acontece quando o compilador pega uma classe que herda de outra é, juntar o mapa de objetos da super-classe e mesclá-lo com da classe-filha. 66
  67. 67. Eduardo Ricoldi Herança classe Calculadora{ int num1 int num2 Calculadora(int novo1, int novo2){ num1 = novo1 num2 = novo2 } Numero somar(){} } classe Computador estende Calculadora{ jogar(){} } classe Main{ testaComputador(){ Computador pc = nova Computador(1,2) pc.somar() pc.jogar() } } 67
  68. 68. Eduardo Ricoldi Herança Int numero1 = 1 Int numero2 = 1 Calculadora somar() calculadora Olhando dentro da memória podemos ver que a super classe fica embutida na classe filha (sub-classe): computador jogar() 68
  69. 69. Eduardo Ricoldi Herança Em um objeto de uma classe com herança não é possível nem necessário saber se o método, atributo ou construtor do objeto é dele mesmo ou herdado da classe pai. Mas para a própria classe filha utilizar os recursos de sua classe pai é necessário o uso de uma palavra reservada tanto para acessar atributos, métodos ou construtores. Aqui definiremos que a palavra reservada para acessar a super classe será “super” 69
  70. 70. Eduardo Ricoldi Herança Portanto se estivermos dentro de uma classe e formos chamar o construtor da super classe faremos: classe Pai{ String parte1 Pai(String parte){ parte1 = parte } } classe Filha estende Pai{ String parte2 Filha(String nParte1, String nParte2){ super(nParte1) parte2 = nParte2 } } 70
  71. 71. Eduardo Ricoldi Herança Portanto se estivermos dentro de uma classe e formos chamar um método da super classe faremos: classe Pai{ String parte1 String pegaParte1(){ retorna parte1 } } classe Filha estende Pai{ String parte2 String pegaPartes(){ String parte1 = super. pegaParte1() retorna parte1 + parte2 } } 71
  72. 72. Eduardo Ricoldi Herança Pratica: 1. Fazer uma classe Carro e uma Classe Conversível. Não é necessário fazer o conteúdo de métodos (somente a assinatura) e o construtor. 72
  73. 73. Eduardo Ricoldi Herança Pratica: classe Carro{ String modelo int portas Carro(String nModelo, int nPortas){ modelo = nModelo portas = nPortas } acelerar() frear() } 73
  74. 74. Eduardo Ricoldi Herança Pratica: classe Conversivel estende Carro{ Conversivel (String nModelo, int nPortas){ super(nModelo, nPortas) } abaixarCapo(){} levantarCapo(){} } 74
  75. 75. Eduardo Ricoldi Herança Uma fabrica que constrói e testa carros Exemplo: classe Fabrica{ criarTestar(){ Carro carango = nova Carro() carango.acelerar() } } 75
  76. 76. Eduardo Ricoldi Herança Exemplo: classe Fabrica{ criarTestar(){ Conversivel carango = nova Conversivel() carango.frear() carango.abrirCapo() } } 76
  77. 77. Eduardo Ricoldi Herança - Generalização A herança é um modo de generalizar dizendo que todos os objetos descendentes daquele tipo são algo ou fazem algo. Deixando o foco na ação que realmente interessa para o chamador. Por exemplo uma classe manobrista não precisa saber qual o modelo do carro e nem os recursos que diferencia um de outro, ele sabe que é um carro e que possui os métodos que ele precisa. 77
  78. 78. Eduardo Ricoldi Herança - Generalização Exemplo: classe Manobrista{ estacionar(Carro odroga){ odroga.acelerar() odroga.frear() } } 78
  79. 79. Eduardo Ricoldi Herança - Generalização Exemplo: classe Hotel{ Manobrista ze = nova Manobrista() estacionamento(){ ze.estacionar(fusca) ze.estacionar(gol) ze.estacionar(rollsroyce) ze.estacionar(hummer) ze.estacionar(cb500) << cb500 é uma moto e não estende carro } } 79
  80. 80. Eduardo Ricoldi Herança - Generalização Exemplo: classe Manobrista{ estacionar(Carro odroga){ odroga.acelerar() odroga.frear() odroga.fecharCapo() << carro não possui este método porque esta ação é especifica de alguns modelos } } 80
  81. 81. Eduardo Ricoldi Abstração É a habilidade de concentrar os aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Porem não podem existir no universo do programa sem um objeto concreto o envolvendo. Por isso esta diretamente ligada a herança. 81
  82. 82. Eduardo Ricoldi Abstração Não é possível dizer como um veiculo estaciona ou freia só chamando ele de veiculo. Uma moto é um veiculo e um carro é um veiculo, mas nenhum dos 2 aceleram ou freiam do mesmo jeito. Assim um método dirigir recebendo uma moto e um método dirigir recebendo um carro, são capazes de dirigir os objetos. Sendo assim veiculo é abstrato, porque não pode determinar o que é e nem como funciona por si só. 82
  83. 83. Eduardo Ricoldi Abstração Para dizer que uma classe é abstrata existe uma palavra reservada, aqui ela será “abstrata” e deve estar na assinatura da classe: classe abstrata Veiculo{ } 83
  84. 84. Eduardo Ricoldi Abstração - Responsabilidade A classe abstrata por sempre e somente ser pai de outra classe pode delegar responsabilidades as suas filhas utilizando a palavra “abstrata” na assinatura do método alem do que esta na assinatura da classe. classe abstrata Veiculo{ abstrata acelerar() } 84
  85. 85. Eduardo Ricoldi Abstração - Responsabilidade Por se tratar de uma responsabilidade a classe abstrata não implementa o conteúdo do método, só passa ele para outra classe implementar. Deste modo é possível garantir que todas as classes filhos da classe abstrata vão herdar suas responsabilidades e fazê-las corretamente. 85
  86. 86. Eduardo Ricoldi Abstração - Responsabilidade Pratica: Implemente os atributos e as assinaturas dos métodos de ação das classes abaixo. classe Veiculo {} classe Moto estende Veiculo{} classe Carro estende Veiculo{} 86
  87. 87. Eduardo Ricoldi Abstração - Responsabilidade Pratica: Implemente os atributos e as assinaturas dos métodos de ação para uma classe Motorista que pode estacionar carros e motos. 87
  88. 88. Eduardo Ricoldi Abstração - Responsabilidade classe abstrata Veiculo { String modelo String cor; Veiculo(String pModelo, String pCor){ modelo = pModelo cor = pCor } abstrata acelerar() abstrata frear() } 88
  89. 89. Eduardo Ricoldi Abstração - Responsabilidade classe Moto estende Veiculo{ int cilindradas acelerar(){ torce o cabo } frear(){ aperta a manete } } 89
  90. 90. Eduardo Ricoldi Abstração - Responsabilidade classe Carro estende Veiculo{ int portas acelerar(){ pisa no pedal do acelerador } frear(){ pisa no pedal do freio } } 90
  91. 91. Eduardo Ricoldi Abstração - Responsabilidade Se o objeto manobrista estacionar veículos ele aceitará carros e motos, pois só precisa saber que tem que acelerar e frear. classe Manobrista{ estacionar(Veiculo odroga){ odroga.acelerar() odroga.frear() } } 91
  92. 92. Eduardo Ricoldi Polimorfismo Consiste em quatro propriedades que a linguagem tem a liberdade de implementar, porem para orientação a objetos nem todas as propriedades são necessárias. As mais utilizadas são: Inclusão: um objeto do tipo da superclasse que contem uma referencia a um objeto de uma subclasse. Sobrecarga: métodos com o mesmo nome mas parâmetros diferentes. Coerção: a linguagem faz as conversões implicitamente com base nos mapas de objetos primitivos. 92
  93. 93. Eduardo Ricoldi Polimorfismo - Inclusão Na classe Manobrista o tipo do parâmetro recebido é Veiculo mas dentro esta inserido um objeto concreto que pode ser de qualquer Classe que estenda de Veiculo. classe Manobrista{ estacionar(Veiculo odroga){ odroga.acelerar() odroga.frear() } } 93
  94. 94. Eduardo Ricoldi Polimorfismo - Sobrecarga Quando mais de um método possui o mesmo nome mas tem parâmetros diferentes o compilador chama o método que possui o parâmetro mais próximo do passado na chamada do método 94
  95. 95. Eduardo Ricoldi Polimorfismo - Sobrecarga classe Mae{ darNome(Filho filho){ filho.defineNome(“João”) } darNome(Filha filha){ filha.defineNome(“Maria”) } } classe Medico{ fazerParto(Mae paciente){ paciente.darNome( nova Filho()) } } 95
  96. 96. Eduardo Ricoldi Polimorfismo - Sobrecarga classe Mae{ darNome(Filho filho){ filho.defineNome(“João”) } darNome(Filha filha){ filha.defineNome(“Maria”) } } classe Medico{ fazerParto(Mae paciente){ paciente.darNome( nova Filha()) } } 96
  97. 97. Eduardo Ricoldi Polimorfismo – Coerção ou Generalização Coerção é a parte automática do compilador para efetuar uma generalização. Como vimos quando uma classe estende outra a subclasse pode entrar em qualquer lugar da superclasse, porem não poderá fazer para quem o vê nada diferente do que a superclasse faz a não ser que ele for redefinido como seu próprio tipo. Ou seja quando um objeto do tipo Atleta é inserido ou passado por parâmetro para um método do tipo pessoa ele se torna quem o vê uma pessoa e não pode fazer nada diferente de Pessoa. 97
  98. 98. Eduardo Ricoldi Polimorfismo – Coerção (Generalização) classe Pessoa{ conversar(){ retorna “novela” } desligar(){ conteúdo } } classe Atleta estende Pessoa{ conversar(){ retorna “esportes” } correr(){ conteúdo } } classe Telefone{ escutarConversa(Pessoa pessoa){ pessoa. } } conversar() desligar() 98
  99. 99. Eduardo Ricoldi Polimorfismo – Coerção (Convertendo) classe Pessoa{ conversar(){ retorna “novela” } desligar(){ conteúdo } } classe Atleta estende Pessoa{ conversar(){ retorna “esportes” } correr(){ conteúdo } } classe Telefone{ escutarConversa(Pessoa pessoa){ Atleta virso = (Atleta)pessoa) virso. } } conversar() desligar() correr() 99
  100. 100. Eduardo Ricoldi Interface É um contrato entre a classe e o mundo do programa. Quando uma classe implementa uma interface, ela está comprometida a fornecer o comportamento publicado pela interface. Ou seja diz que ela pode se passar por algo, mas que deve ter os comportamentos descritos na regra do contrato. Interface é como uma classe abstrata sem nenhum atributo e método implementado. 100
  101. 101. Eduardo Ricoldi Interface Exemplo comer() Classe abstrata Animal comer() Classe Cachorro estende Animal comer() falar() Classe Pessoa estende Animal Implementa Falador falar() Interface Falador comer() falar() Classe Papagaio estende Animal Implementa Falador 101
  102. 102. Eduardo Ricoldi Interface Neste caso temos que as classes Cachorro, Pessoa e Papagaio estendem de animal, porem nem todas são capazes de falar assim, falar não é algo comum de Animal mas sim de faladores. 102
  103. 103. Eduardo Ricoldi Interface Voltando ao exemplo da classe Telefone: classe Telefone{ escutarConversa(Pessoa pessoa){ pessoa.falar() } } Se mudarmos o parâmetro do tipo Pessoa para Falador o telefone não precisa se preocupar se é uma pessoa ou um papagaio ou outra classe qualquer que tenha um contrato dizendo que ela é faladora. 103
  104. 104. Eduardo Ricoldi Interface Nossa classe alterada: classe Telefone{ escutarConversa(Falador falante){ falante.falar() } } 104
  105. 105. Eduardo Ricoldi Interface Pratica: Fazer o conjunto de classes necessárias para um sistema de banco de dados com objetos de tabelas e uma classe de conexão com o banco que aceite qualquer objeto de tabela. Classe Cliente{ int id String nome } Classe Forncecedor{ String razao String telefone } Classe Produto{ int codigo String descricao int quantidade } Objetos de tabelas 105
  106. 106. Eduardo Ricoldi Interface interface ObjetoBanco{ String montaInsert() String montaSelect() String montaUpdate() String montaDelete() } 106
  107. 107. Eduardo Ricoldi Interface classe Cliente implementa ObjetoBanco{ int id String nome String montaInsert(){ retorna “insert into cliente values(“ + id + nome + “)” } ... } 107
  108. 108. Eduardo Ricoldi Interface classe Produto implementa ObjetoBanco{ int codigo String descricao int quantidade ... String montaInsert(){ retorna “insert into cliente values(“ + codigo + descricao + quantidade “)” } ... } 108
  109. 109. Eduardo Ricoldi Interface classe Banco { boolean inserir(ObjetoBanco objeto){ String sql = objeto.montaInsert() retorna driverBanco.execute(sql) } } 109
  110. 110. Eduardo Ricoldi Encapsulamento Consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. 110
  111. 111. Eduardo Ricoldi Encapsulamento Os principais modificadores de acesso em orientação a objetos são: Private Protected Public 111
  112. 112. Eduardo Ricoldi Encapsulamento Private É o modificador que define que o atributo ou método para só poder ser visto dentro do próprio objeto. classe Teste{ private int pegaNumero(){...} executar(){ pegaNumero() } } 112
  113. 113. Eduardo Ricoldi Encapsulamento Protected É o modificador que define o atributo ou método para só poder ser visto por uma sub-classe. classe Teste{ protected int pegaNumero(){...} } classe Main estende Teste{ executar(){ pegaNumero() } } 113
  114. 114. Eduardo Ricoldi Encapsulamento Public É o modificador que define para atributo ou método que o mesmo pode ser visto de qualquer lugar. class Teste{ public int pegaNumero(){} } class Main{ nova Teste(). pegaNumero() } 114
  115. 115. Eduardo Ricoldi Encapsulamento public classe Calculadora{ public int n1 public int n2 public int op public Calculadora(int operacao){ op = operacao } public int calcular(){ se (op == 1){ retorna n1 + n2 }senao { returna n1 / n2 } } } public classe Operadora{ fazerConta(){ Calculadora calc = nova Calculadora() calc.operacao = 2 calc.n1 = 2 calc.n2 = 0 calc.calcular() } } Pratica: Encapsular os métodos para não ocorrer erros de divisão por zero *Não alterar nada no método calcular 115
  116. 116. Eduardo Ricoldi Encapsulamento public classe Calculadora{ private int n1 private int n2 private int op public Calculadora(int operacao, int nn1, int nn2){ op = operacao se (operacao = 1){ n2 = nn2 }senao{ n2 = 1; } } public int calcular(){ se (op = 1){ retorna n1 + n2 }senao { returna n1 / n2 } } 116
  117. 117. Eduardo Ricoldi Aplicando orientação a objetos Pratica: Um sistema de um banco clientes que possuem contas (simples e especial), estes clientes utilizam um caixa eletrônico para efetuarem saques, depósitos e transferências entre contas. Conta simples: permite mais de um dono permite criar sub-contas e trocá-las entre clientes Especial: permite todas as opções da conta simples permite trocar mensagens entre os clientes de contas especiais Encontrar e definir os objetos do sistema (atributos e ações) Fazer as trocas de mensagem e uma classe Robô que vai simular clientes fazendo saques, depósitos e transferências. 117

×