Вопрос 8. Основные понятия объектно-ориентированного программирования: объекты, классы, инкапсуляция, полиморфизм, наследование, методы.
Основные понятия
Классы – это «изобретение» программистов для упрощения разработки сложных программ и улучшения их качества. В основе классов лежат три фундаментальных принципа, которые называются инкапсуляция, наследование и полимарфизм.
Инкапсуляция
Класс представляет собой единство трех сущностей – полей, методов и свойств. Объединение этих сущностей в единое целое и называется инкапсуляцией. Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его «самодостаточным» для решения конкретных задач. В результате класс всегда несет в себя некоторую функциональность. Например, класс TForm содержит (инкапсулирует в себе) все необходимое для создания окна Windows-программы, класс Tmemo представляет собой полнофункциональный многострочный текстовый редактор, класс TTimer обеспечивает работу программы с таймером и т.д.
Инкапсуляция является мощным средством обмена готовыми к работе программами заготовками.
Наследование
Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса родителя: TChildClass = class (TParentClass)
Порожденный класс автоматически наследует поля, методы и свойства своего родителя и может добавлять новые. Таким образом, принцип наследования обеспечивает поэтапное создание сложных классов и разработку собственных библиотек классов.
Принцип наследования приводит от единственного родителя – класса Tobject. Этот класс не имеет полей и свойств, но включает в себя методы самого общего назначения, обеспечивающие весь жизненный цикл любых объектов – от создания до уничтожения. Программист не может создать класс который не был бы дочерним классом Tobject. Следующие два объявления индентичны:
TaClass = class (TObject)
TaClass = class
Принцип наследования приводит к созданию ветвящегося дерева классов, постепенно разрастающегося при перемещение от класса Tobject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми и передает их своим потомкам.
Полиморфизм
Полиморфизм - это свойство классов решать схожие по смыслу проблемы разными способами. В рамках Object Pascal поведенческие свойства класса определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разную алгоритмическую основу и, следовательно, придающих объектам разные свойства. Это и называется полиморфизмом объектов.
В Object Pascal полиморфизм достигается не только описанным выше механизмом наследования и перекрытия методов родителя, но и их виртуализацией (см. ниже), позволяющей родительским методам обращаться к методам своих потомков.