SlideShare uma empresa Scribd logo
Eduardo Ricoldi
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 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
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
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
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
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. Porto
classe Nome{
Tipo Rotulo1
Tipo Rotulo2
}
22
Eduardo Ricoldi
Atributos
Pratica: Criar as classes abaixo com seus atributos
Navio
classe Navio{
String nome
int tamanho
String carga
int peso
}
23
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
Eduardo Ricoldi
Atributos
Pratica:
1. Criar uma classe Carro que leve 1 pessoa.
2. Criar uma classe navio que leve pessoas e carros.
25
Eduardo Ricoldi
Atributos
Pratica:
1. Criar uma classe navio que leve pessoas e carros.
classe Navio {
Pessoa[] pessoas
Carro[] carros
}
26
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
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
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
Eduardo Ricoldi
Métodos
Exemplo:
nome(argumentos) {
corpo do método
}
classe Pessoa{
String nome
defineNome(String novoNome){
nome = novoNome
}
30
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
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
Eduardo Ricoldi
Métodos
Pratica:
1. Criar os métodos para definir e pegar os passageiros
classe Carro{
Pessoa[] passageiros
}
33
Eduardo Ricoldi
Métodos
Pratica:
1. Criar os métodos para definir e pegar os atributos
classe Navio {
Pessoa[] pessoas
Carro[] carros
}
34
Eduardo Ricoldi
Métodos
Pratica:
classe Navio {
Pessoa[] pessoas
Carro[] carros
definePessoas(Pessoa[] novasPessoas){
pessoas = novasPessoas
}
defineCarros(Carro[] novosCarros){
carros = novosCarros
}
}
35
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
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
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
Eduardo Ricoldi
Analisando o ambiente
Um sistema para controle de estoque em uma
farmácia.
Defina seus objetos
Defina os relacionamentos
39
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
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
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 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
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
Eduardo Ricoldi
Construtores
Exemplo:
classe Pessoa{
String nome
Int idade
Pessoa(){
nome = “”
idade = 0;
}
Pessoa(String nomeEntrada, int idadeEntrada){
nome = nomeEntrada
idade = idadeEntrada
}
...
}
45
Eduardo Ricoldi
Construtores
Pratica: Criar os construtores para as classes criadas
anteriormente.
*Não é necessário o conteúdo dos construtores
46
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
Eduardo Ricoldi
Utilizando objetos
Olhando dentro da memória (em alto nível):
String nome
Int idade
defineNome()
pegaNome()
defineIdade()
pegaIdade()
pessoa1 pessoa2
48
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
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
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
Eduardo Ricoldi
Objetos úteis
Pratica:
1. Fazer uma classe calculadora que pode operar com 2
números (Atributos e modificadores de atributos).
52
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
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
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
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 resultado
Calculadora
somar()
retornaResultado()
calculadora
57
Eduardo Ricoldi
Objetos úteis
Pratica:
fazConta(){
Calculadora objeto = nova Calculadora(1, 1)
objeto.somar()
objeto.retornaResultado()
}
58
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Eduardo Ricoldi
Herança
Pratica:
classe Carro{
String modelo
int portas
Carro(String nModelo, int nPortas){
modelo = nModelo
portas = nPortas
}
acelerar()
frear()
}
73
Eduardo Ricoldi
Herança
Pratica:
classe Conversivel estende Carro{
Conversivel (String nModelo, int nPortas){
super(nModelo, nPortas)
}
abaixarCapo(){}
levantarCapo(){}
}
74
Eduardo Ricoldi
Herança
Uma fabrica que constrói e testa carros
Exemplo:
classe Fabrica{
criarTestar(){
Carro carango = nova Carro()
carango.acelerar()
}
}
75
Eduardo Ricoldi
Herança
Exemplo:
classe Fabrica{
criarTestar(){
Conversivel carango = nova Conversivel()
carango.frear()
carango.abrirCapo()
}
}
76
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
Eduardo Ricoldi
Herança - Generalização
Exemplo:
classe Manobrista{
estacionar(Carro odroga){
odroga.acelerar()
odroga.frear()
}
}
78
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
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
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
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
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
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
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
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
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
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
Eduardo Ricoldi
Abstração - Responsabilidade
classe Moto estende Veiculo{
int cilindradas
acelerar(){
torce o cabo
}
frear(){
aperta a manete
}
}
89
Eduardo Ricoldi
Abstração - Responsabilidade
classe Carro estende Veiculo{
int portas
acelerar(){
pisa no pedal do acelerador
}
frear(){
pisa no pedal do freio
}
}
90
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
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
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
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
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
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
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
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
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
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
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
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
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
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 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
Eduardo Ricoldi
Interface
interface ObjetoBanco{
String montaInsert()
String montaSelect()
String montaUpdate()
String montaDelete()
}
106
Eduardo Ricoldi
Interface
classe Cliente implementa ObjetoBanco{
int id
String nome
String montaInsert(){
retorna “insert into cliente values(“ + id + nome + “)”
}
...
}
107
Eduardo Ricoldi
Interface
classe Produto implementa ObjetoBanco{
int codigo
String descricao
int quantidade
...
String montaInsert(){
retorna “insert into cliente values(“ + codigo + descricao + quantidade “)”
}
...
}
108
Eduardo Ricoldi
Interface
classe Banco {
boolean inserir(ObjetoBanco objeto){
String sql = objeto.montaInsert()
retorna driverBanco.execute(sql)
}
}
109
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
Eduardo Ricoldi
Encapsulamento
Os principais modificadores de acesso em orientação a
objetos são:
Private
Protected
Public
111
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
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
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
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
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
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

Mais conteúdo relacionado

Mais procurados

O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetosNécio de Lima Veras
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
Leonardo Melo Santos
 
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
 
INTRODUÇÃO À ORIENTAÇÃO A OBJETO
INTRODUÇÃO À ORIENTAÇÃO A OBJETOINTRODUÇÃO À ORIENTAÇÃO A OBJETO
INTRODUÇÃO À ORIENTAÇÃO A OBJETO
Rodrigo Pk
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
Elaine Cecília Gatto
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
Ludimila Monjardim Casagrande
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
Mayron Cachina
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
Leonardo Melo Santos
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
Secretaria de Educação de Goiás
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetosdanielrpgj30
 
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
 
TESTE
TESTETESTE
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
Jamildo Feitosa
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
Cleyton Ferrari
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
César Augusto Pessôa
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
Pedro De Almeida
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
Luis Ferreira
 

Mais procurados (20)

O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
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)
 
INTRODUÇÃO À ORIENTAÇÃO A OBJETO
INTRODUÇÃO À ORIENTAÇÃO A OBJETOINTRODUÇÃO À ORIENTAÇÃO A OBJETO
INTRODUÇÃO À ORIENTAÇÃO A OBJETO
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
POO - 07 - Operadores do Java
POO - 07 - Operadores do  JavaPOO - 07 - Operadores do  Java
POO - 07 - Operadores do Java
 
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
 
TESTE
TESTETESTE
TESTE
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 

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

v
vv
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
antonio sérgio nogueira
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
César Augusto Pessôa
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
Juliano Weber
 
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
 
Desenvolvimento de aplicações web em Dart
Desenvolvimento de aplicações web em DartDesenvolvimento de aplicações web em Dart
Desenvolvimento de aplicações web em Dart
Roger Ritter
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-concepts
jorge600
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
Ramon Mayor Martins
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
Rogerio Fontes
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
Iury Teixeira
 
Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11Luis Ferreira
 
Orientação a objetos java
Orientação a objetos javaOrientação a objetos java
Orientação a objetos javavicnetepc
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
Lucas Furtado de Oliveira
 

Semelhante a [Lógica] Orientação a Objetos descomplicada (20)

v
vv
v
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
aula 1.pptx
aula 1.pptxaula 1.pptx
aula 1.pptx
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Aula4
Aula4Aula4
Aula4
 
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#
 
Desenvolvimento de aplicações web em Dart
Desenvolvimento de aplicações web em DartDesenvolvimento de aplicações web em Dart
Desenvolvimento de aplicações web em Dart
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-concepts
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Java7
Java7Java7
Java7
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11
 
Orientação a objetos java
Orientação a objetos javaOrientação a objetos java
Orientação a objetos java
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
 

Último

PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básicoPowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
Pereira801
 
Junho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na IgrejaJunho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na Igreja
Comando Resgatai
 
Caça-palavras ortografia M antes de P e B.
Caça-palavras    ortografia M antes de P e B.Caça-palavras    ortografia M antes de P e B.
Caça-palavras ortografia M antes de P e B.
Mary Alvarenga
 
O autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdfO autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdf
Letícia Butterfield
 
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
"Está o lascivo e   doce passarinho " de Luís Vaz de Camões"Está o lascivo e   doce passarinho " de Luís Vaz de Camões
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
goncalopecurto
 
o que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sulo que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sul
CarlaInsStaub
 
Apresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao AssédioApresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao Assédio
ifbauab
 
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdfEJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
Escola Municipal Jesus Cristo
 
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdfcurso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
LeandroTelesRocha2
 
curso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdfcurso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdf
LeandroTelesRocha2
 
Caderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino MédioCaderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino Médio
rafaeloliveirafelici
 
proposta curricular ou plano de cursode lingua portuguesa eja anos finais ( ...
proposta curricular  ou plano de cursode lingua portuguesa eja anos finais ( ...proposta curricular  ou plano de cursode lingua portuguesa eja anos finais ( ...
proposta curricular ou plano de cursode lingua portuguesa eja anos finais ( ...
Escola Municipal Jesus Cristo
 
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
CrislaineSouzaSantos
 
Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.
FelipeCavalcantiFerr
 
Saudações e como se apresentar em português
Saudações e como se apresentar em portuguêsSaudações e como se apresentar em português
Saudações e como se apresentar em português
jacctradutora
 
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdfProjeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Bibliotecas Infante D. Henrique
 
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir"  - Jorge e MateusAtividade - Letra da música "Tem Que Sorrir"  - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Mary Alvarenga
 
Unificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da AlemanhaUnificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da Alemanha
Acrópole - História & Educação
 
América Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados NacionaisAmérica Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados Nacionais
Valéria Shoujofan
 
Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.
RafaelNeves651350
 

Último (20)

PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básicoPowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
 
Junho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na IgrejaJunho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na Igreja
 
Caça-palavras ortografia M antes de P e B.
Caça-palavras    ortografia M antes de P e B.Caça-palavras    ortografia M antes de P e B.
Caça-palavras ortografia M antes de P e B.
 
O autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdfO autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdf
 
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
"Está o lascivo e   doce passarinho " de Luís Vaz de Camões"Está o lascivo e   doce passarinho " de Luís Vaz de Camões
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
 
o que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sulo que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sul
 
Apresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao AssédioApresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao Assédio
 
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdfEJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
 
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdfcurso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
 
curso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdfcurso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdf
 
Caderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino MédioCaderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino Médio
 
proposta curricular ou plano de cursode lingua portuguesa eja anos finais ( ...
proposta curricular  ou plano de cursode lingua portuguesa eja anos finais ( ...proposta curricular  ou plano de cursode lingua portuguesa eja anos finais ( ...
proposta curricular ou plano de cursode lingua portuguesa eja anos finais ( ...
 
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
 
Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.
 
Saudações e como se apresentar em português
Saudações e como se apresentar em portuguêsSaudações e como se apresentar em português
Saudações e como se apresentar em português
 
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdfProjeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
 
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir"  - Jorge e MateusAtividade - Letra da música "Tem Que Sorrir"  - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
 
Unificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da AlemanhaUnificação da Itália e a formação da Alemanha
Unificação da Itália e a formação da Alemanha
 
América Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados NacionaisAmérica Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados Nacionais
 
Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.Manejo de feridas - Classificação e cuidados.
Manejo de feridas - Classificação e cuidados.
 

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

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Eduardo Ricoldi Mapa de objetos letras: [O][i] O 0100 1111 i 0110 1001 String Char Bytes 16
  • 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. 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. 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. 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. Eduardo Ricoldi Atributos Classe do tipo pessoa e alguns atributos. classe Pessoa{ String nome; int idade; } 21
  • 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. Eduardo Ricoldi Atributos Pratica: Criar as classes abaixo com seus atributos Navio classe Navio{ String nome int tamanho String carga int peso } 23
  • 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. 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. Eduardo Ricoldi Atributos Pratica: 1. Criar uma classe navio que leve pessoas e carros. classe Navio { Pessoa[] pessoas Carro[] carros } 26
  • 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. 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. 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. Eduardo Ricoldi Métodos Exemplo: nome(argumentos) { corpo do método } classe Pessoa{ String nome defineNome(String novoNome){ nome = novoNome } 30
  • 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. 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. Eduardo Ricoldi Métodos Pratica: 1. Criar os métodos para definir e pegar os passageiros classe Carro{ Pessoa[] passageiros } 33
  • 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. Eduardo Ricoldi Métodos Pratica: classe Navio { Pessoa[] pessoas Carro[] carros definePessoas(Pessoa[] novasPessoas){ pessoas = novasPessoas } defineCarros(Carro[] novosCarros){ carros = novosCarros } } 35
  • 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. 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. 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. Eduardo Ricoldi Analisando o ambiente Um sistema para controle de estoque em uma farmácia. Defina seus objetos Defina os relacionamentos 39
  • 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. 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. Eduardo Ricoldi Carregando objetos Olhando dentro da memória (em alto nível): pessoa1 pessoa2 42
  • 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. 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. 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. Eduardo Ricoldi Construtores Pratica: Criar os construtores para as classes criadas anteriormente. *Não é necessário o conteúdo dos construtores 46
  • 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. 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. 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. 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. 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. Eduardo Ricoldi Objetos úteis Pratica: 1. Fazer uma classe calculadora que pode operar com 2 números (Atributos e modificadores de atributos). 52
  • 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. 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. 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
  • 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. Eduardo Ricoldi Objetos úteis Pratica: fazConta(){ Calculadora objeto = nova Calculadora(1, 1) objeto.somar() objeto.retornaResultado() } 58
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Eduardo Ricoldi Herança Pratica: classe Carro{ String modelo int portas Carro(String nModelo, int nPortas){ modelo = nModelo portas = nPortas } acelerar() frear() } 73
  • 74. Eduardo Ricoldi Herança Pratica: classe Conversivel estende Carro{ Conversivel (String nModelo, int nPortas){ super(nModelo, nPortas) } abaixarCapo(){} levantarCapo(){} } 74
  • 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. Eduardo Ricoldi Herança Exemplo: classe Fabrica{ criarTestar(){ Conversivel carango = nova Conversivel() carango.frear() carango.abrirCapo() } } 76
  • 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. Eduardo Ricoldi Herança - Generalização Exemplo: classe Manobrista{ estacionar(Carro odroga){ odroga.acelerar() odroga.frear() } } 78
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Eduardo Ricoldi Abstração - Responsabilidade classe Moto estende Veiculo{ int cilindradas acelerar(){ torce o cabo } frear(){ aperta a manete } } 89
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Eduardo Ricoldi Interface Nossa classe alterada: classe Telefone{ escutarConversa(Falador falante){ falante.falar() } } 104
  • 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. Eduardo Ricoldi Interface interface ObjetoBanco{ String montaInsert() String montaSelect() String montaUpdate() String montaDelete() } 106
  • 107. Eduardo Ricoldi Interface classe Cliente implementa ObjetoBanco{ int id String nome String montaInsert(){ retorna “insert into cliente values(“ + id + nome + “)” } ... } 107
  • 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. Eduardo Ricoldi Interface classe Banco { boolean inserir(ObjetoBanco objeto){ String sql = objeto.montaInsert() retorna driverBanco.execute(sql) } } 109
  • 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. Eduardo Ricoldi Encapsulamento Os principais modificadores de acesso em orientação a objetos são: Private Protected Public 111
  • 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. 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. 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. 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. 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. 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