Ruby 类和对象



  • Ruby 类和对象

    Ruby是一种完美的面向对象编程语言。面向对象编程语言的功能包括-
    • 数据封装
    • 数据抽象
    • 多态性
    • 继承性
    这些功能已在Ruby面向对象一章中进行了讨论。面向对象的程序涉及类和对象。类是从中创建单个对象的蓝图。用面向对象的术语来说,我们说您的自行车是称为自行车的一类对象的实例。以任何车辆为例。它包括车轮,马力以及燃油或汽油箱的容量。这些特征构成了Vehicle类的数据成员。您可以借助这些特性将一种车辆与另一种车辆区分开。车辆还可以具有某些功能,例如停止,驾驶和超速行驶。甚至这些功能也构成了Vehicle类的数据成员。因此,您可以将类定义为特征和功能的组合。
    车辆类别可以定义为-
    
    Class Vehicle {
    
       Number no_of_wheels
       Number horsepower
       Characters type_of_tank
       Number Capacity
       Function speeding {
       }
       
       Function driving {
       }
       
       Function halting {
       }
    }
    
    
    通过为这些数据成员分配不同的值,可以形成Vehicle类的多个实例。例如,一架飞机有三个轮子,马力为1,000,油箱类型为燃料,容量为100升。同样,一辆汽车有四个轮子,马力为200,油箱为汽油,容量为25升。
  • 在Ruby中定义一个类

    要使用Ruby实现面向对象的编程,您首先需要学习如何在Ruby中创建对象和类。Ruby中的类始终以关键字class开头,后跟该类的名称。名称应始终以大写字母开头。客户类可以显示为-
    
    class Customer
    end
    
    
    您可以使用关键字end终止类。所有数据成员定义在end之前。-
  • Ruby类中的变量

    Ruby提供四种类型的变量-
    • 局部变量 -局部变量是在方法中定义的变量。局部变量在方法之外不可用。您将在下一章中看到有关方法的更多详细信息。局部变量以小写字母或_开头。
    • 实例变量 -实例变量可用于任何特定实例或对象的各种方法。这意味着实例变量在对象之间变化。实例变量前面带有符号(@),后跟变量名称。
    • 类变量 -类变量可用于不同的对象。类变量属于该类,是类的特征。它们前面带有符号@@,后跟变量名称。
    • 全局变量 -类变量在类之间不可用。如果要使用单个变量(可在所有类中使用),则需要定义一个全局变量。全局变量始终以美元符号($)开头。
    例如 使用类变量@@no_of_customers,可以确定正在创建的对象数。这使得能够得出客户数量。
    
    class Customer
       @@no_of_customers = 0
    end
    
    
  • 使用 new 方法在Ruby中创建对象

    对象是类的实例。现在,您将学习如何在Ruby中创建类的对象。您可以使用类的new方法在Ruby中创建对象。new方法是一种独特的方法类型,它是在Ruby库中预定义的。新方法属于类方法。这是创建类Customer的两个对象cust1和cust2的示例-
    
    cust1 = Customer. new
    cust2 = Customer. new
    
    
    在这里,cust1和cust2是两个对象的名称。您写对象名称,后跟等号(=),其后跟随类名称然后,将出现点运算符和关键字new
  • 创建Ruby对象的自定义方法

    您可以将参数传递给new方法,这些参数可用于初始化类变量。当计划使用参数声明新方法时,需要在创建类时声明该方法初始化。所述初始化方法是一种特殊类型的方法中,当将要执行的新的类的方法被调用的参数。
    这是创建初始化方法的示例-
    
    class Customer
       @@no_of_customers = 0
       def initialize(id, name, addr)
          @cust_id = id
          @cust_name = name
          @cust_addr = addr
       end
    end
    
    
    在此示例中,您将id,name和addr声明为局部变量的initialize方法。在这里,defend用于定义Ruby方法initialize。您将在后续章节中了解有关方法的更多信息。 在initialize方法中,将这些局部变量的值传递给实例变量@cust_id,@cust_name和@cust_addr。此处,局部变量保存与新方法一起传递的值。
    现在,您可以创建对象,如下所示:
    
    cust1 = Customer.new("1", "John", "Guangxi,Nanning")
    cust2 = Customer.new("2", "Poul", "Guangdong,Shenzhen")
    
    
  • Ruby 类中的成员函数

    在Ruby中,函数称为方法。在每个方法类开始用关键字高清后跟方法名。方法名称始终以小写字母表示。您可以使用关键字end结束 Ruby中的方法。
    这是定义Ruby方法的示例-
    
    class Sample
       def function
          statement 1
          statement 2
       end
    end
    
    
    在这里,statement 1和statement 2是类Sample中方法函数主体的一部分。这些语句可以是任何有效的Ruby语句。
    
    class Sample
       def hello
          puts "Hello Ruby!"
       end
    end
    
    
    现在在以下示例中,创建Sample类的一个对象并调用hello方法,然后查看结果-
    
    class Sample
       def hello
          puts "Hello Ruby!"
       end
    end
    
    # Now using above class to create objects
    object = Sample. new
    object.hello
    
    
    尝试一下
  • 类案例研究

    对于您的案例研究,您将创建一个名为Customer的Ruby类,并将声明两个方法-
    • display_details- 此方法将显示客户的详细信息。
    • total_no_of_customers- 此方法将显示在系统中创建的客户总数。
    
    class Customer
       @@no_of_customers = 0
       def initialize(id, name, addr)
          @cust_id = id
          @cust_name = name
          @cust_addr = addr
       end
       def display_details()
          puts "Customer id #@cust_id"
          puts "Customer name #@cust_name"
          puts "Customer address #@cust_addr"
       end
       def total_no_of_customers()
          @@no_of_customers += 1
          puts "Total number of customers: #@@no_of_customers"
       end
    end
    
    
    display_details方法包含三个puts 语句,显示客户ID,客户名称,客户地址。puts语句将在一行中显示文本客户ID,后跟变量@cust_id的值,如下所示-
    
    puts "Customer id #@cust_id"
    
    
    如果要在一行中显示实例变量的文本和值,则需要在puts语句中的变量名称前加上井号(#)。文本和实例变量以及井号(#)应该用双引号引起来。第二种方法total_no_of_customers是包含类变量@@no_of_customers的方法。每次调用total_no_of_customers方法时,表达式@@no_of_customers + = 1都会向变量no_of_customers加1。这样,您将始终在class变量中拥有客户总数。现在,创建两个客户,如下所示:
    
    cust1 = Customer.new("1", "John", "GuangXi,NanNing")
    cust2 = Customer.new("2", "Poul", "GuangDong,ShenZhen")
    
    
    在这里,我们创建Customer类的两个对象cust1和cust2,并使用新方法传递必要的参数。调用initialize方法,并初始化对象的必要属性。创建对象后,您需要使用两个对象来调用类的方法。如果要调用方法或任何数据成员,请编写以下代码-
    
    cust1.display_details()
    cust1.total_no_of_customers()
    
    
    对象名称应始终后面跟有一个圆点,然后依次是方法名称或任何数据成员。我们已经看到了如何使用cust1对象调用这两种方法。使用cust2对象,您可以调用两个方法,如下所示-
    
    cust2.display_details()
    cust2.total_no_of_customers()
    
    
    保存并执行代码
    现在,将所有这些源代码如下所示放入main.rb文件中-
    
    class Customer
       @@no_of_customers = 0
       def initialize(id, name, addr)
          @@no_of_customers += 1
          @cust_id = id
          @cust_name = name
          @cust_addr = addr
       end
       def display_details()
          puts "Customer id #@cust_id"
          puts "Customer name #@cust_name"
          puts "Customer address #@cust_addr"
       end
       def total_no_of_customers()
          puts "Total number of customers: #@@no_of_customers"
       end
    end
    
    # Create Objects
    cust1 = Customer.new("1", "John", "GuangXi,NanNing")
    cust2 = Customer.new("2", "Poul", "GuangDong,ShenZhen")
    
    # Call Methods
    cust1.display_details()
    cust1.total_no_of_customers()
    cust2.display_details()
    cust2.total_no_of_customers()
    
    Customer.new("3", "Raghu", "JiangSu,NanJing")
    cust4 = Customer.new("4", "Rahman", "HuBei,WuHan")
    cust4.total_no_of_customers()
    
    
    尝试一下
    现在,如下运行该程序-
    
    $ ruby main.rb
    
    
    这将产生以下结果-
    
    Customer id 1
    Customer name John
    Customer address GuangXi,NanNing
    Total number of customers: 2
    Customer id 2
    Customer name Poul
    Customer address GuangDong,ShenZhen
    Total number of customers: 2
    Total number of customers: 4