• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

will09

Alguns programas básicos para quem quer aprender

24 mensagens neste tópico

Um simples programa para somar dois nums.

using System;

class Hello
{
   static void Main()
   {
   int num1;
   int num2;
   int soma;

   Console.WriteLine("Digite o primeiro numero!");
   num1 = int.Parse(Console.ReadLine());
   Console.WriteLine("Digite o segundo numero!");
   num2 = int.Parse(Console.ReadLine());
   soma=num1+num2;
   Console.WriteLine("A soma DOs Dois Numeros e de {0}",soma);
   Console.Write("Thank yoU ... Developed By wiLL\n");
   Console.Read();
   }
}

Um programa que faz a tabuada do 2 e do 3

using System;

public class taboada2
{
   public static void Main()
   {
   Console.WriteLine("\t\t░░░░░▒▒▒▒▒▒▒▓▓▓ Produced by wiLL ▓▓▓▒▒▒▒▒▒▒░░░░░");

   Console.WriteLine("┌─────────────┐");
   Console.WriteLine("│Tabuada do 2 │");
   Console.WriteLine("└─────────────┘");
   for (int i=1;i<=10;i++)
   {
   Console.WriteLine("2*{0}={1}",i,2*i);
   }

   Console.Read();

   Console.WriteLine("+-------------+");
   Console.WriteLine("¦Tabuada do 3 ¦");
   Console.WriteLine("+-------------+");
   for (int i=1;i<=10;i++)
   {
   Console.WriteLine("3*{0}={1}",i,3*i);
   }

   Console.Read();
   Console.Read();
   }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A sintaxe pelos vistos é identica ao C só usa umas funções com nomes difrentes :P

Mas já agora quais são as verdadeiras vantagem do C# em relação ao C/C++ e já agora a sua portabilidade (linux/windows)

Sorry o trabalho mas é sempre bom para a cultura geral :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

C# (pronunciada "C Sharp"), é uma nova linguagem de programação, da plataforma .NET, derivada de C/C++, simples, moderna, orientada à objetos e fortemente tipada (type-safe). C# possui o poder do C/C++ aliado a alta produtividade do Visual Basic.

C# será distribuído juntamente com Microsoft Visual Studio 7.0(Visual Studio.NET), e providenciará acesso a toda a plataforma do Next Generation Windows Services(NGWS), que incluem uma poderosa biblioteca de classes e um mecanismo de execução comum.

C# é a linguagem nativa para .NET Common Language Runtime(CLR), mecanismo de execução da plataforma .NET. Isso possibilita a convivência com várias outras linguagens especificadas pela Common Language Subset (CLS). Por exemplo, uma classe base pode ser escrita em C#, derivada em Visual Basic e novamente derivada em C#.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois por isso é k o modo de escrita do código é algo parecida com o vb.net

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epa eu sou da mesma turma do will o setor e um cromo :smoke: mas ja fizemos programas complexos. :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ariops: +- parecisda muda umas cenas :D, mas se vires bem tb e td da msm platafrona .net logo nao podem variar mto.

força... se poderes desponibliza manuais k o prof diga e assim aki para o ppl

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Escreves tanto código para fazer um simples 2+2?

Isso poderia ser muito mais reduzido... :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Escreves tanto código para fazer um simples 2+2?

Isso poderia ser muito mais reduzido... :thumbsup:

POIS mas para principiantes o codigo tem k ser mais compreensivel!

é mais facil de aprender uma linguagem se ela estiver mais claramente compreensivel!

CUMPs

"As vezes é melhor estar calado do k dizer besteiras..." Think abaout it...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um programico para procurar um aluno dentro de uma turma!  :cheesygrin:

Custou max está feito... Já me tinha esquecido da matrizes  :wallbash:

using System;

public class locaturma
{
public static void Main() 
{

char op;
do
{
Console.WriteLine("PROGRAMA PARA ACHAR A POSICAO DE ALUNOS DENTRO DE UMA TURMA (array)\n");
// 186 ¦   179 ¦   200 +   203 -   206 +   205 -    204 ¦    196 -
Console.WriteLine("╔══╦══╦══╦══╦══╦══╦══╗");
Console.WriteLine("║  ║0c│1c║2c│3c║4c│5c║");
Console.WriteLine("╠══╠══│══╬══│══╬══│══╣");
Console.WriteLine("║0f║21│X ║18│24║1 │4 ║");
Console.WriteLine("║──║──│──║──│──║──│──║");
Console.WriteLine("║1f║9 │23║2 │22║15│13║");
Console.WriteLine("║──║──│──║──│──║──│──║");
Console.WriteLine("║2f║8 │7 ║17│3 ║10│12║");
Console.WriteLine("║──║──│──║──│──║──│──║");
Console.WriteLine("║3f║20│11║19│5 ║14│6 ║");
Console.WriteLine("╚══╩══╩══╩══╩══╩══╩══╝");
Console.WriteLine("0f = Primeira fila");
Console.WriteLine("0c = Primeira Coluna");

int i=0;
int j=0;
int num_aluno;

int[,] turma = new int[,]{{21,0,18,24,1,4},
                                                            {9,23,2,22,15,13},
	                  {8,7,17,3,10,12},
	                  {20,11,19,5,14,6}};


Console.WriteLine("\n\nDigite o num do aluno que quer pesquizar");
num_aluno =int.Parse(Console.ReadLine());
bool achei = false;

if (num_aluno<=24 & num_aluno>=1)
{
	for (i=0; i<=3; i++)
	{
		for (j=0; j<=5; j++)
		{
			if (num_aluno == turma[i,j])
			{
				achei = true;
			}
		}
	}
}

if (achei) 
{
	Console.WriteLine("\t\t┌──────------------------------------------------┐");
	Console.WriteLine("\t\t│ O Aluno nº {0} esta na fila {1} coluna {2} ",num_aluno,i,j);
	Console.WriteLine("\t\t└------------------------------------------------┘\n");
}
else
{
	Console.WriteLine("\n\t\t\t ☻ Introduza um numero de aluno válido ☻\n");
}

Console.WriteLine("Deseja repetir o programa s/n");
op=char.Parse(Console.ReadLine());
}
while (op=='s');
}	
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
using System;
using System.Collections;

public class formularesol
{
static int a,b,c;

static double FR1(int a, int b,int c)
{
double valor_raiz= (b*b)-(4*a*c);		// b2 - 4ac
double raiz=Math.Sqrt(valor_raiz);		// Raiz(b2 - 4ac)
double numerador= -b+raiz;				// -b + Raiz(b2 - 4ac)
double resultado= numerador/(2*a);		// -b + Raiz(b2 - 4ac) / (2*a)
return resultado;
}

static double FR2(int a, int b,int c)
{
double valor_raiz= (b*b)-(4*a*c);		// b2 - 4ac
double raiz=Math.Sqrt(valor_raiz);		// Raiz(b2 - 4ac)
double numerador= -b-raiz;				// -b - Raiz(b2 - 4ac)
double resultado= numerador/(2*a);		// -b - Raiz(b2 - 4ac) / (2*a)
return resultado;
}

public static void Main()
{

Console.WriteLine("\n\t\tPROGRAMA PARA CALCULAR UMA RAIZ QUADRADA\n\n");

Console.WriteLine("\t-b+Raiz(b2 - 4ac)");
Console.WriteLine("x=_______________________");
Console.WriteLine("\t2*a");

Console.WriteLine("\n\nIntroduza o valor de a ");
a = int.Parse(Console.ReadLine());
Console.WriteLine("Introduza o valor de b ");
b = int.Parse(Console.ReadLine());
Console.WriteLine("Introduza o valor de c ");
c = int.Parse(Console.ReadLine());
Console.WriteLine("\nO resultado e de {0:0.0000} e {1:0.0000}",FR1(a,b,c),FR2(a,b,c));
Console.WriteLine("\n\n\t\tProduced by wiLL , Mess with the best .. Die Like the Rest");
Console.ReadLine();
}
}
Mais um programico para calcular a formula resolvente...

Para quem começa a aprender!

PEACE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

will09 eu estive a brincar com o teu programa e tens que ter atenção, que quando temos b^2-4ac<0 é impossivel resolver!! e deves mandar dar 1 mensagem de erro, tipo: as  soluções neste caso nao sao reais! (vao ser complexas....)  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Codifo fonte do programa calculadora :thumbsup:

agora com todas as funçoes de uma normal lolol :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, apresento aqui um pequeno código que fiz usando o conceito poo, classes! é mesmo mto simples...  :P

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {   int num,r=1;
    string nome,aux;

            Empregado E = new Empregado("Sara",23);
            E.MostraInformacao();
           
            
            Empregado Ep;

           Ep = new Empregado();
           Ep.setnome( "tofas");
           Ep.setidade(7);
            Console.WriteLine("\t O empregado {0} tem {1} anos\n",Ep.getnome(), Ep.getidade() );


		while(r==1) // ciclo para ir pedindo info dos empregados
		{  
		   
			Console.WriteLine("\t Introduza um nome\n");
			nome= Console.ReadLine();	

		       Console.WriteLine(" \tIntroduza a idade\n");
			num = int.Parse(Console.ReadLine());	

			Empregado Eexemplo= new Empregado(nome,num);
                        Eexemplo.MostraInformacao();


			Console.WriteLine("\tDeseja sair(s)? Para continuar qualquer tecla. \n");
			aux=Console.ReadLine();	

			if( aux=="s" || aux=="S")
			{
			  r=0;
			  Console.WriteLine("\tXau....Prima enter\n ");
			  Console.ReadLine();	
			}


		}
        }
    }

    class Empregado
    {
        private string Nome; // Nome da pessoa
        private int Idade; // Idade da pessoa

        public Empregado() { }
        // Construtor: inicializa os elementos internos de um objecto
        public Empregado(string nomeDaPessoa, int idadeDaPessoa)
        {
            Nome = nomeDaPessoa;
            Idade = idadeDaPessoa;
        }

          // recebe o nome
          public void  setnome(String nomep)
          {
             Nome = nomep;
          }
          
          // devolve o nome
          public String getnome()
          {
             return Nome;
          }
          
          // recebe a idade
          public void  setidade(int idadep)
          {
             Idade = idadep;
          }
          
          // devolve a idade
          public int  getidade()
          {
             return Idade;
          }

        

        // Mostra a informação sobre a pessoa
        public void MostraInformacao()
        {
            Console.WriteLine("\t O empregado {0} tem {1} anos", Nome, Idade);
        }
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, apresento aqui um pequeno código que fiz usando o conceito poo, classes! é mesmo mto simples...  :D

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {   int num,r=1;
    string nome,aux;

            Empregado E = new Empregado("Sara",23);
            E.MostraInformacao();
           
            
            Empregado Ep;

           Ep = new Empregado();
           Ep.setnome( "tofas");
           Ep.setidade(7);
            Console.WriteLine("\t O empregado {0} tem {1} anos\n",Ep.getnome(), Ep.getidade() );


		while(r==1) // ciclo para ir pedindo info dos empregados
		{  
		   
			Console.WriteLine("\t Introduza um nome\n");
			nome= Console.ReadLine();	

		       Console.WriteLine(" \tIntroduza a idade\n");
			num = int.Parse(Console.ReadLine());	

			Empregado Eexemplo= new Empregado(nome,num);
                        Eexemplo.MostraInformacao();


			Console.WriteLine("\tDeseja sair(s)? Para continuar qualquer tecla. \n");
			aux=Console.ReadLine();	

			if( aux=="s" || aux=="S")
			{
			  r=0;
			  Console.WriteLine("\tXau....Prima enter\n ");
			  Console.ReadLine();	
			}


		}
        }
    }

    class Empregado
    {
        private string Nome; // Nome da pessoa
        private int Idade; // Idade da pessoa

        public Empregado() { }
        // Construtor: inicializa os elementos internos de um objecto
        public Empregado(string nomeDaPessoa, int idadeDaPessoa)
        {
            Nome = nomeDaPessoa;
            Idade = idadeDaPessoa;
        }

          // recebe o nome
          public void  setnome(String nomep)
          {
             Nome = nomep;
          }
          
          // devolve o nome
          public String getnome()
          {
             return Nome;
          }
          
          // recebe a idade
          public void  setidade(int idadep)
          {
             Idade = idadep;
          }
          
          // devolve a idade
          public int  getidade()
          {
             return Idade;
          }

        

        // Mostra a informação sobre a pessoa
        public void MostraInformacao()
        {
            Console.WriteLine("\t O empregado {0} tem {1} anos", Nome, Idade);
        }
    }
}

tofas... Tomei a liberdade de alterar o teu código na medida em que ele passou a usar propriedades em vez de métodos distintos para alterar ou retornar os atributos Nome e Idade...

Aqui está ele....

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {   
            int num,r=1;
    string nome,aux;

            Empregado E = new Empregado("Sara",23);
            E.MostraInformacao();
           
            
            Empregado Ep;

           Ep = new Empregado();
           Ep.Nome = "Tofas";
           Ep.Idade = 23;
            Console.WriteLine("\t O empregado {0} tem {1} anos\n",Ep.Nome, Ep.Idade);


		while(r==1) // ciclo para ir pedindo info dos empregados
		{  
		   
			Console.WriteLine("\t Introduza um nome\n");
			nome = Console.ReadLine();	

		        Console.WriteLine(" \tIntroduza a idade\n");
			num = int.Parse(Console.ReadLine());	

			Empregado Eexemplo= new Empregado(nome,num);
                        Eexemplo.MostraInformacao();


			Console.WriteLine("\tDeseja sair(s)? Para continuar qualquer tecla. \n");
			aux=Console.ReadLine();	

			if( aux=="s" || aux=="S")
			{
			  r=0;
			  Console.WriteLine("\tXau....Prima enter\n ");
			  Console.ReadLine();	
			}


		}
        }
    }

    class Empregado
    {
        private string nome; // Nome da pessoa____Alterei o nome destes atributos para lowercase. Assim as propriedades ficam com nomes mais decentes.
        private int idade; // Idade da pessoa

        public Empregado() {}
        // Construtor: inicializa os elementos internos de um objecto
        public Empregado(string nomeDaPessoa, int idadeDaPessoa)
        {
            Nome = nomeDaPessoa;
            Idade = idadeDaPessoa;
        }

          // Propriedade que altera ou retorna o atributo Nome
          public string Nome
          {
             get {return this.nome;}
     set {this.nome = value;}
          }
          
          // Propriedade que altera ou retorna o atributo Idade
          public int Idade
          {
              get {return this.idade;}
              set {this.idade = value;}
          }
             

        // Mostra a informação sobre a pessoa
        public void MostraInformacao()
        {
            Console.WriteLine("\t O empregado {0} tem {1} anos", Nome, Idade);
        }
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem tou confuso ?!

Entao eu sei que não se comparar assim tao paralelamete as linguagens ... mas em termos de velocidade de compilção, portabilidade... essas cenas ouse ja no final de contas, qual é melhor Visual C++ ou C# ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


class Empregado
    {
        private string nome; // Nome da pessoa____Alterei o nome destes atributos para lowercase. Assim as propriedades ficam com nomes mais decentes.
        private int idade; // Idade da pessoa

        public Empregado() {}
        // Construtor: inicializa os elementos internos de um objecto
        public Empregado(string nomeDaPessoa, int idadeDaPessoa)
        {
            Nome = nomeDaPessoa;
            Idade = idadeDaPessoa;
        }

Tirem-me uma duvida sff ...

Nesta parte do código mostrada em cima não existe nenhum erro ? É que temos as variáveis de instância em minúsculas e  dentro do construtor estamos a atribuir valores ás variáveis de instância mas estas estão em maiúsculas.

Segundo o que sei também é bastante recomendado se utilizar o this.nome ... para assim se ter a certeza que se está a trabalhar com as variáveis de instância.

Corrijam-me se estou errado pff.

Cumps :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tirem-me uma duvida sff ...

Nesta parte do código mostrada em cima não existe nenhum erro ? É que temos as variáveis de instância em minúsculas e  dentro do construtor estamos a atribuir valores ás variáveis de instância mas estas estão em maiúsculas.

Sim tens razão ele enganou-se. As variáveis são case-sensitive...

Quanto ao this, é mais usado quando as variáveis de instância têm o mesmo nome que as do método modificador. Se forem diferentes não há problema nenhum em não utilizar o this.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

public int Idade
          {
              get {return this.idade;}
              set {this.idade = value;}
          }

Viva,

alguém que me possa explicar esta propriedade ?

Não estou a perceber o que esta faz, não filtra dados nem coisa parecida ...

Cumps :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

public int Idade
          {
              get {return this.idade;}
              set {this.idade = value;}
          }

Viva,

alguém que me possa explicar esta propriedade ?

Não estou a perceber o que esta faz, não filtra dados nem coisa parecida ...

Cumps :P

Isso é para poderes alterar ou aceder ao conteúdo dessa variável a partir de fora.

Por exemplo:

Empregado emp = new Empregado();

emp.Idade = "10";
Console.WriteLine("Agora o empregado tem {0} anos.", emp.Idade);

Como estão declarados como private na siua classe só dessa maneira se pode alterar/aceder.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é verdade, mas imaginando esta situação...

 Empregado emp = new Empregado();

emp.Idade = "200";
Console.WriteLine("Agora o empregado tem {0} anos.", emp.Idade); 

O que vai acontecer é que vai ser guardado o valor 200 mesmo que isso não possa acontecer e parte daqui a minha duvida, ter uma propriedade que não filtre dados ou ter as variáveis como public vai dar ao mesmo, em ambas as situações pode ser "espetado" qualquer valor nas variáveis.

Cumps :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

class Empregado
    {
        private string nome; // Nome da pessoa____Alterei o nome destes atributos para lowercase. Assim as propriedades ficam com nomes mais decentes.
        private int idade; // Idade da pessoa

        public Empregado() {}
        // Construtor: inicializa os elementos internos de um objecto
        public Empregado(string nomeDaPessoa, int idadeDaPessoa)
        {
            Nome = nomeDaPessoa;
            Idade = idadeDaPessoa;
        }

Tirem-me uma duvida sff ...

Nesta parte do código mostrada em cima não existe nenhum erro ? É que temos as variáveis de instância em minúsculas e  dentro do construtor estamos a atribuir valores ás variáveis de instância mas estas estão em maiúsculas.

Não existe. Porque se vires o resto do código são usadas propriedades.

Esse Nome e essa Idade é as chamadas à parte set das respectivas propriedades.

Sim é verdade, mas imaginando esta situação...

 Empregado emp = new Empregado();

emp.Idade = "200";
Console.WriteLine("Agora o empregado tem {0} anos.", emp.Idade); 

O que vai acontecer é que vai ser guardado o valor 200 mesmo que isso não possa acontecer e parte daqui a minha duvida, ter uma propriedade que não filtre dados ou ter as variáveis como public vai dar ao mesmo, em ambas as situações pode ser "espetado" qualquer valor nas variáveis.

Não vai dar ao mesmo. Se declarares um variável como pública estás a perder modularidade, extensibilidade, etc... essas características porreiras da POO. Usando o exemplo da Idade do empregado.

Por acaso no código inicial era Int e não String e o código que tens aí daria erro, mas vamos fazer de conta que era realmente uma String.

Imaginemos que estamos a usar esta classe em muitos dos teus projectos. E que agora estás a trabalhar num super-mega-hyper-projecto e reparas que o facto de a idade estar em string está a prejudicar a performance do mesmo (yep, uma desculpa fraquinha mas serve para motivo de exemplo). E então decides alterar a idade de String para Int. Mas como tinhas a variável pública, estás a ver o problema certo? Tinhas que ir a todo o teu código e alterar onde interagia com a idade para passar a ser Int. E ainda tinhas os problemas relacionados com os teus outros projectos mais antigos em que tinhas que alterar o código ou então manter 2 versões da classe Empregados, o que também não é boa ideia.

Agora se a variável fosse privada e se uma pessoa tivesse usado métodos ou propriedades já não haveria problema. Imaginando que era as propriedades:

public String Idade {
   get { return this.idade; }
   set { this.idade = value;}
}

Na altura de mudar a idade para Int ficavam:

public String Idade {
   get { return this.idade.ToString(); }
   set { this.idade = Int32.Parse(value); }
}

// E também adicionavas a propriedade para trabalhar logo directamente com Ints
public int IdadeInt {
   get { return this.idade; }
   set { this.idade = value;}
}

Neste caso todo o teu código continuaria a funcionar. E agora se quisesses podias ir e por a usar IdadeInt em vez de Idade ou podias deixar como está. A ideia a reter é que deixava de ser desnecessário uma avaliação de todo o código, tanto do projecto com que estás a trabalhar como com os outros projectos que usam também esta classe.

Claro que a pergunta que puseste sobre não haver uma restrição também é válida. E também um bom motivo para as variáveis não serem públicas, uma pessoa nem sempre se lembra de todas as restrições a serem implementadas e às vezes só se notam casos quando o código já vai mais avançado. Por propriedades ou métodos podes sempre adicionar uma restrição sem ser necessário ao resto do código ter conhecimento.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não existe. Porque se vires o resto do código são usadas propriedades.

Esse Nome e essa Idade é as chamadas à parte set das respectivas propriedades.

Não sabia que se podia fazer directamente a partir do construtor, eu faço assim:

public Empregado(string nomeDaPessoa, int idadeDaPessoa)
        {
            nome = nomeDaPessoa;
            idade = idadeDaPessoa;
        }

        // Propriedade que altera ou retorna o atributo Nome
        public string Nome
        {
            get { return this.nome; }
            set { this.nome = value; }
        }

        // Propriedade que altera ou retorna o atributo Idade
        public int Idade
        {
            get { return this.idade; }
            set { this.idade = value; }
        }

Estou a fazer mal ? Qual a diferença entre as duas maneiras ?

Não vai dar ao mesmo. Se declarares um variável como pública estás a perder modularidade, extensibilidade, etc... essas características porreiras da POO. Usando o exemplo da Idade do empregado.

Por acaso no código inicial era Int e não String e o código que tens aí daria erro, mas vamos fazer de conta que era realmente uma String.

Imaginemos que estamos a usar esta classe em muitos dos teus projectos. E que agora estás a trabalhar num super-mega-hyper-projecto e reparas que o facto de a idade estar em string está a prejudicar a performance do mesmo (yep, uma desculpa fraquinha mas serve para motivo de exemplo). E então decides alterar a idade de String para Int. Mas como tinhas a variável pública, estás a ver o problema certo? Tinhas que ir a todo o teu código e alterar onde interagia com a idade para passar a ser Int. E ainda tinhas os problemas relacionados com os teus outros projectos mais antigos em que tinhas que alterar o código ou então manter 2 versões da classe Empregados, o que também não é boa ideia.

Agora se a variável fosse privada e se uma pessoa tivesse usado métodos ou propriedades já não haveria problema. Imaginando que era as propriedades:

public String Idade {
   get { return this.idade; }
   set { this.idade = value;}
}

Na altura de mudar a idade para Int ficavam:

public String Idade {
   get { return this.idade.ToString(); }
   set { this.idade = Int32.Parse(value); }
}

// E também adicionavas a propriedade para trabalhar logo directamente com Ints
public int IdadeInt {
   get { return this.idade; }
   set { this.idade = value;}
}

Neste caso todo o teu código continuaria a funcionar. E agora se quisesses podias ir e por a usar IdadeInt em vez de Idade ou podias deixar como está. A ideia a reter é que deixava de ser desnecessário uma avaliação de todo o código, tanto do projecto com que estás a trabalhar como com os outros projectos que usam também esta classe.

Percebi bastante bem com essa explicação, 5 estrelas Betovsky.

Claro que a pergunta que puseste sobre não haver uma restrição também é válida. E também um bom motivo para as variáveis não serem públicas, uma pessoa nem sempre se lembra de todas as restrições a serem implementadas e às vezes só se notam casos quando o código já vai mais avançado. Por propriedades ou métodos podes sempre adicionar uma restrição sem ser necessário ao resto do código ter conhecimento.

Obrigado pelo esclarecimento.  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a fazer mal ? Qual a diferença entre as duas maneiras ?

Não estás a fazer nada de mal. Nesse caso é um pouco indiferente, já que a lógica está centrada no mesmo sítio, ou seja, na própria classe.

Normalmente quando tenho propriedades como essas associadas a variáveis da classe, costumo usar a propriedade no construtor. Assim a lógica está centrada num sítio, ou seja na propriedade, e imaginemos que queres adicionar uma restrição assim só adicionas em 1 lado, na propriedade, em vez de teres que adicionar na propriedade e no construtor. Mas isto é mesmo mais uma questão de gostos e preferências, não é propriamente um caso mau.

De notar, que se usares propriedades no construtor irás ter mais uma penalidade em termos de performance, mas que na maioria dos casos é insignificante.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora