difference between class and object methods

Discussion in 'Ruby' started by Sagy Drucker, Jan 31, 2012.

  1. Sagy Drucker

    Sagy Drucker Guest

    hello
    am i correct when i compare to java, and say:
    object methods in ruby are equivalent object methods in java
    and class methods in ruby are equivalent STATIC functions in java?

    also,
    class variables in ruby are equivalent to static variables in java?

    thanks...
    sagy... ( a very new ruby programmer )
     
    Sagy Drucker, Jan 31, 2012
    #1
    1. Advertisements

  2. Yep, that's mostly correct. But you should rather not bother to use
    class variables (those prefixed with @@) but instead should only use
    instance variables of a class, e.g.

    class X
    def self.a_class_method
    @@do_not_use_class_variables = 1
    @but_use_class_instance_variables = 2
    end
    end

    Reason is that class variables have weird scoping rules which can
    produce strange effects.

    Kind regards

    robert
     
    Robert Klemme, Jan 31, 2012
    #2
    1. Advertisements

  3. I'm not sure I'm entirely sure about this but I think comparing class levelmethods/variables to static methods is wrong. Please, correct me if I'm wrong.

    Class methods are similar to static functions in java in terms of both being methods defined in what, conceptually, is a class. It is not really a static method because the interpreter will still do a dynamic dispatching of the method because ruby classes are still objects, instances of the class Class.

    Class variables are variables that lives on the Class object and it is alsoaccessible from all the instances and subclasses. If you change the value of the variable in a subclass, it will change the original value, affectingall classes and objects associated.

    There is also the concept of class instance variable, which is a instance variable that resides in the singleton instance of the class.

    More about this here: http://railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/
     
    Rodrigo Kochenburger, Feb 1, 2012
    #3
  4. Sagy Drucker

    Danny Woods Guest

    Instance methods in Ruby can be considered semantically equivalent to
    instance methods in Java.

    Ruby's class methods are quite different. In Ruby, classes are
    themselves objects that are available at runtime (yes, it's somewhat
    circular), and so can have their own methods and variables. Classes are
    instances of the class Class (e.g. String.class == Class; this ties up at
    the end, where Class.class == Class).

    Java's static methods and variables are not class methods in the same
    sense. In Java, you cannot refer to 'super' in a static method, as
    there is no 'this' (q.v. self, the current object; classes aren't objects in
    Java. In a Ruby class method, 'self', refers to the class object).
    Since there is no this/self, static methods in Java cannot be overridden in
    subclasses (although they can be replaced by a static method with the
    same signature). Being associated with a real object (the class), Ruby
    class methods can be thought of as instance methods; they're just
    methods on the class, not an individual instance of it.

    Hope that helps.

    Cheers,
    Danny
     
    Danny Woods, Feb 2, 2012
    #4
  5. Sagy Drucker

    Alec Ross Guest

    But of course in there is an established terminology for "class methods"
    and "static methods" (see, e.g.:

    http://en.wikipedia.org/wiki/Class_method#Class_methods

    ), where, where, as it states there that "class methods are synonymous
    with static methods" in Java and C++. And indeed also in C#, see. e.g.:

    http://msdn.microsoft.com/en-us/library/aa645766(v=vs.71).aspx ,

    See also the comments on that Wikipedia entry in respect of Ruby in this
    regard.

    HTH,

    Alec
     
    Alec Ross, Feb 3, 2012
    #5
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.