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.
Ao final da aula, os alunos saberão identificar as principais diferenças entre a programação estruturada e a programação orientada a objetos.
Apresentar aos alunos uma pequena revisão de C# e a IDE Visual Studio.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
Ao final da aula, os alunos saberão identificar as principais diferenças entre a programação estruturada e a programação orientada a objetos.
Apresentar aos alunos uma pequena revisão de C# e a IDE Visual Studio.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
Ao final da aula, os alunos saberão identificar as principais diferenças entre a programação estruturada e a programação orientada a objetos.
Apresentar aos alunos uma introdução a linguagem C# e a IDE Visual Studio.
Orientação a Objetos para Desenvolvedores AndroidIury Teixeira
Material de Orientação a Objetos com Java objetivando auxiliar no aprendizado do paradigma e da linguagem Java, preparando o aluno para programar para Google Android
Livro de conscientização acerca do autismo, através de uma experiência pessoal.
O autismo não limita as pessoas. Mas o preconceito sim, ele limita a forma com que as vemos e o que achamos que elas são capazes. - Letícia Butterfield.
livro em pdf para professores da educação de jovens e adultos dos anos iniciais ( alfabetização e 1º ano)- material excelente para quem trabalha com turmas de eja. Material para quem dar aula na educação de jovens e adultos . excelente material para professores
regulamento de uniformes do colegio da policia militar do estado do tocantins regulamento de uniformes do colegio da policia militar do estado do tocantins regulamento de uniformes do colegio da policia militar do estado do tocantins regulamento de uniformes do colegio da policia militar do estado do tocantins regulamento de uniformes do colegio da policia militar do estado do tocantins regulamento de uniformes do colegio da policia militar do estado do tocantins regulamento de uniformes do colegio da policia militar do estado do tocantins
proposta curricular para educação de jovens e adultos- Língua portuguesa- anos finais do ensino fundamental (6º ao 9º ano). Planejamento de unidades letivas para professores da EJA da disciplina língua portuguesa- pode ser trabalhado nos dois segmentos - proposta para trabalhar com alunos da EJA com a disciplina língua portuguesa.Sugestão de proposta curricular da disciplina português para turmas de educação de jovens e adultos - ensino fundamental. A proposta curricular da EJa lingua portuguesa traz sugestões para professores dos anos finais (6º ao 9º ano), sabendo que essa modalidade deve ser trabalhada com metodologias diversificadas para que o aluno não desista de estudar.
Projeto de articulação curricular:
"aLeR+ o Ambiente - Os animais são nossos amigos" - Seleção de poemas da obra «Bicho em perigo», de Maria Teresa Maia Gonzalez
Atividade - Letra da música "Tem Que Sorrir" - Jorge e MateusMary Alvarenga
A música 'Tem Que Sorrir', da dupla sertaneja Jorge & Mateus, é um apelo à reflexão sobre a simplicidade e a importância dos sentimentos positivos na vida. A letra transmite uma mensagem de superação, esperança e otimismo. Ela destaca a importância de enfrentar as adversidades da vida com um sorriso no rosto, mesmo quando a jornada é difícil.
América Latina: Da Independência à Consolidação dos Estados NacionaisValéria Shoujofan
Aula voltada para alunos do Ensino Médio focando nos processos de Independência da América Latina a partir dos antecedentes até a consolidação dos Estados Nacionais.
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
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
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
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
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
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
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
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
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
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
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
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
75. Eduardo Ricoldi
Herança
Uma fabrica que constrói e testa carros
Exemplo:
classe Fabrica{
criarTestar(){
Carro carango = nova Carro()
carango.acelerar()
}
}
75
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
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
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
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
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
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
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
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