Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все ответы.docx
Скачиваний:
8
Добавлен:
26.09.2019
Размер:
2.71 Mб
Скачать

13. Библиотека визуальных компонентов Delphi. Назначение vcl

VCL – одна из трех основных составляющих Delphi:

    • Язык (Object Pascal)

    • Среда разработки (Delphi)

    • Набор готовых функций и классов (VCL)

Структура vcl

Дерево наследования классов VCL:

//Подробно про дерево – в распечатке 03VCL. Глупо сюда перепечатывать.

14. Основные события Delphi. Методы обработки событий.

События в программировании, как и события реального мира - это какие-либо операции, происходящие в установленное время. Установленное время - это не конкретное время с точки зрения часов, это просто отклики на какие-то другие действия и изменения. События присущи объектно-ориентированному программированию и являются одной из важных черт операционной системы Windows. Работа программ с визуальным (графическим) интерфейсом немыслима без событий. Delphi предоставляет полный доступ для работы с событиями и немного упрощает программирование обработчиков событий.

Практически все объекты реагируют на определённые события от мыши и клавиатуры.

Приложения Windows используют методы (подпрограммы) обработки событий для управления взаимодействием между программой и пользователем и для реакции на действия ОС. Программный код, который пишет программист в Delphi, будет обеспечивать реакцию на события. Подпрограмма, которая реагирует на событие, называется обработчиком события. Delphi работает с событиями путём вызова определённых процедур – обработчиков событий. Если процедура не связана с данным событием, то оно игнорируется и выполняется стандартная реакция системы или не производится никакого действия.

//Классификацию я не нашла, внезапно. Если кто-то вдруг её обнаружит, будет офигенно.

Основные свойства и события TControl:

Свойства:

Свойства позиционирования: Top, Left, Width, Height, Align, Anchors

Свойства клиентской области : ClientHeight, ClientOrigin, ClientRect, ClientWidth

Свойства внешнего вида: Visible, Enabled, Font, Color

Строковые свойства: Caption, Text, Hint

События:

События левой кнопки мыши: OnClick, OnDblClick,

Общие события мыши : OnMouseDown, OnMouseMove, OnMouseUp

Поддержка перетаскивания: OnDragDrop, OnDragOver, OnEndDrag

//Более подробно все они описаны в файле 03VCL, почитайте обязательно.

15. Объектно-ориентированный подход при разработке программы. Основные принципы объектно-ориентированного программирования.

16. Определение класса и объекта.

Класс как совокупность объектов со схожим состоянием и поведением.

В ООП при написании классов выделяют две стороны:

интерфейс;

реализация.

Интерфейс – декларативная часть класса, описывает «внешнему миру» абстракцию класса, его облик, в определенном смысле контракт – «обязуюсь делать то-то и то-то». Выделяют три уровня интерфейса:

Public (общедоступный, открытый) – элементы класса, доступные всем, кто использует класс и/или его объекты

Protected (защищенный) – элементы класса, доступные в классах производных (наследующих) от данного.

Private (закрытый) – элементы класса, доступные только изнутри класса, а так же из некоторых особо выделенных классов и функций (в разных ОО языках существуют разные способы указания таких классов и функций).

Реализация – императивная (процедурная) часть класса, не видна (в идеале или в подавляющем числе случаев и не существенна) для остального мира, «то-то и то-то делаю так-то и так-то»

Описание класса

Перейдем к классу, как элементу конкретного ОО-языка – Delphi. Итак, прежде всего класс – это тип данных. Так же как и другие типы, классы описываются в разделах type модуля, как интерфейсной (interface), так и реализационной (implementation) части модуля. Вообще говоря, описание классов в реализационной части – явление не распространенное, хотя и не запрещенное синтаксисом языка.

Начинается описание (интерфейсная часть класса) со строки:

<имя класса> = class [(<имя класса-предка>)]

а заканчивается ключевым словом end;

где <имя класса> – правильный идентификатор, а <имя класса-предка> – имя класса, описание которого доступно в данной точке программы (т.е. он описан или предварительно описан выше по тексту модуля или находится в интерфейсной части используемого модуля).

Все, что между этими строками – список элементов (членов) класса. Если указан класс-предок и нет ни одного нового элемента в классе, то ключевое слово end можно опустить. Такое описание называется кратким описанием класса.

Интерфейс класса состоит из произвольного количества произвольно чередующихся секций (атрибутов доступа или доступности или видимости):

public, protected, private, published и automated

Значение первых трех областей видимости совпадает с указанным выше. Для секции private способ указания функций и классов, видящих эти элементы — размещение в одном модуле с классом. Последние две по области видимости приравнены к public, но имеют некоторую дополнительную чисто техническую нагрузку. Кроме того, применение ключевого слова automated признано устаревшим и оставлено только для обратной совместимости с предыдущими версиями, оно рассматриваться далее в курсе не будет. Ключевое слово published будет рассмотрено в теме «VCL». Действие атрибута распространяется на элементы класса, описанные по тексту после него до момента появления другого атрибута или конца объявления класса. В начале описания класса может присутствовать секция, не имеющая явно указанного атрибута видимости, она в различных случаях расценивается или как public, или как published (этот нюанс будет рассмотрен в теме «VCL»).

Существует понятие предварительного описания классов (необходимо, когда два класса в одном модуле ссылаются друг на друга). В таком случае один из них (или оба) предварительно (до того как упоминаются) описываются следующим образом:

<имя класса> = class;

Подчеркиваем: даже если у класса есть предок – он не указывается, иначе определение будет воспринято как сокращенная форма настоящего определения класса, а не как предварительное описание.

Различают следующие элементы класса:

поле;

метод;

свойство.

В пределах каждой секции видимости поля предшествуют методам и свойствам.

Поля

Поле – это физически хранимый в экземплярах класса элемент данных. Набор полей и их значений отражает состояние объекта. Поля полностью относятся к декларативной части класса и аналогичны полям типа записи (record). Поля описываются следующим образом:

<имя поля>:<тип поля>;

где <имя поля> – правильный уникальный в пределах класса идентификатор,

а <тип поля> – доступный в данной точке программы тип (т.е. тип, описанный ранее по тексту модуля или описанный в интерфейсной части используемого модуля или встроенный тип Delphi), кроме файловых типов.

Методы

Метод – описанная внутри класса и связанная с экземплярами класса (т.е. имеющая доступ ко всем элементам класса) процедура или функция. Совокупность методов описанных в классе (а так же и унаследованных) отражает поведение экземпляров класса.

Методы классифицируются на:

Конструкторы (создают в памяти и/или инициализируют состояние объекта);

Деструкторы (освобождают память и/или состояние объекта);

Модификаторы (изменяют состояние объекта);

Селекторы (возвращают некоторую характеристику состояния);

Итераторы (организуют доступ к частям объекта в строго определенном порядке).

Методы – единственный вид элементов класса, у которых присутствует как декларативная (объявление), так и императивная (определение, реализация) часть. Декларативная часть находится внутри объявления класса.

Свойства… (у него выделено серым.. и помойму мы их не разбирали ;) )

Объявление объекта

Объект или экземпляр класса (в терминах Delphi) – это переменная типа класс. Соответственно, объявление объекта (а если быть точным, ссылки на объект) может располагаться в разделе var (любом – глобальном или локальном) или в пределах объявления другого класса или записи. Очень важно помнить, переменная-объект – это всего лишь адрес памяти. Мало объявить переменную. Прежде чем использовать объект, его нужно создать (т.е. выделить память и инициализировать) при помощи конструктора. Из этого логически вытекает, что операция присваивания не копирует объект, а лишь адрес, т.е. после ее выполнения две переменные указывают на один и тот же объект.

Ex.

var

O1, O2: TSomeObject;

O2 := O1; // обе переменные указывают на один и тот же объект в памяти

Доступ к элементам класса извне класса осуществляется через оператор «точка» (.):

<имя объекта>.<имя элемента>

Доступ к элементам класса из методов, описанных в нем (для того же объекта, для которого вызван метод), осуществляется просто по имени элемента.

Ex.

Доступ к элементам класса:

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

T1 = class

private

a: Integer;

public

procedure SomeMethod;

end;

{ T1 }

procedure T1.SomeMethod;

begin

Writeln(a); // доступ к элементам класса из его же метода

end;

var

O1: T1;

begin

O1 := T1.Create;

O1.SomeMethod; // доступ к элементам класса извне

end.