Mixin in Ruby

C++ allows developers to use multiple inheritance. Unlike C++, Ruby only allows developers to use single inheritance. But Ruby has mixin functionality, which allows code to be included from other modules.

Here’s sample code to demonstrate mixin:

module MixinFirst
	def mixin_first_display
		puts "This is mixin first"
	end
end

module MixinSecond
	def mixin_second_display
		puts "This is mixin second"
	end
end

class Base
	def inheritance_display
		puts "This is inheritance"
	end
end

class Child < Base
	include MixinFirst
	include MixinSecond
end

child = Child.new
child.mixin_first_display
child.mixin_second_display
child.inheritance_display

Sample result:

This is mixin first
This is mixin second
This is inheritance

Inheritance in Ruby

Inheritance is one of Object-Oriented concept. Since Ruby is an Object-Oriented Programming, it has implemented the Inheritance functionality.


#intialize global variable
$value = 0

class Parent
    def parent_value
        $value = 5
    end
end

class Child < Parent
    def child_value
        $value = 10
    end
end

child = Child.new

#calling parent_method using child object
base_value = child.parent_value

#calling child_method
derive_value = child.child_value

#display result
puts "Here's parent value: #{base_value}"
puts "Here's child value: #{derive_value}"

Sample Result:

Here’s parent value: 5
Here’s child value: 10

Encapsulation in Ruby


class Encapsulation
    def get_value
        @value
    end

    def set_value value
        @value = value
        return nil
    end
end

encapsulation = Encapsulation.new
encapsulation.set_value(15)
puts encapsulation.get_value

In this code, you cannot mess around with the state of its variable @value. The only way you can access it is through get & set method (get_value, set_value). This is the encapsulation

Sample Result

15

Variables in Ruby

Here just how’s  to declare global, class, instant, and local variables in Ruby:


$global_variable = "global variable"

class First
    @@class_variable = 0

    def display_global_variable
        puts "#{$global_variable} access from class 'First'"
    end

    def class_variable
        @@class_variable += 1
        puts "value of class variable : #{@@class_variable}"
    end
end   

class Second
    def initialize(id,name)
        @id = id # id is a local variable
        @name = name # name is a local variable
    end

    def display_global_variable
        puts "#{$global_variable} access from class 'Second'"
    end

    def display_instance_variable
        puts "display value of instance variable id = #{@id}, name = #{@name} "
    end
end

#instantiate object
first = First.new
second = Second.new(1, "borey")

#Demonstrate on class variable
first.display_global_variable
second.display_global_variable
puts "\n"

#Demonstrate on class variable
first.class_variable
first.class_variable
puts "\n"

#Demonstrate on instance variable
second.display_instance_variable

Here’s the result after code is executed:

global variable access from class ‘First’
global variable access from class ‘Second’

value of class variable : 1
value of class variable : 2

display value of instance variable id = 1, name = borey