`

アクセサ,Access Control

    博客分类:
  • ROR
阅读更多

在之前我们说过一个原则,我们尽量通过访问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》

分享到:
评论

相关推荐

    AccessControl 门禁管理软件

    **AccessControl 门禁管理软件详解** 门禁系统在现代安全管理中扮演着至关重要的角色,而中控ZKT AccessControl门禁管理软件是一款专为此设计的高效解决方案。这款轻量级软件提供了丰富的功能,旨在满足各类机构...

    Access Control_V3.5

    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...

    TIJ4 Access Control 2015-11-19

    thinking in java 4 access control

    cisco secure access control system iso

    cisco secure access control system镜像1。 cisco secure access control system镜像1。

    cisco secure access control system iso2

    cisco secure access control system 镜像2 cisco secure access control system 镜像2

    Python库 | AccessControl-3.0.8-py2.7-win32.egg

    《Python库AccessControl详解》 在Python编程领域,库扮演着至关重要的角色,它们提供了丰富的功能,让开发者能够高效地实现各种复杂任务。本文将详细探讨AccessControl这一库,它是Python开发中的一个重要组件,...

    setup access control in oracle

    setup access control in oracle

    Cisco Secure Access Control System 5.2.rar

    **Cisco Secure Access Control System 5.2 知识点详解** Cisco Secure Access Control System (ACS) 是Cisco公司推出的一种强大的身份认证、授权和审计(AAA)解决方案,它为网络访问提供了安全控制。版本5.2是该...

    cisco secure access control system iso5

    cisco secure access control system 镜像5 cisco secure access control system 镜像5

    Nginx跨域设置Access-Control-Allow-Origin无效的解决办法

    add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET,POST'; 使用以下配置,生效。 if ($request_method = '...

    cisco secure access control system iso4

    cisco secure access control system 镜像4 cisco secure access control system 镜像4

    cisco secure access control system iso3

    cisco secure access control system 镜像3 cisco secure access control system 镜像2

    global platform secure element access control 规范

    全球平台安全元素访问控制规范(Global Platform Secure Element Access Control)是全球平台组织(GlobalPlatform Inc.)于2012年发布的,旨在为安全元件(Secure Element,SE)的访问控制提供标准化指导。...

    Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications

    2. MAC层(Medium Access Control Layer):在OSI七层模型中,MAC层位于数据链路层的第二层,负责管理设备如何接入无线媒介,确保数据包在无线网络上有效传输。包括CSMA/CA(Carrier Sense Multiple Access with ...

    AccessControl-4.1-cp36-cp36m-win_amd64.whl.zip

    标题中的"AccessControl-4.1-cp36-cp36m-win_amd64.whl.zip"是一个Python库的发行文件,主要用于权限管理。这个文件是为Python 3.6版本设计的,适用于Windows操作系统,且是64位架构。"AccessControl"是库的名称,...

    Allow CORS Access-Control-Allow-0.1.9.zip

    名称:Allow CORS Access-Control-Allow ---------------------------------------- 版本:0.1.9 作者:Muyor 分类:生产工具 ---------------------------------------- 概述:轻松将(Access-Control-Allow-Origin...

    谷歌跨域插件Access-Control-Allow-Origin

    标题中的“谷歌跨域插件Access-Control-Allow-Origin”指的是在谷歌浏览器上使用的扩展程序,用于解决Web开发过程中遇到的跨域问题。跨域是由于浏览器的同源策略(Same-origin policy)引起的,它限制了来自不同源的...

    HP Access Control (HP AC) Administrator Guide

    HP Access Control (HP AC) Administrator Guide HP AC installation bundles HP Access Control (HP AC) Express HP Access Control (HP AC) Enterprise

    AccessControl-4.0b4-cp36-cp36m-win32.whl.zip

    标题中的"AccessControl-4.0b4-cp36-cp36m-win32.whl.zip"是一个Python库的发行版本,其中包含了“AccessControl”模块的源代码或预编译版本。这个文件是为Python 3.6编译的,并且是针对Windows 32位系统的。"4.0b4...

    計算机技術用語(日中英 个人认为很全的)

    日本語 英語 中国語 アボート abort 中止,失败 アカデミー academy 科学院 アクセプト accept 接收 アクセス access 存取 アクセス access 访问 アクセス・ビット access...アクセス・コード access code 存取码

Global site tag (gtag.js) - Google Analytics