developing.ru - клуб программистов Здесь может быть и ваша реклама.
developing.ru >технология COM >
Михаил Безверхов
aspid@developing.ru

Хочу всё знать!

Ну вот. Стоило произнести волшебную фразу "первый класс COM пройден", как я стал получать письма интересного содержания. И я не планировал этй статьи, я - писал обещанный пример. Однако ж, поскольку лучший способ нейтрализации проблемы состоит в её решении по существу, я и подумал, что на накопившиеся проблемы и незаданные ранее вопросы ответить стоит...

Теперь по существу заданных вопросов. Образование - великая вещь, однако я не ожидал, что синдром "поспорить с профессором" (характерный для хороших студентов на старших курсах) будет явлен столь рано. И на ряд заданных при этом вопросов я, безусловно, просто должен ответить.

Итак, внимание - вопрос: является ли COM "объектно-ориентированной технологией"? Внимание - ответ: я никогда над этим не задумывался. Этот вопрос сродни вопросу что лучше - молоток или микроскоп? Но вопрос задан... и с моей стороны появляется встречный вопрос - а что такое "объектно-ориентированный язык программирования (средство разработки, технология)"? Если верить Страуструпу, то вот цитата: "...если термин объектно-ориентированный язык вообще что-либо означает, то он должен означать язык, имеющий средства хорошей поддержки объектно-ориентированного стиля программирования... Обеспечение такого стиля, в свою очередь означает, что в языке удобно пользоваться этим стилем. Если написание программ в стиле ООП требует специальных усилий или оно невозможно совсем, то этот язык не отвечает требованиям ООП..." Из этой цитаты я могу заключить, что "объектно-ориентированный" - это такой, который способствует мыслить объектными концепциями, а мыслить необъектными концепциями - затрудняет. В таком случае COM -объектно-ориентированная технология в квадрате или даже в большей степени. В COM вы не просто можете мыслить в категориях объектов и их взаимодействия. В COM вы не можете мыслить иными категориями. Категории взаимодействующих объектов - единственный аппарат, с помощью которого вы можете строить модели в COM. Поэтому COM - исключительно объектно-ориентированное средство и никакое иное. Что, в каких-то случаях, является недостатком COM - вы, например, не сможете "естественным образом" оформить в виде COM-сервера библиотеку процедур численного взятия интеграла.

Еще вопрос: и после всего этого (того, что было рассказано) можно утверждать, что COM - эффективная технология? Ещё ответ: а это - как посмотреть и какие критерии к этому применить. Если критерий один - количество машинных команд в программе, то конечно и ответ очевиден. И программируемый микрокалькулятор МК-51 в данном случае - безусловный верх совершенства, а компьютер, который будет эту статью вам отправлять - так, тупиковая ветвь... Но на самом деле этот вопрос - очень серьёзный вопрос, на который просто не существует абстрактного ответа. Конечно, COM - сложная технология. Конечно, много, порой - очень много, машинных команд и байтов памяти тратится на выполнение всего-лишь протокола взаимодействия клиента и сервера (QueryInterface - хороший пример того, что то, что компилятор может сделать подстановкой одной команды будет занимать сотни байт в реализации COM). А если посмотреть с немного более высокой точки? Не окажется ли так, что критерии эффективности "кукурузника" начала прошлого века мы применяем к оценке современного трансатлантического лайнера? Ведь стоимость такта процессора и бита памяти неизменно снижается, а стоимость часа работы программиста - растёт. Если бы это было не так, то я вообще не понимаю - зачем развивать вычислительную технику? И весьма разумно, если, конечно, не рассматривать отдельно выхваченные из контекста фрагменты, а видеть всю систему более высокого порядка, когда каждый день что-то из того, что вчера делал программист, сегодня будет способен делать компьютер. Программа-компилятор - характерный пример этого. Но ведь и COM/CORBA - ещё более характерные. Компилятор позволяет "не грузить" программиста несвойственными программисту деталями, т.е. экономить труд. А COM/CORBA позволяет вообще исключить труд программиста - повторно использовать уже готовый код! И если эффективность измерять не в "тактах процессора", а в "рублях", то, по-моему и спорить-то не о чем...

Ещё вопрос, который можно кратко сформулировать так: а на COM/CORBA свет клином сошёлся? Нет, не сошёлся. Но в этом деле ситуация обстоит точно так же, как и, например, на эстраде - те артисты, которых мы каждый день видим на телеэкране и в газетах есть только пробившаяся на вершину часть айсберга. Существует значительно большее количество самодеятельных и (полу-)профессиональных артистов, групп, коллективов которых их занятие тоже кормит, но они "широкой публике" неизвестны. Причины этой "только локальной известности" могут быть разными, но отрицать полезность их существования вообще (во всех аспектах) нельзя. Так и с другими компонентными технологиями - на "малоизвестном уровне" они есть. Начиная с "изобретения велосипеда" в рамках отдельно взятой компании и кончая попытками стать хоть каким-то стандартом. За COM и CORBA просто стоят очень серьёзные рыночные игроки, которые могут вовлечь в свою орбиту серьёзные общественные силы - программистов, писателей, учёных, менеджеров и т.д. Что, собственно, и делает технологию, прежде всего - известной. Но смешивать "полезность" и "известность" - наверное, не стоит.

Следующий вопрос серьёзнее - как бы это (мне) сделать так, чтобы кода - побольше, а философии - поменьше? Из факта того, что он появился я могу заключить, что наша аудитория - в основном, очень молода. Поскольку... поскольку специалист (в любой области) неизбежно проходит, как минимум, два рубежа своей профессиональной зрелости. На первом рубеже специалист за болтами, гайками, языками программирования, алгоритмами и прочими деталями начинает видеть "изделие" и научается мыслить категориями всей системы в целом, а не отдельных её частей. На втором рубеже опыт виденных или сконструированных данным специалистом систем приводит к тому, что он начинает видеть общее и "вообще". А общее это - не что иное, как "философия системостроения". После чего всё, что не относится к "философии" для данного специалиста становится "ремеслом". Горькое, надо сказать, это состояние, если его к себе относить... Молодых наших читателей я не призываю верить мне на слово - проконсультируйтесь у своих старших (лет на 10 -15) коллег!

Поэтому, и потому, что сам я, видимо, нахожусь уже за вторым рубежом... мне, к сожалению некоторых читателей, "кода - побольше, философии - поменьше" уже не сделать. Изящество отдельных деталей для меня уже не будет сравнимо с дефектами системного уровня - что в проектировании, что в подаче знания. Кроме того, я должен заметить следующее. Изложение наше задумывалась как поток знания от программиста к программистам в области программирования же. И мы с вами вовсе не виноваты в том, что наша область знания и деятельности устроена так. Давайте применим правила абстрагирования, принятые в нашей профессии, к самим же себе? Итак, если у меня есть читатель, которого не интересует ничего, кроме команд процессора (на них он реагирует), причём его не интересует и как эти команды организованы в последовательность… то не вправе ли я заключить, что и имею я дело лишь с процессором? А если читатель "западает" на строки исходного текста в их компилируемом виде, но отметает всякую информацию о том, как эти строки составить в последовательность и в каком случае как, то почему я не могу думать, что имею дело только лишь с компилятором? Парадоксальность этого вывода тем ценнее, чем резче в голосе такого читателя слышится C++/Unix/CORBA (или VB/NT/COM) - рулез, а всё остальное - мастдай. А вот если я имею дело с программистом, т.е. с источником самих программ, то, наверное, и должен с ним говорить о более высокоорганизованных материях, чем просто "строки кода"? И тем буковка "П" в его самоназвании будет больше по высоте, чем более высокие соображения он способен принять в расчёт? Ну а уж тут, ничего не остаётся как признать - выше философии ничего нет. Если конечно, под философией понимать способ мыслить, а не ту "историю философии" которую преподают в университетском курсе.

Из-за этого я не намерен ничего менять в подаче материала. Как была серия "теоретической", так она и останется такой - в жизни ничего не существует без связей с чем-то другим. Мы "изучаем COM", хотя, если говорить точно - изучаем мы компонентное программирование на примере COM. И это изучение уже потянуло за собой философию ООП - оказалось так, что лучше всего понимать COM на базе хорошего представления основ ООП, чем считать COM чем-то автономным. А это, хорошее понимание ООП, - само по себе что-то стоит. COM - ограниченная технология, а ООП полезна всем, пишущим современные программы на современных же языках программирования. Какими бы эти языки ни были. И какими бы ни были эти программы. Следовательно, наше изложение получается немного полезнее просто "руководства по COM" - знания из неё могут быть вдумчивым читателем применены в значительно более широкой области! Если же учесть, что та же CORBA устроена по конструкции так же, как устроена COM (хотя есть тьма деталей в которых они различаются), то, наверное, будущая рассылка о CORBA может быть значительно проще? Если среди наших читателей есть желающий такую серию выпускать - с удовольствием буду с ним кооперироваться, поскольку в CORBA я не специалист, к сожалению. Но (молодые читатели - задумайтесь!) о CORBA я судить могу. Потому, что знание некоторых принципов возмещает незнание некоторых фактов...

Ещё вопрос, наконец-то заданный весьма корректно - область моей деятельности и позиция в этой области мною занимаемая. Здесь нужно сказать, что я - не преподаватель, я - профессиональный программист. Слово "профессиональный" говорит только о том, каким именно ремеслом я зарабатываю себе на жизнь. Мне также хочется надеяться, что буковка "П" в моём названии - побольше остальных, но я сам не берусь называть её высоту. Область моей повседневной деятельности - проектирование больших программных и программно-аппаратных систем. Хотя в этом процессе я нахожусь весьма близко к вершине, настолько, что UML, а не С++, для меня один из повседневных инструментов, я всё-таки пишу и код. Сейчас - нечасто, в прошлом - весьма интенсивно, так что и C++ я тоже знаю на уровне повседневно используемого инструмента. К этому нужно прибавить богатое всякими технологиями программистское прошлое, так что одно перечисление того, что я когда-то держал в руках может занять целый абзац. Чего сам не держал в руках? Много чего, и, к сожалению, - Unix. Говорю "к сожалению" т.к. теперь, вроде бы, уже и не надо - просто потому, что задачи уже выше.

Естественно, что я - "знаю не всё". Ещё более естественно, что я многие вещи и рассматриваю через призму собственного опыта. Поэтому излагаемое мною - безусловно не абсолютно. У любого специалиста есть опыт собственный, не меньший моего. Поэтому молодых коллег могу повторить свои же слова из прежних статей - в написанном сомневайтесь. Пусть моё изложение послужит одним из источников для того, чтобы вы из своего опыта, своей практики, других источников, сумели построить своё представление о предмете. И вот тогда - верьте этому представлению.

Ну и последний на сегодня вопрос - почему рассылка статей выходит столь нерегулярно и редко. Ответ на него прост - потому, что моя профессия, то, чем я зарабатываю себе на жизнь, - совсем не сочинение рассылки. А рассылка - это хобби, что ли. Поэтому, когда работа и рассылка начинают конкурировать за моё время - уступать приходится рассылке. С другой стороны, рассылка имеет какую-то самостоятельную ценность, например, на основе её материалов мне, может быть, когда-нибудь удастся издать книгу. И это заставляет, что бы ни случалось, но её продолжать. Хотя иногда и Unix или что другое поизучать тоже хочется... Здесь вы, мои читатели, являетесь той самой "истиной в высшей инстанции" - вы можете повлиять на содержание. Мне весьма интересна ваша реакция на материалы - что изложено плохо, а что - весьма хорошо. Ведь именно обратная связь не позволяет стать статьям просто "токованием глухаря". Поэтому я очень заинтересован в ваших откликах по существу. На сайте www.developing.ru можно, конечно, придумать опросник, однако простые оценки в диапазоне от "очень плохо" до "очень хорошо", имеют только моральное значение. Гораздо бОльшую ценность имеет знание мною неясностей, которые остаются у вас после прочтения статей. Но ведь я не могу заранее составить список таких неясностей? Поэтому - не стесняйтесь писать...

На этом, как я надеюсь, "околоиздательские вопросы" исчерпаны, и мы продолжаем тему...

предыдущий выпускархив и оглавлениеследующий выпуск
Авторские права © 2001 - 2004, Михаил Безверхов
Публикация требует разрешения автора

разделы сайта

форум

технология COM

оптимизация сайтов


© 2000-2004 Клуб программистов developing.ru