Skip to content
IRC-CodingIRC-Coding
OOPОбъектно-ориентированное программированиеКлассыНаследованиеПолиморфизмИнкапсуляцияЯзык программирования

Основы OOP: Объектно-ориентированное программирование

Введение в OOP - ключевые концепции, принципы и лучшие практики разработки программного обеспечения.

S

schutzgeist

8 min read
Основы OOP: Объектно-ориентированное программирование

Основы объектно-ориентированного программирования OOP 2026

Практически все современные языки программирования поддерживают OOP, и будущие языки тоже будут на этом основаны. Если вы занимаетесь разработкой, скорее всего, вы уже используете объектно-ориентированное программирование.

Наша рекомендация книги на Amazon по этой теме:

Keine Bücher für Kategorie "objektorientierte-programmierung" gefunden.

Сразу ли рекомендовать такую книгу? Нет. Если вы еще не знаете ни одного OOP-языка, я советую начать с обычной книги или курса по конкретному языку программирования. Там основы объясняют хорошо, и вы автоматически начнете работать с OOP. Упомянутая книга может быть слишком сложной, если у вас еще нет опыта программирования.

Вот полезные книги по программированию:

Keine Bücher für Kategorie "programming-languages" gefunden.

Здесь мы разберем самые важные принципы и приведем несколько примеров.

Что такое объектно-ориентированное программирование OOP

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

Основные принципы OOP:

1. Инкапсуляция 2. Наследование 3. Полиморфизм 4. Абстракция

Инкапсуляция в объектно-ориентированном программировании

Каждый объект в OOP содержит данные (атрибуты или свойства) и методы (функции) для их обработки. Инкапсуляция скрывает внутренние детали объекта и предоставляет открытый интерфейс для взаимодействия с ним.

Инкапсуляция в объектно-ориентированном программировании означает, что внутренние детали объекта остаются скрытыми и доступны только через определенные интерфейсы. Вот примеры инкапсуляции на JavaScript, PHP и Java:

Модификаторы доступа как инструмент объектно-ориентированного программирования

Краткое введение: в объектно-ориентированных языках программирования, таких как Java и C#, модификаторы доступа определяют, как контролируется доступ к классам, методам, конструкторам и свойствам. Вот основные модификаторы доступа:

public: членская переменная, объявленная как public, доступна отовсюду, как внутри класса или пакета, так и снаружи. private: приватный член доступен только внутри класса, в котором он определен. Он недоступен снаружи и из производных классов. protected: защищенный член доступен внутри своего класса и из производных классов, независимо от того, находятся ли они в одном пакете или нет. default (package-private в Java): если модификатор доступа не указан, в Java член имеет доступ уровня пакета, то есть доступен из любого класса в том же пакете, но не из классов вне пакета. internal (в C#): внутренний член доступен во всей сборке, в которой он определен, но не снаружи сборки.

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

Пример инкапсуляции на JavaScript:

На JavaScript инкапсуляция достигается с помощью функций и замыканий, так как язык не предоставляет явные ключевые слова типа ‘private’ или ‘public’. Изображение

Пример инкапсуляции на PHP:

Инкапсуляция в PHP OOP

PHP поддерживает инкапсуляцию через модификаторы доступа: private, protected и public.

Пример инкапсуляции на Java:

Инкапсуляция в Java OOP

Во всех трех примерах данные (name и age) инкапсулированы внутри класса Person и доступны только через открытые методы (getName() и getAge()). Прямой доступ к внутренним переменным класса извне невозможен, что демонстрирует инкапсуляцию.

Наследование в объектно-ориентированном программировании

Наследование позволяет новым объектам (производным классам) получать свойства и поведение существующих объектов (базовых классов). Это способствует переиспользованию кода и упрощает создание и поддержку сложных систем.

Наследование в JavaScript работает иначе, чем в классических объектно-ориентированных языках вроде Java или C++. JavaScript использует прототипы для наследования вместо классов и наследования классов (хотя современные версии JavaScript предоставляют синтаксис классов, который под капотом работает на прототипах).

В JavaScript каждый объект наследует свойства и методы от объекта-прототипа. Вот простой пример того, как наследование работает в JavaScript:

Изображение

В этом примере Employee создается так, чтобы наследовать от Person. Это достигается:

вызовом конструктора Person с Person.call(this, name) внутри конструктора Employee для наследования свойств Person. установкой Employee.prototype на объект, созданный из Person.prototype, что позволяет Employee наследовать методы Person (Object.create(Person.prototype)). переопределением метода greet для Employee, чтобы определить специфичное поведение для экземпляров Employee.

Полиморфизм в объектно-ориентированном программировании

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

Полиморфизм — центральная концепция объектно-ориентированного программирования (OOP), означающая способность объектов разных классов по-разному реагировать на одно и то же сообщение или метод. Термин “полиморфизм” происходит из греческого языка и означает “много форм”. В OOP полиморфизм позволяет одному интерфейсу иметь несколько реализаций, что ведет к более гибкому и переиспользуемому коду.

Существует два основных типа полиморфизма:

  • Переопределение методов (Method Overriding)

Классы, наследующие базовый класс, могут “переопределить” метод базового класса, предоставляя специфичную реализацию. Например, базовый класс Animal может иметь метод speak(), а производные классы Dog и Cat могут переопределить этот метод, чтобы выводить “Лай” и “Мяу” соответственно.

  • Перегрузка методов (Method Overloading)

Один класс может иметь несколько методов с одним именем, но разными параметрами. Нужный метод выбирается во время выполнения на основе переданных аргументов.

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

В JavaScript полиморфизм обычно реализуется через прототипы и конструкторы. Вот пример, демонстрирующий, как полиморфизм работает в JavaScript:

Изображение

В этом примере Animal — базовый конструктор с методом speak. Оба Dog и Cat — производные конструкторы, наследующие от Animal. Каждый производный класс вызывает конструктор Animal с разным звуком. Таким образом, они “переопределяют” то, как метод speak работает для своих экземпляров, хотя используют один и тот же метод в прототипе. Это полиморфизм в действии: разные объекты выполняют один и тот же метод по-разному.

Абстракция в объектно-ориентированном программировании

Абстракция позволяет упростить сложные аспекты реальности, моделируя только релевантные свойства и поведение. Это облегчает понимание и работу со сложными системами.

Абстракция в программировании, включая JavaScript, — это практика упрощения сложной реальности путем представления только релевантных данных и действий, скрывая ненужные детали. На JavaScript это можно достичь, используя конструкторы, классы (в ES6 и позже) или модули для определения интерфейса, суммирующего функциональность компонента или объекта.

Вот простой пример абстракции на JavaScript с использованием класса:

В этом примере Car — это абстрактное представление автомобиля. Оно скрывает сложность того, что происходит при запуске или движении автомобиля, и вместо этого предоставляет простые методы start и drive. Пользователи класса Car не должны разбираться в деталях двигателя, трансмиссии или других внутренних механизмов. Они взаимодействуют с объектом Car только через определенные методы.

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

Какие известные языки программирования не используют ООП?

Существует несколько известных языков программирования, которые не ориентированы в первую очередь на объектно-ориентированное программирование (ООП), хотя некоторые из них могут поддерживать элементы ООП.

C Процедурный язык программирования, используемый для системного и прикладного программирования. Не поддерживает концепции ООП, такие как классы и объекты.

Fortran Более старый язык, применяемый главным образом в научных и инженерных приложениях. Процедурный, не поддерживает ООП.

COBOL Язык, используемый в основном в бизнес-приложениях. Процедурный, в исходном дизайне не поддерживал ООП, хотя более поздние версии добавили некоторые объектно-ориентированные возможности.

Bash и скриптовые языки оболочки Используются для написания скриптов в окружениях Unix и Linux. Процедурные и, как правило, не поддерживают объектно-ориентированные концепции.

Haskell Функциональный язык программирования, сосредоточенный на функциях вместо объектов. Функциональные языки типа Haskell применяют парадигмы, отличные от ООП.

Erlang Еще один функциональный язык, известный использованием в распределённых системах и приложениях реального времени.

Prolog Логический язык программирования, применяемый в основном в искусственном интеллекте и компьютерной лингвистике.

SQL (Structured Query Language) Язык управления и запросов данных в системах реляционных баз данных. SQL является декларативным языком и не следует принципам ООП.

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

Какие известные языки поддерживают ООП?

Множество современных и широко распространённых языков программирования поддерживают объектно-ориентированное программирование (ООП).

Java Один из самых известных ООП-языков, славится независимостью от платформы и обширной стандартной библиотекой.

C++ Расширение языка C, добавляющее элементы ООП, используется для системного и прикладного программирования.

Python Универсальный высокоуровневый язык, поддерживающий ООП, известный простотой синтаксиса и читаемостью кода.

C# (C-Sharp) Язык ООП от Microsoft, часто используется для разработки Windows-приложений и игр.

Ruby Динамический язык программирования, известный элегантностью и продуктивным синтаксисом. Ruby следует принципу «всё является объектом».

PHP Изначально простой скриптовый язык, теперь полностью поддерживает ООП и широко используется в веб-разработке.

Swift Язык ООП от Apple, применяется для разработки iOS и macOS приложений.

Kotlin Относительно новый язык, разработанный для Java Virtual Machine (JVM) с полной поддержкой ООП. Всё чаще используется при разработке Android.

Objective-C До появления Swift был основным языком для разработки iOS и macOS приложений.

Smalltalk Один из первых чистых ООП-языков, заложивший концепции, используемые во многих современных ООП-языках.

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

С какого языка начать новичку?

Этот вопрос сложен. Я сам начинал с Basic, потом Turbo-Pascal, в университете изучал Java как ООП-язык.

Лично я рекомендую Python или JavaScript, потому что с ними можно быстро начать создавать собственные проекты.

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

Python: благодаря чёткому и легко читаемому синтаксису Python отлично подходит для начинающих. Применяется во множестве областей: от веб-разработки до анализа данных и машинного обучения.

JavaScript: если вас интересует веб-разработка, JavaScript необходим. Используется на стороне клиента практически во всех веб-браузерах и всё чаще на стороне сервера через Node.js.

Java: универсальный язык, широко распространённый в корпоративной сфере. Более строгий синтаксис чем Python, что полезно для понимания основных принципов программирования.

C#: если вас интересует разработка игр, особенно с помощью Unity, C# хороший выбор. Используется также для Windows-приложений.

Ruby: славится элегантным синтаксисом, хорошо подходит начинающим, интересующимся веб-разработкой, в особенности с фреймворком Ruby on Rails.

Kotlin: если хотите разрабатывать Android-приложения, Kotlin это современный и удобный язык, рекомендуемый Google как предпочтительный для Android.

Swift: для разработки iOS-приложений Swift лучший выбор. Создан Apple и хорошо доступен для новичков.

Важно помнить, что освоение основ программирования – циклов, условных операторов, переменных, функций и структур данных – важнее выбора конкретного языка. Эти концепции универсальны для большинства языков программирования.


Продолжение пути обучения ООП

Следующая статья в пути обучения ООП охватывает ООП Основы: Класс, объект, экземпляр, атрибуты и методы — фундаментальные концепции классов и объектов.

Рекомендуемая литература: объектно-ориентированное программирование

Keine Bücher für Kategorie "objektorientierte-programmierung" gefunden.

Назад к блогу
Share:

Nächster Artikel in Основы

Weiterlesen
Основы Software Design

Похожие статьи