Книга: Рефакторинг. Зачем?
Объединение данных и кода
Объединение данных и кода
В прошлой главе мы создали новый класс, научились создавать экземпляры классов и на этом закончили. Давайте эту главу начнём с примера использования данной конструкции:
function CalculateLineLength(Line: TLine): Double;
begin
Result:= Sqrt(Sqr(Line. X2 — Line. X1) + Sqr(Line. Y2 — Line. Y1));
end;
var
Line: TLine;
LineLenght: Double;
begin
Line:= TLine. Create;
Line. X1:= 10;
Line. Y1:= 10;
Line. X2:= 20;
Line. Y2:= 20;
LineLenght:= CalculateLineLength(Line);
end;
Тут мы создаём новую линию и рассчитываем её длину. Для этого мы завели вспомогательную функцию CalculateLineLength.
Если приглядется, то в нашей новой функции слишком часто упоминается название переменной Line. Возможно есть способ сделать код несколько проще и наглядней? К счастью да. Дело в том, что функцию можно перенести непосредственно в класс:
type
TLine = class(TObject)
public
X1: Integer;
Y1: Integer;
X2: Integer;
Y2: Integer;
function CalculateLineLength: Double;
end;
function TLine. CalculateLineLength: Double;
begin
Result:= Sqrt(Sqr(X2 — X1) + Sqr(Y2 — Y1));
end;
В месте использования код также становтся наглядней. Строка LineLenght:= CalculateLineLength(Line); заменится на строку: LineLenght:= Line. CalculateLineLength;, что несколько короче и куда лучше подчёркивает тот факт, что функция относится именно к линии, а не к чему–то ещё.
Отмечу, что на практике, глядя на исходный код, часто возникает потребность понять, что можно сделать с тем или иным классом. Так вот, значительно проще, удобнее и быстрее пройтись по членам класса, чем найти все функции, принимающие класс в качестве параметра.
И немного из терминологии. Функцию член класса принято называть методом. В нашем случае, мы имеем класс с одним методом CalculateLineLength.
- Введение
- Именование переменных и функций
- Стандартные имена функций и переменных
- Преобразование одной большой функции в две маленькие
- Признаки необходимости выделения функции
- Выделение функции в процессе написания
- Когда не следует выделять функцию
- Использование модулей
- Более сложные способы организации данных
- Объединение данных и кода
- Приватные члены класса
- Свойства
- Наследование
- Содержание книги
- Популярные страницы
- Резервное копирование базы данных InterBase
- Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Владелец базы данных
- ЧАСТЬ IV. База данных и ее объекты.
- Перевод базы данных InterBase 6.x на 3-й диалект
- Типы данных для работы с датой и временем
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Обзор основных причин повреждения базы данных
- Ошибки проектирования базы данных
- Профилактика повреждений баз данных InterBase