
- •Лабораторная работа № 1 Программирование на языке Object Pascal
- •1. Введение
- •2. Алфавит языка Object Pascal
- •3. Структура программы
- •4. Типы данных
- •5. Выражения и операции
- •6. Операторы
- •7. Структурированные типы данных
- •8. Организация ввода-вывода
- •Выполнить компиляцию и проверку работы программы, последовательно нажимая кнопки “Операция”, “Проверка”, “Закрыть’.
- •9. Процедуры и функции
- •10. Отчет по лабораторной работе
- •Литература
- •Приложение 1 Стандартные подпрограммы преобразования типов
- •IntToStr(Value) - преобразовать целое число в десятичную символьную форму
- •Val(s, V, Code) - преобразовать символьную форму числа в двоичную
- •Приложение 2 Стандартные подпрограммы для "коротких" и "длинных" строк
- •Insert(Source, s, Index) - поместить в строку другую строку
- •Лабораторная работа № 2 Принципы объектно-ориентированного проектирования программ в среде delphi
- •1. Введение
- •2. Основные понятия ооп
- •2.1. Классы
- •2.2 Объекты
- •2.3. Методы
- •2.4. Инкапсуляция и свойства объекта
- •2.5. Наследование
- •2.6. Области видимости в классах
- •2.7. Полиморфизм и виртуальные методы
- •3. Классы и объекты delphi
- •Литература
- •1. Фаронов в.В. Delphi 3.Учебный курс. – м.: “Нолидж”, 1998. Объектно-ориентированное программирование
- •Часть 1
- •391000, Рязань, ул. Гагарина, 59/1
2.4. Инкапсуляция и свойства объекта
Под инкапсуляцией понимается скрытие полей объекта с целью обеспечения доступа к ним только посредством методов класса.
В Object Pascal ограничение доступа к полям объекта реализуется с помощью свойств объекта. Свойство объекта характеризуется полем, хранящим значение свойства, и двумя методами, обеспечивающими доступ к полю свойства. Метод установки значения свойства называется методом записи свойства (write), метод получения значения свойства называется методом чтения свойства (read).
В описании класса перед именем свойства записывают ключевое слово property (свойство). После имени свойства указываются его тип, затем имена методов, обеспечивающих доступ к значению свойства. После слова read указывается имя метода, обеспечивающего чтение свойства, после слова write —имя метода, обеспечивающего запись свойства. Ниже приведен пример описания класса TTPerson, содержащего два свойства: Name и Address.
type
TName=string[15];
TAddress=string[35];
TTPerson = class
private
FName:Tname; //значение свойства Name
FAddress:TAddress; // значение свойства Address
Constructor Create(Name:Tname);
Procedure Show;
Function GetName:TName;
Function GetAddress:TAddress;
Procedure SetAddress(NewAddress:TAddress);
public
Property Name: Tname
read GetName;
Property Address: TAddress
read GetAddress;
write SetAddress;
end;
В программе для установки значения свойства необязательно записывать оператор применения к объекту метода установки значения свойства, можно записать обычный оператор присваивания значения свойству. Например, чтобы присвоить значение свойству Address объекта student, достаточно записать
student.Address:=’С.Петербург, ул. Садовая, 21, кв.3’;
Компилятор перетранслирует приведенный оператор присваивания значения свойству в оператор вызова метода:
student.SetAddress('С.Петербург, ул. Садовая, 21, кв.3');
Внешне использование свойств в программе ничем не отличается от использования полей объекта. Вместе с тем между свойством и полем объекта существует принципиальное отличие: при присвоении и чтении значения свойства автоматически вызывается процедура, которая выполняет некоторую работу.
В программе на методы свойства можно возложить некоторые дополнительные задачи. Например, с помощью метода можно проверить корректность присваиваемых свойству значений, установить значения других, логически связанных со свойством, полей, вызвать вспомогательную процедуру.
Оформление данных объекта как свойства позволяет ограничить доступ к полям, хранящим значения свойств объекта, например можно разрешить только чтение. Чтобы операторы программы не могли изменить значение свойства, в описании свойства надо указать только имя метода чтения. Попытка присвоить значение свойству, предназначенному только для чтения, вызывает ошибку времени компиляции В приведенном выше описании класса TTPerson свойство Name доступно только для чтения, а свойство Address — для чтения и записи.
Установить значение свойства, защищенного от записи, можно во время инициализации объекта. Ниже приведены методы класса TTPerson, обеспечивающие создание объекта класса TTPerson и доступ к его свойствам.
//конструктор объекта TTPerson
Constructor TTPerson.Create(Name:TName);
begin
Fname:=Name;
end;
//метод получения значения свойства Name
Function TTPerson.GetName;
begin
Result:=FName;
end;
//метод получения значения свойства Address
Function TTPerson.GetAddress;
begin
Result:=FAddress;
end;
//метод изменения значения свойства Address
Procedure TTPerson.SetAddress(NewAddress:TAddress);
begin
if FAddress =’’
then FAddress:=NewAddress;
end;
Приведенный конструктор объекта TTPerson создает объект и устанавливает значение поля FName, определяющего значение свойства Name.
Операторы программы, обеспечивающие создание объекта класса TTPerson и установку его свойства, могут быть, например, такими:
student:=TTPerson.create('Иванов');
student.address:=’ул. Садовая, д.21, кв. 3’;