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
.
🏷️ 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.