/ScreenSound_CSharp

Projeto criado utilizando Orientação a Objetos na Linguagem C#

Primary LanguageC#


📃 Sobre o Projeto

ScreenSound e uma versão melhorada do app MusicPlay, desenvolvido na linguagem CSharp.
Assim como o app MusicPlay, a parte visual do sistema e via Terminal.

🔥 Conceitos POO Aplicados ao Projeto

🏷️ Namespaces
Namespaces em CSharp e uma forma de organizar classes do projeto em pasta, onde pode ser incluidos em outras classes do projeto. Para usar um namespace em outra classe do projeto, use a palavra reseverda using, no começo do arquivo.

// Criando namespace
namespace ScreenSound;

class Menu {}
using ScreenSound;

class MenuAvaliacao {}

🏷️ Herança
Aplicado a herança entre classes usando : na linguagem CSharp para que a classe MenuAvaliacao herde os membros da classe Menu.

class Menu {}

class MenuAvaliacao : Menu {}

🏷️ Interface
Define um contrato que qualquer classe ou struct que implemente esse contrato, deve fornecer uma implementação dos membros definidos na interface. Por convenção toda interface deve ter a letra I no nome da interface, deixando explicito que essa estrutura de codigo e uma interface.
No projeto foi criado uma interface chamada IAvaliavel, com dois membros definidos AdicionarNota e Media

internal interace IAvaliavel 
{
    void AdicionarNota(Avaliacao nota);
    double Media { get; }
}

Assim, todas as classes que implemente essa interface terá um metodo chamando AdicionarNota, porem cada um com sua tratativa de adicionar nota.

🏷️ Metodos Estaticos
São definidos com a palavra static, e pdeom ser chamados na sem a necessidade de criar uma instancia da classe.

public static Avaliacao Parse(string texto)
{
    int nota = int.Parse(texto);
    return new Avaliacao(nota);
}

🏷️ Abstração
Conceito utilizado para esconder os detalhes e complexidades do codigo e apenas focar nos aspectos essenciais.

🏷️ Encapsulamento
Tecnica de implementar abstração, criar classes e membros com modificadores de acessos apropriados para mostrar ou esconder detalhes do codigo.

internal class Musica 
{
    public string Nome { get; }
    public int Duracao { get; set; }
}

A classe Musica acima contém 02 propriedades publica Nome e Duracao, a propriedade Nome permite apenas verificar os dados, enquanto que a propriedade Duracao permite que outras classes posso definir e verificar os dados.

🏷️ Polimorfismo
Permite que objetos de diferentes classes sejam tratados de maneira uniforme.
Permite que seja chamando o mesmo metodo em objetos de classes diferentes, obtendo o comportamentos especificos de cada classe.

// Classe "Menu"

using ScreenSound.Modelos;
namespace ScreenSound.Menus;

internal class Menu
{
    public virtual void Executar(Dictionary<string, Banda> bandasRegistradas) {}
}
// Classe "MenuAvaliarBanda"

using ScreenSound.Modelos;
namespace ScreenSound.Menus;

internal class MenuAvaliarBanda : Menu
{
    public override void Executar(Dictionary<string, Banda> bandasRegistradas)
    {
        base.Executar(bandasRegistradas);

        // codigo ...
    }
}
// Classe "MenuAvaliarAlbum"

using ScreenSound.Modelos;
namespace ScreenSound.Menus;

internal class MenuAvaliarAlbum : Menu
{
    public override void Executar(Dictionary<string, Banda> bandasRegistradas)
    {
        base.Executar(bandasRegistradas);

        // codigo ...
    }
}

Na classe Menu foi criado o metodo Executar() sem qualquer tipo de comportamento, apenas criado como um metodo virtual palavra usada para definir um metodo como abstrato. Porem nas classes MenuAvaliarBanda e MenuAvaliarAlbum que herdam da classe Menu, foi herdado o metodo Executar() que será implementado conforme comportamento de cada classe. Usado a palavra reservada base para acessar o metodo Executar() da classe base Menu.

🏷️ Dictionary
Estrutura de dados que permite associar chaves a valores. Dictionary e definido do namespace System.Collections.Generic

// Program.cs

// Armazenar Bandas
Dictionary<string, Banda> bandasRegistradas = new();

// Armazenar Menu de Opções
Dictionary<int, Menu> opcoes = new();

No arquivo Program.cs foi criado um dicionario que permite armazenar as bandas cadastradas na aplicação, e outro dicionario que armazena as opções do menu da aplicação.

:octocat: Feito por Mateus Barros :octocat: