`
凌川__
  • 浏览: 84022 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

6.5 访问控制

阅读更多

在Ruby里,要读取,或是改变对象的属性,唯一的途径是调用对象的方法。控制了对方法的访问,也就控制了对对象属性的访问。
控制对方法的访问,有三种方式: 

访问控制
意义
public 
可以被任何实例对象调用,不存在访问控制;
protected
可以被定义它的类和其子类访问,
可以在类中或子类中指定给实例对象;
private
可以被定义它的类和其子类访问,
不能被实例对象调用。

方法默认都是公有的( initialize方法除外,它永远是私有的)。
看程序  E6.5-1.rb :

ruby 代码

  1. #E6.5-1.rb     
  2. class Person     
  3.  def talk   
  4.     puts "    public :talk,   将调用speak"  
  5.     speak   
  6.   end       
  7.   
  8.   def speak   
  9.     puts "protected :speak,将调用laugh"  
  10.     laugh   
  11.   end       
  12.   
  13.   def laugh   
  14.     puts "   private:laugh"        
  15.   end       
  16.   protected :speak  
  17.   private    :laugh  
  18. end  
  19.   
  20. p1=Person.new  
  21. p1.talk   
  22. #p1.speak   实例对象不能访问protected方法   
  23. #p1.laugh    实例对象不能访问private方法   

 运行结果:
>ruby E6.5-1.rb
    public :talk, 将调用speak
protected:speak,将调用laugh
   private:laugh
>Exit code: 0

再看程序  E6.5-2.rb :

ruby 代码
  1. #E6.5-2.rb     
  2.   
  3. class Person     
  4.      
  5.   def speak   
  6.     "protected:speak  "  
  7.   end     
  8.      
  9.   def laugh   
  10.     "   private:laugh"      
  11.   end    
  12.      
  13.   protected :speak  
  14.   private     :laugh  
  15. end  
  16.   
  17. class Student < Person     
  18.      
  19.   def useLaugh   
  20.     puts laugh   
  21.   end     
  22.      
  23.   def useSpeak   
  24.     puts speak   
  25.   end     
  26.      
  27. end  
  28. p2=Student.new  
  29. p2. useLaugh         # =>    private:laugh   
  30. p2. useSpeak         # =>  protected:speak    



从程序 E6.5-1.rb 和程序 E6.5-2.rb ,我们没有看出 protected 和 private 的区别,到底区别在哪里呢?
答案在程序  E6.5-3.rb :

ruby 代码
  1. #E6.5-3.rb    
  2.   
  3. class Person       
  4.   def speak   
  5.     "protected:speak  "  
  6.   end     
  7.      
  8.   def laugh   
  9.     "   private:laugh"      
  10.   end    
  11.      
  12.   protected :speak  
  13.   private     :laugh  
  14.      
  15.   def useLaugh(another)       
  16.     puts another.laugh   #这里错误,私有方法不能指定对象   
  17.   end     
  18.      
  19.   def useSpeak(another)      
  20.     puts another.speak   
  21.   end     
  22.      
  23. end  
  24.   
  25. p1=Person.new    
  26. p2=Person.new  
  27.   
  28. p2.useSpeak(p1)          # =>  protected:speak   
  29. #p2.useLaugh(p1)  


从上面三个程序可以得出结论:
 public方法,可以被定义它的类和其子类访问,可以被类和子类的实例对象调用;
 protected方法,可以被定义它的类和其子类访问,不能被类和子类的实例对象直接调用,但是可以在类和子类中指定给实例对象;
 private方法,可以被定义它的类和其子类访问,私有方法不能指定对象。


Ruby语言的访问控制是动态的,是在程序运行时刻确立的。你可以根据自己的需要,在程序的不同位置,改变某个方法的访问控制级别,让你的程序更加富于变化。

ruby 代码
  1. #E6.5-4.rb     
  2. class Person       
  3.   private    #后面的方法设定为private   
  4.   def talk   
  5.     puts " already talk "  
  6.   end        
  7. end  
  8.   
  9. p1=Person.new  
  10. #p1.talk   private方法不能访问   
  11.   
  12. class Person         
  13.   public :talk  
  14. end  
  15.   
  16. p1.talk     # =>  already talk  


 

完整阅读,请看我写的 Ruby语言中文教程all in one    
 

分享到:
评论

相关推荐

    CentOS6.5安装vncserver实现图形化访问

    vncserver是一种远程桌面协议,可以让您从远程访问和控制服务器的图形化桌面。 配置YUM源 首先,我们需要配置YUM源,以便能够从网易的镜像站点下载CentOS6.5的软件包。我们可以使用以下命令: ``` #rpm --import ...

    组态王6.5源代码 组态王6.5源代码

    4. **安全控制**:ASP.NET提供了一套完整的安全机制,如身份验证、授权、加密等,这些在组态王6.5的源代码中必不可少,确保只有授权用户能访问和操作系统。 5. **事件驱动编程**:在C#中,事件驱动编程是常见的模式...

    NC6.5 文件服务器操作手册.pdf

    该服务器提供了多种安全机制,包括身份验证、访问控制、加密存储等,以确保文件的安全性。安全性是NC6.5文件服务器的一个重要特点。 可靠存储 NC6.5文件服务器提供了可靠的存储功能。该服务器能够提供稳定的存储...

    vmware 6.5 正式版序列号

    序列号(Serial Number,简称SN),通常是指软件开发者为了控制软件分发、防止非法复制而设计的一种特殊编码。每个序列号都是唯一的,用于验证软件副本的有效性和合法性。 #### 2.2 在VMware中的应用 对于VMware...

    KepWare 6.5 运行稳定

    2. **安全性增强**:随着网络安全的重要性日益凸显,6.5 版本可能增强了安全特性,包括数据加密、用户认证和权限管理,以保护工业控制系统免受潜在威胁。 3. **性能优化**:KEPServerEX 6.5 可能通过优化数据处理...

    昆仑通态 MCGS嵌入版组态软件6.5.rar

    4. **脚本语言支持**:为了满足复杂逻辑控制的需求,6.5版本支持内置脚本语言,用户可以编写自定义的控制逻辑,实现更复杂的控制策略。 5. **工程管理与安全机制**:MCGS嵌入版6.5在工程管理上做了改进,支持工程...

    PB6.5 数据库软件开发

    PB6.5数据库软件开发是...10. **版本控制**:学习如何与版本控制系统集成,以便团队协作和版本管理。 熟悉并掌握这些知识点,开发者能够在PB6.5环境中高效地构建和维护数据库应用,同时优化系统性能,满足业务需求。

    xenapp6.5详细安装和配置

    - 配置XenApp服务器属性,包括应用程序设置、访问控制等。 - 使用XenApp的策略管理工具来设置各种策略,包括应用程序访问策略、用户环境设置等。 - 配置和部署应用程序,确保应用程序能够在XenApp环境中正常运行。 -...

    SecureCRT6.5

    总的来说,SecureCRT 6.5作为一个绿色版的远程访问工具,不仅提供了安全的连接方式,还具备了高度的可定制性和实用性,是IT专业人士进行远程运维工作的重要助手。虽然现在有更新的版本,但6.5版本依然能满足许多用户...

    用友 NC6.5 数据字典

    4. 视图与存储过程:为了提高数据访问效率和实现复杂的业务逻辑,NC6.5可能使用视图和存储过程。数据字典会包含这些对象的定义,揭示其在系统中的作用和使用方式。 5. 安全性与权限管理:NC系统有严格的权限控制,...

    netware6.5授权软盘镜像文件

    2. **目录服务**:它集成了eDirectory,一个强大的目录服务系统,用于存储和管理用户、组、资源等网络对象信息,提供快速的网络查找和访问控制。 3. **安全性**:Netware 6.5拥有强大的安全特性,如IPSec(Internet...

    匿名上位机V6.5版本

    7. **远程监控与诊断**:允许用户通过网络远程访问和监控设备,提高了系统的灵活性和可维护性。 8. **历史数据查询与报表生成**:具备数据分析功能,能生成历史数据报表,为生产决策提供数据支持。 9. **安全性...

    SQL Server 6.5开发使用手册.rar

    此外,手册还将涵盖安全性设置,包括用户账户管理、角色权限分配和数据库对象的访问控制。 四、数据查询与操作 T-SQL是SQL Server 6.5的主要查询语言,手册会详细介绍SELECT、INSERT、UPDATE、DELETE等基本操作,...

    axure rp 6.5 中文版

    4. **共享与协作**:Axure RP 6.5 支持云服务,可以将项目上传至Axure Share,使团队成员能远程访问和评论原型,提高了协作效率。 5. **版本控制**:在项目开发过程中,版本控制是非常关键的一环。Axure RP 6.5 ...

    XenApp6.5 for Windows Server 2008 R2

    在XenApp中定义用户环境,控制用户登录外观、设备和端口访问,以及音频配置,是确保用户体验一致性和高效性的关键。此外,会话连续性、活动维护、可靠性配置、自动重新连接、ICA保持活动状态等机制,保障了远程会话...

    CodeSmith.Generator.v6.5

    用户可以创建或使用预先定义的模板,这些模板使用C#语法来描述代码结构,通过简单的参数化,就能自动生成各种类型的代码,如数据库访问层、业务逻辑层、实体类、Web表单等。这不仅减少了手动编写重复代码的时间,也...

    Codesmith 6.5 注册正式版

    4. **版本控制集成**:与Git、SVN等版本控制系统无缝集成,方便团队协作开发。 5. **插件扩展**:通过插件系统,开发者可以扩展其功能,满足更复杂的需求。 "ReadMe.txt"文件通常包含安装、使用过程中的注意事项、...

    vsphere 6.5全套中文手册

    安全策略**: 设定访问控制、身份验证和授权,以及如何启用虚拟机加密。 **5. 故障排查与优化**: 提供常见问题的解决方法,以及性能调优的建议。 总的来说,"vSphere 6.5全套中文手册"是一份全面的参考资料,涵盖...

    DameWare6.5.0.0汉化版

    DameWare是一款强大的远程管理工具,主要用于IT管理员对网络中的多台计算机进行远程控制、管理和维护。DameWare 6.5.0.0汉化版是该软件的一个早期版本,针对中文用户进行了本地化处理,使其更适合中国用户的使用习惯...

Global site tag (gtag.js) - Google Analytics