Как перестать беспокоиться и начать программировать

       

Класс TFile


TFile.* - базовый класс для классов "ToFile" и "IniFile". Здесь уместно следующее пояснение. В языке "С++" есть средства, унаследованные из языка "С". Например, многие системные функции, функции работы с файлами, и т.д. К их числу относится подавляющее большинство функций Windows API.

Работа с ними кардинально отличается от работы со средствами С++, и не в лучшую сторону. В С++ (а также средах Delphi, BCB, и т.д.) принято обрабатывать ошибки времени исполнения с помощью исключений (exceptions). То есть если программист не обработал возникшую ошибку на прикладном уровне, она будет обработана системой исполнения, и ничего страшного не произойдёт.

Совсем иное дело – работа унаследованных функций. Здесь ошибки требуется обрабатывать с помощью анализа кода возврата каждой такой функции. Если прикладной программист не забудет это сделать, ему придётся отлить прижизненный памятник, так как такая работа крайне трудоёмка и не отвечает современным методам разработки ПО.

Если же программист будет забывать или пренебрегать обработкой ошибок, получится некачественный код, ненадёжное ПО, которое будет "глючить" в самых неожиданных местах. Это, в свою очередь, может привести к самым плачевным результатам: потере данных, краху системы, и т.д.

Можно возразить: "не используйте устаревшие средства". Ну, во-первых, это возможно далеко не всегда: API-функции из песни не выкинешь; во-вторых, лично мне работа с потоками ввода вывода С++ (stream) кажется излишне громоздкой, во многих случаях гораздо приятнее обходиться старыми добрыми средствами.

Выход один: для каждого случая использования устаревших средств языка необходимо писать класс-обёртку, который будет обрабатывать все возможные коды возврата всех унаследованных функций и преобразовывать их в исключения (exception). Проблема кардинально решена в .NET – и именно описанным способом.

Так вот, классы, производные от TFile, являются оболочками для файловых функций. Их основной задачей является обработка кодов возврата файловых функций языка "С" и преобразование их в исключения. Дополнительным, но не менее приятным бонусом, является более удобная функциональность классов по сравнению с использованием простых функций. Это ведёт к написанию более лаконичного кода.

Итак, "завернув" все унаследованные функции в "оболочки" классов, мы делаем шажок к написанию безопасного кода.



Содержание раздела