Примеры программ


Содержание


Комментарии к примерам

Примеры программ

Сразу развею все сомнения и скажу честно: я не буду писать для вас программы. Если я сделаю это, что же делать вам? Язык С++, его подмножество, использован мной почти как язык объектной модели, вернее он и пространство сообщений дополняют друг друга. У такого способа огромное количество недостатков, но есть и преимущества:

Если вы знаете как это все можно сделать лучше и почему - напишите мне об этом.

Легкие изменения в стиле оформления: имена и действия по умолчанию, отступы т прочие, казалось бы мелкие детали, делают текст программы вполне нечитабельным, и без головной боли, вам не удастся понять о чем идет речь. Причем обилие комментариев не всегда может помочь, если вы слабо знаете язык комментария или он составлен с вашей точки зрения плохо. Это напоминает то, как если бы к вам пришел человек, который выучил ваш язык но с другими ударениями, паузами и интонациями: устная речь будет совершенно не понятной. Но к сожалению не существует стандартных жестких правил по оформлению программы предназначенной для переноса в исходнике.

В таблице (Таблица 1) указаны сокращения, которые применяются в примерах.

Наличие _p суффикса в именах пришло от того, что в ряде моделей памяти есть far и near указатели, смешивание которых нежелательно, а явное задание типа указателя довольно утомительно. Этот _p скрывает за собой это, что облегчает перенос программы из flat модели в другую.

Я не люблю ИменаВСтилеПаскаля, и редко их использую.

Таблица 1
Сокращения в примерах программ
u_< type >unsigned < type >
< type >_p< type > *
t_< name >Тип структуры С
T< name >Тип структуры С++


Структура каталогов примеров

Примеры программ

В примерах я использую стандартные библиотеки и ряд своих определений. Все мои заголовки и библиотеки лежат в каталоге MYLIB. Каждая группа определений общего назначения находятся в каталоге PRJ\<имя группы >. После успешного создания .h и .lib файлов этих моих определений, те, которые необходимы, копируются в каталог MYLIB.

Я опишу назначение компонент для самого большого примера VM (просмотр файлов с запоминанием последнего состояния), из раздела ╚Объектная модель╩. Другие примеры используют те же определения. Пример создавался под консольный вариант WIN32 в BC45.

Я хотел иметь последовательность разработки примера ╚с нуля╩, но по техническим причинам это сохранить не удалось. Есть только один из последних вариантов, который хотя и не реализует даже 50% от намеченного, но, я думаю, свою задачу примера ООП программы выполняет. Вот краткий перечень заголовков, библиотек, функций и классов. Чтобы узнать их лучше, надо просмотреть сами файлы.

  1. mydef
    Самые примитивные определения, фильтр ошибок ( err, err2, warn ).
  2. tstring
    Строка с операциями, которые кажутся мне удобными
  3. unicode
    Перекодировка символа или строки между dos866(rus),win1251(rus),koi8r
  4. classes
    Те свойства объектов, которые получились когда-то в примере, и я пришел к выводу, что они достаточно общие и годятся для других применений и перенес их сюда.
  5. keyb
    Клавиатура, на базе conio.h
  6. easywin
    Примитивные десктоп и оконо на базе conio.h
  7. winitems
    Ряд готовых элементов на базе easywin:

Еще о качестве примеров

Примеры программ

Нет ничего хуже, чем копаться в чужих исходниках, но я не вижу другой возможности посмотреть на примеры, кроме этой. Конечно, примеры серьезно не проверялись, и, фактически, являются черновым вариантом, содержат достаточно много ошибок, но VM - нитка, позволяющая выполнить ряд основных частных случаев задачи. Это позволяет надеяться, что какие либо изменения над кодом будут проводиться локально, что позволит хорошо видеть преимущества объектной модели.

В примере используются как вложение, так и наследование, множественное наследование, шаблоны кода. К сожалению, мне не удалось создать простой класс преобразования в поток, что усложняет разбирательство с кодом, комментарии к некоторым методам, по техническим причинам, так же не отражают реального назначения точно, это придется установить просмотрев линию наследования.

Лучше, конечно, в качестве примера брать исходники, разработанные профессионалами, специально для обучения, если они есть. Именно отсутствие их и побудило меня написать это. Я просто собрал в одну кучу те проблемы, с решением которых мне приходилось сталкиваться, и изложил их в том порядке, какой считаю правильным и легким. Надеюсь, что это кому-нибудь поможет когда-нибудь при борьбе с подобными.


Примеры программ