Главная » Просмотр файлов » Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)

Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 187

Файл №1004033 Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)) 187 страницаБьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033) страница 1872018-10-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 187)

24.3. Классы 861 24.3.1. Что представляют собой классы В системе могут присутствовать два вида классов: 1. Классы, непосредственно представляющие концепции задачи; это концепции, с помощью которых конечные пользователи описывают свои проблемы и их решение. 2. Классы, являющиеся артефактами реализации; это классы, с помощью которых проектировщики и программисты описывают технологии реализации системы. Некоторые из классов, отражающих артефакты реализации, могут соответствовать и понятиям реального мира. Например, аппаратные и программные ресурсы системы являются хорошими кандидатами в классы приложения.

То, что для одного человека — деталь реализации, для другого — характерное понятие конкретной прикладной области. Хорошо спроектированная система содержит классы, которые поддерживают логически разные взгляды на систему. Например: 1. Классы, непосредственно представляющие пользовательские концепции (например, легковые машины, грузовики и т.д.). 2. Классы, обобщающие пользовательские концепции (например, транспортные средства). 3. Классы, представляющие аппаратные ресурсы (например, память). 4. Классы, представляющие программные ресурсы (например, поток вывода). 5. Классы, помогающие реализовать другие классы (списки, очереди, блокировки). 6. Встроенные типы и управляющие конструкции.

В больших и сложных системах поддерживать четкое разделение между логически разными типами классов и не смешивать уровни абстракции весьма затруднительно. Для простых систем можно ограничиться тремя уровнями абстракции: 1+2. Прикладной взгляд на систему (взгляд со стороны пользователя). 3+4. Аппаратный взгляд на систему (взгляд со стороны компьютера). 5+6. Программный взгляд на систему (взгляд со стороны языка программирования). Чем больше система, тем большее число уровней абстракции требуется для ее описания, и тем труднее становится разделять эти уровни. Эти уровни абстракции имеют прямые аналогии в природе и человеческой деятельности. Например, можно считать, что дом состоит из: 1. Атомов.

2. Молекул. 3. Бревен и кирпичей. 4. Полов, стен и потолков. 5. Комнат. Пока эти уровни абстракции поддерживаются раздельно, нет противоречий в вашем взгляде на дом. Но если смешать их произвольным образом, возникают не- 862 Глава 24. Проектирование и программирование лепости. Например, высказывание «Мой дом состоит из нескольких тысяч фунтов углерода, нескольких видов полимеров, 5000 кирпичей, двух ванных комнат и 13 потолков» звучит глупо.

Из-за абстрактной природы компьютерных программ аналогичное по глупости утверждение не так легко распознается. Переход от концепции прикладной области к классу программного проекта не является простой механической операцией. Тут нужно понимание прикладной области. Отметим, что концепции прикладной области сами являются значительными абстракциями. Например, «налогоплательщики», «монахи» и «сотрудники» не существуют в природе в чистом виде; это просто ярлыки, помогающие классифицировать людей в рамках некоторой системы отсчета (системы социальных понятий). Например, экран монитора не сильно-то напоминает поверхность рабочего стола, хотя он и разработан в виде метафоры рабочего стола, а окна на экране еше меньше напоминают окна в комнате, ветер из которых то и дело сдувает бумаги с реального рабочего стола.

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

Затем, однако, наступает фаза, когда классы и классовые иерархии размножаются неконтролируемым образом. Это, как раз, может вызвать долговременные проблемы, усложнив программу и затруднив ее понимание и сопровождение. Не нужно каждую мелкую деталь системы обязательно представлять классом, и не всякую взаимосвязь нужно отражать в форме наследования классов. Бель проектирования — смоделировать систему с соответствующим уровнем детализации и на соответствующем уровне абстракции. Нахождение баланса между простотой и общностью — это не простое дело.

24.3.2. Иерархии классов Рассмотрим задачу моделирования городского движения, чтобы выявить наиболее вероятное время, необходимое служебным машинам (полиция, скорая помощь, пожарные) для того, чтобы добраться до места назначения. Ясно, что нам потребуется смоделировать машины, грузовики, кареты скорой помощи, пожарные машины разных видов, полицейские машины, автобусы и т.д. Придется применить наследование, ибо перечисленные выше концепции реального мира не существуют изолированно; все они связаны друг с другом множеством связей. Без понимания этих связей нельзя адекватно воспринять концепции. Итак, в программах мы вводим классы для отражения концепций (понятий) и устанавливаем взаимосвязи между ними.

Одним из наиболее общих средств представления этих связей является наследование. В нашем примере мы, возможно, захотим особо выделить машины экстренных служб, а также различать легковые машины и грузовые машины. Такой взгляд порождает следующую иерархию: 863 24.3 Классы Тгиса Г! е епд!пе Робсе саг АтЬи1апсе Нооа апй 1аййег Здесь Етегдепсу представляет понятие транспортного средства экстренной службы, уместное в нашей задаче моделирования: оно может нарушать обычные правила дорожного движения, имеет преимущества на перекрестках, оно находится на связи с диспетчером и т.д.

Вот соответствующая версия на С++: с1азз УеЫс1е (/*... "/) ' с1азз Етегдепсу )/*...*/); с1ат Саг: риЬНс УеЫс1е (/*...*/); с!азз Тгиса: риЫк УеЫс!е (/*... */); с1азз Ройсе саг . "риис Саг, ргогес!ей Етегдепсу ) / *... * / ); с1азз АтЬиазпсе: риЫк Саг, рго!ее!ей Етегдепсу (/*... */); с!азз Г!ге епд!пе: риЫк Тгиса, ргогес!ей Ететепсу ) / *...

* / ); с1азз Нооа апй !аййег: риЫ!с Р!ге епд!пе (/*... */); Наследование — это связь наивысшего уровня, непосредственно представимая языком С++; на ранних стадиях проектирования она также является важнейшей. Часто возникает дилемма — выражать связь посредством наследования, или посредством включения !членства), Например, можно выдвинуть альтернативную концепцию транспортного средства экстренной службы — это транспортное средство, у которого имеется «мигалка». При этом классовая иерархия упрощается, так как класс Етегдепсу заменяется на соответствующее поле данных в классе УеЫс!е (ергг — указатель на «экстренность»); Тгиса Рке еаза!пе Родосе саг АтЬи1апсе Носа апй 1аййег 86Я Глава 24.

Проектирование и программирование Теперь класс Етегяепсу — это тип полей данных в классах, которым нужно действовать в качестве транспортных средств экстренных служб: с!аяя Етегаепсу ( / *... * У ); с(аяя УеЫс(е ( реп!ее!ей: Етегаепсу* ергг; У* ... *У ); с!аяя Саг: риЫ!с УеЫс(е ( У*... *У ); с(аяя Тгисй: риЫ!с УеЫс(е ( У*... *У ) с(аяя Ро!!се саг: риЫ!с Саг ( У*... *! ); с(аяя АтЬи1апсе: риЬЕс Саг ( У*... *У ) ! с1аяя Р!ге епяте: риЫ!с Тгисй ( У»...

*У )! с!аяя Ноой апй 1аИег: риЫйэ Р!г епя!пе ( У*...*У ); Здесь транспортное средство относится к экстренной службе, если указатель Уейс1е:: ерп не равен нулю (соответственно, у простых автомобилей этот член инициализируется нулем). Например: Саг:: Саг () УУ конструктор Саг !легковой автомобиль вообще) : еряг(О) ( ) Ройсе саг:: Ро!гсе саг () УУ конструктор Ро!(се сог (полицейский автомобиль! : ергг (пев Етегдепсу) При этом гоЫ Т( УеЫсге* р) ( Ое1еге р- >еряг; р->еряг = О; УУ теперь это не транспортное средство экстренной службы ,У ...

р->еряг = пев Етегаепсу! Усково транспортное средство экстренной службы ) Итак, какой же вариант иерархии классов лучше? Ответ на этот вопрос таков: «тот вариант лучше, что лучше соответствует концепциям реального мира», То есть выбирая между моделями в условиях достижения эффективности и простоты, нужно стремиться к большей реалистичности. В нашем конкретном случае простота преобразования экстренного транспортного средства в обычное кажется мне неестественной.

Пожарные машины и кареты скорой помоши имеют специфические конструкции, укомплектованы обученным персоналом и работают в связке с диспетчером, что требует специального коммуникационного оборудования. Отсюда вытекает, что транспортное средство экстренной службы должно моделироваться как фундаментальное понятие, напрямую представимое в программе, что будет способствовать проверке типов и применению автоматизированных инструментов. Если бы мы моделировали другую задачу, где роли автомобилей менее четко определены, где обычные автомобили могли бы перевозить персонал экстренных служб, а устройства связи представлялись простыми сотовыми телефонами, там альтернативная схема моделирования была бы вполне адекватной (достаточно реалистичной). 865 24.3 Классы Для тех, кому пример с моделированием уличного движения кажется надуманным или экзотичным, спешим сообшить, что альтернатива «наследование-включение (членство)» неизменно встречается при проектировании самых разных задач из разных предметных областей.

В качестве еше одного примера в 524.3.3 рассматривается полоса прокрутки (зсгоПЬаг). 24.3.2.1. Зависимости внутри иерархии классов Естественно, что производный класс зависит от своего базового класса. Не так часто отмечают и обратную зависимость. Если у класса есть виртуальная функция, значит он полагается на помошь производного класса в реализации части его функциональности. Если же какой-либо член базового класса вызывает одну из виртуальных функций, то в результате базовый класс становится зависимым от производного в своей реализации.

Аналогично, если класс использует зашишенные члены, то он опять же зависит от производных классов в своей реализации. Рассмотрим пример: сгаге В ( В... ргогесгеВ: глг а; риЫгс: Ыггиа1 1нг1 (); тг е ( ) ( (пг х =г ( ); ге(игл х-а; ) ); Что делает функция ВО? Ответ самым критичным образом зависит от определениями() в производных классах. Вот версия, которая гарантирует возврат единицы функцией БО: с1ам 1)1: риЫ(с В ( (н11'() (ге(игп а»1; ) )' А вот версия, в которой В() выведет "Нейо, тгог)б(" и вернет назад О.

Характеристики

Тип файла
DJVU-файл
Размер
8,84 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6473
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее