Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++

Б. Страуструп - Язык программирования С++ (1119446), страница 94

Файл №1119446 Б. Страуструп - Язык программирования С++ (Б. Страуструп - Язык программирования С++) 94 страницаБ. Страуструп - Язык программирования С++ (1119446) страница 942019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

В идеаледля обоих видов зависимостей граф зависимостей системы должен быть направленным нецикличнымграфом, что облегчает понимание и тестирование системы. Однако, эта цель более важна и чащедостижима для реализаций, чем для интерфейсов.Отметим, что класс определяет три интерфейса:class X {private:// доступно только для членов и друзейprotected:// доступно только для членов и друзей, а также// для членов и друзей производных классовpublic:// общедоступно};Члены должны образовывать самый ограниченный из возможных интерфейсов.

Иными словами, члендолжен быть описан как private, если нет причин для более широкого доступа к нему; если же таковыеесть, то член должен быть описан как protected, если нет дополнительных причин задать его как public.В большинстве случаев плохо задавать все данные, представляемые членами, как public. Функции иклассы, образующие общий интерфейс, должны быть спроектированы таким образом, чтобыпредставление класса совпадало с его ролью в проекте как средства представления понятий.Напомним, что друзья являются частью общего интерфейса.Отметим, что абстрактные классы можно использовать для представления понятия упрятывания болеевысокого уровня ($$1.4.6, $$6.3, $$13.3).333Бьерн Страуструп.Язык программирования С++12.5 Свод правилВ этой главе мы коснулись многих тем, но, как правило, избегали давать настоятельные и конкретныерекомендации по рассматриваемым вопросам.

Это отвечает моему убеждению, что нет "единственноверного решения". Принципы и приемы следует применять способом, наиболее подходящим дляконкретной задачи. Здесь требуются вкус, опыт и разум. Тем не менее, можно предложить свод правил,которые разработчик может использовать в качестве ориентиров, пока не приобретет достаточноопыта, чтобы выработать лучшие. Этот свод правил приводится ниже.Он может служить отправной точкой в процессе выработки основных направлений проекта конкретнойзадачи, или же он может использоваться организацией в качестве проверочного списка. Подчеркну ещераз, что эти правила не являются универсальными и не могут заменить собой размышления.•Нацеливайте пользователя на применение абстракции данных и объектно-ориентированногопрограммирования.-Постепенно переходите на новые методы, не спешите.-Используйте возможности С++ и методы объектно-ориентированного программированиятолько по мере надобности.•Добейтесь соответствия стиля проекта и программы.•Концентрируйте внимание на проектировании компонента.•Используйте классы для представления понятий.•-Используйте общее наследование для представления отношений "есть".-Используйте принадлежность для представления отношений "имеет".-Убедитесь, что отношения использования понятны, не образуют циклов, и что число ихминимально.-Активно ищите общность среди понятий области приложения и реализации, и возникающие врезультате более общие понятия представляйте как базовые классы.Определяйте интерфейс так, чтобы открывать минимальное количество требуемой информации:-Используйте, всюду где это можно, частные данные и функции-члены.-Используйте описания public или protected, чтобы отличить запросы разработчикапроизводных классов от запросов обычных пользователей.-Сведите к минимуму зависимости одного интерфейса от других.-Поддерживайте строгую типизацию интерфейсов.-Задавайте интерфейсы в терминах типов из области приложения.Дополнительные правила можно найти $$11.5.334Бьерн Страуструп.Язык программирования С++ГЛАВА 13.

ПРОЕКТИРОВАНИЕ БИБЛИОТЕКПроект библиотеки - это проект языка,(фольклор фирмы Bell Laboratories)... и наоборот.- А. КенигЭта глава содержит описание различных приемов, оказавшихся полезными при создании библиотек дляязыка С++. В частности, в ней рассматриваются конкретные типы, абстрактные типы, узловые классы,управляющие классы и интерфейсные классы. Помимо этого обсуждаются понятия обширногоинтерфейса и структуры области приложения, использование динамической информации о типах иметоды управления памятью. Внимание акцентируется на том, какими свойствами должны обладатьбиблиотечные классы, а не на специфике языковых средств, которые используются для реализациитаких классов, и не на определенных полезных функциях, которые должна предоставлять библиотека.13.1 ВведениеРазработка библиотеки общего назначения - это гораздо более трудная задача, чем создание обычнойпрограммы.

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

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

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

Хорошая библиотека для сведения такого беспорядкак минимуму обеспечивает согласованный стиль программирования, или, по крайней мере, несколькотаких стилей. Этот подход делает библиотеку более "предсказуемой", а значит позволяет легче ибыстрее изучить ее и правильно использовать. Далее описываются пять "архитипичных" классов, иобсуждаются присущие им сильные и слабые стороны: конкретные типы ($$13.2), абстрактные типы($$13.3), узловые классы ($$13.4), интерфейсные классы ($$13.8), управляющие классы ($$13.9). Всеэти виды классов относятся к области понятий, а не являются конструкциями языка.

Каждое понятиевоплощается с помощью основной конструкции - класса. В идеале надо иметь минимальный наборпростых и ортогональных видов классов, исходя из которого можно построить любой полезный иразумно-определенный класс. Идеал нами не достигнут и, возможно, недостижим вообще. Важнопонять, что любой из перечисленных видов классов играет свою роль при проектировании библиотекии, если рассчитывать на общее применение, никакой из них не является по своей сути лучше других.335Бьерн Страуструп.Язык программирования С++В этой главе вводится понятие обширного интерфейса ($$13.6), чтобы выделить некоторый общийслучай всех этих видов классов.

С помощью него определяется понятие каркаса области приложения($$13.7).Здесь рассматриваются прежде всего классы, относящиеся строго к одному из перечисленных видов,хотя, конечно, используются классы и гибридного вида. Но использование класса гибридного видадолжно быть результатом осознанного решения, возникшего при оценке плюсов и минусов различныхвидов, а не результатом пагубного стремления уклониться от выбора вида класса (слишком часто"отложим пока выбор" означает просто нежелание думать). Неискушенным разработчикам библиотекилучше всего держаться подальше от классов гибридного вида. Им можно посоветовать следоватьстилю программирования той из существующих библиотек, которая обладает возможностями,необходимыми для проектируемой библиотеки. Отважиться на создание библиотеки общегоназначения может только искушенный программист, и каждый создатель библиотеки впоследствиибудет "осужден" на долгие годы использования, документирования и сопровождения своегособственного создания.В языке С++ используются статические типы.

Однако, иногда возникает необходимость в дополнение квозможностям, непосредственно предоставляемым виртуальными функциями, получать динамическуюинформацию о типах. Как это сделать, описано в $$13.5. Наконец, перед всякой нетривиальнойбиблиотекой встает задача управления памятью. Приемы ее решения рассматриваются в $$13.10.Естественно, в этой главе невозможно рассмотреть все методы, оказавшиеся полезными при созданиибиблиотеки.

Поэтому можно отослать к другим местам книги, где рассмотрены следующие вопросы:работа с ошибками и устойчивость к ошибкам ($$9.8), использование функциональных объектов иобратных вызовов ($$10.4.2 и $$9.4.3) , использование шаблонов типа для построения классов ($$8.4).Многие темы этой главы связаны с классами, являющимися контейнерами, (например, массивы исписки). Конечно, такие контейнерные классы являются шаблонами типа (как было сказано в $$1.и 4.3$$8). Но здесь для упрощения изложения в примерах используются классы, содержащие указатели наобъекты типа класс.

Чтобы получить настоящую программу, надо использовать шаблоны типа, какпоказано в главе 8.13.2 Конкретные типыТакие классы как vector ($$1.4), Slist ($$8.3), date ($$5.2.2) и complex ($$7.3) являются конкретными втом смысле, что каждый из них представляет довольно простое понятие и обладает необходимымнабором операций. Имеется взаимнооднозначное соответствие между интерфейсом класса и егореализацией. Ни один из них (изначально) не предназначался в качестве базового для полученияпроизводных классов.

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

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

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