Классы и исключения
Классы и исключения
Данная глава расскажет вам, как использовать классы в среде Kylix. Кроме того, вы узнаете, что такое исключительная ситуация и как можно самостоятельно обрабатывать исключительные ситуации. Вы научитесь создавать обработчики исключений, а также генерировать собственные исключения.
Работа с классами в Kylix
Напомним основные положения о классах, которые были достаточно подробно рассмотрены в пятой главе книги.
Класс — это абстрактное определение, инкапсулирующее понятия: свойства, методы, события и члены класса (например, локальные переменные, объявленные внутри класса).
Когда вы создаете экземпляр класса — он называется объектом. Термин "объект" часто в документации по Kylix используется более свободно, и, где различие между объектом и классом, не важно. Этот термин может обозначать класс, от которого данный объект произошел.
Часто программисту приходится создавать собственные классы для решения каких-либо задач, не предусмотренных стандартными классами CLX Kylix. Класс, который вы создаете, может иметь в качестве предка основной класс TObject или его потомок. Объявление нового класса содержит три допустимые секции, обеспечивающие доступ к полям и методам класса:
Тyре
TClassName = Class(TObject)
public
{public fields}
{public methods} protected
{protected fields}
{protected methods} private
{private fields}
{private methods} end;
Kylix позволяет вам объявлять самостоятельно нужные классы для использования их в своих приложениях. Некоторые версии Kylix включают в себя специальные возможности, которые называются завершение класса. Данные возможности позволяют упростить работу программиста по созданию нового класса. Упрощение происходит благодаря автоматическому генерированию скелета кода для членов класса, который вы определяете.
Ниже перечислены шаги, позволяющие вам объявить новый класс.
- В интегрированной среде разработчика Kylix начните новый проект и выполните команду меню Kylix File/New Unit (Файл/Новый модуль). Таким образом вы создадите новый модуль проекта, в котором будет объявлен новый класс.
- Добавьте в секцию интерфейса нового модуля (interface) секцию uses и type.
- В секции type напишите объявление нового класса. Здесь вам необходимо объявить все внутренние переменные класса, свойства, методы и события класса.
Например,
TMyClass = class; {Новый класс является потомком класса TObject} public
...
private
...
published{Класс является потомком TPersistent или его потомков}
. . .
Примечание
Вы должны включить в описание класса секцию published только в том случае, если ваш класс является потомком класса TPersistent или его потомков.
Если вы хотите создать свой класс как потомка определенного класса, то вам необходимо указать это в объявлении класса:
TMyClass = class(TParentClass); {Новый класс является потомком класса TParentClass}
Например,
type TMyButton = class(TButton)
property Size: Integer;
procedure DoSomething;
end;
В этом примере мы определяем класс TMyButton, который является потомком класса TButton и будет иметь все свойства, события и методы своего родителя, а также дополнительное свойство Size целого типа и процедуру DoSomething.
Если ваша версия Kylix включает завершение класса, выполните следующие действия: поместите курсор внутри определения методов класса в секции интерфейса (interface) и нажмите комбинацию клавиш <Ctrl>+ +<Shift>+<C> или щелкните правой кнопкой мыши и в выпадающем меню выберите пункт Complete Class at Cursor (Завершить класс в пределах курсора). Kylix завершит объявление каждого незавершенного свойства и создаст необходимые пустые методы в секции реализации (implementation). Если же ваша версия Kylix не поддерживает завершение классов, вам придется делать все самостоятельно.
В приведенном ниже примере, если у вас есть завершение класса, Kylix добавит слова read и write, включая все поддерживаемые поля и методы:
type TMyButton = class (TButton)
property Size: Integer read FSize write SetSize;
procedure DoSomething;
private
FSize: Integer;
procedure SetSize(const Value: Integer);
Он также добавит следующий код в секцию реализации модуля:
{ TMyButton }
procedure TMyButton.DoSomething;
begin
end;
procedure TMyButton.SetSize(const Value: Integer);
begin
FSize := Value;
end;
Теперь заполните методы. Для примера, если вы хотите, чтобы кнопка издавала звуковой сигнал каждый раз при вызове метода DoSomething, добавьте команду Bеер между словами begin и end данного метода в разделе реализации:
{ TMyButton }
procedure TMyButton.DoSomething;
begin
Beep;
end;
procedure TMyButton.SetSize(const Value: Integer);
begin
FSize := Value;
DoSomething;
end;
Примечание
Наша кнопка будет также издавать звуковой сигнал в случае, если вы вызовете метод SetSize для изменения ее размера.