“Объектно-ориентированное программирование – исключительно плохая идея, которая могла возникнуть только в Калифорнии”. – Эдсгер Дейкстра
Любите вы это или ненавидите, объектно-ориентированное программирование (ООП) является одной из доминирующих моделей в этой области. В колледже значение и концепции ООП постоянно вдалбливались мне в голову. Даже на некоторых собеседованиях при приеме на работу от меня ожидали, что я буду знать эти основы с самого начала. Вот почему я думаю, что важно обсудить их сейчас.
Представление этих концепций позволит мне познакомить новичка с важнейшими знаниями высокого уровня и быстро освежить знания всех, кто уже знаком с этими идеями (и даже помочь себе достичь более глубокого понимания).
В этом блоге я кратко опишу ООП и в общих чертах объясню его 4 основные концепции: абстракция, инкапсуляция, наследование и полиморфизм. Я родом из Java-фона, поэтому я добавлю немного Java, чтобы расширить некоторые моменты.
Примечание: Моя цель состоит в том, чтобы следующие объяснения были общими. Вместо того, чтобы показывать одни и те же примеры и код, которые все используют, я собираюсь представить их с другой точки зрения. 😁
Что такое Объектно-ориентированное программирование?
ООП – это модель компьютерного программирования, которая организует разработку программного обеспечения с помощью объектов и классов .
Объекты являются основными единицами ООП. Они могут имитировать объекты реального мира, такие как собака, стол или автомобиль. Это означает, что они могут хранить данные и выполнять определенные действия.
Данные объекта реализуются с использованием полей , а поведение реализуется с использованием методов .
Классы – это просто чертежи объекта. Они определяют состояние и поведение, которые могут вызывать объекты.
Объекты являются экземплярами классов
Вот краткий пример, чтобы показать эти отношения:
1. Абстракция
Процесс абстрагирования скрывает ненужные детали от объекта и показывает только существенные атрибуты. Таким образом, пользователю предоставляется ограниченный объем информации для взаимодействия.
Например, когда вы ведете автомобиль, вы не беспокоитесь о внутренней работе двигателя или о том, как шины управляют вашим автомобилем. Все это находится за кулисами.
Вы просто взаимодействуете с основными механизмами (предоставляемыми интерфейсом), чтобы делать то, что должен делать автомобиль, например, нажимать на газ и поворачивать руль. Тебе все равно как выполняются эти операции.
То же самое и в ООП. Например, если вы создадите экземпляр объекта Airplane и вызовете его функцию для подготовка к взлету()
, все, что вы знаете, это то, что самолет будет готовиться к взлету. Однако в коде могут происходить и другие вещи, такие как тестирование крыльев и диагностика двигателей.
Абстракция достигается за счет использования абстрактных классов и интерфейсов в Java.
Скрытие абстракции
2. Инкапсуляция
Инкапсуляция защищает данные объекта, заключая их в единый блок, позволяя управлять изменениями и видимостью. Вместо прямого доступа к данным вы должны вызвать функцию, которая изменяет или извлекает их для вас. Это добавляет важный уровень безопасности для объекта.
Например, если у вас есть объект таблицы с открытыми полями, вы сможете задавать поля в любое удобное для вас время. Вы можете подумать, что это не имеет значения, но что, если вы установите стол.ноги
где-то случайно? Это может привести к поломке всего объекта и приложения (потому что это больше не таблица).
Однако, если вы инкапсулируете это поле в сеттер ( settlers(null)
), вы можете добавить проверку, которая игнорирует установку “ножек” в значение null, тем самым усложняя приложение.
Инкапсуляция достигается за счет использования модификаторов доступа (т. Е. общедоступных, частных, защищенных) и геттеров/сеттеров в Java.
Скрытие инкапсуляции
3. Наследование
Наследование позволяет одному классу извлекать данные и поведение из другого класса. Основное преимущество этого заключается в возможности повторного использования, что позволяет экономить время и усилия, делая код более читабельным.
Например, класс учащихся и класс учителей могут быть детьми класса Person. Ученик и Учитель наследуют поля ( имя
, Фамилия
, дата Рождения
) и методы ( работать ()
, ходить в школу()
) из класса Person.
Классы учащихся или учителей теперь имеют доступ к персональным данным и методам. Таким образом, любые объекты, которые создают экземпляры этих двух классов, также могут вызывать их (если они являются общедоступными).
В Java наследование достигается путем “расширения” родительского класса.
4. Полиморфизм
Поли-что?? Честно говоря, это звучит круче, чем есть на самом деле.
Полиморфизм – это состояние, возникающее в нескольких различных формах.
В ООП полиморфизм позволяет данным или методам с одним и тем же именем означать разные вещи в разных контекстах. Но что это вообще значит?
Взгляните еще раз на пример наследования. Поскольку и Ученик, и Учитель наследуют DoWork()
от класса Person, они оба могут его вызывать. Мы также можем попросить их реализовать свой собственный способ “делать работу”.
- Учитель может оценивать работы
- Студент может учиться
Это известно как переопределение метода из родительского класса. Теперь всякий раз, когда создается объект Учителя и вызывается функция DoWork()
, Учитель будет “оценивать работы”. И если бы объект Person был создан и вызывал do Work()
, он бы просто “прочитал книгу”.
Другой случай, когда вы увидите полиморфизм на работе, – это метод перегрузки . Перегрузка достигается путем изменения количества аргументов и/или изменения типа аргументов в методе.
Например, в классе с именем House у вас могут быть следующие методы:
краска()
краска (цвет строки)
краска (Цвет строки 1, цвет строки 2)
краска (логическая грунтовка)
Вывод
Объяснения этих четырех концепций очень общие, потому что я хотел сделать их как можно более простыми. Оставьте комментарий ниже с любыми другими мудрыми словами по этим темам или ООП в целом. Спасибо!
Если вы хотите получить более глубокое представление о том, как эти идеи реализуются программно, ознакомьтесь с этими ссылками в “GeeksforGeeks”.:
Спасибо за чтение! Если вам нужны дополнительные технические советы, программное обеспечение и блоги, вы можете написать мне в Твиттере 🔥 🤘🏽 🐶
Оригинал: “https://dev.to/jburroughs/stay-in-the-l-oop-with-object-oriented-programming-basics-1dn”