1629295403-b876e2087bddebea4bc9666fb2377a02 (846199), страница 42
Текст из файла (страница 42)
Именно в этом направлении как минимум полстолетия дажется прогресс в программировании— работа со все более сложными концепциями авсе меньшим количеством ошибок.Во время приготовления блюда многие смотрят на микроволновую печь просто какна железный ящик. И пока ею можно управлять с помощью интерфейса, ее нельзя сломать, "подвесить" или, что еще хуже, превратить готовящееся блюдо в угли.Приготовление блюд с помощью функцийПредставьте себе, что я попросил бы своего сына написать алгоритм приготовлен!мною закусок. Поняв наконец, чего я от него добиваюсь, он бы, наверное, написал что-товроде "открыть банку бобов, натереть сыр, посыпать перцем" и т.д.
Когда дело дошло бынепосредственно до приготовления в печи, он в лучшем случае написал бы нечто тип"готовить в микроволновой печи не более пяти минут".Этот рецепт прост и верен. Но с помощью подобного алгоритма "функциональный" программист не сможет написать программу приготовления закусок. Программисты, работающие с функциями, живут в мире, лишенном таких объектов, как микроволновая печь и прочиудобства. Они заботятся о последовательности операций в функциях. В "функциональном"решении проблемы закусок управление будет передано от пальцев рук кнопкам передней панели, а затем внутрь печи. После этого программе придется решать, какое время должна работать печь и когда следует включить звуковой сигнал готовности.При таком подходе очень трудно отвлечься от сложностей внутреннего устройств!печи.
В этом мире нет объектов, за которые можно спрятать всю присущую микроволновой печи сложность.Приготовление "объектно-ориентированных" блюдПрименяя объектно-ориентированный подход к приготовлению блюд, я первым делом определяю объекты, используемые в задаче: сыр, бобы, чипсы и микроволноваяпечь.
После этого я начинаю моделировать их в программе, не задумываясь над деталями их применения.При этом я работаю (и думаю) на уровне базовых объектов. Главное, думать о том, чтоприготовить блюдо, не волнуясь о деталях работы микроволновой печи — над этим уже подумали ее создатели (которым абсолютно нет дела до ваших кулинарных пристрастий).После создания и проверки всех необходимых объектов можно переключиться наследующий уровень абстракции, т.е. мыслить на уровне процесса приготовления закускине отвлекаясь на отдельные куски сыра или банку бобов.
При таком подходе я легко переведу рецепт моего сына на язык С#.226ЧастьIV.Объектно-ориентированноепрограммировании]В концепции уровней абстракции очень важной частью является классификация.Опять-таки, если бы я спросил моего сына: "Что такое микроволновая печь?" — он бынаверняка ответил: "Это печь, которая...". Если бы затем последовал вопрос: "А что такое печь?" — он бы ответил что-то вроде: "Ну, это кухонный прибор, который...".
(Припопытке выяснить у него, что же такое кухонный прибор, он наверняка бы спросил,сколько можно задавать дурацких вопросов.)Из детских ответов становится ясно, что ими печь воспринимается как один из экземпляров вещей, называемых микроволновыми печами. Кроме того, печь является подразделом духовок, а духовки относятся к типу кухонных приборов.В объектно-ориентированном программировании конкретная микроволноваяпечь является экземпляром класса микроволновых печей. Класс микроволновых печей является подклассом печей, который, в свою очередь, является подклассом кухонных приборов.Люди склонны заниматься классификацией.
Все вокруг увешано ярлыками. Мы делаем все для того, чтобы уменьшить количество вещей, которые надо запомнить. Вспомните, например, когда вы первый раз увидели " П е ж о " или " Р е н о " . Возможно, в рекламеи говорилось, что это суперавтомобиль, но мы-то с вами знаем, что это не так. Это ведьпросто машина. Она имеет все свойства, которыми обладает автомобиль.
У нее естьруль, колеса, сиденья, мотор, тормоза и т.д. И можно поспорить, что многие водили бытакую штуку без всяких инструкций.Но не будем тратить место в книге на описание того, чем этот автомобиль похож надругие. Следует знать лишь то, что это "машина, которая...", и то, чем она отличается отдругих машин (например, ценой). Теперь можно двигаться дальше. Легковые автомобили являются таким же подклассом колесных транспортных средств, как грузовики и пикапы.
При этом колесные транспортные средства входят в состав транспортных средствнаравне с кораблями и самолетами.Зачем вообще нужна эта классификация, это объектно-ориентированное программирование? Ведь оно влечет за собой массу трудностей. Тем более, что уже имеется готовый механизм функций. Зачем же что-то менять?Иногда может показаться, что легче разработать и создать микроволновую печь специально для какого-то блюда и не строить универсальный прибор на все случаи жизни.Тогда на лицевую панель не нужно было бы помещать никаких кнопок, кроме кнопкиСТАРТ.
Блюдо всегда готовилось бы одинаковое время, и можно было бы избавиться отвсех этих бесполезных кнопок типаЛЕНИЯ. Все,РАЗМОРОЗКАилиТЕМПЕРАТУРА ПРИГОТОВчто требовалось бы от такой печи, — это чтобы в нее помещалась одна тарелка с полуфабрикатом. Да, но что же тогда получится? Ведь при этом кубический футпространства использовался бы для приготовления всего одной тарелки закуски!Чтобы сэкономить место, можно освободиться от этой глупой концепции — "микрон]новая печь". Для приготовления закуски хватит и внутренностей печи.
Тогда в инструкциидостаточно написать примерно следующее: "Поместите полуфабрикат в ящик. Соединикрасный и черный провод. Установите на трубе излучателя напряжение в 3000 вольт. Долпоявиться негромкий гул. Постарайтесь не стоять близко к установке, если хотите иметь цтей". Простая и понятная инструкция!Но такой функциональный подход создает некоторые проблемы.Слишком сложно. Нежелательно, чтобы фрагменты микроволновой печи памешивались с фрагментами закуски при разработке программы. Но поскольку цданном подходе нельзя создавать объекты и упрощать написание, работая с ицым из них в отдельности, приходится держать в голове все нюансы каждого ofекта одновременно.Не гибко. Когда-нибудь потребуется замена имеющейся микроволновой печщпечь другого типа.
Это делается без проблем, если интерфейс печи можно будоставить старым. Без четко очерченных областей действия, а также без разделенинтерфейса и внутреннего содержимого становится крайне трудно убрать старобъект и поставить на его место новый.Невозможно использовать повторно. Печи предназначены для приготовлен!разных блюд. Вряд ли кому-то захочется создавать новую печь всякий раз при аобходимости приготовить новое блюдо. Если задача уже решена, неплохо исшизовать ее решение и в других программах.Объект должен быть способен спроектировать внешний интерфейс максимально прсстым при полной достаточности для корректного функционирования. Если интерфа"устройства будет недостаточен, все кончится битьем кулаком или чем-то более тяжелапо верхней панели такого устройства или просто разборкой для того, чтобы добраться»его внутренностей (что наверняка окажется нарушением законодательства об интеллатуальной собственности).
С другой стороны, если интерфейс слишком сложен, весысомнительно, что кто-то купит такое устройство (как минимум, вряд ли кто-то будет HIпользовать все предоставляемые интерфейсом возможности).Люди постоянно жалуются на сложность видеомагнитофонов (впрочем, с переходона управление с помощью экрана количество жалоб несколько уменьшилось).
В экустройствах слишком много кнопок с различными функциями. Зачастую одна и та iкнопка выполняет разные функции — в зависимости от того, в каком именно состояшнаходится в этот момент видеомагнитофон. Кроме того, похоже, невозможно найти явидеомагнитофона различных марок с одинаковым интерфейсом.Теперь рассмотрим ситуацию с автомобилями. Вряд ли можно сказать (и доказатьчто автомобиль проще видеомагнитофона.
Однако, похоже, люди не испытывают тантрудностей с его вождением, как с управлением видеомагнитофоном.В каждом автомобиле в наличии примерно одни и те же элементы управления и гаити на одних и тех же местах. Если же управление отличается... Ну вот вам реальная жтория из моей жизни — у моей сестры был французский автомобиль, в котором упращ228ЧастьIV.Объектно-ориентированноепрограммированние фарами оказалось там, где у всех "нормальных" автомобилей находится управлениесигналами поворота. Отличие вроде бы небольшое, но я так и не научился поворачиватьна этом автомобиле влево, не выключив при этом фары...Кроме того, при хорошо продуманном дизайне автомобиля один и тот же элементуправления никогда не будет использоваться для выполнения более одной операции в зависимости от состояния автомобиля.Микроволновая печь должна быть сконструирована таким образом, чтобы никакаякомбинация кнопок или рукояток не могла ее сломать или навредить вам.
Конечно, определенные комбинации не будут выполнять никаких функций, но главное, чтобы ни одна из них не привела к следующему.Поломке устройства. Какие бы рукоятки ни крутил ваш ребенок и какие быкнопки не нажимал — микроволновая печь не должна от этого сломаться. Послетого как вы вернете все элементы управления в корректное состояние, она должнанормально работать.К пожару или прочей порче имущества или нанесению вреда здоровью потребителя. Мы живем в сутяжном мире, и если бы что-то похожее могло произойти — компании пришлось бы продать все вплоть до автомобиля ее президента, чтобы рассчитаться с подающими на нее в суд и адвокатами.Однако чтобы эти два правила выполнялись, вы должны принять на себя определенную ответственность.