O Paradigma Orientado a Objetos
Não é um paradigma no sentido estrito: é
uma subclassificacão do imperativo
A diferença é mais de metodologia quanto à
concepção e modelagem do sistema
Paradigma e Programação Orientada
a Objetos
A grosso modo, uma aplicação é estruturada
em módulos (classes) que agrupam um estado
(atributos) e operações (métodos) sobre este
Prof. João Carlos Pinheiro
[email protected]
1
Modelo Computacional do Paradigma
Orientado a Objetos
Entrada
Entrada
Programa
Programa
Classes podem ser estendidas e/ou usadas
como tipos (cujos elementos são objetos)
Aprendendo Orientação a Objetos
Saída
Saída
Linguagens de Objetos permitem vantagens, não as
Estado
fornecem
Estado
O difícil não é aprender uma linguagem OO.
Entrada
Entrada
Programa
Programa
Saída
Estado
Estado
..
.
Saída
...
..
.
O problema é que leva tempo para explorar as vantagens
Entrada
Programa
Saída
que as linguagem orientada a objetos fornecem (Martin
Estado
Fowler e Kendall Scott – UML Essencial)
..
.
Para alcançar estas vantagens é necessário fazer a troca de
paradigma
Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a
Classes estimulam projeto centrado em dados:
modularidade, reusabilidade e extensibilidade.
Aceitação comercial crescente
maneira como desenvolvemos software
Fonte: Augusto Sampaio
http://www.cin.ufpe.br/~acas
4
1
Introdução à Orientação a Objeto (OO)
Definição de Classe
É um conjunto de princípios que guiam a construção
Uma classe descreve um conjunto de objetos com
de um software
propriedades semelhantes (atributos)
comportamentos semelhantes (métodos)
A Orientação a objetos organiza o mundo real como
relacionamentos comuns com outros objetos
uma coleção de objetos que incorporam estrutura de
Exemplo de classes em um Acervo
dados e comportamento
Livro, Periódico, Artigo, Autor, Bibliotecário, Usuário
Observe que podem existir vários livros (objetos) de
uma mesma classe “Livro”
5
Classe em Java
Definição de Objetos
class Conta {
String numero;
6
Um objeto é uma entidade (física, conceitual ou do
Atributos
domínio de algum problema ) com escopo e identidade
double saldo;
void creditar (double valor) {
Métodos
bem definidos que encapsulam Estado e
saldo = saldo + valor;
Comportamento
}
void debitar (double valor) {
Exemplo: “o carro vermelho ali no estacionamento”
saldo = saldo - valor;
}
}
7
8
2
Definição de Objetos -
Definição de Objetos
Exemplo: Dois Objetos Círculo
Objetos têm responsabilidades
Responsabilidade de saber certas coisas
Responsabilidades de fazer certas coisas
Objetos colaboram para desempenhar suas
responsabilidades
Fonte: David J. Barnes & Michael Kölling. Programação orientada a objetos com Java.
Pearson Education do Brasil, 2004.
9
Propriedades de um Objeto
10
Propriedades de um Objeto
Objetos de uma mesma classe têm um mesmo
Objetos têm estado (representado pelos atributos)
comportamento
Um livro têm um número de classificação, um título,
autores
Usuários altera seu endereço, fazem empréstimos
Um Usuário tem um nome, um endereço
Bibliotecário cadastra novos livros no acervo
O estado do objeto normalmente muda ao longo do
Objetos podem estar relacionados
tempo
Um Livro pode ter vários Autores
11
12
3
Propriedades de um Objeto
Diferença entre classe e objeto
Objetos têm identidade
“Classe” é um gabarito (como a planta de uma casa)
Cada objeto tem uma identidade única, mesmo
que o estado seja idêntico para ambos os objetos
“Objeto” é a concretização do gabarito (Exemplo:
casas feitas a partir da mesma planta)
Cada objeto é diferente do outro (tem estado
próprio) e cada um tem seu próprio tempo de vida
Relacionamentos entre classes são definidos na
programação e não mudam durante a execução
13
Diferença entre classe e objeto
14
Criando Instâncias (Objetos)
Relacionamentos entre objetos são dinâmicos e podem
Forma geral da declaração e criação de objetos em
Java
mudar
Declaração
O funcionamento da aplicação reflete a lógica de
Conta conta1, conta2;
relacionamento entre os objetos, e não entre as
Criação
classes
conta1 = new Conta ();
Classes não existem no contexto da execução
A classe tem papel na criação dos objetos, mas não
Combinando declaração e criação
existe quando os objetos trocam mensagens entre si
Conta conta1 = new Conta ();
15
16
4
Ex.: programa que cria e manipula conta
class
Construtores
Servem como interfaces para iniciar objetos possuem o
mesmo nome das respectivas classes similares a
métodos, mas não têm tipo de retorno
CriaConta {
/* Criando um objeto do tipo Conta
*/
public static void main (String [] args) {
Conta conta1 = new Conta ();
class Conta {
String numero;
double saldo;
Conta(String n) {
numero = n;
saldo = 0;
}
void creditar(double valor) {saldo += valor; }
void debitar(double valor) {saldo -= valor; }
}
conta1.numero = “21.342-7”;
conta1.saldo = 0;
conta1.creditar (500.87);
conta1.debitar (45.00);
System.out.println(conta1.saldo);
}
}
17
Abstração
18
Abstração
Abstração significa supressão de detalhes, ponto de
Há simplificações quando pensamos no
vista elevado
comportamento dos objetos em relação ao mundo
O que consideramos é a interface ao invés da
real, pois:
implementação, ou seja, uma abstração se
Não vamos modelar todo o comportamento dos objetos
concentra no serviço que o objeto presta, não como
executá-lo
Exemplo: Clientes esperam em uma fila, brigam com os
funcionários do banco, mas provavelmente não no
A abstração OO permite modelar elementos no
software
espaço do problema
19
20
5
Abstração
Na Programação Orientada a Objeto (POO)
Comportamentos são associados aos objetos que
possuem os atributos afetados pelo comportamento,
Princípios Básicos da Orientação a
Objetos
ou seja, quem faz algo é o expert nos dados envolvidos
Exemplo
A responsabilidade de alterar o nome do livro será
atribuída ao Livro e não ao Bibliotecário, embora, no
mundo físico, seja o Bibliotecário quem faz a
alteração
21
Encapsulamento
22
Benefícios do Encapsulamento
O Encapsulamento é a mola mestra da abstração
Flexibilidade e Facilidade de manutenção
Coloca tudo da abstração (atributos e comportamento) dentro
de uma “capsula” e força o acesso às partes internas apenas
através de uma interface pública (métodos)
Se você quiser obter estes benefícios é necessário:
Manter as variáveis de instância protegidas (como o
Em outras palavras, abstração é o que se quer, encapsulamento
modificador de acesso private)
é uma forma de fazê-lo
Criar métodos de acesso público
No paradigma procedural os dados ou são globais ou são passados
Utilize as conversões adotadas pelos “JavaBeans”
por parâmetro aos procedimentos
(set<Atributo> e get<Atributo>)
Enquanto que na orientação a objetos
os dados e procedimentos (funções)
fazem parte de uma única entidade
(objeto)
23
24
6
Benefícios do Encapsulamento
Benefícios do Encapsulamento
Exemplo de como não se deve fazer
Solução
public class BadOO {
public int tamanho;
public int peso;
. . .
}
public class UtilizaBadOO {
public static void main(String []a)
b = new BadOO( );
b.tamanho = -5;
}
}
public class BadOO {
private int tamanho;
private int peso;
public void setTamanho(int t){
if(t > 0)
tamanho = t;
else
tamanho = 0;
}
...
}
Ocultação de Informações e Implementações
Constitui o desfecho de um bom encapsulamento
Vantagem
Facilitar mudanças isolando pedaços uns dos outros
(reduzindo o acoplamento)
25
3. Retenção de Estado
26
4. Identidade de Objetos
É a propriedade pela qual um objeto pode reter informações
É a propriedade pela qual cada objeto (independente de sua
indefinidamente, inclusive durante os intervalos de ativação de
classe ou seu estado) pode ser identificado e tratado como uma
suas operações
entidade distinta de software (Meilir Page-Jones – Fundamentos
A reutilização de pedaços é mais difícil usando a programação
do Desenho Orientado a Objetos com UML)
estruturada (modularização via funções) porque não posso usar
coisas pré-existentes tão facilmente
conta1 = new Conta ();
Com objetos, posso dizer: "me dê dois daqueles" porque objetos
conta2 = new Conta ();
têm estado
Não se pode fazer isso com funções porque elas não encapsulam
Esta idéia simples provoca uma profunda mudança na forma
estado
como desenhamos e construímos software orientado a objetos
27
28
7
5. Mensagens
6. Classes
Consiste do nome de uma operação definida para o
objeto destinatário, juntamente com quaisquer
argumentos passados ao objeto
Só para relembrar
Classe é o que você desenha e programa (tempo de
compilação)
Objeto é o que você cria (a partir de uma classe) em
tempo de execução (rum-time)
Exemplo
conta1.creditar(100);
conta1.debitar(50);
29
30
8. Polimorfismo
7. Herança
Uma maneira de expressar a herança é pelo termo
É-UM
Fusca É-UM Carro
Gerente É UM Funcionario
Na linguagem java a palavra reservada extends
representa este relacionamento É-UM
A palavra polimorfismo origina-se de duas palavras gregas
que significam, respectivamente, muitas e forma
Definição
É a habilidade pela qual uma única operação ser
definida em mais de uma classe e assumir
implementações diferentes em cada uma das classes
public class Funcionario {
. . .
}
(mas a interface é igual para todas as implementações)
Faz com que o que estamos vendo pareça mais simples
public class Gerente extends Funcionario {
. . .
}
31
32
8
Exemplo
public class FolhaPagamento {
public double calcularFolhaPagamento(Funcionario emp) {
double sal =
public interface Funcionario {
public double calcularSalario();
}
public class Gerente implements Funcionario {
private static final int SALARIO = 40000;
public double calcularSalario() {
return SALARIO;
}
}
public class Programador implements Funcionario {
private static final double SALARIO = 50000;
private static final int BONUS
= 10000;
public double calcularSalario() {
return SALARIO;
}
public int getBonus() { return BONUS; }
}
33
Alterando este exemplo para utilizar polimorfismo
if(emp
sal
emp.calcularSalario();
instanceof
+=
Programador)
((Programador)emp).getBonus();
return sal;
}
public static void main(String arg[]) {
FolhaPagamento fp = new FolhaPagamento();
Programador prg = new Programador();
Gerente mgr = new Gerente();
System.out.println("Salário do Programador " +
fp.calcularFolhaPagamento(prg));
System.out.println("Salário do Gerente " +
fp.calcularFolhaPagamento(mgr));
}
}
Alterando este exemplo para utilizar polimorfismo
Esse projeto possui vários problemas
E se você quiser incluir outro tipo de Funcionário?
Primeiro, ele não é elegante ou facilmente
extensível
Considere que você precisa incluir uma classe
Executivo no seu sistema
Segundo, requer que o programador que escreveu o
código faça o trabalho do sistema de runtime do
Java
Com o projeto atual, você terá que mudar a
implementação do método
Uma maneira melhor de permitir que o sistema de
Runtime do Java descubra tudo isso para você
calcularFolhaPagamento() para verificar também
a instanceof da classe Executivo
Isso gera um projeto mais claro e elegante, além de
um código mais fácil de ser entendido
35
36
9
Nova Solução
public interface Funcionario {
public double calcularSalario();
public int bonus();
}
public class Gerente implements Funcionario {
private static final int SALARIO = 40000;
private static final int BONUS
= 0;
public double calcularSalario() {
return SALARIO;
}
public int getBonus( ) { return BONUS; }
}
public class Programador implements Funcionario {
private static final double SALARIO = 50000;
private static final int BONUS
= 10000;
public double calcularSalario() {
return SALARIO;
}
public int getBonus() { return BONUS; }
}
public class FolhaPagamento {
public double calcularFolhaPagamento(Funcionario emp) {
// Calcula o bônus. Não é preciso verificar com instanceof
return emp.calcularSalario() + emp.bonus();
}
public static void main(String arg[]) {
FolhaPagamento fp = new FolhaPagamento();
Programador prg = new Programador();
Gerente mgr = new Gerente();
System.out.println("Salário do Programador " +
fp.calcularFolhaPagamento(prg));
System.out.println("Salário do Gerente " +
fp.calcularFolhaPagamento(mgr));
}
}
Bibliografia Consultada
Meilir Page-Jones. Fundamentos do Desenho Orientado
a Objetos com UML (capítulo 1)
Martin Fowler e Kendall Scott. UML Essencial
Cay S. Horstmann e Gary Cornell. Core Java –
Fundamento. Volume I
Slides: Curso Java – UFPE – Programação Orientada a
Objetos. Autor: Paulo Borba
39
10
Download

Slides - DAI