Можно ли обойтись без абстракций?
Можно ли обойтись без абстракций?
В разработке программного обеспечения, как и в других научных и технических дисциплинах, плодотворная идея после того, как ее раскрыли, может показаться очевидной, даже если потребовалось много времени, чтобы она возникла. Сначала зачастую появляются плохие и запутанные (что часто одно и то же) идеи, и требуется время, чтобы более простые и элегантные заняли их место.
Это замечание справедливо и для абстрактных типов данных. Хотя хорошие разработчики ПО всегда с пользой применяли абстракцию (вследствие хорошего образования или просто интуитивно), многие из существующих ныне систем были разработаны без учета этой цели.
Однажды я невольно провел один небольшой эксперимент, который хорошо иллюстрирует такое состояние дел. Как-то, когда в курсе, который я читал, пришло время готовить проекты, я решил предоставить студентам нечто вроде анонимного рынка, куда бы они могли помещать шутливые объявления о продаже программных модулей, не раскрывая их источников. (Идея, хорошая или не очень, состояла в том, чтобы процесс выбора модулей происходил только на основе точных спецификаций их возможностей.) Почтовые средства знаменитой операционной системы, предпочитаемой американскими университетами, казалось бы, предоставляли соответствующий базовый механизм, но, естественно, эта почтовая система показывала имя отправителя при доставке сообщения получателям. У меня был доступ к исходному коду - огромной программе на Си, и я решил, наверное, по глупости, взять этот код, убрать в нем все ссылки на имя отправителя в доставляемых сообщениях и перекомпилировать.
С помощью своего ассистента я взялся за работу, казавшуюся достаточно очевидной, хотя ей и не учат в курсах по разработке ПО, - систематическую разборку программы. Будучи уверенными в себе, мы быстро нашли первое место, в котором программа обращалась к имени отправителя, и удалили соответствующий код. После чего наивно решили, что работа сделана, и перекомпилировали код. Но когда мы послали тестовое сообщение, то обнаружили, что имя отправителя все еще сохранилось! После чего начался долгий и сюрреалистический процесс: снова и снова, веря, что мы, наконец, обнаружили последнее обращение к имени отправителя, мы удаляли его, перекомпилировали программу и посылали тестовое сообщение, чтобы в очередной раз исправно обнаружить имя отправителя на обычном месте. Как знаменитая стоглавая гидра, почтовая программа отращивала новую голову всякий раз, когда мы считали, что отрубили ей последнюю.
Наконец, повторив в нашу эру древний подвиг Геракла, мы полностью уничтожили этого зверя, удалив более двадцати участков кода, каждый из которых, так или иначе, задавал информацию об отправителе.
В предыдущих разделах нам удалось сделать первые шаги по дороге к АТД. Их достаточно для понимания того, что программа, написанная в соответствии с самыми элементарными представлениями об абстракции данных, должна была бы рассматривать MAIL_MESSAGE (ПОЧТОВОЕ_СООБЩЕНИЕ) как точно определенное абстрактное понятие. Одной из операций сообщения мог быть запрос, называемый, например, sender (отправитель), возвращающий информацию об отправителе сообщения. Любой элемент почтовой программы, которому была бы нужна эта информация, получал бы ее только через этот запрос sender. Если бы почтовая программа была разработана в соответствии с этим, кажущимся очевидным, принципом, то для моего небольшого упражнения достаточно было бы изменить только код запроса sender. Более того, весьма вероятно, что в этом случае программа предоставляла бы также и операцию set_sender (установить_отправителя), которая позволила бы выполнить требуемую работу еще проще.
Отметим, что рассматриваемая почтовая программа использовалась весьма успешно. Но она является типичным представителем нынешнего стандарта в индустрии ПО. До тех пор, пока мы не выйдем далеко за пределы этого стандарта фраза "проектирование программного обеспечения" останется примером принятия желаемого за действительное.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Что можно делать в «Одноклассниках»
Что можно делать в «Одноклассниках» «Одноклассники», самая популярная социальная сеть для начинающих пользователей пенсионного возраста.Быстренько вспомним, как там можно зарегистрироваться. Анекдот Боролась со скукой. Зашла в «Одноклассниках» на страницу к
Вы не уверены в том, что обещание можно выполнить
Вы не уверены в том, что обещание можно выполнить Даже если конечная цель невозможна, вы можете взять на себя обязательства по выполнению действий, приближающих ее достижение. Более того, проверка достижимости цели может быть одним из таких действий!Вместо того чтобы
Как можно записать текущий разговор
Как можно записать текущий разговор Не каждая программа голосового общения может записывать разговоры, а вот TeamSpeak может! Иногда это вам очень пригодится. Например, чтобы собрать чудо-компромат, а потом использовать его по назначению, или записать голос далекого
2.4.3. Смоптимизация: что и как можно смоптимизировать
2.4.3. Смоптимизация: что и как можно смоптимизировать Каждый раз, когда вы публикуете новый материал у себя на сайте, задайте себе вопрос: а что было бы, если одновременно с этой публикацией анонс моего материала сразу появился бы на десятках других сайтов? Конечно же –
При оптимизации процесса покупки не обойтись без убеждения
При оптимизации процесса покупки не обойтись без убеждения Внутри воронки конверсии клиенты готовы приобрести ваш товар. Но за ее пределами убедить их сделать покупку уже намного сложнее. Вот почему мы настаиваем на том, чтобы система убеждения включала в себя несколько
Что еще можно прочесть
Что еще можно прочесть Большинство задач этой книги могут быть решены с помощью традиционных методик расчета, описанных в других книгах. Можно порекомендовать следующие книги в качестве материала, объясняющего и развивающего содержание отдельных глав этой книги:Circuit
Подробнее о том, что можно сделать в VBA
Подробнее о том, что можно сделать в VBA Выше, в разделе Зачем мучиться с VBA?, я уже упоминал о том, как с помощью VBA можно усовершенствовать имеющиеся приложения. Пришло время обсудить это подробнее, чтобы вам стало ясно, наконец, что же все-таки можно получить от VBA.Прежде чем
18. Объявляйте переменные как можно локальнее
18. Объявляйте переменные как можно локальнее РезюмеИзбегайте "раздувания" областей видимости. Переменных должно быть как можно меньше, а время их жизни — как можно короче. Эта рекомендация по сути является частным случаем рекомендации 10.ОбсуждениеПеременные, время
Что еще можно автоматизировать
Что еще можно автоматизировать Программные комплексы по распознаванию текстов приобретают все новые возможности. Они уже подбираются к распознаванию рукописного текста. Эта задача еще не полностью решена, но если почерк не слишком творческий, то «обучить» программу
Начинайте рекламировать как можно раньше
Начинайте рекламировать как можно раньше Распространите слухи и получите подписчиков как можно скорееМы уже говорили об этом, но повторим: заведите сайт и начните собирать адреса электронной почты как можно раньше. Выберите домен, повесьте логотип и, может быть, одно-два
Kickstarter помогает обойтись без издателей Сергей Петров
Kickstarter помогает обойтись без издателей Сергей Петров Опубликовано 13 мая 2011 года Если название Google стало синонимом выражения «искать в интернете», то название сайта Kickstarter постепенно превращается в синоним труднопроизносимого термина
Что можно делать с окнами
Что можно делать с окнами Рабочий стол, значки, окна и диалоги — основа Windows. Большинство запущенных вами программ выводят на Рабочий стол свои окна. Вы можете перемещать их по экрану, изменять размер, развертывать на весь экран или сворачивать в значок на Панели задач. С
8.1. Что можно найти в Интернете?
8.1. Что можно найти в Интернете? После того как вы научились пользоваться браузером и почтой, настало время отправиться в увлекательное путешествие по Всемирной компьютерной сети. На вопрос, заданный в заголовке данного раздела, можно ответить однозначно — в Интернете
Семь способов обойтись без «Фотошопа»: сложные эффекты на бесплатных онлайновых сервисах Олег Нечай
Семь способов обойтись без «Фотошопа»: сложные эффекты на бесплатных онлайновых сервисах Олег Нечай Опубликовано 26 сентября 2013 Усилия борцов с пиратством приносят свои плоды: вместо покупки диска «Все версии “Фотошопа”» или скачивания