21
POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Embed Size (px)

Citation preview

Page 1: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

POOPonto de Partida: PP

Créditos: Prof. Marcelo Maia

Universidade Federal de UberlândiaFaculdade de Computação

Bacharelado em Ciência da Computação

Page 2: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

“Primeirão”

• Seja um joguinho de dados

Chegada

Page 3: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Primeirão em ação

Page 4: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Mãos à obra em C

Page 5: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Funções Auxiliares

Variáveis globais

Bibliotecas a serem utilizadas

Definição de um jogador

Solução em CEstrutura

#include <stdlib.h>#include <stdio.h>

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

Page 6: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Grafo (árvore) de chamadas

main

iniciarcriarJogadores

sorteiaIniciante ninguemVenceu jogarDado mostrarSituacaoandarJogador

atingiuPontos

Page 7: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CPrograma Principal

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

int main(int argc, char *argv[])

{

printf("Entre com o numero limite de pontos: ");

scanf("%d",&nroLimitePontos);

printf("Entre com o numero de jogadores: ");

scanf("%d",&nroJogadores);

criarJogadores();

iniciar();

return EXIT_SUCCESS;

}

Page 8: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CCriar jogadores!

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

void criarJogadores () {

jogadores = (Jogador**) malloc(nroJogadores*sizeof(Jogador*));

int i;

for (i = 0; i < nroJogadores; i++) {

jogadores[i] = (Jogador*) malloc(sizeof(Jogador));

printf("Entre com o nome do jogador %d:", (i+1));

scanf("%s", jogadores[i]->nome);

jogadores[i]->pontos = 0;

}

}

Page 9: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CIniciar !!!!

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

void iniciar () {

int proximo = sorteiaIniciante();

while (ninguemVenceu()) {

int pontos = jogarDado();

andarJogador(jogadores[proximo], pontos);

mostraSituacao(proximo, pontos);

if (ninguemVenceu())

proximo = (proximo+1) % nroJogadores;

//proximo == (nroJogadores - 1) ? 0 : proximo + 1;

}

printf("O jogador %s venceu!!!!\n", jogadores[proximo]->nome);

}

Page 10: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CNinguém Venceu?

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

int ninguemVenceu () {

int i = 0;

while (i < nroJogadores) {

if (atingiuPontos(jogadores[i], nroLimitePontos))

return 0;

i++;

}

return 1;

}

Page 11: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CJogar Dado

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

int jogarDado() {

return (rand()%6)+1;

}

Page 12: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CMostra Situação!

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

void mostraSituacao (int j, int p) {

printf("O jogador %s andou %d pontos! \n A Situacao ficou assim: \n",

jogadores[j]->nome, p);

int i;

for (i = 0; i < nroJogadores; i++)

printf("O jogador %s tem %d pontos!\n",

jogadores[i]->nome, jogadores[i]->pontos);

printf("PAUSA\n");

getchar();

}

Page 13: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CSorteia Iniciante.

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

int sorteiaIniciante () {

return rand()%nroJogadores;

}

Page 14: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CAndar Jogador !

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

void andarJogador (Jogador *j, int n) {

j->pontos += n;

}

Page 15: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Variáveis globais

Definição de um jogador

Solução em CAtingiu Pontos?

typedef struct { char nome[20]; int pontos;} Jogador;

int nroLimitePontos, nroJogadores;Jogador** jogadores;

// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();

// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);

int atingiuPontos(Jogador *j, int n) {

return j->pontos >= nroLimitePontos;

}

Page 16: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Modelar Primeirão em UML

Page 17: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Modelar Primeirão em UML

• Será contado como presença para aula do dia 17/03– Entregar dia 24/03 (quarta-feira)– Entrega individual

• Pode fazer na mão ou usar ferramenta (e.g., PowerPoint) – Entregar em papel

• Usar apenas Diagrama de Classes UML

Page 18: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Solução OO

1. Muda o raciocínio

– Decomposição Funcional

X– Decomposição de Objetos

(Dados + Métodos)

?????

Page 19: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Solução OO

2. Decomposição de Objetos– Pergunta: quais são os elementos (objetos) do

problema???– Possível resposta:

• cada jogador, • um conjunto de jogadores, • dado de 6 lados• o próprio jogo

Você pode achar outros

Os dados são aninhados

jogo

jogadores

Cebolinha CascãoMônica

Page 20: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

Solução OO

3. Abstração dos Dados– Cada jogador

• Quantos pontos tem?• Qual o nome?• Muda de nome!• Anda “n” casas!• Atingiu “n” pontos?

– Dado• Lança!!!

– Jogo• Começa!!• Cria jogadores!!• Alguém venceu?• Mostra situação

Você pode achar muitas outras alternativas!!

Page 21: POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação

4. Quais os relacionamentos entre os objetos das classes

• Associação?• Agregação / Composição?• Herança?• Dependência?

5. Lembre-se de documentar o projeto• Notas

Solução OO