Кроме использования встроенных типов, таких как int, double и т.д., мы можем определять свои собственные типы или классы . Класс представляет составной тип, который может использовать другие типы.
Класс предназначен для описания некоторого типа объектов. То есть по сути класс является планом объекта. А объект представляет конкретное воплощение класса, его реализацию. Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о человеке, у которого есть имя, возраст, какие-то другие характеристики.
То есть некоторый шаблон — этот шаблон можно назвать классом. Конкретное воплощение этого шаблона может отличаться, например, одни люди имеют одно имя, другие — другое имя. И реально существующий человек будет представлять объект или экземпляр этого класса.
Для определения класса применяется ключевое слово class , после которого идет имя класса:
class имя_класса < // компоненты класса >;
После названия класса в фигурных скобках располагаются компоненты класса. Причем после закрывающей фигурной скобки идет точка с запятой.
Например, определим простейший класс:
class Person < >; int main()
В данном случае класс называется Person. Как правило, названия классов начинаются с большой буквы. Допустим, данные класс представляет человека. Данный класс пуст, не содержит никаких компонентов, тем не менее он уже представляет новый тип. И после определения класса мы можем определять его переменные или константы:
class Person < >; int main()
Но данный класс мало что делает. Класс может определять переменные и константы для хранения состояния объекта и функции для определения поведения объекта. Поэтому добавим в класс Person некоторое состояние и поведение:
#include class Person < public: std::string name; unsigned age; void print() < std::cout >; int main() < Person person; // устанавливаем значения полей класса person.name = «Tom»; person.age = 38; // вызываем функцию класса person.print(); >
Теперь класс Person имеет две переменных name и age, которые предназначены для хранения имени и возраста человека соответственно. Переменные класса еще называют полями класса. Также класс определяет функцию print, которая выводит значения переменных класса на консоль. Также стоит обратить внимание на модификатор доступа public: , который указывает, что идущие после него переменные и функции будут доступны извне, из внешнего кода.
Затем в функции main создается один объект класса Person. Через точку мы можем обратиться к его переменным и функциям.
объект.компонент
Например, мы можем установить значения полей класса
person.name = «Tom»; person.age = 38;
Ну и также мы можем вызывать функции у объекта:
person.print();
Консольный вывод данной программы:
Name: Tom Age: 38
Подобным образом можно получать значения переменных объектов
#include class Person < public: std::string name; unsigned age; void print() < std::cout >; int main() < Person person; // устанавливаем значения полей класса person.name = «Bob»; person.age = 42; // получаем значения полей std::string username = person.name; unsigned userage = person.age; // выводим полученные данные на консоль std::cout
Также можно поля класса, как и обычные переменные, инициализировать некоторыми начальными значениями:
#include class Person < public: std::string name; unsigned age; void print() < std::cout >; int main() < Person person; person.print(); // Name: Undefined Age: 18 >
Указатели на объекты классов
На объекты классов, как и на объекты других типов, можно определять указатели. Затем через указатель можно обращаться к членам класса — переменным и методам. Однако если при обращении через обычную переменную используется символ точка, то для обращения к членам класса через указатель применяется стрелка (->):
#include class Person < public: std::string name; unsigned age; void print() < std::cout >; int main() < Person person; Person *ptr = &person; // обращаемся к полям и функции объекта через указатель ptr->name = «Tom»; ptr->age = 22; ptr->print(); // обращаемся к полям объекта std::cout
Изменения по указателю ptr в данном случае приведут к изменениям объекта person.
Источник: metanit.com
Объектно-ориентированное Программирование в Python
Объектно-ориентированное программирование (ООП) — это парадигма программирования, где различные компоненты компьютерной программы моделируются на основе реальных объектов. Объект — это что-либо, у чего есть какие-либо характеристики и то, что может выполнить какую-либо функцию.
Представьте сценарий, где вам нужно разработать болид Формулы-1 используя подход объектно-ориентированного программирования. Первое, что вам нужно сделать — это определить реальные объекты в настоящей гонке Формула-1. Какие аспекты в Формуле-1 обладают определенными характеристиками и могут выполнять ту или иную функцию?
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат
Почему нужно понимать ООП Python и как это упрощает разработку
Объектно ориентированное программирование в Python за 10 минут!
Соответственно, болид можно запустить, остановить, ускорить, и так далее. Гонщик может быть еще одним объектом в Формуле-1. Гонщик имеет национальность, возраст, пол, и так далее, кроме этого, он обладает таким функционалом, как управление болидом, рулевое управление, переключение передач.
Как и в этом примере, в объектно-ориентированном программировании мы создадим объекты, которые будут соответствовать реальным аспектам.
Стоит обратить внимание на то, что объектно-ориентированное программирование — не зависящая от языка программирования концепция. Это общая концепция программирования и большинство современных языков, такие как Java, C#, C++ и Python поддерживают объектно-ориентированное программирование.
В этой статье мы разберем подробную инструкцию объектно-ориентированного программирования в Python, но перед этим, рассмотрим некоторые преимущества и недостатки объектно-ориентированного программирования.
Преимущества и недостатки ООП Python
Рассмотрим несколько основных преимуществ объектно-ориентированного программирования:
- Объектно-ориентированное программирование подразумевает повторное использование. Компьютерная программа написанная в форме объектов и классов может быть использована снова в других проектах без повторения кода;
- Использование модулярного подхода в объектно-ориентированном программировании позволяет получить читаемый и гибкий код;
- В объектно-ориентированном программировании каждый класс имеет определенную задачу. Если ошибка возникнет в одной части кода, вы можете исправить ее локально, без необходимости вмешиваться в другие части кода;
- Инкапсуляция данных (которую мы рассмотрим дальше в статье) вносит дополнительный уровень безопасности в разрабатываемую программу с использованием объектно-ориентированного подхода;
Хотя объектно-ориентированное программирование обладает рядом преимуществ, оно также содержит определенные недостатки, некоторые из них находятся в списке ниже:
- Для создания объектов необходимо иметь подробное представление о разрабатываемом программном обеспечении;
- Не каждый аспект программного обеспечения является лучшим решением для реализации в качестве объекта. Для новичков может быть тяжело прочертить линию в золотой середине;
- С тем, как вы вносите все новые и новые классы в код, размер и сложность программы растет в геометрической прогрессии;
В следующем разделе мы рассмотрим ряд самых важных концепций объектно-ориентированного программирования.
Как и следует из названия, объектно-ориентированное программирование — это речь об объектах. Однако, перед тем как создать объект, нам нужно определить его класс.
Класс
Класс в объектно-ориентированном программировании выступает в роли чертежа для объекта. Класс можно рассматривать как карту дома. Вы можете понять, как выглядит дом, просто взглянув на его карту.
Cам по себе класс не представляет ничего. К примеру, нельзя сказать что карта является домом, она только объясняет как настоящий дом должен выглядеть.
Отношение между классом и объектом можно представить более наглядно, взглянув на отношение между машиной и Audi. Да, Audi – это машина. Однако, нет такой вещи, как просто машина. Машина — это абстрактная концепция, которую также реализуют в Toyota, Honda, Ferrari, и других компаниях.
Ключевое слово class используется для создания класса в Python. Название класса следует за ключом class , за которым следует двоеточие. Тело класса начинается с новой строки, с отступом на одну вкладку влево.
Давайте рассмотрим, как мы можем создать самый простой класс в Python. Взглянем на следующий код:
Источник: python-scripts.com
ООП в примерах. Часть 1
Недавно я пообещал написать что-нибудь про ООП. Честно сказать, тема довольно щекотливая, новичку без пяти капель не разобраться. Я не знал, с чего начать, поэтому решил просто начать, а дальше уже, по отзывам, буду решать в какую сторону делать упор.
Итак, я не буду сразу парить вас нудной информацией о том, что такое ООП, где оно используется, зачем и т.д. Сразу открываем среду разработки и пишем код!!
Пишем меню на Canvas.
Вариант 1. Меню без ООП.
NonOopMenu.java
Как видно, мы определили массив строк items для пунктов меню и числовое значение cursor для текущего выделенного элемента. При выборе пункта меню мы просто выводим Alert с текстом этого пункта, всё просто.
— Ну и норм, без ООП справились, — подумаете вы.
— Хорошо, а если нам надо добавить к этому меню иконки?
— Да не вопрос, private Image[] icons;
— А если ещё и цвет каждому элементу разный надо?
— Пфф, private int[] itemColors; и пошел.
— А если при выборе элемента надо различный код вызывать?
— Не, ну пристал:
switch ( cursor ) {
case 0 : // код для первого пункта
case 1 : // код для второго пункта
// и так далее.
Стоп! Понятное дело, что дальше наше меню превращается в какой-то страшный агрегат с кучей полей, массивов и здоровенным набором case в switch.
Хватит это терпеть, используем ООП!
Вариант 2. Меню с ООП.
Когда в действие вступает ООП, нам приходится мыслить несколько иначе. Если раньше мы оперировали методами и переменными с массивами, то теперь в лексикон войдут слова: сущность, абстракция, класс, иерархия, интерфейс, наследование и другие пошлые философские термины. Но главное отличие, нам нужно будет думать так, как будто мы далеки от программирования.
Перевоплотимся на миг в рыженькую девушку Настю, филолог, 19 лет, оторвёмся от вконтактика и посмотрим на наш салатовый экранчик с менюшкой на английском.
Итак, перед нами экран с пунктами меню .
Вы не поверите, но мы только что выделили основные сущности : экран (наш Canvas) и пункты меню. Этот процесс называется абстрагированием .
Открыть спойлер
Закрыть спойлер
Если кто не хочет пока что писать код, а хочет побыть в роли рыженькой девушки Насти, то давайте ещё попрактикуемся в абстрагировании.
Допустим нам нужно описать мобилу в виде классов.
Итак, перед нами мой любимый розовый смартфончик. Тут я вижу экран , кнопочки , камеру , какой-то непонятный кругляшок, противная заданяя панель , о которую я сломала ноготь, когда батарею пыталась вытащить. Ну вроде всё.
Теперь опишем дерево:
О, дерево. Тут ветки и листочки . Всё. Ой, стойте, ствол , как я про ствол-то забыть могла? Вот теперь точно всё.
Машину описывать мы не будем, потому что Настя не очень в этом разбирается.
И вообще, пожалеем нашу девочку, она хочет спать.
Напомню, мы только что занимались абстрагированием, чтобы отобрать сущности в том виде, в каком они есть на самом деле. Из сущностей получаются классы (хотя не всегда). Класс Canvas у нас и так уже есть, поэтому давайте создадим класс для одного пункта меню. Хранить пока будем только название.
Источник: annimon.com