Você está na página 1de 24

29/04/2013

Programação de Computadores II
TCC-00.174

Profs.: Leandro A. F. Fernandes(A1) & Marcos Lage(B1) & Pedro Velloso(C1)


(Turma A1) www.ic.uff.br/~laffernandes
(Turma B1) www.ic.uff.br/~mlage
(Turma C1) www.ic.uff.br/~velloso

Conteúdo: Orientação a objetos

Material elaborado pelos profs. Anselmo Montenegro e Marcos Lage


com contribuições do prof. Leandro A. F. Fernandes

Introdução

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.
29/04/2013 Programação de Computadores II 2

1
29/04/2013

Introdução
Conceitos

29/04/2013 Programação de Computadores II 3

Orientação a Objetos
Estado & Comportamento

Aluno
Nome
Matrícula
Nota Média

João Maria
193.31.098-7 195.31.022-5
7,6 8,7

29/04/2013 Programação de Computadores II 4

2
29/04/2013

Orientação a Objetos
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
29/04/2013 Programação de Computadores II 5

Orientação a Objetos
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?

29/04/2013 Programação de Computadores II 6

3
29/04/2013

Orientação a Objetos
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.

29/04/2013 Programação de Computadores II 7

Orientação a Objetos
Classes

As classes proveem a estrutura para a construção de


objetos - estes são ditos instâncias das classes.

Classe Instâncias
Aluno João
Nome 193.31.098-7
atributos Matrícula 7,6
Nota Média

setNome(nome) Maria
métodos getNome() 195.31.022-5
... 8,7

29/04/2013 Programação de Computadores II 8

4
29/04/2013

Orientação a Objetos
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.
29/04/2013 Programação de Computadores II 9

Orientação a Objetos
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).

29/04/2013 Programação de Computadores II 10

5
29/04/2013

Orientação a Objetos
Objetos

Classe Instâncias
Bicicleta Bicicleta A
Marcha 3ª
campos 20 km/h
Velocidade
(atributos)

mudarMarcha() Bicicleta B
métodos mudarVelocidade() 7ª
... 35 km/h

29/04/2013 Programação de Computadores II 11

Orientação a Objetos
Objetos

Métodos operam no estado interno de um objeto e servem como


mecanismo de comunicação entre objetos.

João mudarMarcha Bibicleta B


João 7º
30 anos 35 km/h

29/04/2013 Programação de Computadores II 12

6
29/04/2013

Orientação a Objetos
Classes Vs. Objetos

CLASSE Documento
Autor
DataDeChegada
Atributos

Imprimir
Funções Editar

OB1: Documento OB2: Documento

29/04/2013 Programação de Computadores II 13

Orientação a Objetos
Classes em Java

qualificador_de_acesso class NomeDaClasse {


// atributos da classe
// métodos da classe
}

// Class Lampada // Class Bicicleta


public class Lampada { class Bicicleta {
// Atributos // Atributos
boolean acesa; int velocidade = 0;
int marcha = 1;
// Métodos
public void ligar() { // Métodos
acesa = true; void mudarMarcha(int novoValor) {
} marcha= novoValor;
public void desligar() { }
acesa = false; void aumentaVelocidade(int incremento) {
} velocidade+= incremento;
} }
}

29/04/2013 Programação de Computadores II 14

7
29/04/2013

Orientação a Objetos
Criando Objetos em Java

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);

29/04/2013 Programação de Computadores II 15

Orientação a Objetos
Resumindo ...

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.

29/04/2013 Programação de Computadores II 16

8
29/04/2013

Orientação a Objetos
Resumindo ...

É 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).

29/04/2013 Programação de Computadores II 17

Orientação a Objetos
Encapsulamento de Dados

Pessoa

- nome: String Proteger os


- idade: int atributos

+definirNome(nome: Sting): void


+retornarNome(): String Permitir acesso aos
+definirIdade(idade: int): void atributos através
+retornarIdade(): int dos métodos
...

29/04/2013 Programação de Computadores II 18

9
29/04/2013

Orientação a Objetos
Herança

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

29/04/2013 Programação de Computadores II 19

Orientação a Objetos
Herança

Pessoa
Nome
Idade

Professor Aluno
Formação Curso
Área de interesse Matrícula
Departamento Nota Média

29/04/2013 Programação de Computadores II 20

10
29/04/2013

Orientação a Objetos
Herança

Professor Aluno
- nome: String - nome: String
- idade: int - idade: int
- formação: String - curso: String
+definirNome(nome: Sting): void +definirNome(nome: Sting): void
+retornarNome(): String +retornarNome(): String
+definirIdade(idade: int): void +definirIdade(idade: int): void
+retornarIdade(): int +retornarIdade(): int
+definirFormacao(f: Sting): void +definirCurso(c: Sting): void
+retornarFormacao(): String +retornarCurso(): String
... ...

29/04/2013 Programação de Computadores II 21

Orientação a Objetos
Herança

Professor Aluno
- nome: String - nome: String
- idade: int - idade: int
- formação: String - curso: String
+definirNome(nome: Sting): void +definirNome(nome: Sting): void
+retornarNome(): String +retornarNome(): String
+definirIdade(idade: int): void +definirIdade(idade: int): void
+retornarIdade(): int +retornarIdade(): int
+definirFormacao(f: Sting): void +definirCurso(c: Sting): void
+retornarFormacao(): String +retornarCurso(): String
... ...

29/04/2013 Programação de Computadores II 22

11
29/04/2013

Orientação a Objetos
Herança

Pessoa
- nome: String
- idade: int

+definirNome(nome: Sting): void


+retornarNome(): String
+definirIdade(idade: int): void
+retornarIdade(): int

Professor Aluno
- formação: String - curso: String
+definirFormacao(f: Sting): void +definirCurso(f: Sting): void
+retornarFormacao(): String +retornarCurso(): String

29/04/2013 Programação de Computadores II 23

Orientação a Objetos
Herança

Pessoa
- nome: String
- idade: int Instâncias de Aluno
+definirNome(nome: Sting): void João
+retornarNome(): String
25
+definirIdade(idade: int): void
Sistemas de Informação
+retornarIdade(): int

Maria
20
Aluno Sistemas de Informação
- curso: String
+definirCurso(f: Sting): void
+retornarCurso(): String

29/04/2013 Programação de Computadores II 24

12
29/04/2013

Orientação a Objetos
Herança

//SuperClass.java
public class SuperClass {
// Atributos e métodos
}

//SubClass.java
public class SubClass extends SuperClass {
// Atributos e métodos
}

29/04/2013 Programação de Computadores II 25

Orientação a Objetos
Herança

class Pessoa { class Aluno extends Pessoa {


String nome; String curso;
int idade;
void definirCurso(String valor) {
void definirNome(String valor) { curso = valor;
nome = valor; }
}
String retornarCurso() {
String retornarNome() { return curso;
return nome; }
}
}
void definirIdade(int valor) {
idade = valor;
}

int retornarIdade() {
return idade;
}
}

29/04/2013 Programação de Computadores II 26

13
29/04/2013

Orientação a Objetos
Herança

Aluno joao = new Aluno();


João
joao.definirNome(“João”); 25
joao.definirIdade(25); Sistemas de Informação
joao.definirCurso(“Sistemas de
Informação”);

Aluno maria = new Aluno();


Maria
maria.definirNome(“Maria”);
20
maria.definirIdade(20);
maria.definirCurso(“Ciência da Ciência da Computação
Computação”);

29/04/2013 Programação de Computadores II 27

Orientação a Objetos
Herança

Eletrodoméstico Liquidificador

Voltagem Fabricante
Garantia Cor

Ligar Auto Limpeza


Desligar Velocidade

29/04/2013 Programação de Computadores II 28

14
29/04/2013

Orientação a Objetos
Herança

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.


29/04/2013 Programação de Computadores II 29

Orientação a Objetos
Herança

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);
}
}
29/04/2013 Programação de Computadores II 30

15
29/04/2013

Orientação a Objetos
Herança

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) ... }
}

29/04/2013 Programação de Computadores II 31

Orientação a Objetos
Polimorfismo

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.

29/04/2013 Programação de Computadores II 32

16
29/04/2013

Orientação a Objetos
Polimorfismo

Dada uma superclasse Pessoa, com uma subclasse Aluno,


desejamos adicionar outra subclasse chamada Professor.

Pessoa

Aluno Professor

29/04/2013 Programação de Computadores II 33

Orientação a Objetos
Polimorfismo

Exemplo 01
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();
}

29/04/2013 Programação de Computadores II 34

17
29/04/2013

Orientação a Objetos
Polimorfismo

Suponha que exista um método getName na superclasse Pessoa, que foi


reimplementado nas subclasses Aluno e Professor.
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;
}
}

29/04/2013 Programação de Computadores II 35

Orientação a Objetos
Polimorfismo

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();
}

29/04/2013 Programação de Computadores II 36

18
29/04/2013

Orientação a Objetos
Polimorfismo

Exemplo 02
public static main(String[] args){
Aluno objetoAluno = new Aluno();
Professor objetoProfessor = new Professor();

printInfo(objetoAluno);
printInfo(objetoProfessor);
}

29/04/2013 Programação de Computadores II 37

Orientação a Objetos
Polimorfismo

public static printInfo(Pessoa p){


// Chama o método getName() do objeto
// da classe Pessoa passado por argumento
p.getName();
}

public static main(String[] args){


Aluno objetoAluno = new Aluno();
Professor objetoProfessor = new Professor();

printInfo(objetoAluno);
printInfo(objetoProfessor);
}

29/04/2013 Programação de Computadores II 38

19
29/04/2013

Orientação a Objetos
Modificadores de Acesso

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)

29/04/2013 Programação de Computadores II 39

Orientação a Objetos
Modificadores de Acesso

Uma classe pode ser:

public
acessada por qualquer outra classe.
nenhum modificador (package-private)
acessada somente dentro do seu pacote.

29/04/2013 Programação de Computadores II 40

20
29/04/2013

Orientação a Objetos
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 suas subclasses.

29/04/2013 Programação de Computadores II 41

Orientação a Objetos
Modificadores de Acesso

Classe/
modificador Atributos ou pacote subclasse todos
métodos
public
Sim Sim Sim Sim
protected
Sim Sim Sim Não
nenhum
Sim Sim Não Não
private
Sim Não Não Não

29/04/2013 Programação de Computadores II 42

21
29/04/2013

Orientação a Objetos
Modificadores de Acesso

Pacote A Pacote B
SubClass
Alpha AlphaSub

Beta Gamma

modificador Alpha Beta AlphaSub Gamma

public
Sim Sim Sim Sim
protected
Sim Sim Sim Não
nenhum
Sim Sim Não Não
private
Sim Não Não Não
29/04/2013 Programação de Computadores II 43

Orientação a Objetos
Construtores

class Pessoa {
String nome;
int idade;
public Pessoa(String nome, int idade) Pessoa maria =
{ new Pessoa(“Maria”, 20);
this.nome = nome;
this.idade = idade; Pessoa joao = new Pessoa();
}

public Pessoa()
{
this.nome = “João”;
this.idade = 25;
}
}

29/04/2013 Programação de Computadores II 44

22
29/04/2013

Orientação a Objetos
Construtores

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.

29/04/2013 Programação de Computadores II 45

Orientação a Objetos
Construtores

Pacotes import java.util.*;

Classe public class AloMundo {

Atributos private String mensagem = “ ”;

public AloMundo() {
Date data = new Date();
Construtores mensagem = "Alô, Mundo” + data.toString() ;
}
public void mostrarMensagem() {
Métodos
System.out.println(mensagem);
}
}

29/04/2013 Programação de Computadores II 46

23
29/04/2013

Orientação a Objetos
Construtores

public class Pessoa { public static void main(String[] args) {


private String nome; Pessoa p1 = new Pessoa();
private int idade; p1.definirNome(“João”);
void definirNome(String valor) { p1.definirIdade(25);
nome = valor; System.out.println(p1.retornarNome() +
} “ “ + p1.retornarIdade());

String retornarNome() {
return nome; Pessoa p2 = new Pessoa();
} p2.definirNome(“Maria”);
p2.definirIdade(20);
void definirIdade(int valor) { System.out.println(p2.retornarNome() +
idade = valor;
“ “ + p2.retornarIdade());
}
}
int retornarIdade() {
return idade; } // fim da classe Pessoa
}

29/04/2013 Programação de Computadores II 47

24

Você também pode gostar