Conceitos básicos- Revisão
Prof. Marina Laís
Técnicas de Orientação Objeto
(T.O.O)
PROGRAMAÇÃO
ORIENTADA A
Desenvolvimento de Software tradicional
Programas
Processos
dados
Desenvolvimento tradicional
x orientado a objetos
Programa
Classes
Atributos
Operações
Programa
Processos
Dados
Programação
Programação
Orientada a Objetos?
É UM PARADIGMA
DE PROGRAMAÇÃO
Programação
Orientada a Objetos?
Programação
Orientada a Objetos?
• Mais fácil descrever o mundo real através dos objetos
• O encapsulamento facilita a manutenção do código
• Maior facilidade para • Complexidade no
aprendizado em comparação com a programação
estruturada
• Seus conceitos são de difícil compreensão
Programação
Orientada a Objetos?
RESUMO
POO é um paradigma de programação que usa
"objetos" compostos por campos e métodos,
justamente com suas interações - para projetar
programas de computadores.
http://en.wikipedia.org/wiki/Object-oriented_programming
POO é uma forma especial de programar, mais
próximo de como expressaríamos as coisas na vida
real do que outros tipos de programação.
http://www.criarweb.com/artigos/215.php
POO é organizar o mundo real como uma coleção de
objetos que incorporam estrutura de dados e um
Desenvolvimento Orientado
a Objetos
Visualiza e representa o mundo real como um
conjunto de
objetos
que interagem entre si para que determinadas
operações sejam realizadas.
Parar
ABSTRAÇÃO
Abstração é o processo de extrair as características essenciais de um objeto real. A abstração é necessária para se ter um
modelo fiel da realidade sobre a qual se possa operar.
Abstração
Eliminação
do
irrelevante e
amplificação do
essencial
Exemplo – abstração
Registros
de oficina
Registros
em casa
Registros
Detran
Abstração
É o mecanismo que nos permite representar uma realidade
complexa em termos de um modelo simplificado, de modo que
detalhes irrelevantes possam ser suprimidos.
Processo de filtragem de detalhes sem importância do objeto, para
que apenas as características apropriadas que o descrevem
permaneçam.
CLASSE
Uma classe é uma estrutura que abstrai um conjunto
de objetos com características similares. É como um
projeto, a partir dela que criamos os objetos
Classes
Classes: “fábricas” de objetos.
Exemplificando, temos que Pessoa é uma classe e João é um objeto
(instância) da classe Pessoa.
Um carro é uma classe; “meu carro” é um objeto.
Classes – Fábrica de objetos.
Classe:
Atributos
Os Atributos em Programação Orientada a Objetos
são os elementos que definem a estrutura de uma
classe, ou seja suas características.
Classe:
Objeto
Objetos são instâncias de classes. É através deles que (praticamente) todo o processamento ocorre em sistemas
implementados com linguagens de programação orientadas a objetos.
Programação orientada a objetos uma abordagem com Java.
No paradigma de orientação a objetos, tudo pode ser
potencialmente representado como um objeto. Sob o ponto de vista da programação orientada a objetos, um objeto não é
muito diferente de uma variável normal.
Orientação a Objetos em Java
Classe
Aluno
Nome Matrícula Nota Média João 193.31.098-7 7,6 Maria 195.31.022-5 8,7Orientação a Objetos em Java
• Objetos do mundo real possuem duas
características:
estado
e
comportamento.
• Exemplos:
cachorros
estado
: nome, cor, raça
comportamento
: latir, correr
Bicicletas
estado
: marcha atual, velocidade atual
comportamento
: trocar marcha, aplicar
Orientação a Objetos em Java
• A
unidade fundamental
de programação em orientação a
objetos (POO) é a
classe
.
• Classes contém:
– Atributos
: determinam o
estado
do objeto;
– Métodos
: semelhantes a procedimentos em
linguagens convencionais, são utilizados para
Orientação a Objetos em Java
• Objetos
– São
instâncias da classe
.
– Sob o ponto de vista da programação orientada a
objetos, um objeto não é muito diferente de uma
variável normal.
• Um programa orientado a objetos é composto
por um conjunto
de objetos que interagem
entre si
Orientação a Objetos em Java
• As classes provêem a
estrutura para a construção de
objetos
- estes são ditos
instâncias
das classes
Classe
Aluno
Nome Matrícula Nota Média setNome(nome) getNome() ... atributos métodosInstâncias
João 193.31.098-7 7,6 Maria 195.31.022-5 8,7Classes e objetos em Java
[acesso] class NomeDaClasse { Atributos Construtores Métodos }
Definição da
classe
O conteúdo da
classe
Orientação a Objetos em Java –
Classe em Java
// Class Lampada public class Lampada {
// Atributos boolean acesa;
// Métodos
public void ligar() { acesa = true; }
public void desligar() { acesa = false; } }
Classes e objetos em Java
Realizada com a palavra reservadaNew.
Processo conhecido como criação
de uma instância de uma classe.
Tipo da variável pode diferir do
objeto realmente criado (desde que estejam relacionados por herança).
Produto p = new Produto();
Declaração do
tipo da variável Variável
Objeto real criado
Orientação a Objetos em Java
– Criando objetos com Java
• Para instanciarmos um novo objeto devemos utilizar o operador new, conforme modelo abaixo:
NomeDaClasse nomeDoObjeto = new NomeDaClasse(); Lampada lamp1 = new Lampada();
MÉTODO
Um método é uma subrotina que é executada por um
objeto ao receber uma mensagem. Os métodos
Definem as operações que podem ser invocadas em um objeto.
Podem receber parâmetros ou não.
public String getNomeCurso()
public void setNomeCurso(String nome)
O cabeçalho define a assinatura do método.
Exemplo
public class Produto { private int codigo;
private String nome;
public String getNome() {
return nome; }
public void setNome(String nome_produto) {
nome = nome_produto; }
Orientação a Objetos em Java
– Classe em Java
class Bicicleta {
int velocidade = 0; int marcha = 1;
void mudarMarcha(int novoValor) { marcha = novoValor;
}
void aumentarVelocidade(int incremento) { velocidade = velocidade + incremento; }
void aplicarFreios(int decremento) {
velocidade = velocidade - decremento; }
Orientação a Objetos em Java
– Criando objetos com Java
• Criando dois objetos bicicleta:
Bicicleta bicicleta1 = new Bicicleta(); Bicicleta bicicleta2 = new Bicicleta();
• Invocando seus métodos:
bicicleta1.mudarMarcha(2);
Orientação a Objetos em Java
– Resumo
• A classe provê a estrutura para a construção de objetos.
• Um objeto é uma instância de uma classe. Ele contém um estado (valores de seus atributos) e expõe o seu comportamento através de métodos (funções).
• Ex. Bicicleta: ESTADO – valores dos atributos velocidade e marcha; COMPORTAMENTO – exposto pelos métodos mudarMarcha,
Método:
Sobrecarga
São métodos que tem o mesmo nome, mas com
argumentos diferentes.
http://www.devmedia.com.br/post-5124-Orientacao-a-objetos-parte-ll.html
Lista de Argumentos diferentes Podem alterar o tipo de retorno
Classe:
Construtores
Um construtor é uma estrutura especial da classe,
um método, que tem como objetivo definir a
configuração inicial de uma classe. É utilizado
quando existem atributos da classe que são
essenciais para o funcionamento do objeto, porém,
são atributos de instância, e, assim, variam de
acordo com cada objeto.
http://www.webartz.com.br/php/php-orientado-a-objetos-conceitos-Contrutores
• Utilizados para a construção de objetos
class Pessoa { String nome;
int idade;
public Pessoa (String nome, int idade) {
this.nome = nome; this.idade = idade; }
public Pessoa () {
this.nome = “João”;
this.idade = 25;
Pessoa maria =
new Pessoa(“Maria”, 20); Pessoa joao = new
Contrutores
• Devem ter o
mesmo nome da classe
que inicializam.
• Podem ter parâmetros.
• Não tem retorno.
• Se não é declarado nenhum construtor, a linguagem
provê um construtor padrão sem argumentos que não
faz nada
.
Contrutores
import java.util.*;
public class AloMundo {
private String mensagem = “ ”;
public AloMundo () {
Date data = new Date();
mensagem = "Alô, Mundo” + data.toString() ;
}
public void mostrarMensagem () { System.out.println( mensagem ); } Classe Pacotes Métodos Variáveis Construtores
Classe:
Destrutores
Semelhante aos construtores, o destrutor também é
uma estrutura, outro método, da classe, porém este é
responsável por limpar a memória ou atributos
utilizados na execução da classe.
http://www.webartz.com.br/php/php-orientado-a-objetos-conceitos-construtores-e-destrutores
Modificadores
de Acesso
Modificadores de Acesso
• Uma classe pode ser:
– public – acessado por qualquer outra classe.
– nenhum modificador (package-private) –
acessada
somente dentro do seu pacote
.
Modificadores de Acesso
• Atributos e métodos podem ser:
– public – acessados por qualquer outra classe.
– nenhum modificador (package-private) – acessados somente dentro do seu pacote
– private – acessados somente dentro de suas próprias classes. – protected – acessados somente dentro do seus pacotes e por
Modificadores de Acesso
Não
Não
Não
Sim
privateNão
Não
Sim
Sim
nenhumNão
Sim
Sim
Sim
protectedSim
Sim
Sim
Sim
public todos subclasse pacoteClasse/ Atributos ou métodos
modificador
ENCAPSULAMENTO
É o princípio pelo qual cada componente de um
programa deve agregar toda a informação relevante
para sua manipulação como uma unidade (uma
Orientação a Objetos em Java
– Resumo
• É um princípio fundamental da OO:
– Esconder o estado interno (valores dos atributos).
– Obrigar que interações com os atributos sejam executadas através de métodos.
• Com o encapsulamento um objeto determina a permissão
que outros objetos terão para acessar seus atributos
Orientação a Objetos em Java
– Encapsulamento dos Dados
Proteger os
atributos
Permitir acesso
aos atributos
através dos
métodos
Exemplo Encapsulamento
class Cliente {
private double credito; private String nome;
public String getNome() {
return nome; }
public void setNome(String nome_cliente) {
nome = nome_cliente; }
public void imprimaDadosCliente(Cliente c) {
imprimir(c.nome, c.credito); }
private void imprimir(String nome, double credito) {
System.out.println(“Cliente: “ + nome + “ Crédito: R$ “ + credito); }
Exemplo
class ProdutoSemEncapsulamento { public int codigo;
public String nome; public double preco;
public double desconto_a_vista;
Exemplo
public static void main(String[] args) {
ProdutoSemEncapsulamento p = new ProdutoSemEncapsulamento();
p.codigo = 1;
p.nome = "Samsung 17 polegadas"; p.preco = 500;
p.desconto_a_vista = 10;
System.out.println("Preço à prazo: " + p.preco); System.out.println("Preço à vista: " + (p.preco –
p.preco*p.desconto_a_vista/100)); }
Exemplo
Encapsulamento
Exercício
Corrija a classe do exemplo anterior (vista abaixo). Esta classe deverá usar
encapsulamento, possuir um construtor, um método que calcula o preço a vista bem como um método setDesconto, que recebe o valor do desconto, e se o
mesmo for superior a 100 ou menor que zero, configurar o desconto como zero.
class ProdutoSemEncapsulamento {
public int codigo;
public String nome;
public double preco;
public double desconto_a_vista;
}
Solução
class Produto {
private int codigo; private String nome; private double preco;
private double desconto_a_vista;
public Produto(int cod_prod, String nome_prod, double preco_prod, double desc) { codigo = cod_prod; nome = nome_prod; preco = preco_prod; desconto_a_vista = desc; }
Solução
public double getPreco() { return preco;
}
public double getPrecoAVista() { double preco_a_vista;
preco_a_vista = preco - preco*desconto_a_vista/100; return preco_a_vista;
}
public void setDesconto(double desc) { if ((desc > 100) || (desc < 0)) desconto_a_vista = 0;
else
Exercício
Crie uma classe para representar uma conta bancária.
Esta classe deverá:
Usar encapsulamento;
Possuir dois atributos, código e saldo;
Possuir um construtor que receba o número da conta e o saldo inicial. Se for passado um valor negativo para o saldo,utilizar zero como saldo inicial;
Possuir métodos para creditar um valor, sacar um valor e imprimir o saldo.
Se o valor a ser sacado for maior do que o saldo, sacar apenas o valor correspondente ao saldo (saldo será igual a zero),
Solução
class Conta {
private double saldo; private long numero;
public Conta(long num, double val) { numero = num;
if (val > 0) saldo = val; }
Solução
public double debitar(double val) { if (val > saldo)
val = saldo; saldo = saldo - val; return val;
}
public void imprimaSaldo() {
System.out.println(“Conta: “ + numero + “Saldo: R$ “ + saldo); }
INTERFACE
É um conjunto de métodos que um objeto deve
suportar, mas contendo apenas a especificação da
funcionalidade que uma classe deve conter, sem
determinar como essa funcionalidade deve ser
Interface
Lista de serviços oferecidos por um componente
Funciona como um “contrato” que o componente estabelece com
o mundo exterior que define exatamente como este pode fazer
uso do componente
Interface
Formada por métodos e atributos públicos.
Ausência de informações sobre como o trabalho é realizado.
Liberdade para modificar o funcionamento do componente sem
Interface da classe Cliente
public String getNome()
public void setNome(String nomeCliente)
public void imprimaDadosCliente(Cliente c)
Note que o método privado imprimir não faz parte da interface!
HERANÇA
Herança é um mecanismo que permite que
características comuns a diversas classes sejam
fatoradas em uma classe base, ou superclasse. A
Herança:
Sobreposição
A sobreposição refere-se à redefinição de métodos na
hierarquia da herança, de forma que estes métodos
implementam definições diferentes (mais
especializadas) nos subtipos.
http://arquiteturaemobilidade.blogspot.com/2008/07/conceitos-da-orientao-objetos-com-uml_08.html
Orientação a Objetos em Java
– Herança
Permite a uma classe herdar o estado (atributos) e o comportamento (métodos) de outra classe.
• Herança : entre diferentes classes podem existir diversas semelhanças, ou seja, duas ou mais classes poderão compartilhar os mesmos atributos e/ou os mesmos métodos
– Superclasse – Subclasse – Ancestral
Orientação a Objetos em Java
– Herança
Pessoa ---nome idade Professor ---formação área de interesse Aluno ---curso crOrientação a Objetos em Java
– Herança
Orientação a Objetos em Java
– Herança
Orientação a Objetos em Java
– Herança
Orientação a Objetos em Java
– Herança
João 25 Sistemas de InformaçãoInstâncias de
Aluno
Maria 20 Sistemas de InformaçãoOrientação a Objetos em Java
– Herança
// SuperClass.java
public class SuperClass {
// Atributos e métodos }
// SubClass.java
public class SubClass EXTENDS SuperClass {
// Atributos e métodos }
Orientação a Objetos em Java
– Herança
class Pessoa { String nome; int idade;void definirNome(String valor) { nome = valor;
}
String retornarNome() { return nome;
}
void definirIdade(int valor) { idade = valor;
}
int retornarIdade() { return idade;
class Aluno extends Pessoa { String curso;
void definirCurso(String valor) { curso = valor; } String retornarCurso() { return curso; } }
Orientação a Objetos em Java – Herança
(27/33)
Aluno joao = new Aluno(); joao.definirNome(“João”); joao.definirIdade(25);
joao.definirCurso(“Sistemas de Informação”);
Aluno maria = new Aluno(); maria.definirNome(“Maria”); maria.definirIdade(20); maria.definirCurso(“Sistemas de Informação”); João 25 Sistemas de Informação Maria 20 Sistemas de Informação
Orientação a Objetos em Java
– Herança
ELETRODOMÉSTICO Voltagem Garantia Ligar Desligar Liquidificador Fabricante Cor Auto Limpeza VelocidadeExercícios
(1)• Exercício1: Escreva um programa que implemente as
Exercícios
(2)• Exercício2: Implemente uma interface Comparável que
deve ser implementada pelas classes definidas
Exercícios
(3)• Exercício3: Implemente um as classes Frota e
TerrenoIrregular conforme explicitado no diagrama UML
abaixo;
Exercícios
(4)• Exercício4: Implemente uma classe Ordenador com um
método ordenar capaz de efetuar a ordenação, pelo
Exercícios
(5)• Exercício5: Implemente uma classe TerrenoReticulado
que herda de Terreno e tem como característica o fato de
suas cotas estarem dispostas regularmente na forma de
uma matriz m x n.
POLIMORFISMO
O polimorfismo permite que referências de tipos de
classes mais abstratas representem o
comportamento das classes concretas que
referenciam. Assim, um mesmo método pode
apresentar várias formas, de acordo com o seu
contexto.
Orientação a Objetos em Java
– Polimorfismo
• Em O.O., polimorfismo é o conceito que descreve a capacidade de um tipo A ser usado como um tipo B.
• O objetivo do polimorfismo é implementar um estilo de programação
baseado em passagem de mensagens no qual objetos de diferentes tipos definem uma mesma interface de operações.
• Em linguagens fortemente tipadas o polimorfismo é implementado através de herança ou implementação de interfaces.
Orientação a Objetos em Java
– Polimorfismo
A1
A2
A1
A2
Classe B
Obj.
A
Obj.
B
Classe A
Orientação a Objetos em Java
– Ligação dinâmica
• O mecanismo de ligação dinâmica possibilita o uso do polimorfismo; • Para entendermos melhor como funciona a atuação da ligação
dinâmica no polimorfismo voltemos ao exemplo anterior