orientação à objetos -...

76
05-Mar-12 Leandro Tonietto Orientação a Objetos Leandro Tonietto Programação I - Cursos de Informática da Unisinos [email protected] http://professor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf 03-12 segunda-feira, 5 de março de 12

Upload: others

Post on 13-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

05-Mar-12 Leandro Tonietto

Orientação a Objetos

Leandro ToniettoProgramação I - Cursos de Informática da Unisinos

[email protected]://professor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf

03-12

segunda-feira, 5 de março de 12

Page 2: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 3: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 4: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 5: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 6: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

05-Mar-12 Leandro Tonietto 6

Sistema Orientados a Objetos

segunda-feira, 5 de março de 12

Page 7: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 8: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 9: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 10: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 11: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 12: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 13: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 14: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 15: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 16: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 17: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 18: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 19: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 20: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 21: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 22: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 23: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 24: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

05-Mar-12 Leandro Tonietto 18

Sistemas Orientados a Objetos

segunda-feira, 5 de março de 12

Page 25: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

05-Mar-12 Leandro Tonietto 18

Sistemas Orientados a Objetos

Exemplo:

segunda-feira, 5 de março de 12

Page 26: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 27: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 28: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 29: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 30: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 31: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 32: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 33: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 34: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 35: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 36: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 37: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 38: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 39: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 40: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 41: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 42: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 43: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 44: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 45: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 46: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 47: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 48: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 49: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 50: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 51: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 52: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 53: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 54: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 55: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 56: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 57: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 58: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 59: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 60: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 61: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 62: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

05-Mar-12 Leandro Tonietto 51

Orientação a Objetos

Exercícios com relacionamentos:

segunda-feira, 5 de março de 12

Page 63: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 64: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 65: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 66: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 67: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 68: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 69: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 70: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 71: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 72: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 73: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 74: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 75: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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

Page 76: Orientação à Objetos - Unisinosprofessor.unisinos.br/ltonietto/inf/pg1/Orientacao_a_Objetos.pdf · Herança múltipla Como definir um sistema em classes Próximos passos segunda-feira,

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