Лекции по языку Ruby [Автор неизвестен] (pdf) читать постранично, страница - 2

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

z = x +yi соответствует
точка плоскости с координатами (x, y). Поэтому для задания комплекс
ного числа следует указать два действительных числа x и y. Самым
простым способом хранения этих двух чисел в одном объекте является
хранение их в массиве из двух элементов z = [x, y], например,
z1 = [1, 1]
z2 = [0, -3]
Недостатком такого представления является отсутстствие провер
ки на количество элементов массива и соответствие типа каждого из
элементов массива одному из числовых типов (Integer, Float). Предпо
лагается, что пользователь программы сам контролирует корректность
ввода данных и их использования.

Печать комплексного числа
Одной из самых распространенных операций для любого типа дан
ных является их представление в виде строки, которое используется
при их печати. Поэтому первой функцией, которую мы реализуем бу
дет функция comp_str для заданного комплексного числа z = [a, b]
возвращающая строку a+bi (без пробелов и знака умножения), напри
1

2

Глава 1. Комплексные числа в языке программирования Ruby

мер, для числа, заданного массивом [1, 2] будет возвращена строка
"1+2i" , а для числа [0, -3] — "0-3i".
def comp_str(z)
"#{z[0]}+#{z[1]}i"
end
puts comp_str(z1)
1+1i
На первый взгляд функция работает правильно, однако, если мы по
пробуем применить её к числу z2, то получим не тот результат, который
ожидали:
puts comp_str(z2)
0+-3i
Изменим функцию так, чтобы знак мнимой части отображался коррект
но:
def comp_str(z)
"#{z[0]}"+(z[1] < 0 ? ’-’ : ’+’)+"#{z[1].abs}i"
end
puts comp_str(z1)
puts comp_str(z2)
1+1i
0-3i

Сложение комплексных чисел
Определим функцию plus, возвращающую сумму двух комплексных
чисел:
def plus(z, w)
[z[0]+w[0], z[1]+w[1]]
end
z3 = plus(z1, z2)
puts comp_str(z3)
1-2i

§ 1. Реализация на базе массива из двух элементов

3

Умножение комплексных чисел
Функция mult предназначена для вычисления произведения двух
комплексных чисел:
def mult(z, w)
[z[0]*w[0] - z[1]*w[1], z[0]*w[1] + z[1]*w[0]]
end
z4 = mult(z1, z2)
puts comp_str(z4)
3-3i

Вычисление модуля комплексного числа
Так как в нашей программе используется функция с именем abs,
то нам придется дать функции для определения модуля комплексного
числа какое-нибудь другое имя. Пусть эта функция называется dist,
т. к. модуль комплексного числа z = x + yi есть расстояние от точки с
координатами (x, y) до начала координат.
def dist(z)
Math.sqrt(z[0]**2+z[1]**2)
end
puts dist(z1)
1.4142135623731

Упражнения
1. Измените функцию comp_str так, чтобы нулевые действительная
или мнимая части числа не отображались, например для z = [0, -2]
результат работы функции должен равняться "-2i".
2. Измените функцию comp_str так, чтобы равный 1 или −1 коеффи
циент мнимой части не печатался, например, для z = [2, -1] функция
должна возвратить значение "2-i".
3. Напишите функцию вычитания двух чисел minus.
4. Напишите функцию conjugate, находящую сопряженное число.
5. Напишите функцию divide, определяющую частное двух комплекс
ных чисел.

Глава 1

Объектно-ориентированное
программирование
§ 1.

ООП — результат эволюции методологий
программирования

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

Основные свойства ОО стиля
Программа, реализованная в объектно-ориентированном стиле про
граммирования, представляет собой некий сценарий взаимодействия
объектов, которые являются представителями того или иного
класса.
1

2

Глава 1. Объектно-ориентированное программирование

Малозначащие детали объекта (экземпляра класса) скрыты от поль
зователя. Взаимодействие между объектами происходит путем переда
чи (посылки) им сообщений, на которые они реагируют заранее предо
пределённым способом. Если дается команда какому-то объекту, то он
«знает», как ее выполнить. Фундаментальной концепцией в ООП
является понятие обязанности или ответственности за выпол
нение действия.
Можно сказать, что в основе ООП лежат три понятия:
• инкапсуляция (сокрытие данных в классе или методе);
• наследование;
• полиморфизм.
Инкапсуляцию данных можно представить, как защитную оболоч
ку вокруг кода данных, с которыми этот код работает. Оболочка задает
поведение и защищает код от произвольного доступа извне.