AAA
Обычный Черный

Кто не делится найденным, подобен свету в дупле секвойи (древняя индейская пословица)

версия для печатиВерсия для печати



Библиографическая запись: Объектно-ориентированное программирование. — Текст : электронный // Myfilology.ru – информационный филологический ресурс : [сайт]. – URL: https://myfilology.ru//165/yazyki-programmirovaniya-i-ix-ispolzovanie-v-informaczionnyx-sistemax/obektno-orientirovannoe-programmirovanie/ (дата обращения: 29.03.2024)

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

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

Содержание

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

    Технология и идеология объектно-ориентированного программирования (ООП) зародились в 60-е годы, в период активного осмысления технологических вопросов разработки программных систем. Свое воплощение тогда ООП получило в языке Симула-67, созданном Оле-Йоханом Далом (Ole-Johan Dahl) и Кристеном Нюгардом (Kristen Nygaard) в Норвежском компьютерном центре. Симула-67 предназначался для программирования задач имитационного моделирования и представлял собой модернизированный Алгол-60.

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

    Две базовых идеи, лежащие в основе объектно-ориентированного программирования:

    1. 1) абстрактные типы данных
    2. 2) иерархические типы данных.

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

    Иерархические типы данных. Это определенные программистом типы данных, расширяющие возможности других типов данных. В нашем примере автобус – частный случай транспортного средства. Иерархические типы позволяют отвлечься от деталей частных классов, работая с общим поведением и, наоборот, не дублировать общее поведение, работая с частным, полагаясь на класс, являющийся общим. Так, разрабатывая код для класса «датчик давления» мы можем не думать о том, что этот датчик давления топливного бака именно автобуса. Мы разрабатываем отдельный датчик давления, который сможем использовать и в других транспортных средствах. С другой стороны, разрабатывая код автобуса, мы может не отвлекаться на возможности, реализуемые пассажирским ТС, ТС и датчиками – все это доступно в виде готовых абстракций, реализация которых от автобуса также скрыта. В обоих случая мы работаем только над своей текущей задачей, не отвлекаясь на ненужные частности и зависимости.

    Основные понятия

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

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

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

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

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

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

    У каждого объекта есть ссылка на класс, к которому он относится. При приеме сообщения объект обращается к классу для обработки данного сообщения. Если сам класс не располагает методом для обработки сообщения, оно может быть передано вверх по иерархии наследования.

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

    Свойства объектов

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

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

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

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

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

    Наследование выполняет в ООП несколько важных функций:

    • моделирует концептуальную структуру предметной области (в виде иерархии классов);
    • позволяет использовать одни и те же писания для задания разных классов;
    • обеспечивает программирование больших систем путем пошаговой конкретизации классов.

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

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

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

    Принципы ООП

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

    1. Всё является объектом.
    2. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
    3. Каждый объект имеет независимую память, которая состоит из других объектов.
    4. Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).
    5. В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
    6. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.

    Объектно-ориентированные ЯП

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

    1. «Чистые» объектно-ориентированные языки, в наиболее классическом виде поддерживающие объектно-ориентированную технологию:

    1. Simula (1962);
    2. Smalltalk (1972);
    3. Beta (1975);
    4. Cecil (1992);
    5. Java (1995);

    2. «Гибридные», появившиеся в результате внедрения объектно-ориентированных конструкций в популярный процедурный язык программирования и мультпарадигмальные:

    • Object Pascal (1984);
    • C++ (1983);
    • Python (1991);


    1. Голицына О. Л., Партыка Т. Л., Попов И. И. Языки программирования : учебное пособие / О. Л. Голицына, Т. Л. Партыка, И. И. Попов. — 2-е изд., перераб. и доп. — М. : ФОРУМ, 2010. — 400 с.
    2. Свердлов С. 3. Языки программирования и методы трансляции: Учебное пособие. — СПб.: Питер, 2007. — 638 с.
    3. Усов Т. М. Введение в объектно-ориентированное программирование с примерами на C#. — 2019.

    23.01.2022, 963 просмотра.


    Уважаемые посетители! С болью в сердце сообщаем вам, что этот сайт собирает метаданные пользователя (cookie, данные об IP-адресе и местоположении), что жизненно необходимо для функционирования сайта и поддержания его жизнедеятельности.

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

    Dear visitors! It is a pain in our heart to inform you that this site collects user metadata (cookies, IP address and location data), which is vital for the operation of the site and the maintenance of its life.

    If you do not want to provide this data for processing under any pretext, please leave the site immediately and we will not tell anyone that you were here. With the same care, the site administration.