Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Conteúdo: Orientação a objetos
Material elaborado pelos profs. Anselmo Montenegro e Marcos Lage com contribuições do prof. Leandro A. F. Fernandes
Programação de Computadores II TCC-00.174
Profs.: Leandro A. F. Fernandes(A1) & Marcos Lage(B1) & Isabel Rosseti(C1)
(Turma A1) www.ic.uff.br/~laffernandes (Turma B1) www.ic.uff.br/~mlage (Turma C1) www.ic.uff.br/~rosseti
Introdução
14/09/2013 Programação de Computadores II 2
O ser humano se relaciona com o mundo através do conceito de objetos.
Estamos sempre identificando objetos ao nosso redor.
Para isso: atribuímos nomes classificamos em grupos – classes.
Introdução
14/09/2013 Programação de Computadores II 3
Conceitos
Orientação a Objetos
14/09/2013 Programação de Computadores II 4
Estado & Comportamento
Aluno
Nome Matrícula Nota Média
João 193.31.098-7 7,6
Maria 195.31.022-5 8,7
14/09/2013 Programação de Computadores II 5
Estado & Comportamento
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 freios
Orientação a Objetos
14/09/2013 Programação de Computadores II 6
Estado & Comportamento
Identificar o estado e o comportamento de objetos do mundo real é o primeiro passo da programação OO. Observe um objeto e pergunte:
1. Quais os possíveis estados deste objeto? 2. Quais comportamentos que ele pode executar?
Orientação a Objetos
14/09/2013 Programação de Computadores II 7
Classes
A unidade fundamental em 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 manipular os atributos.
Orientação a Objetos
14/09/2013 Programação de Computadores II 8
Classes
As classes proveem 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étodos
Instâncias
João 193.31.098-7 7,6
Maria 195.31.022-5 8,7
Orientação a Objetos
14/09/2013 Programação de Computadores II 9
Objetos
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
14/09/2013 Programação de Computadores II 10
Objetos
Objetos Objetos de software são conceitualmente similares a objetos do mundo real: consistem do estado e do comportamento relacionado. Armazena seu estado em campos (variáveis) . Expõe seu comportamento através de métodos (funções). Encapsulamento: princípio pelo qual cada componente de um programa deve agregar toda a informação relevante para sua manipulação. Ocultação da Informação: princípio pelo qual cada componente deve manter oculta sob sua guarda uma decisão de projeto única. Para a utilização desse componente, apenas o mínimo necessário para sua operação deve ser revelado (tornado público).
Orientação a Objetos
14/09/2013 Programação de Computadores II 11
Objetos
Bicicleta
Marcha Velocidade
mudarMarcha() mudarVelocidade() ...
campos (atributos)
métodos
Instâncias
3ª 20 km/h
Classe
7ª 35 km/h
Bicicleta B
Bicicleta A
Orientação a Objetos
14/09/2013 Programação de Computadores II 12
Objetos
Métodos operam no estado interno de um objeto e servem como mecanismo de comunicação entre objetos.
Bibicleta B
7º 35 km/h
João
João 30 anos
mudarMarcha
Orientação a Objetos
14/09/2013 Programação de Computadores II 13
Classes Vs. Objetos
Documento Autor DataDeChegada
Imprimir Editar
OB1: Documento OB2: Documento
CLASSE
Atributos
Funções
Orientação a Objetos
14/09/2013 Programação de Computadores II 14
Classes em Java Orientação a Objetos
qualificador_de_acesso class NomeDaClasse {
// atributos da classe
// métodos da classe
}
// Class Lampada
public class Lampada {
// Atributos
boolean acesa;
// Métodos
public void ligar() { acesa = true;
}
public void desligar() { acesa = false;
}
}
// Class Bicicleta
class Bicicleta {
// Atributos
int velocidade = 0;
int marcha = 1;
// Métodos
void mudarMarcha(int novoValor) { marcha= novoValor;
}
void aumentaVelocidade(int incremento) { velocidade+= incremento;
}
}
14/09/2013 Programação de Computadores II 15
Criando Objetos em Java Orientação a Objetos
Para instanciarmos um novo objeto devemos utilizar o operador new, como nos exemplos abaixo:
NomeDaClasse nomeDoObjeto = new NomeDaClasse(); Criando dois objetos bicicleta: Bicicleta bicicleta1 = new Bicicleta(); Bicicleta bicicleta2 = new Bicicleta(); Invocando seus métodos: bicicleta1.mudarMarcha(2); bicicleta2.aumentaVelocidade(5);
14/09/2013 Programação de Computadores II 16
Resumindo ... Orientação a Objetos
A classe provê a estrutura para a construção de objetos. Um objeto é uma instância de uma classe. Contém um estado (valores de seus atributos) 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, aumentarVelocidade.
14/09/2013 Programação de Computadores II 17
Resumindo ... Orientação a Objetos
É 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 (estado).
14/09/2013 Programação de Computadores II 18
Encapsulamento de Dados Orientação a Objetos
Proteger os atributos
Permitir acesso aos atributos através dos métodos
Pessoa
- nome: String - idade: int
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
...
14/09/2013 Programação de Computadores II 19
Herança Orientação a Objetos
Diferentes classes podem ter diversas semelhanças: duas ou mais classes poderão compartilhar os mesmos atributos e/ou os mesmos métodos.
Herança: Permite a uma classe herdar o estado (atributos) e o comportamento (métodos) de outra classe.
– Superclasse
– Subclasse
– Ancestral
– Descendente
14/09/2013 Programação de Computadores II 20
Herança Orientação a Objetos
Aluno Curso Matrícula Nota Média
Professor Formação Área de interesse Departamento
Pessoa
Nome Idade
14/09/2013 Programação de Computadores II 21
Herança Orientação a Objetos
Professor
- nome: String - idade: int - formação: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirFormacao(f: Sting): void
+retornarFormacao(): String
...
Aluno
- nome: String - idade: int - curso: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirCurso(c: Sting): void
+retornarCurso(): String
...
14/09/2013 Programação de Computadores II 22
Herança Orientação a Objetos
Professor
- nome: String - idade: int - formação: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirFormacao(f: Sting): void
+retornarFormacao(): String
...
Aluno
- nome: String - idade: int - curso: String
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirCurso(c: Sting): void
+retornarCurso(): String
...
14/09/2013 Programação de Computadores II 23
Herança Orientação a Objetos
Aluno - curso: String
Professor - formação: String
Pessoa
- nome: String - idade: int
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
+definirFormacao(f: Sting): void
+retornarFormacao(): String
+definirCurso(f: Sting): void
+retornarCurso(): String
14/09/2013 Programação de Computadores II 24
Herança Orientação a Objetos
Pessoa
- nome: String - idade: int
+definirNome(nome: Sting): void
+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int
Aluno - curso: String
+definirCurso(f: Sting): void
+retornarCurso(): String
João
25
Sistemas de Informação
Instâncias de Aluno
Maria
20
Sistemas de Informação
14/09/2013 Programação de Computadores II 25
Herança Orientação a Objetos
//SuperClass.java public class SuperClass {
// Atributos e métodos
}
//SubClass.java
public class SubClass extends SuperClass {
// Atributos e métodos
}
14/09/2013 Programação de Computadores II 26
Herança Orientação a Objetos
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; } }
14/09/2013 Programação de Computadores II 27
Herança Orientação a Objetos
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(“Ciência da Computação”);
João 25 Sistemas de Informação
Maria 20 Ciência da Computação
14/09/2013 Programação de Computadores II 28
Herança Orientação a Objetos
Eletrodoméstico
Voltagem Garantia
Ligar Desligar
Liquidificador
Fabricante Cor
Auto Limpeza Velocidade
14/09/2013 Programação de Computadores II 29
Herança Orientação a Objetos
Classes Abstratas vs Classes Concretas
– Uma classe abstrata é uma classe que não tem instâncias diretas, mas cujas classes descendentes podem ter instâncias diretas.
– Uma classe concreta é uma classe que pode ser instanciada.
Classes Abstratas vs Interfaces
– A classe abstrata pode possuir métodos não abstratos, bastando ter apenas um método abstrato para ser considerada como tal.
– Um interface apenas propõe os métodos que devem ser implementados pelas classes que desejarem.
– Uma interface define um tipo.
14/09/2013 Programação de Computadores II 30
Herança Orientação a Objetos
public abstract class Empregado {
public Empregado (String nome, double salario) { this.numero = ++contador;
this.nome = nome;
this.salario = salario; }
public abstract void aumentaSalario(double percentual);
}
public class Vendedor extends Empregado{
public void aumentaSalario (double percentualDeAumento)
{ percComissao = percComissao * (1+percentualDeAumento/100);}
}
public class Gerente extends Empregado {
public void aumentaSalario(double percentual) {
double novoSalario = getSalario() * (1+2 * percentual/100);
setSalario(novoSalario);
}
}
14/09/2013 Programação de Computadores II 31
Herança Orientação a Objetos
public interface Ordenavel {
public int comparar(Ordenavel b);
}
public class Empregado implements Ordenavel {
...
public int comparar(Ordenavel b) {
Empregado e = (Empregado)b;
if (salario < e.salario) return -1;
if (salario > e.salario) return 1;
return 0;
} ...
}
public class Ordenacao {
public static void ordena(Ordenavel[] a)
{ ... if (a[i].comparar(a[i+]) > 1) ... }
}
14/09/2013 Programação de Computadores II 32
Polimorfismo Orientação a Objetos
Polimorfismo nos permite escrever programas tais que objetos que compartilham a mesma superclasse sejam tratados como se fossem objetos da superclasse. Pode simplificar a programação.
14/09/2013 Programação de Computadores II 33
Polimorfismo Orientação a Objetos
Dada uma superclasse Pessoa, com uma subclasse Aluno, desejamos adicionar outra subclasse chamada Professor.
Pessoa
Aluno Professor
14/09/2013 Programação de Computadores II 34
Polimorfismo Orientação a Objetos
public static main(String[] args) { Aluno objetoAluno = new Aluno(); Professor objectoProfessor = new Professor(); // Referência da classe Pessoa recebe um objeto da classe Aluno. Pessoa ref = objetoAluno; // Chamada para o método getName() da classe Aluno. ref.getName(); }
Exemplo 01
14/09/2013 Programação de Computadores II 35
Polimorfismo Orientação a Objetos
public class Aluno { public String getName() {
System.out.println(“Nome do Aluno:” + name); return name;
} } public class Professor {
public String getName() { System.out.println(“Nome do Professor:” + name); return name;
} }
Suponha que exista um método getName na superclasse Pessoa, que foi reimplementado nas subclasses Aluno e Professor.
14/09/2013 Programação de Computadores II 36
Polimorfismo Orientação a Objetos
public static main(String[] args) { Aluno objetoAluno = new Aluno(); Professor objetoProfessor = new Professor(); // Referência da Pessoa recebe um objeto da classe Aluno. Pessoa ref = objetoAluno; // Chamada para o método getName() da classe Aluno. ref.getName(); // Referência da Pessoa recebe um objeto da classe Professor. ref = objetoProfessor; // Chamada para o método getName() da classe Professor. ref.getName(); }
14/09/2013 Programação de Computadores II 37
Polimorfismo Orientação a Objetos
public static main(String[] args){ Aluno objetoAluno = new Aluno(); Professor objetoProfessor = new Professor(); printInfo(objetoAluno); printInfo(objetoProfessor);
}
Exemplo 02
14/09/2013 Programação de Computadores II 38
Polimorfismo Orientação a Objetos
public static main(String[] args){ Aluno objetoAluno = new Aluno(); Professor objetoProfessor = new Professor(); printInfo(objetoAluno); printInfo(objetoProfessor);
}
public static printInfo(Pessoa p){ // Chama o método getName() do objeto // da classe Pessoa passado por argumento
p.getName(); }
14/09/2013 Programação de Computadores II 39
Modificadores de Acesso Orientação a Objetos
Determinam se atributos e métodos poderão ser acessados por outras classes. public (público) private (privado) protected (protegido) modificador não explícito (package-private)
14/09/2013 Programação de Computadores II 40
Modificadores de Acesso Orientação a Objetos
Uma classe pode ser:
public acessada por qualquer outra classe.
nenhum modificador (package-private) acessada somente dentro do seu pacote.
14/09/2013 Programação de Computadores II 41
Modificadores de Acesso Orientação a Objetos
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 suas subclasses.
14/09/2013 Programação de Computadores II 42
Modificadores de Acesso Orientação a Objetos
Não Não Não Sim private
Não Não Sim Sim nenhum
Não Sim Sim Sim protected
Sim Sim Sim Sim public
todos subclasse pacote
Classe/ Atributos ou
métodos
modificador
14/09/2013 Programação de Computadores II 43
Modificadores de Acesso Orientação a Objetos
Não Não Não Sim private
Não Não Sim Sim nenhum
Não Sim Sim Sim protected
Sim Sim Sim Sim public
Gamma AlphaSub Beta
Alpha
modificador
Alpha
Beta
AlphaSub
Gamma
SubClass
Pacote A Pacote B
14/09/2013 Programação de Computadores II 44
Construtores Orientação a 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 Pessoa();
14/09/2013 Programação de Computadores II 45
Construtores Orientação a Objetos
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.
14/09/2013 Programação de Computadores II 46
Construtores Orientação a Objetos
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
Atributos
Construtores
14/09/2013 Programação de Computadores II 47
Construtores Orientação a Objetos
public class Pessoa { private String nome; private int idade; void definirNome(String valor) { nome = valor; } String retornarNome() { return nome; } void definirIdade(int valor) { idade = valor; } int retornarIdade() { return idade; }
public static void main(String[] args) {
Pessoa p1 = new Pessoa();
p1.definirNome(“João”);
p1.definirIdade(25);
System.out.println(p1.retornarNome() +
“ “ + p1.retornarIdade());
Pessoa p2 = new Pessoa();
p2.definirNome(“Maria”);
p2.definirIdade(20);
System.out.println(p2.retornarNome() +
“ “ + p2.retornarIdade());
} } // fim da classe Pessoa