Guilherme: Olá! Meu nome é Guilherme Lima e serei um dos instrutores nesse curso de orientação a objetos com C#.
Guilherme é um homem branco, de cabelo curto e barba castanhos, e olhos também castanhos. Usa óculos quadrados de armação preta e está com uma blusa de moletom cinza da Nike.
Daniel: Eu sou o Daniel Portugal, desenvolvedor .NET e acompanharei o Guilherme nesse curso.
Daniel Portugal é um homem branco com cabelo curto e barba pretos, com bigode robusto. Usa óculos quadrados de armação preta e está de camiseta preta com estampa de guitarra em branco.
Por que é importante aprender sobre orientação a objetos com C#? Na maioria dos projetos em que você trabalhar, será necessário compreender os conceitos fundamentais dessa área, como classes, atributos, métodos, construtores e assim por diante. Você conhecerá tudo isso no presente curso.
Guilherme: Desenvolveremos um projeto real utilizando os principais conceitos de orientação a objetos. Porém, não focaremos em todos os conceitos — afinal, é quase impossível colocar todos os conhecimentos de orientação a objetos em um só treinamento. Não falaremos especificamente sobre, por exemplo, herança e interface.
Nosso objetivo, então, é aprofundar nosso conhecimento e construir uma base sólida nesses primeiros passos com orientação a objetos, especialmente com C#, em um projeto real.
Daniel: Continuaremos evoluindo o projeto de músicas que começamos a desenvolver no curso anterior. Agora, focaremos no paradigma orientado a objetos usando o C#.
Guilherme: Vamos lá!
Daniel: Vamos iniciar o nosso estudo de orientação a objetos. Vamos criar um novo projeto no Visual Studio 2022, clicando em "Criar um projeto" na tela inicial do software, no menu de Introdução. Em seguida, escolhemos novamente a opção "Aplicativo do Console" como modelo de projeto.
Ao clicar em "Próximo" no canto inferior direito da página, daremos um nome para esse projeto. Nós estamos trabalhando com um projeto de músicas e bandas chamado ScreenSound
, então escrevemos esse nome.
Clicamos em "Próximo" novamente. Nessa tela, de Informações Adicionais, escolhemos a Estrutura do projeto. Na caixa de seleção, clicamos em ".NET 6.0". Se você escolheu o ".NET 7", não tem problema. Escolhemos essa versão porque o .NET 6 é o de suporte a longo prazo.
Por fim, clicamos em "Criar" no canto inferior direito da tela.
Você já conhece a interface do Visual Studio e a aparência do projeto de tipo console, com o nosso famoso Hello World.
O primeiro passo, então, é pensar nos conceitos do nosso projeto, que é um projeto de músicas e bandas. O que uma música geralmente tem como características comuns?
Guilherme: As músicas têm um artista, duração e nome. Além disso, pensando em um modelo de disponibilização dessas músicas, podemos acrescentar a disponibilidade dessa música; ou seja, se a música está disponível no plano ou não.
Daniel: Certo! Então, vamos escrever isso no nosso projeto. Podemos apagar as linhas padrão do Hello World e, no lugar, anotar essas características como comentários:
Program.cs
// artista
// duracao
// nome
// disponivel
Agora, toda música cadastrada no nosso sistema terá essas quatro características. Como traduzir isso para o C#?
Guilherme: Dados como nome e artista são textos, ou seja, do tipo string. A duração, provavelmente, é um tipo inteiro (int). A disponibilidade da música é um dado do tipo booleano (boolean), verdadeiro ou falso.
Daniel: Então vamos registrar isso no C# Estamos falando de uma linguagem fortemente tipada, ou seja, os objetos têm um tipo definido que precisa ser informado no momento de sua declaração. Por exemplo: o dado nome
é do tipo string
, que representa um texto, então definimos: string nome
. O mesmo vale para o artista
.
Já a duração pode ser um inteiro (minutos ou segundos), então escrevemos int duracao
. A disponibilidade, por ser uma informação binária de verdadeiro ou falso, é um dado do tipo booleano. Esse é um tipo que ainda não conhecemos, e o que o representa é o bool
.
Teremos o seguinte, então:
string nome;
string artista;
int duracao;
bool disponivel;
Guilherme: Utilizamos tipos que, na programação, são conhecidos como tipos primitivos: string
, int
, bool
. Temos um grupo de variáveis tipadas e queremos dizer que elas compõem uma música; ou seja, uma música possui diversas características de tipos diferentes.
Então, o desafio agora é agrupar tudo isso e definir como uma música.
Daniel: Para conformar isso à convenção que usamos para organizar esse agrupamento (o modelo de música), criaremos um novo arquivo e transferir o código que escrevemos para ele. Nessa convenção, todo modelo que criamos fica no seu próprio arquivo.
Para isso, clicamos com o botão direito no projeto Screensound, na barra superior da área de código, e selecionar a opção "Adicionar > Novo Item". Na caixa de diálogo que se abre, temos uma série de opções listadas. Selecionamos a opção chamada "Arquivo de Código" e nomeamos esse arquivo conforme o conceito que queremos estabelecer: Musica
.
O efeito disso é um novo arquivo de extensão .cs
(a extensão para C#), vazio, aberto como uma nova aba no Visual Studio.
Então, clicamos na aba Program.cs
para retornar ao código que escrevemos e recortar todas as variáveis que criamos. Para isso, as selecionamos, pressionamos "Ctrl + X", clicamos novamente na aba Musica.cs
e colamos esse dataframe nesse arquivo, pressionando "Ctrl + V".
O Guilherme falou que queremos agrupar esses conceitos num conceito maior, numa coisa mais complexa. O agrupamento de costume no C# é feito utilizando as chaves ({}
), certo? Então vamos abrir e fechar chaves no começo do arquivo e, novamente, recortar e colar nosso código dentro delas.
Com isso já temos um agrupamento. Mas ele precisa ter um nome, que nada mais é do que o nome do conceito: Musica
. Diremos que esse conceito é uma classe, então, escrevemos class Musica
logo acima do agrupamento, antes da abertura de chaves:
Musica.cs
class Musica
{
string nome;
string artista;
int duracao;
bool disponivel;
}
Essa é a estrutura mínima para criar um conceito do mundo real e conferir suas características. No caso da música, as características são Nome, Artista, Duração e Disponível, todas elas com seus tipos específicos.
Guilherme: Criamos a classe Música
, mas ainda não sabemos como utilizá-la. O desafio agora é esse.
Daniel: Vamos retornar ao arquivo Program.cs
, clicando em sua aba no Visual Studio. Podemos apagar os comentários feitos anteriormente, selecionando as linhas e pressionando "Delete", esvaziando o arquivo. Agora, vamos aprender como usar essa classe Musica
.
Daniel: Já sabemos que o C# é uma linguagem fortemente tipada, por isso vamos criar uma variável cujo tipo é uma música. Para isso, escrevemos o tipo Musica
e escrevemos o nome da primeira variável, que pode ser musica1
, pois criaremos outras músicas depois. Em seguida, adicionamos um sinal de igual (=
). Então: Musica musica 1 =
.
Essa variável receberá uma música que criaremos usando a palavra reservada new
, que já conhecemos e usamos em outras situações. Mas, agora estamos usando para o tipo música: new Musica()
. Nesse momento, criamos um objeto específico para o tipo Musica
:
Program.cs
Musica musica1 = new Musica();
Guilherme: É similar, por exemplo, a quando criamos a lista e usamos o new list*
. É a mesma ideia. A grande diferença é que, no lugar de utilizar os tipos que o C# já conhece, fizemos um aglomerado de tipos, chamamos de Musica
e falamos: "A variável musica1
é do tipo Musica
, que possui aqueles valores."
O desafio agora é: como podemos dizer que musica1
tem determinado nome, determinado artista, determinada duração?
Daniel: Vamos pular uma linha e tentar escrever isso. Primeiro, digitamos musica1
para acessar essa variável. Em seguida adicionamos um ponto final, usado para fazer referência a propriedades do tipo da variável. Ao adicionar esse ponto, o próprio Visual Studio entrega as informações dessa variável que podemos usar, como Equals
, GetType
, etc.
Porém, não está aparecendo nome
, artista
e nenhuma outra propriedade da nossa classe. Mesmo se escrevermos .nome
, resultando em musica1.nome
, essa propriedade não é aceita — o que é indicado por um sublinhado vermelho dizendo que não conseguimos acessar a informação nome
.
Isso acontece porque, na classe Musica
, precisamos inserir uma informação dizendo que essa informação está visível para fora da própria classe. Então, vamos clicar na aba Musica.cs
e, na linha 3, à esquerda de string name
, colocar mais uma palavra reservada dizendo que essa propriedade é pública — ou seja, é visível para fora. A palavra reservada para isso é, justamente, public
. Então, atualizamos para public string name
:
Musica.cs
class Musica
{
public string nome;
string artista;
int duracao;
bool disponivel;
}
Podemos salvar esse arquivo. Voltando para a aba Program.cs
, já podemos notar que o sublinhado indicando erro em musica1.nome
não existe mais.
Ou seja, agora conseguimos colocar um nome para essa nova música.
Sabemos que o nome é um texto. Qual valor a variável musica1
receberá como nome? Qual será a nossa primeira música?
Guilherme: Podemos colocar uma música que você gosta!
Daniel: Minha música preferida se chama Roxanne. Então, passamos Roxanne
entre aspas duplas (por ser uma string): musica1.nome = "Roxanne"
. Essa é uma atribuição normal de variável, só que essa variável fica dentro daquele agrupamento de tipo Musica
.
Guilherme: Seguindo boas práticas, vamos retornar ao arquivo Música.cs
, que contém a classe com o agrupamento de tipos. Nele, se você quiser usar o nome
, o artista
, a duracao
ou o disponivel
, você consegue usar livremente, sem ser necessária uma marcação de public
ou qualquer outra. Porém, se você tem outro arquivo em que deseja usar aquelas informações, você precisará marcar todas como public
.
Então, vamos definir o public
para todos os outros valores também:
Musica.cs
class Musica
{
public string nome;
public string artista;
public int duracao;
public bool disponivel;
}
Pronto! Vamos criar duas músicas, então?
Daniel: Vamos! Mas antes, voltando para a aba do arquivo Program.cs
, vamos adicionar mais informações na musica1
, só para conferir.
Para inserir o artista da primeira música, seguimos o mesmo procedimento: colocamos o nome da variável, um ponto e o nome da propriedade — resultando em musica1.artista =
.Em seguida, precisamos definir o valor dessa propriedade. A música Roxanne é da banda The Police, então passamos esse nome entre aspas: "The Police"
:
Program.cs
Musica musica1 = new Musica();
musica1.nome = "Roxanne";
musica1.artista = "The Police";
Para criar a outra música, criamos outra variável. Não tem nenhuma diferença no processo: primeiro, criamos mais uma variável do tipo Musica
, que podemos chamar de musica2
, que receberá a criação dessa nova música. Então: Musica musica2 = new Musica()
.
Na linha de baixo, o Visual Studio automaticamente sugere a inserção de musica2.nome =
para adicionar um nome a essa música. Então, podemos pressionar "Tab" para aceitar a sugestão. Qual será o nome, Gui?
Guilherme: Podemos colocar a música "Vertigo" da banda U2. Para inserir o nome do artista, seguimos os mesmos passos:
Musica musica2 = new Musica();
musica2.nome = "Vertigo";
musica2.artista = "U2";
Daniel: Como estamos numa aplicação do tipo console, vamos tentar exibir essas informações. Nós já sabemos como fazer isso: usando o método Console.WriteLine()
. Vamos exibir a mensagem "Nome da música:" com a interpolação ($
) para puxar o nome dado à musica1
, inserindo esse código abaixo da criação da primeira música:
Console.WriteLine($"Nome da música: {musica1.nome}");
Guilherme: O que acontece se você deixar só o musica1
, por exemplo? O que ele vai mostrar?
Daniel: Podemos verrificar. Vamos apagar o .nome
, deixando apenas $"Nome da música: {musica1}"
e executar o programa. Nós veremos que ele não vai exibir o nome, mas outra coisa. Vamos clicar no botão "Play" verde ao lado de "ScreenSound", na barra superior do Visual Studio. Ao rodar, o terminal se abre exibindo a seguinte mensagem:
Nome da música: Musica
Ou seja, o que aparece é o nome do tipo. Por convenção, quando você não define o valor de variável que você tem dentro da classe (no caso, a classe Musica
), ele exibe o tipo dela; ou seja, Musica
também.
Guilherme: Então, da mesma forma que atribuímos um valor com musica
, um ponto e o nome da propriedade, como nome
ou artista
, fazemos o mesmo para visualizar esse valor.
Daniel: Vamos fechar o terminal e reescrever o .nome
depois de musica1
no código do WriteLine
.
Guilherme: Vamos copiar e colar essa linha 5, da exibição do nome da música, para exibir o nome do artista da primeira música também. Vamos mudar a mensagem para "Artista:" e a interpolação para {musica1.artista}
. Também podemos mudar a mensagem "Nome da música:" para apenas "Nome", para padronizar de forma mais sucinta:
Console.WriteLine($"Nome: {musica1.nome}");
Console.WriteLine($"Artista: {musica1.artista}");
Vamos visualizar essas duas características da música 1.
Daniel: Vamos clicar no "Play" novamente. Com a execução, surge o seguinte texto no terminal:
- Nome: Roxanne
- Artista: The Police
Podemos fazer o mesmo para a música 2. Vamos copiar e colar essas duas linhas de código e colar embaixo da criação da musica2
, substituindo a variável musica1
por musica2
:
Console.WriteLine($"Nome: {musica2.nome}");
Console.WriteLine($"Artista: {musica2.artista}");
Mas isso não é muito legal.
Guilherme: Quantas músicas existem no Spotify, Deezer ou outros streamings de música? Muitas! Se fizermos isso pra cada música que existe, a provavelmente passaríamos uns 200 anos fazendo só isso, o que não faz sentido.
Daniel: O que estamos querendo fazer é exibir a ficha técnica da música. Para isso, poderíamos pegar esse comportamento que escrevemos em Program.cs
e levar para esse modelo novo em que estamos criando músicas.
Guilherme: Faremos isso no próximo vídeo!
O curso C#: aplicando a Orientação a Objetos possui 116 minutos de vídeos, em um total de 48 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.