如何在 Ruby 中实现数据抽象?
抽象是面向对象编程的概念,其中显示事物的基本属性,并隐藏所有不必要的属性。通过这种方法,可以隐藏实现细节,并仅提供重要的接口。
抽象的一个很好的例子是你的汽车。它是一个很好的抽象例子。当你转动钥匙或按下启动按钮启动汽车时,你不需要知道引擎是如何工作的或它是如何启动的,以及汽车中有哪些部件或其他什么东西。这些与驾驶员无关的细节对用户来说是隐藏的,因为没有必要增加复杂性,因此数据抽象在 Ruby 中的工作方式就是这样。
现在,我们已经讨论了抽象在一般编程术语中的含义。现在,让我们谈谈 Ruby 中的抽象。
Ruby 中的抽象发生在三个级别(或方式)。我们将在下面讨论这三种方式。
模块中的数据抽象
我们知道,在 Ruby 中,模块包含不同的方法,我们可以使用这些方法。考虑sqrt()方法的情况,我们可以调用它并在其中传递数字。我们不必担心sqrt()方法是如何实际计算平方根的。
类中的数据抽象
可以使用不同的访问修饰符来控制信息并在 Ruby 中执行数据抽象。
使用访问控制进行数据抽象
在 Ruby 中,我们可以使用private、public和protected等访问修饰符来实现数据抽象。
当我们在类中将成员声明为 public 时,该成员可以在程序的任何地方访问。如果我们将其声明为 private,则该成员只能在类内部访问。
让我们考虑一个简单的示例,我们将声明一个类并使用两个方法定义它们,其中第一个方法为public,第二个方法本质上为private。
示例 1
请考虑以下所示的代码
class Coders # defining the public Method public def publicMethod puts "In Public Method!" end # defining the private Method private def privateMethod puts "In Private Method!" end end # creating an object of class Coders object1 = Coders.new # calling the public method of class Coders object1.publicMethod
输出
当我们执行此代码时,它将产生以下输出:
In Public Method!
示例 2
在此示例中,我们将尝试从另一个类调用声明为private的方法,并查看会发生什么。
class Coders # defining the public Method public def publicMethod puts "In Public Method!" end # defining privateMethod private def privateMethod puts "In Private Method!" end end class Sample private def privateMethod puts "Trying..." end end # creating an object of class Coders obj1 = Coders.new obj2 = Sample.new obj1.publicMethod obj2.privateMethod
输出
如果我们在任何 Ruby IDE 上编写以下代码,那么我们将在终端中获得以下输出。
In Public Method! Traceback (most recent call last): main.rb:34:in `<main>': private method `privateMethod' called for #<Sample:0x00005573b8da04e0> (NoMethodError)
广告