Объектно-ориентированное программирование 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. Его потомки не могут получать фокус, но используют для визуализации канву