Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Classe é um tipo de variável??

Fiquei muito na dúvida nesta questão nos seguintes quesitos, a letra B, diz o seguinte: "A variável responsável por armazenar nosso objeto não foi inicializada." Achei estranho essa alternativa, porque, eu estava pensando que "Class!=Variável", ou seja, seria mais adequado colocar na letra B, desta maneira: "A Classe responsável por armazenar nosso objeto não foi inicializada."

Na minha concepção, a variável foi inicializada, é a variável "conta". Entendo que foi incializada uma váriavel do tipo "ContaCorrente" que nem foi definida, isso gerou o erro. Enfim, o que vocês acham disso?

5 respostas

Fala Paulo, tranquilo?

Realmente variável é diferente de classe. Mas a própria definição de variável nos diz que uma variável é um espaço na memória do computador destinado a um dado que é alterado durante a execução do algoritmo. Então no caso da questão, "conta" é uma variável do tipo "ContaCorrente", igual você mencionou, já que uma variável pode ser do tipo inteiro, double, string..., só que aqui no exemplo ela não foi inicializada. No caso pra ficar correto seria:

ContaCorrente conta = ContaCorrente();

Não é que a classe não foi inicializa, provavelmente ela já foi definida no programa, só não foi relevante mostrar a classe nesse trecho do código da questão. Então, realmente "conta" é uma variável que vai armazenar o objeto do tipo "ContaCorrente", ela foi criada no programa, só não foi inicializada.

Vou fazer um outro exemplo pra ver se fica mais claro.

Integer num1;
Integer num2 = 10;

No código foi criado dois inteiros, mas só o inteiro "num2" foi inicializado. Se eu tentar imprimir "num1" pode dar erro ou mostrar um valor aleátorio, já que não foi inicializado com um valor antes.

Deu pra entender? Qualquer coisa é só falar ;)

Entendi perfeitamente. Achei que o erro era atribuir "conta" como classe "ContaCorrente" sem definir esta classe. De qualquer forma, agora, entendi o cerne da questão, que é a ausência do "= ContaCorrente();"

Entretanto, fiquei com outra dúvida, sobre esta expressão: "ContaCorrente conta = ContaCorrente();", isto seria um pouco reduntante? Eu sei que só vai funcionar se for desta maneira, mas quando eu crio uma variável "conta" do tipo "ContaCorrente" já não está claro a inteção do programador? Tipo, eu estava apredendo Python e, nesta linguagem, seria necessário apenas o "conta = ContaCorrente()". Em suma, qual a vantagem de criar uma variável e não inicializa-lá? Tem algum motivo?

solução!

Então, ai nesse caso se trata da linguagem de programação. O Python é muito bom, mas deixa a gente mal acostumado com isso, porque lá você cria uma variável sem falar o tipo dela e ele já resolve tudo pra você. Então por exemplo, se fizer assim:

variavel1 = 10 # O Python já sabe que se trata de uma variável do tipo inteiro
variavel2 = "Paulo" # O Python já sabe que se trata de uma variável do tipo string
variavel3 = 10.0 # O Python já sabe que se trata de uma variável do tipo double

Então, sem falar nada das variáveis criadas acima, o Python já sabe os tipos que terão que ser armazenados. Facilitando o nosso lado.

Já no caso da linguagem desse curso, você obrigatóriamente tem que falar o tipo da variável que está sendo criada, porque a linguagem não faz isso automaticamente. Então fazendo esses exemplos:

Integer conta1 = ContaCorrente();
conta2 = ContaCorrente();

No primeiro caso do "conta1" vai dar errado, porque você criou uma variável do tipo "Integer" (ou seja, só recebe valores como -1, 0, 1, 2...) e está recebendo um objeto do tipo "ContaCorrente" nela, que são duas coisas totalmente diferentes. No segundo exemplo não foi definido o tipo da variável, então o programa não sabe dizer ao computador o quanto de memória ele deve guardar para essa variável, já que cada tipo (Integer, String...) tem tamanhos diferentes. Como não foi definido, vai dar erro.

Resumindo, não é que vai ficar redundante a expressão, porque primeiro está sendo definido o tipo da variável, que é do tipo "ContaCorrente" (imagina como se isso fosse o Integer, Double ou String da vida), e depois ela é inicializada com o "=ContaCorrente()". Se você não fizer o "=ContaCorrente()", quando for acessar alguma propriedade de "conta" (pra imprimir, modificar ou algo assim) vai dar erro porque os dados que estão sendo acessados ainda não existem, já não foram inicializados ainda.

Acho que a vantagem que teria é que você (programador) sabe exatamente o tipo da variável que foi criada (fica claro no código). Quanto a eficiência eu acredito que não tem muita não.

Ficou um pouco mais claro?

Entendi, realmente entendi. Muito obrigado pela explicação, está muito completa, imagino o trabalho que deve ter dado. Ademais, consegui fazer uma analogia com a variável to tipo "int".

{ int contador; // Não está inicializada int contador2 = 1; // Está inializada int contador = 3 // Inicializei o Contador }

Agora para o caso da Classe "ContaCorrente", considerando que a Classe já foi declarada: { ContaCorrente conta1 = ContaCorrente(); // Está inicializada; ContaCorrente conta2; // Não está inicializada conta2 = ContaCorrente(); // Inicializei a conta2 ContaCorrente conta3 = conta1; // Declarei a "conta3" e inicializei ela com o endereço de memória da "conta1"

}

Mais uma vez, obrigado pela ajuda. Vlw

Perfeito, Paulo! Que massa que entendeu, fico bem feliz :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software