ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 67
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ООП Задачи
Оглавление
ООП Задачи 1
Задание 3
Продолжаем 9
Продолжаем Задание 14
Задания. 21
Немного теории из интернета. Так как я люблю всё упрощать, то порой забываю про определения.
Объектно-ориентированное программирование (ООП) – это методология разработки программ как совокупности объектов, относящихся к определенным классам, и взаимодействующих через свойства и методы друг друга для выполнения операций и преобразования данных, определяя поведение своих экземпляров. Свойства и методы образуют интерфейс объекта, а сущности с конкретным сочетанием свойств являются экземплярами объекта.
Эта методология полагает, что объекты окружающего мира обладают тремя составляющими: они имеют свойства, описывающие конкретные сущности, позволяют изменять эти свойства разными методами, реализующие интерфейс взаимодействия, и способны реагировать на события, возникающие как вне объекта, так и внутри самого объекта, определяя его поведение. Именно в таком смысле реализуется понятие объекта – как совокупность:
свойств, т.е. набора простых и составных данных;
методов, т.е. набора функций, реализующих алгоритмы обработки данных;
событий, т.е. набора условий, на которые объект должен реагировать.
Будем проходить тему в процессе выполнения Заданий.
Что бы пользоваться преимуществами ООП нужно понимать, что каждый объект должен принадлежать какой-либо группе (Классу). То есть объекты, конечно, сами по себе самостоятельные, но, похожие объекты должны быть объединены классом. Как книги в книжном магазине - Фантастика на одной полке, история, на другой полке, зарубежная литература на третьей.
Например, мы люди. Наш класс – Человек. Все мы разные экземпляры человека – т.е. объекты класса «Человек». У каждого из нас есть различные свойства, таланты, дефекты и прочее – это наши отличия. Но при этом каждый из нас – это человек.
То есть класс – это коллекция однотипных объектов.
Классы очень похожи на функции.
ООП Задачи 1
Задание 3
Продолжаем 9
Продолжаем Задание 14
Задания. 21
Вот так выглядит самый простой класс: Вот так создается объект класса: Попробуем вывести содержимое наших класса и объекта: Результат: Выведем типы наших класса и объекта: Результат: |
Тут можно увидеть, что Сам по себе класс – это, в прямом смысле - Тип данных. Поздравляю, вы создали свой собственный тип данных наравне с int, float, str … )
А вот тип объекта – это, по сути, ссылка на наш класс. То есть объект – это простая переменная, которая хранит в себе адрес, по которому хранится вся информация об объекте. (Подробно про хранение данных в памяти Python’ом Сссссылочка )
Ведь мы помним, что у нас переменные в python просто ссылаются на значение. И тут так же.
Помним, что у типа строка или типа Список есть методы? Вот тут мы то же можем делать свои методы. Полная свобода действий, только и успевай фантазировать, что можно напрограммировать…
Задание
И так...
-
Создайте класс «Человек», не важно на кириллице или латинице. -
Так же создайте объект этого класса. -
После чего вызовите функцию print прописав в аргументе наш класс -
И еще одну функцию print прописав в аргумент название нашего объекта.
Это нужно для того, чтоб потестировать примеры из материала далее.
Если идти только по заданиям, то создайте класс «Сотрудник» заместо человека. Далее вызовы print’ов можно удалить |
Как уже говорилось объекты (экземпляры класса) имеют свойства и методы, разберем подробнее:
Вспомним, что, например, у тех же самых списков есть длинна (количество элементов в списке). Это их свойство. То есть когда мы обращаемся к функции len() мы по сути просто получаем значение свойства объекта. Это его свойство хранится прям у него внутри, внутри объекта, длину которого мы хотим получить.
Выглядит это примерно так (Пока что не обращайте внимания на _ _ _ _ (нижние подчеркивания) разберем их дальше):
Вывод:
Если коротко, то, когда мы пишем len(A) или len(list_1) т.е. хотим узнать длину объекта (количество значений, хранящихся в нем) то у этого объекта есть метод, который обращается к переменной, хранящейся внутри этого объекта и нам просто выводится число. Никакой цикл в этот момент не работает (Нет такого, чтоб мы хотели узнать длину и каждый раз Python гоняет циклы с счетчиком и возвращает этот счетчик) – Это сильно бы замедлило работу.
Поэтому в Python во всех коллекциях данных – есть переменная, хранящая в себе количество значений в этой, конкретной, коллекции. И тем самым мы можем узнать длину объекта – за одну операцию. Просто обратившись к методу, который вернет значение этой переменной.
Что же это за свойства такие? Их еще называют атрибутами. Вернемся, к примеру с людьми. У всех у нас есть различные черты и особенности. Мы делимся на женщин и мужчин, кто-то с длинной прической, а кто-то с короткой, у кого-то карие глаза, а у кого-то зеленые, кто-то 190 см, а кто-то 150 и т.д.
Все эти свойства можно поделить на Постоянные (Общие для всех объектов) и не постоянные (Динамические, или личные для каждого объекта). Давайте отдельно рассмотрим класс «Мужчина»
P.S. Буду приводить примеры из Sublime Text 3 – так как PyCharm все мои пояснения на кириллице выделяются маркером желтым, и там сложно что-либо различить)
- не красиво.
Тут мы можем увидеть метод _ _init_ _ - это метод инициализации (или регистрации) объекта. Мы поговорим о нем позже.
Сейчас нас интересуют свойства.
Рассмотрите скриншот внимательно. Поскольку это класс «Мужчина» то, мы можем сделать общее свойство – Пол – Мужской. Согласитесь, у всех мужчин, пол мужской (не будем углубляться в психологию, философию и возможности современной хирургии) и согласимся, что у нас в России, Мужчина – это Мужчина.
Далее видим метод Инициализации объекта, в котором много параметров. Нас интересую эти параметры. Помним, как работают функции и параметры в них? Тут те же правила, так как Методы – это Функции. Соответственно, при создании объекта, нам теперь нужно в круглые скобочки будет передать все эти обязательные параметры.
И для объекта эти свойства будут собственными. То есть у нас есть свойства общие – это как посуда в коммунальной квартире. А есть собственные, это как телефон с блокировкой – никто чужой – не войдет, только владелец.
Согласитесь, что номер телефона – у каждого свой, да и поменять мы его можем при желании. Вес – тоже, рост – тоже, он даже меняется в зависимости от ситуации. (Например, на орбите земли за полгода вы станете на пару сантиметров длиннее– из-за отсутствия гравитации). Так же и с должностью – она может меняться, хоть каждый день.
Тут можно сказать, но цвет глаз – же постоянный. Почему он в динамических свойствах?
Тут все дело в том, что он хоть и не меняется при жизни конкретного человека, но он явно личный и меняется от человека к человеку. Так как бывают Карие, голубые, зеленые и т.д.
Единственное, что стоит добавить, что записываются свойства динамические, немного по-другому. Вот так:
Что еще за self такой?
Self – это ссылка на конкретный объект. (ну если мы продолжаем говорить про класс «Мужчина») Чтоб программа понимала к какому из 5_000_000_000 мужчин на земле - программа обращается в данный момент.
Как это работает?
Создадим пару объектов:
В качестве параметров вводим рост и вес – по порядку. Дальше для примера используются именованные параметры (должность, телефон), последовательность Именованных аргументов не важна (что показано во второй строчке).
Вывод:
Докопаемся до истины.
Мы не можем обратиться к личным свойствам конкретного объекта через Класс. Только к общим.
Пол выводится (так как свойство общее)
А вот при выводе роста – получаем ошибку.
В которой сказано, что Объект Man не имеет атрибута «рост_Объекта»
-
При обращении к классу, мы можем работать только с общими для всего класса свойствами и с некоторыми методами.
-
При обращении к конкретному Объекту класса, мы можем обращаться к его личным свойствам и методам.
-
Если мы обратимся к Общему свойству класса, через Конкретный Объект, и изменим его – Это Свойство для этого Конкретного Объекта станет личным.
Было бы хорошо, если бы перед тем, как продолжить, вы поработали бы с классом «Человек» И попробовали воспроизвести код этого класса, чтоб создать пару-тройку объектов и попробовать взаимодействовать с ними. |
Продолжим нашу работу с кодом, и поработаем со свойствами.
У нашего объекта «Сотрудник» должны быть динамические свойства такие как:
-
Фио -
Номер тел. -
Должность -
Отдел -
Зарплата
Для этого вам придется создать метод инициализации __init__ Который первым параметром принимает ссылку на объект (т.е. self, а после уже параметры объекта, которые вам нужны)
Продолжаем
Создайте пару объектов - Сотрудников
Попробуйте обратиться к свойствам этих объектов - посмотрите, чтоб не возникало ошибок.
Для тех, у кого self вызывает трудности. Сам по себе объект, это просто переменная, в которой просто хранится чуть больше информации, чем в обычной переменной типа int или str.
То есть это та же самая ссылка на область памяти. В этой области хранятся все личные свойства объекта. То есть в self у нас подставляется вон то значение из цифорок и букв, и Когда мы пишем:
print(Вася.вес) – python заместо Васи подставляет эту ссылку (видна в выводе) , которая и указывает Именно на Васю, а не Алёшу. Соответственно нам возвращается свойство Васи – Вес, а не свойство Алеши.
Может еще картинка поможет (взял из инета)
Тут мы создаем объекты «Человек» и у него создаем 2 объекта : Мужчину и Женщину. У мужчины будет своя ссылка (self), у Женщины другая (self)
Или вот
Теперь перейдем к Методам.
Методы – Это Те же самые функции, которые мы прошли, просто… они часто доступны не всей программе, а только объектам конкретного класса.