1.3. Абстрагирование

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

Абстрагирование находит широкое применение в языках высокого уровня /3/. Например, в использовании концепции «файла»: файлы абстрагируются от  предметной области, конкретного носителя информации, реализуя долговременное постоянно доступное хранилище поименованных единиц. Другим примером абстрагирования является развитие и совершенствование алгоритмических языков высокого уровня, в которых реализованы два важнейших метода:  абстрагирование через параметризацию и через спецификацию.

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

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

Абстрагирование через параметризацию  и спецификацию являются мощными средствами создания программ /3/.

Дальнейшее развитие абстрагирование получило в объектно-ориентированном программировании (ООП) при реализации свойств инкапсуляции, наследования и полиморфизма.

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

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

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

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

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

Чаще всего механизм перегрузки используется при объявлении конструкторов класса для того, чтобы обеспечить возможность инициализации объектов различными способами, и при перегрузке операций, для того, чтобы обеспечить возможность использования знаков операций для пользовательских типов. Реализация концепции полиморфизма означает, что можно создать общий интерфейс для группы близких по смыслу действий. Преимуществом полиморфизма является то, что он помогает снижать сложность программ, разрешая использование одного интерфейса для единого класса действий /5/.

Таким образом, абстракция широко используется при разработке идеальных моделей технических объектов в АРМ, САПР.