Access specifiers

Hi,
I am new to Ruby and after progamming in several other languages, I am
really enjoying the fun of Ruby. I had question regarding the access
specifiers in Ruby; suppose the following two classes,

class C1
private
def aMethod
“I am a method”
end
end

class C2 < C1
public :aMethod
end

In C1, aMethod was private, but in C2 it became public… so this way,
any private method of a class can be converted to public methods. So
then what is the use of having them (private methods) in the first
place at all! In C++, there is a rule that, an object (data or
function) of lower access-specifier can be upgraded to higher
acc-specifier but the reverse is not true. Should it not also be
implemented in Ruby?

I’m a beginner, so please let me know if I’m missing anything. Thanks
in advance.

Sourav wrote:

In C1, aMethod was private, but in C2 it became public… so this way,
any private method of a class can be converted to public methods. So
then what is the use of having them (private methods) in the first
place at all! In C++, there is a rule that, an object (data or
function) of lower access-specifier can be upgraded to higher
acc-specifier but the reverse is not true. Should it not also be
implemented in Ruby?

Hi there,

In ruby they are more like hints. If the programmer wants to make a
method public, then the assumption is that they know what they are
doing.

You could make it harder on them (and yourself) to make something
public again by overriding the Class#public method:

class Class
def public(*methods)
warn “You naughty programmer, that’s private!”
end
end

But I wouldn’t recommend doing it.

Regards,
Jordan

On 9/21/06, Sourav [email protected] wrote:

end
end

class C2 < C1
public :aMethod
end

In C1, aMethod was private, but in C2 it became public… so this way,
any private method of a class can be converted to public methods. So
then what is the use of having them (private methods) in the first
place at all! In C++, there is a rule that, an object (data or

Sorry for being blunt, as a matter of fact I am not, it is just the
timing
of the response :frowning:
The sooner you forget about C++ the sooner you will get Ruby.

function) of lower access-specifier can be upgraded to higher

acc-specifier but the reverse is not true. Should it not also be
implemented in Ruby?

This is a very reasonable point, it is all about “enabeling” and
“controlling” approach.

Ruby happens to be very liberal and of course there are downs. (so
comparing
with C++ will give you lots of headaches I am afraifd)
For most of the part we - those who love ruby - think that the ups
outweight the downs.
The example you have given is not really anything unusual for the ruby
philosophy.
Look at this e.g

a = Object.new
class << a
private
def hello
puts “Hi there”
end
end
a.send :hello

I’m a beginner, so please let me know if I’m missing anything. Thanks

in advance.

Welcome to the big adventure ?

Robert

Deux choses sont infinies : l’univers et la bêtise humaine ; en ce qui
concerne l’univers, je n’en ai pas acquis la certitude absolue.

  • Albert Einstein

Sourav wrote:

end
acc-specifier but the reverse is not true. Should it not also be
implemented in Ruby?

Yes, there’s a few ways to circumvent “private” declarations:
Object#send (this will change in 1.9), delegate with instance_eval,
anonymous modules. In your example, you don’t have to subclass the
class with private methods, you can simply re-open the class definition
and declare them public.

Even classes like String,Fixnum… are open
its not the same with other language like java…

ruby shines or sucks
its up to you how you use features of ruby

just have fun

Hmmmm… thnx, I got it. In Ruby it’s not that much rigid as C++/Java.
And I think it’s better like this.