- •5,6 Семестр Общие принципы проектирования программных систем. Этапы жизненного цикла программной системы.
- •1. Постановка задачи:
- •Требования, предъявляемые к программным системам:
- •2. Разработка:
- •3. Реализация:
- •Нисходящее и восходящее проектирование.
- •Структурное программирование (без go to).
- •2) Ветвление (if): 3) цикл с предусловием (do while):
- •1.2.4. Язык проектирования (метаязык)
- •Глава 2. Структуры данных.
- •2.1. Агрегативные переменные
- •2.2. Динамические структуры данных.
- •2.2.1. Списки. (Списочные структуры).
- •2.2.2. Очереди
- •2.2.3. Стеки
- •2.2.4. Множества
- •2.2.5. Деревья и графы
- •1 . Направленный граф:
- •2 . Ненаправленный граф:
- •2.3. Абстрактные структуры данных
- •2.3.2. Объекты
- •2.4. Файловые типы данных
- •2.4.4. Операции над файлами
- •4. Специальные операции:
- •Специальные типы файлов языка Pascal.
- •Файлы в других языках
- •3. Алгоритмы
- •3.1. Типы алгоритмов. Сложность алгоритмов.
- •3.2. Способы реализации алгоритмов.
- •5.2 Реализация наследования в Паскале
- •5.3 Проблема наследования статических методов
- •6.1 Объекты и их жизненный цикл
- •6.2. Инкапсуляция. Св-ва
- •6.3 Наследование
- •6.4. Области видимости
- •6.5 Информация о классе
- •Особенности архитектуры программ
- •7 .1 Обработчики сообщений Windows в Delphi
- •Средства разработки Windows приложений
- •4.4.2 Основные понятия ооп
- •4.4.3 Типы оос
- •4.4.4 Общие принципы работы оос-м
- •Особенности объектно-ориентированных систем
- •4.1 Декомпозиция и абстракция
- •Методы проектирования ориентированные на обработку
- •4.2.1 Модульное программирование
- •4.2.2 Функциональная декомпозиция
- •1. Пошаговое уточнение:
- •2. Метод анализа потоков данных:
- •Связанность модулей
- •Сцепление модулей
- •4.2.3. Технология структурного анализа проекта
- •4.2.4 Язык определения задач psl/psa
- •Методология Джексона
- •Методология Уорнера
- •4.2.6. Метод иерархических диаграмм hipo
- •Методы проектирования ориентированные на данные
2.3.2. Объекты
Объект можно рассматривать как конструкцию, описывающую абстрактные структуры данных в программе. Введение объектов в язык программирования означает достаточно радикальные изменения в самом подходе к программированию.
О бъект – это структура, включающая в себя взаимосвязанные данные различных типов и использующие эти данные процедуры и функции.
Схематично объект можно представить так ------------------>
С формальной точки зрения объект напоминает записный тип (record).
Type
T=record
данные
end;
Пример описания объекта:
Type
TO=object
Field1: тип;
Field2:тип;
…
procedure Proc1(p1,p2:тип);
function Fnc1: real;
end;
------------------------
{тела процедур и ф-ций выносятся из объектного типа}
procedure TO.Proc1(p1,p2:тип);
begin
…
end;
function TO.Fnc1: real;
begin
…
end;
Процедуры и функции объекта могут работать только с внутренними данными объекта. Объект хорошо приспособлен для абстрактного представления данных.
Методы объекта получают при вызове неявный параметр self (это ссылка на объект), через который удаётся адресоваться к внутренним данным объекта. Параметр self в проблемных ситуациях (конфликт имён) может использоваться явно. Наличие этого параметра отличает такие процедуры и ф-ции от обычных.
…
var {статический объект}
MyObject : TO;
…
MyObject.Proc1(p1,…);
a:=MyObject.Fcn1;
Объект может быть как статическим так и динамическим:
var {динамический объект}
MyObject : TO;
MyDynaObj : ^TO;
…
New(MyDynaObj); {создание экземпляра объекта}
MyDynaObj^.Proc1(p1,…); {работа с экземпляром объекта}
Dispose(MyDynaObj); {удаление экземпляра объекта}
Пример описания объекта и его использование:
program ObjTest;
const StackSize = 100;
type
NameStr = string[15];
Student = record
Name : NameStr;
Mark : integer;
end;
Stack = object {начало описания объекта типа Stack}
List : array[1..StackSize] of Student;
SP : integer;
procedure Init;
procedure Push(NM : NameStr; M : integer);
procedure Pop(var NM : NameStr; var M : integer);
function Empy : boolean
end;
{Описание:}
procedure Stack.Init;
begin
SP := 1;
end;
procedure Stack.Push;
begin
…
end;
procedure Stack.Empty : boolean;
begin
…
end;
procedure Stack.Pop;
begin
…
end;
{Использование:}
var
StackVar : Stack; {экземпляр класса Stack в терминах ООП}
begin
…
StackVar.Init;
…
StackVar.Push(‘Иванов’,5);
…
end;
Объявление объекта в модуле:
Модуль является идеальным хранилищем объекта. Такой подход принят в Object Pascal.
Пример объявления объекта Stack в модуле:
unit ObjStack;
interface
const
StackSize = 100;
type
NameStr : string[15];
Student = record;
…
end;
Stack = Object
…
end;
implementation
procedure Stack.Init;
begin
SP := 1;
end;
…
end;
2.4. Файловые типы данных
Файл - именованный набор данных (на внешнем носителе).
При работе с файлом внутренняя структура не имеет значения.
К файлам применимы операции:
Создание файла
Открытие
Чтение и модификация
Закрытие
Уничтожение
Файлы состоят из логических записей. Т.е. прог-а рассматривает файл как совокупность логических записей. Эти логические записи не видны для ОС. С другой стороны, информация на устройстве хранится в виде физических записей. С ними имеет дело ОС, а не прог-а.
Файлы используются, когда нужно хранить большие объёмы данных и передавать их в другие программы для обработки.
Файлы не всегда хранятся на внешних устройствах. Понятие файла может использоваться при обмене с внешним устройством.
В случае, когда файловые операции выполняются с устройствами ввода-вывода, а не с устройствами хранения, используются так называемые интерактивные физические блоки. Размер интерактивного физического блока равен размеру буфера, через который происходит обмен информацией с устройством ввода-вывода. В интерактивном физическом блоке могут выделяться логические записи (как в обычном физическом блоке на носителе). Для выделения логических записей при этом используются специальные управляющие символы. Для текстовых файлов это:
<CR> - возврат каретки
<LF> - перевод строки
<FF> - Format F
Существует 2 базовых метода доступа к информации в файлах:
1) последовательный доступ
2) прямой доступ
В зависимости от используемого метода доступа определяются 3 основные вида организации файлов:
последовательные файлы (файлы с последовательной организацией)
файлы с относительной нумерацией записей
индексные файлы
Методы доступа:
1. Последовательный метод доступа
Информация в файле обрабатывается строго последовательно. Сам метод – следствие особенностей физического устройства, на котором храниться файл (например, накопитель на магнитной ленте).
2. Прямой метод доступа
Используется для файлов, размещённых на устройствах прямого доступа. Позволяет получить доступ к любому блоку файла в произвольном порядке.
Виды организации файлов:
1. Последовательная организация файла
В последовательных файлах записи следуют одна за другой и доступны только в таком порядке. Записи могут не иметь номеров. Для доступа к нужной записи необходимо определить первую запись (от которой отсчитывается нужное число записей) и нужно определить последнюю запись (конец файла). Обычно продвижение в последовательном файле возможно только в одном направлении. Последовательные файлы удобны для хранения больших массивов данных, для которых не требуется оперативный доступ. Модификация последовательного файла невозможна без его переписывания на прямого доступа.
2. Файлы с относительной нумерацией записей
Эти файлы отличаются от ранее рассмотренных тем, что записи в них явно нумеруются. Такая нумерация обеспечивает быстрый доступ к требуемой записи. Такие файлы могут размещаться как на устройствах прямого, так и на устройствах последовательного доступа. Когда он размещается на устройстве прямого доступа, есть возможность вычислить физический адрес блока файла. Нумерация поддерживается на уровне файловой системы. Самый благоприятный случай, когда нумерация поддерживается исполняющей системой языка программирования. Информация в таких файлах желательно упорядочивать.
Типичный пример последов-х файлов с ненумерованными записями – файлы, с которыми работают программы на Pascal. Эти файлы содержат ненумерованные записи. Для таких файлов на уровне языка возможна имитация прямого доступа.
Пример объявления файла в Pascal:
Var
F:file of Char;
Все файлы в Pascal состоят из однотипных элементов. Логическое представление файла: .
Имитация прямого доступа выполняется с помощью стандартной процедуры: Seek (p1;p2);
Указатель текущей позиции в файле определяет позицию в файле, с которой работают операции ввода-вывода.
В языках высокого уровня поддерживаются логические файлы на уровне прикладного программирования. Средства поддержки: указатели, файловые переменные.
3. Индексные файлы
и меют специальную внутреннюю структуру. Они состоят из 2-х частей. Одна часть назыв. индексом, а вторая – физическим файлом.
Индекс – это совокупность указателей на записи в физическом файле. Эти две части могут размещаться в отдельных файлах. Файл индекс значительно меньше физического файла.
Индексная организация позволяет:
1) Ускорять доступ в файле.
Файл индексов может иметь более сложную организацию, чем просто последовательную (например, организация в виде бинарного дерева. Среде время поиска = , а для линейного списка - ).
2) Возможность логически упорядочивать информацию в физическом файле.
Например, индексный файл, в котором ключи упорядочены в порядке возрастания. В качестве ключа может использоваться любое индексное поле физического файла.
3) Может быть несколько индексных файлов, упорядоченных по-разному и имеющих в качестве ключей разные индексные поля данных.
Возможна индексация, имеющая более одного уровня.