
- •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. Структуры данных.
В стандартных языках программирования имеется предопределенный набор типов данных. Но этот набор типов при решении прикладных задач часто оказывается неполным.
Тип переменной определяет множество значений, которые она может принимать и набор операций, которые можно применять к этой переменной.
Опр. Скалярные переменные - это переменные, тип которых относится к одному из предопределенных типов языка.
Опр. Агрегативные переменные – переменные, тип которых состоит из наборов скалярных типов.
2.1. Агрегативные переменные
Простейшей агрегативной переменной является массив (упорядоченный набор данных одного типа).
На метоязыке: declare A(10) integer;
Будем считать, что массив относится к статической структуре данных (нединамические), т.е. структура для которой место выделяется до запуска программы.
Доступ к элементу массива: А(2):=1;
Записи (записные типы) – более сложная структура, чем массив – она состоит из нескольких типов.
На метоязыке
Описание структуры данных:
declare 1 X,
2 Y integer;
2 Z(1) real;
X.Y:=1;
Объявление типа (Pascal):
type
Struct1 = record
x:integer;
y:array 1..10 of real;
end;
var
s:Struct1; - объявление переменной этого типа.
Замечание: Агрегативные структуры данных используются для создания более сложных структур данных: динамических и абстрактных структур данных.
2.2. Динамические структуры данных.
2.2.1. Списки. (Списочные структуры).
Список – основа любой динамической структуры.
О
пр.
Список – упорядоченный набор
данных одного типа. Отличается от массива
тем, что имеет переменный размер (размер
списка не определяется при запуске
программы).
Список из n элементов --------------------------------->
Список может быть реализован 2-мя способами:
на основе статических структур ( массивов ).
на основе динамических переменных.
Пример объявления списка:
1. на основе статических структур:
type
TList = record
| DATA_ENTRIES : тип;
end;
var
List : array [1..N] of TList; {массив, N=const }
SIZE : integer;
{
,
указывает текущий размер}
… {базовые операции}
2. на основе динамических переменных:
type
PTR = ^TList; {новое поле данных имеющий тип указателя на TList }
TList = record
| DATA_ENTRIES : тип;
| NPTR : PTR {указатель на начало списка}
end;
var
LIST_HEAD : PTR; {указатель, который может указывать на начало ( или конец) списка}.
Обращение к элементам списка, созданного первым способом:
List[1].DATA_ENTRIES;
List[2].DATA_ENTRIES;
…
List[N].DATA_ENTRIES;
Обращение к элементам списка, созданного вторым способом:
List_HEAD^.DATA_ENTRIES; - обращение к I-ому элементу
List_HEAD^.NPTR^.DATA_ENTRIES; - ко II-ому элементу
List_HEAD^.NPTR^. NPTR^.DATA_ENTRIES;
…
Это однонаправленный ( односвязный) список – можно перемещаться только вперед.
Процедуры для динамического списка:
Исходная структура списка:
type
NameStr=string[15];
Link=^Student
Student=record
Name:NameStr;
Mark:integer;
…
Next:Link;
end;
var
First:Link;
Создание и инициализация динамической переменной:
v
ar
P:Link;
…
New(P); {создали элемент списка}
{инициализируем элемент списка}
P^.Name:=’Иванов’;
P^.Mark:=5;
…
P^.Next:=nil; {пустой указатель}
Процедура добавления элемента в начало списка:
procedure AddFirst(A:Link);
{А-указатель на добавляемый элемент}
begin
A^.Next:=First;
First:=A;
end;
Процедура добавления элемента в произвольное место списка:
procedure AddAfter(A,Old:Link);
begin
a^.Next:=Old^.Next; {(1) А-указатель на добавляемый элемент}
Old^.Next:=A; {(2) Old-указатель на элемент списка, за которым
добавляется элемент}
e
nd;
Удаление элемента из начала списка:
procedure DelFirst(var A:Link);
begin
A:=First; {сохраняем указатель на удаляемый элемент}
First:=First^.Next;
end;
Удаление элемента из произвольного места списка:
procedure DelAfter(Old:Link;Var A:Link);
begin
A:=Old^.Next; {сохраняем указатель на удаляемый элемент}
Old^.Next:=Old^.Next^.Next
end;
Поиск элемента:
function FindName(FN:NameStr):Link; {ф-ция возвращает указатель (Link) на найденный элемент}
var Curr:Link; {Curr – указатель на текущий элемент списка }
begin
Curr:=First;
While Curr<>nil do
If Curr^.Name=FN then
begin
FindName:=Curr;
{возвращает указатель на найденный
Exit; элемент}
end;
else
Curr:=Curr^.Next;
FindName:=nil; {элемент не найден}
end;