Post on 13-Aug-2020
05-Mar-12 Leandro Tonietto
Orientação a Objetos
Leandro ToniettoProgramação I - Cursos de Informática da Unisinos
ltonietto@unisinos.brhttp://professor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf
03-12
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 2
Sumário
Introdução: conceitosSistemas Orientados a ObjetosClasses e objetosHerança simplesHerança múltiplaComo definir um sistema em classesPróximos passos
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 3
Introdução
Conceitos: O que é Orientação a Objetos?
• Perceber o mundo como um conjunto de objetos que trocam informações entre si.
O que é conceber / definir / projetar / construir um sistema orientado a objeto?
• Extrair de um problema, uma situação ou da análise do mundo real, quais são os objetos ou entidades que são importantes ou que tem alguma função dentro de determinado um contexto. Estabelecer a comunicação entre estes objetos de modo que formem um sistema.
• O objetivo é analisar um problema proposto e estabelecer uma estrutura que consiga descrever a situação proposta: montar um sistema.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 4
Introdução
Conceitos: Objetos mantêm toda a informação e comunicação
necessária para implementar ou executar a entidade real que ele está representando.
Os objetos devem encapsular toda a sua funcionalidade.
Objetos devem interagir com outros objetos através de mensagens e não deve permitir interação direta de outros objetos com seus atributos.
É uma unidade que funciona independentemente das demais. Portanto, existe por si só e em conjunto formam um sistema.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 5
Sistemas Orientados a Objetos
Quais são os objetos (ou entidades) que podemos identificar neste sistema (carro de corrida)?Quais são as suas propriedades?Somente com estas propriedades é possível fazer com que os objetos interajam e consigam fazer o sistema funcionar?Quais são as ações que os objetos podem realizar?Uma entidade tem conhecimento sobre como funciona a outra?
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 6
Sistema Orientados a Objetos
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 7
Orientação a Objetos
Classes: Em Orientação a Objetos, classes são a descrição de
objetos do mundo real Descrevem atributos ou propriedades de objetos Descrevem métodos que operam sobre os atributos
definidos. Quanto melhor a definição (mais completa), maior
será a vida útil da classe e melhor será a definição do sistema em geral.
A palavra-chave em POO: reuso
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 8
Orientação a Objetos
UML:
Pessoanome
idade
endereço
fadiga
andar(distância)
falar()
comer(comida)
Classe
métodos
atributos
A classe é composta por atributos (propriedades) e métodos (ações / mensagens).
Os atributos possuem nomes significativos que melhor definem o dado de negócio que representam.
Os métodos são sempre ações que operam sobre os atributos da classe.
Em uma boa programação OO, somente os métodos de objeto podem alterar o estado do objeto (atributos).
Os métodos recebem (ou não) parâmetros que permitem customizar uma ação sobre os atributos.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 9
Orientação a Objetos
Objetos: São ocorrências em memória (ou instâncias) de classes. Objetos possuem um estado na memória, definido pelos
atributos do objeto. Já classes são definições de estado e de comportamento de objeto.
A relação entre classe e objeto pode ser definida assim:• Classe definem quais são as propriedades e métodos de ação /
comunicação de uma entidade do mundo real. • Se diz que uma classe caracteriza um conjunto objetos do
mundo real que tenham o mesmo comportamento.• Objetos possuem valores para estes atributos e realizam ações
somente sobre os seus dados• Classe Pessoa descreve o comportamento de uma pessoa do
mundo real, com atributos comuns as pessoas, como: nome, idade, endereço, cpf, ...
• Cada pessoa (Fulano, Cicrano, Beltrano, ...) contém seus próprios valores para os atributos de Pessoa.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 10
Orientação a Objetos
Objetos: Exemplo, ocorrências ou instâncias de Pessoa
(da classe Pessoa):• Fulano (32 anos, Rua XZ, 13% de fadiga)• Cicrano (29 anos, Rua Tal, 15% de fadiga)• Beltrano (18 anos, Rua Oioio, 1% de fadiga)
Cada ocorrência tem dados diferentes das outras, porém todas possuem os mesmos atributos (nome, idade, endereço e nível de fadiga), portanto, pertencem a uma mesma classe.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 11
Orientação a ObjetosExemplo: Digamos que o método andar(distância) tenha a seguinte ação:
• Aumenta o nível de fadiga dependendo da idade da pessoa e da distância percorrida.
• Podemos considerar a fórmula: fadiga = fadiga + idade/100 + distância/100
Desta forma se executarmos o método andar (30 m) para cada um dos objetos criados anteriormente, teríamos a seguinte situação:
Objeto Fadiga antes de andar
Fadiga depois de andar
Fulano 13% 13,62%
Cicrano 15% 15,59%
Beltrano 1% 1,48%
Perceba que os valores são alterados diferentemente para cada objeto, pois cada um possui seu espaço de memória
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 12
Orientação a Objetos
Quais dos itens abaixo são classes: Caneta Pessoa Fulano de Tal Personagem Arquivo Mago Guerreiro
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 12
Orientação a Objetos
Quais dos itens abaixo são classes: Caneta Pessoa Fulano de Tal Personagem Arquivo Mago Guerreiro
É uma ocorrência de uma entidade
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 13
Orientação a Objetos
Exemplo: classe funcionário
Funcionarionome
salario
cargo
aumento(valor)
obtemNome()
trocarCargo(cargo)
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 13
Orientação a Objetos
Exemplo: classe funcionário
Funcionarionome
salario
cargo
aumento(valor)
obtemNome()
trocarCargo(cargo)
Perguntas:
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 13
Orientação a Objetos
Exemplo: classe funcionário
Funcionarionome
salario
cargo
aumento(valor)
obtemNome()
trocarCargo(cargo)
Perguntas:-Porque estes atributos? Eles são suficientes?
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 13
Orientação a Objetos
Exemplo: classe funcionário
Funcionarionome
salario
cargo
aumento(valor)
obtemNome()
trocarCargo(cargo)
Perguntas:-Porque estes atributos? Eles são suficientes?-Como identificar os atributos certos a serem modelados?
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 13
Orientação a Objetos
Exemplo: classe funcionário
Funcionarionome
salario
cargo
aumento(valor)
obtemNome()
trocarCargo(cargo)
Perguntas:-Porque estes atributos? Eles são suficientes?-Como identificar os atributos certos a serem modelados?-Como identificar os comportamentos a serem modelados?
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 13
Orientação a Objetos
Exemplo: classe funcionário
Funcionarionome
salario
cargo
aumento(valor)
obtemNome()
trocarCargo(cargo)
Perguntas:-Porque estes atributos? Eles são suficientes?-Como identificar os atributos certos a serem modelados?-Como identificar os comportamentos a serem modelados?
-A resposta é: depende da situação. Não há uma solução mágica ou pronta para cada situação possível. A idéia é conseguir modelar todos os aspectos necessários para melhor descrever o sistema.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 14
Orientação a Objetos
Outros exemplos:
ContaBancariacorrentista
saldo
limite
depositar(valor)
retirar(valor)
obterSaldo()
Produtonome
custo
fornecedor
retornaNome()
defineCusto(valor)
defineFornecedor (fornecedor)
calculaValor(lucro)
Veiculomarca
modelo
placa
kilometragem
retornaPlaca()
rodar(km)
retornaModelo()
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 15
Orientação a Objetos
Dificilmente se descreve objetos simples e apenas imaginando como deveria ser um na vida real.Na prática, a modelagem vem apenas a descrição de um sistema, que permite avaliar o contexto que está sendo modelado. A classe veículo, para um determinado sistema exige
alguns atributos e comportamentos e para outro, podem ser modelados atributos e comportamentos completamente diferentes, por causa do contexto.
O que se faz na prática é modelagem de sistemas, com descrição de vários objetos e dos relacionamentos entre eles.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 16
Sistemas Orientados a Objetos
Como surgem os sistemas? Através de um problema identificado e descrito
Como descrever um problema identificado? Identificar o motivo ou objetivo Descrever o que o sistema deve fazer
Como conceber um sistema? A partir do que deve ser feito, identificar quais são
as entidades que compõem este sistema. Descrever quais são os atributos destes objetos Descrever quais são as ações dos objetos e quais são
as interações com outros objetos.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 17
Sistemas Orientados a Objetos
Vantagens: Produtividade Qualidade Reuso: se um objeto foi bem descrito, de
acordo com a realidade, ele pode ser reaproveitado em outros sistemas.
Se o código tem qualidade, se a produtividade é boa e o código é reutilizável, então representa economia.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 18
Sistemas Orientados a Objetos
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 18
Sistemas Orientados a Objetos
Exemplo:
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 18
Sistemas Orientados a Objetos
Exemplo: Considere os conceitos vistos anteriormente
e use tente identificar quais são os objetos e seus atributos e métodos:
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 18
Sistemas Orientados a Objetos
Exemplo: Considere os conceitos vistos anteriormente
e use tente identificar quais são os objetos e seus atributos e métodos:
Desenvolva um programa que lê as notas dos graus parciais de uma disciplina a partir de um cadastro de alunos e calcula e imprime as notas finais.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 18
Sistemas Orientados a Objetos
Exemplo: Considere os conceitos vistos anteriormente
e use tente identificar quais são os objetos e seus atributos e métodos:
Desenvolva um programa que lê as notas dos graus parciais de uma disciplina a partir de um cadastro de alunos e calcula e imprime as notas finais.
Dica: Identificar os objetos da “história”, identificar quais são seus atributos (campos) e identificar o quê eles podem fazer
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 19
Sistemas Orientados a Objetos
Exemplo: Objetos: são substantivos Atributos: são dados identificados para um
objeto. O que eles devem manter na memória para execução do programa. Podem ser tanto dados primitivos quanto outros objetos.
Métodos: são identificados pelos verbos, portanto, são ações que os objetos podem executar.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 20
Sistemas Orientados a Objetos
Exemplo: Desenvolva um programa que lê as notas dos
graus parciais de uma disciplina a partir de um cadastro de alunos e calcula e imprime as notas finais.
Substantivos: PROGRAMA (Main), DISCIPLINA e ALUNOS
Verbos: LER, CALCULAR, IMPRIMIR Dados: GRAUS PARCIAIS e NOTAS FINAIS
(alguns dados não precisam ser guardados, apenas mostrados ou calculados)
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 21
Sistemas Orientados a Objetos
Exemplo:Aluno
nomegrauA
grauBgrauC
definirNome(n)definirGrauA(n)
definirGrauB(n)definirGrauC(n)retornarNome()
retornarGrauA()retornarGrauB()retornarGrauC()
Métodos necessários para comunicação com outros objetos
Dados necessários para manter um objeto do tipo aluno na memória
O que é básico:-Identificar a classe (Aluno)-Identificar seus atributos e métodos (graus A, B e C)
O que é avançado:-identificar possíveis dados e comportamentos para resolver o sistema (atributo nome e métodos retornar e definir valor dos atributos).
-Observe que para cada atributo há um método de retorno e definição, portanto, o a interação com outros objetos não é direta.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 22
Sistemas Orientados a Objetos
Exemplo:Disciplina
nomeAluno alunos[]
definirNome(n)adicionarAluno(aluno)
removerAluno(aluno)retornarNome()retornarAluno(n)
Métodos necessários para comunicação com outros objetos
Dados necessários para manter um objeto do tipo disciplina na memória
“Novidades”: Disciplina não contém
apenas tipo de dado, contém também, objetos: alunos.
Disciplina possui uma lista de alunos e, portanto, deve permitir adicionar, remover e retornar alunos desta lista.
Pergunta: como saber se é a disciplina que possui um aluno ou se é o aluno que possui disciplinas?
Resposta: depende da situação. Neste caso, desejamos listar as notas dos alunos de uma disciplina.
Mas pode ser necessário, inclusive, manter um relacionamento nos dois lados...
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 23
Sistemas Orientados a Objetos
Exemplo:Programa
disciplina
main()lerDadosDiscplina()
calculaNotaFinal(aluno)imprime (disciplina)
Métodos necessários para realizar as ações
Dados necessários para o objeto Programa funcionar
Programa (ou objeto) principal: Por onde inicia a execução do
sistema (método main) É o principal conector de
objetos: por exemplo, no método lerDadosDiciplina, são lidos os dados da disciplina e de cada aluno que é inserido no objeto diciplina.
Programa fará uso dos métodos de retorno e definição dos objetos das classes Aluno e Disciplina
Programa realiza a ações propostos no problema
Repare que esta classe não possuem método de retorno, nem de definição.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 24
Sistemas Orientados a Objetos
Exemplo:Programa
disciplina
main()lerDadosDiscplina()
calculaNotaFinal(aluno)imprime (disciplina)
Disciplina
nomeAluno alunos[]
definirNome(n)adicionarAluno(aluno)
removerAluno(aluno)retornarNome()retornarAluno(n)
Aluno
nomegrauA
grauBgrauC
definirNome(n)definirGrauA(n)
definirGrauB(n)definirGrauC(n)retornarNome()
retornarGrauA()retornarGrauB()retornarGrauC()
Isto estava escrito no na história do programa, o restante é necessário para o bom funcionamento do sistema.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 25
Sistemas Orientados a Objetos
Dicas: Sempre escrever bem, ou o mais detalhado
possível, a descrição de um problema. Isto facilita a concepção das classes.
Por outro lado, seja objetivo, descreva apenas aquilo é importante para o bom funcionamento do sistema, não desperdice tempo de codificação, nem recurso de processamento com coisas inúteis.
Primeiro modelar o que está sendo solicitado, depois fazer melhorias no modelo do sistema
Comece a definir as classes “das pontas” e termine com objeto principal do sistema (main).
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 26
Exercício
Modelar um sistema de folha de pagamento de uma empresa. Neste sistema, os funcionários possuem um salário-base, um desconto relativo a contribuição ao INSS, desconto de IRRF e descontos eventuais (como adiantamento de salário, empréstimo consignado e etc.).O sistema deve ser capaz de ler os dados dos funcionários, inclusive indicando qual é a sua lotação e imprimir um relatório da “folha” de pagamento.Regras de cálculo (apenas para programação, não aparece na modelagem): INSS – desconta 11% do salário-base, ou no máximo, R$ 318,00. IRRF – até R$ 1.192,00 o funcionário está isento. Até R$ 1.700,00,
desconta 12,5%. Até R$ 2.200,00, desconta 15%. Até R$ 2.700,00 desconta 20%. E, acima de R$ 2.700,00, desconta 27,5%.
Fórmula: salário = SB – INSS – (SB*IRRF) - descontos
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 27
Conceitos de Orientação a Objetos
Construtores Regra: todo o objeto instanciado deve inicializado antes de ser
executado. Construtor é o método da classe que é chamado
automaticamente no momento da instanciação de um objeto. Serve para inicializar os atributos do objeto, para “evitar”
inconsistência de dados. Recebe o mesmo nome que a classe. Construtor padrão é aquele que não possui parâmetros. Pode-se criar um construtor para cada tipo de inicilização
necessária. Conforme o número e o tipo de parâmetro, o compilador chama o construtor apropriado.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 28
Conceitos de Orientação a Objetos
ConstrutoresDisciplina
nomeAluno alunos[]
Disciplina(nome, numAlunos)Disciplina(nome)
Disciplina()definirNome(n)adicionarAluno(aluno)
removerAluno(aluno)retornarNome()retornarAluno(n)
Construtor que é chamado quando o objeto que está instanciando uma disciplina, quiser inicializar uma disciplina com nome e número de alunos.
Construtor alternativo, chamado quando o objeto que está instanciando uma disciplina, deseja inicializar a disciplina apenas com o nome.
Construtor padrão. Não recebe parâmetros. Fornece uma inicialização padrão para todos os dados.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 29
Conceitos de Orientação a Objetos
Construtores Imagine uma classe Jogador que contenha
um valor que deve ser acumulado a cada tempo, ou quando solicitado pelo sistema. Digamos o campo bônus.
Podemos imaginar ainda, que o método incrementaBonus() incrementa o bônus atual em 100 pontos.
O que aconteceria caso a classe Jogador não tivesse um construtor e fosse realizada a chamada ao incrementaBonus()?
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 30
Conceitos de Orientação a Objetos
Destrutores Assim como é necessário inicializar os atributos de
uma classe é necessário destruí-los (em alguns casos).
Um destrutor é invocado automaticamente sempre que um objeto é liberado da memória.
A utilização de destrutores é para o caso da deslocação de atributos que alocaram memória dinamicamente.
Veremos mais sobre destrutores mais adiante na disciplina, por enquanto fica apenas a conhecimento do termo.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 30
Conceitos de Orientação a Objetos
Destrutores Assim como é necessário inicializar os atributos de
uma classe é necessário destruí-los (em alguns casos).
Um destrutor é invocado automaticamente sempre que um objeto é liberado da memória.
A utilização de destrutores é para o caso da deslocação de atributos que alocaram memória dinamicamente.
Veremos mais sobre destrutores mais adiante na disciplina, por enquanto fica apenas a conhecimento do termo.
Em Java os objetos são destruídos (memória é liberada), automaticamente pelo Garbage Collector, quando a área de memória alocada para eles não é mais referenciada.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 31
Orientação a Objetos
Encapsulamento Significa que um objeto deve conter toda a informação que
dele se precisa. Portanto, um objeto deve conter todo o comportamento
necessário para sua execução dentro de si e não separado por classes não relacionadas.
Exemplo: classe Pessoa contém todos os dados de pessoa, mas o programa mantém o número CPF fora classe, sob responsabilidade de outra.
Ocultamento Ocultamento é uma das tarefas do encapsulamento. Um objeto deve “esconder” (proteger) seus dados de acesso
externo direto. É a idéia de evitar que os dados sejam corrompidos.
A funcionalidade do objeto esta ocultada na definição.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 32
Sistemas Orientados a Objetos
Visibilidade dos dados: Nível de acesso externo aos atributos de um
objeto. Um objeto deve proteger seus dados do
acesso, para evitar inconsistência dos dados.
Ao mesmo tempo ele deve permitir alguma interação (troca de mensagens), para troca de informações com outros objetos para funcionamento correto do sistema.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 33
Sistemas Orientados a Objetos
Visibilidade dos dados: Basicamente, existem 3 tipos de visibilidade:
• Privada (private): onde somente os métodos da classe (dentro da descrição do objeto apenas) tem acesso aos atributos e métodos privados (acesso privado à classe). É como fazemos o “ocultamento” de dados e comportamentos.
• Público (public): qualquer classe ou objeto tem acesso ao atributo ou método (acesso livre).
• Protegido (protected): somente a própria classe e as classes derivadas tem acesso direto a atributos e métodos (acesso restrito).
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 34
Sistemas Orientados a Objetos
Visibilidade dos dados: Em Java, é possível ainda tornar atributos e métodos
como “package friendly”. Este tipo de visibilidade é associado automaticamente
aos membros da classe que não possuem modificador de visibilidade.
Isto permite que as classes do mesmo pacote possam acessar estes métodos e atributos que são privados para outras classes e objetos de outros pacotes.
OBS: lembre-de de que os métodos ou atributos package friendly não podem estar associados a nenhm modificador de visibilidade:• void imprime (){ ... } // package friendly• public void imprime (){ ... } // public
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 35
Sistemas Orientados a Objetos
Visibilidade dos dados: Porque esconder dados e comportamentos? Porque controlar visibilidade? Não é mais fácil deixar tudo público? Como classificar um método ou atributo como
privado, público ou protegido?
Se você consegue responder estas questões e sabe o que é mais apropriado usar em cada situação, então a OO está começando a fluir em seu sangue! Caso contrário, vá além! Procure os livros!
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 36
Orientação a Objetos
Mago
- nome# energia
- poder- nível
+Mago(nome, energia, poder, nível)+Mago(nome, nível)
+andar(distância)+usarMagia(Mundo)+aumentarPoder(quantidade)
+evoluir()-calculoEvolucao()
Digamos que um jogo tenha uma instância de mago.Os atributos da classe Mago estão privados ao acesso externo.Utilizaremos o caracter “-” (hífen) para identificar acesso privado. Para o acesso público, será utilizado o caracter “+” (soma). Para o acesso protegido, o caracter “#”.Os construtores da classe são sempre públicos.É possível ocultar, além dos atributos, comportamentos.No exemplo ao lado o quê está acessível externamente?
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 37
Orientação a Objetos
Exercícios:1. Faça a definição de classes do seguinte sistema proposto:
O sistema simula um jogo de xadrez; contém um tabuleiro e dois times de peças de xadrez, cada um com 8 peões, dois cavalos, dois bispos, duas torres, uma rainha e um rei. O jogo permite que dois jogadores se enfrentem segundo as regras do jogo de xadrez.
2. Descreva a descrição do problema e a definição de classes para um jogo de simulação de corrida de automóveis.
A definição das classes deve conter: atributos com visibilidade, métodos com visibilidade, construtores e deve contemplar toda a descrição do problema (funcionalidades).Faça os exercícios em aula. Contudo, a entrega é obrigatória na próxima aula (conta ponto de participação). Entrega deve ser impressa.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 38
Softwares para Modelagem UML
Alguns softwares de modelagem UML: StarUML:
http://staruml.sourceforge.net/en/
Jude: http://jude.change-vision.com/jude-web/index.html
Visual Paradigm:http://www.visual-paradigm.com
Rational Rose:http://www-306.ibm.com/software/rational/
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 39
Orientação a Objetos
Herança Especialização de objetos. Classe-base (ou classe-mãe, ou classe-pai) possuem
propriedades que podem ser utilizadas por classes-derivadas (ou classes-filhas)
Se diz que a classe derivada estende a classe-base. Quando isto acontece, a classe derivada herda todas as
propriedades da classe-base. Ela tem acesso a todos os membros não privados da classe-base.
Exemplo: • Sistema de cadastro de turmas de um curso. A turma tem um
professor e tem diversos alunos. A classe professor possui os atributos: nome, endereço, titulação e especializações. Já a classe aluno possui os atributos: nome, endereço e número de matrícula. Note que os atributos que são comuns as pessoas, são comuns tanto à professor, quanto à aluno.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 40
Orientação a Objetos
Herança
Pessoa
# nome# endereço
+Pessoa(nome, endereço)+defineNome(nome)+defineEndereço(endereço)+obtemNome()+obtemEndereço()
Aluno
- matrícula
+Aluno(nome, endereço, matrícula)+defineMatricula(matricula)
Professor
- titulação- qualificações
+Professor(nome, endereço, titulação, qualificações)+defineTitulação(titulação)+adicionaQualificação(qualificação)+removeQualificação(posição)+retornaQualificação(posiçao)
Uma boa prática é definir os atributos da classe-base como protegidos, desta forma, eles ficam privados para outras classes que não sejam derivadas de pessoa
A seta apontando para a classe base indica que uma classe (derivada) estende a definição de outra (base)
Repare que as classes derivadas também devem solicitar as informações necessárias para contemplar os construtores da classe-base.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 41
Alunomatricula
Orientação a Objetos
As classes Aluno e Professor compartilham alguns atributos: os de Pessoa:
Quando da instanciação de Aluno ou Professor os dados de Pessoa também são alocados para cada instância
Professortitulação
Pessoanome
Aluno matricula
Pessoanome
Professortitulação
Pessoanome
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 42
Orientação a Objetos
Herança múltipla Especialização mais de um objeto. Uma classe derivada herda de mais de uma
classe-base. Então ela possui as propriedades de ambas,
além das suas. Exemplo:
• Num jogo, um existem os magos e os guerreiros. Com propriedades diferentes. Entretanto, um druida, é um mago guerreiro, portanto, esta classe herda propriedades tanto de mago quanto de guerreiro.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 43
Orientação a Objetos
Herança
Guerreiro
# armas
Mago
# magia
MagoGuerreiro
- outras propriedades
Magos podem usar magia, guerreiros podem lutar com armas e o MagoGuerreiro pode fazer ambas as coisas, além das suas próprias habilidades.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 44
Orientação a Objetos
Herança Exercício. Considere as seguintes sentenças e
forme a hierarquia correta (definição de classes):• Todas as peças do tabuleiro de xadrez tem um
posição atual e um nome (descrição)• Peão, bispo, torre, cavalo, rainha e rei são peças
de xadrez, e cada um tem uma forma própria de se movimentar.
• O tabuleiro possui 2 times de peças. Cada um com 8 peões, 2 cavalos, 2 bispos, 2 torres, uma rainha e um rei.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 45
Orientação a Objetos
Herança Exercício 2. Considere as seguintes sentenças e forme a
hierarquia correta (definição de classes):• O sistema a ser desenvolvido é um jogo FPS• O jogador é um personagem que pode ter várias armas. Ele no
mínimo já será criado com a arma “punhos”.• As armas disponíveis no jogo são: punhos, metralhadora e bolas
de fogo.• Os inimigos (ou “monstros”) possuem apenas uma arma cada
um. O monstro A só ataca com a mão, o monstro B só ataca com metralhadora e o monstro C só ataca com bolas de fogo.
• Cada monstro possui um movimento em especial.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 46
Orientação a Objetos
Relacionamentos Num sistema OO cada objeto realiza o seu papel,
mas precisam estar relacionados (ou trocarem informações) para o sistema funcionar como um todo.
Na engenharia de software existem diversos relacionamentos e técnicas de projeto de software.
Aqui veremos 3 tipos básicos de relacionamento:• Associação (um objeto possui uma referência para outro)• Herança (uma classe derivada estende uma classe base)• Auto-relacionamento (um objeto possui uma relação
com um objeto da mesma classe).
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 47
Orientação a Objetos
Relacionamentos Além da “ligação” temos a cardinalidade do
relacionamento. Cardinalidade é número de elementos
relacionados a um objeto:• 1 — 1: um-para-um• 1 — <n>: um-para-algum número específico• 1 — ∗: um-para-muitos (sem número definido)
– 1 — (0..*): zero ou muitos– 1 — (1..*): um ou muitos– 1— (<n>..*): um número específico ou muitos
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 48
Orientação a Objetos
Relacionamentos Exemplo:
1) ...O tabuleiro possui 32 peças de xadrez...
2) ... O tabuleiro possui 2 times (brancas e pretas) de 16 peças cada um...
Tabuleiro Peça32
Tabuleiro contém peças
Tabuleiro PeçaTabuleiro contém peças pretas
Tabuleiro contém peças brancas
1616
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 49
Orientação a Objetos
Relacionamentos
Tabuleiro
- Peça peças[32]
+Tabuleiro()
+movimento(peça, posiçãoNova)
Tabuleiro
- Peça brancas[16]
- Peça pretas[16]
+Tabuleiro()
+movimento(peça, posiçãoNova)Peça
- descrição
- posição
+ Peça(descrição, posição)
+ testaMovimento(posiçãoNova)
+ trocaPosição(posiçãoNova)
+ retornaDescrição()+ retornaPosição()
Peça
- descrição
- posição
+ Peça(descrição, posição)
+ testaMovimento(posiçãoNova)
+ trocaPosição(posiçãoNova)
+ retornaDescrição()+ retornaPosição()
1 2
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 50
Orientação a Objetos
Exercícios com relacionamentos: Voltando ao jogo de corrida...
• O jogo deve possuir 5 oponentes (competidores)• É importante considerar o desgaste dos pneus em tempo de
programação; neste caso, cada pneu possui informações de tipo e quantidade de borracha restante. Além de permitir calcular o seu desgaste.
• Carro deve, além de controlar os pneus, controlar o nível do combustível no tanque, a aceleração, a sua posição e velocidade.
• Demais classes ficam a cargo do aluno. Faça o diagrama de classes com os relacionamentos
entre as classes (quem está associado com quem e relações de herança).
Após feito o diagrama de classes dos relacionamentos, modele os atributos e comportamentos de cada classe.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 51
Orientação a Objetos
Exercícios com relacionamentos:
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 52
Orientação a Objetos
Relacionamentos Geralmente, para visão dos relacionamentos,
só mostramos as classes e os respectivos relacionamentos com a respectiva cardinalidade (sem atributos e sem métodos)
Programa Disciplina
Aluno
1..∗Programa possui disciplinas
Disciplinas possui alunos
Dois tipos diferentes de ilustrar relacionamento:
Com ligação simples e expressando a cardinalidade
Com ligação com círculo, indicando a cardinalidade quando diferentes de
“muitos”
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 53
Orientação a Objetos
Relacionamentos
Aluno
Pessoa PessoaPessoa tem outra pessoa de contato
Herança Auto-relacionamento
Aluno estende Pessoa
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 54
Exemplo Especificação Sistema
Problema/Requisitos: Desenvolver um jogo no estilo “push-
puzzle” (SokoBan), onde o objetivo é encaixar (empurrar) as pedras nos buracos.
Como todo jogo, este deve ter uma classe que contenha as regras e validações.
Deve permitir, com o mesmo jogo, usar interfaces diferentes.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 55
Exemplo Especificação Sistema
Descrição breve do sistema: O jogo começa com motor dando carga da lista de mapas com os dados de
objetos (pedras, buracos, caminhos e parede) e posição inicial do cursor na matriz. Estes objetos estão representados numa matriz bidimensional. A cada movimento feito pelo jogador, o motor do jogo verifica se é possível fazer o movimento e, em caso positivo, efetiva o mesmo. Um movimento possível é o deslocamento do cursor pelos caminhos do mapa que não estejam bloqueados (por parede ou por duas peças contínuas). O jogo termina quando todas pedras estão nos buracos (o jogo deve alertar isso). Todos os movimentos feitos podem ser desfeitos e refeitos e, para isso, o sistema mantém duas pilhas de movimentos (undo e redo).
Como um movimento do cursor pode ocasionar o movimento de uma peça, se diz que este movimento gera um outro movimento aninhado, para que possam ser desfeitos os dois ao mesmo tempo. Portanto, é necessário guardar uma referência para o movimento da peça no movimento do cursor.
Para renderizar os mapas e as demais informações de interface, serão criadas classes específicas de rendering.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 55
Exemplo Especificação Sistema
Descrição breve do sistema: O jogo começa com motor dando carga da lista de mapas com os dados de
objetos (pedras, buracos, caminhos e parede) e posição inicial do cursor na matriz. Estes objetos estão representados numa matriz bidimensional. A cada movimento feito pelo jogador, o motor do jogo verifica se é possível fazer o movimento e, em caso positivo, efetiva o mesmo. Um movimento possível é o deslocamento do cursor pelos caminhos do mapa que não estejam bloqueados (por parede ou por duas peças contínuas). O jogo termina quando todas pedras estão nos buracos (o jogo deve alertar isso). Todos os movimentos feitos podem ser desfeitos e refeitos e, para isso, o sistema mantém duas pilhas de movimentos (undo e redo).
Como um movimento do cursor pode ocasionar o movimento de uma peça, se diz que este movimento gera um outro movimento aninhado, para que possam ser desfeitos os dois ao mesmo tempo. Portanto, é necessário guardar uma referência para o movimento da peça no movimento do cursor.
Para renderizar os mapas e as demais informações de interface, serão criadas classes específicas de rendering.
Dada a descrição, quais são as classes do jogo?
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 56
Exemplo Especificação Sistema
Relacionamentos:Jogo Motor ListaSokoMapa
SokoMapa
Movimento
Render Renderizador desenha um mapa na tela
Interage com motor
Motor s
olicit
a red
esenh
o
Jogo solicita serviços de
renderização
Motor valida e executa
movimento
Motor contém mapas
Lista contém diversos mapas
Pilha
O jogo solicita ao motor diversos serviços, como: realizar uma jogada, desfazer um movimento, refazer um movimento e trocar de mapa.
Pilha de movimentos
Mantém 2 pilhas: undo e redo
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 57
Exemplo Especificação Sistema
Definição de classes:Jogo
-Motor motor
-Render render
-Menu[] opcoes
main()
+novoJogo()
+montaOpcoes()
+executar()+mostrarHelp()
+lerDados()
Motor
-ListaSokoMapa mapas
-Render render
-Stack<Movimento> undo
-Stack<Movimento> redo
Motor(Render)
+jogar(Movimento)
-verificaMov(Movimento)
+undo()+redo()
+irParaProximo()
+irParaAnterior()+setRenderizador(Render)
Render
<<nenhum atributo>>
+desenhaMenu(Menu[] ops)
+desenhaMapa(SokoMapa)
+escreveMsg(x,y,mensagem)
+limpaJanela(x,y,largura, altura)
Menu
+x
+y
+texto
+teclaAtivação
+Menu(x,y,texto,tecla)
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 57
Exemplo Especificação Sistema
Definição de classes:Jogo
-Motor motor
-Render render
-Menu[] opcoes
main()
+novoJogo()
+montaOpcoes()
+executar()+mostrarHelp()
+lerDados()
Motor
-ListaSokoMapa mapas
-Render render
-Stack<Movimento> undo
-Stack<Movimento> redo
Motor(Render)
+jogar(Movimento)
-verificaMov(Movimento)
+undo()+redo()
+irParaProximo()
+irParaAnterior()+setRenderizador(Render)
Render
<<nenhum atributo>>
+desenhaMenu(Menu[] ops)
+desenhaMapa(SokoMapa)
+escreveMsg(x,y,mensagem)
+limpaJanela(x,y,largura, altura)
Menu
+x
+y
+texto
+teclaAtivação
+Menu(x,y,texto,tecla)
Uma nova classe foi identificada, também deve ser definida
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 58
Exemplo Especificação Sistema
Definição de classes:
ListaSokoMapa
-List<SokoMapa> mapas
-SokoMapa atual
ListaSokoMapa()
+adicionaMapa(SokoMapa)
+removeMapa(SokoMapa)
+removeMapa(indice)+retornarMapa(indice)
+irParaPróximo()
+irParaAnterior()+retornaMapaAtual()
SokoMapa
-elementos[]
-Vetor cursor
-nomeMapa
SokoMapa(nome)
+setNome(nome)
+getNome()
+setPosicaoCursor(vetor)+defineElemento(x,y,tipo)
+getElemento(x,y)
+lerDados(arquivo)+getPosicaoCursor()
+getMatriz()
Movimento
-Vetor origem
-Vetor destino
-Movimento aninhado
Movimento(origem, destino)
+setOrigem(Vetor)
+setDestino(Vetor)
+getOrigem()+getDestino()
+setAninhado(Movimento)
+getAninhado(Movimento)
Vetor
+x
+y
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 58
Exemplo Especificação Sistema
Definição de classes:
ListaSokoMapa
-List<SokoMapa> mapas
-SokoMapa atual
ListaSokoMapa()
+adicionaMapa(SokoMapa)
+removeMapa(SokoMapa)
+removeMapa(indice)+retornarMapa(indice)
+irParaPróximo()
+irParaAnterior()+retornaMapaAtual()
SokoMapa
-elementos[]
-Vetor cursor
-nomeMapa
SokoMapa(nome)
+setNome(nome)
+getNome()
+setPosicaoCursor(vetor)+defineElemento(x,y,tipo)
+getElemento(x,y)
+lerDados(arquivo)+getPosicaoCursor()
+getMatriz()
Movimento
-Vetor origem
-Vetor destino
-Movimento aninhado
Movimento(origem, destino)
+setOrigem(Vetor)
+setDestino(Vetor)
+getOrigem()+getDestino()
+setAninhado(Movimento)
+getAninhado(Movimento)
Mantém uma lista de SokoMapa
Vetor
+x
+y
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 59
Exemplo Especificação Sistema
Relacionamentos:Jogo Motor ListaSokoMapa
SokoMapa
Movimento
Render Renderizador desenha um mapa
Interage com motor
Motor solicita redesenho
Jogo solicita serviços de
renderização
Motor valida e executa
movimento
Motor contém mapas
Lista contém diversos mapas
Mantém 2 pilhas: undo e redo
Como detectamos mais classes na definição das classes, devemos atualizar os relacionamentos.
Menu Renderizador desenha menus
Jogo monta menu
PilhaPilha de movimentos
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 60
Orientação a Objetos
Novidades: Percebe-se que algumas classes são de armazenamento
de dados (SokoMapa, ListaSokoMapa, Menu, Pilha e Movimento)
Outras só realizam serviços (Render) Ainda podemos ter as de serviço que armazenam algum
dado (Jogo e Motor) As classes de serviço são interessantes porque fornecem
serviços que podem ser utilizados em todos os momentos do sistema.
Como elas não mantêm dados não precisam ser referências.
E são facilmente portadas para outros sistemas.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 61
Orientação a Objetos
Fim: Agora o sistema pode ser estimado, planejado e construído
(programado) Com base nas definições acima, fica mais fácil compreender e
construir o sistema Outra vantagem é que estas definições de classes são
independentes de linguagem, portanto, se você mantiver atualizados os diagramas, poderá construir o mesmo sistema em qualquer linguagem de programação que suporte OO.
Sempre comece com o relacionamento e depois faça o detalhamento de cada classe.
No momento da programação, muitas alterações podem ocorrer na definição das classes, manter os diagramas (ou definições) facilitam a manutenção do sistema.
segunda-feira, 5 de março de 12
05-Mar-12 Leandro Tonietto 62
Orientação a Objetos
É importante para o restante da disciplina que você tenha compreendido muito bem o que foi visto sobre OO. Será a base para a programação.Recomenda-se fortemente o estudo extra-classe, em livros, na Internet ou com auxílio de colegas.Procure especificar e definir jogos ou sistemas de seu interesse. Mantenha as definições atualizadas e depois de vermos como é feita a programação em C++, programe os sistemas.Ser um bom programador requer pratica constantePróximo passo: Programação OO em Java Codificar o que foi definido num linguagem de programação
(Java). Tornar o sistema real!
segunda-feira, 5 de março de 12