orientacao a objetos -...

10
1 Orienta Orientaç ão a Objetos ão a Objetos Leandro Tonietto Algoritmos e Estruturas de Dados em C++ Desenvolvimento Jogos e Entretenimento Digital [email protected] http://www.inf.unisinos.br/~ltonietto Mar-2008 18-abr-08 Leandro Tonietto 2 Sum Sumário rio Introdução: conceitos Sistemas Orientados a Objetos Classes e objetos Herança simples Herança múltipla Como definir um sistema em classes Próximos passos 18-abr-08 Leandro Tonietto 3 Introdu Introduçã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 e estabelecer uma estrutura que consiga descrever a situação proposta: montar um sistema. 18-abr-08 Leandro Tonietto 4 Introdu Introduçã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 Objetos Sistemas 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 Objetos Sistema Orientados a Objetos

Upload: phamliem

Post on 10-Jan-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

1

OrientaOrientaçção a Objetosão a Objetos

Leandro Tonietto

Algoritmos e Estruturas de Dados em C++

Desenvolvimento Jogos e Entretenimento Digital

[email protected]

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!