0% acharam este documento útil (0 voto)
2 visualizações21 páginas

Introdução à Programação Orientada a Objetos

A Programação Orientada a Objetos (POO) é um método que organiza programas como coleções de objetos interativos, cada um representando uma instância de uma classe. Os conceitos fundamentais incluem abstração, encapsulamento, herança e polimorfismo, permitindo que objetos se comuniquem e compartilhem comportamentos. A POO facilita a modelagem de problemas do mundo real, tornando o código mais intuitivo e próximo da forma como pensamos.

Enviado por

Sandro Elias
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
2 visualizações21 páginas

Introdução à Programação Orientada a Objetos

A Programação Orientada a Objetos (POO) é um método que organiza programas como coleções de objetos interativos, cada um representando uma instância de uma classe. Os conceitos fundamentais incluem abstração, encapsulamento, herança e polimorfismo, permitindo que objetos se comuniquem e compartilhem comportamentos. A POO facilita a modelagem de problemas do mundo real, tornando o código mais intuitivo e próximo da forma como pensamos.

Enviado por

Sandro Elias
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Definição de POO

uSegundo Robert Sebesta:


Programação “A essência da programação orientada a objetos é

Orientada a Objetos resolver problemas identificando os objetos do mundo


real do problema e o seu processamento necessário,
criando, então, simulação dos mesmos, seus processos
e as comunicações necessárias entre eles”.
Definição
[Sebesta, 99]
Conceitos e terminologias
Autores:
Frederico Costa Guedes Pereira
slides: jfpoo Leônidas Francisco de Lima Júnior

Fred&Leônidas (c) 2003 POO 2

Definição de POO Aspectos importantes da POO


uSegundo Grady Booch: uUsa objetos, e não procedimentos como bloco
“Programação orientada a objetos é um método de lógico fundamentalde construção de programas
implementação no qual programas são organizados uCada objeto é instância de uma classe
como coleções cooperativas de objetos, cada um
representando uma instância de alguma classe, e estas uObjetos comunicam-se através de mensagens
classes são todas membros de uma hierarquia de uClasses estão relacionadas com as outras via
classes unidas via relacionamentos de herança”. mecanismos de herança, formando uma hierarquia
[Booch, 91] de classes

Fred&Leônidas (c) 2003 POO 3 Fred&Leônidas (c) 2003 POO 4

Um exemplo inicial Um exemplo inicial


uUma aplicação que desenhe a figura abaixo: uUm trecho do programa escrito em Pascal:
10 15 20 30 45 50 65 program figura;
begin
FillPattern(10,30,45,60,"red");
FillPattern(20,35,30,50,"white");
20 Circle(65,20,"yellow");
22
Draw(10,30,30,22, "gray");
30 Draw(30,22,50,30, "gray");
35
Draw(50,30,10,30, "gray");
50
FillShape(30,25,"gray","gray");
60 end.

Fred&Leônidas (c) 2003 POO 5 Fred&Leônidas (c) 2003 POO 6

1
1
Um exemplo inicial Um exemplo inicial
uUm trecho do programa escrito em Java: uUm trecho do programa escrito em Java:
class Figura { Usamos objetos para public void exiba() {
private Triangulo teto; representar nossa figura [Link]("gray");
private Circulo sol; [Link](); Através desta função, um
private Quadrado janela, casa; [Link]("red"); objeto Figura envia
[Link](); mensagens 'exiba()'
[Link]("white");para seus
public Figura() {
[Link](); objetos componentes
teto = new Triangulo(); Cada objeto
[Link]("yellow");
janela = new Quadrado(); é instância
de uma classe [Link]();
casa = new Quadrado();
}
sol = new Circulo(); } //fim da classe Figura
}
}
Fred&Leônidas (c) 2003 POO 7 Fred&Leônidas (c) 2003 POO 8

Um exemplo inicial Um exemplo inicial


uRepresentação gráfica para um objeto Figura: uE se você precisasse alterar o tamanho da janela?
uQual código seria mais fácil de alterar?
teto sol ðMesmo sem entender alguns detalhes do código Java,
janela você é capaz de dizer qual linha você deve alterar
casa
ðExperimente!
uE se fosse a cor do teto?
uO código OO está mais próximo da forma como
nós pensamos, compreendemos e abstraímos o
mundo real!
Fred&Leônidas (c) 2003 POO 9 Fred&Leônidas (c) 2003 POO 10

Conceitos e terminologia Abstração de dados


uAbstração de dados
uObjetos
uClasses, Propriedades e Métodos
uEncapsulamento
uInterface
uMétodos e Mensagens
uHerança
uPolimorfismo

Fred&Leônidas (c) 2003 POO 11 Fred&Leônidas (c) 2003 POO 12

2
2
Abstração de dados Abstração de dados
uDefinição de Abstração: uNa programação de computadores:
ðAbstrair um conceito é limitar -se a representar este
"(...) 2. Processo mental que consiste em escolher ou conceito numa linguagem de programação apenas em
isolar um aspecto determinado de um estado de coisas seus detalhes necessários à aplicação em curso.
relativamente complexo, a fim de simplificar a sua ðPor exemplo, um sistema bancário abstrai a entidade
avaliação, classificação ou para permitir a comunicação real cliente em apenas alguns dados do cliente que são
do mesmo (...) " importantes (nome, cpf, endereço, renda mensal,etc).
Fonte: Dicionário Houaiss ðNão é necessário guardar nestes sistemas todos os
dados de um cliente (o tamanho do pé dele, se é
careca, se teve varíola, cor do cabelo, etc.)
Fred&Leônidas (c) 2003 POO 13 Fred&Leônidas (c) 2003 POO 14

Abstração de dados Abstração de dados


uAbstração é um conceito amplo: uA abstração:
ðAbstração de procedimentos : ðFoca o lado externo de uma entidade ou objeto.
• dividimos um programa em subprogramas menores e mais ðDestaca o comportamento (ou serviços) nativo do
fáceis de escrever e compreender ("dividir para conquistar") objeto.
• para usar uma função escrita por terceiros abstraímos a sua
implementa ção e nos concentramos na sua interface uO comportamento essencial dos objetos é
ðAbstração de dados: caracterizado por meio das operações que ele é
• serve para representarmos entidades reais numa linguagem capaz de realizar sobre ele mesmo ou sobre outros
de computador, identificando as propriedades destas objetos
entidades que interessam ao sistema

Fred&Leônidas (c) 2003 POO 15 Fred&Leônidas (c) 2003 POO 16

Abstração de dados Abstração de dados


uExercícios:
uDefinição de abstração:
ðCrie uma abstração de dados para a cadeira em que
“Uma abstração denota as características essenciais de
você está sentado
um objeto que o distinguem de outros tipos de objetos e
assim provê uma fronteira conceitual firmemente ðCrie uma abstração de dados para o seu colega do
definida, de acordo com a perspectiva do observador.” lado
[Booch, 91] ðCrie uma abstração para a função seno

Fred&Leônidas (c) 2003 POO 17 Fred&Leônidas (c) 2003 POO 18

3
3
Objetos Objetos
uPara o ser humano, um objeto é... uPara um programador...
ðAlgo tangível e/ou visível “Um objeto representa uma entidade, unidade ou item
ðAlgo que possa ser compreendido intelectualmente identificável, individual, real ou abstrato, com um papel
ðAlgo para o qual um pensamento ou ação possa ser bem definido no domínio do problema. ” [Booch, 91]
direcionado uObjetos podem ser físicos...
uUm objeto modela alguma parte da realidade e é ðbicicleta, máquina, pessoa, sensor, ...
algo que existe no tempo e no espaço uOu não...
ðreação química, número complexo, B-Tree

Fred&Leônidas (c) 2003 POO 19 Fred&Leônidas (c) 2003 POO 20

Objetos Exemplos de objetos (estrutura)


uNem tudo é um objeto...
OBJETO: ÔNIBUS
ðTempo, métricas, sensações e sentimentos humanos PROPRIEDADES VALORES

não são, em geral, modelados como objetos VELOCIDADE :


LUGARES :
112 KM/H
44
ðEles são tratados como propriedades de objetos MARCA : MERCEDES
KM : 80.732 KM
uDescobrir quais entidades fazem parte do domínio EIXOS : 2

do problema e identificar suas propriedades e OBJETO: SOFÁ

comportamentos é tarefa do programador e dos PROPRIEDADES


COR :
VALORES
VERDE
analistas de sistemas LUGARES :
MARCA :
2
ARTEFACTO

Fred&Leônidas (c) 2003 POO 21 Fred&Leônidas (c) 2003 POO 22

Exemplos de objetos (estrutura) Exemplos de objetos (ações)

OBJETO: ÔNIBUS
AÇÔES OU SERVIÇOS
VELOCIDADE: 112 ACELERAR
LUGARES: 44 FREIAR
MARCA: MERCEDES
KM: 80.732 DIRECIONAR
EIXOS: 2 RECEBER PASSAGEIRO
PINTAR

OBJETO: SOFÁ
COR: VERDE AÇÔES OU SERVIÇOS
LUGARES: 2 ACOMODAR PESSOA
MARCA: ARTEFACTO
MOVER
PINTAR
COBRIR

Fred&Leônidas (c) 2003 POO 23 Fred&Leônidas (c) 2003 POO 24

4
4
Exemplos de objetos (estrutura) Objetos
acelerar( )
uDefinição:

“Um objeto tem estado, comportamento e


VELOCIDADE: 112

pintar( )
freiar( )
LUGARES: 44
MARCA: MERCEDES

identidade; a estrutura e o comportamento de


KM: 80.732
EIXOS: 2

mover( ) objetos similares são definidas nas suas


receberPassag( ) classes.” [Booch, 91]
cobrir( )

pintar( )

COR: VERDE
LUGARES: 2
MARCA: ARTEFACTO

mover( )
Fred&Leônidas (c) 2003 POO 25 Fred&Leônidas (c) 2003 POO 26

Características de um Objeto Características de um Objeto


uEstado: uValores são:
ðPropriedades (geralmente estáticas) ðatemporais, imutáveis, não instanciáveis
• Característica inerente ou distintiva que contribui para a uObjetos, por outro lado...
unicidade do objeto
ðexistem no tempo/espaço
ðValores (geralmente dinâmicos)
ðsão mutáveis
• Todas as propriedades possuem valores que podem variar
ao longo do tempo ðtêm estado
“O estado de um objeto consiste de todas as ðsão instanciáveis e
propriedades do objeto mais os valores atuais destas ðpodem ser destruídos e compartilhados
propriedades ” [Booch, 91]
Fred&Leônidas (c) 2003 POO 27 Fred&Leônidas (c) 2003 POO 28

Características de um Objeto Identidade de um Objeto


uComportamento: uIdentidade
ðO comportamento de um objeto é caracterizado pelo ðCada objeto é único e distinguível dos demais
conjunto de operações que o objeto é capaz de independentemente dos valores de seus atributos
executar. ðPara manipular os objetos usamos referências para os
ðPodemos imaginar objetos como prestadores de mesmos
serviços. ðUma referência é uma variável que "aponta" para
ðSempre que um objeto solicitar um serviço de outro objetos do tipo para o qual foi declarada ou para
deve enviar-lhe uma mensagem. objetos dos subtipos deste tipo
ðSe o objeto receptor for capaz de prestar este serviço,
ele será executado
Fred&Leônidas (c) 2003 POO 29 Fred&Leônidas (c) 2003 POO 30

5
5
Ciclo de vida de um Objeto Ciclo de vida de um Objeto
uLinha da vida de um objeto: uExemplo com um código Java:
1 ðInstanciação: o objeto é criado e passa a ser Quadrado q;
referenciado por um nome (referência);
2 ðUso: o objeto recebe mensagens de outros objetos e, 1 q = new Quadrado();
com isso, executa parte da funcionalidade do sistema; [Link](10);
3 ðDestruição: A área de memória ocupada pelo objeto é [Link](20);
2
reclamada; todas as referências para o objeto ficam [Link]();
[Link]("red");
nulas.
3 q = null;

Fred&Leônidas (c) 2003 POO 31 Fred&Leônidas (c) 2003 POO 32

Instanciação de Objetos Instanciação de Objetos


uEsquematicamente: 1 uDefinição:
Quadrado
ð"Operação através da qual um objeto é criado e passa
q
a existir na memória do computador. A classe é o
new modelo ou fôrma utilizada para criar o objeto."
uObjetos x referências
tamanho: 30
ðObjetos são manipulados através de referências ou
ponteiros que indicam onde o objeto está na memória.
color: "white"

isVisible : false

ðNão há outra forma de chegar ao objeto sem ser via


uma referência

Fred&Leônidas (c) 2003 POO 33 Fred&Leônidas (c) 2003 POO 34

Referências para objetos Referências para objetos


uA maioria dos objetos em um programa Java são uReferências são ponteiros para o objeto
acessados por variáveis chamadas referências Quadrado q; //declaração
ðComo Java é fortemente tipada, estas variáveis devem q = new Quadrado(); //instanciação
ser declaradas e tipificadas em tempo de compilação [Link](50); //uso
ðExemplos: q = null; //desprezo

String s; //s é do tipo String


Quadrado q; //q é do tipo Quadrado
Triangulo t; //t é um Triângulo

Fred&Leônidas (c) 2003 POO 35 Fred&Leônidas (c) 2003 POO 36

6
6
Referências para objetos Referências para objetos
uReferências são ponteiros para o objeto uReferências são ponteiros para o objeto
Quadrado q; //declaração Quadrado q; //declaração
q = new Quadrado(); //instanciação q = new Quadrado(); //instanciação
[Link](50); //uso [Link](50); //uso
q = null; //desprezo q = null; //desprezo

q q
size 30

Fred&Leônidas (c) 2003 POO 37 Fred&Leônidas (c) 2003 POO 38

Referências para objetos Referências para objetos


uReferências são ponteiros para o objeto uReferências são ponteiros para o objeto
Quadrado q; //declaração Quadrado q; //declaração
q = new Quadrado(); //instanciação q = new Quadrado(); //instanciação
[Link](50); //uso [Link](50); //uso
q = null; //desprezo q = null; //desprezo

q mudeTamanho(50) q
size 30 size 50

Fred&Leônidas (c) 2003 POO 39 Fred&Leônidas (c) 2003 POO 40

Referências para objetos Mensagens


uReferências são ponteiros para o objeto uTodo objeto possui estado e comportamento
Quadrado q; //declaração uComportamento: conjunto de computações que o
q = new Quadrado(); //instanciação objeto é capaz de realizar
[Link](50); //uso
ð"Coisas que ele pode fazer"
q = null; //desprezo
uA forma de pedir a um objeto para realizar uma
objeto sem referência! computação é enviando uma mensagem para ele
q
ðNa verdade, utiliza-se a referência para enviar a
size 50
mensagem para o objeto
ðNo slide anterior, mudeTamanho() é uma mensagem
Fred&Leônidas (c) 2003 POO 41 Fred&Leônidas (c) 2003 POO 42

7
7
Mensagens Mensagens
uExemplo: uPara realizar a operação associada a uma
Quadrado q; String s; mensagem, um objeto precisa executar um
procedimento computacional (bloco de código)
q = new Quadrado(); s = new String("Java");
[Link](10); int x = [Link](); uTais procedimentos são implementados na classe
[Link](20); int y = [Link](2); do objeto e recebem o nome de métodos
[Link](); s = [Link](1);
[Link]("red"); s = "J".concat(s); uSempre que um objeto recebe uma mensagem,
... ... ele executa o método correspondente a ela.
ðA mensagem é a ativação de um método!
Mensagens

Fred&Leônidas (c) 2003 POO 43 Fred&Leônidas (c) 2003 POO 44

Mensagens Mensagens
uO conceito de mensagem na POO é análogo ao de uO envio de uma mensagem para um objeto pode
ativação de função/procedimento na programação provocar um dos dois efeitos abaixo no objeto alvo:
imperativa ðMudança no estado interno do objeto
uO conceito de método na POO é análogo ao de ðInvariância do estado de um objeto
implementação de função/procedimento na uA mensagem pode ainda:
programação imperativa. ðProduzir um valor de retorno
• (Em Java, mensagens são expressões)
ðProduzir nenhum valor de retorno

Fred&Leônidas (c) 2003 POO 45 Fred&Leônidas (c) 2003 POO 46

Mensagens Mensagens
uExemplos: uExemplos:
Quadrado q; String s;
q = new Quadrado(); s = new String("Java");

[Link](10); int x = [Link](); Não mudam o estado e


[Link](20); Mudam o estado e char y = [Link](2); retornam um valor
[Link](); não retornam valor
[Link]("red"); s = [Link](1); Mudam o estado e
... s = "J".concat(s); retornam um valor
...

Fred&Leônidas (c) 2003 POO 47 Fred&Leônidas (c) 2003 POO 48

8
8
Aula Prática Classes
uFaça os exercícios da Prática 1 uDefinição:
uNesta prática você: ðLocal onde encontram -se definidas as propriedades
(variáveis) e o comportamento (métodos) que uma
ðConhecerá o BlueJ ([Link]), a ferramenta de
categoria de objetos deve possuir.
programação Java que nos acompanhará por todo o
curso uEstrutura fundamental de programação em Java.
ðInstanciará objetos a partir de classes prontas ðTodo e qualquer programa Java define pelo menos
ðEnviará mensagens para estes objetos uma classe.
ðRemoverá referências para estes objetos ðNão há como escrever código Java sem definir uma
classe.

Fred&Leônidas (c) 2003 POO 49 Fred&Leônidas (c) 2003 POO 50

Classes Exemplo de uma classe em Java


uToda classe define um novo tipo de dados. uExemplo:
Nome da classe
uValores de um tipo definido por uma classe class Cliente {
recebem o nome de objetos. private String nome;
private String endereco;
OBJETOS
CLASSE private char sexo;
}
INSTANCIAÇÃO Propriedades dos
objetos da classe

Fred&Leônidas (c) 2003 POO 51 Fred&Leônidas (c) 2003 POO 52

Exemplo de uma classe em Java Propriedades


uInstanciação da classe Cliente: uA classe Cliente, como está, apenas define a

Cliente c1 = new Cliente();


estrutura dos objetos, isto é, as propriedades que
Cliente c2 = new Cliente(); os objetos Cliente terão
c1 c2 ðEsta classe é uma abstração de um cliente para um
sistema computacional
nome nome ðO domínio do sistema determina quais serão estas
endereco endereco propriedades
sexo sexo
uUma forma de definir abstrações em Java é criar
uma classe!
Fred&Leônidas (c) 2003 POO 53 Fred&Leônidas (c) 2003 POO 54

9
9
Exemplo de uma classe em Java Métodos
uAmpliando a classe Cliente (inserindo métodos): uUm método é um procedimento ou função que
permite aos objetos de uma classe executarem
class Cliente {
private String nome; serviços
private String endereco; ðÉ como o objeto implementa suas operações
private char sexo; uO envio de uma mensagem para um objeto faz o
método correspondente (de mesmo nome) ser
public void setNome(String novo) { executado
nome = novo;
ðA mensagem é a ativação de um método sobre o
} Método
objeto
}
Fred&Leônidas (c) 2003 POO 55 Fred&Leônidas (c) 2003 POO 56

Exemplo de uma classe em Java Métodos


uInstanciação da classe Cliente: uMétodos podem ter parâmetros
[Link]("Luisa"); uMétodos podem ler e/ou alterar os valores das
propriedades de um objeto
c1 ðModificam o estado do objeto
setNome(String novo)

nome "Luisa" setNome("Luisa"); uA implementação de um método utiliza todas as


endereco estruturas lógicas da programação estruturada:
sexo decisão, laços, desvio de fluxo, atribuição, etc.
uMétodos: é onde as coisas acontecem na POO!

Fred&Leônidas (c) 2003 POO 57 Fred&Leônidas (c) 2003 POO 58

Encapsulamento Encapsulamento
uA abstração de um objeto deve preceder à sua
implementação.
uA implementação, uma vez selecionada, deve ser
tratada como um segredo da abstração e
escondida dos clientes deste objeto
“Nenhuma parte de um sistema complexo deve
depender dos detalhes internos de outras partes”
[Booch, 91]

Fred&Leônidas (c) 2003 POO 59 Fred&Leônidas (c) 2003 POO 60

10
10
Encapsulamento e abstração Encapsulamento
uConceitos complementares: uDefinição:
ðA abstração representa um conceito “Encapsulamento é o processo de esconder todos os
ðO encapsulamento impede os clientes de verem como detalhes de um objeto que não contribuem para suas
este conceito foi implementado características essenciais.” [Booch, 91]
u“Para uma abstração funcionar sua implementação
deve estar encapsulada.”
uObjetos são formados por 2 partes:
ðuma interface (visão externa)
ðuma implementação (funcionalidade interna)
Fred&Leônidas (c) 2003 POO 61 Fred&Leônidas (c) 2003 POO 62

Encapsulamento Encapsulamento
“A habilidade de mudar a representação de uma uUma classe Java define um bloco para
abstração sem perturbar quaisquer de seus clientes é o encapsulamento de propriedades e métodos
principal benefício do encapsulamento” [Booch, 91]. uOs métodos de uma classe deveriam acessar
uLembre-se disto: apenas as propriedades da própria classe e nunca
ð“O encapsulamento previne acidentes, não fraudes” as de outra classe
[Stroustroup]
uModificadores de acesso controlam a visibilidade
ð“O encapsulamento não impede o desenvolvedor de do encapsulamento de Java
fazer coisas estúpidas” [Booch, 91]
ðpublic: tudo que pode ser acessado de fora da classe
ðprivate: tudo que é exclusivo da própria classe
Fred&Leônidas (c) 2003 POO 63 Fred&Leônidas (c) 2003 POO 64

Exemplo de uma classe em Java Exemplo de uma classe em Java


uVisibilidade do encapsulamento de Cliente: uVisibilidade do encapsulamento de Cliente:

class Cliente { class Venda {


private String nome; private Cliente cliente;
interno

private String endereco; ...

X
private char sexo; public void mudeCliente(String novo) {
[Link] = novo;
public void setNome(String novo) { }
público

nome = novo; }
} A propriedade nome é privativa da classe Cliente
}
Fred&Leônidas (c) 2003 POO 65 Fred&Leônidas (c) 2003 POO 66

11
11
Exemplo de uma classe em Java Exemplo de uma classe em Java
uVisibilidade do encapsulamento de Cliente: uEsquematicamente:

class Venda {
setNome()
private Cliente cliente;
...
public void mudeCliente(String novo) { umaVenda
[Link](novo); Emissor
}
} método mudeCliente()
O método setNome() é público em Cliente cliente
Receptor
Fred&Leônidas (c) 2003 POO 67 Fred&Leônidas (c) 2003 POO 68

Construtores e Destrutores Construtores e Destrutores


uAlgumas linguagens implementam métodos uExemplos de construtor:
especiais: Cliente c;
ðConstrutores : usados para criar e/ou inicializar objetos c = new Cliente("Bart", "Springfield", 'M');
novos
• Em Java e C++ ganham o mesmo nome da classe Cria o objeto Construtor Parâmetros
• Pode-se ter várias versões de construtores para cada classe, Cliente d;
mudando a quantidade e o tipo de parâmetros d = new Cliente("Lisa", "Springfield", 'F');
ðDestrutores : usados para destruir objetos
• Não há métodos destrutores em Java O construtor só é utilizado no momento da criação do objeto
• Em C++ há uma única versão por classe
Fred&Leônidas (c) 2003 POO 69 Fred&Leônidas (c) 2003 POO 70

Exemplo de uma classe em Java Exemplo de uma classe em Java


uDefinindo um construtor em Cliente: uContinuação da classe:
class Cliente {
private String nome; public void setNome(String novo) {
private String endereco; nome = novo;
private char sexo; }
} //fim da classe Cliente
public Cliente(String n, String e,
char sx) {
nome = n;
endereco = e;
sexo = sx;
}
Fred&Leônidas (c) 2003 POO 71 Fred&Leônidas (c) 2003 POO 72

12
12
Classes: resumo Variáveis de classe
uUma classe Java define uma abstração e permite uUma classe pode ter variáveis contendo informações
seu encapsulamento úteis, como:
ðGraus de visibilidade podem ser definidos ðnúmero de objetos instanciados da classe até certo
uO corpo da classe é formado por: instante
ðPropriedades dos objetos da classe (variáveis) ðvalor médio/mínimo/máximo de determinada propriedade

ðMétodos que implementam as operações executadas uEssas variáveis não devem ser criadas para cada
pelos objetos (procedimentos e funções) objeto
ðConstrutores que inicializam as propriedades de um ðPara cada classe existirá apenas uma única cópia de
objeto recém-criado cada variável: variável de classe
Fred&Leônidas (c) 2003 POO 73 Fred&Leônidas (c) 2003 POO 74

Variáveis de classe Variáveis de classe


uExemplo: uOs objetos da classe podem acessar as variáveis

agenciaEpitacio
de classe (para ler ou modificar seu valor)
Classe AgenciaBancaria uA modificação do valor de uma variável de classe é
agenciaCentro percebida por todos os objetos
juros uA variável de classe fica armazenada na classe e
não nas instâncias
agenciaManaira
uÉ comum o uso de variáveis de classe para definir
Variável de Classe constantes: e.g. PI, MAX_IDADE, etc.

Fred&Leônidas (c) 2003 POO 75 Fred&Leônidas (c) 2003 POO 76

Métodos de classe Métodos de classe


uMuitas vezes faz- se necessário acessar parte do uExemplos:
comportamento de uma classe independentemente AgenciaBancaria Math
de suas instâncias numAgencias() sqrt()
ðMétodo dataAtual em uma classe Data
ðMétodo sqrt que calcula a raiz quadrada (classe Math)
uComportamento é da classe e não de um objeto em
particular addJuros(int) sin()

ðÉ como se a classe tivesse operações próprias


método de classe
Fred&Leônidas (c) 2003 POO 77 Fred&Leônidas (c) 2003 POO 78

13
13
Aula Prática Composição
uFaça os exercícios da Prática 2 uObjetos reais podem ser agrupamentos ou
uNesta prática você: composições de objetos mais "básicos"
ðConhecerá um pouco mais sobre a sintaxe de classes uExemplo:
Java ðUm objeto bicicleta é a composição de um objeto
ðIdentificará propriedades de objetos guidon, um objeto selim, dois objetos pneus, um objeto
ðIdentificará e utilizará construtores de objetos quadro, etc.

ðDistinguirá variáveis de classe de variáveis de uEstes "objetos básicos" podem ser reutilizados
instância para compor outros tipos de objetos compostos.
ðA composição favorece a reutilização de código!
Fred&Leônidas (c) 2003 POO 79 Fred&Leônidas (c) 2003 POO 80

Composição Composição
uA composição do mundo real é conseguida por uE na POO? Como definimos objetos compostos?
meio de um processo chamado de montagem ðO objeto composto possui propriedades que apontam
ðOs objetos são unidos por meio de interfaces físicas para os objetos componentes,
bem definidas (o cano do guidon deve encaixar ou em outras palavras
perfeitamente no tubo do quadro, o parafuso do pneu ðO objeto composto possui propriedades cujos tipos
dianteiro deve encaixar no garfo do quadro, etc..) são as classes dos objetos componentes
uAs operações enviadas ao objeto composto uA composição é um relacionamento entre objetos
disparam operações dos seus objetos uA herança é um relacionamento entre classes
componentes
Fred&Leônidas (c) 2003 POO 81 Fred&Leônidas (c) 2003 POO 82

Composição Composição
uExemplo: uExemplo:
preco 300
class Bicicleta {
peso 25
private Guidon guidon;
pneus guidon
private Pneu[] pneus; [][]
quadro
private Quadro quadro;
float preco; (Bicicleta)
int peso;
(Guidon)
}

(Pneu) (Pneu) (Quadro)

Fred&Leônidas (c) 2003 POO 83 Fred&Leônidas (c) 2003 POO 84

14
14
Composição Composição
uOutro exemplo: uExemplo: calculeTotal()
class Venda { numProd 2
private Cliente cliente; produtos
private Produto[] produtos; cliente data
[][]
private Date data;
private int numProd; 15/07/03
(Venda)
}
class Produto { (Date)
200 50
private float preco;
public float getPreco(); (Produto) (Produto)
} (Cliente)

Fred&Leônidas (c) 2003 POO 85 Fred&Leônidas (c) 2003 POO 86

Composição Composição
uExemplo: calculeTotal() uExemplo: calculeTotal()
1 numProd 2 1 numProd 2 250
0 produtos 1 produtos
cliente data cliente data
0 [][] 0 [][]
getPreco () 15/07/03 getPreco () 15/07/03
(Bicicleta) (Bicicleta)

(Date) (Date)
200 50 200 50

(Produto) (Produto) (Produto) (Produto)


(Cliente) (Cliente)

Fred&Leônidas (c) 2003 POO 87 Fred&Leônidas (c) 2003 POO 88

Composição Aula Prática


uO objeto Venda delega para os objetos Produto a uFaça os exercícios da Prática 3
tarefa de informar o preço para que a operação uNesta prática você:
calculeTotal() possa ser implementada. ðCriará composições de objetos
uDe forma análoga, poderia ser implementada a ðObservará o fenômeno da delegação
operação getMesVenda(); só que desta vez, o
objeto delegado seria a data.

Fred&Leônidas (c) 2003 POO 89 Fred&Leônidas (c) 2003 POO 90

15
15
Herança Herança
uPermite reutilizar as características de uma classe uClasses:
na definição de outra ðmais generalizada: superclasse
uÉ a contribuição original do paradigma de objetos ðmais especializada: subclasse
uRepresentação gráfica da herança: uViabiliza a construção de sistemas a partir de
componentes reusáveis
Empregado ðSuporta a reutilização entre sistemas
ðFacilita a extensibilidade em um mesmo sistema
uO objeto descendente não tem trabalho para
Assalariado Gerente Supervisor
receber a herança
Fred&Leônidas (c) 2003 POO 91 Fred&Leônidas (c) 2003 POO 92

Herança Herança
uHerança é uma técnica para prover suporte à uSe B é subclasse de A então:
especialização ðos objetos de B suportam todas as operações
ðClasses mais abaixo: especializadas suportadas pelos objetos de A, exceto aquelas
ðClasses mais acima: genéricas redefinidas
ðas variáveis de instância de B incluem todas as
uMétodos e variáveis internas são herdados por
variáveis de instância de A
todos os objetos dos níveis para baixo
uHerança pode afetar encapsulamento
uVárias subclasses podem herdar as características
ðSubclasses “enxergam” os dados e a implementação
de uma superclasse (herança múltipla – não das superclasses
presente em Java!)
Fred&Leônidas (c) 2003 POO 93 Fred&Leônidas (c) 2003 POO 94

Árvore de Herança Árvore de Herança


uUnião das classe que herdam entre si gera uma uTodos os objetos herdam características de
árvore de herança, ou uma hierarquia de classes Polígono
uRetângulo e Quadrado são especializações de
Polígono Quadrilátero
uEm todos os casos, cada subclasse possui uma
Quadrilátero Hexágono Triângulo única superclasse
ðHerança Simples
Retângulo Quadrado

Fred&Leônidas (c) 2003 POO 95 Fred&Leônidas (c) 2003 POO 96

16
16
Herança Múltipla Problemas da Herança múltipla
Pessoa uConflitos de nomes
ðO mesmo nome de método ou variável de instância
existe em mais de uma das superclasses. Qual deles
Estudante Professor herdar?
Professor
Estudante Estudante
Pós-Graduação Pós-Graduação
imprime()
imprime()

Assistente Assistente
Graduado Graduado
Fred&Leônidas (c) 2003 POO 97 Fred&Leônidas (c) 2003 POO 98

Problemas da Herança múltipla Benefícios oferecidos pela herança


uDuplicação de classes herdadas uDiminui a quantidade de código para adicionar
Pessoa características a sistemas
ðSubclasses provêem comportamentos especializados
tomando como base os elementos comuns criados na
Estudante Professor superclasse
ðReutilização do código da superclasse várias vezes
Estudante
Pós-Graduação uFacilita a manutenção de sistemas
ðMaior legibilidade do código existente
Assistente ðQuantidade menor de código a ser acrescentada
Graduado
Fred&Leônidas (c) 2003 POO 99 Fred&Leônidas (c) 2003 POO 100

Polimorfismo Exemplo de Polimorfismo


uPolimorfismo
Poligono
ðDo Grego poly(muitas) + morpho (formas)
uHá dois aspectos do polimorfismo area();

ðMétodos de mesmo nome são definidos em várias


classes, podendo assumir diferentes implementações
em cada uma dessas Triangulo Retangulo Hexagono

ðPropriedade pela qual uma variável pode apontar


area(); area(); area();
objetos de diferentes classes em momentos distintos
uEstes aspectos são complementares, e trabalham
juntos
Fred&Leônidas (c) 2003 POO 101 Fred&Leônidas (c) 2003 POO 102

17
17
Polimorfismo Exemplo de uso de Polimorfismo
uVárias classes podem ter métodos com o mesmo uÁrea total sem polimorfismo:
nome double areaTotal = 0;
uUma variável do tipo Poligono pode assumir a for (int i = 0; i < MAXPOLIG; ++i) {

forma de Poligono, Triangulo, Retangulo, etc. if (poligono[i] instanceof Poligono)


areaTotal +=
Poligono p;
poligono[i].areaPoligono();
p = new Poligono();
[Link](); else if (poligono[i] instanceof Triangulo)
… areaTotal +=
p = new Triangulo(); poligono[i].areaTriangulo();
[Link]();
Fred&Leônidas (c) 2003 POO 103 Fred&Leônidas (c) 2003 POO 104

Exemplo de uso de Polimorfismo Exemplo de uso de Polimorfismo


uÁrea total sem polimorfismo: uÁrea total com polimorfismo
double areaTotal = 0;
else if (poligono[i] instanceof Retangulo)
for (int i = 0; i < MAXPOLIG; ++i)
areaTotal +=
{
poligono[i].areaRetangulo();
areaTotal += poligono[i].area();
else if (poligono[i] instanceof Hexagono)
areaTotal += }
poligono[i].areaHexagono(); uRápido, enxuto e fácil de entender
} ðO acréscimo de uma nova subclasse de Poligono não
altera nenhuma linha do código acima!
Fred&Leônidas (c) 2003 POO 105 Fred&Leônidas (c) 2003 POO 106

Benefícios do polimorfismo Ligação dinâmica


uLegibilidade do código uA implementação do polimorfismo exige ligação
ða utilização do mesmo nome de método para vários dinâmica
objetos torna o código de mais fácil leitura e
assimilação, facilitando muito a expansão e uUma ligação é uma associação:
manutenção dos sistemas. ðentre um atributo e uma entidade
uCódigo de menor tamanho ðentre uma operação e um símbolo
ðcódigo mais claro, enxuto e elegante.
uUma ligação é estática se ocorre em tempo de
uFlexibilidade
compilação ou interligação (linking) e não é mais
ð Pode-se incluir novas classes sem alterar o código que
a manipulará modificada
Fred&Leônidas (c) 2003 POO 107 Fred&Leônidas (c) 2003 POO 108

18
18
Ligação dinâmica Polimorfismo no Sistema Caixa
uA ligação dinâmica é feita em tempo de execução Venda
ou pode ser alterada no decorrer da execução do calculeTotal() Caixa
programa
uLigação do operador a uma particular operação
feita em tempo de execução Venda[ ]
ðCompromete a eficiência VendaVista VendaPrazo
calculeTotal() calculeTotal()
ðUma instância de uma subclasse pode ser atribuída a
uma instância de uma superclasse

Fred&Leônidas (c) 2003 POO 109 Fred&Leônidas (c) 2003 POO 110

Classes abstratas Exemplo de classe abstrata


uPode-se implementar classes que definem ContaAbstrata

comportamentos “genéricos” String num;


double saldo;
ðA essência da superclasse é definida e pode ser credito();
debito();
parcialmente implementada saldo(){..}
ðDetalhes são definidos em subclasses especializadas numero(){..}

ðNão possuem construtores ContaBonus


Poupanca ContaEspecial
ðPossuem pelo menos um método abstrato double taxa; int limite; int bonus;
credito(){..} credito(){..}
ðSubclasses adeqüam suas peculiaridades à sua credito(){..}
debito(){..} debito(){..} debito(){..}
semântica rendeJuros(){..}

Fred&Leônidas (c) 2003 POO 111 Fred&Leônidas (c) 2003 POO 112

Representação de classe abstrata Polimorfismo paramétrico


uO polimorfismo abordado: métodos diferentes com
ContaEspecial
o mesmo nome em classes distintas
Poupanca uPolimorfismo paramétrico: vários métodos com o
mesmo nome, definidos na mesma classe, que se
ContaAbstrata
diferenciam pelo tipo ou número de parâmetros
suportados
uTambém é chamado de sobrecarga (overloading,

ContaBonus
em inglês)

Fred&Leônidas (c) 2003 POO 113 Fred&Leônidas (c) 2003 POO 114

19
19
Polimorfismo paramétrico Operações com objeto, classe e herança
uUma mensagem pode ser enviada a um objeto u Objetos, classes e herança permitem a definição de
com parâmetros: hierarquias de abstrações
ðnúmero variável u Abstrações facilitam o entendimento e o gerenciamento da
ðde tipos diferentes complexidade dos sistemas
uO método invocado é escolhido pelos parâmetros u Classes agrupam objetos com características iguais
enviados na mensagem u Herança estrutura classes semelhantes
class Documento { u Operações abstratas:

void imprime(); ðclassificação/instanciação
void imprime(String titulo); ðgeneralização/especialização
} ðcomposição/decomposição
Fred&Leônidas (c) 2003 POO 115 Fred&Leônidas (c) 2003 POO 116

Classificação/Instanciação Generalização/Especialização
uA capacidade de classificar objetos permite uA partir da observação de duas ou mais classes pode-se
expressar relações de classificação/instanciação abstrair uma classe mais genérica
u Uma superclasse é considerada uma generalização das
uObservação de diversos fenômenos para subclasses, que são chamadas de especializações
categorização em grupos (classes), com base nas u Deve haver pelo menos uma propriedade que diferencie
propriedades comuns a todos INSTANCIAÇÃO duas classes especializadas

VendaVista Venda ESPECIALIZAÇÃO

venda1 venda2 VendaVista VendaPrazo GENERALIZAÇÃO


CLASSIFICAÇÃO
Fred&Leônidas (c) 2003 POO 117 Fred&Leônidas (c) 2003 POO 118

Composição/Decomposição Aula Prática


u Permite que objetos sejam compostos pela agregação de uFaça os exercícios da Prática 4
outros objetos ou componentes
uNesta prática você:
u Instâncias de uma classe são compostas por instâncias de
outras classes: decomposição ðExperimentará o conceito de herança
u Formação de uma nova classe como um agregado de ðExperimentará o conceito de polimorfismo
classes preexistentes: composição
DECOMPOSIÇÃO

Venda

Produto Cliente Data COMPOSIÇÃO

Fred&Leônidas (c) 2003 POO 119 Fred&Leônidas (c) 2003 POO 120

20
20
Bibliografia
[Booch , 91] Booch, G. Object Oriented Design with
Applications . The Benjamin/Cummings Publishing
Company. 1991.
[Gamma, 95] Gamma, Erich. Helm, Richard. Johnson, Ralph.
Vlissides, John. Padrões de Projeto – Soluções
Reutilizáveis de Software Orientado a Objetos
[Sebesta, 99] Sebesta, R. Conceitos de Linguagens de
Programação. 4a edição. Bookman. 1999.

Fred&Leônidas (c) 2003 POO 121

21
21

Você também pode gostar