Опубликован: 27.07.2006 | Доступ: свободный | Студентов: 3174 / 531 | Оценка: 4.28 / 4.13 | Длительность: 26:56:00
Специальности: Программист
Лекция 11:

Введение в ООП

< Лекция 10 || Лекция 11: 123456789

Объекты и методы

При описании Ruby было отмечено, что он является объектно-ориентированным языком программирования. Это означает что все, с чем работает программа, является объектом, при этом вычисление осуществляется посредством взаимодействия объектов. Каждый объект есть представитель (экземпляр) некоторого класса и его поведение (функциональность) определяется именно им. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия, называемые методами. Для того чтобы применить метод к некоторому объекту используется оператор вызова метода, обозначаемый символом . (точка): после указания объекта ставится точка, а затем указывается применяемый метод.

Пока мы не будем вдаваться в особенности объектно-ориентированного программирования (тем более, что в различных языках программирования по разному трактуется концепция ООП), а лишь познакомимся с некоторыми "простейшими" объектами, без которых невозможно приступать к дальнейшему изучению языка. Это представители так называемых "встроенных" классов. Среди них:

true - логическая величина, означающая истину; единственный представитель класса TrueClass ;

false - логическая величина, означающая ложь; единственный представитель класса FalseClass ;

числа - представители класса Numeric, который в качестве подклассов содержит дробные ( Float ) и целые числа ( Integer );

строки - представители класса String ;

nil - "ничто"; единственный представитель класса NilClass.

моменты времени - представители класса Time.

Числа

Знакомство с представителями различных классов начнем с чисел. Целые числа в Ruby являются экземплярами класса Integer, который объединяет два подкласса: Fixnum или Bignum. Объектами класса Fixnum являются те целые, чье двоичное представление способно разместится в машинном слове (31 бит на большинстве компьютеров). Если число выходит за границы указанного диапазона, то оно автоматически преобразуется в объект класса Bignum, чей диапазон изменения ограничивается только объемом доступной памяти. Если в результате работы с объектами класса Bignum итоговое значение попадает в диапазон, задаваемый классом Fixnum, то выдаваемый результат преобразуется в экземпляр класса Fixnum.

Число Класс
123456 Fixnum
123_456 Fixnum (подчеркивание игнорируется)
-543 отрицательное Fixnum
123_456_789_123_456 Bignum
0xaabb шестнадцатеричное
0377 восьмеричное
-0b1010 двоичное (отрицательное)
0b001_001 двоичное

При записи целых чисел сначала указывается его знак (знак + обычно опускается). Далее следует основание системы счисления, в которой задается число (если оно отлично от 10): 0 - для восьмеричной, 0x - для шестнадцатеричной, 0b - для двоичной. Затем идет последовательность цифр, выражающих число в данной системе счисления. При записи больших чисел можно использовать символ подчеркивания, который игнорируется при обработке. В таблице представлены целые числа и указана их принадлежность к тому или иному классу.

Дробные числа задаются в десятичной системе счисления, при этом для отделения дробной части используется символ . (точка). Такие числа являются экземплярами класса Float, например, 12.34. Для задания дробных чисел может быть применена и экспоненциальная форма записи: два различных представления -.1234е2 и 1234е-2 задают одно и тоже число 12.34.

Для вычисления арифметических выражений применяются следующие операторы: + (сложение), - (вычитание), * (умножение), / (деление), % (остаток от деления), ** (возведение в степень). Порядок вычисления определяется стандартными приоритетами операций, а для его изменения используются круглые скобки. Заметим, что если все аргументы выражения целые числа, то и результат будет целым, если же хотя бы одно из чисел, входящих в выражение - дробное, то и результат будет экземпляром класса Float.

Пример

Создайте файл с именем object.rb, в который поместите следующий фрагмент. Выполните программу и объясните результат.

puts 5/8                       # 0
puts 5.0/8                     # 0.625
puts 2**1000    
puts ((2*500+1)*(2**500-1))
#!/usr/bin/env ruby

puts 5/8                       # 0
puts 5.0/8                     # 0.625
puts 2**1000    
puts ((2*500+1)*(2**500-1))    

=begin
puts (2**30-1).type
a=0b001_001
puts a
puts a.type
a=12.34
puts a
puts a.type
a=12.34e2
puts a
puts a.type
=end

puts 12.34.ceil                  #  13
puts 12.34.floor                 #  12
puts -12.ceil                    # -12  
puts -12.floor                   # -12
puts 12.34.round                 #  12 
puts 12.54.round                 #  13
puts -34.56.abs                  #  34.56

puts -12.34.to_i                 # -12
puts 1234.to_f                   # 1234.0


=begin
puts 123_456_789.type
puts 0xaabb
puts -0b1010/0b10
puts 2/3.to_f
=end
Пример 1.2.

Отметим еще несколько методов, используемых при работе с числами (т. е. представителями класса Numeric ). Среди них: ceil (нахождение наименьшего целого не меньшего, чем данное), floor (наибольшее целое, не большее данного), round (округление до ближайшего целого), получение абсолютной величины числа abs. Ниже приведены примеры использования этих методов.

puts 12.34.ceil                  #  13
puts 12.34.floor                 #  12
puts -12.ceil                    # -12  
puts -12.floor                   # -12
puts 12.34.round                 #  12 
puts 12.54.round                 #  13
puts -34.56.abs                  #  34.56

В Ruby имеется несколько методов, позволяющих преобразовывать объекты одного класса в другой.

Метод Назначение метода Пример использования Результат
to_f Преобразовать объект в экземпляр класса Float 1234.to_f 1234.0
to_i Преобразовать объект в экземпляр класса Fixnum или Bignum -12.34.to_i -12

В последнем примере первая точка отделяет дробную часть числа, а вторая является оператором вызова метода.

< Лекция 10 || Лекция 11: 123456789
Светлана Овчаркина
Светлана Овчаркина
Елена Митющенко
Елена Митющенко
И какова взаимосвязь между информацией и данными?