Объектно-ориентированное программирование: основы и принципы
Что нужно знать об ООП.
Объектно-ориентированное программирование (ООП) — парадигма, которая рассматривает программу как множество «объектов».
Например, у автомобиля есть характеристики: модель, цвет, год выпуска, объем двигателя. Если нам нужно создать объект Car, эти характеристики будут его атрибутами. Для каждой новой машины код исходного объекта car будет использоваться повторно.
Рассказываем о принципах и типах ООП.
Основы объектно-ориентированного программирования
Объектно-ориентированное программирование (ООП) основано на концепции классов и объектов. Она используется, чтобы структурировать программу в простые части кода (классы), которые нужны для создания отдельных элементов объекта.
Часто классы — это широкие категории (например, «автомобиль» или «собака»), у которых есть общие атрибуты. К примеру, среди атрибутов класса «автомобиль» — марка и цвет. Задача классов — определить, какие атрибуты будет иметь экземпляр. Классы также могут содержать функции (методы), доступные только объектам этого типа. Самые популярные объектно-ориентированные языки — Java, C++, C#, Python и JavaScript.
Языки ООП
- Java — одна из особенностей языка в том, что его код сначала транслируется в специальный байт-код, независимый от платформы. Потом он выполняется виртуальной машиной JVM (Java Virtual Machine). В ООП в Java данные хранятся в атрибутах — это переменные, связанные с конкретными объектами.
- Python — универсальный язык, который чаще всего используют в машинном обучении и науке о данных.
- C++ — строго типизированный язык программирования общего назначения. Он используется для создания компиляторов и интерпретаторов для других языков.
- Ruby — создан как язык программирования общего назначения. Он высокоуровневый (в нем много абстракций), динамичный (типы данных определяются во время выполнения программы, что увеличивает скорость) и интерпретируемый (его не нужно компилировать в машинный код). Детальнее о нем мы писали здесь.
- C# — язык, который разработали для улучшения существующих концепций C. Он поддерживает платформу Microsoft.NET вместе со многими веб-приложениями, играми, настольными и мобильными приложениями.
Также ООП поддерживает и другие языки. Например, Perl, Objective-C, Dart, Lisp, JavaScript и PHP.
4 принципа объектно-ориентированного программирования
- Инкапсуляция
У объекта есть внутренние переменные, которые могут менять или читать его собственные методы, но их нельзя прочитать или поменять напрямую.
Представим, что есть несколько объектов класса «машина» с параметром «количество бензина в баке». Разработчик не может сделать так, чтобы информация о количестве бензина могла напрямую использоваться кем-то/чем-то, кроме самой машины (например, она может подать сигнал о нехватке топлива, но остальные автомобили на дороге не могут самостоятельно узнать, сколько бензина в баках других машин).
Это количество может поменяться только с помощью специального метода «машина.заправка_бензином()».
- Абстракция
Это создание простой модели более сложной вещи или процесса. Код внутри становится неактуальным для других объектов, взаимодействующих с ним.
Возьмем пример, связанный с компьютерной игрой. Метод Attack может содержать много строк кода. Этот код указывает, как героя можно атаковать и как атака повлияет на его здоровье. Вражескому объекту не нужно знать, как работает атака. Достаточно того, что она ухудшит показатели героя.
- Наследование
Этот принцип позволяет одним классам наследовать функции других. Родительские классы расширяют атрибуты и поведение дочерних классов. Наследование поддерживает возможность повторного использования.
Если в родительском классе определены базовые атрибуты и поведение, то создавать дочерние классы можно, добавляя эти атрибуты.
Например, пастушьи собаки обладают уникальной способностью пасти животных. Все пастушьи собаки — собаки, но не все собаки — пастушьи. Для этого различия создается дочерний класс HerdingDog из родительского класса Dog, а затем добавляется уникальное поведение herd ().
Преимущества наследования в том, что программы могут создавать общий родительский класс, а затем (при необходимости) создавать более конкретные дочерние классы. Это упрощает общее программирование, поскольку вместо многократного воссоздания структуры класса Dog дочерние классы автоматически получают доступ к функциям своего родительского класса.
- Полиморфизм
Это проектирование объектов, разделяющих поведение.
Используя наследование, объекты могут предопределять общие родительские поведения с определенными дочерними объектами. Полиморфизм позволяет одному и тому же методу выполнять разное поведение, определяя метод или перезагружая его.
Например, в игре у каждого из врагов может быть метод Attack, который он наследует от родителя, но каждый — со своей собственной реализацией.