Почему плохо использовать MFC Как программировать и как не программировать
Почему плохо использовать MFC
Как программировать и как не программировать
Библиотека классов MFC является вредной для программиста
Перевод А. И. Легалова
Англоязычный оригинал находится на сервере компании Reliable Software
Программирование для Windows считается трудным. Библиотеки классов делают программирование для Windows легче. Это истина или ложь?
bool IsWinProgEasier (Method method) {
if (method == WIN_CLASS_LIBRARIES) return false;
else return true;
}
Поговорим серьезно. Если все, чего Вы хотите — это писать программы, которые являются производными от MFC или OWL, и Вы не заботитесь о непроизводительных затратах, то использование библиотек классов и мастеров приложений — это способ, которым можно идти. Но как только Вы захотите шагнуть вне этого пути, вы окажетесь перед огромными проблемами.
Позвольте привести аналогию. Представьте, что вы покупаете набор Lego блоков. Вы можете купить универсальный набор, или специализированный набор для построения пиратского судна. Если все, что Вы хотите сделать, это создать пиратское судно, то второй вариант предпочтительнее. Но если Вы вдруг попробуете попробуете сделать из него Lego автомобиль, то Вам придется преодолеть несколько проблем. В конечном счете вы придумаете нечто, похожее на автомобиль, который будет иметь забавное колесо управления, использовать якорь для торможения, а водитель будет иметь деревянную культю и черную повязку на его глазе.
После работы с этим набором "пиратского" Лего в течении некоторого времени, Вы станете специалистом в формировании почти всего того, что могло бы быть сделано из универсального комплекта. Вы усвоите разные приемы, подобно тому, как удалить заплату с глаза пирата, как закрасить череп и кости и т.д. В конечном счете вы достигнете таких высот, когда количество знания, которое вы ассимилировали относительно Пиратского набора, будет намного больше, чем базисные принципы и техника, которые вы должны были бы узнать, чтобы использовать универсальный Lego. С той вершины вы будете выбрасывать большие деньги после первых малых затрат, вкладывая капитал во все более сложные (и сложные) Пиратские наборы.
Что же Вам делать? Мой совет: накоротко урезать ваши потери, начав сейчас же изучать программирование для Windows. API Windows – не является красивой или простой вещью. Именно поэтому все эти библиотеки классов стали настолько популярными в первое время. Но если Вы хотите выращивать красивые цветы, вам необходимо будет испачкать ваши руки. Объектное программирование и Windows далеки друг от друга, но я не хочу, чтобы Вы повторно изобретали колесо. Имеются некоторые простые OO методы, которые помогут Вам инкапсулировать уродливое лицо Windows API.
Побочный эффект окажется то, что вы будете способны создавать Windows программы, которые являются достаточно малыми, чтобы быть легко загружаемыми из Интернета. Малые программы загружаются очень быстро – они не нуждаются в чем-либо, имеющемся в MFC dll библиотеках. Я спорю с любым MFC энтузиастом, что он не напишет игру "Морской бой", которая будет меньше по размеру, чем наша, и будет обладать теми же функциональным возможностям.
Давайте же начнем наш просмотр Win32 API с самой простой возможной Windows программы … Hello Windows!.
Рекомендуемая литература:[1]
Brent E. Rector, Joseph M. Newcomer. Win32 Programming. Addison-Wesley
Очень полное и детализированное представление Win32 API. Превосходные ссылки.
И имеется письмо от одного из наших посетителей, Дейва Линенберга (Dave Linenberg).
Я потратил приблизительно 20 минут, просматривая ваш сайт, и действительно наслаждался вашими взглядами на программирование — особенно относительно вздутого характера MFC. Я не мог не поделиться своими наблюдениями.
Я начал писать Windows-программы, использующие API в 1991-1992 годах (обучаясь по первой книги Петцолда)… а затем, слушая все эти разговоры об объектно ориентированном программном обеспечении, я попробовал изучать MFC. Я пролистал книгу Просиса, и проработал все упражнения. Я просмотрел пару сотен страниц исходного текста MFC, и наткнулся на большое количество неописанного наполнения. Я изучил внутреннюю организацию MFC. Я был подготовлен, чтобы действительно понять MFC…., но я этого не смог сделать. Эта библиотека вызывала довольно сильное отвращение. MFC, которая делает простые вещи, является чрезвычайно сложной. Потратив 1 год на сырой API, и на увязку его с некоторыми хорошими объектно ориентированными парадигмами, образцами и книгами по программированию на C++, таким как книги Экела (Eckel) или Майераса (Meyers), можно получить намного больше, чем пытаться заняться MFC. Каждый думает, что написание 5 строк программы в MFC или некотором каркасе, чтобы создать окно — это лучше или проще, чем изучение API. Я согласился бы с этим в том случае, если бы каркас был полностью понят – потому что те 5 строк, сцепленные в тысячи строк программы с небольшими возможностями делают намного больше, чем маломасштабные SDI/MDI книжные примеры программ.
Почему Microsoft не может инкапсулировать библиотеки для C эффективно? К чему все эти непроизводительные затраты?
Сначала я был очарован архитектурой документ/вид. Я еще не знал то, что до этого был соответствующий "образец" (pattern). А через MFC было мое первое с ним столкновение. Поскольку мои программы стали беспорядочными циклическими зависимостями, я, реализуя парадигму документ-вид, понял, что MFC ужасна. По крайней мере, в их реализации этой идеи!! Когда-либо обратите внимание, что примеры программ очень малы в книгах. Большинство книг никогда не касается того, как реализовать взаимодействия больших наборов классов. Что было бы, если бы я имел большую программу с 1000 видами, и 1000 документами, и все они находились бы во взаимосвязи. Все передавли бы сообщения. Что, если бы это была многопотчная или распределенная программа…., Какой был бы беспорядок при использовании архитектуры документ/вид, реализованной с использованием MFC. Вот такие пироги!
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
3.10 Для чего нужно программировать на языке shell!
3.10 Для чего нужно программировать на языке shell! Программа shell системы UNIX не относится к типичным интерпретаторам команд, хотя и дает возможность запускать команды обычным способом. Тем не менее это язык программирования, который позволяет достичь большего. Имеет смысл
19.4. Почему следует использовать стандартную лицензию
19.4. Почему следует использовать стандартную лицензию Широко известные лицензии, которые согласуются с Определением открытого исходного кода (Open Source Definition), имеют твердо установившиеся "толковательные" традиции. Разработчики (и пользователи, в той мере, как это их
20.3.5. Конструкция системы управления задачами была плохо реализована
20.3.5. Конструкция системы управления задачами была плохо реализована Не считая возможности приостанавливать процессы (что само по себе является тривиальным дополнением к планировщику, который мог бы быть сделан довольно безопасно), управление задачами предусмотрено
19.4. Почему следует использовать стандартную лицензию
19.4. Почему следует использовать стандартную лицензию Широко известные лицензии, которые согласуются с Определением открытого исходного кода (Open Source Definition), имеют твердо установившиеся "толковательные" традиции. Разработчики (и пользователи, в той мере, как это их
20.3.5. Конструкция системы управления задачами была плохо реализована
20.3.5. Конструкция системы управления задачами была плохо реализована Не считая возможности приостанавливать процессы (что само по себе является тривиальным дополнением к планировщику, который мог бы быть сделан довольно безопасно), управление задачами предусмотрено
ТВ на заказ: как Intel строила главный ТВ-сервис Америки, почему не получилось и почему может получиться у нас Евгений Золотов
ТВ на заказ: как Intel строила главный ТВ-сервис Америки, почему не получилось и почему может получиться у нас Евгений Золотов Опубликовано 29 ноября 2013 Нечасто, но случается, некоторое событие остаётся незамеченным несправедливо — потому только, что
Об уродах, единорогах и государстве, или Почему большое и общее — это всегда плохо Сергей Голубицкий
Об уродах, единорогах и государстве, или Почему большое и общее — это всегда плохо Сергей Голубицкий Опубликовано 12 декабря 2013 О том, что государственное, централизованное и крупное по большей части всегда выходит хуже, чем частное,
Милого узнаю по геному: почему Америка так боится ДНК-отпечатков (и почему не боимся мы) Евгений Золотов
Милого узнаю по геному: почему Америка так боится ДНК-отпечатков (и почему не боимся мы) Евгений Золотов Опубликовано 06 июня 2013 Биометрическая идентификация — штука замечательная, но непростая. В теории, по физиологическим особенностям, присущим
АНАЛИЗЫ: Почему холопы плохо работают?
АНАЛИЗЫ: Почему холопы плохо работают? Автор: Анатолий ШалытоВ переписке с читателем, опубликованной в «КТ» #635, в основном обсуждался вопрос, стоит ли идти учиться в аспирантуру, или повышать ИТ-квалификацию следует, работая в компьютерной фирме.Зная ситуацию в целом,
Безальтернативность: всегда ли это плохо?
Безальтернативность: всегда ли это плохо? LinuxFormat, #107 (июль 2008)Linux всегда ценился его пользователями за свободу выбора. В области дистростроения это нашло своё выражение в том, что инсталляторы наиболее прогрессивных дистрибутивов предоставляли всё большие возможности
Мрачные итоги Pwn2Own: почему браузеры так легко взломать и почему линуксоидам можно волноваться меньше? Евгений Золотов
Мрачные итоги Pwn2Own: почему браузеры так легко взломать и почему линуксоидам можно волноваться меньше? Евгений Золотов Опубликовано 11 марта 2013 В английском айтишном жаргоне есть словечко «pwned», перевести которое на русский можно таким же коротким «поимели». Грубо,
Почему Google уничтожает свой Reader — и почему это хорошо? Евгений Золотов
Почему Google уничтожает свой Reader — и почему это хорошо? Евгений Золотов Опубликовано 15 марта 2013 Когда в среду руководители Google ставили точку в истории одного из своих многочисленных веб-сервисов, едва ли они могли вообразить, какая реакция за этим последует. Согласно