Главная » Просмотр файлов » Лутц М. - Изучаем Python

Лутц М. - Изучаем Python (1077325), страница 121

Файл №1077325 Лутц М. - Изучаем Python (Лутц М. - Изучаем Python) 121 страницаЛутц М. - Изучаем Python (1077325) страница 1212018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

д. Язык Ру1Ьоп предоставляет специальные обработчики, которые могут использоваться классами для перехвата и реализации любой встроенной операции. 564 Глава 22. ООП: общая картина ООП с высоты 30 000 футов Прежде чем мы увидим, что все это означает в терминах программного кода, я хотел бы сказать несколько слов об общих идеях, лежащих в основе ООП. Если раньше вам не приходилось делать что-нибудь в объектно-ориентированном стиле, некоторые термины в этой главе при первом знакомстве могут вам показаться немного сложными. Кроме того, смысл этих терминов может ускользать от вас, пока вы не получите возможность познакомиться с тем, как программисты применяют их в крупных программах. ООП вЂ” это не только технология, но еще и опыт.

Поиск унаследованных атрибутов Самое интересное, что ООП в языке Рут1топ проще в изучении и использовании, чем в других языках программирования, таких как С++ и дача. Будучи языком сценариев с динамической типизацией, Рут1топ ликвидирует синтаксическую перегруженность и сложность, свойственные ООП в других языках. Фактически ООП в языке Рут1топ сводится к выражению: оЬ1ест.аттгтЬвте Мы использовали это выражение на протяжении всей книги для организации доступа к атрибутам модуля, вызова методов объектов и т. д. Однако, когда подобное выражение применяется к объекту, полученному с помощью инструкции с1авв, интерпретатор начинает лоиск— поиск в дереве связанных объектов, который заканчивается, как только будет встречено первое появление атрибута аттгтэьте.

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

Так как поиск происходит в направлении снизу вверх, объекты в некотором смысле оказываются связаны в древовидную структуру, представляющую собой объединение всех атрибутов, определяемых всеми их родителями в дереве. В языке Ру$1топ все это понимается буквально: с помощью программного кода мы действительно создаем деревья связанных объектов, и интерпретатор действительно поднимается вверх по дереву, пытаясь во время выполнения отыскать атрибуты всякий раз, когда мы используем выражение ЬЬ1 ест, атт г1Ььте.

Чтобы было более понятно, на рис. 22.1 приводится пример одного из таких деревьев. 565 ООП с высоты ЗО 000 футов Рис. 22.1. Дерево классов с двумя экземплярами внизу С'11 и 12), классом вы сне их С'С1) и двумя суперклассами в самом верху (С2 и СЗ). Всг эти обэгкты являются пространствами имен (пакетами переменных), а наследование означает просто поиск в дереве снизу вверх, цель которого — найти самое нижнее вхождение атрибута с тргбуемьсм именем. Программньсй код задает структуру таких деревьев На этом рисунке изображено дерево из пяти объектов, помеченных именами переменных.

Каждый из этих объектов обладает набором атрибутов. Если говорить более точно, это дерево связывает вместе три объекта классов (в овалах, С1, С2 и СЗ) и два объекта экземпляра (в прямоугольниках, 11 и 12) в иерархию наследования. Обратите внимание, что в модели объектов в языке Ру1)топ классы и экземпляры порождаются от двух разных типов объектов: Классы Играют роль фабрик экземпляров. Их атрибуты — данные и функции — обеспечивают поведение, то есть наследуются всеми экземплярами, созданными от них (например, функция, вычисляющая зарплату служащего, исходя из часового тарифа). Экземпляры Представляют конкретные элементы программы.

Их атрибуты хранят данные, которые могут отличаться в конкретных объектах (например, номер социального страхования служащего). В терминах деревьев поиска экземпляры наследуют атрибуты своих классов, а классы наследуют атрибуты всех других классов, находящихся в дереве выше. На рис. 22.1 можно продолжить категоризацию классов по относительным положениям овалов в дереве. Классы, расположенные в дереве выше (такие как С2 и СЗ), мы обычно называем суперклассами, а классы, расположенные ниже (такие как С1), называются подклассами.' Эти В других книгах можно также встретить такие термины, как базовые классы и дочерние классы, которые используются для обозначения суперклассов в подклассов соответственно.

566 Глава 22. ООГЬ общая картина термины обозначают относительное положение в дереве и исполняемые роли. Суперклассы реализуют поведение, общее для всех их подклассов, но из-за того, что поиск производится снизу верх, подклассы могут переопределять поведение, определяемое их суперклассами, переопределяя имена суперклассов ниже в дереве.

Так как эти последние несколько слов отражают основную суть адаптации программного обеспечения в ООП, давайте подробнее рассмотрим эту концепцию. Предположим, что мы создали дерево, приведенное на рис. 22.1, и затем пишем: 12 н Этот программный код демонстрирует использование механизма наследования. Чак как это выражение вида оЬ)ест, аттыьств, оно приводит к запуску поиска в дереве с рис. 22.1 — интерпретатор приступает к поиску атрибута н, начиная с 12, и движется вверх по дереву. В частности, он будет просматривать объекты в следующем порядке: 12. Ст, С2.

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

Другие атрибуты будут найдены в различных путях в дереве. Например: ° Для 11, х и 12. х атрибут х будет найден в С1, где поиск остановится, потому что С1 находится в дереве ниже, чем С2. ° Для 11. у и 12. у атрибут у будет найден в С1, где поиск остановится, потому что это единственное место, где он появляется.

° Для 11. т и 12. т атрибут г будет найден в С2, потому что С2 находится в дереве левее, чем СЗ. ° Для 12, лаве атрибут лаве будет найден в 12, в этом случае поиск по дереву вообще осуществляться не будет. Проследите эти пути поиска в дереве на рис. 22.1, чтобы понять, как выполняется поиск по дереву наследования в языке Ру1)топ.

Первый элемент в предыдущем списке является, пожалуй, самым важным, потому что С1 переопределяет атрибут х ниже в дереве, тем самым замещая версию атрибута, расположенную выше, в С2. Как вы увидите через мгновение, такие переопределения составляют основу адаптации программного обеспечения в ООП вЂ” переопределяя и замещая атрибут, С1 эффективно изменяет свое поведение, унаследованное от своего суперкласса. 567 ООП с высоты 30 000 футов Классы и экземпляры Являясь отдельными типами объектов в модели языка Ру()топ, классы и экземпляры, которые мы объединили в иерархические деревья, выполняют практически одну и ту же роль: каждый из этих типов служит некоторым представлением пространства имен — пакета переменных и места, где определяются атрибуты.

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

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

Вызовы методов классов В предыдущем разделе мы видели, как атрибут 12. ч в нашем примере дерева классов транслируется в С2. тг при выполнении поиска в дереве наследования. Не менее важно понять, что точно так же наследуются и методы (то есть функции, присоединенные к классам в виде атрибутов). Если ссылка 12 гт — это вызов функции, тогда в действительности это выражение означает: евызвать функцию СЗ. и для обработки 12з. То есть интерпретатор Ру1Ьоп автоматически отобразит вызов 12.гт() на вызов 03.

гт(), передав унаследованной функции экземпляр в виде первого аргумента. Фактически всякий раз, когда вызывается функция, присоединенная к классу, подразумевается не класс целиком, а экземпляр класса. Этот подразумеваемый экземпляр, или контекст, является одной из причин, Глава 22. ООГЬ общая картина 568 почему данная модель называется объектно-ориентированной — всегда существует объект, над которым выполняются действия.

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

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

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

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