Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ.pdf
Добавлен: 29.03.2023
Просмотров: 89
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Основные языки программирования современности
1.1 Определение языка программирования С++
1.2 Определение языка программирования Delphi
1.3 Сравнительная характеристика языков Delphi и C++
1.4 Сравнение отдельных элементов языков
- по типам данных и их описанию
Как уже было сказано, в С++ переменные можно объявлять, в отличие от Delphi, прямо в теле программы, что упрощает процесс понимания исходного кода, а также добавляет удобства программисту. Типы данных в С++ и Delphi похожи, в большей степени зависят от версии компилятора. Фирма Borland старается как можно более унифицировать типы данных в компиляторе С++ и Delphi Оба языка являются объектно-ориентированными (опять же, это зависит от компилятора). Оба языка поддерживают большие объемы данных, например, массивы с большим количеством элементов.
- по описанию основных операторов
Если взять, например операторы ввода-вывода на экран, то мы уже тут увидим принципиальное различие между этими двумя языками. В Паскале ввод-вывод максимально упрощается, предлагая программисту основные операции (чтение-вывод строки, чисел и т.д.). В Си же операции ввода-вывода являются скорее универсальным, чем удобным инструментом, ориентированным скорее на профессионала, чем на новичка.
- по технологии создания программ
Учитывая то, что оба языка предоставляют сравнимые фундаментальные возможности (объектно-ориентированный подход, работа с большими объемами данных, возможность низкоуровневого программирования), то к ним применимы одинаковые технологии создания программ: структурное программирование, объектно-ориентированное программирование.
1.4 Сравнение отдельных элементов языков
Файлом называют способ хранения информации на физическом устройстве. Файл — это понятие, которое применимо ко всему — от файла на диске до терминала.
В C++ отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку. Они позволяют работать с различными устройствами, такими, как диски, принтер, коммуникационные каналы и т.д. Эти устройства сильно отличаются друг от друга. Однако файловая система преобразует их в единое абстрактное логическое устройство, называемое потоком.
Текстовый поток — это последовательность символов. При передаче символов из потока на экран, часть из них не выводится (например, символ возврата каретки, перевода строки).
Двоичный поток — это последовательность байтов, которые однозначно соответствуют тому, что находится на внешнем устройстве.
Организация работы с файлами средствами C
Объявление файла: FILE *идентификатор;
Открытие файла: fopen(имя физического файла, режим доступа)
Режим доступа — строка, указывающая режим открытия файла файла и тип файла
Типы файла: бинарный (b); текстовый (t)
r Файл открывается только для чтения
w Файл открывается только для записи. Если соответствующий физический файл существует, он будет перезаписан
a Файл открывается для записи в конец (для дозаписи) или создается, если не существует
r+ Файл открывается для чтения и записи.
w+ Файл открывается для записи и чтения. Если соответствующий физический файл существует, он будет перезаписан
a+ Файл открывается для записи в конец (для дозаписи) или создается, если не существует
Неформатированные файловый ввод-вывод:
Запись в файл: fwrite(адрес записываемой величины, размер одного экземпляра, количество записываемых величин, имя логического файла);
Например: fwrite(&dat, sizeof(int), 1, f);
Чтение из файла : fread(адрес величины, размер одного экземпляра, количество считываемых величин, имя логического файла);
Например: fread(&dat, sizeof(int), 1, f);
Закрытие файла: fclose(имя логического файла);
Форматированный файловый ввод-вывод
1) Функции fgetc() и fputc() позволяют соттветственно осуществить ввод-вывод символа.
2) Функции fgets() и fputs() позволяют соттветственно осуществить ввод-вывод строки.
3) Функции fscanf() и fprintf() позволяют соттветственно осуществить форматированный ввод-вывод и аналогичный соответствующим функиям форматированного ввода-вывода, только делают это применительно к файлу.
Файловый ввод-вывод с использованием потоков
Библиотека потокового ввода-вывода: fstream
Связь файла с потоком вывода: ofstream имя логического файла;
Связь файла с потоком ввода: ifstream имя логического файла;
Открытие файла: имя логического файла.open(имя физического файла);
Закрытие файла: имя логического файла.close();
Технология работы с файлами в системе Delphi требует определённого порядка действий:
Прежде всего файл должен быть открыт. Система следит, чтобы другие приложения не мешали работе с файлом. При этом определяется, в каком режиме открывается файл - для изменения или только считывания информации. После открытия файла в программу возвращается его идентификатор, который будет использоваться для указания на этот файл во всех процедурах обработки.
Начинается работа с файлом. Это могут быть запись, считывание, поиск и другие операции.
Файл закрывается. Теперь он опять доступен другим приложениям без ограничений. Закрытие файла гарантирует, что все внесённые изменения будут сохранены, так как для увеличения скорости работы изменения предварительно сохраняются в специальных буферах операционной системы.
В Delphi реализовано несколько способов работы с файлами. Познакомимся со классическим способом, связанным с использованием файловых переменных. Файловая переменная вводится для указания на файл. Делается это с помощью ключевого слова File:
Описанная таким образом файловая переменная считается нетипизированной, и позволяет работать с файлами с неизвестной структурой. Данные считываются и записываются побайтно блоками, размер которых указывается при открытии файла, вплоть от 1 байт.
Но чаще используются файлы, состоящие из последовательности одинаковых записей. Для описания такого файла к предыдущему описанию добавляется указание типа записи:
В качестве типа могут использоваться базовае типы, или создаваться свои. Важно только, чтобы для типа был точно известен фиксированный размер в байтах, поэтому, например, тип String в чистом виде применяться не может, а только в виде String[N].
Данные, считанные из файла или записываемые в файл, содержатся в обычной переменной, которая должна быть того же типа, что и файловая. Поэтому сначала в программе лично я описываю нужный тип, а затем ввожу две переменные этого типа - файловую и обычную:
Для текстовых файлов тип файловой переменной в этом случае TextFile, а тип обычной - String.
Для открытия файла нужно указать, где он расположен. Для этого файловая переменная должна быть ассоциирована с нужным файлом, который определяется его адресом. Адрес файла может быть абсолютным, с указанием диска и каталогов ('C:\Мои документы\Мои рисунки\FileName.ini'), или относительным, тогда он создаётся в папке с .exe файлом программы. Для задания относительного адреса достаточно указать имя файла с нужным расширением. Делается это оператором AssignFile :
AssignFile(SaveF, 'C:\Мои документы\Мои рисунки\FileName.ini');
AssignFile(SaveF, 'FileName.ini');
Теперь файл должен быть открыт.
Открытие файла оператором Rewrite приведёт воссозданию файла заново, т.е. существующий файл будет без предупреждения уничтожен, и на его месте будет создан новый пустой файл заданного типа, готовый к записи данных. Если же файла не было, то он будет создан.
Открытие файла оператором Reset откроет существующий файл к считыванию или записи данных, и его указатель будет установлен на начало файла :
Rewrite(SaveF);
Reset(SaveF);
Каждый из этих операторов может иметь второй необязательный параметр, имеющий смысл для нетипизированных файлов, и указывающий длину записи нетипизированного файла в байтах:
Rewrite(SaveF, 1);
Reset(SaveF, 1);
Чтение файла производится оператором Read :
Read(SaveF, SaveV);
Запись в файл производится оператором Write :
Write(SaveF, SaveV);
При этом чтение и запись производится с текущей позиции указателя, затем указатель устанавливается на следующую запись. Можно проверить, существует ли нужный файл, оператором FileExists :
if FileExists('FileName.ini')
then Read(SaveF, SaveV);
Принудительно установить указатель на нужную запись можно оператором Seek(SaveF, N), где N - номер нужной записи, который, как и почти всё в программировании, отсчитывается от нуля:
Seek(SaveF, 49); - установка указателя на 50-ю запись.
При последовательном чтении из файла рано или поздно будет достигнут конец файла, и при дальнейшем чтении произойдёт ошибка. Проверить, не достигнут ли конец файла, можно оператором EOF (аббревиатура End Of File), который равен true, если прочитана последняя запись и указатель находится в конце файла:
while (not EOF(SaveF)) do
Read(SaveF, SaveV);
Для текстовых файлов вместо Read и Write используются операторы Readln и Writeln, умеющие определять конец строки. В коментариях приведена процедура чтения текстового файла.
Оператор Truncate(SaveF) позволяет отсечь (стереть или, если хотите, удалить) все записи файла, начиная от текущей позиции указателя, и до конца файла.
В конце работы с файлом его необходимо закрыть. Это делается оператором CloseFile(SaveF);
Потоки в Delphi выполняют функцию имитации псевдопараллельной работы приложения. Как известно, для организации многозадачности операционная система выделяет каждому приложению, выполняющемуся в настоящий момент, определённые кванты времени, длина и количество которых определяется его приоритетом. Поэтому объём работы, который приложение может выполнить, определяется тем, сколько таких квантов оно сможет получить в единицу времени. Для операционной системы каждый поток является самостоятельной задачей, которой выделяются кванты времени на общих основаниях. Поэтому приложение Delphi, умеющее создать несколько потоков, получит больше времени операционной системы, и соответственно сможет выполнить больший объём работы.
Создать дополнительный поток в Delphi поможет объект TThread.
1. Мастер создания дополнительного потока в Delphi создаёт отдельный модуль, в рамках которого выполняется поток.
File -> New -> Other...
В результате будет создан модуль, содержащий заготовку кода, реализующего дополнительный поток Delphi.
Глава 2. Практические аспекты выбора среды программирования
В данной работе нами показан практический пример, каким образом выбор среды программирования влияет на итоги реализации проекта. Данные проект является стратегическим планом реально существующей компании, которая столкнулась с проблемой выбора языка реализации программ для инди-игр.
Наименование предприятия |
ООО «Nord-development» |
Направление деятельности организации |
Создание компьютерных игр |
Стоимость инвестиционного проекта, тыс. руб. |
3 900 |
Срок окупаемости |
|
Местонахождение проекта |
Российская Федерация, Республика Саха (Якутия), г. Якутск |
Количество дополнительно создаваемых новых рабочих мест в рамках проекта |
4 |
Наименование игр, которые планируется создать |
«The Last Sword», «Mischief» |
Модель распространения |
Pay-to-play |
Суть проекта заключается в создании компании-производителя инди-игр для персональных компьютеров с операционной системой Windows.