Объектно-ориентированное программирование. 5
ВВЕДЕНИЕ
Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения, что и обусловило актуальность моей работы. В данной курсовой работе затронуты такие вопросы как «библиотеки классов», «иерархия классов», а так же нужно написать в среде разработки «Delphi» программу, которая будет иметь функции простого файлового менеджера. Работа над этой курсовой работой должна углубить и расширить теоретические знания по объектно-ориентированному языку программированию Object Pascal (Delphi).
ЦЕЛЬ РАБОТЫ
Цель курсовой работы по «Объектно-ориентированному программированию» заключается в том что бы выполнить теоретическую и практическую часть по отдельным вопросам.
- Раскрыть понятие библиотеки классов.
- Разработать приложение позволяющее выполнять функции файлового менеджера.
- Рассказать о назначении и интерфейсе приложения. Сделать скриншоты программы.
- Блок-схемы основных процедур.
- Листинг с комментариями.
- Требования к программным и аппаратным устройствам.
- Предоставить руководство пользователя.
В заключении стоит подвести итоги, указать на достоинства и недостатки программы.
СОДЕРЖАНИЕ
Введение
Цель работы
- Теоретическая часть «Библиотеки классов. Иерархия классов»
1.1Общие сведенья о библиотеках классов.
1.2 Иерархия классов
- Практическая часть «Файловый м
енеджер»
2.1 Назначение и интерфейс приложения
2.2 Блок-схемы основных процедур
2.3 Листинг с комментариями
2.4 Требования к аппаратным и программным устройствам
2.5 Руководство пользователя
Заключение
Список литературы и ресурсов
БИБЛИОТЕКИ КЛАССОВ. ИЕРАРХИЯ КЛАССОВ.
1.1 Библиотеки классов.
Классами в Delphi называются специальные типы, которые содержат поля, методы и свойства. Как и любой другой тип, класс служит лишь образцом для создания конкретных экземпляров реализации, которые называются объектами. Сразу же уточню, что в предшественнике Delphi - Turbo Pascal объектами называются типы, имеющие много общего с классами Delphi. Однако существенные усовершенствования, внесенные в объектную модель Delphi, заставили разработчиков языка ввести для обозначения объектов специальный термин - класс, заимствованный, кстати, из Си++.
Важным отличием классов от других типов является то, что объекты класса всегда распределяются в куче, поэтому объект-переменная фактически представляет собой лишь указатель на динамическую область памяти. Однако в отличие от других указателей при ссылке на содержимое объекта запрещается использовать символ “^” за именем объекта:
type
TMyClass = class(TObject) Field: Integer;
end;
var
MyClass: TMyClass;
begin
MyClass^.Field := 0; // Ошибка! Следует писать так:
MyClass.Field := 0;
end;
Классы - это особое “изобретение” программистов для упрощения разработки сложных программ и улучшения их качества. В основе классов лежат три фундаментальных принципа, которые называются инкапсуляция, наследование и полиморфизм.
Инкапсуляция
Класс представляет собой единство
трех сущностей - полей, методов и
свойств. Объединение этих сущностей
в единое целое и называется инкапсуляцией.
Инкапсуляция позволяет во многом изолировать
класс от остальных частей программы,
сделать его “самодостаточным”
для решения конкретной задачи. В
результате класс всегда несет в
себе некоторую функциональность. Например,
класс т Form содержит (инкапсулирует
в себе) все необходимое для
создания Windows-окна, класс тмето представляет
собой полнофункциональный
Инкапсуляция представляет собой мощное средство обмена готовыми к работе программными заготовками. Библиотека классов Delphi - это фактически набор “кирпичиков”, созданных программистами Borland для построения ваших программ.
Наследование
Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса-родителя:
TChildClass = class (TParentClass)
Порожденный класс автоматически наследует поля, методы и свойства своего родителя и может дополнять их новыми. Таким образом, принцип наследования обеспечивает поэтапное создание сложных классов и разработку собственных библиотек классов.
Все классы Delphi порождены от единственного родителя класса TObject. Этот класс не имеет полей и свойств, но включает в себя методы самого общего назначения, обеспечивающие весь жизненный цикл любых объектов - от их создания до уничтожения. Программист не может создать класс, который не был бы дочерним классом TObject. Следующие два объявления идентичны:
TaClass = class(TObject) TaClass = class
Принцип наследования приводит к созданию
ветвящегося дерева классов, постепенно
разрастающегося при
Полиморфизм
Полиморфизм - это свойство классов решать схожие по смыслу проблемы разными способами. В рамках Delphi поведенческие свойства класса определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разную алгоритмическую основу и, следовательно, придающих объектам разные свойства. Это и называется полиморфизмом объектов.
В Delphi полиморфизм достигается не только описанным выше механизмом наследования и перекрытия методов родителя, но и их виртуализацией, позволяющей родительским методам обращаться к методам своих потомков.
Все классы библиотеки визуальных компонентов произошли от группы базовых классов, которые лежат в основе иерархии VCL. Самый общий предок компонентов — это класс TObject, инкапсулирующий простейший объект. Как известно, каждый объект наследует свойства и методы родительского класса. К объекту можно добавить новые свойства и методы, но нельзя удалить унаследованные. Объект-наследник в свою очередь может стать родительским для нового класса, который унаследует возможности всех своих предков.
Поэтому иерархия базовых классов
VCL продумана чрезвычайно
1.2 Иерархия классов
Классы библиотеки VCL используют механизм простого наследования: один класс может иметь только одного предка. Корнем иерархии классов является класс TObject. Любой класс VCL-библиотеки наследуется от класса TObject.
На рис. 1.2 представлена корневая часть дерева иерархии классов VCL-библиотеки.
Рис.1.2 Иерархия классов VCL-библиотеки
Класс TObject
Класс TObject инкапсулирует общие черты поведения всех объектов VCL-библиотеки. Если при создании нового объекта не указан базовый класс, то Delphi автоматически использует как предка класс TObject.
Объявление нового класса выполняется в секции type. Если после слова class в скобках не указано никакого наследуемого класса, то по умолчанию предполагается, что создаваемый класс наследуем от класса TObject.
Например:
type TMyClass = class // Эти два объявления
type TMyClass = class(TObject) //являются эквивалентными
Класс TComponent
TComponent является предком всех компонентов VCL-библиотеки.
Все потомки данного класса могут
быть расположены в палитре
Родительским элементом управления называется тот, в который непосредственно помещен данный компонент.
Владельцем всех компонентов, расположенных в форме, является сама форма. Владельцем всех форм является приложение. Если компонент расположен не непосредственно в форме, а, например, в компоненте типа TPanel, то владелец и родительский элемент управления у него будут различны.
Класс предоставляет большой набор свойств, включая следующие:
- ComObject - определяет ссылку на интерфейс, наследуемый от IUnknown и реализованный компонентом. Используется только для компонентов, поддерживающих СОМ-интерфейс.
- ComponentCount - указывает количество компонентов, принадлежащих данному компоненту.
- ComponentIndex - указывает индекс компонента в массиве Components владельца данного компонента. Первый компонент в списке имеет индекс 0.
- Components - список всех компонентов, принадлежащих данному компоненту. Используется для ссылки на компонент по его индексу или для последовательного доступа ко всем компонентам, принадлежащих данному компоненту.
- Name - указывает имя компонента, используемое в коде программы для доступа к его свойствам и методам. При создании компонента Delphi автоматически назначает ему имя на основе имени класса компонента.
- Owner - указывает компонент, владеющий данным компонентом. Компонент всегда удаляется (освобождается память) при удалении его владельца.
Класс TControl
TControl - это базовый класс всех элементов управления (включая и окно формы). Эти компоненты могут быть видимы во время выполнения. Для них определены такие свойства, как позиция, курсор, всплывающая подсказка, методы для рисования или перемещения элемента управления, события для манипуляций с помощью мыши.
Класс предоставляет большой набор свойств, включая следующие:
- Action - назначает действие (объект action), ассоциируемый с данным элементом управления.
- AutoSize - определяет, будет ли элемент управления автоматически изменять свой размер при изменении его содержимого.
- TCaption - определяет строку, отображаемую как заголовок окна или метку. Символ & в заголовке указывает, что следующий за ним символ будет отображаться подчеркнутым. Такой символ определяет клавишу-акселератор. При одновременном нажатии этой клавиши и клавиши Alt происходит перемещение фокуса ввода на данный элемент управления. Для того, чтобы показать в заголовке сам символ амперсанда, следует ввести два символа &&.
- Color - позволяет определять или изменять фоновый цвет элемента управления. Если значение свойства ParentColor равно True, то при изменении фона родительского элемента управления происходит и автоматическое изменение фона дочернего элемента управления.
- Enabled - определяет, доступен ли элемент управления.
- Font - определяет атрибуты текста, такие, как шрифт, начертание, размер, цвет и т.п.
- Height и Width - определяют вертикальный и горизонтальный размер элемента управления в пикселях.
- HelpType - определяет, каким образом для элемента управления будет специфицирована тема файла справки. Если значение свойства равно htContext, то ID справки содержится в свойстве HelpContext. Если значение свойства равно htKeyword, то тему справки определяет свойство HelpKeyword.
- HelpContext - определяет числовой ID темы справки, отображаемой как контекстно-зависимая справка.
- HelpKeyword - определяет тему в файле справки.
- Hint - содержит подсказку, отображаемую при расположении и задержании указателя мыши над элементом управления. Подсказка отображается только, если значение свойства ShowHint установлено равным True.
- Left - определяет горизонтальную координату элемента управления относительно его родительского элемента.
- Parent - указывает родительский элемент управления.
- ParentColor и ParentFont - если это свойства равны true, то используются цвет и шрифт родительского элемента управления.
- PopupMenu - определяет всплывающее меню (контекстное меню), ассоциируемое с данным элементом управления. Если свойство AutoPopup объекта типа TPopupMenu равно True, то меню будет отображаться автоматически. Если это свойство равно False, то для отображения всплывающего меню следует в обработчике события OnContextPopup вызвать метод Popup.
- ShowHint - определяет, будет ли для элемента управления отображаться окно всплывающей подсказки.
- Text - содержит строку текста, располагаемую в элементе управления.
- Visible - определяет, является ли компонент видимым.
- Класс предоставляет большой набор методов, включая следующие:
- Click - инициирует событие OnClick.
- Create - создает экземпляр класса TControl и выполняет инициализацию его свойств.
- DblClick - инициирует событие OnDblClic.
- Hide - скрывает элемент управления.
- Refresh - сразу перерисовывает на экране элемент управления, вызывая метод Repaint.
- Show - делает элемент управления видимым, одновременно устанавливая значение его свойства Visible равным True.
Класс TWinControl
Класс TWinControl является базовым классом всех оконных элементов управления.
Класс предоставляет большой набор свойств, включая следующие:
- ControlCount - указывает количество дочерних элементов управления.
- Controls - содержит список всех дочерних элементов управления.
- TabOrder - указывает номер элемента управления в табулированном порядке родительского элемента управления.
Класс TApplication
Класс TApplication инкапсулирует объект "Windows-приложение". Посредством этого класса определяется интерфейс между разработчиком и средой Windows. В каждом приложении Delphi всегда автоматически создается один объект Application как экземпляр класса приложения. Для большинства приложений этот объект является экземпляром класса TApplication. Компонент TApplication не отображается в палитре компонентов и не имеет публикуемых свойств. Для того чтобы иметь возможность перехватывать события для приложения, используя среду разработки IDE, можно добавить в любую форму проекта компонент TApplicationEvents.
Класс предоставляет большой набор свойств, включая следующие:
- HelpFile - определяет имя файла справки.
- Icon - определяет пиктограмму, отображаемую в строке вместе с именем приложения.
- MainForm - определяет главную форму приложения. Она действует как главное окно приложения. При закрытии этой формы завершается и работа приложения.
- ShowMainForm - если значение свойства равно True (по умолчанию), то главное окно приложения показывается автоматически при запуске приложения. Чтобы при запуске приложения главное окно приложения было скрыто, следует в главном файле проекта до выполнения метода Application.Run установить значение данного свойства равным False и одновременно для формы, определенной как главное окно приложения, установить значение свойства Visible равным False.
- Title - определяет заголовок приложения.
Класс TScreen
Каждое приложение Delphi имеет глобальную переменную Screen типа TScreen. Эта переменная определена как var Screen: TScreen;.
Компонент TScreen, так же как и компонент TApplication, недоступен из инспектора объектов. Этот компонент предназначен для обеспечения доступа к устройству вывода - экрану. Его свойства содержат информацию об используемом разрешении монитора, курсорах и шрифтах, доступных для приложения, списке форм приложения и активной форме.
Класс TForm
TForm является базовым классом для создания окна формы.
По умолчанию каждая новая создаваемая форма реализуется как потомок класса TForm. Форма может быть:
- главным окном приложения;
- диалоговым окном;
- дочерним окном MDI-окна.
Класс предоставляет большой набор свойств, включая следующие:
- Active - определяет, является ли форма активной.
- ActiveControl - определяет элемент управления формы, имеющий фокус ввода.
Например:
if ActiveControl <> nil then
ActiveControl.Left := ActiveControl.Left + 1;
end;
- ActiveMDIChild - определяет активное дочернее окно MDI-приложения;
- BorderStyle - определяет внешний вид и поведение рамки окна формы;
- FormStyle - определяет стиль формы, который указывается одним из следующих значений:
- fsNormal - форма определена как простая SDI-форма и не является ни дочерним, ни родительским MDI-окном;
- fsMDIChild - форма является дочерним MDI-окном.
- fsMDIForm - форма является родительским MDI-окном.
- fsStayOnTop- для формы определено поведение "всегда сверху" (она остается сверху всех других форм проекта, для которых не установлен стиль fsStayOnTop).
- HelpFile - указывает имя файла, используемого для отображения справки.
- Icon - определяет пиктограмму, отображаемую в заголовке окна формы.
- MDIChildCount - определяет количество открытых дочерних MDI-форм.
- MDIChildren - содержит список всех дочерних MDI-форм.
Например:
{Закрытие всех дочерних MDI-форм}
var Index1: Integer;
begin
with MyForm1 do
for I := MDIChildCount-1 downto 0 do
MDIChildren[Index1].Close;
end;
- Menu - определяет главное меню.
- Parent - определяет родительское окно. Если форма не имеет родителя, то значение свойства Parent равно nil.
- Position - указывает размер и позицию, используемые для первоначального отображения формы.
- WindowState - определяет, в каком виде форма появляется на экране: свернутой, полноэкранной или в нормальном представлении.
Класс формы предоставляет большой набор методов, включая следующие:
- Cascade - упорядочивает все дочерние MDI-формы, располагая их каскадом.
- Next - делает активной следующую дочернюю форму (в той последовательности, как они были открыты).
- Previous - делает активной предыдущую дочернюю форму.
- Tile - упорядочивает все дочерние MDI-формы таким образом, чтобы они все имели одинаковый размер и умещались одновременно в клиентской области родительского окна.
Например:
{Обработчик события для команды меню Windows | Tile}
procedure TForm1.TileFormsClick(Sender: TObject);
begin
this.TileMode := tbVertical;
this.Tile;
end;
Класс формы является контейнером для всех компонентов, размещаемых на форме. Для доступа к свойствам формы или именам компонентов можно использовать ключевое слово this. Если перед именем свойства отсутствует какой-либо идентификатор, то по умолчанию предполагается, что это свойство формы.
Класс TMainMenu
Класс TMainMenu инкапсулирует поведение линейки меню (menu bar) и соответствующих ниспадающих меню (drop-down menus) для окна формы.
Этот класс определяет свойства и методы, позволяющие соединять ниспадающие меню главного меню с главными меню других форм и помогающие взаимодействовать с меню для OLE-объектов.
Процесс создания меню формы очень прост. Он состоит из трех этапов:
- добавления в форму компонента класса TMainMenu;
- выполнения на нем двойного щелчка мышью и ввода в открытое далее окно заголовков всех пунктов линейки меню и пунктов ниспадающих меню;
- определения кода обработчиков событий для каждого пункта меню.
Если требуется
Класс предоставляет набор свойств, включая следующие:
- AutoMerge - определяет возможность слияния меню. Каким образом меню будут объединяться, зависит от значения свойства GroupIndex каждого отдельного пункта меню;
- Handle - обеспечивает доступ к дескриптору меню. Это свойство используется для функций Windows API, требующих дескриптора меню.
Класс TMenuItem
Класс TMenuItem реализует поведение пунктов меню. Контейнером для объектов типа TMenuItem может быть компонент типа TMainMenu (линейка главного меню) или компонент типа TPopupMenu (контекстное меню).
При создании меню на этапе проектирования редактор меню Menu Designer автоматически создает объекты типа TMenuItem для каждой команды меню.
Класс предоставляет набор свойств, включая следующие:
- Action - определяет объект действие (Action), ассоциируемый с пунктом меню. По умолчанию для каждого пункта меню стандартным событием считается OnClick и обработчиком события является процедура, имя которой автоматически формируется из имени формы и имени объекта "пункт меню", указанных через точку (например, TForm1.item12Click). Объект "действие" позволяет определить одну процедуру обработки события, которую далее можно будет многократно использовать для различных объектов при обработке событий.
- AutoHotkeys - определяет, будут ли клавиши-акселераторы для элементов подменю устанавливаться автоматически.
- Bitmap - определяет изображение, отображаемое слева от заголовка меню.
- Break - определяет, будет ли пункт меню располагаться в новом столбце меню.
- Caption - определяет текст пункта меню. Если перед буквой в заголовке пункта меню стоит символ &, то данная буква называется клавишей-акселератором, а выбор пункта меню может быть выполнен одновременным нажатием Alt и клавиши-акселератора.
- Checked - определяет, будет ли маркер переключателя появляться в пункте меню слева от заголовка.
- Default - определяет, является ли данный пункт меню пунктом, выполняемым по умолчанию при двойном щелчке мышью на родительском подменю. Пункт меню, выполняемый по умолчанию, отмечается полужирным начертанием.
- Enabled - определяет, доступен ли пункт меню.
- GroupIndex - указывает логическую группу, к которой принадлежит пункт меню (группы используются для управления слиянием пунктов меню).
По умолчанию все пункты линейки меню имеют одинаковое значение GroupIndex. При использовании этого свойства для слияния меню следует установить значения каждого пункта линейки меню равным предыдущему или большим.
Если значение свойстваGroupIndex - добавляемого меню совпадает со значением свойства GroupIndex - пункта главного меню, то последний заменяется на добавляемый. Если несколько пунктов меню главного окна имеет одинаковое значение свойства GroupIndex -, то и заменены они могут быть только несколькими пунктами добавляемого меню: первый пункт с одинаковым значением заменяется на первый добавляемый пункт с одинаковым значением, второй - на второй и т.д.
Если значение свойства GroupIndex добавляемого пункта линейки меню лежит между значениями свойства GroupIndex пунктов линейки меню главного окна, то добавляемый пункт вставляется между ними.
- HelpContext - указывает ID контекста справки, отображаемой для пункта меню.
- Hint - определяет текст всплывающего окна подсказки.
- ImageIndex - определяет индекс изображения, отображаемого для пункта меню. Список изображений, указываемых через индекс, содержится в свойстве Images родительского меню: для пунктов меню верхнего уровня список определяется свойством Images объекта типа TMenu или TPopupMenu, а для пунктов подменю список определяется свойством Images родительского объекта меню типа TMenuItem. Если родительское меню не содержит списка изображений в свойстве Images, то для определения отображаемого изображения будет использовано значение свойства Bitmap пункта меню.
- Items - список пунктов меню в подменю.
- MenuIndex - указывает индекс пункта меню в родительском меню.
- Parent - определяет для пункта меню его родительское меню.
- Visible - определяет, является ли пункт меню видимым.
- Класс предоставляет набор методов, включая следующие:
- Add - добавляют в конец списка Items один или несколько пунктов меню.
Например:
var NewItem: TMenuItem;
i : integer;
begin
// Создание элемента "разделительная линия":
NewItem := TMenuItem.Create(Self);
NewItem.Caption := '-'; // Заголовок пункта меню
// Добавление пункта меню к меню Windows:
Windows.Add(NewItem);
// Cоздадим и добавим пункт меню для каждой формы
for i := 0 to Screen.FormCount-1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := Screen.Forms[i].Name;
Windows.Add(NewItem);
end;
end;
- Clear - удаляет все пункты меню, указанные в списке свойства Items.
- Click - инициирует событие OnClick. Этот метод может быть переопределен разработчиком для того, чтобы запрограммировать собственный ответ на выбор пользователем пункта меню.
- Create - создает новый пункт меню.
- Delete - удаляет из списка свойства Items пункт меню с указанным индексом.
- IndexOf - возвращает позицию указанного пункта меню в списке Items.
- Insert - вставляет указанный пункт меню в заданную позицию списка Items.
Разработчик может создать один общий объект "действие" и для пункта меню, и для кнопки панели инструментов. Для определения действия на этапе проектирования следует:
- добавить в форму объект типа TactionList;
- вызвать редактор объекта "действие", выполнив на нем двойной щелчок мышью;
- добавить в открывшемся редакторе объекты "действие (типа TAction)";
- по двойному щелчку на имени любого объекта "действие" отображается редактор кода с автоматически добавленным обработчиком события для данного действия. Например:
- procedure TForm1.Action1Execute(Sender: TObject);
- begin
- end;
- Внутри блока begin end следует ввести код обработчика события;
- в завершение нужно определить для объекта "пункт меню" значение свойства Action, выбрав его из списка действий объекта типа TActionList.
Класс TPopupMenu
Класс TPopupMenu инкапсулирует поведение контекстных меню, также называемых всплывающими или popup-меню.
Он предназначен для создания меню, отображаемых при щелчке пользователя правой кнопкой мыши на элементе управления. Чтобы контекстное меню поставить в соответствие конкретному элементу управления, следует установить значение свойства PopupMenu элемента управления равным имени объекта TPopupMenu. Для этого в инспекторе объектов следует выбрать значение свойства PopupMenu из автоматически предлагаемого списка объектов типа TPopupMenu.
Базовым классом для TPopupMenu является класс TMenu.
Следующий пример иллюстрирует отображение контекстного меню в указанной точке экрана по щелчку мыши:
procedure Form1.FormCreate(Sender: TObject);
begin
PopupMenu1.AutoPopup := False;
end;
procedure Form1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
PopupMenu1.Popup(X, Y);
end;
Подводя итоги можно сказать что Delphi содержит полнофункциональную библиотеку классов, столь же полную, как и библиотека классов C++ MFC фирмы Microsoft. Без сомнений, библиотека VCL Delphi в большей степени ориентирована на компоненты. Ее классы предлагают более высокий уровень абстракции над Windows API, чем обычный уровень библиотек C++. Для работы с компонентами достаточно хорошо знать верхние узлы иерархии VCL, которым соответствуют в основном элементы палитры компонентов (но и некоторые другие компоненты). Обычно для работы с компонентами не требуется глубокого знания внутренней структуры VCL. Такие знания необходимы, когда вы создаете новый компонент или модифицируете существующий.

- Объектно-ориентированное программирование VisualC#
- Объектно-ориентированное программирование на VBA в среде Excel
- Объектно-ориентированное программирование на VBA в среде Excel
- Объектно ориентированное программирование. Простая игра
- Объектно-ориентированные СУБД
- Объектно-ориентированные СУБД
- Объектно – ориентированные языки программирования
- Объектная реализация контейнера на основе комбинированной структуры «Упорядоченный массив динамических стеков»
- Объект недвижимости: сущность и основные признаки
- Объектно-ориентированное программирование
- Объектно-ориентированное программирование
- Объектно-ориентированное программирование
- Объектно-ориентированное программирование
- Объектно-ориентированное программирование