Всего на сайте:
166 тыс. 848 статей

Главная | Информатика

Упражнение 3-8. Мы видели множество версий этой программы, написанных на раз­личных..  Просмотрен 161

 

Мы видели множество версий этой программы, написанных на раз­личных языках программирования, включая Scheme, Tel, Prolog, Python, Generic Java, ML и Haskell; у каждой есть свои преимущества и свои недостатки. Реализуйте программу на своем любимом языке и оце­ните ее быстродействие и размеры кода.

 

Дополнительная литература

 

Библиотека стандартных шаблонов описана во множестве книг, включая "Генерацию программ и STL" Мэтью Остерна (Matthew Austern. Generic Programming and the STL. Addison-Wesley, 1998).

Для изучения самого языка C++ лучшим пособием является "Язык программирования C++" Бьёрна Страуструпа (Bjarne Stroustrup. The C++ Programming Language. 3rd ed. Addison-Wesley, 1997), для изучения Java — "Язык программирования Java" Кена Арнольда и Джеймса Гос-линга (Ken Arnold and James Gosling. The Java Programming Language. 2nd ed. Addison-Wesley, 1998). Лучшее, на наш взгляд, описание Perl при­ведено в "Программировании на Perl" Ларри Уолла, Тома Кристиансена и Рэндала Шварца (Larry Wall, Tom Christiansen and Randal Schwartz. Pro­gramming Perl. 2n<l ed. O'Reilly, 1996).

В принципе, можно говорить о существовании неких шаблонов проек­тирования (design patterns) — действительно, в большинстве программ используется лишь ограниченное количество принципиальных проек­тировочных решений — точно так же, как существует лишь несколько базовых структур данных; с некоторой натяжкой можно сказать, что это аналог идиоматического кода, о котором мы говорили в первой главе. Эта идея лежит в основе книги Эриха Гаммы, Ричарда Хелма, Ральфа Джонсона и Джона Влиссайдеса "Разработка шаблонов: элементы по-вторноиспользуемого объектно-ориентированного программного обес­печения" (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-' Wesley, 1995).

Авантюрные приключения программы markov (которая изначально называлась shaney) были описаны в разделе "Computing Recreations" журнала Scientific American за июнь 1989 года. Статья была перепечата­на в книге Дьюдни" Магическая машина" (А. К. Dewdney. The Magic Ma­chine. W. H. Freeman, 1990).


4. Интерфейсы

И до того, как буду строить стену, я должен знать,

Что огораживаю я: внутри или снаружи, -

И что не нарушаю чьих-то прав.

Есть нечто, что не терпит ограждений,

Ломая их.

 

Роберт Фрост. Починка стены

(Перевод В. Кириллова)

 

Суть проектирования — сбалансировать конфликтующие цели и огра­ничения. Когда вы пишете небольшую программу для собственного пользования, вы, конечно, можете сами выбирать конкретные решения, этот выбор не затронет ничего и никого, кроме вас. Но если ваш код бу­дет использоваться кем-то еще, каждое решение имеет более широкие по­следствия.

Среди проблем, которые надо решить при проектировании, стоит вы­делить следующие.

• Интерфейсы: какой доступ и какой сервис предлагается? Интер­фейс, в сущности, является соглашением между поставщиком (про­граммистом) и потребителем. В идеале мы должны предоставлять унифицированные и удобные средства, имеющие достаточно воз­можностей для того, чтобы их было легко использовать, и в то же время не настолько большие, чтобы стать громоздкими.

• Сокрытие информации: какая информация доступна, а какая — нет? Интерфейс должен предоставлять прямой доступ к компонентам, скрывая при этом детали реализации, — с тем чтобы их можно было изменять, не затрагивая пользователя.

• Управление ресурсами: кто отвечает за управление памятью и дру­гими ограниченными ресурсами? Здесь главными проблемами яв­ляются выделение и освобождение памяти и управление совместно используемой информацией.

• Обработка ошибок: кто обнаруживает ошибки, кто сообщает о них и каким образом все это делается? Какие попытки восстановления предпринимаются при обнаружении ошибки?

 

В главе 2 мы рассмотрели составные части, из которых строится систе­ма, — структуры данных. В главе 3 мы узнали, как объединять их в не­большие программы. Теперь наше внимание сосредоточится на интер­фейсах между компонентами, получаемыми из разных источников. В этой главе мы проиллюстрируем проектирование интерфейсов созданием биб­лиотеки функций и структур данных для решения одной хорошо извест­ной задачи. Попутно мы познакомим вас с некоторыми принципами про­ектирования. Как правило, при проектировании приходится принимать огромное количество решений, но большинство из них делается почти бессознательно. Из-за незнания базовых принципов и возникают те мало­понятные интерфейсы, которые ежедневно так досаждают програм­мистам.

Предыдущая статья:Производительность Следующая статья:Значения, разделенные запятой
page speed (0.013 sec, direct)