在之前我们说过一个原则,我们尽量通过访问methods来实现对states的改变,而不是直接控制variables。ruby的设计者希望我们这么做。ruby认为,methods是控制states的,所以只要控制了methods的访问权限,就可以达到目的了
在描述访问控制的时候,我务必要强调一点的就是:ruby里面的访问控制(Access
Control),主要描述的是一个receivers和messages的问题,而非java,c++里面的访问控制,因为ruby是一种动态语言,语
言的本质决定了访问控制必须是动态的,下面说一下class definitions时候的问题,例如:
class Ex
protected
def method_protected
"proected"
end
private
def method_private
"private"
end
public
def method_public
"public"
end
def access_control
puts method_protected
puts method_private
puts method_public
end
end
class Ex2 < Ex
def test2_public
puts method_public
end
def test2_private
puts method_private
end
def test2_protected
puts method_protected
end
end
ex1 = Ex.new
ex1.access_control
ex2 = Ex2.new
ex2.test2_private
ex2.test2_protected
ex2.test2_public
结果:
proected
private
public
private
proected
public
我们可以看见,在class definitions的时候,所有的methods,都是可见的,不论是在类还是子类
访问控制,实际上只控制receivers对methods的调用,这时候我们讨论的是作为一个message的角色的时候:
1)private:不可以作为任何 object 的message
2)protected:在一个类的子类的definition时,可以作为一个message,被调用
3)public:任何时候都可以作为一个message,无论是在class definition时,还是external
举例说明:
class Ex
private
def method
"here"
end
end
class Ex2 < Ex
def method2(ex)
ex.method
end
end
ex2 = Ex2.new
puts ex2.method2(Ex.new)
结果:
in `method2': private method `method' called for #<Ex:0x298edb0> (NoMethodError)
改成protected
class Ex
protected
def method
"here"
end
end
class Ex2 < Ex
def method2(ex)
ex.method
end
end
ex2 = Ex2.new
puts ex2.method2(Ex.new)
结果:
here
由此我们可以看见private是不能做message的,再看看protected和public
class Ex
public
def method
"here"
end
end
puts Ex.new.method
结果:
here
改成protected:
class Ex
protected
def method
"here"
end
end
puts Ex.new.method
结果:
protected method `method' called for #<Ex:0x298f1e8> (NoMethodError)
这里使用外部的一个receiver来调用message,所以protected method无法使用
*关于receiver,message请参考《ruby系列教材(1):Ruby Is an Object-Oriented Language》
分享到:
相关推荐
中控ZKT AccessControl门禁管理软件,轻量级,功能丰富,开门,监控,设备管理,通行时间设置
Access_Control_System_V3.5.4.1_EN.exe DatabaseBackupRestore.rar IGK Software Operation Guide.pdf IgkDatabase_V1.6_EN.exe 安装顺序:先裝SQL2000 再裝IgkDatabase_V1.6_EN最後才裝Access_Control_System_V...
thinking in java 4 access control
cisco secure access control system镜像1。 cisco secure access control system镜像1。
cisco secure access control system 镜像2 cisco secure access control system 镜像2
global platform secure element access control 规范
role-based access control (rbac),角色,权限
Cisco Secure Access Control System 5.2.rar
cisco secure access control system 镜像5 cisco secure access control system 镜像5
setup access control in oracle
cisco secure access control system 镜像4 cisco secure access control system 镜像4
cisco secure access control system 镜像3 cisco secure access control system 镜像2
Abstract Service Oriented Architecture (SOA) is one of the most popular concepts to implement computing ...Assertion Markup Language, XACML, eXtensible Access Control Markup Language, access control
基于属性的访问控制模型及其展望Attribute-Based Access Control Models and Beyond 云计算
add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET,POST'; 使用以下配置,生效。 if ($request_method = '...
Fine Grained Access Control Arup Nanda, Proligence, Inc.
HP Access Control (HP AC) Administrator Guide HP AC installation bundles HP Access Control (HP AC) Express HP Access Control (HP AC) Enterprise
日本語 英語 中国語 アボート abort 中止,失败 アカデミー academy 科学院 アクセプト accept 接收 アクセス access 存取 アクセス access 访问 アクセス・ビット access...アクセス・コード access code 存取码
RBAC-SC: Role-based access control using smart contract中文翻译
cisco secure access control system 镜像6 cisco secure access control system 镜像6