CSE 210: Programação com Classes

S06 - Atividade em Grupo: Design do Programa de Metas Eternas

Visão Geral

Reúna-se com seu grupo e prepare um design para a tarefa de programação desta semana.

Sobre "Orientações do Instrutor"

Lembre-se de que, durante toda a atividade, você receberá Orientações de um Instrutor. Primeiro, vocês devem responder às perguntas em grupo e, depois, consultar a seção Orientações do Instrutor para ter certeza de que estão no caminho certo.

Não deixe de expandir e ler cada seção da Orientações do Instrutor à medida que avança na atividade.

Agenda

Use o seguinte como agenda para sua reunião em grupo. Quem for designado para ser o estudante líder desta reunião deve ajudar a guiar o grupo através destas etapas e fazer as perguntas listadas aqui.

Antes da reunião: verifique o horário, o local e o estudante líder

Isso pode ser tão simples quanto publicar uma mensagem no seu canal do Microsoft Teams dizendo algo como: "Olá, pessoal, ainda estamos planejando nos encontrar amanhã às 19h, Horário de Brasília? Vamos usar o recurso de vídeo do Microsoft Teams de novo." Ou, se outra pessoa já publicou uma mensagem como essa, pode ser tão simples quanto "curtir" a mensagem dela.

Certifique-se de identificar quem será o estudante líder de cada semana. Por exemplo, "Emília, você ainda pode ser a estudante líder desta semana?"

Comece com uma oração

Discuta a atividade de aprendizagem de preparação

Reserve um tempo para falar sobre a atividade de aprendizagem da semana. Fale sobre quaisquer dificuldades que as pessoas tiveram para entender o material ou concluir a atividade.

  1. Qual parte da atividade de aprendizagem foi a mais difícil para você?

Reveja a especificação do programa

Consulte a Especificação do Programa de Metas Eternas. Em grupo, revisem os requisitos do programa e como ele deve funcionar.

  1. O que o programa faz?
  2. Quais são as entradas do usuário?
  3. Que saída ele produz?
  4. Como o programa termina?
Orientações do Instrutor

Uma grande parte deste projeto serão os componentes especiais de "gamificação" que cada pessoa adicionará. Para esta atividade de design, você vai focar nos componentes principais relacionados ao acompanhamento de metas, deixando a outra parte específica para que todos completem após a atividade.

Determine as classes

O primeiro passo para projetar um programa como esse é pensar nas classes que você precisará. Ao pensar em classes, muitas vezes é útil considerar os substantivos mais importantes na descrição do programa.

  1. Quais são bons candidatos para classes neste programa?
  2. Quais são as principais responsabilidades de cada classe?
Orientações do Instrutor

Assim como na tarefa anterior, há uma aplicação natural de herança neste programa com uma classe base de Meta que define as responsabilidades, os comportamentos e os atributos comuns. Em seguida, você deve ter classes derivadas que sobrescrevem os comportamentos necessários da classe base e adicionam quaisquer responsabilidades específicas que elas tenham.

Embora seja possível lidar com todo o sistema de menu e suas funções relacionadas, e inclusive salvar os pontos, usando funções estáticas no arquivo Program.cs, devido à complexidade envolvida, seria interessante encapsular toda essa funcionalidade em uma classe "gerenciadora" separada.

Avalie o Design

Defina os comportamentos das classes

Agora que você decidiu quais classes serão necessárias e suas responsabilidades, o próximo passo é definir os comportamentos dessas classes. Eles se tornarão métodos para as classes.

Passe por cada uma de suas classes e pergunte:

  1. Quais são os comportamentos que esta classe terá para cumprir suas responsabilidades? (Em outras palavras, o que essa classe deveria fazer?)
Orientações do Instrutor

Uma das principais funcionalidades de cada uma dessas classes é que cada meta precisa fornecer uma maneira de registrar o evento (ou seja, marcar que ele foi concluído outra vez). Além disso, cada uma precisa fornecer um sinal de verificação para mostrar se está concluída. Como esses métodos existem para todas as classes, eles devem ser definidos na classe base. Entretanto, como todos eles têm funcionalidades diferentes, eles devem ser sobrescritos nas classes derivadas:

Além de registrar o evento e verificar se ele está concluído, cada meta precisará ser exibida em uma lista (com caixa de seleção etc.) e precisará de uma representação de string que possa ser salva em um arquivo de texto. Elas também devem ser declaradas na classe base e sobrescritas nas classes derivadas, conforme necessário:

A seguir está um resumo dos comportamentos listados:

Além desses comportamentos para as metas, a classe do gerenciador de metas precisará de comportamentos relacionados ao sistema de menu, como os seguintes:

Além dos métodos descritos aqui, pode ser útil criar outros métodos privados para ajudar a executar as etapas dessas metas.

Avalie o Design

Defina os atributos das classes

Agora que você definiu as classes, suas responsabilidades e seus comportamentos, o próximo passo é determinar quais atributos as classes devem ter ou quais variáveis precisam armazenar.

Passe por cada uma de suas classes e pergunte:

  1. Quais atributos essa classe precisa para cumprir seus comportamentos? (Em outras palavras, quais variáveis esta classe deve armazenar?)
  2. Quais são os tipos de dados dessas variáveis-membro?
Orientações do Instrutor

Todas as classes de metas têm alguns elementos em comum, como o nome da meta, uma descrição e os pontos a serem concedidos pelo registro de um evento desse tipo.

As classes de metas derivadas precisarão definir os atributos necessários para elas que sejam exclusivos de cada classe. Por exemplo, o MetaSimples precisará monitorar se ela foi concluída e o MetaDeListaDeTarefas precisará monitorar o número de vezes que ela foi concluída, o número de vezes que o usuário está se esforçando para alcançar e o bônus por concluir essa meta.

A seguir está um resumo dos atributos necessários:

Além das classes meta, a classe GerenciadorDeMetas precisará monitorar a lista de metas, bem como a pontuação dos jogadores.

Avalie o Design

Definir construtores

Agora que você definiu as classes, incluindo seus métodos e atributos, o próximo passo é pensar nos construtores que serão usados para criar novas instâncias dessas classes. Lembre-se de que você pode criar vários construtores com parâmetros diferentes para facilitar o trabalho com suas classes.

Lembre-se de que os construtores ajudam a configurar o estado inicial do objeto, então você deve considerar quais dados são necessários para esse estado inicial.

  1. Quais construtores cada classe deve ter?

    • Em outras palavras, quais parâmetros você deve passar ao criar um objeto desse tipo.
  2. Que outro trabalho precisa ser feito para configurar esses objetos?

    • Por exemplo, o construtor precisa executar código para executar tarefas de configuração, como criar listas, percorrer por variáveis, etc.
Orientações do Instrutor

Lembre-se de que os construtores geralmente precisam levar em conta os atributos que uma classe possui. Alguns atributos podem precisar ser passados como parâmetros, mas outros podem ser inicializados com valores iniciais, como false ou 0.

Os seguintes construtores são apropriados para essas classes:

Avalie o Design

Revise o design

Reserve um tempo para revisar seu design final.

  1. Há alguma classe, método ou variável que você não entende?
Orientações do Instrutor

A seguir está um diagrama de classe final para cada uma das classes que você pode usar como um guia enquanto escreve seu código.

Diagrama de classe do programa Missão Eterna

Conclusão

Neste ponto, você tem o design das classes que precisará para este projeto. Se o seu design não estiver "perfeito" ou precisar mudar quando você começar a trabalhar no projeto, tudo bem! À medida que você aprender mais detalhes, naturalmente precisará ajustar seu planejamento. É por isso que os princípios da programação com classes são tão valiosos, porque eles permitem que seu programa mude facilmente.

No final da sua reunião:

  1. Determine quem será o estudante líder na próxima reunião.

Após a reunião: inicie o código

Após a atividade em grupo, cada pessoa precisa fazer individualmente os seguintes passos:

  1. Abrir o projeto no VS Code. Criar novos arquivos que contenham os protótipos ou código vazio para todas as classes, variáveis membro e funções em seu design.

    • Neste ponto, o corpo dos métodos pode estar vazio, exceto as instruções de retorno necessárias.
    • Cada classe deve estar em seu próprio arquivo e o nome do arquivo deve corresponder ao nome da classe.
  2. Certifique-se de que seu programa possa ser compilado sem erros.
  3. Confirme (commit) e envie (push) seu código para seu repositório no GitHub.

Envio

Assim como fez anteriormente, após concluir esta atividade retorne ao Canvas para responder a dois questionários associados a ela:

  1. S06 - Atividade em Grupo: Design do Programa de Metas Eternas
  2. S06 - Atividade em Grupo: Relatório da Participação