swaminadhan
Joined: 14 Sep 2009 Posts: 73
|
Posted: Sat Mar 20, 2010 12:01 pm Post subject: About Modules,Mixins and Namespaces |
|
|
Hello developers !
Let us discuss about the very most important and powerful topics in ruby.
Let us discuss them briefly.
Modules :
Modules are the collection of classes,methods and constants. Modules groups classes together.
The syntax for modules is
module Hello (module_name)
end
The module name should start with an uppercase alphabet.
we can have multiple classes or methods in the modules. To acquire the methods of the module in a class we can include the particular module in our class.
for example:
Let us consider a module named "company" and a class "User" to access the methods and classes of the module in the class, we have to include the Company module in the user class.
class User
include 'Company' // ( Here we have included the company module in
the user class)
end
Now we can create an object of the class and we can invoke methods of the particular class.
Module can also contain methods,but since those are the instance methods we cannot access the methods directly, we have to include the module in a class and we have to create an instance to that class and we can access those methods.
Mixins :
According to the nature of Ruby, it will not support multiple inheritance, By including the module, the class will acquire the properties of that module. Since the module can have multiple classes and methods ,this can be taken as multiple inheritance.This concept is so called mixins.
As we said the module can contain many classes, module can also contain modules.We can include number of modules in a class.
There are 3 ways of include a module into a class they are.
let us take an example
module Cricket
end
The above module is in cricket.rb file
Similarly we have another module
module Soccer
end
lets say the above module is in soccer.rb file
If we want to acquire the properties of these two modules in an Sport class we can acquire in these 3 ways,they are as
1. The first way is
Class Sport
include Cricket
include Soccer
end
2. The second way is, in the file that Sport class contains require filename as
require 'cricket.rb'
require 'soccer.rb'
Class Sport
include Cricket
include Soccer
end
3. The third way is to
require Cricket
require Soccer
Class Sport
end.
Namespace :
The Namespace is nothing but the collection of classes, it is mainly used to avoid naming conflicts.
Normally when we are including some modules or by the other we may have methods with the same method name, So to avoid the naming conflicts we are using this namespace concept by adding the module name along with the method.
We have to declare as modulename.methodname
For example if we are including the person module in a User class.In person module if we have a method called name as below
module Person
def name
end
end
If we are including the person module in the user class, the user class will acquire the properties of the person module.
class User
include Person
def name
end
end
After we include the class will contain two name methods
So when we create a object to a class,the name method will get override,to avoid this we are using this name space.
To make this to treat these methods differently we use modulename.methodname, just like a class method.
class User
include Person
def Person.name
end
end
In this case these two methods are treated differently. |
|