terça-feira, 28 de outubro de 2008

[Unit-1 | Lição-11] Classes

Antes de começar a aula, aqui vai uma dica para seu melhor aprendizado: Quando for testar os exemplos desta aula em diante, abra o seu editor de scripts e digite você mesmo o código, ao invés de apenas copiar e colar, isto ajuda para que você vá se acostumando com a programação. Lembrando que estes exemplos devem ser utilizados num script totalmente em branco, de preferência acima de todos os outros, para que seja executado primeiro.

O que são Classes?

Como foi dito no início das aulas, Ruby é uma linguagem interpretada por objetos, as Classes são estes Objetos. A função das variáveis é alojar determinados valores, qualquer valor que possa ser representado por uma variável é uma classe.

Definido uma Classe
Classes são na verdade Constantes, variáveis fixas com determinados dados em si, portanto cada classe deve ter seu nome começando com uma letra maiúscula. Assim como as variáveis, as classes também devem ser declaradas, para criar ou alterar uma classe é utilizado o comando 'class' seguido do nome da classe e logo depois das alterações feitas naquela classe utiliza-se um 'end' para definir o fim das alterações feitas naquela classe.
Exemplo:
classe Nova
end

Como não existe nenhuma classe chamada Nova, eu estou declarando-a. Note que se for utilizando o método 'p' em 'Nova' antes de sua declaração(desta forma: 'p Nova') correrá um erro, já que a constante 'Nova' ainda não foi declarada, porém, se for utilizado este mesmo comando após a declaração da classe, o programa irá detectar a constante e irá exibir "Nova" na janelinha, pois o que foi enviado ao método nova foi apenas a constante Nova.
Somente com a classe Nova não iremos conseguir muita coisa, vamos criar uma nova variável logo após a declaração da classe nova, chamarei-a de 'classe_nova', mas você pode nomeá-la como bem entender.
class Nova
end
classe_nova = Nova.new

Utilizando o método 'new' eu fiz com que 'classe_nova' se transformasse em um novo objeto da classe Nova, ou uma outra Nova.
OBS1: Métodos serão vistos ainda nesta aula. OBS2: O método 'new'(assim como alguns outros métodos básicos) é provido à todas as classes automaticamente.
Para que fique mais claro o que eu fiz acima vou dar um exemplo:
ary = [2, 4]
str = "texto"

Acima eu criei duas variáveis, cada um como um novo objeto das classes Array e String; ou seja, eu defini as duas novas variáveis como novas classes Array e String sem alterar as constantes. Foi o mesmo que eu fiz em 'classe_nova = Nova.new'. A única diferença é que Array e String são classes padrões do Ruby e por isso podem ser criadas desta forma mais fácil, porém, agora não à diferença alguma entre Array, String e Nova.
Abaixo, mais um exemplo:
ary = Array.new
str = String.new

Acima eu criei uma nova Array e uma nova String, se você utilizar o método 'p' para verificar os valores de 'ary' e 'str' os retornos serão: '[]' e ' "" '; pois serão uma Array e uma String recém criadas, sem nenhum valor nelas, logo, o exemplo acima seria o mesmo que utilizar o seguinte código:
ary = []
str = ""

OBS: Note que, nestes dois exemplos acima, se você utilizar o método 'print' ao envéz de 'p' não será exibido nada, pois 'print' lê os dados da forma como o programa irá exibir no jogo, e um texto vazio(String vazia, "") e um grupo de valores sem nenhum valor(Array vazia, []) não são nada.
Agora que já expliquei a função do método 'new' e a diferença entre a constante e sua utilização, podemos voltar à nossa nova classe, a 'Nova'. Vou citar novamente o exemplo para recuperarmos a concentração no mesmo:
class Nova
end
classe_nova = Nova.new

Se você utilizar o método 'p' em 'classe_nova' após sua declaração irá obter o seguinte resultado: '#'(ou algum semelhante), isto ocorre porque tudo que nós fisemos até agora foi criar uma nova variável com o valor de Nova, porém, a classe Nova está totalmente vazia, por isto o programa lê a classe desta forma.