Файл: Основные понятия объектно-ориентированного программирования (Основные понятия объектно-ориентированного программирования).pdf
Добавлен: 01.04.2023
Просмотров: 115
Скачиваний: 2
СОДЕРЖАНИЕ
1. Основные понятия объектно-ориентированного программирования
2. Объект - как базовое понятие в объектно-ориентированном программировании
2.1 Первый принцип объектно-ориентированного программирования - ИНКАПСУЛЯЦИЯ
2.2 Второй принцип объектно-ориентированного программирования - НАСЛЕДОВАНИЕ
2.3 Третий принцип объектно-ориентированного программирования - ПОЛИМОРФИЗМ
3. Процесс объектно-ориентированного проектирования
4. Объектно-ориентированные языки
5. Простая объектная модель и ссылочно-объектная модель
Полиморфизм используется в тех случаях, когда реальный тип объекта будет известен только на этапе выполнения и реализуется посредством механизма виртуальных функций и позднего связывания. Полиморфизм позволяет описывать поведение вне зависимости от типа данных. В объектно-ориентированном программировании это означает создание класса или прототипа, который может быть адаптирован объектами, работающими с другими типами данных. Объекты, которые используют полиморфный класс/прототип, должны определить специфичное для типа данных поведение. Благодаря полиморфизму объект выполняет нужные действия, даже если содержимое сообщения было неизвестно во время написания программы Полиморфизм - способность обьекта использовать методы производного класса, который не существует на момент создания базового.
Основное преимущество полиморфизма — легкость, с которой можно создавать новые классы, «ведущие себя» аналогично родственным, что, в свою очередь, позволяет достигнуть расширяемости и модифицируемости.
2.4 Абстракция
Важным понятием в объектно-ориентированном программировании является инструмент абстракция. Это использование только тех характеристик объекта, которые с достаточной точностью представляют его в данной системе. Основная идея заключается - представление объекта минимальным набором полей и методов. При этом с достаточной точностью для решаемой задачи. Абстракцию в также можно определить и как способ представления элементов задачи из реального мира в виде объектов в программном проекте. Абстракция всегда связана с обобщением некой информации о свойствах предметов или объектов. Поэтому главное — это отделить значимую информацию от незначимой в разрезе решаемой задачи. Уровней абстракции может быть несколько.
Абстракция важный инструмент наряду с полиморфизмом, наследованием и инкапсуляцией и является основой объектно-ориентированного программирования. Этот механизм позволяет работать с объектами, не вдаваясь в особенности их реализации.
Абстракция данных это популярная техника программирования. Основная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик, существенных для корректного её использования. Такое разделение может быть выражено через специальный интерфейс, сосредотачивающий описание всех возможных применений программы[
2.5 Интерфейс
Рассмотрим еще одно понятие объектно-ориентированного программирования – интерфейс. Это программная/синтаксическая структура, которая определяет отношение между объектами, разделяющие определённое поведенческое множество, никак не связанных. Разработка интерфейсов, при проектировании классов, тождественна разработке спецификации. А именно, множества методов, каждый из которых класс использующий интерфейс, должен реализовывать.
Наряду с абстрактными классами и протоколами, интерфейсы устанавливают взаимные обязательства между элементами программной системы. И это является фундаментом концепции программирования по контракту. Интерфейс определяет границу взаимодействия между классами или компонентами. Специфицируя определённую абстракцию, которую осуществляет реализующая сторона.
В объектно-ориентированном программировании интерфейс является строго формализованным элементом объектно-ориентированного языка и широко используется в исходном коде программ. Этот механизм позволяет наладить множественное наследование объектов и в то же время решить проблему ромбовидного наследования.
Интерфейса состоит из двух частей: имени и методов интерфейса. Имя интерфейса строится правилам, по которым строятся и другие идентификаторы используемого языка программирования. Языки и среды разработки имеют различные правила и синтаксис по написанию и формлению кода. В соответствии с этим имена интерфейсов могут формироваться по правилам, позволяющим отличать имя интерфейса от имён других элементов.
2.6 Методы
Метод - это процедура или функция, объединенная с данным типом и представляется как невидимый оператор делая экземпляр данного типа доступными изнутри для метода. Определение типа включает заголовок метода. Полное определение метода квалифицируется в имени типа.
Принципы объектно-ориентированного программирования требуют, чтобы поля объектов не были включены в исходный код. Ну, насколько это возможно. Для доступа к полям данных должны использоваться методы объекта. Метод является процедурой или функцией, описанной внутри объекта и жестко ограниченной этим объектом.
Объект осуществляет синхронизацию кода и данных путем совместного построения их описаний. Чтобы получить значение одного из полей объекта, вызывается относящийся к этому объекту метод, который возвращает значение нужного поля. Чтобы присвоить полю значение, вызывается метод, который назначает данному полю новое значение.
2.7 Понятие класса
Класс это универсальный, комплексный тип данных, состоящий из тематически единого набора переменных и методов. Класс является моделью информационной сущности с внутренним и внешним интерфейсами для оперирования своим содержимым - значениями полей. В классах широко используются специальные блоки из одного или двух спаренных методов, отвечающих за элементарные операции с определённым полем. Это интерфейс присваивания и считывания значения, которые имитируют непосредственный доступ к полю. Данные блоки называются свойствами и почти совпадают по конкретному имени со своим полем. Например, имя поля может начинаться со строчной, а имя свойства с заглавной буквы. Другим проявлением интерфейсной природы класса проявляется при копировании соответствующей переменной. Через присваивание копируется только интерфейс, но не сами данные. Таким образом есть класс понимается как ссылочный тип данных. Экземпляр этого класса является переменная-объект. Которая относится к заданному классом типу. В определенных исполняющих системах класс также может представляться неким объектом при выполнении программы посредством динамической идентификации типа данных. Как правило, классы разрабатывают таким образом, чтобы обеспечить отвечающие природе объекта и решаемой задаче целостность данных объекта. Целостность предметной области объектов и их интерфейсов, а также удобство их проектирования, обеспечивается наследованием. В класс объединяются объекты с одинаковыми свойствами и методами.
Для упрощения понимания, можно рассмотреть пример из жизни. При попытке понять окружающий мир, человек применяет структурированный подход. При встрече с неизвестным объектом пытаясь втиснуть его в существующую структуру представления об окружающем мире. Классифицируя неизвестный объект по ранее созданной системе классификации и иерархии или создавая новую. По аналогии представляются и классы в парадигме объектно-ориентированного программирования.
Использование иерархии классов вводит необходимость абстракции. По мере продвижения вверх по иерархии классы становятся более абстрактными.
Объектно-ориентированные языки программирования используют такой же подход. С нескольких абстрактных классов обычно начинается иерархия. Каждый новый класс понимается как подкласс существующего класса, называемого его суперклассом, который наследует данные и методы от классов, стоящих выше в иерархии. Те данные и методы, которые являются новыми для этого класса и следует определять и реализовывать.
Абстрактное понятие класс сравнимо с понятием категория в его обычном смысле. По определенным свойствам элемента определенной категории можно установить принадлежность к этой категории. Категория определяется общими свойствами и все экземпляры этой категории имеют эти свойства
Проще всего это поясняется на примере музыкальных инструментов, которые делятся на различные категории: духовые, ударные и струнные. Все эти категории принадлежат к категории музыкальных инструментов. В свою очередь, категория музыкальных инструментов входит в категорию инструментов.
Музыкальные инструменты имеют общие свойства, но каждый инструмент сам по себе обладает особыми свойствами, которые определяют его назначение и отличают его от других инструментов. По тому же принципу можно описать и классы в объектно-ориентированном программировании. Определенный музыкальный инструмент некоторой категории, например гитара, является объектом. Категория, к которой этот инструмент принадлежит, - это класс.
Таким образом, класс в объектно-ориентированном программировании это абстрактный тип данных И ввключает в себя не только данные, но и функции и процедуры. Функции и процедуры класса называются методами и содержат исходный код, предназначенный для обработки внутренних данных объекта данного класса.
Наличие в классах абстрагирования, имеет первостепенное значение при разработке повторно используемого программного продукта. Выстроив интерфейс, на который не влияют изменения в реализации, приложению долгое время не понадобятся никакие модификации. В случае с хорошим понманием предметной области задачи, определяется, какие методы понадобятся пользователям класса. А именно, если при проектировании класса удается сочетать хорошее знание предметной области с прогнозом относительно дальнейших перспектив использования класса, можно гарантировать, что большая часть интерфейса этого класса останется неизменной, даже в случае возможного совершенствования реализации класса. В результате отстранения пользователя от деталей реализации система в целом становится значительно прозрачнее и понятнее. А значит, и удобнее в работе.
Между классами также могут быть установлены отношения:
- отношение разновидности (попугай - вид определенного биологического семейства или попугай - домашнее животное);
- включения или составной части (клюв - часть попугая);
- ассоциативности, когда между классами есть чисто смысловая связь (попугаи и хомячки - домашние животные).
3. Процесс объектно-ориентированного проектирования
Прежде всего, программирование подразумевает правильное и эффективное использование механизмов конкретных языков программирования Проектирование понимает под собой правильное и эффективное структурирование сложных систем.
Объектно-ориентированное программирование ориентировано на разработку крупных программных комплексов, разрабатываемых командой программистов. Проектирование системы в целом, создание отдельных компонентов и их объединение в конечный продукт при этом часто выполняется разными людьми. Как правило, нет одного специалиста, который все знает о выполняемом проекте досконально всё.
Объектно-ориентированное проектирование ориентируется на описание структуры проектируемой системы. Описывая её поведение , в отличие от функционального программирования. Отвечая, фактически, на два основных вопроса – из каких частей состоит система и кто за что отвечает.
Объектно-ориентированное проектирование это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической (классы и объекты) и физической (модули и процессы) структуры системы. Проектируя также и статическую и динамическую модели проектируемой системы.
Декомпозиция в объектно-ориентированное проектировании и отличает его от структурного. Логическая структура системы отражается абстракциями в виде классов и объектов в случае объектно-ориентированного проектирования. Алгоритмами же в случае структурного проектирования.
Объектно-ориентированное проектирование - это поступательный итеративный процесс. Построение проекта программного изделия состоит из ряда циклов, в которых уточняются описания классов и взаимодействия между ними, разрабатываются реализующие их программы, проводится их отладка и тестирование. По результатам каждого этапа уточняются рабочие документы предыдущих этапов, дорабатываются описания классов и программы. Эти циклы повторяются до получения требуемого результата. Граница между объектно-ориентированным анализом и проектированием расплывчата
Декомпозиция осуществляет роль разделения сложной проектируемой системы на меньшие подсистемы. И каждую из подсистем можно совершенствовать независимо. В таком случае упрощается понимание и появляется возможность сконцентриваться работая над частями системы.