Неужели не нашлось русских специалистов, чтобы записать курс по пайтону ? Да, можно включить переводчик и слушать с переводом, но это что? Это кто-то считает хорошим и понятным курсом для начинающих? |
Объектно-ориентированное программирование
Проектирование класса. Поля и конструктор
Смотреть на youtube
Проект для лекции Lecture8.rar.
В классическом объектно-ориентированном языке программа состоит из совокупности классов, связанных соотношениями, главными из которых являются отношения наследования и клиент-поставщик. Классы могут играть две роли - роль модуля и роль типа данных. Класс как модуль является архитектурной единицей в построении программного проекта. Достоинство класса в том, что он может независимо транслироваться, может быть включен в библиотеку классов, присоединяемую к любому программному проекту. Программирование в классах обеспечивает такое важное свойство разработки программных проектов как повторное использование кода без чего немыслимо современное программирование, создающее большие программные проекты.
Не менее важна и вторая роль класса. Будучи типом данных, класс описывает некоторое множество элементов, задавая их свойства и поведение. Элементы этого множества принято называть объектами. Тип данных, определяемый классом, может быть моделью реального типа данных некоторой проблемной области, для решения задач которой и создается программный проект. Но класс может задавать некоторый абстрактный тип данных, проектируемый программистом в интересах эффективной реализации алгоритмов проекта. Важно, что такой класс обладает определенной семантикой. Обычно имена классов дают подсказку о семантике класса: Person, Student, Car, Engine.
В процессе выполнения программы на основе описания класса можно создавать экземпляры класса - объекты этого класса. Выполнение программы можно рассматривать как создание некоторого мира взаимодействующих объектов, реагирующих на события, происходящие в этом мире, инициаторами которых могут быть как сами объекты, так и пользователь, взаимодействующий с объектами через интерфейс программного проекта.
Некоторые классы могут играть единственную роль - роль модуля. Класс, будучи только модулем и не являясь типом данных, не может создавать экземпляры класса, он существует в единственном экземпляре как модуль. Модуль предоставляет свои сервисы объектам других классов.
Язык Python, поддерживая наряду с другими стилями программирования и стиль ООП, позволяет создавать классы и модули, придавая этим понятиям специфику, характерную для этого языка.
Модули и классы в Python
При программировании на Pythonмодули, в отличие от классов, являются обязательными элементами. Программа на Python- это совокупность взаимодействующих модулей. Модуль Pythonможет определять класс. Всякий класс Pythonявляется модулем, но не всякий модуль является классом. В чем разница? Когда следует модуль Pythonопределять как класс?
Мы знаем, - что модуль может содержать данные, методы и выполняемый код, представляющий по сути метод main, с которого начинается работа проекта, если модуль назначается главным модулем проекта. На данные и методы формально никакие ограничения не накладываются. В этом случае модуль играет одну роль - архитектурную роль, являясь той строительной единицей из сочетания которых строится проект. Фактически, модуль всегда играет и вторую роль - семантическую. Модуль math предоставляет математические сервисы, модуль os - сервисы, связанные с операционной системой, random - дает возможность генерировать случайные числа. Даже для самых простых проектов рекомендуется создавать как минимум два модуля: один отвечает за интерфейс с пользователем, другой - предоставляет сервисы бизнес-логики, позволяя решать поставленную задачу. Так что в реальном хорошем программировании модули всегда играют не только архитектурную, но и семантическую роль. Но семантика семантике рознь. Вышеупомянутые модули: math, os, random - это сервисные модули. Они предоставляют сервисы, доступные при импортировании другим модулям. Однако зачастую требуется семантика другого рода - модуль должен описывать некоторое множество объектов - их свойства и поведение. Модули, которые реализуют такую семантику, являются классами. Класс - это модуль, задающий тип данных. Экземпляры этого типа называются объектами. Встроенные типы данных - числа, строки, списки, множества - задаются модулями, представляющими классы. Но, конечно же, моделируя конкретную проблемную область, программист создает собственные классы, определяющие типы данных, характерные для этой проблемной области.
Программирование на Python, когда создается проект, модули которого являются классами, работа которого связана с созданием объектов разных типов, их взаимодействием, является объектно-ориентированным программированием. Сервисные модули и модули, задающие классы, прекрасно сочетаются в одном проекте.
В соответствие с терминологией, принятой в ООП, данные модуля, определенные на глобальном уровне, называются полями класса, когда модуль задает класс. Методы этого модуля называются методами класса. Поля класса определяют свойства объектов, методы - их поведение.