Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Приготовление блюд с помощью функций



Представьте себе, что я попросил бы своего сына написать алгоритм приготовле- ния мною закусок. Поняв наконец, чего я от него добиваюсь, он бы, наверное, напи- сал что-то вроде "открыть банку бобов, натереть сыра, посыпать перцем" и т.д. Когда дело дошло бы непосредственно до приготовления в печи, он в лучшем случае напи- сал бы нечто подобное: "готовить в микроволновой печи пять минут".

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

При таком подходе очень трудно отвлечься от сложностей внутреннего устройства печи. В этом мире нет объектов, за которые можно спрятать всю присущую микро- волновой печи сложность.

Приготовление "объектно-ориентированных" блюд

Применяя объектно-ориентированный подход к приготовлению блюд, я первым делом определю объекты, используемые в задаче: сыр, бобы, чипсы и микроволновая печь. После этого я начинаю моделировать эти объекты в программе, не задумываясь над деталями их использования.

При этом я работаю (и думаю) на уровне базовых объектов. Я должен думать о том, как приготовить блюдо, не волнуясь о деталях работы микроволновой печи — над этим уже подумали ее создатели (которым нет дела до моих любимых блюд).

После создания и проверки всех необходимых объектов можно переключиться на следующий уровень абстракции. Теперь я начинаю думать на уровне процесса приго- товления закуски, не отвлекаясь на отдельные куски сыра или банки бобов. При та- ком подходе я легко переведу рецепт моего сына на язык C++.

 

печей

В концепции уровней абстракции очень важной частью является классификация. Если бы я спросил моего сына: "Что такое микроволновая печь?" — он бы наверняка ответил: "Это печь, Если бы затем я спросил: "А что такое печь?" — он бы ответил что-то вроде: "Ну, это кухонный прибор, который...". (Если бы я попы- тался выяснить, что такое кухонный прибор, он наверняка бы спросил, почему я за- даю так много дурацких вопросов.)

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

В ООП моя микроволновая печь является экземпляром класса микровол- новых печей. Класс микроволновых печей является подклассом печей, ко- торый, в свою очередь, является подклассом кухонных приборов.

 

 

140                      Часть ///. "Классическое" программирование


Люди склонны заниматься классификацией. Все вокруг увешано ярлыками. Мы делаем все, для того чтобы уменьшить количество вещей, которые надо запомнить. Вспомните, например, когда вы первый раз увидели "Пежо" или "Рено". Возможно, в рекламе и говорилось, что это суперавтомобиль, но мы-то с вами знаем, что это не так. Это ведь просто машина. Она имеет все свойства, которыми обладает автомобиль. У нее есть руль, колеса, сиденья, мотор, тормоза и т.д. Могу поспорить, что я смог бы даже водить такую штуку без инструкции.

Я не буду тратить место в книге на описание того, чем этот автомобиль похож на другие. Мне нужно знать лишь то, что  это "машина,                                                                                                       и то, чем она отли- чается от других машин (например, ценой). Теперь можно двигаться дальше. Легко- вые машины являются таким же подклассом колесных транспортных средств, как гру- зовики и пикапы. При этом колесные транспортные средства входят в состав транс- портных средств наравне с кораблями и самолетами.

 

Зачем нужна

Зачем вообще классифицировать? Ведь это влечет за собой массу трудностей. Тем более, что у нас уже есть готовый механизм функций. Зачем же что-то менять?

Иногда может показаться, что легче разработать и создать микроволновую печь специально для некоторого блюда и не строить универсальный прибор на все случаи жизни. Тогда на лицевую панель не надо будет помещать никаких кнопок, кроме кнопки СТАРТ. Блюдо всегда готовилось бы одинаковое время, и можно было бы из- бавиться от всех этих бесполезных кнопок  типа                                                                     или ТЕМПЕРАТУРА ПРИГОТОВЛЕНИЯ. Все, что требовалось бы от такой печи, — это чтобы в нее поме- шалась одна тарелка с полуфабрикатом. Да, но что же тогда получится? Ведь при этом один кубический метр пространства использовался бы для приготовления всего одной тарелки закуски!

Чтобы сэкономить место, можно освободиться от этой глупой концепции — "микроволновая печь". Для приготовления закуски хватит и внутренностей печи. То- гда в инструкции достаточно написать примерно следующее: "Поместите полуфабри- кат в ящик. Соедините красный и черный провод. Установите на трубе излучателя напряжение в 3000 вольт. Должен появиться негромкий гул. Постарайтесь не стоять близко к установке, если вы хотите иметь детей". Простая и понятная инструкция!

Но такой функциональный подход создает некоторые проблемы.

Слишком сложно. Я не хочу, чтобы фрагменты микроволновой печи ремешивались с фрагментами закуски при разработке программы. Но поскольку при данном подходе нельзя создавать объекты и упрощать

I   написание, работая с каждым из них в отдельности, приходится S             жать в голове все нюансы каждого объекта одновременно.

Не гибко. Когда-нибудь мне потребуется поменять свою микроволно-

|   вую печь на печь другого типа. Я смогу это сделать без проблем, если

| интерфейс печи можно будет оставить старым. Без четко очерченных областей действия, а также без разделения интерфейса и внутреннего содержимого становится крайне трудно убрать старый объект и поста- вить на его место новый.

Невозможно использовать повторно. Печи делаются для приготовления разных блюд. Мне, например, не хочется создавать новую печь всякий раз, когда требуется приготовить новое блюдо. Если задача уже решена, неплохо использовать ее решение и в других программах.

 

 


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 200; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.014 с.)
Главная | Случайная страница | Обратная связь