Изменения

Принципы объектно-ориентированного программирования
== Принципы объектно-ориентированного программирования ==
 
'''Определение'''. Объектно-ориентированное программирование — это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса, а классы образуют иерархию на принципах наследования.
 
Ключевыми отличиями ООП от других методологий программирования являются следующие отличия:
 
* ООП использует в качестве элементов конструкции объекты, а не алгоритмы
* Каждый объект является реализацией какого-либо определенного типа (класса)
* Классы организованы иерархически
 
При несоблюдении хотя бы одного из указанных требований программа перестает быть ОО. (В частности при нарушении 3 имеем программирование на основе Абстрактных Типов Данных)
 
'''Определение'''. Язык программирования называется объектно-ориентированным тогда и только тогда, когда выполнены следующие условия:
 
* Имеется поддержка объектов в виде абстракции данных имеющих интерфейсную часть в виде поименованных операций и защищенную область локальных данных
* Объекты относятся к соответствующим типам (классам)
* Классы могут наследовать атрибуты и методы от суперклассов (базовых классов)
* Имеется поддержка полиморфных функций
 
Объектно-ориентированный подход основывается на следующих элементах:
 
* Абстрагирование
* Инкапсуляция (ограничение доступа)
* Иерархия (в частности наследование)
* Полиморфизм
 
== Абстрагирование ==
 
'''Определение'''. Абстракция — это такие существенные характеристики некоторого объекта, которые отличают его от всех других видов объектов, и, таким образом четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа.
 
Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности поведения от деталей их осуществления.
 
ОО стиль программирования связан с воздействием на объекты (например передача ему сообщения). Путем воздействия на объект вызывается определенная реакция этого объекта. Операции, которые можно выполнить по отношению к данному объекту, и реакция объекта на внешние воздействия составляют характер поведения объекта.
 
== Инкапсуляция (ограничение доступа) ==
 
'''Определение'''. Ограничение доступа — это процесс защиты отдельных элементов объекта, не затрагивающий существенных характеристик объекта как целого.
 
Ограничение доступа позволяет вносить в программу изменения, сохраняя ее надежность и позволяя минимизировать затраты на этот процесс.
 
Абстрагирование и ограничение доступа дополняют друг друга: абстрагирование фокусирует внимание на внешних особенностях объекта, а ограничение доступа не позволяет объектам-пользователям различать внутреннее устройство объекта.
 
В описании класса можно выделить две части:
 
* Интерфейс, который отражает внешнее проявление объекта, создавая абстракцию поведения всех объектов данного класса. В интерфейсной части собрано все, что касается взаимодействия данного объекта с любыми другими объектами.
* Реализация, которая описывает механизмы достижения желаемого поведения объекта. Реализация скрывает от других объектов все детали, не имеющие отношение к процессу взаимодействия объектов.
 
Изменение реализации, вообще говоря, не влечет за собой изменение интерфейса.
 
== Иерархия ==
 
'''Определение'''. Иерархия в ОО — это ранжированная или упорядоченная иерархия абстракций.
 
Основными видами иерархических структур применительно к сложным системам являются структура классов (иерархия по номенклатуре) и структура объектов (иерархия по составу).
 
Примеры иерархий:
 
* Наследование означает такое соотношение между классами, когда один класс использует структурную или функциональную часть одного или нескольких других классов (соответственно простое или множественное наследование). Иными словами, наследование — такая иерархия абстракций, в которой подклассы наследуют строение от одного или нескольких суперклассов. (Иерархия обобщение — специализация)
* Агрегирование (отношение по составу). Объект состоит из подобъектов.
 
Принципы абстрагирования, ограничения доступа и иерархии конкурируют между собой. Абстрагирование данных состоит в установлении жестких границ, защищающих состояние и функции объекта; принцип наследования требует открыть доступ и к состоянию, и к функциям объекта для производных классов. В связи с этим интерфейсная часть класса может быть разделена на три части:
 
* Обособленную (private) — видимая только для самого класса
* Защищенную (protected) — видимую также и для подклассов
* Общедоступную (public) — видимую для всех
 
== Полиморфизм ==
 
'''Определение'''. Полиморфизм — это способность операции (функции) с одним и тем же именем выполнять различные действия в зависимости от типа своих операндов.
 
Полиморфизм может быть статическим и динамическим:
 
* Статический — перекрытие операций (Ада, C++,Object Pascal).
* Динамический — механизм виртуальных функций
 
Виртуальные функции являются примером полиморфных функций. Виртуальная функция может быть переопределена в производном классе, следовательно ее реализация зависит от всей последовательности методических описаний и наследственной иерархии. Какая именно из виртуальных функций будет вызвана — зависит от динамического типа объекта и определяется в момент обращения к виртуальной функции. Для этого используется таблица виртуальных функций, определенная для каждого класса.
 
== Дополнительные возможности ОО языков ==
 
Некоторые языки позволяют определять несколько специальных методов класса:
 
* Конструктор — специальная процедура класса для создания и/или инициализации начального состояния объекта. В частности, конструктор может инициализировать таблицу виртуальных функций.
* Деструктор — специальная процедура класса, которая делает состояние объекта неопределенным и (или) ликвидирует сам объект.
 
Некоторые преимущества ОО подхода:
 
* Использование объектного подхода существенно повышает качество разработки в целом и ее фрагментов. ОО Системы часто получаются более компактными чем их не-ОО аналоги
* Использование объектного подхода приводит к построению систем на основе стабильных промежуточных описаний, что упрощает процесс внесения изменений. Это дает системе возможность развиваться постепенно и не приводит к ее полной переработке в случае существенных изменений исходных требований
* Ориентирован на человеческое восприятие мира
== Основные понятия реляционной модели данных. Понятие о языке SQL ==