Post on 10-Jan-2019
1
OrientaOrientaçção a Objetosão a Objetos
Leandro Tonietto
Algoritmos e Estruturas de Dados em C++
Desenvolvimento Jogos e Entretenimento Digital
ltonietto@unisinos.br
http://www.inf.unisinos.br/~ltonietto
Mar-2008
18-abr-08 Leandro Tonietto 2
SumSumááriorio
Introdução: conceitosSistemas Orientados a ObjetosClasses e objetosHerança simplesHerança múltiplaComo definir um sistema em classesPróximos passos
18-abr-08 Leandro Tonietto 3
IntroduIntroduççãoã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 á comunicação entre estes objetos de modo que formem um sistema.
O objetivo é analisar um problema proposto eestabelecer uma estrutura que consiga descrever a situação proposta: montar um sistema.
18-abr-08 Leandro Tonietto 4
IntroduIntroduççãoão
Conceitos:Objetos conté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. Eles devem conter toda a informação necessária para executar a função a que se propõem. 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.
18-abr-08 Leandro Tonietto 5
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Quais são os objetos (ou entidades) que podemos identificar neste sistema?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?
18-abr-08 Leandro Tonietto 6
Sistema Orientados a ObjetosSistema Orientados a Objetos
2
18-abr-08 Leandro Tonietto 7
OrientaOrientaçção a Objetosão a Objetos
Classes:Em Orientação a Objetos, classes são uma entidade de um mundo realUma descrição de um objeto do mundo real.Descrevem atributos ou propriedades de uma entidade do mundo realDescrevem 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: reusabilidade
18-abr-08 Leandro Tonietto 8
OrientaOrientaçção a Objetosão a Objetos
Classes:
Pessoa
nome
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.
18-abr-08 Leandro Tonietto 9
OrientaOrientaçção a Objetosã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 dadosClasse 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.
18-abr-08 Leandro Tonietto 10
OrientaOrientaçção a Objetosã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.
18-abr-08 Leandro Tonietto 11
OrientaOrientaçção a Objetosão a Objetos
Exemplo: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:
1,48%1%Beltrano
15,59%15%Cicrano
13,62%13%Fulano
Fadiga depois de
andar
Fadiga antes de
andarObjeto
Perceba que os valores são alterados diferentemente para cada objeto, pois cada um possui seu espaço de memória
18-abr-08 Leandro Tonietto 12
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Quais dos itens abaixo são classes:Caneta
PessoaFulano de TalPersonagemArquivoMagoGuerreiro
É uma ocorrência de uma entidade
3
18-abr-08 Leandro Tonietto 13
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Como surgem os sistemas?Através de um problema identificado e descrito
Como descrever um problema identificado?Identificar o motivo ou objetivoDescrever 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 objetosDescrever quais são as ações dos objetos e quais são as interações com outros objetos.
18-abr-08 Leandro Tonietto 14
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Vantagens:Produtividade
Qualidade Reusabilidade; 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.
18-abr-08 Leandro Tonietto 15
Intermediário(desejável)
Avançado(com sorte!)
Básico(mínimo)
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Questões-chave no processo de aprendizado OO e da própria programação OO:
Como identificar classes, atributos, métodos e objetos dada a descrição de um problema?Como determinar o relacionamento (ou comunicação) e cardinalidade entre os objetos identificados para o problema?Como separar as responsabilidades entre as classes
18-abr-08 Leandro Tonietto 16
Sistemas Orientados a ObjetosSistemas 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
18-abr-08 Leandro Tonietto 17
Sistemas Orientados a ObjetosSistemas 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.
18-abr-08 Leandro Tonietto 18
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Exemplo:Desenvolva um programa que lê as notasdos graus parciais de uma disciplina a partir de um cadastro de alunos e calcula e imprime as notas finais.Substantivos: PROGRAMA (Main), DISCIPLINA e ALUNOSVerbos: LER, CALCULAR, IMPRIMIRDados: GRAUS PARCIAIS e NOTAS FINAIS(alguns dados não precisam ser guardados, apenas mostrados ou calculados)
4
18-abr-08 Leandro Tonietto 19
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Exemplo:Aluno
nome
grauA
grauB
grauC
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.
18-abr-08 Leandro Tonietto 20
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Exemplo:
Disciplina
nome
Aluno 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 possue uma lista de aluno 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 listas as notas dos alunos de uma disciplina.
� Mas pode ser necessário, inclusive, manter um relacionamento nos dois lados...
18-abr-08 Leandro Tonietto 21
Sistemas Orientados a ObjetosSistemas 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.
18-abr-08 Leandro Tonietto 22
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Exemplo:
Programa
disciplina
main()
lerDadosDiscplina()
calculaNotaFinal(aluno)
imprime (disciplina)
Disciplina
nome
Aluno alunos[]
definirNome(n)
adicionarAluno(aluno)
removerAluno(aluno)
retornarNome()
retornarAluno(n)
Aluno
nome
grauA
grauB
grauC
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.
18-abr-08 Leandro Tonietto 23
Sistemas Orientados a ObjetosSistemas 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 sistemaComece a definir as classes “das pontas” e termine com objeto principal do sistema (main).
18-abr-08 Leandro Tonietto 24
ExercExercííciocio
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
5
18-abr-08 Leandro Tonietto 25
Conceitos de OrientaConceitos de Orientaçção a Objetosão a Objetos
ConstrutoresRegra: 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çãonecessária. Conforme o número e o tipo de parâmetro, o compilador chama o construtor apropriado.
18-abr-08 Leandro Tonietto 26
Conceitos de OrientaConceitos de Orientaçção a Objetosão a Objetos
Construtores
Disciplina
nome
Aluno 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.
18-abr-08 Leandro Tonietto 27
Conceitos de OrientaConceitos de Orientaçção a Objetosão a Objetos
ConstrutoresImagine 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 Jogadornão tivesse um construtor e fosse realizada a chamada ao incrementaBonus()?
18-abr-08 Leandro Tonietto 28
Conceitos de OrientaConceitos de Orientaçção a Objetosão a Objetos
DestrutoresAssim 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.
18-abr-08 Leandro Tonietto 29
OrientaOrientaçção a Objetosão a Objetos
EncapsulamentoSignifica 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.
OcultamentoOcultamento é 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.
18-abr-08 Leandro Tonietto 30
Sistemas Orientados a ObjetosSistemas 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.
6
18-abr-08 Leandro Tonietto 31
Sistemas Orientados a ObjetosSistemas 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).
18-abr-08 Leandro Tonietto 32
Sistemas Orientados a ObjetosSistemas 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!
18-abr-08 Leandro Tonietto 33
OrientaOrientaçção a Objetosã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?
18-abr-08 Leandro Tonietto 34
OrientaOrientaçção a Objetosã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.
18-abr-08 Leandro Tonietto 35
Softwares para Modelagem UMLSoftwares 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/
18-abr-08 Leandro Tonietto 36
OrientaOrientaçção a Objetosão a Objetos
HerançaEspecializaçã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.
7
18-abr-08 Leandro Tonietto 37
OrientaOrientaçção a Objetosão a Objetos
HerançaPessoa
# 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.
18-abr-08 Leandro Tonietto 38
Alunomatricula
OrientaOrientaçção a Objetosã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
18-abr-08 Leandro Tonietto 39
OrientaOrientaçção a Objetosão a Objetos
Herança múltiplaEspecializaçã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.
18-abr-08 Leandro Tonietto 40
OrientaOrientaçção a Objetosão a Objetos
Herança
Guerreiro
# armas
Mago
# magia
MagoGuerreiro
- outras propriedades
Magos podem usar magia, guerreiros podem lutar com armas e o MagoGuerreiropode fazer ambas as coisas, além das suas próprias habilidades.
18-abr-08 Leandro Tonietto 41
OrientaOrientaçção a Objetosão a Objetos
HerançaExercí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.
18-abr-08 Leandro Tonietto 42
OrientaOrientaçção a Objetosão a Objetos
HerançaExercício 2. Considere as seguintes sentenças e forme a hierarquia correta (definição de classes):
O sistema a ser desenvolvido é um jogo FPSO 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.
8
18-abr-08 Leandro Tonietto 43
OrientaOrientaçção a Objetosão a Objetos
RelacionamentosNum 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çãocom um objeto da mesma classe).
18-abr-08 Leandro Tonietto 44
OrientaOrientaçção a Objetosão a Objetos
RelacionamentosAlém da “ligação” temos a cardinalidade do relacionamento.Cardinalidade é número de elementos relacionados a um objeto:
1 — 1: um-para-um1 — <n>: um-para-algum número específico1 — ∗: um-para-muitos (sem número definido)
1 — (0..*): zero ou muitos1 — (1..*): um ou muitos1— (<n>..*): um número específico ou muitos
18-abr-08 Leandro Tonietto 45
OrientaOrientaçção a Objetosão a Objetos
RelacionamentosExemplo: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
18-abr-08 Leandro Tonietto 46
OrientaOrientaçção a Objetosã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
18-abr-08 Leandro Tonietto 47
OrientaOrientaçção a Objetosã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.
18-abr-08 Leandro Tonietto 48
OrientaOrientaçção a Objetosão a Objetos
Exercícios com relacionamentos:
9
18-abr-08 Leandro Tonietto 49
OrientaOrientaçção a Objetosão a Objetos
RelacionamentosGeralmente, 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”
18-abr-08 Leandro Tonietto 50
OrientaOrientaçção a Objetosão a Objetos
Relacionamentos
Aluno
Pessoa PessoaPessoa tem outra pessoa de contato
Herança Auto-relacionamento
Aluno estende Pessoa
18-abr-08 Leandro Tonietto 51
Exemplo EspecificaExemplo Especificaçção Sistema ã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.
18-abr-08 Leandro Tonietto 52
Exemplo EspecificaExemplo Especificaçção Sistema ã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?
18-abr-08 Leandro Tonietto 53
Exemplo EspecificaExemplo Especificaçção Sistema ão Sistema
Relacionamentos:
Jogo Motor ListaSokoMapa
SokoMapa
Movimento
Render Renderizador desenha um mapa na tela
Interage com motor
Motor s
olicita
rede
senh
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
18-abr-08 Leandro Tonietto 54
Exemplo EspecificaExemplo Especificaçção Sistema ã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
10
18-abr-08 Leandro Tonietto 55
Exemplo EspecificaExemplo Especificaçção Sistema ã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 18-abr-08 Leandro Tonietto 56
Exemplo EspecificaExemplo Especificaçção Sistema ão Sistema
Relacionamentos:
Jogo Motor ListaSokoMapa
SokoMapa
Movimento
RenderRenderizador 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.
MenuRenderizadordesenha menus
Jogo monta
menu PilhaPilha de movimentos
18-abr-08 Leandro Tonietto 57
OrientaOrientaçção a Objetosã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.
18-abr-08 Leandro Tonietto 58
OrientaOrientaçção a Objetosã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 sistemaOutra 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.
18-abr-08 Leandro Tonietto 59
OrientaOrientaçção a Objetosã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 constanteSer um bom programador requer pratica constante
Próximo passo: Programação OO em C++Codificar o que foi definido num linguagem de programação (C++).Tornar o sistema real!