Главная » Просмотр файлов » Саммерфилд - Программирование на Python 3

Саммерфилд - Программирование на Python 3 (1077331), страница 60

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

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

Язык РуФпоп одновременно поддерживает различные стили программирования — он позволяет программировать в процедурном стиле, объектно-ориентированном стиле и функциональном стиле, а также допускает смешивание стилей в любых пропорциях, не вынуждая нас писать программы, придерживаясь какого-то определенного стиля. Вполне возможно написать любую программу исключительно в процедурном стиле, и для небольших программ (скажем, до 500 строк) это совершенно нормальный выбор.

Но большинству программ, особенно средних и крупных, объектно-ориентированный стиль дает значительные преимущества. В этой главе рассматриваются все фундаментальные концепции и приемы объектно-ориентированного программирования на языке Ру1поп. Первый раздел предназначен для тех, кто не обладает еще достаточным опытом, и для тех, у кого имеется опыт процедурного программирования (на таких языках, как С или Рог(гап). Второй раздел начинается со знакомства с некоторыми проблемами, свойственными процедурному программированию, которые могут быть решены с использованием объектно-ориентированного стиля.

Затем коротко описываются особенности объектно-ориентированного программирования на языке Ру()1оп и поясняется соответствующая терминология. Далее следуют два основных раздела главы. Второй раздел охватывает тему создания собственных типов данных, способных хранить единственный элемент (хотя сами элементы могут иметь множество атрибутов), а в третьем разделе рассказывается о создании собственных типов коллекций, которые способны хранить про- 274 Глава б. Объектно-ориентированное программирование извольное число объектов любых типов. В этих разделах рассматривается большинство аспектов объектно-ориентированного программировании на языке Ру!Ьоп, хотя обсуждение некоторых, более сложных тем отложено до главы 8. Объектно-ориентированный подход В этом разделе мы коснемся некоторых проблем, характерных для процедурного стиля программирования, на примере ситуации, когда в программе необходимо реализовать представление большого числа окружностей.

Минимальные данные, необходимые для задания окружности, — это координаты ее центра (х, у) и радиус. Самое простое решение заключается в том, чтобы использовать для представления каждой окружности кортеж из трех элементов. Например: с1гс1е = (11. бд, 8) Один нз недостатков такого подхода — в неочевидности назначения каждого элемента кортежа. Мы можем подразумевать (х, у, гаагов) или ( гаагов, х, у) .

Другой недостаток состоит в том, что обращаться к элементам кортежа мы можем только по их индексам. Если представить, что у нас имеется две функции, С!в!ассе 1гов огтд!п(х, у) и едде С!в!алое !гоа ог1дтп(х, у, гаг)1ив), при обращении к ним нам потребуется использовать операцию распаковывания кортежа, представляющего окружность: гпвтапсе = с!втапсе ггов огтдтп(*стгс!е[г21) с!в!апов = евде дав!ассе Ггов ог1дьп(*стгс!е) В обоих случаях предполагается, что кортеж имеет вид (х, у, габшв). Эту проблему можно решить, зная порядок следования элементов и используя операцию распаковывания с применением именованного кортежа: !враг! со11есттопв Стгс1е = со11ест!апв.павеп!вр1е("Стгс1е", "х у гав1вв") с1гс1е = Стгс1е(13, 84, 9) в!втапсе = в1атапсе ггов огтд1п(стгс1в.х, с!гс1е.у) Такой подход позволяет создавать трехэлементные кортежи типа С! гс1е с именованными атрибутами, что делает вызов функций более простым и понятным, поскольку для обращения к элементам используются их имена.

К сожалению, сама проблема при этом не исчезает. Например, ничто не мешает созданию окружности с ошибочными значениями: стгс1е = Стгс1е(33, 5б, -5) Окружность с отрицательным радиусом — это сущая бессмыслица, но в данном случае именованный кортеж с! гс1е будет создан без возбуждения исключения, как если бы радиус был представлен обычной пе- Объектно-ориентированный подход 27б ременной, в которой оказалось отрицательное значение. Ошибка будет обнаружена только при вызове функции епре г]1втапсе тгоз ошр[п() и только если эта функция проверяет значение радиуса на отрицательное значение.

Такая невозможность выполнить проверку данных в момент создания объекта является, пожалуй, самым негативным аспектом исключительно процедурного подхода. Если нам потребуется изменять окружности, например перемещать их, изменяя координаты центра, или изменять их размеры, изменяя радиус, мы сможем воспользоваться методом со11ест!опа.пааеотпр1е гер1асе(): с!гс1е = стгс1е, гер1асе(гасша=12) Но, так же, как и при создании кортежа типа С!гс1е, ничто не предохранит (и даже не предупредит) от установки ошибочных значений. Если в программе предусматривается возможность частого изменения параметров окружностей, мы могли бы ради удобства использовать такой изменчивый тип данных как список: стгс1е = [Зб, 77, 8] Но и это решение не обеспечивает никакой защиты от ошибочных данных, а лучшее, что можно сделать для доступа к элементам по именам, это создать несколько констант, чтобы иметь возможность записывать более осмысленные инструкции, такие как с1гс1е[РАР108] = 5.

Но использование списков несет дополнительные проблемы, например, мы, на вполне законных основаниях, сможем вызвать метод от гс1е. аогт()! Как вариант, можно было бы использовать словарь, например, с1гс1е = отст(х=36, у=?7, гавтпа=8), но и в этом случае нет никакой возможности проконтролировать значение радиуса и нет никакой защиты от вызова методов, неприменимых к окружностям.

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

Далее в этом разделе мы увидим, как создать тип данных С[гс1е, но сначала нам необходимо познакомиться с некоторыми начальными сведениями и терминологией. Не стоит беспокоиться, если сначала термины покажутся вам незнакомыми, они станут более понятными, когда мы перейдем к изучению примеров. Мы будем использовать термины класс, тип и тип данных как взаимозаменяемые. В языке РуФЬоп мы можем создавать собственные классы, полностью интегрированные в язык, которые могут использо- 276 Глава б. Объектно-ориентированное программирование ваться как любые встроенные типы данных. Мы уже сталкивались со многими классами, например, Отст, тпт и атг.

Мы будем использовать термин объект и иногда экземпляр, для обозначения экземпляра определенного класса. Например, значение 5 — это объект класса тпт, а "ап)опо" — это объект класса ат г. Большинство классов инкапсулируют не только данные, но и методы, применяемые к этим данным. Например, класс ат г хранит строки символов Юникода в виде данных и поддерживает методы, такие как ат г, орре г( ) . Многие классы также поддерживают дополнительные особенности, например, мы можем объединить две строки (или любые две последовательности), используя оператор+, и определить длину последовательности с помощью встроенной функции 1еп(). Такие особенности реализуются при помощи сиециальных методов, которые представляют собой самые обычные методы, за исключением того, что их имена всегда начинаются и заканчиваются двумя символами подчеркивания и являются предопределенными.

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

Например, объект соар1ех имеет атрибуты тэао и геа1 и множество методов, включая специальные методы, такие как аоо () и ало () (поддержка двухместных операторов» и -), и обычные методы, такие как соп) азате(). Атрибуты данных (часто их называют просто »атрибутами») обычно реализуются как переменные экземпляра, то есть переменные, уникальные для каждого конкретного объекта. Мы еще увидим примеры обычных атрибутов, а также примеры реализации атрибутов данных в виде свойств. Свойство — это элемент данных объекта, доступ к которым оформляется как доступ к переменной экземпляра, но само обращение неявно обслуживается методами доступа.

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

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

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

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