Абстракция

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

Это и есть основа ООП. То есть у нас есть возможность работать с объектами, не вдаваясь в особенности их содержания. В каждом случае находят применение такие понятия из ООП как: инкапсуляция, полиморфизм и наследование. Когда нам необходимо обратиться к скрытым данным объекта, нам нужно применить инкапсуляцию, создав функцию доступа или же свойство. Абстракция данных – это неправильный метод программирования. Основная мысль заключается в том, что малозначащие моменты осуществления подпрограммы и значащих характеристик для правильного её применения. Это может быть осуществлено через «интерфейс», который описывает все возможные применения программы.

Инкапсуляция

– такое свойство программирования, которое позволяет пользователю не думать о реализации кода программы, а пользоваться всеми его преимуществами через публичный интерфейс, в том числе защитить важные данные. Пользователю предоставляется лишь интерфейс объекта. Этот интерфейс предоставляется с помощью ключевого слова: public. В то же время пользователь не может использовать закрытые свойства и методы. Эти данные реализуются с помощью ключевых слов: private, protected, internal. Скрытие данных оправдывается тогда, когда необходима доработка кода, при этом благодаря инкапсуляции удобство поиска и правки кода стоят не на последнем месте.

Наследование

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

Абстрактный класс

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

Множественное наследование

– при множественном наследовании у класса может быть больше одного предка. В таких случаях класс наследует свойства и методы всех родительских классов. Но тут скрываются подводные камни. То есть множественное наследование, является источником программных ошибок, которые могут возникать из-за одинаковых имён свойств и методов в вышестоящих классах. Но от множественного наследования можно отказаться в пользу интерфейсов. Если всё же возникает такая необходимость существует один метод решения данной проблемы, а именно, применить операцию расширения видимости «::» с целью выделения конкретного класса и метода конкретного родителя. Большая часть ООП языков могут наследоваться от класса предка и осуществлять методы нескольких интерфейсов одним классом. Это является заменой множественного наследования. Методы интерфейсов нужно переопределять явно, это позволяет избежать ошибок при наследовании одинаковых свойств и методов родительских классов

Полиморфизм

– это такое свойство объектов, которое позволяет осуществлять разную реализацию. Если язык программирования поддерживает полиморфизм, значит классы с одинаковой спецификацией могут поддерживать разную реализацию. Другими словами: один интерфейс, много реализаций. Благодаря полиморфизму повышается коэффициент повторного использования кода. Общие свойства объектов соединяются в одно – это можно называть интерфейсом и классом. Когда одному методу приписывается различная функциональность, то это называется перегрузкой метода, перегрузкой операций или перегрузкой функций.

Формы полиморфизма

Полиморфизм включения

– чистый полиморфизм. Используя такой полиморфизм, тождественные объекты можно использовать вместе. По средствам полиморфизма включения можно написать один метод для действий со всеми объектами TPerson. Применяя этот вид полиморфизма, допускается оперировать с любым объектом, который тестится «is-A». Полиморфизм включения облегчает деятельность программиста по добавлению к коду свежих подтипов, потому, что не требуется дописывать каждый метод для каждого нового типа, а требуется всего лишь применять существующий, изменив в нём только поведение системы. Благодаря полиморфизму можно повторно использовать родительский класс, дочерний класс или же методы, которые использует родительский класс.

Параметрический полиморфизм

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

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

Параметрические типы. За место того, чтобы писать класс для каждого типа, нужно делать типы, которые будут осуществляться с выполнением программы, вот тогда мы делаем параметрический тип. Полиморфизм переопределения. К отложенным методам относятся абстрактные методы. Классы с такими методами могут вызывать методы и полиморфизм осуществляет вызов той версии метода в дочерних классах. Полиморфизм может допускать спец. реализацию для каждого типа данных. Существует так же понятие «полиморфизм-перегрузка» -- это особый случай полиморфизма. В этом случае одно и то же имя может означать различные методы, причём они могут разниться количеством и типом свойств и методов, то бишь не зависят от собственных аргументов. Есть такой вариант, что метод не будет ограничиваться типами свойств и методов.

Компонент комментариев CComment