
- •В языках программирования высокого уровня используется два типа подпрограмм: процедуры и функции
- •Var имя праметра: имя типа
- •10.3.1. Параметры-значения
- •№8. Явная и неявная рекурсия.
- •№9. Множества. Определение. Область применения
- •№10 И 11. Всё о модулях.
- •12 Бтлет
- •64К, зарезервированная в Borland Pascal для данных, может ока-
- •1. Открытые параметры
- •№25. Причины возникновения ооп.
- •№26. Наследование объектов
- •№ 27. Полиморфизм. Свойства.
- •№28.Методы.
- •Identifier" (Ошибка 4; Повторение идентификатора), если попытае-
- •№29. Облости вилимости в модели объектов Pascal
- •№30.Поведение методов объектов при наследовании
- •№31.Инкапсуляция. Свойства.
- •№32. Объекты. Поля и методы.
- •X,y : Word; {Координаты позиции на экране}
- •№33.Определение объекта.
№31.Инкапсуляция. Свойства.
Инкапсуляция
Инкапсуля́ция — свойство языка программирования, позволяющее объединить и защитить данные и код в объект и скрыть реализацию объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только спецификация (интерфейс) объекта. Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевого слова: public.
Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected, internal.
Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием).
Предостережение: Одна из наиболее распространенных ошибок — делать сокрытие реализации только ради сокрытия. Целями, достойными усилий, являются:
предельная локализация изменений при необходимости таких изменений,
прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.
Образ в пример: ложка, опущенная в стакан, не меняет его свойств и не становится частью стакана, хотя и помогает пить из него чай; в то же время, сахар, растворенный в чае с помощью ложки, делает его сладким.
Часто инкапсуляция может быть достигнута простейшими организационными мерами: знание того, что «вот так-то делать нельзя» иногда является самым эффективным средством инкапсуляции!
1)Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевых слов: public, private, protected, internal.
2)Пользователь не может влиять на работу объекта, кроме как через интерфейс. Реализуется с помощью использования закрытых данных и методов, значения которых берутся из открытого интерфейса при создании объекта.
В Турбо Паскале средства объектно-ориентированного программирования связаны с тремя зарезервированными словами: OBJECT, CONSTRUCTOR и DESTRUCTOR и двумя стандартными директивами: PRIVATE и VIRTUAL.
Зарезервированное слово OBJECT используется для описания объекта. Описание объекта должно помещаться в разделе описания типов, например:
Type
TPoint = object
X, Y: Integer: {Координаты точки}
Color: word: {Цвет точки}
Visible: Boalean; { Признак светимости}
Procedure SetLocitlon(NewX, NewY: integer);
{Задает новое положение точки на экране}
Procedure SetColor(NewColor: word);
{Устанавливает цвет точки}
Procedure SetVisible(Vls: Boolean);
{Выводит или гасит точку}
Procedure GetLocation(var XLoc, YLoc: Integer):
{Возвращает координаты точки}
Function GetColor: word;
{Возвращает цвет точки}
Function GetVisible: Boolean;
{Возвращает признак светимости точки}
end; {Конец описания объекта TPoint}
В этом примере описывается объект TPOINT, представляющий собой данные и методы (процедуры и функции), необходимые для работы с графическими точками на экране ПК. Заметим, что инкапсулированные в объект процедуры и функции называются методами. Как видим, каждая точка характеризуется некоторым набором данных (своими координатами Х и Y цветом COLOR и признаком светимости VISIBLE). Над этими данными определены все необходимые алгоритмические действия. Если описать такой объект, то в программе можно предусмотреть сколько угодно экземпляров объекта, т.е. переменных типа объект. С помощью этих переменных можно осуществлять все предусмотренные в объекте действия, например, для переменных типа TPOINT можно высветить или погасить любую точку, переместить ее по экрану, изменить цвет. В следующем фрагменте программы точка перемещается на два пикселя вниз и вправо по экрану:
Vаr
Point: TPaint;
X. Y : Integer;
{Экземпляр объекта TPOINT}
with Point do begin
If GetVisible then
SetVlilble(False); {Погасить точку}
GetLocatlon(X,Y); {Получить координаты}
SetLocatlon(X*2, Y*2); {Задать новые координаты}
SetVisible(True) {Зажечь точку}
end;
...
Нетрудно заметить, что описание объекта и использование объектных переменных во многом похоже на описание и использование записей: инкапсулированные в объекте данные и методы становятся доступны с помощью оператора присоединения WITH или с помощью составных имен, например:
If Point.GetVltlble then Point.SetVisible(False);
При описании объекта вначале описываются все инкапсулированные в нем данные, а затем – методы доступа к этим данным. В качестве методов используются процедуры и функции, а также конструкторы и деструкторы (см. ниже). Сами методы при описании объекта не раскрываются, указывается лишь их заголовок. Предполагается, что они описываются где-то ниже по тексту программы, например:
Type
TPoint = object
...
end;
PROCEDURE TPoint.SetVisible(Vis: Boolean);
{Реализация метода SETVISIBLE)
BEGIN
If Vis then
begin
PutPlxel(X,Y,Color);
{Высветить точку цветом Color}
Visible := True; {Установить флаг светимости}
end
else
begin
PutPlxel(X,Y,GetBkColor);
{Погасить точку цветом фона}
Visible := False;
{Сбросить признак светимости}
end
END; {TPoint.SetVisible}
Таким образом, указание методов при описании объекта подобно их опережающему описанию. Поскольку данные и методы инкапсулированы в одном объекте, все данные автоматически становятся глобальными по отношению к любым методам и могут использоваться в них произвольным образом. Точнее говоря, любой метод объекта работает с невидимым оператором WITH, обеспечивающим ему доступ ко всем полям (как мы увидим далее, поля могут следовать в объявлении типа и после объявления метода и в этом смысле не являться для него глобальными). При обращении к методу ему передается особый идентификатор SELF, представляющий собой обобщенное имя экземпляра объекта. Любой метод может использовать идентификатор SELF, чтобы явно указать на принадлежащий объекту метод или поле. Например:
type ТСоо = record
X,Y: Integer;
end:
TPoint = object
X,Y: Integer;
Procedure Init(Coo: ТСоо);
end;
Procedure TPoint(Coo: ТСоо);
begin
with Coo do begin
Self.X := X;
Self.Y := Y
end
end;