Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientação a Objetos na
Prática
Fabio Vinicius Binder
fabio.binder@infnet.edu.br
INSTITUTO INFNET - 1
OO na Prática
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Modelagem de Sistemas
INSTITUTO INFNET - 3
OO na Prática
OO na Prática
O que é um Modelo?
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
A figura acima mostra que podemos representar “abstrações” de elementos do mundo real
no ambiente orientado a objetos. Ou seja, são representadas apenas as partes relevantes para o
problema. Essas representações têm relacionamentos entre si, da mesma forma que no mundo
real. O modelo acima identifica apenas nomes e relacionamentos mas não se preocupa com
detalhes como cor, tamanho, tipo.
O foco do estudo e levantamento não é mais o processo, como por exemplo dirigir ou
morar. O cerne do estudo é na entidade que participa do processo, quais as informações
relevantes do Motorista (nome, CPF), do Veículo (placa, cor, marca, ano) e quais as ações
(métodos) que serão executadas (dirigir, morar).
INSTITUTO INFNET - 7
OO na Prática
Modelagem OO
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Benefícios Técnicos:
Reusabilidade;
Extensibilidade e manutenção;
Aumento da qualidade;
Benefícios Econômicos:
Apoio ao planejamento;
Reaproveitamento de esforços.
Os benefícios técnicos da modelagem orientada a objetos incluem:
Reusabilidade: A orientação a objetos permite a reutilização de código produzido através
de mecanismos como herança, polimorfismo, encapsulamento, modularização e coesão (esses
termos serão cobertos adiante).
Extensibilidade e Manutenção: As partes do sistema (classes) possuem tanto dados como
funcionalidades. Em um projeto bem desenhado, se for necessário acrescentar novos recursos
ao sistema, basta introduzir as modificações necessárias em partes bem específicas .
Aumento da Qualidade: Sistemas de qualidade são os que foram desenvolvidos no prazo e
no orçamento previstos e que atendem às necessidades dos usuários. A melhoria da qualidade é
possível pela maior participação do usuário na elaboração do sistema.
Além dos benefícios técnicos é possível compreender que existem benefícios econômicos,
principalmente pelo fato de conseguirmos planejar melhor o desenvolvimento e reaproveitar
esforços.
INSTITUTO INFNET - 8
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Orientação a Objetos
INSTITUTO INFNET - 9
OO na Prática
OO na Prática
Analogia - Mundo Real
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Conceito de Classe:
As plantas da casa representam a classe.
É a definição da forma e funcionalidade.
A partir da classe se constrói um objeto na memória.
Responsabilidade da Classe:
É o que a classe “sabe” e o que ela “faz”.
O que ela “sabe” são as suas propriedades ou atributos.
O que a classe “faz” são os seus métodos ou funções.
O conceito de classe na história é muito claro. As plantas da casa, desenhadas pelo
arquiteto, representam a idéia de classe. É a partir das plantas que se constrói a casa. É a partir
da classe que se constrói um objeto na memória.
A classe é o gabarito, a definição da forma e da funcionalidade. A forma é representada
pelas propriedades e a funcionalidade pelos métodos.
Quando uma classe é modelada, existe a preocupação de documentar as suas
responsabilidades: o que a classe “sabe” (propriedades ou atributos) e o que a classe “faz”
(métodos ou funções).
As casas criadas têm propriedades parecidas (quantidade de cômodos, andares) mas cada
uma tem características próprias, o endereço, por exemplo será diferente para cada uma. A
fachada de uma é azul e outra colocou pastilhas verdes. As características em comum são da
estrutura, fazendo a analogia com sistemas, a classe forma objetos com a mesma estrutura, mas
cada objeto terá valores próprias para suas características.
INSTITUTO INFNET - 14
OO na Prática
Casa = Objeto
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Notação UML
Notação Alternativa: Sacar()
saldo
Funções
Propriedades Depositar()
Notação UML:
A figura da esquerda representa uma classe, enquanto a figura da direita mostra a
representação de um objeto. Note que o objeto traz o nome da classe ao qual ele pertence.
O nome do objeto, como visto no exemplo (conta1: ContaCorrente), segue o padrão -
NomedoObjeto:NomedaClasse, mas poderia aparecer sozinho NomedoObjeto ou apenas
:nomedaClasse - note os dois pontos antes do nome da classe.
Notação Alternativa:
Com esta representação visualizamos bem a proteção que os métodos fazem na classe, a
idéia é que as informações somente sejam acessadas (criados, excluídos, alterados) através dos
métodos da própria classe. Com isso temos dependência do código e sabemos que ao dar
manutenção em algum processo da classe cliente somente iremos alterar os métodos desta
classe, não precisaremos vasculhar o sistema em busca de alterações.
INSTITUTO INFNET - 16
OO na Prática
Propriedades
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Relacionamento de generalização e
especialização entre classes.
Permite ao programador criar uma nova
classe “estendendo” uma classe
anterior.
A herança define uma hierarquia onde o
conceito mais genérico fica sobre o
conceito mais específico.
A herança constitui o mecanismo pelo qual se pode compartilhar automaticamente métodos
e dados entre classes diferentes, que tenham um relacionamento de generalização e
especialização.
A herança permite ao programador criar uma nova classe “estendendo” uma classe anterior
e implementando as propriedades e métodos específicas.
Em um banco, por exemplo, podemos ter Conta Especial como uma especialização de
Conta-Corrente. A Conta Especial tem o atributo “limite” que estende o conceito de uma conta
comum.
Um outro exemplo é o Vendedor que estende o conceito de Funcionário. Sabemos que todo
Vendedor é um Funcionário, mas nem todo Funcionário é Vendedor.
A herança define uma hierarquia onde o conceito mais genérico fica sobre o conceito mais
específico e o item mais específica “aproveita” as definições do item mais genérico.
INSTITUTO INFNET - 19
OO na Prática
Exemplo de Herança
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
+calcularSalario()
A figura mostra uma herança em um sistema de folha de pagamento. Funcionários comuns
tem determinados dados como matrícula, nome, salário base, etc. Possui também métodos para
demissão e cálculo do salário.
Para acrescentar outro tipo de funcionário à empresa basta criar uma subclasse, ou seja fazer
uma classe que herde as características da classe Funcionário e adicione as suas próprias. No caso,
a classe Vendedor foi incluída no diagrama herdando as características de Funcionário e
acrescentando suas próprias: comissão de venda e total de vendas realizadas no mês.
INSTITUTO INFNET - 20
OO na Prática
Encapsulamento
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
CD player
Filmadora Eletrocardiograma
play stop
> ||
pause
MP3 player
Câmera de segurança
Videocassete
É possível identificar com clareza o polimorfismo através de uma analogia com o mundo
real: a operação de gravação: a filmadora, o cd player o eletrocardiograma, a câmera de
segurança, o videocassete e o mp3 player tem o comando gravar. Entretanto, todos sabem que
dependendo do objeto o método de gravação será diferente.
INSTITUTO INFNET - 23
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Diagrama de Classes
INSTITUTO INFNET - 24
OO na Prática
OO na Prática
Conceitos
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
O exemplo acima mostra três classes do Banco Money: ContaCorrente (Model), TelaMenu (View)
e Principa (Controller). Maiores informações sobre o padrão Model-View-Controller podem ser
encontradas no Apêndice A.
Na fase de análise as classes de negócio são identificadas. Classe de negócio é aquela que trata das
funcionalidades principais do sistema. A classe ContaCorrente é uma classe de negócio pois ela
define os dados e as operações referentes a uma conta corrente.
Em um sistema de agenda eletrônica o objetivo principal é manter os contatos (incluir, buscar,
listar, etc). As classes de negócio identificadas são as seguintes:
INSTITUTO INFNET - 26
OO na Prática
Visibilidade
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Atributos
privativos
Métodos
públicos
A figura mostra a classe ContaCorrente com as suas propriedades e métodos. Do lado esquerdo
destas propriedades e métodos existem os sinais que indicam a visibilidade do elemento.
Todos os atributos estão definidos como private e todos os métodos como públicos. Esta é uma boa
prática pois protege atributos de acessos externos. Entretanto esta regra não é rígida, já que é
bastante comum encontrar métodos privativos (métodos que executam tarefas específicas para a
classe) e atributos constantes públicos (constantes não mudam de valor portanto se forem definidas
como públicas não possuem problemas de alteração fora da classe).
Para alterar atributos privativos são criados métodos “set”. Estes métodos simplesmente atualizam
o atributo com o valor passado como parâmetro. Para recuperar atributos privativos (para serem
mostrados em uma tela por exemplo) são criados métodos “get” que retornam o atributo desejado.
As ferramentas de desenvolvimento normalmente geram estes métodos de maneira automárica.
A grande vantagem desta abordagem é a criação de pontos únicos de acesso aos dados. Qualquer
classe que precise alterar ou recuperar o atributo de outra deve utilizar os métodos. Assim sempre
que for necessária fazer uma alteração no código de alteração ou recuperação, ela será feita em
apenas um local.
INSTITUTO INFNET - 28
OO na Prática
Como Identificar Classes?
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Empresa e Produto
possuem atributos para
indicar o relacionamento
Aluno e Curso
também!
A figura mostra que existe algum tipo de colaboração entre a classe Empresa e a classe Produto.
Podemos entender isso quando perguntamos a uma determinada empresa que produtos ela fornece.
Da mesma forma podemos perguntar a um determinado produto que empresas podem fornecê-lo.
Também pode ser visto que existe algum tipo de relacionamento entre aluno e curso: um aluno se
matricula em vários cursos e um curso pode ter vários alunos.
Mesmo sabendo que existem atributos para representar estes relacionamentos, eles não devem ser
escritos nas classes de negócio. O objetivo das classes nesta fase é iniciar a elaboração de uma
solução, portanto o entendimento do relacionamento entre as classes é mais importante do que a
exata maneira como serão implementadas.
Quando for necessário criar classes de projeto estes atributos poderão aparecer para tornar mais
claro qual o nome e tipo do atributo. Por exemplo, um relacionamento de um para muitos pode ser
implementado como um vetor, lista encadeada, tabela hash, etc.
INSTITUTO INFNET - 32
OO na Prática
Multiplicidade e Papéis
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Essa
Multiplicidade
se refere a
Mercadoria na
associação
com Empresa
No exemplo foi modelado o fato de que uma “Pessoa” poder estar ligada a nenhuma ou uma
“Empresa”, ou seja, podemos cadastrar um desempregado. Enquanto uma “Empresa” poder estar
relacionada com, no mínimo uma instância de “Pessoa”.
Uma “Empresa” pode estar relacionada com zero ou mais instâncias de “Mercadoria” (por
exemplo, fornecer) e uma mercadoria pode ser fornecida por nenhuma (mercadoria obsoleta) ou
muitas empresas.
Um álbum possui de nenhuma a muitas figurinhas:
Durante um campeonato, um time pode possuir muitos jogadores e um jogador pode ser de vários
times (devido a transferências por exemplo):
INSTITUTO INFNET - 34
OO na Prática
Papéis
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
No primeiro exemplo existem dois tipos de conta corrente: contas comuns e contas especiais. A
única diferença entre elas está no atributo limite, que indica o valor que a conta pode ficar
negativa. Portanto, uma solução bem simples e poderosa é criar a conta especial como subclasse de
conta corrente. Assim, a conta especial herda todos os atributos e métodos de sua superclasse e
especifica os seus próprios. No caso, o método sacar foi reescrito pois a operação de ambas difere
com relação ao limite.
No segundo exemplo, uma escola precisa controlar seus professores e alunos. Estas duas entidades
possuem muitas coisas em comum que são capturadas por uma superclasse denominada Pessoa.
Uma empresa que vende cds e dvds pode modelar seu sistema da forma abaixo, considerando que
cds e dvds possuem atributos em comum (título, preço, estoque, etc):
INSTITUTO INFNET - 39
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Estudo de Caso
INSTITUTO INFNET - 40
OO na Prática
OO na Prática
MP3 Organizer
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Artista
Álbum
Música
Lista
INSTITUTO INFNET - 43
OO na Prática
Diagrama de Classes Básicas
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
INSTITUTO INFNET - 44
OO na Prática
Interface
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Tela de Visualização:
Lista de todas as músicas com
possibilidade de mudar a classificação
Botão “Sair”
Botão para inserir música
Tela de Inserção
Campos para digitação/alteração dos dados
da música
INSTITUTO INFNET - 45
OO na Prática
Classes de Projeto
TODOS OS DIREITOS SÃO RESERVADOS POR INFNET EDUCAÇÃO LTDA.
Diagrama Geral
INSTITUTO INFNET - 48
OO na Prática