Hiromiti Nakagawa – Treinamento Java Básico
Julho, 2013
Java Básico
© 2009 IBM Corporation
Treinamento Java Básico
Agenda
Orientação a Objetos
Exercícios
2 © 2009 IBM Corporation
Orientação a Objetos
Paradigma de programação
– Modelo ou padrão que orienta a forma como desenvolvedores de software analisam problemas e
definem soluções para estes problemas
– No paradigma OO a estratégia de desenvolvimento baseia-se no conceito que sistemas devem ser
construídos a partir de uma coleção de componentes reusáveis, chamados de objetos, que
englobam dados e funcionalidade (contrastando com o paradigma procedural que separa dados e
funcionalidades)
Um programa Orientado a Objetos consiste de uma coleção de objetos interagindo entre si
Classes representam tipos de dados complexos e englobam estado (variáveis) e operações (métodos)
Objetos são instâncias de uma classe e trabalham em conjunto para produzir os resultados esperados:
– Recebem mensagens
– Processam dados
– Enviam mensagens
– Desempenham um papel específico e bem definido
Estratégias
– Paradigma Procedural: quais são as instruções e procedimentos necessários para resolver o
problema?
– Paradigma Orientado a Objetos: que objetos do domínio do problema devo abstrair para resolver o
problema?
– Paradigma Lógico: quais são as regras lógicas - proposições - do problema?
– Paradigma Funcional: como decompor o problema em funções e organizá-lo recursivamente?
3 © 2009 IBM Corporation
Orientação a Objetos
Modelo computacional
– Dividir para conquistar
Entrada Programa Saída
Estado
Entrada Programa Saída Entrada Programa Saída Entrada Programa Saída
.. .. ..
Estado Estado Estado
4
. . .© 2009 IBM Corporation
Orientação a Objetos
Solucionando problemas usando OO
– Assemelha-se com a forma como humanos resolvem problemas do dia a dia:
• Identificar o problema
• Identificar quais objetos são necessários para resolver o problema
• Definir como usar esses objetos em sequência para obter o resultado desejado
– OO:
• Identificar o problema
• Identificar os objetos necessários para resolver o problema, como usá-los e em que
sequência
• Identificar as mensagens (operações)
• Criar a sequência de mensagens necessárias para resolver o problema
5 © 2009 IBM Corporation
Orientação a Objetos
Estrutura o código de maneira mais eficaz e ajuda a resolver problemas enfrentados do
paradigma procedural
– Repetição de código
– Complexidade de manutenção do código
– Legibilidade do código (métodos extensos)
– Dados e funcionalidade não são conectados
– Código altamente dependente (sem separação de papéis ou responsabilidades)
Vantagens:
– Eficiência
– Modelagem “natural”, aproximando aplicações do mundo real
– Paradigma dominante e bem estabelecido
– Classes estimulam projeto centrado em dados: modularidade, reusabilidade e
extensibilidade
– Aceitação comercial crescente
– Código mais facil de entender
– Maior grau de reuso
– Facilita a manutenção
6 © 2009 IBM Corporation
Orientação a Objetos
Classe
– Tipo de dados complexo
– Abstrai características (atributos) e comportamentos
(métodos) comuns a um conjunto de objetos
– Possui nome, atributos (característica/estado) e métodos
(operações)
Objetos
– Instância de uma ou mais classes
– Possui características e comportamentos
7 © 2009 IBM Corporation
Orientação a Objetos
Atributo
– Representa um estado ou característica de um objeto
– Declarados no corpo da classe (variáveis de instância)
• Cada objeto instanciado possui seu próprio conjunto de atributos
– Valores atribuídos aos atributos de uma classe distinguem um objeto de outro
Método
– Representam comportamentos que um objeto pode ter
– Define operações que um objeto pode realizar/participar
– Têm acesso aos atributos definidos para a classe
– Local onde se define o código que faz o processamento dos dados
– Um método representa uma mensagem que o objeto pode receber e tratar
8 © 2009 IBM Corporation
Orientação a Objetos
Abstração
– Categorização com base em atributos (características) comuns a um conjunto de
objetos relacionados
– Foco no que é comum, especificidades de lado
– Uma classe OO é uma abstração de um conjunto de objetos
– Exemplo:
• Vectra, Uno, Fusca, Ferrari F50
formam um conjunto de objetos
que podem ser abstraídos em uma
categoria Carro com atributos
como motor, ano, modelo, marca,
número de passageiros, etc
9 © 2009 IBM Corporation
Orientação a Objetos
Herança
– Permite que uma classe herde as características e comportamentos de outra classe
– A classe herdeira pode modificar características ou comportamentos, estendendo-as ou
customizando-as
– Estabelece uma relação do tipo “é um” (is a)
– Facilita a abstração
– Exemplo:
• A classe Pessoa (subclasse) pode herdar características e
comportamentos da classe Animal (superclasse):
nome, idade, genero, andar, comer. Mas ela pode definir características e
comportamentos que se aplicam apenas a objetos do tipo Pessoa: CPF, RG,
escolaridade, ler, estudar.
1 © 2009 IBM Corporation
0
1 © 2009 IBM Corporation
1
Orientação a Objetos
Abstração e Herança
1 © 2009 IBM Corporation
2
Orientação a Objetos
Abstração e Herança
– Todos os celulares possuem certas características
(atributos) e funcionalidades (métodos) em
comum, independente de suas características e
funcionalides específicas
1 © 2009 IBM Corporation
3
Orientação a Objetos
Abstração e Herança
1 © 2009 IBM Corporation
4
Orientação a Objetos
Construtores
– São métodos especiais destinados à instanciação e inicialização de novos objetos
Obrigatóriamente devem ter o mesmo nome que a classe
– Não é obrigatório a presença do mesmo em uma classe
• Se não houver nenhum construtor, o compilador adicionará um construtor Default,
sem parâmetros
– São acionados através do new() na instânciação de um objeto da classe
public class Person extends Animal {
public Person() {}
public Person(String name, String gender, int age){
[Link] = name;
[Link] = gender;
[Link] = age;
}
}
1 © 2009 IBM Corporation
5
Orientação a Objetos
this
– Representa o objeto/instancia corrente
– Usado para resolver conflitos de escopo de métodos e atributos quando se
sobreescreve métodos ou se faz shadowing de variáveis
super
– Representa o objeto/instancia da superclasse
– Permite referenciar atributos e métodos da superclasse
this()
– Invoca o construtor da classe atual
super()
– Invoca o construtor da superclasse
1 © 2009 IBM Corporation
6
1 © 2009 IBM Corporation
7
Orientação a Objetos
Modificadores
– static
• Recursos static pertencem à classe em si e não a instância da classe (objeto)
• Todos os objetos compartilham atributos static (similar à variável global do paradigma
procedural)
• Métodos e atributos static podem ser acessados por métodos normais (de instância) mas o
contrário não é verdade
every object calling static methods will face the same behavior
[Link]();
Dog dogInstance = new Dog();
[Link]();
– final
• Pode ser utilizado em um atributo ou método
Atributo: uma vez que o valor é atribuído não é possível alterar ou atribuir
outro valor
Método: não podem ser sobreescritos
1 © 2009 IBM Corporation
8
Orientação a Objetos
Agregação / Composição
– Relacionamento entre duas classes do tipo “tem-um” (has-a)
• Um Carro tem-um Motor
• Uma Casa tem-um Porta
– Representa a situação em que uma classe é agregada por ou composta de outra classe
• Composição: estabelece uma relação todo-parte no qual a parte não existe fora do
contexto do todo
• Agregação: a parte existe for a do contexto do todo
– Implementado por meio de variáveis de instancia do tipo que representa a parte,
definidas na classe que representa o todo
public class Parte{
…
}
public class Todo{
Parte partVar = new Parte();
…
}
1 © 2009 IBM Corporation
9
Orientação a Objetos
Encapsulamento
– Objetos interagem apenas por meio de mensagens: sem acesso direto aos dados
– Objetos só conhecem a interface (conjunto de mensagens disponíveis) de outro objeto
– Atributos e lógica de implementação não podem ser acessados por outros objetos
– Mecanismo que visa proteger os dados: utilizando métodos que operam sobre os dados,
impedindo o acesso direto e indevido aos atributos de um objeto
• Modificadores de acesso restritivos sobre os atributos definidos na classe
• Definir métodos que manipulam os valores destes atributos
– Exemplo: Saldo da conta bancária
• O saldo certamente não pode ser alterado ou manipulado diretamente, mas sim
através de métodos adequados para isso, como métodos que fazem lançamentos
de débitos e créditos
2 © 2009 IBM Corporation
0
Orientação a Objetos
Modificadores de acesso
– Determinam a visibilidade dos membros (atributos e métodos) da classe e da própria
classe
– Devem ser usados na declaração dos membros ou da classe
– Ao todo são quatro modificadores: public, protected, default e private
p u b lic p ro te c te d d e fa u lt p riva te
Pode ser acessado Pode ser acessado Pode ser acessado Pode ser acessado
p o r to d o m u n d o p o r s u b c la s s e s e p o r c la s s e s d o a p e n a s p e la
c la s s e s d o m e s m o m e s m o p a c o te p ró p ria c la s s e
p a c o te
2 © 2009 IBM Corporation
1
Orientação a Objetos
Modificadores de acesso
2 © 2009 IBM Corporation
2
Orientação a Objetos
2 © 2009 IBM Corporation
3
Orientação a Objetos
Polimorfismo
– Permitem que objetos de classes diferentes respondam a uma mesma mensagem
– Denota uma situação na qual um objeto pode se comportar de maneiras diferentes ao
receber uma mensagem, dependendo da classe utilizada para instanciar o objeto
– Utiliza:
• Herança
• Reescrita (overriding) de métodos das superclasses nas subclasses
– Duas subclasses de uma mesma classe podem ter implementações completamente
diferentes de um mesmo método, o que leva os objetos a se comportarem de forma
diferente
– Exemplo:
• Podemos imaginar um programa que faça a impressão de um relatório por meio de
uma classe chamada Impressora, que é uma interface de acesso às funcionalidades
da impressora usada, por meio de um driver fornecido pelo fabricante. Uma
impressora a laser tem um mecanismo de impressão totalmente diferente de uma
impressora a jato de tinta, mas isso não importa para o programa. Ele manda uma
simples mensagem de imprimir para a impressora e o modo como a impressora
imprime no papel varia de acordo com o tipo de impressora usada, ou seja, a
impressão se dá de formas diferentes para a mesma mensagem de imprimir.
2 © 2009 IBM Corporation
4
Orientação a Objetos
2 © 2009 IBM Corporation
5
Treinamento Java Básico
Agenda
Orientação a Objetos
Exercícios
2 © 2009 IBM Corporation
6
Exercícios
Implemente uma classe chamada Circulo da seguinte forma:
– Duas variáveis de instancia: raio (do tipo double) e cor (do tipo String) com valores
default 1.00 e “vermelho” respectivamente
– Dois construtores: o default e um sobrecarregado que recebe o raio do circulo como
parâmetro
– Um método publico: calcularArea();
Crie um método main() que utilize a classe Circulo
Crie uma superclasse chamada FormaGeometrica com um método calcularArea() que
servirá para o calculo da área da forma geométrica com base em suas dimensões. Faça a
classe Circulo ser subclasse de FormaGeometrica.
Crie mais três classes: Quadrado, retangulo e triangulo, definindo para cada uma dessas
classes as dimensões necessárias para o cálculo da área. Sobreescreva o método
calcularArea() que retorne o valor da área da respectiva forma geométrica. Faça as
heranças conforme achar mais indicado para tirar proveito do reuso.
– Quadrado: lado
– Retangulo: base, altura
– Triangulo: base, altura
2 © 2009 IBM Corporation
7
Exercícios
2 © 2009 IBM Corporation
8
Exercícios
2 © 2009 IBM Corporation
9
Exercícios
3 © 2009 IBM Corporation
0
Exercícios
3 © 2009 IBM Corporation
1
Exercícios
3 © 2009 IBM Corporation
2