до 80 000 ₽
Майские скидки до 80 000 ₽
Главная | Все статьи | Дневник студента

Будь в курсе объектно-ориентированного программирования!

Время чтения статьи ~4 минуты
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Будь в курсе объектно-ориентированного программирования! главное изображение

«Объектно-ориентированное программирование — исключительно плохая идея, которая могла родиться только в Калифорнии». Эдсгер Дейкстра

Это перевод статьи Джорджана Барроуза, фронтенд-разработчика в J.P. Morgan Chase

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

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

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

ООП — это модель компьютерного программирования, которая организует разработку программного обеспечения с помощью объектов и классов.

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

Данные объекта реализуются с помощью полей, а поведение реализуется с помощью методов.

Классы — это просто схемы объекта. Они определяют состояние и поведение, которые могут вызывать объекты.

Абстракция

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

Например, управляя автомобилем, вы не беспокоитесь о внутренней работе двигателя или о том, как шины управляют автомобилем. Все это остается за кадром.

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

То же самое и в ООП. Если вы создаете переменную Airplane и вызываете его функцию для prepareForTakeoff(), вы знаете лишь, что Airplane готовится к взлету. Однако в коде могут происходить и другие вещи, такие как тестирование крыльев и запуск диагностики двигателей.

Абстракция достигается за счет использования абстрактных классов и интерфейсов в Java.

Абстракция == скрытая реализации

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

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

Например, если у вас есть объект таблицы с открытыми полями, вы сможете установить поля в любое время. Вы можете подумать, что это не имеет значения, но что если вы где-нибудь случайно установите table.legs = null? Это может сломать весь объект и приложение (поскольку это уже не таблица).

Однако, если вы инкапсулируете это поле в установщике setLegs(null), вы можете добавить проверку, которая игнорирует установку «legs» в значение null, тем самым укрепляя приложение.

Инкапсуляция == сокрытие информации

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

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

Например, класс Student и класс Teacher могут быть дочерними элементами класса Person. Ученик и Учитель наследуют поля (firstName, lastName, dateOfBirth) и методы (doWork(), goToSchool()) класса Person.

Классы Student или Teacher теперь имеют доступ к данным и методам Person. Таким образом любые объекты, которые создают копии этих двух классов, также могут вызывать их (если они общедоступны).

В Java наследование достигается путем «расширения» родительского класса.

Полиморфизм

Честно говоря, звучит круче, чем есть на самом деле. Полиморфизм — это условие существования нескольких различных форм. В ООП полиморфизм позволяет данным или методам с одним и тем же именем означать разные вещи в разных контекстах. Но что это вообще значит?

Взгляните еще раз на пример наследования. Поскольку и Ученик, и Учитель наследуют функцию doWork() от класса Person, они оба могут вызывать ее. Мы также можем предложить им реализовать собственный способ «делать работу».

  • Учитель может оценивать работы.
  • Студент может учиться.

Это называется переопределением метода из родительского класса. Теперь всякий раз, когда создается объект «Учитель» и вызывается функция doWork(), Учитель будет «оценивать работы». И если объект Person и вызывает doWork(), он просто «читал книгу».

Другой случай, когда вы увидите полиморфизм в действии, — это перегрузка метода. Перегрузка достигается за счет изменения количества аргументов и/или изменения типа аргументов в методе.

Например, в классе House у вас могут быть следующие методы:

  • paint()
  • paint(String color)
  • paint(String color1, String color2)
  • paint(boolean usePrimer)

Вывод

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

Аватар пользователя Денис
Денис 21 ноября 2022
2
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 2 мая
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 2 мая
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 2 мая
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 2 мая
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 2 мая
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
в разработке
Старт 2 мая
профессия
Верстка с использованием последних стандартов CSS
5 месяцев
с нуля
Старт в любое время