Урок №112. Введение в ООП

  Юрий  | 

  |

  Обновл. 13 Сен 2021  | 

 100013

 ǀ   12 

На уроке №10 мы определили объект в языке C++ как часть памяти, которая используется для хранения значений. Объект с именем называется переменной.

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

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

   свойства (например, вес, цвет, размер, прочность, форма и т.д.);

   поведение, которое они могут проявлять (например, открывать что-либо, делать что-то и т.д.).

Свойства и поведение неотделимы друг от друга.

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

Так не только читабельнее, но и понятнее, кем является объект (you — вы) и какое поведение вызывается (driveTo — поездка). Вместо того, чтобы сосредоточиться на написании функций, мы концентрируемся на определении объектов, которые имеют четкий набор поведений. Вот почему эта парадигма называется «объектно-ориентированной».

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

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

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

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

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (444 оценок, среднее: 4,88 из 5)
Загрузка...

Комментариев: 12

  1. Алена:

    Еще раз спасибо за качественный перевод и оформление! У Вас прекрасный перевод, так все грамотно выглядит. Не могу нарадоваться, что нашла и подсела на Ваш сайт. Это лучшее, что я видела. Настолько все постепенно и по порядку, так грамотно составлены уроки, что, кажется, по другому невозможно все это объяснить и понять.
    Дойдя до данной главы, сделала паузу для разнообразия на Страуструпа "Принципы и практика использования С++" — вот где каша и все в кучу((( Сначала покажут, через 5 страниц только объяснят. Это кошмар, хорошо, что я уже подготовлена Вашим сайтом. В начале книги совсем нет новой информации для меня (после Вашего сайта 😉 )
    А здесь иногда происходит так: изучаешь урок, вроде все понятно, но мысль в голове — "к чему это? как это может использоваться?" — а в следующем или через 1-2 урока все встает на места и в новом материале все складывается. В этих уроках действительно все с нуля, подробно и без воды. Как вы откопали такое сокровище? Это просто диво дивное) Надеюсь, что у Вас получится перевести все уроки до конца!

    1. Фото аватара Юрий:

      Я иногда тоже удивляюсь, насколько всё последовательно. Текущая тема нужна для освоения последующей: уроки переплетаются не только между другими уроками текущей главы, но и между уроками соседних глав. Получается как в математике: если сегодня не разобрался с косинусами/синусами — завтра не разберешься с теоремами косинусов/синусов (как и в случае с теоремой Пифагора нужно знать, что такое катеты и гипотенуза).

      Насчет книг. Материал один и тот же. Те же циклы, ООП, классы, типы данных. Но многое зависит от двух вещей: желание учащегося и способа изложения материала. Т.е. даже самый вкусный контент можно запороть унылой подачей, и также даже, казалось бы, сложные темы можно объяснить простыми словами. Конечно, не всё сразу, но потихоньку начинаешь углубляться и понимать.

      Спасибо за ваш отзыв. Надеюсь хватит сил перевести уроки до конца 🙂

  2. Ростислав:

    Здравствуйте. Очень признателен за эту вводящую в ооп статью. Но всё же мне непонятно,то есть не могу постичь смысла в этом виде программирования. Чтобы объяснить что я имею в виду, и объяснить где я не понимаю, я приведу примеры. Я заранее искренне надеюсь на вашу помощь.
    Итак, для меня понятно,что существует некий код,который понимает компилятор, код, который что делает, выполняет какую-то функцию. Достаточно знать каков код нужен для реализации чего то конкретного и программа работает. Это мне понятно. Не понятно ООП. Не понятно как объект,который мы создаем( к примеру кнопка, при нажатии которой, отправляется сообщение кому то) может что то делать,выполнять? Откуда компьютер знает как ему что то сделать? Мы просто пишем название объекта, пишем на английском что он делает и это всё работает? К примеру, я создаю объект,которой называю "кнопка" на английском, пишу на английском что она нажимается, и потом на этом же английском пишу просто банально что она отправляет сообщение кому то и всё? Так работает ооп? Будет она работать? Спасибо ещё раз за помощь.

    1. Станислав:

      ООП и обработка нажатия кнопки соотносятся так же, как квадратное с зелёным: квадратное может быть зелёным, но это совсем не одно и то же.
      Обработка нажатия кнопки — это взаимодействие с операционной системой по средствам обработки сообщений от неё (от Windows).
      ООП — это философия написания программ. То есть, даже не язык программирования, а один из способов писать на нём.
      То есть, мухи отдельно, котлеты отдельно. В прочем, программа, призванная обработать сообщения Windows, может быть написана с и с использованием приёмов ООП.

      1. Владимир:

        Напишу скорее для себя. Сейчас 99.9% всего кода написанного в мире, написано именно через концепцию ООП. Сомневаюсь что вы(или кто то другой), будет писать банальную обработку нажатия кнопки(и саму кнопку) в коммерческом проекте(для уже существующих ОС) через ассемблер. Это будет банальная трата личного времени, потому как там придется писать чертову уйму кода, когда как через ООП это делается в пару строчек.

        1. Глеб:

          Владимир, если речь идет о 99,9% коммерческих программ для использования на ПК, то вы вероятнее всего правы. Однако вы упускаете, что на один персональный компьютер приходятся десятки, если не сотни тысяч встраиваемых систем — от умных пультов и микроволновок до самолетов и спутников. В одних современных автомобилях находятся десятки контроллеров, выполняющих самые разнообразные задания, будь то обработка сигналов сенсоров или управление медиасистемой. Согласитесь, использовать для этих целей стандартное для ПК железо на винде или даже ПКшном линуксе — далеко не самая лучшая идея как в плане эффективности, так и в плане стоимости хардвирных компонентов.
          Контроллеры же используемые во встраиваемых системах лишь в редких случаях имееют собственную операционную систему. Некоторые "мощные" 32-битные контроллеры используют особые версии линукс для встраиваемых систем, однако подавляющее большинство 8- и 16- битных контроллеров такой роскоши не имеют. А так как для подобных систем зачастую критически важна экономия памяти и скорость исполнения, то зачастую приходится отказываться от С++ со всеми прелестями ООП и возвращаться к дедушке С с его парадигмами структурного программирования.
          Ассемблером так же не брезгуют. Продолжу ваш пример с кнопкой: представьте что речь идет не о клавиши клавиатуры или кнопке включения чайника, а о кнопке аварийной остановке станка с ЧПУ, в который угодил невнимательный коллега-рабочий. В таком случае каждая микросекунда будет на счету. Поэтому во всех коммерческих проектах "банальную обработку нажатия кнопки" пишут через ассемблер, не доверяя компилятору.
          По этим причинам ваше высказывание о процентном соотношении кода написанного с ООП кажется неправдоподобным, или как минимум неполным, если вы имелли в виду исключительно программные проекты для ПК.

  3. Вадим:

    Я обычно не оставляю комментарии, но данное изложение реально одно из самых лучших.

    Так как я только изучаю программирование и плюсы мой первый язык, то уроки Дениса Маркова + данный учебник по C++, наверное, лучшая комбинация в мире))

    Спасибо вам)

    1. Фото аватара Юрий:

      Спасибо и Вам за комментарий и что читаете 🙂

  4. Nik:

    Спасибо Вам огромное за грамотные уроки!
    Это лучший русскоязычный материал по плюсам с их нюансами из всего, что я находил.

    1. Фото аватара Юрий:

      Значит, будем продолжать 🙂

      1. Den:

        Спасибо большое от меня тоже) Я программирую в основном на си, нашёл много чего не знал на вашем сайте) Жду новых статей)

        1. Фото аватара Юрий:

          Спасибо, что читаете 🙂 Буду работать далее.

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *