Ruby on Rails Fullstack

POO

Programação orientada a objetos

Classes e instancias

  • Uma classe é a descrição de um objeto
    • Um objeto tem propriedades
    • Certas ações alteram essas propriedades
    • Certas propriedades e ações são privadas (more on that later) 

Classes e instancias

  • Uma instancia é o objeto em si
    • Meu MacBook é uma instancia do objeto computador
    • Seu Dell é outra instancia do mesmo objeto
    • Duas coisas diferentes, mas semelhantes

Classes e instâncias em Ruby


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

Classes e instâncias em Ruby


# 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   #=> ???

Getters & Setters

Getters & Setters

  • Por padrão, todas as propriedades são privadas
    • Somente o código dentro da classe pode acessá-las (getter)
    • Somente o código dentro da classe pode alterá-las (setter)

Getters & Setters

(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

Getters & Setters

(jeito bonito)


class Turma
    # [...]

    def professor
        return @professor
    end

    def professor=(professor)
        @professor = professor
    end

    def turma
        return @turma
    end

    # [...]
end

Getters & Setters

(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

Acessando fora da classe

(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!

AC - Ruby On Rails - Aula 03

By Rafael Pereira Alonso

AC - Ruby On Rails - Aula 03

Terceira Aula da Atividade Complementar de Ruby On Rails, lecionada na Universidade Federal de São Carlos, campus Sorocaba, no primeiro semestre de 2019

  • 54