Объектно-ориентированное программирование

advertisement
Объектно-ориентированное
программирование
1. Стили программирования
2. Основные принципы объектноориентированного
программирования
3. Библиотека визуальных
компонентов
Стили программирования
стиль программирования
методологии
программирования
методики
• стиль программирования внутренне согласованная
совокупность базовых конструкций
программ и способов их
композиции, обладающая общими
фундаментальными особенностями
• методология
программирования совокупность соглашений о том,
какие базовые концепции языков
программирования и какие их
сочетания считаются
приемлемыми или
неприемлемыми для данного стиля
Методики состоят из следующих компонентов
• поощрения (или прямые предписания)
использования некоторых базовых концепций
программирования
• запрещения (или ограничения) применения
некоторых других базовых концепций
• требования и рекомендации по оформлению и
документированию программ
• совокупность инструментальных и
организационных средств, поддерживающих все
вышеперечисленные требования и
рекомендации
Основные стили программирования
•
•
•
•
процедурный (императивный)
функциональный (аппликативный)
логический (реляционный)
объектно-ориентированный
Процедурное программирование
• Программа состоит из последовательности
операторов, задающих процедуру решения задачи
• Типичными операторами являются операторы
присваивания, передачи управления (ветвления),
ввода-вывода и циклы
• Основным является оператор присваивания,
служащий для изменения содержимого областей
памяти
• Концепция памяти как хранилища значений,
содержимое которого может обновляться
операторами программы, является
фундаментальной
Функциональное программирование
• программа составляется таким образом, что в
ней единственным действием является вызов
функции
• единственным способом расчленения
программы на части является введение имени
для функции и задание для этого имени
выражения, вычисляющего значения функции
• никаких ячеек памяти, ни операторов
присваивания, ни циклов, ни передачи
управления
Логическое программирование
• программа представляет собой совокупность
определений отношений между объектами
• решение проблемы выполняется с помощью
механизмов логического вывода
• в логическом программировании нужно
только определить правила, на которых
основывается алгоритм, а не определять
последовательность шагов, которые
требуется выполнить
Объектно-ориентированное
программирование
• в основе лежит понятие объекта:
• каждый объект интегрирует в себе некоторую
структуру данных и доступные только ему
процедуры обработки этих данных
• заключается в выборе имеющихся или
создании новых объектов и организации
взаимодействия между ними
Основные принципы объектноориентированного программирования
Основными элементами:
• абстрагирование
• инкапсуляция
• модульность
• иерархия
• Абстрагирование – выделение
существенных характеристик некоторого
объекта, которые отличают его от всех других
видов объектов
• Инкапсуляция – процесс отделения друг
от друга отдельных элементов объекта,
определяющих его устройство и поведение
• Модульность – свойство программы,
связанное с возможностью её декомпозиции
на ряд внутренне связных, но слабо
связанных между собой модулей
• Иерархия –упорядоченная система
абстракций, расположение их по уровням
Основные понятия объектноориентированного программирования
Объект
Класс
• осязаемая сущность,
предмет или явление,
имеющие чётко
определяемое поведение
• обладает состоянием,
поведением и
индивидуальностью
• множество объектов,
связанных общностью
структуры и поведения
• включает в себя: атрибуты,
отношения с другими
классами и операциями
Свойства объекта
• Состояние объекта характеризуется
перечнем всех возможных свойств данного
объекта и текущими значениями каждого из
этих свойств
• Поведение определяет воздействие объекта
на другие объекты и его реакцию на запросы
от других объектов
• Индивидуальность – свойства объекта,
отличающие его от всех других объектов
Свойства класса
• Атрибут – поименованное свойство класса,
определяющее диапазон допустимых значений,
которые могут принимать экземпляры данного
свойства
▫ public (общий, открытый) – атрибут будет виден всеми
остальными классами;
▫ private (закрытый, секретный) – атрибут не виден
никаким другим классом;
▫ protected (защищённый) – атрибут доступен только
самому классу и его потомкам в иерархии наследования
• Операция – это реализация услуг, которую можно
запросить у любого объекта данного класса
▫ методы
▫ интерфейсы
• Полиморфизм – это способность скрывать
множество различных реализаций под
единственным общим интерфейсом
• Наследование означает построение новых
классов на основе существующих с
возможностью добавления или
переопределения свойств
Библиотека визуальных компонентов
• Библиотека визуальных компонентов (Visual
Component Library – VCL) содержит большое
количество классов, предназначенных для
быстрой разработки приложений
Базовые классы VCL
TObject
TPersistent
TComponent
TControl
TGraphicControl
TWinControl
TCustomControl
• Класс TObject обеспечивает выполнение важнейших
функций "жизнедеятельности" любого объекта
• Класс TPersistent обеспечивает возможность
объектов взаимодействовать друг с другом и
процессами
• Класс TComponent реализует механизмы,
обеспечивающие взаимодействие компонентов со
средой разработки (Палитрой компонентов,
Инспектором объектов)
• Класс TControl обеспечивает функционирование
визуальных компонентов
• Класс TWinControl обеспечивает создание оконных
элементов управления
• Класс TCustomControl обеспечивает создание
различных нестандартных типов оконных элементов
управления Windows: редакторов, списков и т. д.
• Класс TGraphicControl обеспечивает создания
неоконных (графических) элементов управления:
Label, Image, Shape и т.д.
Класс TObject
• Класс TObject является родоначальником
всей иерархии классов VCL
• Он реализует функции, которые обязательно
будет выполнять любой объект
• Основные методы:
▫ Create – создание объекта
▫ Destroy – удаление объекта
▫ Free – удаление объекта, созданного методом
Create
Процесс создания объекта включает
•
•
•
•
выделение области адресного пространства
установку указателя на экземпляр объекта
задание начальных значений свойств
выполнение установочных действий,
связанных с назначением объекта
• Для уничтожения экземпляра объекта
предназначены методы Destroy и Free
• Метод Destroy является деструктором и
обеспечивает освобождение всех занимаемых
экземпляром объекта ресурсов
• Метод Free вызывает деструктор, но перед
этим проверяет, чтобы указатель на
экземпляр объекта был не пустым. Это
позволяет избежать серьезных ошибок
• Если объект является владельцем других
объектов, то его метод Free автоматически
вызовет эти же методы для всех объектов
• Каждый объект должен содержать некоторую
информацию о себе, которая используется
приложением и средой разработки
• Метод Classlnfo – возвращает указатель на
таблицу информации времени выполнения
(RTTI)
• Функция ClassName – возвращает имя типа
объекта, которое может быть использовано
для идентификации.
• Метод ClassNamels (Name)– позволяет
определить, является ли данный объект того
типа, имя которого передано в параметре
Name
• Программирование для Windows основано
на событиях. Каждое приложение и каждый
программный объект должны уметь
реагировать на сообщение о событиях и
рассылать сообщения
• Метод Dispatch – осуществляет обработку
сообщений, поступающих объекту. Он
определяет, сможет ли объект обработать
сообщение при помощи собственных
обработчиков событий. В случае отсутствия
методов сообщение передается аналогичному
методу класса-предка
Класс TPersistent
• Класс TPersistent содержит базовые методы
копирования атрибутов одного объекта в другой
и чтения/записи информации об объекте в файл
формы
• Метод Assign (Source) осуществляет
копирование свойств и атрибутов из объекта
Source в объект, вызвавший метод
• Для обеспечения взаимодействия объектов со
средой разработки предназначен метод
GetNamePath. Он возвращает имя объекта для
передачи его в Инспектор объектов
Класс TComponent
• Класс TComponent является общим предком
всех компонентов VCL
• Он используется в качестве основы для
создания невизуальных компонентов и
реализует основные механизмы, которые
обеспечивают функционирование любого
компонента
• Свойство Name указывает имя компонента, с
помощью которого программист обращается к
нему при написании кода
• Свойство Tag является вспомогательным и не
влияет на работу компонента. Оно было сделано
для удобства разработчиков, которые могут
присваивать ему значения по своему усмотрению
• Свойство ComponentCount указывает количество
подчиненных компонентов
• Свойство Owner указывается предка компонент
• Свойство ComponentIndex указывает положение
компонента в списке предка
• Свойство ComponentState указывает текущее состоянии
компонента. Состояние может измениться в результате
получения компонентом некоторого сообщения, действий
разработчика, выполнения акции и т. д.
▫
▫
▫
▫
▫
▫
▫
▫
▫
▫
▫
csLoading – компонент загружается
csReading – компонент загружает значения своих свойств
csWriting – компонент сохраняет значения своих свойств
csDestroying – уничтожение компонента
csDesigning – компонент находиться на форме и доступен
инструментам Редактора форм
csAncestor – компонент находиться на форме
csUpdating – компонент обновляется
CsFixups - компонент связан с компонентом другой формы,
которая еще не загружена в среду разработки
csFreeNotification – если это состояние устанавливается,
другие компоненты, связанные с данным, уведомляются о
его уничтожении
csInline – определяет компонент верхнего уровня в иерархии
csDesignInstance – определяет корневой компонент на этапе
разработки
• Вслед за классом TComponent в иерархии базовых
классов располагается группа из трех классов,
которые обеспечивают создание различных
визуальных компонентов
• Визуальные компоненты – это разнообразные
стандартные для Windows и специальные элементы
управления
• Визуальные компоненты должны уметь отобразить
себя на экране монитора и реагировать на целый ряд
событий (реакция на мышь и клавиатуру, движение
курсора и т. д.). Для этого в них встроен
специальный механизм, обеспечивающий
взаимодействие компонентов с графической
подсистемой ОС (GUI)
• Существует несколько типов элементов управления,
которые существенно отличаются по своим
возможностям и поведению. Каждому типу
соответствует собственный класс иерархии
• Класс TWinControl обеспечивает
использование в Delphi оконных элементов
управления. Они должны уметь
▫ получать и передавать фокус управления во
время выполнения приложения
▫ воспринимать управляющие воздействия от
мыши и клавиатуры
▫ уметь размещать на себе другие элементы
управления
• Класс TCustomContrl обеспечивает
использование нестандартных элементов
управления. Он существенно облегчает
использование элементов управления, т. к.
позволяет управлять отрисовкой компонента
путём использования канвы вместо
обращения к системным функциям GUI
• Для обеспечения создания не оконных
элементов управления непосредственно от
класса TControl порожден класс
TGraphicControl. Его потомки не могут
получать фокус, но используют для
визуализации канву
Download