Módulo 1

Conceitos básicos para aplicar a linguagem C# avançada

A imagem inicial contém códigos de programação onde parte da imagem está desfocada e outra parte om as linhas de códigos em cores alternadas entre azul e laranja.

Neste módulo, você estudará sobre os conceitos fundamentais para que tenha capacidade de utilizar a linguagem C# de modo avançado. Tais conceitos são: classes, métodos, construtores, parâmetros variáveis, enumerações, parâmetros por referência e parâmetro padrão.

Está pronto? Então vamos lá!

Classes

O primeiro conceito que você verá é a classe, o qual é um bloco de construção básico na linguagem C#.

Ao criar uma classe, estabelecemos um “tipo”. A partir dessa etapa, criamos uma variável.

Para que você veja na prática, utilizamos no código abaixo, o exemplo da criação de uma classe com nome “Carro” e, posteriormente, um novo objeto “C1” para essa classe.

01. class Carro
02. {
03. ....'Atributos'
04.
05. ....'Algoritmos'
06. }
07.
08. Carro C1 = new Carro();

Acompanhe o passo a passo na sequência, para entender o que foi realizado:

Simples, não é mesmo?

Agora que apresentamos como criar uma classe, vamos conhecer os métodos!

Métodos

Após estudar sobre as classes, vamos agora para o conceito de método. Para que você entenda melhor as suas características e possíveis aplicações, assista ao vídeo a seguir!

Vídeo

Confira o vídeo sobre o conceito de método.

Confira aqui o que foi abordado no vídeo.

01. float Multiplicar(float x, float y)
02. {
03.
04. return x*y;
05.
06. }

01. void Entrada()
02. {
03. }

Com o que você aprendeu até aqui, podemos analisar um exemplo inicial para fixar melhor o conceito sobre métodos.

Vídeo

Acompanhe o que preparamos, assistindo a mais um vídeo.

Confira aqui o que foi abordado no vídeo.

Class Aluno { public string Nome; public int Idade; public int Serie; }

static void Main(string[] args) { Aluno aluno1 = new Aluno(); aluno1.Nome = "João"; alunol.Idade = 13; alunoi.Serie - 6; Console.WriteLine($"0 aluno {aluno1.Nome} tem {aluno1. Idade) anos e pertence ao {aluno1.Serie} ano"); }

class Aluno { public string Nome; public int Idade; public int Serie; 1 referência public string Retorno() { return string.Format($"O aluno {Nome} tem {Idade} anos e pertence ao {Serie} ano"); } 1 referência public void RetornoConsole() { Console.WriteLine(Retorno()); } }

class Program { 0 referências static void Main(string[] args) { Aluno aluno1 = new Aluno(); aluno1. Nome = "João"; aluno1.Idade = 13; aluno1. Serie = 6; aluno1. RetornoConsole(); } }

Após assistir aos vídeos, não podemos deixar de inserir um elemento importante nesse contexto: os construtores, assunto que você conhecerá melhor no próximo tópico.

Construtores

Quando nos referimos a construtores, analisamos um método que faz um laço entre classe e objeto. Observe o código abaixo que traz o funcionamento do construtor.

class Carro
{
public string Nome; 
public string Marca;
public double Potencia; 
1 referência 
public Carro(string nome, string marca, double potencia)
{
Nome = nome; 
Marca = marca; 
Potencia = potencia;
}
1 referência 
public Carro()
{
}
}
0 referências 


class Construtor
{
0 referências
static void Main(string[] args)
{
var carro = new Carro();
carro.Nome = "Hilux"; 
carro.Marca = "Toyota"; 
carro.Potencia = 3.1; 
Console.WriteLine($"{ carro.Nome} { carro.Marca} { carro. Potencia}");
var carro2 = new Carro("Celta","Chevrolet",1.0);
Console.WriteLine($"{carro2.Nome} {carro2.Marca} {carro2.Potencia}");
}

}

Fizemos a criação de um objeto por método tradicional, realizando a determinação dos parâmetros um a um, assim como está no início do nosso main, mas considerando a criação do construtor “Carro” para receber os parâmetros. Nesse caso, os atributos do construtor iniciam com letra minúscula, tornando-o diferente dos atributos já determinados anteriormente.
Portanto, é possível compreender que o segundo carro é chamado pelo construtor. Então, temos duas formas de trabalhar, sendo que o construtor fez exatamente o papel esperado: a ligação entre classe e objeto.

Para dar continuidade aos seus estudos, no próximo tópico, você verá sobre os elementos estáticos.

Elementos estáticos

Você conhece os elementos estáticos? Sabe como eles funcionam? Acompanhe o slide na sequência para entender como são aplicados!

O conceito de estático se aplica tanto aos métodos quanto aos atributos. Ao analisarmos os exemplos dos códigos utilizados até aqui, percebemos a presença da palavra static, que representa os elementos estáticos.

#pracegover: Um homem e uma mulher estão em frente a uma tela de um computador. Ele está à direita com uma camisa azul apontando para tela e ela está à esquerda com uma camisa preta digitando, sendo que ambos estão comentando sobre códigos de programação.

O fato de termos um método estático nos faz com que seja possível obter o acesso diretamente, sem precisarmos criar uma nova instância, ou seja, não será necessária a criação de uma instância para a chamativa da classe.

#pracegover: As mãos de um programador, segurando uma caneta, interagindo com a tela de um notebook que contém linhas de código de programação.

Verifique no código a seguir que conseguimos chamar a classe “MetodosEstaticos” no main, para a realização da multiplicação sem a necessidade de termos que criar um objeto.

Elementos estáticos

class MetodosEstaticos
{
1 referência 
public static int somar (int x, int y)
{
return x + y;
}
1 referência 
public static int multiplicar (int x, int y)
{
return x * y;
}
0 referências 
static void Main(string[] args)
{
var result = MetodosEstaticos.somar (3, 3); 
Console.WriteLine("A soma é igual a: {0}", result);

Console.WriteLine(MetodosEstaticos.multiplicar(3, 4));
}
}

Agora, observe no próximo código que, se excluirmos a determinação static do método multiplicar, será necessária a criação de uma instância. Nesse caso, devemos criar calc para ter acesso ao método “multiplicar”.

Criando uma instância

class MetodosEstaticos
{
1 referência 
public static int somar (int x, int y)
{
return x + y;
}
1 referência 
public static int multiplicar (int x, int y)
{
return x * y;
}
0 referências 
static void Main(string[] args)
{
var result = MetodosEstaticos.somar (3, 3); 
Console.WriteLine("A soma é igual a: {0}", result);
 
MetodosEstaticos cal = new MetodosEstaticos();
Console.WriteLine(MetodosEstaticos.multiplicar(3, 4));
}
}

O mesmo conceito se aplica aos atributos estáticos, em que, caso seja atribuída a característica de estático ao atributo, este passará a se referir à classe como um todo, deixando de ser uma instância específica.

Depois de você entender os conceitos de elementos estáticos, principalmente, em relação à sua capacidade de dispensar a criação de uma instância para a chamativa da classe, você estudará no próximo tópico sobre os parâmetros variáveis.

Parâmetros variáveis

No contexto da Linguagem C#, quando estamos elaborando uma linha de código, existem os parâmetros, isto é, elementos que passam a obter um valor pelos programadores, os quais podem detalhar os parâmetros separadamente para cada método diferente, no caso, os argumentos, ou seja, o valor atribuído a um parâmetro no momento em que se chama o procedimento.

Já os parâmetros variáveis trazem a possibilidade de passarmos quantos parâmetros desejarmos, e a linguagem agrupará essas variáveis.

Veja no código abaixo que utilizamos a função da linguagem C#, denominada de params, para estabelecermos a criação desse parâmetro variável. Além disso, incluímos o foreach com o objetivo de realizar a varredura enquanto houver nomes disponíveis para expor na tela.

Parâmetros variáveis

1 referência 
public static void Despedida (params string [] alunos)
{
foreach (var aluno in alunos)
{
Console.WriteLine("Tchau {0}, até a próxima aula", aluno);
}
}

0 referências 
static void Main()
{
Despedida("Joao", "Thiago", "Antonio");
}

Nesse sentido, enviamos para o método “Despedida” mais de uma variável, sendo que todas foram agrupadas em “alunos”.

O resultado desse algoritmo é mostrado no código ao lado. Observe que todas as variáveis criadas no main foram apresentadas na tela.

Além dos parâmetros variáveis, ainda temos os tipos get e set, que você estudará na sequência. Vamos lá!

Get e set

Até esse ponto você aprendeu que a criação de atributos do tipo public faz com que eles sejam visíveis para todos. O contrário também é válido, ou seja, se criarmos atributos do tipo private, eles serão visíveis apenas para o método.

No código a seguir, note como o termo é feito para a utilização dos métodos get e set, conforme você estudou até o momento.

Método get e set

public class Carro
{
private string Marca; 
private string Nome; 
private double Potencia;

1 referência public Carro(string marca, string nome, double potencia)
{
Marca - marca; 
Nome = nome; 
Potencia - potencia;
}
0 referências 
public Carro()
{

}
1 referencia 
public string GetMarca()
{
return Marca;
}
0 referências 
public void SetMarca(string marca)
{
Marca = marca;
}
1 referência 
public string GetNome()
{
return Nome;
}

Perceba que foi criada a classe “Carro”, com os atributos do tipo private — que serão acessados pelos métodos get e set — e, posteriormente, foi criado o construtor. No código, demonstramos a criação dos métodos get e set para o atributo “Marca”, mas o procedimento é realizado para os três atributos.

Neste tópico, você estudou sobre um tipo específico de parâmetro variável, o get e set, cuja função é atribuir a característica “private” a um método específico. Já a seguir, estudaremos as enumerações, enums, recurso usado para as variáveis incomuns presentes na linguagem C#.

Enumerações

Em determinados momentos, é necessário realizarmos a representação de alguma variável que não se encaixa nos tipos comuns, como string ou int. Dessa forma, criamos os enums, que como a própria abreviação nos revela, serve para indicar enumerações de atributos. Observe no código!

Enumeração

class Enum 
{
2 referências 
public enum Genero { Filme, Serie, Documentario};

0 referências 
public class Filme
{
public string Nome; 
public Genero TipoVideo;
}

0 referências 
static void Main()
{
int cod = (int)Genero.Serie; 
Console.WriteLine(cod);

}

Note que ele apresenta um exemplo de enumeração realizada para a designação de um vídeo. É importante observar que, no main, é feita a conversão de string para int. O valor que retornará para a tela será a posição do tipo “serie”, tendo valor igual a “1”, uma vez que a enumeração começa a contar de “0”.

Depois de estudar sobre as enumerações, as quais estão relacionadas a variáveis incomuns, você verá os conceitos de structs e classes.

Structs e classes

Antes de continuarmos nossos estudos, é importante reforçarmos a diferença entre dois conceitos: struct e classe.

Isso se justifica, porque ambos influenciam na elaboração das linhas de código, principalmente, quando você, futuro programador, estiver trabalhando com a criação de estrutura de dados.

Sabendo disso, veja nos cards a principal diferença entre eles.

Struct

A atribuição é sempre feita por valor, e não por referência.

Classe

A atribuição é realizada por referência.

No código a seguir, foram criadas uma struct e uma classe com os mesmos parâmetros, a fim de verificarmos na prática essa diferença. Observe com atenção!

Struct e classe (comparação)

class StructClasse
{
2 referencias 
public struct PontoS
{
public int X; 
public int Y;
}
2 referências 
public class Pontoc
{
public int X; 
public int Y;
}
0 referencias 
public static void Main()
{
PontoS ponto = new Pontos { X = 5, Y = 3 }; 
PontoS ponto2 = ponto; // Copiar através do valor; 
ponto.X = 3;

Console.WriteLine("Ponto: {0}", ponto.x); 
Console.WriteLine("Ponto 2: {0} ", ponto2.x);

Pontoc ponto3 = new Pontoc { x = 6, Y = 9 }; 
Pontoc ponto4 = ponto3; 
ponto3.X = 3;

Console.WriteLine("Ponto 3 = {0} , Ponto 4 - {1}", ponto3.x, ponto4.x);
}
}

Note que, ao fazer a resolução do algoritmo, no caso da struct, os valores não são iguais, ou seja, mesmo que tenhamos criado uma cópia do ponto, ao modificar um, não se observará a mesma modificação no outro. Esse fato, por outro lado, já não é observado para o caso da utilização da classe.

Até aqui, você conheceu a principal diferença entre struct e classe na linguagem C#. Conforme falamos, saber a distinção entre ambos é relevante, uma vez que isso influencia na criação de linhas de códigos as quais possibilitam a elaboração e o uso de estruturas de dados mais eficazes e eficientes.

A seguir, você verá sobre a maneira pela qual é possível aplicar a referência dentro do contexto de parâmetros.

Vamos lá?

Parâmetros por referência

Neste tópico, veremos como utilizar uma referência ou cópia de um valor, o que dependerá da maneira como você deseja criar a chamada da variável. Observe o código com atenção:

1 referência 
public static void AlterarRef (int numero)
{
numero = numero + 500;
}
1 referência 
public static void AlterarOut(int numero)
{
numero = numero + 50;
}

0 referências 
public static void Main()
{
int x = 5; 
AlterarRef(x); 
Console.WriteLine(x);

int y = 8; 
AlterarOut(y); 
Console.WriteLine(y);

}

Note que os valores que utilizamos ao fazer a chamativa dos métodos faz uma cópia das variáveis “x” e “y”. Com isso, ela não será alterada. Logo, os valores impressos na tela serão “5” e “8”, pois não foi transmitida a referência, mas sim, a cópia da variável.

public static void AlterarRef (ref int numero)
{
numero = numero + 500;
}
1 referência public static void AlterarOut(int numero)
{
numero = 0; 
numero = numero + 50;
}
O referências 
public static void Main()
{
int x = 5; 
AlterarRef(ref x); 
Console.WriteLine(x);

int y = 8; 
AlterarOut(y); 
Console.WriteLine(y);

}

Observe, ainda, que existe a possibilidade de fazermos a passagem das variáveis como referências. Verifique que a variável “x” está sendo passada como referência, portanto, os valores que serão impressos na tela ao compilar o algoritmo serão “505” e “8”.

Assim como temos o parâmetro por referência, também existe o parâmetro padrão, que você estudará a seguir.

Parâmetro padrão

O parâmetro padrão, como o próprio nome indica, está relacionado ao padrão que será atribuído para determinada variável, caso nenhum valor seja concedido a ela. Vamos analisar um exemplo?

Veja o caso a seguir:

01. public static double Multiplica(double x = 3.4 , double y = 3){
02. return x * y;
03. }

Nesse exemplo, foram inseridos valores padrões para as variáveis “x” e “y”, os quais são iguais a “3,4” e “3”, respectivamente. Esses valores podem ser modificados em algum momento, mas, caso não haja alterações durante o decorrer do código, o valor padrão será mantido.

Atenção

Lembre-se! A utilização desses valores padrões não se aplica para o uso de “ref” ou “out”.

Parabéns! Você chegou ao final do módulo 1.

Neste módulo, você conheceu os conceitos fundamentais para a aplicação da linguagem C#, que são relevantes para o seu futuro profissional, como, por exemplo, na programação orientada a objetos, a qual é muito usada em situações de desenvolvimentos de softwares personalizados de acordo com as futuras demandas.

A respeito desses conceitos iniciais, vamos estudar um pouco mais sobre a programação orientada a objeto? Será o assunto do próximo módulo.

Selecione o botão “Avançar” e confira!