Объектно-ориентированное программирование.
Основные характеристики промышленного программного
обеспечения:
-
сложность;
-
сопровождение;
-
сохранение.
Сложные системы: непрерывные и дискретные.
Примеры сложных систем объектов: структура
персонального компьютера (иерархическая система, образующая логическое
целое. Дискретные составляющие, каждое из которых кроме всего прочего
имеет четко выраженную структуру, систему организации. Абстрагирование
от некоторых конкретных свойств дискретных составляющих, мы можем
очертить круг устройств, которые решают некоторые задачи более высокого
уровня; структура растений и животных; структура вещества; структура
социального общества.
Признаки сложной системы.
-
Сложные системы часто являются иерархическими и
состоят из взаимонезависимых подсистем, которые в свою очередь также
могут быть разделены на подсистемы, и т.д., вплоть до самого низкого
уровня.
-
Выбор, какие компоненты в данной системе
считаются элементарными, относительно произволен и в большой
степени оставляется на усмотрение исследователя.
-
Внутри компонентная связь обычно сильнее, чем
связь между компонентами
-
Иерархические системы обычно состоят из
немногих типов подсистем, по-разному скомбинированных и
организованных.
-
Любая работающая сложная система является
результатом развития работавшей более простой системы. Сложная
система, спроектированная с «нуля», никогда не заработает. Следует
начинать с работающей простой системы.
Как отмечает Дейкстра, «Способ управления сложными
системами был известен еще в древности – devide et impera (разделяй и
властвуй)». При проектирований сложной системы необходимо разделять ее
на все меньшие и меньшие подсистемы, каждую из которых можно
совершенствовать независимо. Это прежде всего связано с тем, что
психологи доказали, что человек может одновременно следить за 7±2
структурными единицами информации. Этот тезис и является
методологической основой декомпозиции.
Выделяют алгоритмическую и объектно-ориентированную
декомпозиции. Важны оба вида декомпозиции. Однако, опыт показывает, что
общение со сложными системами полезно начинать с
объектно-ориентированной декомпозиции, поскольку она имеет ряд
преимуществ:
-
уменьшает размер программных средств за счет
использования общих механизмов;
-
такие системы более гибки и проще
эволюционируют;
-
снижение риска при разработке крупных систем,
поскольку развитие происходит из более мелких систем, в которых все
отлажено.
ОО анализ и проектирование – это подход, в
основе которого лежит представление о том, что программную систему нужно
проектировать как совокупность взаимодействующих друг с другом объектов,
рассматривая каждый объект как экземпляр определенного класса, причем
классы образуют иерархию.
Объектно-ориентированная программа не имеет
жесткого алгоритма работы, она представляет собой систему объектов,
каждый из которых может выполнять какие-то функции в ответ на полученные
сообщения.
Основные понятия объектно-ориентированного
программирования.
Объект, object -
-
нечто, чем можно оперировать;
-
имеет состояние, поведение, идентичность;
-
совокупность данных и способов работы с ними.
Структура и поведение сходных объектов определены
в общем для них классе. Термины объект и экземпляр взаимозаменяемы.
Данные можно рассматривать как поля записи.
Особым “изобретением ”
программистов для упрощения разработки сложных программ и улучшения их
качества являются классы.
Классом в Object Pascal называется
особый тип записи, который может иметь в своем составе поля, методы и
свойства. Такой тип также будем называть объектным типом.
type
TmyObject = class (Object)
MyField
: integer;
Function
MyMethod : integer;
end;
В примере описан класс TMyObject, имеющий поле
MyField и метод MyMethod.
Классы могут быть описаны либо в секции связи
(интерфейса) модуля, либо на верхнем уровне вложенности секции
реализации. Не допускается описание классов внутри процедур и других
блоков кода.
Переменная объектного типа называется экземпляром
класса, или объектом.
var AMyObject: TMyObject;
Итак, классом называется функционально законченные
фрагменты программ, служащие образцами для создания подобных себе
экземпляров.
Однажды создав класс, программист может включить
его экземпляры (копии) в разные программы или в разные места одной и той
же программы.
Класс представляет собой единство трех сущностей:
полей, методов и свойств.
Поля аналогичны полям записи. Это данные,
уникальные для каждого экземпляра.
Методы – это процедуры и функции, описанные внутри
класса и предназначенные для операций над полями. В состав класса входит
указатель на специальную таблицу, где содержится вся информация, нужная
для вызова методов. От обычных процедур и функций методы отличаются тем,
что при вызове им передается (неявно) указатель на тот объект, который
их вызвал.
Объект «появляется на свет» в результате вызова
специального метода, который инициализирует объект-конструктора. В Object Pascal конструкторов у класса может быть несколько. Общепринято
называть конструктор Create. Созданный экземпляр уничтожается другим
методом - деструктором. Типичное название деструктора
Destroy.
Вызов конструкторов и деструкторов, как правило, осуществляется автоматически
для любых компонентов, включенных в приложение из Палитры компонентов.
Для объектов, создаваемых динамически (во время выполнения приложений),
нужен явный вызов конструктора.
Основные принципы ООП.
Суть ООП составляют 3 принципа:
-
инкапсуляция;
-
наследование;
-
полиморфизм.
Инкапсуляция.
Классическое правило ООП утверждает, что для
обеспечения надежности нежелателен прямой доступ к полям объекта:
чтение и обновление их содержимого должно производиться посредством
вызова соответствующих методов. Это правило и называется инкапсуляцией.
Реальные объекты характеризуются не только
статическими свойствами (цвет, запах и т.д.), но и конкретными реакциями
на те или иные изменения внешней среды. Инкапсуляция позволяет во многом
изолировать класс от остальных частей программы, сделать его
самостоятельным для решения конкретной задачи. В результате класс всегда
несет в себе некоторую функциональность.
Н а п р и м е р: класс TForm содержит (инкапсулирует) в
себе все необходимое для создания Windows-окна; класс TMemo -
полнофункциональный текстовый редактор; класс TTimer - обеспечение
работы программы с таймером; класс TEdit – обеспечение ввода строковых
данных и т.п.
Инкапсуляция - мощное средство обмена готовыми к работе программными
заготовками.Наследование.
Принцип наследования означает, что создание нового
класса, лишь немного отличающегося от старого, не требует переписывания
заново уже существующих полей и методов.
В Delphi существует иерархия порождающих и
порожденных объектов. Порожденные объекты имеют доступ к описаниям всех
порождающих объектов. Любой класс может быть порожден от другого класса.
Для этого необходимо объявить, что новый класс
TNew Object = class(TOld Object);
является потомком или дочерним классом старого
класса, называемого предком или родительским классом, и добавить к нему
новые поля, методы и свойства – иными словами то, что нужно при переходе
от общего к частному. Т.о., принцип наследования обеспечивает поэтапное
создание сложных классов и разработку собственных библиотек классов.
В Object Pascal все классы являются потомками
класса TObject. Этот класс не имеет полей и свойств, но включает в себя
методы самого общего назначения, обеспечивающие весь жизненный цикл
любых объектов от их создания до уничтожения. Программист не может
создать класс, который не был бы дочерним классом TObject. Поэтому
следующие два выражения одинаково верны:
TMyObject = class(TObject);
TMyObject = class; Принцип
наследования приводит к созданию ветвящегося дерева классов, постепенно
разрастающегося при перемещении от TObject к его потомкам. Каждый
потомок дополняет возможности своего родителя новыми и передает их своим
потомкам.
Полиморфизм.
Полиморфизм – это свойство классов решать
сходные по смыслу проблемы разными способами.
В Object Pascal поведенческие свойства класса
определяются набором входящих в него методов. Изменяя алгоритм того или
иного метода в потомках класса, программист может предавать этим
потомкам отсутствующие у предка специфические свойства. Для изменения
метода необходимо перекрыть его в потомке, т.е. объявить в потомке
одноименный метод и реализовать в нем нужные действия. В результате в
объекте–родителе и объекте-потомке будут действовать два одноименных
метода, имеющие разную алгоритмическую основу и придающие объектам
разные свойства. Это называется полиморфизмом объектов.
Наглядный пример использования полиморфизма дает
сама Delphi. В ней имеется класс TComponent, на уровне которого
сосредоточены определенные «правила» того, как взаимодействовать со
средой разработки и с другими компонентами. Следуя этим правилам, можно
порождать от TComponent свои компоненты, настраивая Delphi на решение
конкретных специальных задач.
Составляющие класса.
Поля.
Полями называются инкапсулированные в классе
данные. Поля могут быть любого типа, в том числе, классами.
Например: TMyClass = class
AIntField:
integer;
AStrField:
string;
AObjField:
TObject;
end;
Каждый объект получает уникальный набор полей, но
общий для всех объектов данного класса набор методов и свойств.
Фундаментальный принцип инкапсуляции требует обращаться к полям только с
помощью методов и свойств класса.
Однако, в Object Pascal разрешается обращаться к
полям напрямую.
Например: var AObject:
TMyClass;
begin
…
AObject.
AIntField:= 0;
AObject.
AStrField:= ‘Строка’;
…
end;
Класс-потомок получает все поля всех своих предков
и может дополнять их своими, но он не может переопределять их или
удалять. Т.о., чем ниже в иерархии располагается класс, тем больше
данных получают в свое распоряжение его объекты.
Методы.
Инкапсулированные в классе процедуры и функции
называются методами. Они объявляются так же, как и обычные подпрограммы.
Например: type TMyClass = class
Function
MyFunc (A Par: integer): integer;
Procedure
MyProc;
end;
Доступ к методам класса, как и к его полям,
возможен с помощью составных имен.
Например: var AObgect: TMyClass;
begin
…
AObgect. MyProc;
…
end;
… .Show; … . Hide; …
.Draw
Свойства.
Свойства – это специальный механизм классов,
регулирующий доступ к полям. Свойства объявляются с помощью
зарезервированного слова properti.
Свойство связано с некоторым полем и указывает те
методы класса, которые должны использоваться при записи в это поле или
при чтении из него.
Внешне свойство выглядит в точности как обычное
поле, но за всяким обращением к нему могут стоять нужные вам действия.
Например, если есть объект, представляющий квадрат на экране, и его
свойству «цвет» присвоить значение «красный», то произойдет немедленная
перерисовка, приводящая реальный цвет на экране в соответствие значению
свойства.
В методах, входящих в состав свойств, может
осуществляться проверка устанавливаемой величины на попадание, в
допустимый диапазон значений, и вызов других процедур, зависящих от
вносимых изменений.
События – это свойства процедурного типа,
предназначенные для создания пользовательской реакции на те или иные
входные воздействия.
Все события в Delphi принято именовать с «On»:
On Create, OnMouseMove, On Paint и т.п.
Все события собраны на закладке Events в
Инспекторе объектов.
Поскольку события – это свойства объекта, их
значения можно изменять во время выполнения программы. Такая
замечательная возможность называется делегированием. В любой момент
можно взять способы реакции на события у одного объекта и присвоить
(делегировать) их другому.
Принцип делегирования позволяет избежать
трудоемкого процесса порождения новых дочерних классов для каждого
специфического случая, заменяя его простой подстановкой процедур.
Object Pascal – язык программирования,
предназначенный для создания приложений в стиле ООП.
С одной стороны, это прежний язык Pascal (все
его основные конструкции сохранены).
С другой стороны, важнейшая составная часть
языка – модель объектов – подверглась коренному преобразованию. Под
моделью объектов здесь нужно понимать те принципы ООП, которые воплощены
в языке и определяют правила пользования объектов.
Состав Интегрированной Среды Разработки (ИСР)
Delphi
Запустить Delphi можно:
выбрав пиктограмму Delphi в главном меню Windows
Пуск | Программы;
выбрав пиктограмму Delphi в главном меню Windows
Пуск | Выполнить | C:\Program Files\Borland\Delphi4\Bin\delphi32.exe
Общий вид окна ИСР
Интегрированная Среда Разработки (Integrated
Development Environment — IDE, в дальнейшем мы будем использовать для
нее аббревиатуру ИСР) - это среда, в которой есть все необходимое для
проектирования, запуска и тестирования приложений и где все нацелено на
облегчение процесса создания программ.
ИСР интегрирует в себе редактор кодов, отладчик,
инструментальные панели, редактор изображений, инструментарий баз
данных.
В верхней части окна ИСР находится полоса главного
меню. Ниже расположены две инструментальные панели. Левая панель
содержит два ряда быстрых кнопок, дублирующих некоторые наиболее часто
используемые команды меню. Правая панель содержит палитру компонентов
библиотеки визуальных компонентов (Visual Component Library — VCL).
В основном поле слева находится окно Инспектора
Объектов (Object Inspector), в котором задают свойства компонентов и
обработчики событий. Справа - окно пустой формы. Под ним расположено
окно Редактора Кодов.
Полоса главного меню и всплывающее меню
Разделы меню File (файл) позволяют создать новый
проект, новую форму, открыть ранее созданный проект или форму,
сохранить проекты или формы в файлах с заданными именами.
Разделы меню Edit (правка, редактирование)
позволяют выполнять обычные для приложений Windows операции обмена с
"буфером Clipboard, а также дают возможность выравнивать группы
размещенных на форме компонентов по размерам и местоположению.
Разделы меню Search (поиск) позволяют осуществлять
в коде нашего приложения поиск и контекстные замены, которые
свойственны большинству известных текстовых редакторов.
Разделы меню View (просмотр) позволяют вызывать на
экран различные окна, необходимые для проектирования.
Разделы меню Project позволяют добавлять и убирать
из проекта формы, задавать опции проекта, компилировать проект без его
выполнения и делать много других полезных операций.
Меню Run (выполнение) дает возможность выполнять
проект в нормальном или отладочном режимах, продвигаясь по шагам,
останавливаясь в указанных точках кода, просматривая значения
переменных и т.д.
Меню Component в Delphi 5 позволяют создавать и
устанавливать новые компоненты, конфигурировать палитру компонентов,
работать с пакетами packages.
Разделы меню Database в Delphi 5 позволяют
использовать инструментарий для работы с базами данных.
Меню Tools (инструментарий) включает ряд разделов,
позволяющих выполнять различные вспомогательные программы, например,
вызывать Редактор Изображений (Image Editor), работать с программами,
конфигурирующими базы данных и сети и т.д. Кроме того, в это меню вы
можете сами включить любые разделы вызывающие те или иные приложения, и
таким образом расширить возможности главного меню Delphi, приспособив
его для своих задач.
Разделы меню Workgroups позволяют осуществлять
операции, связанные с разработкой больших проектов, в которых
задействовано много исполнителей.
Меню Help (справка) содержит разделы, помогающие
работать со встроенной в Delphi справочной системой.
В Delphi имеется система контекстных всплывающих
меню. Большинство разделов этих контекстных меню дублируют основные
разделы главного меню.
Быстрые кнопки
Назначение быстрых кнопок, расположенных на
инструментальных панелях Delphi 5 можно узнать из ярлычков,
появляющихся, если вы поместите курсор мыши над соответствующей кнопкой
и на некоторое время задержите его.
Задание: составьте таблицу назначений быстрых
кнопок.
Палитра компонентов
Палитра компонентов — это витрина библиотеки
визуальных компонентов (Visual Component Library — VCL). Она позволяет
сгруппировать компоненты в соответствии с их смыслом и назначением. Эти
группы или страницы снабжены закладками.
Число предопределенных компонентов возрастает от
версии к версии.
По умолчанию в ней имеются страницы:
Standard - Стандартная, содержащая наиболее часто
используемые компоненты.
Additional- Дополнительная, являющаяся дополнением
стандартной.
Win32- 32-битные компоненты в стиле Windows 95/98
и NT .
System - Системная, содержащая такие компоненты,
как таймеры, плееры и ряд других.
Data Access-Доступ к данным через Borland Database
Engine (BDE) Data Controls -Управление данными
Data controls с Interbase, минуя Borland Database
Engine (BDE) и Active Data Objects (ADO) (только начиная с Delphi 5)
Midas Построение приложений баз данных с
параллельными потоками (только в вариантах Client/Server и Enterprise и
только начиная с Delphi 4)
Internet Интернет, компоненты для приложений,
работающих с Интернет (только начиная с Delphi 2)
Qreport Быстрая подготовка отчетов
Dialogs Диалоги, системные диалоги типа «Открыть
файл» и др.
Win З.1 Windows 3-х, компоненты в стиле Windows
З.х
Samples Образцы, различные интересные, но не до
конца документированные компоненты
Чтобы перенести компонент на форму, надо открыть
соответствующую страницу библиотеки и указать курсором мыши
необходимый компонент. При этом кнопка-указатель, размещенная в левой
части палитры компонентов, приобретет вид не нажатой кнопки. Это
значит, что вы находитесь в состоянии, когда собираетесь поместить
компонент на форму. Поместить выбранный компонент на форму очень просто
— надо сделать щелчок мышью в нужном месте формы.
Есть и другой способ поместить компонент на форму —
достаточно сделать двойной щелчок на пиктограмме компонента, и он
автоматически разместится в центре вашей формы. Если вы выбрали
компонент, а затем изменили ваше намерение размещать его, вам достаточно
нажать кнопку указателя. Это прервет процесс размещения компонента, и
программа вернется в нормальный режим, в котором вы можете выбирать
другой компонент или выполнять какую-то команду.
Имена компонентов, соответствующих той или иной
пиктограмме, вы можете узнать из ярлычка, появляющегося, если вы
задержите над этой пиктограммой курсор мыши. Если вы выберите в палитре
компонент и нажмете клавишу F 1 то вам будет показана справка по типу
данного компонента. Тут надо сразу сделать одно замечание. Имена на
ярлычках выглядят, например, так: MainMenu, Button и т.д. Однако, в
Delphi все имена классов в действительности начинаются с символа «Т»,
например, TMainMenu, TButton. Под такими именами вы можете найти
описания соответствующих компонентов во встроенной в Delphi справочной
системе.
Окно формы
Основой почти всех приложений Delphi является
форма. Ее можно понимать как типичное окно Windows. Форма является
основой, на которой размещаются другие компоненты.
Форма имеет:
-
управляющее меню в верхнем левом углу,
-
полосу заголовка, занимающую верхнюю часть,
-
кнопки развертывания, свертывания и закрытия.
Во время проектирования форма покрыта сеткой из
точек. В узлах этой сетки размещаются те компоненты, которые вы
помещаете на форму. Во время выполнения приложения эта сетка, конечно,
не видна.
Для компонентов (или для формы в целом) можно
получить контекстную справку, если выделить интересующий компонент и
нажать клавишу F1.
Окно Редактора Кода
Редактор Кода является полноценным программным
редактором. В редакторе применяется выделением цветом синтаксических
элементов. Жирным шрифтом выделяются ключевые слова Object Pascal. Синим
курсивом выделяются комментарии.
В заголовке окна Редактора Кода отображается имя
текущего рабочего файла. Приложения Delphi могут использовать много
исходных форм и файлов и закладки помогают вам переходить от одного из
них к другому. Вы можете также открыть дополнительное окно Редактора
Кода (командой View | New Edit Window или щелчком в окне правой кнопкой
мыши и выбором аналогичного раздела из контекстного меню) и одновременно
работать с двумя модулями или с двумя разными фрагментами одного модуля.
В нижней части окна Редактора Кода вы можете видеть
строку состояния. В самой левой ее позиции находится индикатор строки и
колонки. Это помогает вам понимать, в каком месте кода вы находитесь.
Второй элемент строки — индикатор модификации.
Когда вы начинаете новый проект, то код, который Delphi автоматически
написала для вас, еще не сохранен. Вы должны сделать это сами командой
File | Save. Если код изменялся вами или Delphi с того момента, когда вы
в последний раз сохраняли его в файле, то в индикаторе модификации
(правее индикатора строки и колонки) появляется слово «Modified». Это
слово показывает вам, что код, который вы видите, не тот же самый, что
на диске.
Третий элемент строки состояния — индикатор режима
вставки. Это стандартный индикатор большинства редакторов, который
показывает вам, будут ли вводимые символы вставляться в текст или
писаться поверх текста. Переключение режима «ставки производится
клавишей Insert.
В окно Редактора Кода, как и в другие окна Delphi,
встроена контекстная справка. Чтобы получить справку по какому-то слону
кода (ключевому слову, написанному имени функции и т.п.), достаточно
установить курсор на это слово и нажать клавишу F1. Вам будет показана
соответствующая тема справки.
Инспектор Объектов
Инспектор Объектов (Object Inspector) обеспечивает
простой и удобный интерфейс для изменения свойств объектов Delphi и
управления событиями, на которые реагирует объект.
Окно Инспектора Объектов имеет:
-
выпадающий список всех компонентов формы;
-
страница свойств (Properties) выделенного
компонента или формы;
-
страница обработки событий (Events) выделенного
компонента или формы.
Изменение свойств можно выполнять несколькими
способами:
-
непосредственно вводить значение произвольным
образом. Например, свойство Caption.
-
выбирать значение из списка возможных значений.
Например, свойство Color, Visible.
-
сложное свойство выделяется знаком + слева и
определяется множеством значений через диалоговое окно или через
раскрывающийся дополнительный список под свойств. Например, свойство
Font (шрифт).
На странице событий (Events) указаны все события,
на которые может реагировать выбранный объект. Например, для формы
определены события OnCreate, OnShow, OnHide.
Пользуясь Инспектором Объектов, можно получить
контекстную справку по свойствам или событиям, если выделите
интересующее свойство или событие и нажать клавишу F1.
|