Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 39

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 39 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 392019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

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

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

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

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

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

И такие злоупотребления затрудняют понимание и сопровождение программных проектов, особенно на языках, подобных С++, которые Классы, структуры и объекты 145 поддерживают множественное наследование. Получающийся дизайн трудно адаптировать для будутцих потребностей, что заставляет отбрасывать его и заменять совершенно новым. В языках, поддерживающих только одиночное наследование, таких как С№ и дача, разработчик вынужден более тщательно подходить к применению наследования. Например, моделируя систему управления кадровыми ресурсами в компании ХРЕ, наивный дизайнер может завести классы вроде Рауее (получатель платежа], Веоеу№сзкесар1еог (получатель дохода) и Рече1орег (разработчик).

Затем, применив множественное наследование, он может представить составной класс наемного разработчика Ри11г тглерече1орег, унаследовав его от всех трех, как показано на рис. 4.3. Рис. 4.3. Пример неудачного наследования Как видите, это заставит нашего горе-дизайнера создать новый класс для представления разработчиков по контракту, который не наследуется от Веоег№гзкес1раелк. По мере роста системы быстро обнаруживаются недостатки в дизайне, когда структура наследования станет достаточно сложной и глубокой.

Теперь получится два класса для разных типов разработчиков, что затруднит управление таким дизайном. А теперь рассмотрим неудачную попытку решить ту же проблему на языке. поддерживающем только одиночное наследование. Как видно на рис. 4.4, это решение не лучше предыдущего. Рис. 4.4. Пример неудачной иерархии с одиночным наследованием Если внимательно присмотреться, обнаружится некоторая неоднозначность.

В среде, где разрешено только одиночное наследование. нельзя, чтобы класс Вехге1орег наследовался одновременно от Рауее и Веоеб№гзкесараепт. По этой причине не может быть двух иерархий в одном и том же дизайне. Вам придется создать два разных варианта класса Вече1орег — один для наследования от него Ро111№терече1орег, а другой — для наследования Сооггасгрече1орег.

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

Например. поддержка специфического интерфейса может характеризоваться поддержкой определенного свойства. Иерархия наследования с большим количеством уровней в глубину — явный признак того, что дизайн нуждается в переосмыслении. 146 Глазе 4 Чтобы увидеть, что в действительности происходит здесь, давайте проанализируем, что именно означает для вас наследование. В действительности оно позволяет бесплатно сэкономить часть работы за счет наследования реализации. Есть существенное отличие между простым наследованием и наследованием реализации.

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

Чтобы понять, почему это так, давайте исследуем подводные камни, присущие наследованию. Сравнение делегирования и композиции с наследованием Другой важный аспект наследования состоит в том, что оно может быть вредным: наследование может розрушшпь инкопсуля))ию и всегда усиливает связность. Наверняка все согласны с тем, что инкапсуляция — наиболее фундаментальная н важная объектно-ориентированная концепция. Если это так, то зачем разрушать ее'? Если в поддержку инкапсуляции базовый тип содержит защищеяные поля, а вы нарушаете целостность оболочки инкапсуляции и открываете внутренности базового класса, то это не может быть хорошо.

Ниже рассматриваются доступные альтернативы. которые позволяют разработать лучший дизайн. Многие описывают наследование как повторное использование типа "белого ящика". Лучшая форма повторного использования — это "черный ящик", когда внутренности объекта не открываются внешнему миру. Достичь этого можно, применив отношение включения (сопга)пшено). Да, это правильно. Вместо наследования нового класса от другого, можно включить экземпляр этого другого класса в создаваемый, тем самым повторно используя класс включенного тица без нарушения инкапсуляции. Недостаток такого приема связан с тем, что в большинстве языков, включая СЗ, это потребует чуть больше работы по кодированию, хотя и не намного. Зато в результате получится более адаптируемый дизайн.

В качестве простого примера рассмотрим предметную область, где класс обслуживает некоторого рода специальные сетевые коммуникации. Назовем этот класс ))есноггСопгпип1сасог и предположим, что он выглядит следующим образом: риЬ11с с1аээ Кесногхсопапип1сасог ) риЪ11с чо1О Бепопзса) ОасаОЪ>есс оЬ) ( // Отправить данные по сети роЬ11с ОатаОЬ)есс Кесе1чеоаса)) ) // Принять данные по сети ) ) Теперь предположим, что позже принято решение, что было бы неплохо иметь объект ЕпсгургеакесногКСоппипьсасог, в котором данные шифруются перед отправкой. Распространенный подход — унаследовать ЕпсгурсеакесногхСоппип1сзсог ог ))егног)ссопвип1сзгог.

Тогда реализация может выглядеть так; Классы, структуры и объекты 147 риЬ11с с1азз Епсгургебнегногксошпппгсагог: Вегноггсопшппгсагог ( раЫгс ачегг1бе чо1б Яепбрага( ОагаОЬ)есг оЬЯ ( // Зашифровать данные Ьазе.Яепбрага( оЬ' ) Э рпЫгс очегггбе ОагаОЬбесг Весегчерага () ( Оасааабесс аЬб = Ьазе.кесегчераса О; // Расшифровать данные гегпгп оЬ)т ) С этим вариантом связан большой недостаток. Прежде всего, хороший дизайн требует, что для модификации функциональности методов базового класса, их следует переопределять. Для правильного их переопределения они сразу должны быть объявлены как чт.ггна1.

Это потребует некоторого преллидения будущего при проектировании класса ыесног)гсопшап1сасаг и пометки методов модификатором ч).гсаа1, но поскольку будущее предсказать не удалось, методы не были помечены как ч1гспа1 и потому приведенный выше код епсгурсебмесног)ссапапап1сасаг не скомпилируется. да, в сз методы можно скрьпь, воспользовавшись ключевым словом пеи при определении методов производного класса. Но если сделать это, то нарушится принцип, гласящий, что наследование моделирует отношение "является" ()з-а). Теперь рассмотрим ситуацию с включением: рпЫгс с1азз Епсгургебкегног)ссоппап1сагог ( раЫгс Епсгургебкегнагисошшппгсагог() ( сопгп1пеб = пен Ыегноггсашшппгсагог О ) раЫьс чагб Яепбрага( Оагааптесс оЬб ( // Зашифровать данные сопгагпеб.зепбрага( оЬ) ) Рпь1гс Оасааьбесс еесе1чераса() ( ОагаОЬбесг аЬ) сопгаупеб.кесегчерага() Расшифровать данные геспгп оЬб. рг1чаге Ыегног)тсошпппгсагаг сопгагпебт Как видите.

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

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

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

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7041
Авторов
на СтудИзбе
259
Средний доход
с одного платного файла
Обучение Подробнее