Что такое объектно-ориентированное программирование? Основы, объясненные в терминах дилетантов

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

Существует множество технических объяснений того, что это такое, но сегодня мы рассмотрим простое определение объектно-ориентированного программирования.

Прежде чем мы начнем: процедурные языки

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

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

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

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

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

Итак, что же такое объектно-ориентированное программирование?

Первый объектно-ориентированный язык (общепринятый как Simula) ввел идею объекты. Объекты — это наборы информации, которые рассматриваются как единое целое.

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

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

Давайте возьмем пример программирования игры в шахматы. У нас может быть класс под названием Piece. В Piece у нас есть список атрибутов:

  • цвет
  • Рост
  • форма
  • Движение разрешено

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

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

Что делает это намного лучше, чем процедурный подход?

Короче говоря, объектно-ориентированные языки программирования (такие как Java) упрощают организацию данных и кода таким образом, который более универсален для больших проектов.

Чтобы обсудить это немного подробнее, мы поговорим о четырех основах объектно-ориентированного программирования.

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

Если вы хотите что-то использовать, это не значит, что вам нужно знать, как это работает. Например, эспрессо-машина сложна. Но вам не нужно знать, как это работает. Вам просто нужно знать, что когда вы нажмете «Вкл», вы получите эспрессо.

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

То же самое относится и к объектам в объектно-ориентированном программировании. В нашем примере с шахматами у нас может быть метод move (). Этот метод может потребовать много данных и других методов. Может потребоваться начальная и конечная переменная положения. Он мог бы использовать другой метод для определения того, захватил ли он часть.

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

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

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

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

Объект Bishop может содержать несколько частей информации. Например, она может иметь переменную с именем «position». Эта переменная необходима для использования метода move (). И, конечно, у него есть цвет.

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

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

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

В дополнение к классам, объектно-ориентированные языки программирования также имеют подклассы. Они содержат все атрибуты из родительского класса, но могут также содержать другие атрибуты.

В нашей шахматной игре фигуры пешек нуждаются в методе, который может превратить их в другие фигуры, если они доберутся до конца доски. Мы назовем его методом transformPiece ().

Не каждому компоненту нужен метод transformPiece (). Так что мы бы не хотели помещать это в класс Piece. Вместо этого мы можем создать подкласс с именем Pawn. Поскольку это подкласс, он наследует все атрибуты от Piece. Таким образом, экземпляр подкласса Pawn включает цвет, высоту, форму и допустимое движение.

Но он также включает метод transformPiece (). Теперь нам не нужно беспокоиться о случайном использовании этой функции на ладье. Вот техническое объяснение:

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

.)

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

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

Например, наш класс Piece может иметь метод move (), который перемещает фигуру на один пробел в любом направлении. Это работает для короля, но не для чего-то еще. Чтобы решить эту проблему, мы можем определить новый метод move () в подклассе Rook, который определяет движение как неограниченное количество пробелов вперед, назад, влево или вправо.

Теперь, когда программист вызывает метод move () и использует фигуру в качестве аргумента, программа будет точно знать, как должна двигаться фигура. Это экономит массу времени при попытке выяснить, какой из множества различных методов вы должны использовать.

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

Если после этих последних четырех определений ваша голова немного кружится, не беспокойтесь слишком сильно. Вот основные вещи, которые нужно запомнить:

  • Объектно-ориентированное программирование собирает информацию в отдельные объекты, называемые объектами.
  • Каждый объект является отдельным экземпляром класса.
  • Абстракция скрывает внутреннюю работу объекта, когда его не нужно видеть.
  • Инкапсуляция хранит связанные переменные и методы внутри объектов и защищает их.
  • Наследование позволяет подклассам использовать атрибуты родительских классов.
  • Полиморфизм позволяет объектам и методам иметь дело с несколькими различными ситуациями с помощью единого интерфейса.

Если вы помните эти моменты, вы хорошо разберетесь в том, что такое объектно-ориентированное программирование. Как я уже упоминал, четыре основы объектно-ориентированного программирования могут быть немного сложными. Но как только вы начнете программировать, они станут более понятными.

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

, вы начнете узнавать, как он применяет принципы ООП на практике.

Ссылка на основную публикацию
Adblock
detector