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

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

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

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

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

Сам пример— детская выдумка, но он тем хорош в качестве аргумента, что обладает минимальной сложностью: с1азв Муресгасд1е ( раЬ11с с1вс э1ЬЬЬ! рсЬ11с и1пс Ье1ЕЬЬ1 ) Здесь вы видите самый примитивный пример пользовательского класса прямоугольника. В данный момент интересует только ширина и длина прямоугольника. Конечно, полезный класс прямоугольника, предназначенный для использования в графическом механизме, также должен иметь и координаты начальной точки, но для простоты при- Классы, структуры и объекты 73 мера ограничимся шириной и длиной.

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

Во времена АМЯ С и других простых процедурных императивных языков понадобилось бы создать функцию с именем вроде Сотлригедгеа, которая принимала бы параметр — указатель на экземпляр мукесгаьо1е. Строгие принципы объектно-ориентированного программирования склоняют к тому, что лучший способ сделать это — позволить экземплярам Мукесоаьтт1е самостоятельно сообщать клиенту значения площади. Поэтому давайте так и поступим: с1азз Муаессало1е ( роЫ1с Ылг итт(ть| роЫас сьпт ЬегдЬЫ роЬ11с оапС Беглгеа О гекогп иъОКЬ * Ье1оЬЫ ) ) Как видите, в класс добавлен новый член — метод бегдгеа. При вызове на экземпляре заслуживающий доверия Мукесгапр1е вычислит свою площадь и вернет результат. Теперь есть базовый маленький класс прямоугольника, имеющий одну вспомогательную функцию, которая призвана немного облегчить жизнь клиентам, если они пожелают узнать площадь прямоугольника.

Но предположим. что возникла причина предварительно вычислить площадь прямоугольника, чтобы каждый раз при вызове метода беСАгеа не пришлось вычислять ее заново. Возможно, так нужно сделать потому, что известно, что йегдгеа будет вызываться многократно с одним и тем же экземпляром на протяжении всего времени его существования. Игнорируя неразумность ранней оптимизации, представим, что это все-таки сделано. Теперь класс МуКессаь1т1е выглядит примерно так: с1зэз Мукесгаод1е ( РОЫ1С О1ОК Итскл! роЫ1с Ыпг ЬетоЬЫ роЫас о1лс агез; роЫас и1пт БеГАгеа () ( гесогл агеак Присмотревшись внимательнее, вы заметите ошибки.

Обратите внимание, что все поля являются общедоступными. Это позволяет потребителю экземпляров класса Мукестэьт(1е иметь прямой доступ к его внутренностям. Какой смысл в предоставлении метода бесАгеа, если потребитель может напрямую обратиться к полю згеа? Да, возможно, стоило бы сделать поле агеа приватным. Таким образом, для получения площади прямоугольника клиенты были бы вынуждены вызывать Весдгеа. Это определенно шаг в правильном направлении, как иллюстрирует следующий код: 74 Глава а с1азз Мукессапс1е ( рсвагс с1лг эгоЬЬ; риЬ11с с1лг Ье1оЬГ) рг1гаге о1ьс агеа; рсЬ11с игле Оеслгез О ( 11( агеа == О ) ( агеа = э1с(ГЬ * Ье1оЬГ( ) гегсгь агеа; ) ) Поле агеа сделано приватным, заставляя потребителя вызывать метод Сеглгеа, чтобы получить площадь прямоугольника.

Однако во время работы над примером стало ясно, что в какой-то момент должна быть вычислена площадь прямоугольника. По причине лени было решено проверять значение поля агеа перед возвратом, и если оно равно О. то это значит, что оно должно быть предварительно вычислено. Это — грубая попытка оптимизации, но теперь площадь вычисляется только в случае необходимости. Предположим, что потребитель экземпляра прямоугольника никогда не пожелает узнать его площадь. Тогда, при условии использования предыдущего кода, ему никогда не придется тратить время на вычисление этой площади. Разумеется.

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

В классе прямоугольника все еще присутствуег вопиющая проблема. Поскольку поля э1с(ЬЬ и Ье1дЬГ являются общедоступными, что произойдет, если пользователь изменит одно из значений после вызова Сеслгеа на экземпляре? В этом случае будет получен наихудший пример несогласованности внутренностей объекта. Целостность состояния объекта будет нарушена. Это определенно нехорошая ситуация. Таким образом, в коде по-прежнему присутствует ошибка. Поля вас ьь и Ье1оьс также должны быть сделаны приватными: с1азз мукесгаьо1е ( ргггаге и1лс э1с(ГЬс рг1часе огьс Ье1оЬГс рг1гасе и1ьс агеа; риЬ11с о1сг К1с(ГЬ ( оег гессгп э1с(ГЬ) ) зес ( э1с(ГЬ = га1сев СослрссеАгеа(); ) Классы, структуры и объекты 75 рпЫ1с и1пг Не1опс ) оес гегпгп Ьетопс; ) зес Ье1дпс = та1пе! согрпсеагеа))т ) ) рпЬ|ас пгпт ))геэ ( дес ) гегсгп агеэт ) ргатзге тогб Соерогеагеа)) ) згеа = и1осЬ * Ье1оптт ) ) Последняя версия мунессап1т1е выглядит намного лучше.

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

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

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

которое следует хорошо запомнить, состоит в том. что при использовании свойств внутреннее состояние объекта может изменяться для поддержки другого алгоритма, что никак не затронег его потребителей. Другими словами, интерфейс, видимый потребителю (также называемый контрактом), не изменяется. например, в финальной реализации класса муРессап1т1е площадь вычисляется заново, как только устанавливается новое значение свойства ыьось илн Неьдпг. Может быть позже, когда программное обеспечение будет почти готово, запуск профилировщика обнаружит, что предварительное вычисление площади действи- 76 Глава 4 тельно сильно загружает процессор при работе приложения.

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

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

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