JavaBasico Aula2
JavaBasico Aula2
Julho, 2013
Java Básico
Agenda
Orientação a Objetos
Exercícios
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?
Modelo computacional
– Dividir para conquistar
Entrada Programa Saída
Estado
.. .. ..
Estado Estado Estado
4
. . .© 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
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
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
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.
Abstração e Herança
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
Abstração e Herança
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
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
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
Dog.myStaticMethod();
– 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
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
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
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
Modificadores de acesso
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.
Agenda
Orientação a Objetos
Exercícios