Программирование >>  Аргументация конструирования 

1 ... 40 41 42 [ 43 ] 44 45 46 ... 108


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

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

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

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

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

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

Применяя объектно-ориентированный подход к приготовлению блюд, я первым

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

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

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

классшрици/гование мик(ю€<имвых печей

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

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

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




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

Я не булу тратить место в книге на онисание того, чем этот автомобиль похож на другие. Мне нужно знать лишь то, что это машина, и то, чем она отли-

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

Зачем нужна киассификацил

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

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

Чтобы сэкономить место, можно освободиться от этой глупой концепции -

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

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

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

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

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



Глсва13

в 0+4

JS эЛой главе...

Введение в классы

# м чень часто программы имеют дело с совокупностями данных: имя, должность, табельный номер и т.д. Каждая отдельная составляющая не описывает человека, смысл имеет только вся вместе взятая информация. Простая структура, такая как массив, прекрасно подходит для хранения отдельных значений, однако совершенно непригодна для хранения совокупности данных разных типов. Таким образом, массив недостаточен для хранения комплексной информации.

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

Beqenue в классы

Для хранения разнотипной информации о физическом объекте нужна специальная структура. В нашем простейшем примере эта структура должна содержать поля имени, фамилии и номера кредитной карты.

В C++ структура, которая может объединить несколько разнотипных переменных в одном объекте, называется классом.

Формат класса

Класс, объект, который содержать имя и номер кредитной

карты, может быть создан так;

Класс dataset class NaiTieDataSet

public:

char firstName[1281; char lastName [128]; int creditCard;

экземпляр класса dataset NameDataSetnds ;

Объявление класса начинается с ключевого слова class, после которого идет имя класса и пара фигурных скобок, открывающих и закрывающих тело класса.

Можно использовать альтернативное ключевое слово struct, которое полностью идентично class, с предполагаемым использованием объявлений public.

После открывающей скобки находится ключевое слово спрашивайте

меня сейчас, что оно значит, - я объясню его значение немного позже. В следующих главах поясняются разные ключевые слова, такие как public или private. А до тех пор пока я не сделаю private публичным, значение pubiic останется приватным :-).)



1 ... 40 41 42 [ 43 ] 44 45 46 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика