Введение в Python #7: ООП и классы
Vladislav Z - создатель канала x[code] & fullstack dev |Фух, вроде как прошли некоторые главные моменты, возможно могли остаться какие-то вопросы не понятны? Да, и это вполне может быть. Вы можете обратится ко мне и я постараюсь внести ясность в ваше обучение. Так как даже если всё кажется понятным, может быть сидит какой-то червячок и не дает понять все в полном мере. Как я уже сказал, это нормально. Ничего тут такого нету, главное иметь иметь желание двигаться дальше и разбираться с этими не понятными вопросами. А сегодня в этом уроке мы коснемся довольно таки объемной, сложной и одновременно простой структурой данных, которая называется классами или её еще называют парадигмой программирования ООП -- объектно ориентированное программирование - исходя из расшифровки мы можем уже понятно, что ООП - это программирование ориентировано на объекты. И так оно и есть, при проектирование классов, мы должны размышлять с точки зрения будущих объектов, который будет представлять наш класс. Начало уже сложно, да? Какие объекты, какие классы, что, "каво", астанавитесь! Так тихо-тихо, не кипишуй, сейчас всё разгребем. После этого урока у вас будет представление о парадигме объектно-ориентированного программирования(ООП). Вы сможете сами создавать свои классы и объекты(экземпляры) этих классов. Так как любой тип данных, включая int, float, str, являются классовыми объектами, и это вы можете проверить, записав следующим образом: type(8), и мы увидим class int. То есть все наши типы данных не что иное как описанные классы? Да, всё верно. А как же структура данных и прочее как в других языках программирования? Вот так, в питоне всё есть объектом, тип данных для питона тоже является объект. А объект как мы уже знаем, не что иное как всего лишь представительно класса - экземпляр. Ох ладно, поехали! :)

Начнем с простого, что такое парадигма программирования?
Это совокупность идей и понятий, определяющий стиль написания программы, можно сказать, что это способ реализации вашей цели, концептуальный подход который определяет организацию и структуру работы, выполняемой программы. Парадигма является основой понятия программирования и не имеет отношение к конкретному языку программированию. Разные парадигма используются в разных языках программирования, практически все современные языки программирования допускают мультипарадигмальное программирование. Это свидетельствует результаты в гугл когда вы запишите например ООП, вам будут выдаваться косвенные результаты, которые могут быть не связаны например с питоном.
О питоне.. о парадигме...
Благо питон предоставляет возможность программирование на множестве парадигм, как на уровне языка, так и при помощи разных модулей и библиотек.
Имеется несколько парадигм программирования:
- Декларативное программирование - это то как мы будем проектировать программу, новичку с нуля, будет тяжело понять эти смыслы в начале своего пути, но я прикреплю ссылку с объяснением, потому как статья у нас не о декларативном программировании, единственное что нужно вам знать на данный момент, так это то что декларативное программирование противоположность императивному программированию.
- Императивное программирование - это программирование которое описывает процесс вычисления в виде инструкций, изменяющих состояние данных. Императивное программирование очень похожи на приказы, когда мы говорим: у нас есть отбивные, принеси мне их пожалуйста. В то время как в декларативном виде, мы бы просто сказали что хотим отбивную. В общем читайте статью, и вам станет понятно, а если не понятно, то не расстраивайтесь - это всего лишь не хватка опыта. Вот ссылка на статью: кликай сюда
- Процедурное программирование - это программирование в императивном стиле при котором последовательно выполняемые операторы можно собрать в подпрограммы. Что в итоге дает более целостные единицы кода.
- Функциональное программирование - еще одно понятие которое понимается только со временем и опытом. Функциональное программирование отлично от императивного. Если говорить о том что императивное программирование, это ряд последовательных инструкций, то о функциональном программировании, мы скажем, что это программы (подпрограммы) которые связаны между собой и буду выполняться при определенных условиях. Чтобы понять более глубже эту парадигму, я прикрепляю еще одно статью: нажми сюда. Не потому что я не хочу это объяснять, а потому, что этот урок об ООП:) Вам и так будет достаточно информации на данный момент.
- Структурное программирование - а тут немного по проще, это то программирование которое представляет собой иерархическую структуру блоков. Начиная с малого пошагового описания программы до масштабирования наших подпрограмм в одной целостной программе которая решает какую-нибудь задачу.
- Объектно-ориентированное программирование (ООП) - и наконец-то ООП это та парадигма в которой основными концепциями являются понятие классов и объектов. ООП возникло в следствии развития идеологии процедурного программирования, где данные процедуры и функции, и их обработка формально не связаны.
Основными понятиями ООП являются:
- Абстракция - выделим самое важное
- Инкапсуляция - объедением данные и методы, и скрываем детали реализации
- Наследование - создай своё на основе чего-то имеющегося
- Полиморфизм - я могу изменить новость точно так же как и объявление, потому что это одно и тоже, хоть и не тоже самое.
Много и сложно. Понимаю. Но кто тут решил стать самым топовым программистом? Правильно, поэтому продолжаем. Теперь поговорим о классах и объектах. Что же это такое и как это всё связано с тем, что мы проходили и с тем что будем проходить.
Класс является описанием еще не существующего объекта. То есть это некий чертеж нашего будущего дома или машины. Прежде чем приступить к созданию самого автомобиля или строительству дома, нам для начала нужно это всё дело спроектировать, а потом уже на основе этого чертежа создавать объекты - экземпляры класса. Так же объект может быть унаследован от других классов, вот так например если мы объеденим: легковушку и грузовик получит джип или пикап. Где пикап или джип будет уже отдельным классом, построена по смыслу на понятиях легковушки и грузовика. В то время как легковушка и грузовик не будет джипом или пикапом. Даже частично. А пикап и джип частично будут легковым автомобилем и грузовиком!
Объект - экземпляр класса. Это готовая сущность, имеющая все возможности ее класса. Проще говоря чертеж может быть один, а объектов большое множество с набором характеристик описанных в классе. Что дает нам возможность работать с каждым объектом как с отдельной сущностью, которая будет или не будет использовать все возможности описанного ею класса. Каждый объект является значением относящему к определенному классу. Класс же в свою очередь представляет некоторые параметры:
- Поля данных(переменные которые вам уже знакомы) - параметры объекта, задающие его состояние. Поля представляют собой значения: переменные и константы, объявленные принадлежащему классу.
- Методы - процедуры и функции, связанные с классом. Мы часто можем услышать "методы класса то...", "объявить метод класса...". Это все означает что мы просто объявляем функцию только которая относится к классу. Так было задумано с целью того, чтобы разделить конкретно функции в глобальной программе, и методы которые относятся например к модулю(классу). Методы определяют действия которые может выполнить объект и действия над самим объектом.
В терминологии Python, все члены класса называются атрибутами. Классы определяются при помощи ключевого слова class.
class A:
pass
Очень важный момент, всё в Python есть объектом, даже классы тоже являются экземплярами классов, которые являются объектами главных метаклассов. Главным метаклассом является type.
На этом первая часть закончена. Далее я расскажу конкретнее об инкапсуляции, полиморфизме и наследовании.