- •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
- •Методы проектирования ориентированные на данные
4. Специальные операции:
Это группа операций предназначена для выполнения действий над элементами файловой системы.
Erase(…) – стирание файла
Rename(…) – переименование
ChDir(…) – установка каталога по умолчанию
MkDir(…) – создание каталога
RmDir(…) –удаление каталога
Пример работы с файлами:
Программа, создающая целочисленные файлы и записывающая в них данные:
Program WriteFile (input,output);
Var
F: file of integer;
AR:array [1..10] of integer;
i: integer;
begin
for i:=1 to 10 do AR[i]:=i-1;
//связываем логический и физический файлы
Assign(F,’int_file.dat’);
//открываем файл
Rewrite(F);
//записываем в файл значения элементов массива
For i:=1 to 10 do write(F,AR[i]);
//закрываем файл
Close(F);
End.
Программа, модифицирующая файл, созданный в предыдущем примере:
…
// описания переменных те же, что и в 1.
…
AR[8]:=20;
Assign(F,’int_file.dat’);
//открытие файла для его модификации
Reset(F);
…
//процедура установки указателя в файле на элемент номер 7
Seek(F,7);
Write(F,AR[8]);
…
//устанавливаем указатель на последний элемент файла
Seek(F,FileSize(F)-1);
Write(F,AR[8]);
…
Close(F);
…
End.
Программа чтения целочисленного файла произвольной длины:
…
Var
F:file of integer;
i,v,c: integer //вспомогательные переменные
begin
…
Assign(F,’int_file.dat’);
Reset(F);
c := FileSize(F);
for i:=1 to c do
begin
Read(F,v); //читаем очередную запись
Write(v); //печатаем её
End;
Close(F);
End.
Специальные типы файлов языка Pascal.
Наряду со стандартными типизированными файлами присутствуют текстовые и нетипизированные файлы. Текстовые файлы являются особыми в том смысле, что состоят из записей произвольной длины и не все описанные выше файловые операции к ним применимы, а те, что применимы, иногда имеют другой смысл. Элементом файла является строка. В качестве разделителей записей используют специальные управляющие символы: возврат каретки (CR) и перевод строки (LF). В программе текстовый файл описывается следующим образом: Var F: text;
Работа с текстовыми файлами имеет некоторые особенности. Текстовый файл нельзя модифицировать, как в примере 2. Неприменима процедура установки указателя. В качестве частичной замены процедуры установки указателя применяются процедуры:
SeekEoLn(F); - установка указателя на конец текущей строки.
SeekEoF(F); - установка указателя в конец файла.
Операции в/в (read, write) имеют свои особенности при работе с текстовыми файлами. Главная особенность: при работе с данными других типов, происходит автоматическое преобразование этих данных к текстовому типу.
Данные хранят в текстовых файлах, если их нужно перенести в другую вычислительную среду. “+”: возможность редактирования, скрыт механизм преобразования типов; ”–”: потери времени на преобразование типов, усечение младших разрядов.
В любой прог-е на Pascal объявлены 2 файловые переменные (input, output), они связаны со стандартными устройствами в/в.
Program name(input, output);
…
var
input, output: text;
…
write(output, p1, p2,…);
read(input, p1, p2,…);
end.
С помощью процедуры Assign можно переназначить значения переменных input и output. Когда прог-а начинает исполняться, эти файлы считаются открытыми.
Для текстовых файлов определены 2 дополнительные стандартные процедуры:
Append(F); - открывает текстовый файл для записи, является аналогом процедуры Rewrite(F); (но Rewrite устанавливает указатель на начало файла, а Append – на конец файла)
SetTextBuf(var F; var Buf; BufSize); - устанавливает буфер для операций над текстовыми файлами, позволяет управлять размещением и размером буфера. По умолчанию размер буфера =128 байт и находится в системной области. (F – файловая переменная; Buf – буфер(например, массив типа char); BufSize – размер буфера (типа word)).
Эти 2 операции только для текстовых файлов.
Нетипизированные файлы:
Не входят в стандарт языка Pascal. Нетипизир-е файлы предназначены для работы с данными произвольной структуры. Тип элемента файла неопределён. Единственное, что известно – длина элемента (записи) файла.
Преимущества использования таких файлов: программист может расширить набор файловых операций языка; чтение носителей, отформатированных в другой файловой системе.
Нетипиз-е файлы описываются в программе так: Var F: file;
Пример открытия нетипиз-е файла:
…
Assign (F, ‘a.dat’);
Reset(F,Size); // Size – длина записи
…
Rewrite(F,Size);
Следует принимать во внимание соответствие длины записи Size и размера физического блока устройства. Для жёстких дисков эта рекомендация не так важна. Универсальное решение проблемы – установить Size=1. Size должен быть кратен длине физической записи, иначе последняя запись может быть не прочитана.
Для организации обмена с нетипизированными файлами, используются 2 стандартные процедуры:
BlockRead(var F: file; var Buf; count: word; var Result: word);
Count – количество записей, заказанных для чтения (за 1 операцию в/в).
Result – число фактически прочитанных записей (за 1 операцию в/в). (Result<=Count)
BlockWrite(те же параметры)
Count – количество записей, заказанных для вывода.
Result – число фактически записанных элементов файла.
Close(F); - работает и для нетипизированных файлов.
Размер буфера (Buf) всегда равен произведению размера записи на значение переменной Count. Размер_буфера_Buf=Size*Count
Пример (использование нетипизированных файлов):
Прог-а копирования любых файлов. (copy источник приёмник)
program FileCopy;
count
BufSize = 512; //размер буфера обмена данных
var
FileIn, FileOut : file; //размер буфера обмена в байтах
NumRead,NumWritten : world;
Buf : array[1..BufSize] of Char; //буфер обмена
begin
if ParamCout < 2 then Halt;
Assign(FileIn, ParamStr(1));
//ParamStr возвращает строку (1-й параметр)
{$I-} Reset(fileIn,1);
//{$I-} – отключение автоматической обработки ошибок
if IOResult <> 0 then // IOResult – внутненняя ф-ция
begin
writeln(‘Файл – источник не найден’); Half
end;
//откроем выходной файл
Assign(FileOut,ParamStr(2));
//ParamStr возвращает имя файла приёмника
Rewrite(FileOut,1);
//цикл копирования
repeat
BlockRead(FileIn,Buf,BufSize,NumRead);
BlockWrite(FileOut,Buf,NumRead,NumWritten);
until (NumRead = 0) or (NumRead <> NumWritten)
close(FileIn);
close(FileOut);
end.