Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
09 Май 2024
7 мин
9905

Основы объектно-ориентированного программирования (ООП)

Объясняем, что такое объектно-ориентированное программирование (ООП), почему оно основывается на объектах и классах и как понимать принципы ООП.

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

Первым языком с объектно-ориентированным подходом был язык Симула, который создали в 1967 году. В язык ввели новые сущности: объекты и классы. Но тогда этим идеям не уделили большого внимания. Алан Кэй, ученый в области компьютерных технологий, и программист Дэн Ингаллс развили эти подходы в языке Smalltalk, который стал первым популярным объектно-ориентированным языком программирования.

Объектно-ориентированный подход — это когда язык программирования использует объекты, чтобы описать машине, что нужно сделать. Объектно-ориентированными называют языки Java, JavaScript, Python, C++, Ruby, Swift, PHP и ряд других, хотя некоторые из них могут использовать несколько подходов, в том числе функциональный и процедурный.

Тип Языки программирования
Объектно-ориентированные
  • Java,
  • Ruby,
  • Smalltalk
Гибридные (ООП и другие подходы)
  • Python: ООП, функциональный, процедурный;
  • C++: ООП, процедурный;
  • JavaScript: ООП, функциональный;
  • PHP: ООП, процедурный;
  • Swift: ООП, функциональный;
  • C#: ООП, функциональный, процедурный
Не объектно-ориентированные, но известные языки программирования
  • C,
  • Fortran,
  • COBOL,
  • Pascal,
  • Haskell: функциональный,
  • Lisp: функциональный,
  • Prolog: логический

Java — объектно-ориентированный язык программирования. Благодаря этому он очень структурированный и организованный, но непростой. Если вы хотите разобраться в нём — поступайте в Skypro на курс «Java-разработчик». Эксперты расскажут об основах Java и подробно объяснят, как выполнять принципы объектно-ориентированного программирования.

Суть объектно-ориентированного программирования

Программа в объектно-ориентированном подходе состоит из объектов и классов. Этот подход основывается на том, что человеку легко представить мир как систему категорий и их представителей.

Например, в реальном мире есть категория «обувь». К ней относят туфли на высоком каблуке и кроссовки. У них есть общие свойства — носок и платформа, а еще назначение — носить на ногах.

Кроссовки и туфли по отдельности составляют еще два отдельных класса объектов с новыми общими свойствами и назначением: например, кроссовки — спортивная обувь, а у туфель есть каблук определенной высоты. Класс-потомок тоже может быть родителем: например, «кроссовки» можно разделить на классы «кроссовки для бега», «кроссовки для тенниса» и так далее.

Класс — это и шаблон, и категория объектов. По шаблону «кроссовки» можно составить новую пару кроссовок, у которых будут типичные для этого класса свойства с какими-то новыми значениями.

Объект — это нечто конкретное, поэтому у каждого объекта есть или могут быть:

  1. Свойства, которые записаны в полях.
  2. Поведение, которое записано в методах.

В реальном мире объектами в классе «обувь» были бы конкретные пары обуви. Например, пара туфель от Chanel и пара кроссовок от Nike стали бы объектами в двух разных классах «туфли» и «кроссовки», а еще в общем классе «обувь». В программировании такое тоже возможно: классы могут быть вложены друг в друга.

Зачем пользуются ООП

У кода, который написан по принципам объектно-ориентированного программирования, есть три свойства:

  • его можно использовать повторно;
  • этот код гибкий и модульный: его части можно изменять, не затрагивая целую программу;
  • он понятный и простой для чтения.

Код становится таким благодаря четырем основным принципам ООП.

Принципы ООП

В процедурном программировании данные и функции, которые их используют, не связаны напрямую. С таким кодом сложно работать:

  1. Любая часть программы может изменить любые данные. Ошибки трудно отслеживать.
  2. Разработчику нужно разобрать весь код, чтобы понять, как используют данные.
  3. Изменение одного элемента может вызвать ошибки в других частях кода.
  4. Код трудно разделить на независимые части. Любые изменения в одной части программы могут вызывать поломку программы в целом.

Объектно-ориентированное программирование появилось, чтобы решить эти проблемы, поэтому в его основе лежат четыре принципа.

Абстракция

Принцип абстракции указывает, что у объекта должны быть определенные характеристики, которые отличают его от объектов иного типа. Так объект будет работать только с теми данными, которые ему нужны. Эти черты показывают, что объект делает и как он себя ведет. Среди характеристик нет ничего лишнего.

Например, у объектов класса «кроссовки» нет свойства «каблук», только «подошва»; а у объектов класса «туфли» может не быть метода «занятие спортом».

Инкапсуляция

Инкапсуляция объединяет данные и методы в одном классе и скрывает детали от пользователя. Это упрощает работу с кодом и снижает риск ошибок. Пользователь видит только то, что разработчик хочет ему показать.

Например, пользователь меняет свойства объекта «кроссовки модель № ХХ» только через специальные функции, которые заранее определены. Он может изменить цвет с зеленого на красный, убрать или добавить танкетку, изменить тип шнурков. Но он не может убрать свойство «цвет» и заменить его на «тип подключения к мобильному устройству». Поэтому в программу невозможно внести неожиданные изменения, которые могут ее сломать.

Инкапсуляцию реализуют с помощью ключевых слов, которые разработчики пишут перед именем классов и интерфейсов:

  • public: для открытых данных и методов, доступных пользователю;
  • private: для закрытых данных и методов, недоступных пользователю;
  • protected: для данных и методов, доступных только наследникам, — о них ниже;
  • internal: для данных и методов, доступных только внутри одной версии приложения.

Наследование

Наследование позволяет классам брать свойства и методы у других классов. Благодаря этому код становится более лаконичным и его проще переиспользовать: ссылаться на уже существующие части функциональности, вместо того чтобы писать их заново.

Например, классы «кроссовки» и «туфли» в дополнение к своим уникальным характеристикам будут наследовать свойства и методы класса «обувь»: то, что все их носят на ногах, и то, что у всех есть подошва.

Наследование может быть множественным: один класс может считать своими родителями сразу несколько классов и наследовать все их свойства. Не все языки поддерживают эту возможность: только Эйфель, Python и C++. Другие языки — Java, Delphi и C# — позволяют классу наследоваться от одного класса-предка, но при этом реализовать методы нескольких интерфейсов, специальных сущностей с несколькими методами внутри. Этот механизм заменяет множественное наследование.

Python сочетает в себе несколько подходов, но считается одним из самых простых языков для новичков. Если вы хотите разобраться, как именно в нём работают объекты и классы, как хранится информация в свойствах и какие есть основные методы, — поступайте на курс «Python-разработчик».

Полиморфизм

Полиморфизм позволяет применять к разным объектам одни методы, которые при этом могут вести себя по-разному. Для этого полиморфизм предлагает инструмент «переопределение свойств и методов».

Представим, что у кроссовок и туфель в нашей программе есть один и тот же метод: «использовать по прямому назначению». Мы можем применить его к любой обуви: калошам, танцевальным туфлям или кроссовкам для бега. Но вот суть метода будет разной: у калош — «ходить по лужам», у танцевальных туфель — «танцевать», у кроссовок для бега — «бегать».

Такое изменение сущности метода еще называют перегрузкой метода, функции или операции.

Главное про ООП

  1. ООП заменило процедурное программирование. Первым популярным ОО-языком стал Smalltalk, который разработали Алан Кэй и Дэн Ингаллс. Затем появились и другие языки: Java, Python, C++, C#, Ruby.
  2. В ООП программа состоит из объектов и классов. Классы — это шаблоны объектов. Объекты наследуют от классов характеристики: свойства, которые описывают объекты, и методы, которые определяют их поведение.
  3. ОО-код переиспользуемый, гибкий и понятный благодаря четырем принципам ООП.
  4. Абстракция ограничивает объект необходимыми характеристиками. Так объект работает только с нужными данными.
  5. Инкапсуляция объединяет данные и методы в классе, но скрывает их детали и делает невозможными неожиданные и случайные изменения в коде.
  6. Наследование позволяет объектам забирать свойства у своего шаблона. Классы также могут наследоваться от других классов. В некоторых языках — например, Эйфель, Python и C++ — класс может наследоваться сразу от нескольких классов.
  7. Полиморфизм позволяет применять для разных объектов одни и те же методы, которые ведут себя по-разному.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий