В. Вагнер О внутренней логике и непротиворечивости программы (из ненаписанной книги "IBM PC для хэкера") Программа это изделие, иногда даже произведение искусства, поэтому если вы хотите быть хорошим программистом, ваша программа должна производить впечатление целостной и быть проникнута единой логикой. Вы скажете, но я не профессионал, мне лишь бы задача решалась. Но полчаса, потраченные на то, чтобы придать программе красоту, могут сэкономить немало часов вам и вашим пользователям. Под красотой я понимаю не разноцветные окошки и заковыристые шрифты, а единую логику. Одной из самых красивых и удобных программ я считаю архиватор ARJ, который, как вы знаете не пытается извращаться, а честно работает со стандартным выводом DOS. Но какие возможности и какая продуманность интерфейса! Итак, вот вам первый тип программ - получают весь ввод из командной строки, выводят на экран только стандартными средствами DOS и требуют внимания пользователя только тогда, когда это действительно необходимо, например произошла ошибка при чтении диска, или есть риск уничтожить важную информацию в старой копии файла. Написать такую программу можно за два часа. Во всяком случае мне это удавалось. Вы скажете - какая же тут красота - серые буквы на черном фоне. Но слово серебро, а молчание золото. Вы можете написать в конце командной строки >nul или запустить программу в минимизированном виде из Windos , если вы уверены, что ей не потребуется ваше внимание. Если она работает достаточно медленно, вы можете даже уйти обедать, запустив ее и быть уверенным в том, что она сделает все что надо. Помните - программы это ваши слуги, а молчаливость и неназойливость всегда была важным плюсом в этой профессии. Но не все задачи могут быть решены таким образом. Иногда требуется, чтобы вы могли видеть как можно больше информации на экране и манипулировать ей так как вам хочется. Примером такой программы является любой текстовый редактор, например интегрированная среда Turbo Pascal или электронная таблица. Это уже совершенно другой класс программ, на разработку которых тратятся уже не часы, а человеко-месяцы и человеко-годы и я не советую вам браться за их разработку, если только это не основная ваша профессия и не любимое хобби. Часто лучше разбить задачу на несколько более мелких и воспользоваться средствами DOS или какой-нибудь другой программы, типа текстового редактора Multy-Edit для объединения их в единое целое. Совершенно отдельно стоят программы, предназначенные для работы в Windows, поскольку если любая программа под DOS живет сама по себе, то в Windows необходимо учитывать, что параллельно с вашей программой работают и другие и по мере возможности обращать это себе на пользу. Хорошим примером тут является редактор Write. Именно Write, а не WinWord или AmiPro, потому что он не содержит в себе ничего лишнего. Вам нужна картинка? Запустите PaintBrush и вставьте ее через ClipBoard. Вам нужно видеть два текста сразу? Запустите еще одну копию Write. Зачем программе заботится о поддержке многооконности, если это умеет делать операционная система, и умеет неплохо? Итак основной принцип придания программе целостности и красоты, это принцип Оккама - не умножайте сущностей (в смысле функций вашей программы) без необходимости. Пусть она умеет делать немного, но умеет хорошо. Из этого правила, правда, есть исключения. Есть программы, которые пользователь запускает утром, придя на работу и завершает, уходя, если не выключает компьютер, забыв выйти из программы. Такие программы конечно должны предоставлять пользователю все, что ему может понадобиться, и по возможности в едином стиле оформления. Но помните, что вам никогда не предусмотреть всего. Поэтому лучше потратьте время на то, чтобы сделать систему расширяемой, чем на то, чтобы добавить десять новых полезных функций. Пусть пользователь имеет возможность дописать сам все что угодно, вместо того, чтобы проклинать вас за то, что вы забыли ту самую штуку, без которой ему жизнь не мила. Таким образом все программы делятся на два больших класса - утилиты и приложения. Это касается как DOS, так и Windows. К сожалению я не могу привести примера хорошей утилиты для Windows. Не то чтобы их не было совсем, но скорее всего среди них нет такой, которую бы знали и я и вы. Windows куда моложе чем DOS и в ней еще не успело появиться такое количество хороших программ. Ведь большая часть того, что есть в Windows, это версии DOS-приложений или приложений для Macintosh, авторы которых радостно накинулись на те возможности, котрые им предоставила новая среда. А концепция утилиты, которая в текстовых средах идет из UNIX в графических средах еще не разработана вообще. Что такое утилита? Это программа которая делает что-то маленькое, но нужное. Фактически это новая функция операционной системы и взаимодействует она с пользователем тем же способом, что и команды DOS, по возможности используя то что уже содержится в системе. Зачем, к примеру, писать свой обработчик критических ошибок, если можно воспользоваться стандартным Abort, Retry, Fail? Другое дело, что им надо воспользоваться, а не вылетать по Runtime Error номер такой-то. И утилита должна иметь дружественный интерфейс. Если вы выполняете какой-то длительный процесс, то стоит проинформировать пользователя о том, какая часть работы уже сделана, как делает ARJ или компилятор TPC, вместо того чтобы предоставить возможность тупо смотреть на пустой экран и думать, не пора ли жать на три заветных клавиши. Автору утилиты следует учитывать, что пользователю может взбрести в голову засунуть его программу в командный файл. Поэтому в случае аварийного завершения не стоит ограничиваться выдачей сообщения на экран, а лучше вдобавок установить код завешения, чтобы командный файл мог принять соответствующие меры с помощью IF ERRORLEVEL. Хочу заметить что цветной текст и окошки в утилите смотрятся нелогично. Это расширение операционной системы и оно должно маскироваться под операционную систему. Хотя есть счастливые исключения, например антивирус Doctor Web. E-Mail: vitus@agropc.msk.su