Programação orientada a objetos
class Turma
# esse método sempre executará ao se criar uma nova instancia
# bom para definir as propriedades iniciais
def initialize(professor, alunos, materia)
# variáveis iniciadas com '@' dentro de uma classe são
# chamadas de variáveis de instância. Estas podem ser
# Acessadas em qualquer outro método da classe
@professor = professor
@alunos = alunos
@materia = materia
@concluida = false
@n_alunos = count_alunos
end
# esse método é uma das possíveis ações que podemos fazer com
# uma instancia dessa classe
def count_alunos
@alunos.length
end
end
# Podemos criar duas turmas diferentes, ou seja, com propriedades diferentes
turma_a = Turma.new('Rafael', ['Dadinho', 'Sofia', 'Slash', 'Bianca'], 'Ruby on Rails')
turma_b = Turma.new('Thiago', ['Pastor', 'Eleven', 'Mormaço'], 'Alg I')
# Podemos executar os mesmos métodos nas duas instâncias, mas dependendo de suas
# propriedades e/ou argumentos passados, os resultados são diferentes
turma_a.n_alunos #=> 4
turma_b.n_alunos #=> 3
turma_a.professor #=> ???
turma_b.materia #=> ???(jeito básico)
class Turma
# [...]
def get_professor
return @professor
end
def set_professor(professor)
@professor = professor
end
def get_turma
return @turma
end
# [...]
end(jeito bonito)
class Turma
# [...]
def professor
return @professor
end
def professor=(professor)
@professor = professor
end
def turma
return @turma
end
# [...]
end(jeito top)
class Turma
# todas as propriedades após "attr_reader" poderão ser vistas
attr_reader :professor, :materia, :concluida
# todas as propriedade após "attr_writer" poderão ser alteradas
attr_writer :professor
# "attr_accessor" é uma junção de "attr_reader" e "attr_writer"
attr_accessor :turma
[...]
end(dos três jeitos)
# jeito básico
puts turma_a.get_professor #=> 'Rafael'
turma_a.set_professor('Gandalf')
puts turma_a.get_professor #=> 'Gandalf'
# jeito bonito (e jeito top também!)
puts turma_b.professor #=> 'Thiago'
turma_b.professor = 'Thiaguin'
puts turma_b.professor #=> 'Thiaguin'
# jeito top (bônus)
puts turma_a.materia #=> 'Ruby on Rails'
turma_a.materia #=> erro!