Orientação à Objetos - Unisinos

professor.unisinos.br
  • No tags were found...

Orientação à Objetos - Unisinos

Quais são os objetos (ou entidades) que podemos identificar nestesistema?Quais são as suas propriedades?Somente com estas propriedades é possível fazer com que os objetosinterajam e consigam fazer o sistema funcionar?Quais são as ações que os objetos podem realizar?Uma entidade tem conhecimento sobre comofunciona a outra?29-set-11 5


29-set-11 6


• Classes:• Em Orientação a Objetos, classes são uma entidadede um mundo real• Uma descrição de um objeto do mundo real.• Descrevem atributos ou propriedades de umaentidade do mundo real• Descrevem métodos que operam sobre os atributosdefinidos.• Quanto melhor a definição (mais completa), maiorserá a vida útil da classe e melhor será a definição dosistema em geral.• A palavra-chave em POO: reusabilidade29-set-11 7


Objetos:• São ocorrências em memória (ou instâncias) de classes.• 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 realque tenham o mesmo comportamento. Objetos possuem valores para estes atributos e realizam ações somentesobre os seus dados Classe Pessoa descreve o comportamento de uma pessoa do mundoreal, com atributos comuns as pessoas, como: nome, idade, endereço,cpf, ... Cada pessoa (Marta, Marcelo,Victor ...) contém seuspróprios valores para os atributos de Pessoa.29-set-11 9


Objetos:• Exemplo, ocorrências ou instâncias de Pessoa (daclasse Pessoa): Fulano (32 anos, Rua XZ, 13% de fadiga) Ciclano (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.29-set-11 10


• 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 dadistâ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 umdos objetos criados anteriormente, teríamos a seguinte situação:ObjetoFadiga antes deandarFadiga depois deandarFulano 13% 13,62%Cicrano 15% 15,59%Perceba que osvalores são alteradosdiferentemente paracada objeto, pois cadaum possui seu espaçode memóriaBeltrano 1% 1,48%29-set-11 11


• Quais dos itens abaixo são classes:• Caneta• Pessoa• Fulano de Tal• Personagem• Mago• GuerreiroÉ uma ocorrência de uma entidade29-set-11 12


• 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ãoas 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ãoas interações com outros objetos.29-set-11 13


• Vantagens:• Produtividade• Qualidade• Reusabilidade; se um objeto foi bem descrito, deacordo com a realidade, ele pode ser reaproveitadoem outros sistemas.• Se o código tem qualidade, se a produtividade é boae o código é reutilizável, então representa economia.29-set-11 14


• Questões-chave no processo de aprendizadoOO e da própria programação OO:• Como identificar classes, atributos,métodos e objetos dada a descriçãode um problema?• Como determinar o relacionamento(ou comunicação) e cardinalidadeentre os objetos identificados parao problema?• Como separar as responsabilidadesentre as classes: de Serviço e de DadosBásico(mínimo)Intermediário(desejável)Avançado(com sorte!)29-set-11 15


• Exemplo:• Considere os conceitos vistos anteriormente e usetente identificar quais são os objetos e seus atributose métodos:• Desenvolva um programa que lê as notas dos grausparciais de uma disciplina a partir de um cadastro dealunos e calcula e imprime as notas finais.• Dica: Identificar os objetos da ―história‖, identificarquais são seus atributos (campos) e identificar o quêeles podem fazer29-set-11 16


• Exemplo:• Objetos: são substantivos• Atributos: são dados identificados para um objeto. Oque eles devem manter na memória para execuçãodo programa. Podem ser tanto dados primitivosquanto outros objetos.• Métodos: são identificados pelos verbos, portanto,são ações que os objetos podem executar.29-set-11 17


• Exemplo:• Desenvolva um programa que lê as notas dos grausparciais de uma disciplina a partir de um cadastro dealunos e calcula e imprime as notas finais.• Substantivos: PROGRAMA (Main), DISCIPLINA eALUNOS• Verbos: LER, CALCULAR, IMPRIMIR• Dados: GRAUS PARCIAIS e NOTAS FINAIS (algunsdados não precisam ser guardados, apenasmostrados ou calculados)29-set-11 18


• Exemplo:AlunonomegrauAgrauBgrauCdefinirNome(n)definirGrauA(n)definirGrauB(n)definirGrauC(n)retornarNome()retornarGrauA()retornarGrauB()retornarGrauC()Dados necessáriospara manter umobjeto do tipoaluno na memóriaMétodosnecessários paracomunicação comoutros objetosO que é básico:-Identificar a classe (Aluno)-Identificar seus atributos emétodos (graus A, B e C)O que é avançado:-identificar possíveis dados ecomportamentos para resolver osistema (atributo nome emétodos retornar e definir valordos atributos).-Observe que para cada atributohá um método de retorno edefinição, portanto, o ainteração com outrosobjetos não é direta.29-set-11 19


nome• Exemplo:DisciplinaAluno alunos[]definirNome(n)adicionarAluno(aluno)removerAluno(aluno)retornarNome()retornarAluno(n)Dados necessáriospara manter umobjeto do tipodisciplina namemóriaMétodosnecessários paracomunicação comoutros objetos Disciplina não contémapenas tipo de dado, contémtambém, objetos: alunos. Disciplina possue uma listade aluno e, portanto, devepermitir adicionar, remover eretornar alunos desta lista. Pergunta: como saber se é adisciplina que possui um alunoou se é o aluno que possuidisciplinas? Resposta: depende da situação.Neste caso, desejamos listas asnotas dos alunos de umadisciplina. Mas pode ser necessário,inclusive, manter umrelacionamento nosdois lados...29-set-11 20


• Exemplo:Programadisciplinamain()lerDadosDiscplina()calculaNotaFinal(aluno)imprime (disciplina)Dados necessáriospara o objetoProgramafuncionarMétodosnecessários pararealizar as açõesPrograma (ou objeto) principal: Por onde inicia a execução dosistema (método main) É o principal conector deobjetos: por exemplo, nométodolerDadosDisciplina, são lidos os dados dadisciplina e de cada aluno queé inserido no objeto diciplina. Programa fará uso dos métodosde retorno e definição dosobjetos das classes Aluno eDisciplina Programa realiza a açõespropostos no problema Repare que esta classe nãopossuem método deretorno, nem dedefinição.29-set-11 21


• Exemplo:disciplinamain()ProgramalerDadosDiscplina()calculaNotaFinal(aluno)imprime (disciplina)nomeDisciplinaAluno alunos[]definirNome(n)adicionarAluno(aluno)removerAluno(aluno)retornarNome()retornarAluno(n)Isto estava escrito no na história do programa, orestante é necessário para o bom funcionamentodo sistema.nomegrauAgrauBgrauCAlunodefinirNome(n)definirGrauA(n)definirGrauB(n)definirGrauC(n)retornarNome()retornarGrauA()retornarGrauB()retornarGrauC()29-set-11 22


• Dicas:• Sempre escrever bem, ou o mais detalhado possível,a descrição de um problema. Isto facilita aconcepção das classes.• Por outro lado, seja objetivo, descreva apenasaquilo é importante para o bom funcionamento dosistema, não desperdice tempo de codificação, nemrecurso 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 terminecom objeto principal do sistema (main).29-set-11 23


• Modelar um sistema de folha de pagamento de umaempresa. Neste sistema, os funcionários possuem umsalário-base, um desconto relativo a contribuição aoINSS, desconto de IRRF e descontos eventuais (comoadiantamento de salário, empréstimo consignado e etc.).• O sistema deve ser capaz de ler os dados dosfuncionários, inclusive indicando qual é a sua lotação, eimprimir um relatório da ―folha‖ de pagamento.• Regras de cálculo (apenas para programação, não aparece namodelagem):• 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,00desconta 20%. E, acima de R$ 2.700,00, desconta 27,5%.• Fórmula: salário = SB – INSS – (SB*IRRF) - descontos29-set-11 24


• Construtores• Regra: todo o objeto instanciado deve inicializado antes de serexecutado.• Construtor é o método da classe que é chamado automaticamenteno 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 inicializaçãonecessária. Conforme o número e o tipo de parâmetro, ocompilador chama o construtor apropriado.29-set-11 25


• ConstrutoresDisciplinanomeAluno alunos[]Disciplina(nome, numAlunos)Disciplina(nome)Disciplina()definirNome(n)adicionarAluno(aluno)removerAluno(aluno)retornarNome()retornarAluno(n)Construtor que é chamadoquando o objeto que estáinstanciando uma disciplina,quiser inicializar umadisciplina com nome enúmero de alunos.Construtor alternativo,chamado quando o objetoque está instanciando umadisciplina, deseja inicializara disciplina apenas com onome.Construtor padrão. Nãorecebe parâmetros. Forneceuma inicialização padrãopara todos os dados.29-set-11 26


• Construtores• Imagine uma classe Jogador que contenha umvalor que deve ser acumulado a cada tempo, ouquando solicitado pelo sistema. Digamos o campobônus.• Podemos imaginar ainda, que o métodoincrementaBonus() incrementa o bônus atualem 100 pontos.• O que aconteceria caso a classe Jogador não tivesseum construtor e fosse realizada a chamada aoincrementaBonus()?29-set-11 27


• Destrutores• Assim como é necessário inicializar os atributos deuma classe é necessário destruí-los (em algunscasos).Em Java os objetos são destruídos (memória é• Um liberada), destrutor automaticamente é invocado pelo automaticamente Garbage Collector, sempreque quando um objeto a área de é liberado memória alocada memória. para eles não émais referenciada.• A utilização de destrutores é para o caso dadesalocação de atributos que alocaram memóriadinamicamente.29-set-11 28


• Encapsulamento• Significa que um objeto deve conter toda a informação que delese precisa.• Portanto, um objeto deve conter todo o comportamentonecessário para sua execução dentro de si e não separado porclasses não relacionadas.• Exemplo: classe Pessoa contém todos os dados de pessoa, maso programa mantém o número CPF fora classe, sobresponsabilidade de outra.• Ocultamento• Ocultamento é uma das tarefas do encapsulamento.• Um objeto deve ―esconder‖ (proteger) seus dados de acessoexterno direto. É a idéia de evitar que os dados sejamcorrompidos.• A funcionalidade do objeto esta ocultada na definição.29-set-11 29


• 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 algumainteração (troca de mensagens), para troca deinformações com outros objetos parafuncionamento correto do sistema.29-set-11 30


• 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 aosatributos e métodos privados (acesso privado à classe). Écomo fazemos o ―ocultamento‖ de dados ecomportamentos. Público (public): qualquer classe ou objeto tem acesso aoatributo ou método (acesso livre). Protegido (protected): somente a própria classe e as classesderivadas tem acesso direto a atributos e métodos (acessorestrito).29-set-11 31


- nome# energia- poder- nívelMago+Mago(nome, energia, poder,nível)+Mago(nome, nível)+andar(distância)+usarMagia(Mundo)+aumentarPoder(quantidade)+evoluir()-calculoEvolucao()Digamos que um jogo tenha umainstância de mago.Os atributos da classe Mago estãoprivados 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ãosempre públicos.É possível ocultar, além dosatributos, comportamentos.No exemplo ao lado o quê estáacessível externamente?29-set-11 32


• 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 depeç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 segundoas regras do jogo de xadrez.2. Descreva a descrição do problema e a definição de classes paraum jogo de simulação de corrida de automóveis.• A definição das classes deve conter: atributos comvisibilidade, métodos com visibilidade, construtores edeve contemplar toda a descrição do problema(funcionalidades).29-set-11 33


• Alguns softwares de modelagem UML:• StarUML:• Jude:http://staruml.sourceforge.net/en/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/29-set-11 34


• Herança• Especialização de objetos.• Classe-base (ou classe-mãe, ou classe-pai) possuempropriedades 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 aspropriedades da classe-base. Ela tem acesso a todos osmembros não privados da classe-base.• Exemplo: Sistema de cadastro de turmas de um curso. A turma tem umprofessor e tem diversos alunos. A classe professor possui osatributos: nome, endereço, titulação e especializações. Já a classealuno 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.29-set-11 35


• HerançaA seta apontando para aclasse base indica queuma classe (derivada)estende a definição deoutra (base)Pessoa# nome# endereço+Pessoa(nome, endereço)+defineNome(nome)+defineEndereço(endereço)+obtemNome()+obtemEndereço()Uma boa prática é definiros atributos da classebasecomo protegidos,desta forma, eles ficamprivados para outrasclasses que não sejamderivadas de pessoa- matrículaAluno+Aluno(nome, endereço, matrícula)+defineMatricula(matricula)Repare que as classes derivadastambém devem solicitar as informaçõesnecessárias para contemplar osconstrutores da classe-base.- titulação- qualificaçõesProfessor+Professor(nome, endereço,titulação, qualificações)+defineTitulação(titulação)+adicionaQualificação(qualificação)+removeQualificação(posição)+retornaQualificação(posiçao)29-set-11 36


• As classes Aluno e Professor compartilhamalguns atributos: os de Pessoa:AlunomatriculaPessoanomeProfessortitulação• Quando da instanciação de Aluno ou Professoros dados de Pessoa também são alocados paracada instânciaPessoanomeAlunomatriculaPessoanomeProfessortitulação29-set-11 37


• Herança múltipla• Especialização mais de um objeto.• Uma classe derivada herda de mais de uma classebase.• Então ela possui as propriedades de ambas, além dassuas.• Exemplo: Num jogo, um existem os magos e os guerreiros. Compropriedades diferentes. Entretanto, um druida, é ummago guerreiro, portanto, esta classe herdapropriedades tanto de mago quanto de guerreiro.29-set-11 38


• Herança# magiaMagoGuerreiro# armasMagoGuerreiro- outras propriedadesMagos podem usar magia,guerreiros podem lutar comarmas e o MagoGuerreiropode fazer ambas as coisas,além das suas própriashabilidades.29-set-11 39


• Herança• Exercício. Considere as seguintes sentenças e forme ahierarquia correta (definição de classes): Todas as peças do tabuleiro de xadrez tem um posiçãoatual e um nome (descrição) Peão, bispo, torre, cavalo, rainha e rei são peças dexadrez, e cada um tem uma forma própria de semovimentar. O tabuleiro possui 2 times de peças. Cada um com 8peões, 2 cavalos, 2 bispos, 2 torres, uma rainha e um rei.29-set-11 40


• Herança• Exercício 2. Considere as seguintes sentenças e forme ahierarquia correta (definição de classes): O sistema a ser desenvolvido é um jogo FPS O jogador é um personagem que pode ter várias armas. Ele nomínimo já será criado com a arma ―punhos‖. As armas disponíveis no jogo são: punhos, metralhadora e bolasde fogo. Os inimigos (ou ―monstros‖) possuem apenas uma arma cadaum. O monstro A só ataca com a mão, o monstro B só ataca commetralhadora e o monstro C só ataca com bolas de fogo. Cada monstro possui um movimento em especial.29-set-11 41


• Relacionamentos• Num sistema OO cada objeto realiza o seu papel,mas precisam estar relacionados (ou trocareminformações) para o sistema funcionar como umtodo.• Na engenharia de software existem diversosrelacionamentos 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).29-set-11 42


• Relacionamentos• Além da ―ligação‖ temos a cardinalidade dorelacionamento.• Cardinalidade é número de elementos relacionados aum objeto: 1 — 1: um-para-um 1 — : 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— (..*): um número específico ou muitos29-set-11 43


• Relacionamentos• Exemplo:1) ...O tabuleiro possui 32 peças de xadrez...TabuleiroTabuleiro contém peças32Peça2) ... O tabuleiro possui 2 times (brancas e pretas) de 16peças cada um...TabuleiroTabuleiro contém peças pretas16Peça16Tabuleiro contém peças brancas29-set-11 44


• Relacionamentos1 2Tabuleiro- Peça peças[32]+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()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()29-set-11 45


• Exercícios com relacionamentos:• Voltando ao jogo de corrida... O jogo deve possuir 5 oponentes (competidores) É importante considerar o desgaste dos pneus em tempo deprogramação; neste caso, cada pneu possui informações de tipo equantidade de borracha restante. Além de permitir calcular o seudesgaste. Carro deve, além de controlar os pneus, controlar o nível docombustí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 asclasses (quem está associado com quem e relações de herança).• Após feito o diagrama de classes dos relacionamentos, modeleos atributos e comportamentos de cada classe.29-set-11 46


• Exercícios com relacionamentos:29-set-11 47


• Relacionamentos• Geralmente, para visão dos relacionamentos, sómostramos as classes e os respectivosrelacionamentos com a respectiva cardinalidade(sem atributos e sem métodos)ProgramaPrograma possui disciplinas1..DisciplinaDois tipos diferentes de ilustrar relacionamento: Com ligação simples e expressando acardinalidade Com ligação com círculo, indicando acardinalidade quando diferentes de“muitos”AlunoDisciplinaspossui alunos29-set-11 48


• RelacionamentosHerançaAuto-relacionamentoPessoaAlunoAluno estendePessoaPessoaPessoa tem outrapessoa de contato29-set-11 49


• Problema/Requisitos:• Desenvolver um jogo no estilo ―push-puzzle‖(SokoBan), onde o objetivo é encaixar (empurrar) aspedras nos buracos.• Como todo jogo, este deve ter uma classe quecontenha as regras e validações.• Deve permitir, com o mesmo jogo, usar interfacesdiferentes.29-set-11 50


Dada a descrição, quais são asclasses do jogo?• O jogo começa com motor dando carga da lista de mapas com osdados de objetos (pedras, buracos, caminhos e parede) e posiçãoinicial do cursor na matriz. Estes objetos estão representados numamatriz bidimensional. A cada movimento feito pelo jogador, omotor do jogo verifica se é possível fazer o movimento e, em casopositivo, efetiva o mesmo. Um movimento possível é odeslocamento do cursor pelos caminhos do mapa que não estejambloqueados (por parede ou por duas peças contínuas). O jogotermina quando todas pedras estão nos buracos (o jogo devealertar isso). Todos os movimentos feitos podem ser desfeitos erefeitos e, para isso, o sistema mantém duas pilhas de movimentos(undo e redo).• Como um movimento do cursor pode ocasionar o movimento deuma peça, se diz que este movimento gera um outro movimentoaninhado, para que possam ser desfeitos os dois ao mesmo tempo.Portanto, é necessário guardar uma referência para o movimentoda peça no movimento do cursor.• Para renderizar os mapas e as demais informações deinterface, serão criadas classes específicas de rendering.• Descrição breve do sistema:29-set-11 51


• Relacionamentos:Interage com motorMotor contém mapasJogo Motor ListaSokoMapaJogo solicitaserviços derenderizaçãoRenderMotor validae executamovimentoMovimentoMantém 2 pilhas:undo e redoPilha demovimentosRenderizador desenha um mapa na telaPilhaListacontémdiversosmapasSokoMapaO jogo solicita ao motor diversos serviços, como: realizar uma jogada,desfazer um movimento, refazer um movimento e trocar de mapa.29-set-11 52


• Definição de classes:Jogo-Motor motor-Render render-Menu[] opcoesmain()+novoJogo()+montaOpcoes()+executar()+mostrarHelp()+lerDados()Motor-ListaSokoMapa mapas-Render render-Stack undo-Stack redoMotor(Render)+jogar(Movimento)-verificaMov(Movimento)+undo()+redo()+irParaProximo()+irParaAnterior()+setRenderizador(Render)Render+desenhaMenu(Menu[] ops)+desenhaMapa(SokoMapa)+escreveMsg(x,y,mensagem)+limpaJanela(x,y,largura,altura)Uma nova classe foi identificada,também deve ser definidaMenu29-set-11 53+x+y+texto+teclaAtivação+Menu(x,y,texto,tecla)


• Definição de classes:Mantém uma lista de SokoMapaMovimento-Vetor origem-Vetor destino-Movimento aninhadoMovimento(origem, destino)+setOrigem(Vetor)+setDestino(Vetor)+getOrigem()+getDestino()+setAninhado(Movimento)+getAninhado(Movimento)SokoMapa-elementos[]-Vetor cursor-nomeMapaSokoMapa(nome)+setNome(nome)+getNome()+setPosicaoCursor(vetor)+defineElemento(x,y,tipo)+getElemento(x,y)+lerDados(arquivo)ListaSokoMapa-List mapas-SokoMapa atualListaSokoMapa()+adicionaMapa(SokoMapa)+removeMapa(SokoMapa)+removeMapa(indice)+retornarMapa(indice)+irParaPróximo()+irParaAnterior()+retornaMapaAtual()+getPosicaoCursor()Vetor+getMatriz()+x+y29-set-11 54


• Relacionamentos:Como detectamos mais classes nadefinição das classes, devemosatualizar os relacionamentos.Interage com motorMotor contém mapasJogo Motor ListaSokoMapaJogomontamenuJogo solicitaserviços derenderizaçãoMotor solicitaredesenhoMotor validae executamovimentoMovimentoMantém 2 pilhas:undo e redoPilha demovimentosPilhaListacontémdiversosmapasMenu Renderizadordesenha menusRenderRenderizador desenha um mapaSokoMapa29-set-11 55


• Novidades:• Percebe-se que algumas classes são dearmazenamento de dados (SokoMapa,ListaSokoMapa, Menu, Pilha e Movimento)• Outras só realizam serviços (Render)• Ainda podemos ter as de serviço que armazenamalgum dado (Jogo e Motor)• As classes de serviço são interessantes porquefornecem serviços que podem ser utilizados emtodos os momentos do sistema.• Como elas não mantêm dados não precisam serreferências.• E são facilmente portadas para outros sistemas.29-set-11 56


• Fim:• Agora o sistema pode ser estimado, planejado e construído(programado)• Com base nas definições acima, fica mais fácil compreender econstruir o sistema• Outra vantagem é que estas definições de classes sãoindependentes de linguagem, portanto, se você mantiveratualizados os diagramas, poderá construir o mesmo sistemaem qualquer linguagem de programação que suporte OO.• Sempre comece com o relacionamento e depois faça odetalhamento de cada classe.• No momento da programação, muitas alterações podemocorrer na definição das classes, manter os diagramas (oudefinições) facilitam a manutenção do sistema.29-set-11 57


• É importante para o restante da disciplina que vocêtenha compreendido muito bem o que foi visto sobreOO. Será a base para a programação.• Recomenda-se fortemente o estudo extra-classe, emlivros, na Internet ou com auxílio de colegas.• Procure especificar e definir jogos ou sistemas de seuinteresse. Mantenha as definições atualizadas e depoisde vermos como é feita a programação em C++,programe os sistemas.• Ser um bom programador requer pratica constante• Próximo passo: Programação OO em Java• Codificar o que foi definido num linguagem de programação(Java).• Tornar o sistema real!29-set-11 58

More magazines by this user
Similar magazines