Библиотека knigago >> Литература по изданиям >> Самиздат, сетевая литература >> Рефакторинг. Зачем?


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 2213, книга: Срок годности
автор: Ян Шайн

Прочитав книгу "Срок годности" Яна Шайна, я погрузилась в необычный и интригующий мир. Эта книга из жанра современной прозы, помеченная тегами "самиздат", "русская литература", "поиски смысла жизни" и "духовные поиски", точно попадает в эти категории. Шайн мастерски создает сложных и глубоко проработанных персонажей, которые оказываются на перепутье жизни. Главный герой, Андрей, борется с экзистенциальным кризисом, пытаясь найти смысл своего...

DarkGoodWIN - Рефакторинг. Зачем?

Рефакторинг. Зачем?
Книга - Рефакторинг. Зачем?.   DarkGoodWIN  - прочитать полностью в библиотеке КнигаГо
Название:
Рефакторинг. Зачем?
DarkGoodWIN

Жанр:

Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, Pascal, Delphi, Lazarus и т.п.

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Рефакторинг. Зачем?"

Аннотация к этой книге отсутствует.

Читаем онлайн "Рефакторинг. Зачем?". [Страница - 9]

Exit;

end;

end;

На самом деле тоже не очень красиво. Приходится для каждого примитива делать проверку, поддерживает–ли он нужный нам тип (оператор is) и осуществлять приведение типов (оператор as). Операторы is и as предназначены для работы только с объектами и не работают с простыми типами. Подробнее о них можно прочитать в документации.

Чтобы оценить мощь наследования нам остался всего один шаг. В класс TShape добавим строку «function HitTest(X, Y: Integer): Boolean; virtual; abstract;”, а в классы TCircle и TRectangle добавим после аналогичных строчек ключевое слово override:


type

TShape = class(TObject)

public

function HitTest(X, Y: Integer): Boolean; virtual; abstract;

end;


TCircle = class(TShape)

public

 …..

function HitTest(X, Y: Integer): Boolean; override;

end;


TRectangle = class(TShape)

public

…..

function HitTest(X, Y: Integer): Boolean; override;

end;

Что это означает? Мы как бы говорим, что класс TShape в принципе может проверить, попали в него координаты мыши или нет, но конкретная реализация зависит от того, какой именно примитив используется. То есть абстрактно функциональность есть, но её реализация должна быть переопределена в классах потомках.

Нашу многострадальную функцию теперь можно переписать так:


var

Shapes: array of TShape;


function HitTest(X, Y: Integer): Boolean;

var

I: Integer;

begin

Result:= False;

for I:= 0 to Length(Shapes) — 1 do

begin

Result:= Shapes[I].HitTest(X, Y);

if Result then

Exit;

end;

end;

При этом, в случаю кругов, в реальности будет вызываться функция TCircle. HitTest, а в случае прямоугольников — TRectangle. HitTest.

Понятно, что в случае с одной абстрактной функцией выигрышь не совсем очевиден, но ведь можно расширить базовый класс, добавив в него функции:

TShape. Move(dx, dy: Integer); virtual; abstract;

для перемещения примитива,

TShape. Rotate(x, y: Integer; angel: Double); virtual; abstract;

для поворота вокруг точки,

TShape. Flip(Line: TLine); virtual; abstract;

для зеркального отображения вокруг прямой.

Реализация данных методов уникальна для каждого из классов наследников, однако сама функциональность применима ко всем графическим примитивам.


--">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.