Curso POO teoria #08a - Relacionamento de Agregação
Bem-vindo à primeira aula de Android
Visão geral da seção: Nesta aula, o professor introduz o curso e explica que será abordado o desenvolvimento de aplicativos Android.
Introdução ao curso
- O professor dá as boas-vindas aos alunos e menciona que não é possível assistir às aulas do Android neste momento.
- Ele indica que há um vídeo completo disponível para visualização.
- Encoraja os alunos a estudarem bem.
Aula teórica sobre programação orientada a objetos
Visão geral da seção: Nesta seção, o professor introduz o conceito de programação orientada a objetos e menciona que esta é a 8ª aula do curso.
Revisão da classe Lutador
- O professor relembra os atributos e métodos da classe Lutador criados na aula anterior.
- Destaca que todos os atributos são privados e foram encapsulados.
- Menciona os métodos principais da classe, como apresentar lutador, mostrar status e realizar uma luta.
- Explica que foram criados objetos lutadores na aula anterior.
Relacionamento entre classes - Agregação
Visão geral da seção: Nesta seção, o professor explora o relacionamento específico chamado agregação entre classes.
Compartilhando atributos e métodos entre objetos Lutador
- O professor mostra dois objetos lutadores baseados na mesma classe.
- Destaca que eles compartilham os mesmos atributos e métodos.
- Propõe criar uma nova classe chamada Luta para permitir que os lutadores lutem entre si.
Criando a classe Luta
Visão geral da seção: Nesta seção, o professor cria a classe Luta para permitir que os objetos lutadores interajam.
Atributos da classe Luta
- O professor define os atributos desafiado e desafiante para a classe Luta.
- Explica que esses atributos representam os lutadores envolvidos na luta.
Essa é uma estrutura básica das notas de estudo com base no conteúdo do vídeo. Certifique-se de revisar e ajustar as informações conforme necessário.
Compreensão das lutas e regras
Visão geral da seção: Nesta seção, o palestrante discute a compreensão das lutas e apresenta as regras para os combates 8 e 9. Ele também menciona os atributos relacionados às lutas.
Entendendo as lutas
- Cada luta tem uma quantidade de rounds.
- É importante verificar se a luta está aprovada ou não.
Regras das lutas do 8 e 9 combate
- O encapsulamento é o primeiro pilar.
- Os atributos serão privados.
- Será implementado um método para marcar a luta.
- Será implementado um método para realizar a luta.
Contribuições dos alunos
- Os alunos são incentivados a criar uma classe de luta melhor durante a aula.
- Podem propor métodos adicionais nos comentários.
Representação básica da classe Luta
- A visibilidade dos métodos será pública.
- A representação oficial utilizando UML será mostrada posteriormente.
Relacionamento entre Lutador e Luta
Visão geral da seção: Nesta seção, o palestrante explora o relacionamento entre as classes Lutador e Luta, utilizando diagramas de classes.
Agregação entre Lutador e Luta
- Existe uma ligação entre lutador e luta, onde um lutador participa de uma luta.
- O relacionamento é representado por uma linha sólida com um losango branco na ponta.
Multiplicidade entre Lutador e Luta
- Um lutador pode participar de várias lutas.
- Uma luta pode ser disputada por vários lutadores.
Relação com o diagrama de entidade-relacionamento
- O diagrama de classes é uma evolução do modelo entidade-relacionamento.
- No diagrama de classes, temos dados e funções, enquanto no diagrama entidade-relacionamento temos apenas dados.
Diagrama de Classes vs. Diagrama Entidade-Relacionamento
Visão geral da seção: Nesta seção, o palestrante compara o diagrama de classes com o diagrama entidade-relacionamento e explica a evolução desses modelos.
Evolução do modelo
- O diagrama de classes é uma evolução do modelo entidade-relacionamento.
- No diagrama de classes, além dos dados, também temos funções.
Criação da classe Luta
Visão geral da seção: Nesta seção, o palestrante inicia a criação da classe Luta no código.
Declaração dos atributos
- Os atributos desafiado, desafiante, rounds e aprovada são privados.
- O atributo round é do tipo inteiro.
- O atributo aprovada indica se a luta pode acontecer ou não.
Utilizando um tipo abstrato de dados
Visão geral da seção: Nesta seção, o palestrante discute a utilização de um tipo abstrato de dados e como ele pode ser implementado em um programa. Ele menciona que o desafiado será uma instância da classe "lutador" e explica a relação entre o tipo abstrato e as instâncias da classe.
Definindo o tipo abstrato de dados
- O desafiado é uma instância da classe "lutador".
- A relação entre o tipo abstrato e a instância da classe é conhecida como agregação.
- Além dos métodos tradicionais, existem métodos especiais que recebem parâmetros do tipo lutador.
Métodos públicos e relacionamentos
Visão geral da seção: Nesta seção, o palestrante fala sobre os métodos públicos definidos na classe e os relacionamentos com outras classes. Ele destaca a importância das agregações na definição desses relacionamentos.
Métodos públicos e agregações
- Os métodos públicos "marcar luta" e "lutar" são definidos na classe.
- Os atributos "desafiado" e "desafiantes" são instâncias de outra classe.
- A relação entre as classes através dos atributos é conhecida como agregação.
Regras para uma luta
Visão geral da seção: Nesta seção, o palestrante apresenta algumas regras que devem ser seguidas para marcar uma luta. Ele menciona que a luta só pode ser marcada entre lutadores da mesma categoria, os desafiados e desafiantes devem ser lutadores diferentes, a luta deve estar aprovada e o resultado deve ser a vitória de um dos lutadores ou empate.
Regras para marcar uma luta
- A luta só pode ser marcada entre lutadores da mesma categoria.
- O desafiado e o desafiante devem ser lutadores diferentes.
- A luta deve estar aprovada.
- O resultado da luta deve ser a vitória de um dos lutadores ou empate.
Método para marcar uma luta
Visão geral da seção: Nesta seção, o palestrante explica como é feito o método para marcar uma luta. Ele destaca que é necessário passar os objetos "lutador" como parâmetros e apresenta as condições para que a luta possa ser marcada.
Marcar uma luta
- O método "marcar luta" recebe como parâmetros os objetos "lutador".
- É verificado se as categorias dos lutadores são iguais antes de marcar a luta.
Luta entre lutadores da mesma categoria
Visão geral da seção: Nesta parte, o instrutor explica que uma luta só pode acontecer se os lutadores forem da mesma categoria. Caso contrário, a luta não será permitida.
- Os lutadores devem ser da mesma categoria para a luta acontecer.
- Se os lutadores forem diferentes categorias, a luta não será permitida.
Parâmetros e atributos da classe Luta
Visão geral da seção: O instrutor discute sobre os parâmetros e atributos necessários para a classe "Luta".
- O primeiro parâmetro passado é sempre o desafiado.
- O segundo parâmetro passado é sempre o desafiante.
- A classe "Luta" possui atributos como desafiado, desafiante e um valor booleano chamado "aprovada".
- Se a luta não for aprovada, os valores de desafiado e desafiante serão nulos.
Método marcarLuta e verificação de aprovação
Visão geral da seção: Aqui é apresentado o método "marcarLuta" e como é feita a verificação de aprovação da luta.
- O método "marcarLuta" verifica se a luta é aprovada ou não.
- Se a luta for aprovada, o valor booleano "aprovada" será verdadeiro.
- Caso contrário, o valor booleano será falso e os valores de desafiado e desafiante serão nulos.
Método lutar e definição de vitórias e derrotas
Visão geral da seção: O instrutor explica o método "lutar" e como são definidas as vitórias e derrotas dos lutadores.
- O método "lutar" gera um valor aleatório para determinar o vencedor da luta.
- As vitórias e derrotas de cada lutador são registradas em seus respectivos objetos.
- Os resultados da luta são gravados no cartel do lutador.
Verificação de aprovação da luta
Visão geral da seção: Aqui é feita a verificação final para saber se a luta pode acontecer ou não.
- A luta só acontece se for aprovada.
- Se a luta não for aprovada, uma mensagem informando que a luta não pode acontecer é exibida.
Apresentação dos lutadores antes da luta
Visão geral da seção: Antes do início da luta, os lutadores são apresentados.
- O desafiado é apresentado primeiro.
- Em seguida, o desafiante também é apresentado.
- Os métodos dos objetos desafiado e desafiante podem ser utilizados sem problemas.
Determinação do vencedor aleatoriamente
Visão geral da seção: O instrutor explica como o vencedor é determinado aleatoriamente.
- Uma variável chamada "vencedor" recebe um valor aleatório entre 0 e 2.
- 0 representa empate, 1 representa vitória do desafiado e 2 representa vitória do desafiante.
Resultados da luta
Visão geral da seção: Aqui são apresentados os resultados da luta de acordo com o valor gerado aleatoriamente.
- O resultado é verificado e a ação correspondente é executada.
- Caso seja empate, o método "empatarLuta" é chamado para ambos os lutadores.
- Se o desafiado ganhar, seu número de vitórias aumenta e o número de derrotas do desafiante também aumenta.
- Se o desafiante ganhar, ocorre o inverso.
Relacionamento entre classes
Visão geral da seção: O instrutor menciona que este exemplo aborda um caso de agregação como relacionamento entre classes.
- Existem diferentes tipos de relacionamentos entre classes.
- Neste exemplo, foi utilizado um relacionamento de agregação mais complexo.
- É possível criar outros tipos de relações e explorar diferentes formas de relacionar objetos em programação orientada a objetos.
Atribuição de Dados aos Lutadores
Visão Geral da Seção: Nesta seção, o instrutor explica como atribuir dados aos lutadores através do construtor e destaca a importância dessa etapa.
Atribuição de Dados aos Lutadores
- O construtor é utilizado para atribuir informações aos lutadores no momento de sua criação.
- Os dados importantes, como nome, nacionalidade, idade, altura, peso e histórico de vitórias/derrotas/empates, são passados como parâmetros no construtor.
- Exemplo: Criar dois lutadores com os respectivos dados - nome: Playboy, nacionalidade: França, idade: 31 anos, altura: 1.75m, peso: 68.9kg; nome: Pulsoscript, nacionalidade: Brasil, idade: 29 anos, altura: 1.68m, peso: 57.8kg.
- Essa atribuição de dados é feita para todos os lutadores (do lutador 0 ao lutador 5) utilizando o mesmo processo.
Marcação e Realização das Lutas
Visão Geral da Seção: Nesta seção, o instrutor aborda a marcação e realização das lutas entre os lutadores previamente cadastrados.
Marcação e Realização das Lutas
- Para marcar uma luta entre dois lutadores previamente cadastrados, utiliza-se o método "marcarLuta" do objeto "Luta".
- Exemplo de marcação de luta entre o lutador 0 (Playboy) e o lutador 1 (Pulsoscript):
luta.marcarLuta(lutador, lutador).
- Antes de marcar a luta, é verificado se os lutadores são da mesma categoria e se o peso está dentro dos limites permitidos.
- Após a marcação da luta, pode-se chamar o método "lutar" para que a luta aconteça.
- O resultado da luta (empate, vitória do desafiante ou vitória do desafiado) é gerado aleatoriamente.
Restrições e Validações das Lutas
Visão Geral da Seção: Nesta seção, o instrutor explica as restrições e validações aplicadas às lutas entre os lutadores.
Restrições e Validações das Lutas
- As lutas só podem ser marcadas entre lutadores de categorias iguais.
- As lutas não podem ser marcadas entre lutadores de categorias diferentes (exemplo: peso leve vs. peso pesado).
- Durante a realização da luta, é feita uma verificação para garantir que a luta seja válida antes de prosseguir.
- Caso haja alguma restrição ou invalidade na marcação ou realização da luta, um erro será exibido.
Benefícios da Programação Orientada a Objetos
Visão Geral da Seção: Nesta seção, o instrutor destaca os benefícios da programação orientada a objetos no contexto do projeto dos lutadores.
Benefícios da Programação Orientada a Objetos
- A programação orientada a objetos permite criar classes reutilizáveis e flexíveis.
- No contexto do projeto dos lutadores, isso significa que é possível criar quantos lutadores e lutas forem necessários.
- A criação de objetos a partir de classes previamente definidas simplifica o desenvolvimento do código principal.
- A programação orientada a objetos facilita a organização e manutenção do código, tornando-o mais simples e legível.
Próximos Passos
Visão Geral da Seção: Nesta seção final, o instrutor sugere os próximos passos para continuar aprendendo sobre programação orientada a objetos.
Próximos Passos
- Escolher uma das linguagens disponíveis (PHP ou Java) para prosseguir com os estudos.
- Acessar as playlists dos cursos de PHP ou Java para aprender mais sobre programação orientada a objetos.
- Aula 08B desses cursos abordará programação orientada a objetos em outra linguagem, complementando o conhecimento adquirido nesta aula teórica.