Class & modifiers modifiers

M

Miquel

Hi

I want to make a question to all the ruby-lang people (I hope that
somebody answered it).

I'm writing a database GUI and I'm coding the backend using modules
and classes.

If I have this situation:

module A

protected

def b_method()
return 'foo->A'
end

end

class B
include A

def b_method()
return 'foo->B'
end

end

Is B's method b_method() protected? Is it public? What the hell is this
method (;-) ) ?


Thanks in advance

Kind regards


Miquel


______________________________________________
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com
 
M

Miquel

EL Fri, 26 Jan 2007 00:55:18 +0900
Yukihiro Matsumoto said:
Hi,
=20
In message "Re: Class & modifiers modifiers"
=20
|module A
|
| protected
|
| def b_method()
| return 'foo->A'
| end
|
|end
|
|class B
| include A
|
| def b_method()
| return 'foo->B'
| end
|
|end
|
|Is B's method b_method() protected? Is it public? What the hell is
this |method (;-) ) ?
=20
public. I don't recommend to override protected method though.
=20

Why not?=20

You might have a protected method in a module which has no code or
only an exception (something like an abstract method in Java/C#) and has
a different behaviour in the different classes which include it. In this
case it must have been overriden.

What do you think about this?

Btw, congratulations for this awesome language you have written.

matz.
=20
Miquel


______________________________________________
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com
 
M

Miquel

EL Fri, 26 Jan 2007 03:16:39 +0900
Yukihiro Matsumoto said:
Hi,
=20
In message "Re: Class & modifiers modifiers"
=20
|> public. I don't recommend to override protected method though.
|
|Why not?=20
=20
Because protected methods are called only from subclass of defining
class. That means overriding changes the restriction scope of the
method.
=20
|You might have a protected method in a module which has no code or
|only an exception (something like an abstract method in Java/C#) and
has |a different behaviour in the different classes which include it.
In this |case it must have been overriden.
|
|What do you think about this?
=20
As far as current protected behavior remains, I'd recommend to prepare
separate method to override in the subclass.
=20
Excuse me if I'm getting boring but I don't know if I explained myself
well, here is an example:

module Shape

def name
#raise a not implemented method.
end

def printName()
puts name
end

end


class Square
include Shape

def name
return 'Square'
end

end

class Circle
include Shape

def name
return 'Circle'
end

end

I know that it could be written, for example, as a attr_reader and set
it in the initialize, but this is the idea I want to express (I think
its so useful).

Or maybe you want to say that it's better to code an intermidiate class
between de module and the classes (or even instead of the module) and
declare there the "abstract" method?

Sorry, but I'm so used to Java and C#.

Kind regards


Miquel
matz.
=20


______________________________________________
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com
 
M

Miquel

EL Fri, 26 Jan 2007 20:23:36 +0900
Robert Dober said:
=20
=20
May I suggest just not to define Shape#name, I believe that would be
the most ruby like way to do this.
=20
Imagine that you forget to define it
Hexagon =3D Class.new Shape # guess where I live ;)
I'm sorry, but Shape is a module (it can not be create an object using
it).
=20
Hexagon.new.print_name =3D=3D=3D> NoMethodError
=20
AFAIU that is pretty much the behavior you want
=20
Thanks a lot for your suggestions, I'll try to rebuild my ideas using
Ruby.
=20
HTH
Robert Kind regards
=20
=20
=20


______________________________________________
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com
 
M

Miquel

EL Fri, 26 Jan 2007 20:49:46 +0900
Miquel said:
EL Fri, 26 Jan 2007 20:23:36 +0900

I'm sorry, but Shape is a module (it can not be create an object using
it).
I'm sorry if I have been a little rude, it was not my intention :)
Thanks a lot for your suggestions, I'll try to rebuild my ideas using
Ruby. Bye
=20
=09
______________________________________________=20
LLama Gratis a cualquier PC del Mundo.=20
Llamadas a fijos y m=C3=B3viles desde 1 c=C3=A9ntimo por minuto.=20
http://es.voice.yahoo.com
=20


______________________________________________
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top