- •Содержание
- •Пояснительная записка
- •Раздел 1. Основы программирования
- •Тема 1.1 Понятие алгоритма
- •Понятие алгоритма. Свойства алгоритма
- •Алгоритмический язык
- •Понятие алгоритма. Свойства алгоритма
- •Хорезми
- •Тема 1.2 Методы описания алгоритма
- •Виды описания алгоритма
- •2. Алгоритмический язык
- •Тема 1.3 Типы алгоритмов
- •1.Типы алгоритмов
- •Алгоритм линейной структуры
- •3. Разветвляющийся алгоритм
- •4. Циклический алгоритм
- •5.Виды циклов
- •Цикл с предусловием (цикл пока)
- •2. Цикл с постусловием (цикл до)
- •3. Арифметический цикл (цикл для) – цикл с параметром.
- •Тема 1.4. Алгоритмический ряд.
- •Операторы цикла с условием
- •Операторы ограничения и прерывания цикла
- •Раздел 2. Решение задач на пэвм.
- •Тема 2.1. Основные этапы подготовки задачи к решению на пэвм.
- •Этапы решения задач
- •Тема 2.2 Программа на языке высокого уровня.
- •Тема 2.3. Методика Джексона
- •1. Методика Джексона
- •Шаг объект-действие
- •Раздел 3.Разработка программы на языке Турбо Паскаль
- •Тема 3.1 Основные элементы
- •История и классификация языков программирования
- •Элементы языка Турбо Паскаль
- •Тема 3.2. Типы данных
- •1. Типы данных Типы данных
- •Тема3.3 Программа на языке Турбо Паскаль
- •Структура программы на языке Паскаль
- •4. Вывод данных в тр
- •5. Ввод данных в тр
- •Тема 3.4 Массивы и их обработка
- •Строковый тип данных
- •Процедуры и функции для работы со строками
- •1. Определение массива
- •2 Описание массивов
- •3 Действия над массивами
- •4.Двумерный массив
- •6.Строковый тип данных
- •'Текстовая строка'
- •7. Процедуры и функции для работы со строками
- •Тема 3.5 Встроенные процедуры и функции
- •1. Арифметические процедуры и функции:
- •2. Функции преобразования типов:
- •3. Процедуры и функции для работы со строками:
- •Тема 3.6. Процедуры и функции пользователя
- •Отличия функции от процедур
- •3. Описание процедуры
- •4. Описание функций
- •5. Локальные и глобальные переменные.
- •6. Параметры в процедурах.
- •Тема 3.7. Записи
- •1. Структура записи в тр
- •2. Отличия записи от массива.
- •Тема 3.8 Файлы и их обработка
- •1. Понятие файла
- •2. Чтение и запись информации из файл или в файл
- •3.Доступ к файлам
- •4.Имена файлов
- •5. Связь файла с файловой переменной.
- •6. Открытие и переименование файла.
- •7. Типизированные фалы.
- •8. Нетипизированные файлы.
- •9.Текстовые файлы
- •Раздел 4. Объектно – ориентированная модель программирования
- •Тема 4.1. Основные характеристики ооп. Преимущества.
- •1. Основные характеристики ооп. Преимущества
- •Тема 4.2. Инкапсуляция.
- •Тема 4.3. Наследование.
- •Тема 4.4.Виртуальные методы и полиморфизм.
- •Перечень источников литературы для самостоятельного изучения учебной дисциплины «Основы алгоритмизации и программирования»
Тема 4.2. Инкапсуляция.
Тип лекции: текущая
План:
1. Понятие инкапсуляции. Одним из главных свойств ООП является инкапсуляция - замыкание в общей оболочке (Object…end) всех составляющих описания. При этом поля оказываются глобальными для методов данного объекта, т.к. у полей и методов общая область действия, то совпадение имен полей и формальных параметров методов не допустимо. Блоки-методы вынесены за описание типа объект. Имена блоков-методов, принадлежащих разным типам могут совпадать. Даже при совпадении имен заголовки методов будут различны, т.к. состоят из префикса (имени типа) и имени метода. Доступ к полям объектов из вне можно принудительно ограничивать. Для этого группа полей в описании объекта заключается в скобки Private Public. После этого поля окажутся доступными лишь методам данного модуля.
Описание объекта (как и всех прочих типов) должно содержаться в разделе описаний. Данные, которые содержит объект, называются полями объекта. Описание простейшего объектного типа очень похоже на описание записи; только вместо одного зарезервированного слова (RECORD) используется другое (OBJECT).
Type
Dot = object
a, b : integer;
end;
Этот объектный тип, содержащий два поля, представляет собой точку на экране с координатами a и b.
Помимо данных в виде полей (которые могут принадлежать любому типу, в том числе и объектному), объект также может содержать подпрограммы, описывающие действия, допустимые над этими полями. Такие подпрограммы называются методами. Метод имеет доступ к полям объекта, не нуждаясь в передаче их ему в качестве параметров. Свойство объектов содержать в себе не только данные (поля), но и описание действий, допустимых над этими данными (методы), называется инкапсуляцией.
При этом непосредственно в описании объекта имеются только заголовки подпрограмм, а тело каждой подпрограммы задается отдельно. Вернемся к типу Dot из предыдущего примера. Вот как выглядит описание этого объектного типа, дополненное необходимыми методами (описание полей всегда должны предшествовать заголовкам методов).
Type
Dot=object
a, b : integer;
procedure Init (x, y : integer) ;
procedure Show;
procedure Hide;
procedure Move (Da, Db : integer)
end;
{--------------------------------------------------------}
procedure Dot.Init;
begin
a := x; b := y
end;
{--------------------------------------------------------}
procedure Dot.Show;
begin
PutPixel (a, b, White)
end;
{-------------------------------------------------------}
procedure Dot.Hide;
begin
PutPixel (a, b, Black)
end;
{-----------------------------------------------------}
procedure Dot.Move;
begin
Hide;
a:=a+Da; b:=b+Db;
Show
end;
В этом примере объект содержит четыре метода. Метод Init инициализирует объект (т.е. присваивает точке на экране некоторые начальные значения). Методы Show и Hide «зажигают» и «гасят» точку на экране. Наконец, метод Move перемещает точку по экрану.
После того как объектный тип объявлен, ничто не мешает создавать переменные этого типа, или, следуя терминологии ООП, экземпляры объекта. Это могут быть как статистические переменные, объявленные в разделе описания переменных, так и динамические, созданные с помощью стандартной процедуры New .
Var
Dot1 : Dot;
Здесь объявлена (статистическая) переменная Dot1 (или экземпляр объекта), принадлежащая типу Dot. После того как экземпляр объекта создан, его поля становятся доступны для методов, хотя к полям объекта возможен и непосредственный доступ – как к полям записи (этого Turbo Pascal не запрещает). Для этого чтобы непосредственно применить к полю объекта какую-либо стандартную подпрограмму, достаточно воспользоваться его составным именем – указать идентификатор объекта и (через точку) идентификатор этого поля. Однако такой подход был бы отступлением от принципов объектно-ориентированного программирования (ООП). ООП при манипулировании полями объекта предполагает использование только его методов.
Dot1.Init (100,100);
Dot1.Show;
Dot1.Move (50, 50);
Так же как и к записям, к объектам применим оператор WITH.
with Dot1 do begin
Init (100, 100);
Show;
Move (50, 50)
end;
Представленные выше две последовательности операторов эквивалентны.
Полный текст программы, с фрагментами которой мы только что имели дело, представлен ниже. Данная программа отображает на экране светящуюся точку (пиксель). Кроме того, отображаемую точку можно перемещать по экрану в четырех направлениях с помощью соответствующих клавиш-стрелок.
Пример
program ObjDot;
uses crt, graph;
type
Dot = object
a, b : integer;
procedure Init (x, y : integer);
procedure Show;
procedure Hide;
procedure Move (Da, Db : integer)
end;
{------------------------------------------------------}
procedure Dot.Init;
begin
a : =x; b :=y
end;
{-----------------------------------------------------}
procedure Dot.Show;
begin
PutPixel (a, b, White)
end;
{------------------------------------------------------}
procedure Dot.Hide;
begin
PutPixel (a, b, 0)
end;
{------------------------------------------------------}
procedure Dot.Move;
begin
Hide;
a :=a+Da; b :=b+Db;
Show
end;
{-------------------------------------------------------}
var i, j, k, Err : integer;
a : char;
Dot1 : dot
{------------------------------------------------------}
begin {тело программы}
i : detect;
InitGraph (i, j, ‘ ‘);
Err :=GraphResult;
if Err <> grOK then
writeLn (GraphErrorMsg (Err))
else
begin
Dot1.Init (GetMaxX div 2, GetMaxY div 2)
Dot1.Show;
while KeyPressed do a:=ReadKey;
repeat
begin
a:=ReadKey;
case ord (a) of
72: Dot1.Move (0, -5);
80: Dot1.Move (0, 5);
77: Dot1.Move (5, 0);
75: Dot1.Move (-5, 0)
end
end;
until a = chr (27)
end
end.
В программе объявлен уже знакомый нам объект Dot, содержащий два поля: a и b, которые определяют положение точки на экране, а также четыре метода: Init, Show, Hide и Move.
Далее следует раздел описания переменных, в котором среди прочих переменных объявлен экземпляр объекта Dot1. Тело программы начинается с операторов, обеспечивающих переход в графический режим.
Далее следует оператор REPEAT, выявляющий нажатие определенной клавиши. Оператор CASE здесь содержит четыре варианта, которые соответствуют четырем клавишам-стрелкам. Каждый из упомянутых вариантов вызывает метод Move с фактическими параметрами, обеспечивающими перемещение светящейся точки в нужном направлении и на определенном расстоянии – на пять пикселей.
Условием завершения цикла, организованного с помощью оператора REPEAT, является нажатие клавиши, генерирующей скэн-код 27 (это клавиша <Esc>). На этом завершает работу и вся программа в целом.
Перечень источников:
1. Ахо Альфред В., Хопкрофт Джон, Ульман Джеффри Д. Структуры данных и алгоритмы: Пер. с англ.: Уч.пос.- М.: Издательский дом “Вильямс”, 2000.-324 с.
2. Бауэр Ф.Л., Гооз Г. Информатика. Вводный курс: В 2 ч.- М.:Мир, 1990.-543с.
3. Вирт Н. Алгоритмы + структуры данных = программы.- М.: Мир, 1985. (Алгоритмы и структуры данных.- М.: Мир, 1989.) (Алгоритмы и структуры данных. – СПб.: Невский Диалект, 2001. (2-е изд., испр.))
