Основы объектно-ориентированного программирования - [4]
[x]. Явный эффект повышения мощности компьютера сказывается тогда, когда велика доля "хороших" алгоритмов по отношению к плохим. Предположим, что новая машина работает в два раза быстрее, чем старая. Пусть n - размер решаемой задачи, а N - максимальный размер, при котором удается решить задачу на старом компьютере за приемлемое время. Если используется линейный алгоритм, временная сложность которого O(n) , то новый компьютер даст возможность решить задачу вдвое большего размера - 2*N. Для квадратичного алгоритма со сложностью O(n>2) увеличение N составит только 41%. Переборный алгоритм со сложностью O(2>n) добавит к N только единицу - небольшое улучшение за такие деньги.
[x]. В некоторых случаях эффективность может влиять на корректность. Спецификация может устанавливать, что ответ компьютера на определенное событие должен произойти не позже, чем за определенное время, например, бортовой компьютер должен быть готов определить и обработать сообщение с сенсора рычага управления двигателя достаточно быстро, чтобы сработало корректирующее действие. Эта связь между эффективностью и корректностью не ограничивается приложениями, работающими "в реальном времени"; немногие люди заинтересуются моделью предсказания погоды, которой требуется 24 часа, чтобы предсказать погоду на завтра.
Приведу еще один пример, хотя возможно менее важный, но постоянно вызывавший у меня досаду. Система управления окнами моего компьютера, используемая мной какое-то время, иногда слишком медленно определяла, что курсор мыши передвинулся из одного окна в другое, так что набираемые на клавиатуре символы, предназначенные для одного окна, попадали в другое. В этом случае ограничение эффективности приводило к нарушению спецификации, то есть корректности, которая даже, казалось бы, в безобидном повседневном применении может привести к плохим последствиям: подумайте о том, что может случиться, если два окна используются для пересылки сообщений электронной почты двум различным корреспондентам. Даже более незначительные причины приводили к расторжению браков или к началу войн. |
Поскольку эта книга сосредоточивается на концепциях создания ОО-ПО, а не на вопросах реализации, только немногие разделы явным образом имеют дело с производительностью. Но проблема эффективности присутствует везде. Когда представляется ОО-решение некоторой проблемы, рассматривается не только элегантность решения, но и его эффективность. Когда вводится новый ОО-механизм, будь это сборка мусора, динамическое связывание, параметризация или повторное наследование, за этим стоит знание того, что затраты на реализацию механизма будут приемлемы по времени и памяти. Всегда, по возможности, будут упоминаться последствия изучаемых технических приемов на производительность.
Эффективность - только один из факторов качества; мы не должны (как некоторые специалисты) позволять ему главенствовать в наших разработках. Но это один из важных факторов, и он должен приниматься во внимание и в построении систем ПО, и в создании языков программирования. Если вы забудете о производительности, производительность забудет о вас.
Переносимость (Portability)
Определение: переносимость
Переносимость - это легкость переноса ПО в различные программные и аппаратные среды.
Переносимость имеет дело с разнообразием не только физического оборудования, но чаще аппаратно-программного механизма, того, который мы действительно программируем, включающего операционную систему, систему окон, если она применяется, и другие основные инструменты. В дальнейшем в нашей книге будет использоваться слово "платформа" для обозначения аппаратно-программного механизма; примером платформы может служить "Intel X86 + Windows NT" (известная как "Wintel").
Существующие сегодня несовместимости различных платформ неоправданны. Для наивного наблюдателя единственным объяснением, кажется, заговор с целью ввести в заблуждение человечество вообще, и программистов в частности. Однако каковы бы ни были причины, разнообразие платформ делает переносимость главной заботой и разработчиков, и пользователей ПО.
Простота использования (Easy of Use)
Определение: простота использования
Простота использования - это легкость, с которой люди с различными знаниями и квалификацией могут научиться использовать ПО и применять его для решения задач. Сюда также относится простота установки, работы и текущего контроля.
Определение подчеркивает наличие различных уровней опытности потенциальных пользователей. Это требование ставит одну из важных проблем перед проектировщиками ПО, занимающимися простотой использования: как обеспечить подробное руководство и объяснения начинающим пользователям, не мешая умелым пользователям, которые сразу хотят приняться за работу?
Как и для многих других качеств, описанных в этой лекции, ключ к легкости использования - это структурная простота. Хорошо спроектированная система, построенная в соответствии с ясной хорошо продуманной структурой, будет более простой для изучения и использования, чем построенная беспорядочно. Выполнение этого условия способствует простоте системы, но его, конечно, недостаточно. То, что просто и ясно для проектировщиков, может быть трудным и неясным для пользователей, особенно если объяснение дается в терминах проектировщика, а не в терминах, доступных пользователю.