Buscar

Introdução Programação Orientada a Objetos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 166 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 166 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 166 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Introdução à Orientação a 
Objetos
Prof. David Zanetti
Concepção de Sistemas
• Início da computação
– Computador utilizado apenas por grandes corporações
• Década de 70 
– Queda do preço dos equipamentos.
• Cresce o volume e complexidade dos sistemas
• Crescem os problemas de desenvolvimento de software 
– Falta de técnicas adequadas a realidade.
Concepção de Sistemas
• Sistemas simples são de fácil construção
– 1 pessoa é capaz de compreender, conceber e manter o 
sistema.
– Freelancer (profissional autônomo)
– Dependente apenas da criatividade e habilidade deste 
indivíduo
– Ciclo de vida geralmente curto e funcionalidades restritas.
Concepção de Sistemas
Concepção de Sistemas
• Quanto maior o sistema que se deseja construir, mais 
complexo é o desenvolvimento e a manutenção
– Desenvolvimento por múltiplas equipes
– Turn over interno e externo
– Sistema grande demais para ser entendido por 1 pessoa.
• Conseqüências: problemas de comunicação, 
coordenação, planejamento, etc.
Concepção de Sistemas
• Desenvolvimento de sistemas complexos exige:
– Métodos de trabalho bem definidos e entendidos por 
toda a equipe
Demanda por processos, metodologias, 
ferramentas, etc. que auxiliem no desenvolvimento
Concepção de Sistemas
• Processo básico de desenvolvimento de SW:
1. Levantamento de requisitos
2. Análise
3. Projeto
4. Implementação (codificação)
5. Teste
Paradigma
“Conjunto de regras que estabelecem fronteiras 
e descrevem como resolver os problemas 
dentro destas fronteiras.”
“Os paradigmas influenciam nossa percepção, 
ajudam-nos a organizar e a coordenar a 
maneira como olhamos para o mundo...”
(Reengenharia - Reestruturando a Empresa, Daniel Morris e Joel Brandon)
8
Paradigma
• O que seria um paradigma de programação?
– Modelo, padrão ou estilo de programação suportado 
pelas linguagens de programação que agrupam certas 
características comuns.
– Possibilita determinar como o programador realizará a 
estruturação e execução de um programa.
9
Paradigmas Mais Populares
• Paradigma Estruturado;
• Paradigma Imperativo (Procedural);
• Paradigma Declarativo;
• Paradigma Funcional;
• Paradigma Orientado a Objetos;
10
Desenvolvimento Estruturado
• Conceitos:
– Abstração - Separar os aspectos relevantes para o 
problema e abstrair os demais.
– Formalidade - Caminho rigoroso e metódico para solucionar 
o problema.
– Dividir para conquistar - Dividir o problema em partes 
menores, independentes e mais simples de se solucionar.
– Hierarquização - Sistema construído em níveis, onde cada 
nível acrescenta mais detalhes.
Desenvolvimento Estruturado
• Características:
– Análise, projeto e programação baseados em funções (procedimentos) e nos 
dados que estas funções irão manipular (variáveis)
– “Decomposição Funcional”: desenvolvedor decompõe sistema em partes menores 
(funções), criando um emaranhado de inúmeras funções que chamam umas às 
outras.
– Geralmente não há separação de conceitos e responsabilidades, causando 
dependências enormes no sistema, dificultando futuras manutenções no código do 
programa.
– Não existe reaproveitamento de código, ao contrário, 
muitas vezes se tem muito código duplicado.
Desenvolvimento Estruturado
• Trata análise, projeto e implementação como 
atividades diferentes e desconexas:
– Diferentes métodos;
– Diferentes notações e;
– Diferentes objetivos.
Orientação à Objetos
• Paradigma que define a estrutura dos programas 
baseada nos conceitos do mundo real.
• Permite criar programas componentizados, separando 
as partes do sistema por responsabilidades e fazendo 
com que essas partes se comuniquem entre sí, por 
meio de mensagens.
Orientação à Objetos
• Procura eliminar as diferenças entre as etapas de 
análise, projeto e implementação.
• A idéia é fazer com que conceitos e notações de 
programação sejam alto-nível e sirvam 
apropriadamente como ferramentas de modelagem 
e construção de SW.
OO X Estruturado
• Orientado a Objetos• Tradicional (Estruturada)
Classe
Atributos
Métodos
Variáveis
Funções
OO X Estruturado
• Programação tradicional (estruturada): 
– Sistema = Conjunto de programas que 
executam processos sobre dados.
• OO:
– O mundo é uma coletânea de objetos que 
interagem entre si e apresentam características 
próprias representadas pelos seus atributos e 
operações.
O paradigma OO
• Alan Kay, um dos pais do paradigma da orientação a objetos, formulou a chamada 
analogia biológica:
“Como seria um sistema de software que funcionasse como um ser 
vivo?
1. Cada “célula” interagiria com outras células através do envio de mensagens para realizar 
um objetivo comum.
2. Adicionalmente, cada célula se comportaria como uma unidade autônoma. 
• De uma forma mais geral, Kay pensou em como construir um sistema de software a 
partir de agentes autônomos que interagem entre si. 
O paradigma OO
• Um programa é uma coleção de objetos dizendo uns aos outros o que fazer.
O paradigma OO
• Procura-se imitar o mundo real através de um conjunto de objetos computacionais que interagem 
entre si. 
• Os objetos do mundo real são modelados e representados no mundo computacional, ou seja, 
dentro do sistema, por meio de objetos de software.
• Muitos objetos (nem todos) computacionais são imagens de objetos do mundo real.
• Dependendo do contexto (análise, projeto ou implementação) podemos estar falando de objetos 
do mundo real, de objetos computacionais ou nas duas coisas ao mesmo tempo.
Consistência de linguagem e entendimento.
OO - Vantagens
• Diminuição do tempo e custo de desenvolvimento
• Facilidade de comunicação entre os diversos setores do 
desenvolvimento
• Atendimento da demanda gerada pela evolução tecnológica
• Reutilização de código
• Facilidade de manutenção (pequenas mudanças não acarretam 
grandes alterações no desenvolvimento
OO - Vantagens
• Consistência de linguagem
– O mesmo modelo pode ser usado do início do projeto até a sua 
implementação.
– Tanto o problema quanto a solução podem ser representados com os 
mesmos termos: classes, objetos, métodos, atributos e comportamentos
– Trata de requisitos, projeto de alto nível, projeto de baixo nível, 
codificação e testes de forma uniforme.
OO - Vantagens
• Consistência de terminologia no decorrer do 
desenvolvimento
– Formação de um glossário de termos
• Permite dar mais importância a estrutura de um sistema do 
que às funções.
– Funções mudam a todo momento, enquanto a estrutura permanece 
de certa forma constante.
OO - Desvantagens
• Para programadores acostumados com 
linguagens estruturadas há uma certa 
dificuldade no aprendizado.
• Exige formas de pensar relativamente 
complexas.
24
OO - Histórico
• 1967 – Simula – introduz os primeiros conceitos de OO
• 1972 – Smalltak
• 1980 – C++
• 1983 – Ada criada para uso militar nos EUA
• 1984 – Eiffel
• 1986 – Object Pascal
• 1995 – Java
• 1995 – Várias linguagens alegando ter conceitos de OO
• Atual – C#, VB.Net, Python, Ruby, etc...
Princípios de OO
• Herança
• Sobrecarga
• Sobrescrita
• Polimorfismo 
• Encapsulamento
• Abstração
• Classes
• Objetos
• Atributos
• Métodos
Verdades sobre OO
• A OO não garante sistemas com interfaces amigáveis, 
ou seja, o paradigma não está necessariamente ligada a 
interface gráfica.
• A OO não elimina a necessidade de implementar os 
sistemas e nem está relacionada apenas a fase de 
implementação.
27
Verdades sobre OO
• A OO não garante a reutilização, ela oferece 
mecanismos para que isso ocorra, mas sempreserá função do desenvolvedor garantir isso.
28
Desenvolvimento Orientado a Objetos
• Consiste em:
– Análise Orientada a Objetos;
– Projeto Orientado a Objetos;
– Programação Orientada a Objetos.
V 1.1 2011.2 29
Objetos
• Objeto
– Dicionário: Tudo que é perceptível por qualquer dos sentidos
– Coisas do mundo real (ex.: animais, pessoas, objetos inanimados) que 
descobrimos estudando suas características (ex.:altura, tamanho, cor) e 
seu comportamento (ex.: falar, dormir, rolar, encher
Objetos
• Um objeto pode ser composto por vários outros 
objetos
– Em outras palavras: você pode criar um novo tipo de objeto 
empacotando objetos existentes.
– Dessa forma, você pode adicionar complexidade a um programa
e escondê-la por trás da simplicidade de uso dos objetos.
Objetos
• Todo objeto tem um tipo.
– Usando as palavras certas, cada objeto é uma instância de uma 
classe, onde classe é um sinônimo de tipo. 
– A questão mais importante relativa a uma classe é “que 
mensagens eu posso enviar para uma instância dessa classe?”
Objetos
• Todos os objetos de um dado tipo podem receber as
mesmas mensagens.
– Além disso, uma vez que, por exemplo, um objeto do tipo
“círculo” é também um objeto do tipo “forma geométrica”, o
objeto “círculo” aceita qualquer mensagem endereçada a uma
“forma geométrica”.
– Essa capacidade de “subtituição” de um objeto por outro é um 
dos mais poderosos conceitos em orientação a objetos.
Objetos
• Objetos podem ser tanto objetos concretos (carro, livro, nota fiscal), 
quanto abstratos (conta corrente, venda, pessoa jurídica).
• Exemplos de objetos do mundo real: 
– David (Pessoa).
– Aula de OO no dia 23/02/2011 (Aula).
• Exemplos de objetos computacionais: 
– Registo que descreve o João (imagem de objeto do mundo real).
– Árvore de pesquisa binária (objeto puramente computacional).
Objetos
• Objetos:
– Possuem um estado, definido por valores de 
atributos e por relações que num dado momento 
tem com outros objetos.
– Possuem uma identidade que os distingue de 
outros objetos, mesmo que possuam valores 
semelhantes de atributos.
Objetos
Objetos
• Objetos:
– Seu estado será armazenado em variáveis 
(atributos) enquanto seu comportamento será
representado através de seus métodos.
Objetos
• Objetos se comunicam entre si:
– Recebem requisições (de outros objetos) através de 
mensagens.
– Possuem a responsabilidade de executar um método
(comportamento) que cumpra a requisição.
Vantagens
• Modularidade: O código fonte para um objeto pode 
ser escrito e mantido independentemente do código-
fonte para outros objetos. 
• Ocultação de informações: Ao interagir apenas 
com os métodos de um objeto, os detalhes de sua 
implementação interna permanecem escondidos do 
mundo exterior.
39
Vantagens
• Reutilização de código: Se um objeto já existe (talvez escrito por outro
desenvolvedor de software), você pode usar esse objeto em seu 
programa. Isso permite que especialistas implementem, testem e 
depurem objetos complexos, para serem utilizados posteriormente.
• Plug’n play e facilidade de depuração: Se um objeto em particular se 
revelar problemático, pode-se removê-lo da aplicação e conectar um 
objeto diferente para substitui-lo. O que é análogo a resolver problemas 
mecânicos no mundo real: se um parafuso quebra, você o substitui e 
não a máquina inteira.
40
Abstração
? Uma abstração é qualquer modelo que inclui os 
aspectos relevantes de alguma coisa, ao mesmo 
tempo em que ignora os menos importantes.
Abstração
? Após observar e estudar os objetos do mundo real, separamos mentalmente 
aqueles que nos interessam.
? Abstração: Separação mental dos objetos que nos interessam em um 
determinado problema.
Abstração
• Quando observamos a realidade, separando 
mentalmente os objetos que nos interessam para estudo 
estamos praticando abstração.
• Analista de sistemas:
– Estudar a realidade e usar a abstração para representar 
objetos em um modelo de classes dentro de um determinado 
contexto denominado Domínio de Aplicação
Abstração
• Tenta-se retirar elementos e requisitos que irão 
ajudar na resolução de um problema, ignorando os 
demais.
• Processo de retirar do domínio do problema os 
detalhes relevantes e representá-los não mais em 
uma linguagem do domínio e sim na linguagem da 
solução.
Abstração - Exemplos
Pessoa
? nome
? altura
? peso
? cor dos olhos
? cor do cabelo
? identidade
? cpf
? idade
? filiação
? naturalidade
Sistema para modelos
? nome
? altura
? peso
? cor dos olhos
? cor do cabelo
? idade
Sistema para banco
? nome
? identidade
? cpf
? idade
? filiação
? naturalidade
Abstração - Exemplos
• Beija-Flor
Identidade: ‘o beija-flor que vem ao meu jardim’
Características:
penas azuis
bico fino
vôo rápido
Comportamento:
voar
piar
Abstração - Exemplo
?Pessoa
Identidade: ‘Mário’
Características:
olhos pretos
nasceu em 16/02/70
pesa 70kg
mede 1,70m
Comportamento:
andar
falar
comer
rir
Abstração - Exemplo
• Telefone
Identidade:: número 2576-0989
Características:
azul
2.4 GHz
tone
Comportamento:
tocar
discar
Abstração - Exemplo
• Ônibus
Identidade: placa LXY 7684
Características:
cor amarela
30 assentos
a diesel
Comportamento:
frear
andar
correr
buzinar
acelerar
Objeto
• Representação
Identidade
Características
(estado)
Mário
Comportamento
Serviços, 
Interface ou 
protocolo
Exercício 1 – Identificação de Objetos
• Realize o exercício 1 cujo objetivo é identificar 
objetos de nosso cotidiano, bem como suas 
características e seus comportamentos e 
relações.
Classes
• OO = Conjuntos de objetos agrupados em 
classes de objetos similares que interagem 
através da troca de mensagens.
• Usando abstração podemos agrupar alguns 
objetos, observando suas características e 
comportamentos em comum.
Classes
• Classes:
– É possível ter vários objetos do mesmo tipo, que compartilham 
características em comum.
– Uma classe é um modelo (protótipo) que define as variáveis (estado) e 
os métodos (comportamento) comuns a todos os objetos do mesmo 
tipo.
• Especifica que informações o objeto pode armazenar
• Especifica o conjunto de requisições que um objeto pode cumprir.
• Especifica que método será executado para cumprir uma requisição.
– Um objeto é uma instância de uma classe.
Classes
• Classe: Modelo estático que permite especificar um conjunto de 
características do conceito que representa.
• Objeto: Entidade dinâmica criada a partir de uma classe e possui os 
dados sobre os quais são realizadas as operações disponíveis em sua 
classe.
Classes
Objetos
(instâncias)
Classe instanciação
João
Maria
Pessoa
Classes
• Classes podem representar:
– Coisas concretas: Pessoa, Turma, Carro, Imóvel, Livro.
– Papéis que coisas concretas assumem: Aluno, Professor, 
Piloto
– Eventos: Curso, Aula, Acidente.
– Especificações de coisas concretas: Ficha de Produto, Curso 
(Plano de Estudos).
– Tipos de dados: Data, Intervalo de Tempo, Número Complexo, 
Vetor.
Classes
• Representação:
– Nome no singular
– Deve refletir claramente o papel que ela desempenha.
• Características:
– Duas classes não podem ter a mesma finalidade semântica.
– Boa caracterização do que está sendo representado.
– Nomes devem estar adequados ao vocabulário do Domínio da 
Aplicação.
Membros de Classes
• Componentes internas de um objeto, definidas 
por uma classe.
– Atributos
– Métodos
Atributos
? Descrevem as características das instâncias de uma classe? Seus valores definem o estado do objeto
? O estado de um objeto pode mudar ao longo de sua existência
? A identidade de um objeto, contudo, nunca muda
Funcionário_Helena
Nome=Helena Reis
Nasc=28/01/1965
Salário = 4.000
InformarSalário
CalcularIdade
Funcionário_Mário
Nome=Mário Sá
Nasc=16/02/1970
Salário = 3.000
InformarSalário
CalcularIdade
Atributos
• Todos os objetos de uma classe são caracterizados pelos mesmos 
atributos
– O mesmo atributo pode ter valores diferentes de objeto para objeto
• Atributos são definidos ao nível da classe, enquanto que os valores 
dos atributos são definidos ao nível dos objetos
– Ex: Uma pessoa (classe) tem os atributos nome, data de nascimento e 
peso. João é uma pessoa com nome “João Silva”, data de nascimento 
“18/3/1973” e peso “68 Kg”.
Serviços/Operações/Métodos
? Representam o comportamento das instâncias de uma classe
? Correspondem ao protocolo ou ações das instâncias de uma classe
Funcionário_Helena
Nome=Helena Reis
Nasc=28/01/1965
Salário = 4.000
InformarSalário
CalcularIdade
Funcionário_Mário
Nome=Mário Sá
Nasc=16/02/1970
Salário = 3.000
InformarSalário
CalcularIdade
4000
3000
Informar 
Salário?
Serviços/Operações/Métodos
• Membros do tipo função definidos por cada classe e 
executados no escopo de um objeto. 
• Atuam sobre os atributos mantidos pelo objeto.
• Um comportamento semelhante entre diferentes objetos
– Classe Veículo: Andar, ligar, frear
Serviços/Operações/Métodos
• Objetos da mesma classe têm as mesmas operações
• Operações são definidas ao nível da classe, enquanto que a 
invocação de uma operação ocorre ao nível do objeto.
• Nas classes que representam objetos do mundo real, indicam-
se por vezes responsabilidades em vez de operações.
Classes
ContaEmBanco
Depositar
Sacar
ConsultarSaldo
Encerrar
Abrir Nome
Saldo
Profissão
Atributos
Métodos
(Parte escondida)
(Protocolo de acesso)
Objetos do tipo
ContaEmBanco
Duas instâncias (objetos) da classe ContaEmBanco
Depositar
Sacar
ConsultarSaldo
Encerrar
Abrir Tio Patinhas
100.000,00
Empresário
Depositar
Sacar
ConsultarSaldo
Encerrar
Abrir Donald
1,00
Jornalista
Conta do Tio Patinhas Conta do Donald
Classes - Exemplo
classe
Identidade: ‘Telefone da minha casa’
Características:
marca: Siemens
número: 2576-0989
discagem: pulso
instância da 
classe (objeto)
Comportamento:
tocar
discar
Classes - Exemplo
classe
Identidade: ‘Meu celular’
Características:
marca: Nokia
número: 99193467
discagem: tom
instância da 
classe (objeto)
Comportamento:
tocar
discar
Implementação em 
Java
Classes - Exemplo
Classe
Instâncias
(objetos)
Implementação em 
Java
Implementação em 
Java
Modelagem de 
Classes
• Classes:
– Representação: 
• Nome no singular
• Caixa com 3 divisões (nome, atributos e 
operações)
• Deve refletir claramente o papel que ela 
desempenha
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem de 
Classes
• Atributos: 
– Propriedade do item que está sendo modelado
• Tipo
– Primitivos (int, byte, char, string, bool)
– Composto (array, enum,...)
• Pode conter um valor padrão
• Visibilidade
– Publica
– Privada
– Substantivo que represente claramente a 
informação que o atributo guarda.
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem de 
Classes
• Métodos: 
– Serviços que uma classe pode realizar
• mensagens que se pode enviar a uma classe 
– nome: texto
– parâmetros: argumentos (sintaxe de atributos)
– retorno: dependente da linguagem
– Sintaxe: <<visibilidade>> nome 
(<<parâmetros>>) : <<retorno>>
Ex: + finalizarTarefa (d: Data) : Boolean
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Codificação de 
Classes
Arquivo 1 – Tarefa.cs
public class Tarefa
{
private datetime dataInicial = default;
private datetime dataFinal = ;
private string descrição = “”;
public void atribuirDataInicial(datetime d){
...
}
public void atribuirDataFinal(datetime d){
...
}
public void obterduração (int cpf){
...
}
}
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem
Codificação de 
Classes
Arquivo 1 – Cliente.cs
public class Cliente
{
private int CPF = 99999999999;
private char Nome = “Fulano da Silva”;
private char Telefone = “(21)5555-4433”;
private ContaPoupanca = null;
public int mostrarCPF(){
return cpf;
}
public void verSaldo(int diaDeposito){
ContaPoupanca cp = obterContaPoupanca(CPF)
return cp.Saldo(diaDeposito)
}
public ContaPoupanca obterContaPoupanca(int cpf){
...
}
}
Codificação de 
Classes
Arquivo 2 – ContaPoupanca.cs
public class ContaPoupanca extends Conta
{
private int DiaDeposito;
public float verLucro(){
...
}
}
Codificação de 
Classes
Arquivo 3 – Conta.cs
public class Conta
{
private int agencia;
private chart contacorrente;
public void Depositar(float valor){
return cpf;
}
public int saldo(int dia){
...
}
}
Codificação de 
Classes
Arquivo 4 – Main.cs
public static void main(String args[])
{
Cliente c1 = new Cliente();
System.out.println(c1.mostrarCPF());
System.out.println(c1.verSaldo(23));
}
Identificando Classes
• Dado um determinado cenário do domínio: 
1. Analisar o texto.
2. Identificar substantivos a partir das especificações.
3. Remover sinônimos.
4. Acrescente associações entre os conceitos.
Exercício 1 –
Identificação de Classes
• Considere o seguinte exemplo:
– Um zoológico é composto de um conjunto de jaulas. 
– Cada jaula é a casa de pelo menos 2 animais. 
– Animais podem ser répteis, insetos ou mamíferos. 
– Mamíferos são elefantes, macacos e tigres. 
– Macacos comem bananas. 
– Tigres preferem carne.
• Como você modelaria o modelo de classes para este domínio?
– Defina quais são as classes 
– Adicione qualquer classe adicional que seja necessária
– Dê uma definição para cada uma das classes
– Sugira possíveis atributos e métodos para as classes identificadas
Exercício 2 –
Modelagem de Classes
• Modele as seguintes classes: 
– Desenvolva um modelo de classe que represente o conceito “ContaEmBanco”. As 
instâncias desta classe devem ser capazes de armazenar o nome do cliente, seu 
endereço e telefone, o número da conta (composto por número principal e um digito 
verificador) e o número da agência. Existem outras duas classes “ContaCorrente” e 
ContaPoupanca” que são do tipo “ContaEmBanco”.
– Projete uma classe de nome “Organizacao”, cujas instâncias sejam capazes de 
guardar os dados de uma dada empresa. Os dados a serem armazenados são razão 
social, nome fantasia, endereço (composto por logradouro, número, complemento, 
bairro, cidade e estado), CNPJ, telefone e numero de funcionários. Sugira possíveis 
tipos de dados para cada atributo.
– Desenvolva uma classe de nome “CodigoPostal”, cujas instâncias sejam capazes de 
guardar o Código Postal de uma dada rua. Note que cada Código Postal é
constituído por dois números inteiros, que designaremos respectivamente por 
"indicativo" e "extensão", e o nome da rua (Ex: 38408 046 Armando Lombardi).Mensagens
• O comportamento determina como um objeto pode 
responder a interações mediante à ativação de 
operações decorrentes de mensagens recebidas de 
outros objetos
• O Comportamento é determinado pelo conjunto de 
operações que o objeto pode realizar.
Mensagens
• Sistema de Controle Acadêmico
– Classe: Aluno
– Objeto: Maurício (instância de Aluno)
– Método: Solicita Matrícula
– Mauricio -> Solicita Matrícula = 105018 (retorno)
Mensagens
? A interação entre os objetos é feita através da troca de 
mensagens.
? Uma mensagem é uma solicitação feita por um objeto A a um 
objeto B, para que este mude seu estado ou retorne algum valor.
? Como resultado desta solicitação, o objeto B irá modificar seu 
estado ou retornar algum valor para o objeto que solicitou a 
mensagem.
Mensagens
? O conceito de mensagem está diretamente 
associado ao conceito de operação (método).
? Em um programa orientado a objeto, nenhuma outra 
parte do programa pode acessar diretamente os 
dados (valores dos atributos) de um objeto 
instanciado de uma classe. 
? Toda a comunicação entre os objetos ocorre única e 
exclusivamente através de mensagens que invocam 
métodos desses objetos
Mensagens
• Cada mensagem é dirigida a um objeto e provoca a execução de um 
método sobre os dados particulares do objeto (invocação 
parametrizada)
• O mesmo método pode ser executado sobre os dados de diferentes
objetos instanciados a partir da mesma classe
Mensagens
Interface: conjunto de serviços oferecidos por um objeto
Mensagem: ativação de um método em um objeto
A interação entre objetos, ou seja, a evolução do programa, se dá através de 
mensagens trocadas através da interface (ou protocolo) especificado para o objeto 
pela sua classe.
Análogo a uma chamada de função
Mensagens
Interface: conjunto de serviços oferecidos por um objeto
Mensagem: ativação de um método em um objeto
Todos os objetos de uma mesma classe possuem a mesma interface e aplicam o 
mesmo método em resposta a uma mensagem idêntica. O valor retornado pode, no 
entanto, variar em função dos valores dos atributos mantidos por cada objeto.
Análogo a uma chamada de função
Modelagem de 
Classes
• Classes:
– Descrevem objetos com:
• Propriedades similares (atributos)
• Comportamento comum (operações)
• Relações comuns com outros objetos (associações e agregações)
• Semântica comum
– Trata-se de uma abstração que:
• Enfatiza características relevantes de um determinado objeto
• Suprime outras características que não são de interesse
– Representação: 
• Nome no singular
• Caixa com 3 divisões (nome, atributos e operações)
• Deve refletir claramente o papel que ela desempenha
– Objeto: instância de uma classe
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem de 
Classes
• Atributos: 
– Propriedade do item que está sendo modelado
• Tipo
– Primitivos (int, byte, char, string, bool)
– Composto (array, enum,...)
• Pode conter um valor padrão
• Visibilidade
– Publica
– Privada
– Substantivo que represente claramente a informação que o atributo guarda
– A melhor fonte de identificação e coleta de atributos de classes é a descrição das 
funcionalidades do sistema (Casos de Uso)
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem de 
Classes
• Atributos: 
– Serviços que uma classe pode realizar
• Corresponde às mensagens que se pode enviar a uma classe 
• Normalmente omitem-se as operações que manipulam os atributos 
(obter/atribuir)
– nome: texto
– parâmetros: argumentos (sintaxe de atributos)
– retorno: dependente da linguagem
– Sintaxe: <<visibilidade>> nome (<<parâmetros>>) : <<retorno>>
Ex: + finalizarTarefa (d: Data) : Boolean
– Visibilidade: pública (+), protegida (#), privada (-)
• Interpretação é dependente da linguagem
• Não é necessária no nível conceitual
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Codificação de 
Classes
Arquivo 1 – Tarefa.cs
public class Tarefa
{
private datetime dataInicial = default;
private datetime dataFinal = ;
private string descrição = “”;
public void atribuirDataInicial(datetime d){
...
}
public void atribuirDataFinal(datetime d){
...
}
public void obterduração (int cpf){
...
}
}
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Exercício
• Modele a classe “ContaEmBanco”
– Desenvolva um modelo de classes que represente o conceito 
“ContaEmBanco”. As instâncias desta classe devem ser capazes de 
armazenar o nome do cliente, seu endereço e telefone, o número da conta 
(composto por número principal e um digito verificador) e o número da 
agência. Existem outras duas classes “ContaCorrente” e ContaPoupanca” que 
são do tipo “ContaEmBanco”.
• Modele a classe “Organização”
– Projete uma classe de nome “Organizacao”, cujas instâncias sejam capazes 
de guardar os dados de uma dada empresa. Os dados a serem armazenados 
são razão social, nome fantasia, endereço (composto por logradouro, número, 
complemento, bairro, cidade e estado), CNPJ, telefone e numero de 
funcionários. Sugira possíveis tipos de dados para cada atributo.
Exercício
• Modele a classe “CodigoPostal”
– Desenvolva uma classe de nome “CodigoPostal”, 
cujas instâncias sejam capazes de guardar o 
Código Postal de uma dada rua. Note que cada 
Código Postal é constituído por dois números 
inteiros, que designaremos respectivamente por 
"indicativo" e "extensão", e o nome da rua (Ex: 
38408 046 Armando Lombardi).
Modelagem de 
Classes
• Classes:
– Descrevem objetos com:
• Propriedades similares (atributos)
• Comportamento comum (operações)
• Relações comuns com outros objetos (associações e agregações)
• Semântica comum
– Trata-se de uma abstração que:
• Enfatiza características relevantes de um determinado objeto
• Suprime outras características que não são de interesse
– Representação: 
• Nome no singular
• Caixa com 3 divisões (nome, atributos e operações)
• Deve refletir claramente o papel que ela desempenha
– Objeto: instância de uma classe
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem de 
Classes
• Atributos: 
– Propriedade do item que está sendo modelado
• Tipo
– Primitivos (int, byte, char, string, bool)
– Composto (array, enum,...)
• Pode conter um valor padrão
• Visibilidade
– Publica
– Privada
– Substantivo que represente claramente a informação que o atributo guarda
– A melhor fonte de identificação e coleta de atributos de classes é a descrição das 
funcionalidades do sistema (Casos de Uso)
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem de 
Classes
• Métodos: 
– Serviços que uma classe pode realizar
• Corresponde às mensagens que se pode enviar a uma classe 
• Normalmente omitem-se as operações que manipulam os atributos 
(obter/atribuir)
– nome: texto
– parâmetros: argumentos (sintaxe de atributos)
– retorno: dependente da linguagem
– Sintaxe: <<visibilidade>> nome (<<parâmetros>>): <<retorno>>
Ex: + finalizarTarefa (d: Data) : Boolean
– Visibilidade: pública (+), protegida (#), privada (-)
• Interpretação é dependente da linguagem
• Não é necessária no nível conceitual
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Codificação de 
Classes
Arquivo 1 – Tarefa.cs
public class Tarefa
{
private datetime dataInicial = default;
private datetime dataFinal = ;
private string descrição = “”;
public void atribuirDataInicial(datetime d){
...
}
public void atribuirDataFinal(datetime d){
...
}
public void obterduração (int cpf){
...
}
}
Tarefa
d ata In ic ial : Dat a = d efa ul t
d ata Fi nal : Data
d esc rica o
a tr ib ui rDataI ni ci al (d : Da ta)
a tr ib ui rDataF ina l(d : Dat a)
o bte rDu racao() : Da ta
Modelagem
Modelagem
Arquivo 1 – Cliente.cs
public class Cliente
{
private int CPF = 99999999999;
private char Nome = “Fulano da Silva”;
private char Telefone = “(21)5555-4433”;
private ContaPoupanca = null;
public int mostrarCPF(){
return cpf;
}
public void verSaldo(int diaDeposito){
ContaPoupanca cp = obterContaPoupanca(CPF)
return cp.Saldo(diaDeposito)
}
public ContaPoupanca obterContaPoupanca(int cpf){
...
}
}
Modelagem
Arquivo 2 – ContaPoupanca.cs
public class ContaPoupanca extends Conta
{
private int DiaDeposito;
public float verLucro(){
...
}
}
Modelagem
Arquivo 3 – Conta.cs
public class Conta
{
private int agencia;
private chart contacorrente;
public void Depositar(float valor){
return cpf;
}
public int saldo(int dia){
...
}
}
Modelagem
Arquivo 4 – Main.cs
public static void main(String args[])
{
Cliente c1 = new Cliente();
System.out.println(c1.mostrarCPF());
System.out.println(c1.verSaldo(23));
}
Modelagem
Modelagem
Associações
? Representam um relacionamento entre os objetos de duas ou mais classes.
? É representada, nos diagramas de classes, por uma linha conectando as classes 
associadas.
P e d i d o
d a t a R e c e b i m e n to
s i t u a c a o
i d e n t i f i c a d o r : S t r i n g
p r e c o
r e a l i z a r E n t r e g a ( )
C l i e n te
n o m e
e n d e r e c o
p o s s u i C re d i t o ()
10 . . * 10 . . *
r e a l iz a d a p o r
Associações
? Seta é usada para apontar a leitura da associação.
? Para esclarecer o significado de uma associação, ela é nomeada
? O nome é apresentado ao longo da linha de associação
? Usualmente, esse nome é um verbo ou uma frase verbalizada
? Entre duas Classes pode existir mais de uma associação com nomes 
diferentes.
Associações
? Uma classe pode estar associada a ela mesma (associação 
reflexiva ou auto-relacionamento).
pai mãe
0..1
*
Pessoa
filho
0..1
* filho
Visibilidade
? Pode ser utilizado para caracterizar uma classe, um atributo, uma operação e até mesmo uma associação
? Tipos de visibilidade:
? Privada (private) “-”
? Acessível somente para a própria classe
? Protegida (protected) “#”
? Acessível somente pela classe e suas subclasses
? Pública (public) “+”
? Acessível por outras classes
? De Pacote (package) “~”
? Acessível somente pelas classes do pacote que a contém
Multiplicidade
? Indica como os objetos participam da relação
? Número de instâncias de uma classe relacionada com uma instância de outra 
classe.
? Para cada associação, há uma multiplicidade em cada direção.
P edido
da taR e ce b im en to
s itu a ca o
id e n tifica d o r : S trin g
p re co
re a liza rEn tre g a ()
Cl iente
n om e
ende re co
p o s s ui C re d i to ()
10..* 10. .*
Multiplicidade
? * = 0..infinito (“muitos”)
? 1..* = 1..infinito (“uma ou mais”)
? 1 = exatamente um
? 0..1 = zero ou um 
? 1..100 = inteiro entre 1 e 100
? 2,4,5 = dois, quatro, cinco
Herança
• Em um modelo OO, as classes podem ser organizadas 
hierarquicamente de acordo com suas semelhanças ou 
diferenças.
• Inicia-se a construção de uma hierarquia com a definição de 
uma classe mais abstrata e seu refinamento em subclasses 
mais especializadas
– Ex: Classe veículo é refinada nas subclasses carro, ônibus e 
caminhão
• Classes especializadas (subclasses/classes filhas) herdam 
a estrutura E o comportamento das classes genéricas 
Herança
Herança
• Este recurso não está disponível em sistemas procedurais, 
caracterizando-se em uma das principais diferenças entre a 
Análise Orientada a Objetos e a Análise Estruturada.
• A classe mais geral é denominada superclasse e a classe 
mais especializada é chamada subclasse.
• Há duas formas de se descobrir heranças:
– Generalização
– Especialização
Herança
• Classes Genéricas podem ser 
especializadas em subclasses
• Subclasses herdam as características 
de uma ou mais superclasses
– Atributos
– Operações
– Comportamento
Retangulo
extrem idades : Point
Poligono
pon tos : Lis ta
Quadrado
Circulo
raio : Float
Forma
origem
mover()
exibir()
Herança
class System
Onibus
- passageiros
+ acionar campainha()
Veículo
- ano
- cor
- marca
- modelo
+ l igar()
+ acelerar()
Carro
- combustivel
Caminhao
- eixos
- tara
- trucado
+ levantar carroceria()
Herança
Cliente
crédito
Calcular Crédito
Pessoa
idade
CPF
Alterar Dados
Funcionário
salário
Imprimir Salário
Cliente
idade
CPF
Crédito
Alterar Dados
Calcular Crédito
Funcionário
idade
CPF
Salário
Alterar Dados
Imprimir Salário
Herança
public class Pessoa
{
private int idade;
private int cpf;
public void alterarDados(Int32 _idade, Int32 _cpf){
...
}
}
public class Funcionario extends Pessoa
{
private int salario;
public int imprimirSalario(){
return salario;
}
}
public class Cliente extends Pessoa
{
private int credito;
public int calcularCredito(){
return credito;
}
}
Herança
public class Exemplo
{
public static void main(String args[])
{
Funcionario f = new Funcionario();
System.out.println( f.imprimirSalario() );
f.alterarDados(32, 09873452121);
Funcionario f2 = new Professor();
System.out.println( f2.imprimirSalario() );
Pessoa p = new Pessoa();
System.out.println( p.imprimirSalario() );
f.alterarDados(32, 09873452121);
Cliente c = new Cliente();
System.out.println( c.calcularCredito() );
System.out.println( c.imprimirSalario() );
c.alterarDados(32, 09873452121);
Professor p = new Funcionario();
}
}
Herança
• A subclasse pode acrescentar novas estruturas de dados (atributos) e 
comportamentos (métodos) aos herdados da superclasse 
(especialização).
• A subclasse pode alterar o comportamento originalmente herdado da 
superclasse (polimorfismo).
• Deve ser lida como “é um tipo de”.
Herança
• Herança simples: subclasse herda estruturas de dados e 
comportamentos de uma única superclasse.
• Herança múltipla: subclasse herda estruturas de dados e 
comportamentos de mais de uma superclasse.
Veiculo
Veiculo Terreste Veiculo Aquático
Carro Veiculo Anfibio Barco
Herança
• Herança Múltipla
• Vantagens:
– Semelhança com o pensamento humano
– Maior flexibilidade para especificar as classes
– Maior freqüência de reuso
• Desvantagens:
– Perda de claridade (que método é executado?)
– Implementação mais complicada
– Resolução de conflito é necessária as características herdadas de múltiplas 
vezes
Herança - Exercício
• Completar o exercício do zoológico:
• Considere o seguinte exemplo:
– Um zoológico é composto de um conjunto de jaulas. 
– Cada jaula é a casa de pelo menos 2 animais. 
– Animais podem ser répteis, insetos ou mamíferos.– Mamíferos são elefantes, macacos e tigres. 
– Macacos comem bananas. 
– Tigres preferem carne.
• Identificar classes, atributos, operações, herança simples, 
herança múltipla, etc... 
Herança - Exercício
• Considere os seguintes requisitos para um sistema de 
informação para a gestão de um parque de 
estacionamento:
– O controle é efetuado com base na placa do veículo.
– Na entrada do parque, existirá um funcionário que introduz 
as placas no sistema, ficando de imediato registrado a 
data e hora de início do estacionamento. O sistema tem 
que verificar se a placa em questão já existe.
– Se a placa não for reconhecida pelo sistema, então o 
funcionário deverá criar um novo veículo no sistema.
– Na saída, um funcionário introduz novamente a placa e o 
sistema calcula o custo do estacionamento.
– O gestor do parque precisa consultar, diariamente, uma 
listagem dos estacionamentos. Apenas o gestor poderá
bt li t
Herança - Exercício
• Em entrevista complementar foram obtidas as 
seguintes informações adicionais:
– Sobre cada veículo apenas interessa guardar no sistema a 
placa, tipo e cor.
– Um veículo pode efetuar vários estacionamentos no 
mesmo dia.
– Os veículos podem ser automóveis ou motocicletas 
motorizadas.
– Inicialmente existe uma tarifa base que é aplicada a todos 
os veículos. Contudo, para veículos com um elevado 
número de estacionamentos é possível criar tarifas 
específicas. Cada tarifa possui um custo por hora.
– O estacionamento possui um número de vagas limitado. 
As vagas são caracterizadas por um número, piso e um 
Agregação
• Forma especial de associação
– Um todo é relacionado com suas partes
– Relacionamento “todo-parte”.
• Deve ser lida como “é parte de”
• Componentes são partes dos objetos agregados
– Carro tem motor e rodas
• Exemplo típico:
– Estrutura organizacional de uma empresa
Empresa
Departamento
1..*
11
1..*
Agregação
• Também é conhecida como relação de conteúdo ou posse lógica, pois a 
classe agregada (parte) é vista como um “atributo” da classe agregadora
(todo).
• É representada como uma linha de associação com um diamante 
vazado junto à classe agregadora.
• Podem existir agregações reflexivas, ou seja, agregações de uma classe 
com ela mesma.
• A multiplicidade é representada da mesma maneira que nas 
associações.
Composição
• Tipo mais forte de relacionamento “todo-parte”.
• Partes pertencem apenas a um “todo”
• Partes só fazem sentido junto com o “todo”
• Partes tem o mesmo ciclo de vida do “todo”
– Ex: Deleção em cascata
Composição
• É representada como uma linha 
de associação com um 
diamante preenchido junto à
classe “todo”.
• A multiplicidade é representada 
da mesma maneira que nas 
associações.
Ponto
Pol ígono
1
1
Representacao Grafica
cor
textura
1
11
11
1
Agregação X 
Composição
• Distinção entre associação e agregação geralmente é
semântica.
• Uma agregação é uma soma de todas as partes.
• Uma composição é apropriada quando cada parte é
possuída por um único objeto e a parte não possui uma 
vida independente do seu dono.
Classe de Associação
• Utilizamos Classes de Associação quando desejamos acrescentar 
atributos ou métodos a uma associação
• São úteis se os atributos não pertencem a uma classe mas a 
associação entre classes
– Pode haver apenas uma instância da classe de associação entre os objetos
Alocacao
inic io
final
Pessoa Cargo
10..*0..* 10..*0..*
Classe de Associação
• Pode-se “promover” uma classe de associação em 
uma classe normal.
Classe de Associação
• Exercício: Considere o diagrama de classes a seguir, que exibe uma 
classe associativa entre as classes Pessoa e Empresa. Crie um 
diagrama de classes equivalente ao fornecido abaixo, mas sem utilizar 
uma classe associativa.
Classe de Associação
• Solução:
Encapsulamento
• Técnica de separar aspectos externos dos interno da 
implementação de um objeto.
– Ex: Aceleração
• Uma classe encapsula o comportamento e atributos de um 
objeto, escondendo os detalhes de implementação
• Isolamento dos dados: qualquer aplicação pode usar o 
serviço fornecido pela classe através de suas interfaces
Encapsulamento
• Um módulo está encapsulado se os clientes são 
restritos, pela linguagem, a fazer acesso ao 
módulo somente através de sua interface 
externa;
• Visibilidades Public e Private definem as 
interfaces externas e internas, respectivamente;
• Heranças ? Protected (acesso a classes 
derivadas);
Encapsulamento
• Em um único pacote estão dados (estrutura) e 
operações (comportamento)
• Dados de um objeto são privados do objeto
• Dados do objeto só são manipulados pelos métodos do 
próprio objeto.
• Métodos de um objeto podem ser públicos 
• Os métodos são a interface do objeto
Encapsulamento
Maria
Engenheira
30 anos
R$ 1000,00
Atualizar
Salário
Alterar
Idade AlterarCargo 
Imprimir 
Dados
31 anos
Aniversário
Encapsulamento
public class Automovel
{
private String placa;
public alterarPlaca(Int32 _valor)
{
placa = _valor;
}
}
public class Teste
{
Automovel a = new Automovel();
a.placa = “3333”;
a.alterarPlaca(LDR3435);
}
public class Pessoa
{
private String nome;
public void atribuirNome(String _nome) { nome = _nome; }
public String obterNome() { return nome; }
}
public class Teste
{
public static void main(String args[])
{
Pessoa a = new Pessoa();
a.atribuirNome(“João”);
Pessoa b = new Pessoa();
b.atribuirNome(“Pedro”);
Pessoa c; 
c.atribuirNome(“Maria”); //Erro de execução.
}
}
Modelagem de 
Pessoa
Instanciação, 
Criação de Objetos
Polimorfismo
• É a capacidade de assumir diferentes formas
• Um mesmo comportamento é apresentado de forma 
diferente em diferentes classes ou subclasses
• A herança permite por em prática o polimorfismo desde 
que partes da superclasse não sejam eliminadas
• A subclasse pode redefinir um método herdado de uma 
superclasse.
• Métodos polimórficos possuem implementações
direfentes.
Polimorfismo
c la s s M o d e lo d e C la s s e s
C a r r o
+ a b ri r v i d ro ()
V e ic u lo
+ a b ri r v i d ro ()
K a
+ a b ri r v i d ro ()
P a l io 1 .0 P é d e B o i
+ a b ri r v i d ro ()
N e w C iv ic
+ a b ri r v i d ro ()
Polimorfismo
Funcionário
Matrícula
Salário
Calcular Salário
Gerente
nível
Vendedor
Comissão
Calcular Salário
Salário = 
(no. de dias
* Valor base) 
Salário = 
(no. de dias
* Valor base)
+ comissão 
Sobrecarga
Atribui a um único operador a capacidade de agir de
diferentes formas em função dos parâmetros recebidos
Exemplo:
Na classe ContaEmBanco, o método Depositar possui
duas implementações diferentes:
1 - uma para depósitos em dinheiro
2 - outra para depósitos em cheque
O serviço escolhido depende do parâmetro
enviado junto à ativação do serviço
(cheque ou dinheiro)
Sobrecarga
public class Professor extends Pessoa
{
private int numeroHorasAula;
public void atribuirNumeroHorasAula(String _n) { numeroHorasAula = _n; }
public float obterSalario(){ return numeroHorasAula*10; }
public float obterSalario(float _bonus) { return obterSalario() + _bonus;}
}
public class Teste
{
public static void main(String args[])
{
Professor p = new Professor();
p.atribuirNumeroHorasAula(10);
System.out.println(p.obterSalario());
System.out.println(p.obterSalario(500));
}
}
2 Métodos 
com o mesmo 
nome
Sobrecarga
Mesmo nome mas lista de 
parâmetros diferente.
Sobrescrita
Capacidade de um objeto responder com
diferentes comportamentos uma mesma solicitação
Exemplo:
Suponha um método que receba um objeto ContaEmBancoe
que neste método seja solicitado a ativação do método Sacar.
O comportamento do objeto vai ser diferente em função do
objeto real:
1 - ContaEspecial permite que o saldo fique negativo
2 - ContaComum não
O comportamento do objeto será relativo ao
objeto real a qual é feita a referência
public class Funcionario
{
public float obterSalario() { return 100 };
}
public class Professor extends Funcionario
{
public float obterSalario(){ return 200; }
}
public class Teste
{
public static void main(String args[])
{
Funcionario f = new Professor();
System.out.println(f.obterSalario());
Funcionario f = new Funcionario();
System.out.println(f.obterSalario());
Professor p = new Funcionario(); //Este código não compila.
}
}
Sobrescrevendo o 
método obterSalario
Classe Abstrata
• Classes abstratas podem ser utilizadas para melhorar a legibilidade e 
manutenibilidade do modelo. São uteis para otimizar o código.
• Classes abstratas: não podem ser instanciadas
– Poderoso Mecanismo de Abstração:
Permite a herança do código sem violar a noção de subtipo
“Diz o que deve ter a subclasse, mas não diz como !”
– Classe abstrata: 
• código genérico, livre de particularidades
– As subclasses:
• detalhes particulares
Classe Abstrata
• Classes Abstratas:
– Não possuem instâncias
– Organizam atributos e operações
– Geralmente facilitam o reuso de 
código
– Implementação de métodos é
feita nas sub-classes 
– Podem conter métodos 
implementados
Retangulo PoligonoCirculo
Forma
mover()
exibir()
public abstract class Funcionario
{
private String nome;
public abstract float obterSalario();
}
public class Professor extends Funcionario
{
public float obterSalario()
{
return 100;
}
}
public class Teste
{
public static void main(String args[])
{
Funcionario f = new Professor();
System.out.println(f.obterSalario());
Funcionario f = new Funcionario(); 
Professor p = new Funcionario(); 
}
}
Classe Abstrata
Classe Concreta
Mensagem
Classe Abstrata
• Métodos Abstratos:
– Só a assinatura, sem corpo
– Precisam ser implementados pelas subclasses
• A classe abstrata enumera características genéricas do modelo, mas 
não as implementa.
• A classe abstrata obriga subclasses (folhas) a implementarem 
funcionalidades abstratas previstas em seu corpo.
• Para isto, cada subclasse se utiliza de seus detalhes particulares.
Interfaces
• Classes abstratas que possuem apenas métodos abstratos.
• Também não podem ser instanciadas
• Na Interface:
– Métodos são implicitamente “abstract” e “public”
– Campos são implicitamente “static” e “final”
– Não possuem construtores
C. Abstratas X Interfaces
• Uma interface é 100% abstrata, uma classe abstrata, 
necessariamente, não. 
• Interface: 
– Todos os métodos são abstratos. 100%
• Classe abstrata: 
– Pode ou não ter métodos abstratos. 0%-100%
Construtor
Todo objeto criado é inicializado
Valores são atribuídos aos dados mantidos pelo objeto 
durante sua fase de construção
Classe ContaEmBanco
Encerrar( )
Sacar( valor )
Depositar( valor_cheque )
Depositar( valor_dinheiro )
ContaEmBanco( _Nome, _prof, … )
Exemplo:
Construtor
• Garante que os objetos são inicializados de forma correta.
• Tem o mesmo nome da classe
• É sempre executado quando o objeto é criado
• Não retorna nenhum valor
• Não pode ser chamado diretamente
• Pode conter parâmetros
• Pode haver mais de 1 método construtor com diferentes 
parâmetros
• Default: sem parâmetros
public class Pessoa
{
private int idade;
public Pessoa() 
{ 
idade = 20; 
}
public int obterIdade() { return idade; };
}
public class Professor extends Pessoa
{
private int horas;
public int obterHoras() { return horas; )
public void atribuirHoras(int _h) { horas = _h; }
}
public class Teste
{
public static void main(String args[])
{
Professor p = new Professor();
System.out.println(p.obterHoras());
System.out.println(p.obterIdade());
}
}
Construtor
Passos para a criação 
de um objeto
1. Declarar uma referência para o objeto
Funcionario func1;
2. Criar uma instância do objeto
func1 := new Funcionario();
O sistema operacional aloca espaço em memória para o novo objeto e 
preenche os seus atributos com valores default (zero para números, nil para 
referências, false para booleanos, string vazia para Strings.
Passos para a criação 
de um objeto
3. Se houver um método construtor, este é invocado
O método construtor é usado para alterar os valores default dos atributos 
possibilitando que o objeto se torne disponível para a aplicação já em um estado pré-
definido
4. Modificação explícita do estado do objeto
func1.salario = 4000; // se o atributo é públicofunc1.gravaSalario(4000); // caso contrário
A referência para o objeto pode ser usada para alterar o estado dos atributos do 
objeto.
Persistência
• O termo persistência está relacionado ao total de tempo que 
um objeto permanece na memória. 
• De modo geral, as instâncias das classes são criadas 
durante a execução do programa e assim que o objeto não é
mais necessário, ocorre uma destruição do mesmo, ou seja, 
o espaço de memória reservado para ele é liberado. 
Persistência
• Um objeto em um Programa Orientado a Objetos surge das 
seguintes formas :
a) O objeto é criado estática ou dinamicamente pelo programa. 
b) O objeto é recuperado de um arquivo ou de uma base de dados relacional e 
levado à forma de objeto.
c) O objeto é recuperado de uma base de dados orientada a objeto e lido 
diretamente para utilização.
Diagrama de Classes
• Conjunto de classes e seus relacionamentos.
• Mais importante para a modelagem OO.
• Base para os diagramas de colaboração e implantação.
P e d id o It e m P e d id o P r o d ut o
10 .. *0 .. * 1c o n té m
16317/6/2012
Diagrama de Classes
• Mostra a natureza estática do sistema.
– A estrutura modelada é válida em qualquer ponto do ciclo de vida do 
sistema.
– Relações estáticas:
• Associações
– Uma empresa tem muitos funcionários
• Generalizações
– Um empregado é um tipo de pessoa
• Dependências (agregação/composição)
– Uma empresa utiliza caminhões para fazer entregas
Diagrama de Classes
• Diagrama de classes são a base das abordagens de desenvolvimento OO.
• Não use todas as notações:
– Comece com os recursos mais simples.
– Use características mais avançadas apenas quando necessário.
• Perspectiva:
– Não inclua muitos detalhes na análise.
– Especifique os modelos durante o projeto.
– Use modelos de implementação apenas para ilustrar técnicas de implementação 
específicas.
• Mantenha o foco nas áreas mais importantes.
– É melhor ter poucos diagramas atualizados que muitos obsoletos.
Diagrama de Classes
• Criando um diagrama de classes: 
– Num primeiro momento mantenha-o simples:
• Classes mais importantes
• Associações mais óbvias
– Num segundo momento acrescente:
• Atributos
• Multiplicidade
• Operações
• Responsabilidades
– Evite classes muito sobrecarregadas.
	Introdução à Orientação a Objetos
	Concepção de Sistemas
	Concepção de Sistemas
	Concepção de Sistemas
	Concepção de Sistemas
	Concepção de Sistemas
	Concepção de Sistemas
	Paradigma
	Paradigma
	Paradigmas Mais Populares
	Desenvolvimento Estruturado
	Desenvolvimento Estruturado
	Desenvolvimento Estruturado
	Orientação à Objetos
	Orientação à Objetos
	OO X Estruturado
	OO X Estruturado
	O paradigma OO
	O paradigma OO
	O paradigma OO
	OO - Vantagens
	OO - Vantagens
	OO - Vantagens
	OO - Desvantagens
	OO - Histórico
	Verdades sobre OO
	Verdades sobre OO
	Desenvolvimento Orientado a Objetos
	Objetos
	Objetos
	Objetos
	Objetos
	Objetos
	Objetos
	Objetos
	Objetos
	ObjetosVantagens
	Vantagens
	Abstração
	Abstração
	Abstração
	Abstração
	Abstração - Exemplos
	Abstração - Exemplos
	Abstração - Exemplo
	Abstração - Exemplo
	Abstração - Exemplo
	Objeto
	Exercício 1 – Identificação de Objetos
	Classes
	Classes
	Classes
	Classes
	Classes
	Classes
	Membros de Classes
	Atributos
	Atributos
	Serviços/Operações/Métodos
	Serviços/Operações/Métodos
	Serviços/Operações/Métodos
	Classes ContaEmBanco
	Objetos do tipo ContaEmBanco
	Classes - Exemplo
	Classes - Exemplo
	Implementação em Java
	Classes - Exemplo
	Implementação em Java
	Implementação em Java
	Modelagem de Classes
	Modelagem de Classes
	Modelagem de Classes
	Codificação de Classes
	Modelagem
	Codificação de Classes
	Codificação de Classes
	Codificação de Classes
	Codificação de Classes
	Identificando Classes
	Exercício 1 – Identificação de Classes
	Exercício 2 – Modelagem de Classes
	Mensagens
	Mensagens
	Mensagens
	Mensagens
	Mensagens
	Mensagens
	Mensagens
	Modelagem de Classes
	Modelagem de Classes
	Modelagem de Classes
	Codificação de Classes
	Exercício
	Exercício
	Modelagem de Classes
	Modelagem de Classes
	Modelagem de Classes
	Codificação de Classes
	Modelagem
	Modelagem
	Modelagem
	Modelagem
	Modelagem
	Modelagem
	Modelagem
	Associações
	Associações
	Associações
	Visibilidade
	Multiplicidade
	Multiplicidade
	Herança
	Herança
	Herança
	Herança
	Herança
	Herança
	Herança
	Herança
	Herança
	Herança
	Herança
	Herança - Exercício
	Herança - Exercício
	Herança - Exercício
	Agregação
	Agregação
	Composição
	Composição
	Agregação X Composição
	Classe de Associação
	Classe de Associação
	Classe de Associação
	Classe de Associação
	Encapsulamento
	Encapsulamento
	Encapsulamento
	Encapsulamento
	Encapsulamento
	Polimorfismo
	Polimorfismo
	Polimorfismo
	Sobrecarga
	Sobrecarga
	Sobrescrita
	Classe Abstrata
	Classe Abstrata
	Classe Abstrata
	Interfaces
	C. Abstratas X Interfaces
	Construtor
	Construtor
	Passos para a criação de um objeto
	Passos para a criação de um objeto
	Persistência
	Persistência
	Diagrama de Classes
	Diagrama de Classes
	Diagrama de Classes
	Diagrama de Classes

Continue navegando