Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.5.2024

w

                                Классы

Классами в системе программирования Delphi  называются специальные типы,

которые содержат составляющие класса: поля, методы и свойства. Составляющие класса

часто называют членами класса. Класс предназначен для создания  конкретных экземпляров реализации, которые называются объектами. 

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

Формат описания класса.

                        Type

                            <Имя класса> = Class

                                                           //  члены класса

                                                           Поля

                                                            Свойства

                                                            Методы  

                                                         End;

В основе класса лежат три фундаментальных принципа инкапсуляция, наследование и полиморфизм.

Инкапсуляция

Объединение в классе в одно целое его членов называется инкапсуляцией. Инкапсуляция позволяет разграничить доступ к различным полям и свойствам класса. Некоторые поля и методы можно сделать  свободно доступными в любом месте программы, другие поля и методы только внутри класса.

Наследование

Любой класс может быть порожден от другого класса. Тогда при объявлении такого класса после ключевого слова Class в круглых скобках указывается имя класса родителя.

               TChildClass = Class(TParentClass)

                                        End;

Порожденый класс автоматически наследует поля, методы и свойства своего родителя и может добавлять к ним новые. Таким образом, принцип наследования обеспечивает поэтапное создание сложных классов и разработку собственных библиотек классов.

Все классы Delphi порождены от единственного родителя – класса TObject.

    TaClass=Class(TObject);

Или

     TaClass=Class;

Оба объявления равносильны.

Класс TObject.  не имеет полей и свойств, но включает в себя множество методов самого общего назначения, обеспечивающие весь жизненный цикл любых объектов – от их создания до уничтожения.

Принцип наследования приводит  к созданию ветвящегося дерева классов, постепенно разрастающегося при перемещении от класса TObject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми возможностями и передает их своим потомкам.

 Дочерний класс не может удалить какую-либо сущность родительского класса.

Полиморфизм

Полиморфизм  - это свойство классов решать схожие по смыслу проблемы разными способами. Поведенческие свойства класса определяются набором входящих в него методов(процедуры и функции). Изменяя алгоритм  того или другого метода  в потомках класса, можно придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, то есть объявить в потомке одноименный метод и реализовать в нем отличные от родителя  действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разную алгоритмическую основу, и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.

  Составляющие класса

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

 Type

   TMyClass= class

                           aIntField: Integer;

                           aStrField: String;

                           aObjField: TObject;

                           …

                        End;

Каждый объект получает уникальный набор полей, но общий для всех объектов данного класса набор методов и свойств. Фундаментальный принцип инкапсуляции требует обращаться к полям только с помощью методов и свойств класса. Но в Delphi разрешается обращаться к полям напрямую. Доступ к полям возможен с помощью составных имен(как при доступе к полям  записи):

Type

   TMyClass= class

                           FIntField: Integer;

                           FStrField: String;

                           …

                        End;

В разделе описания переменных объявляется переменная этого класса, которая называется экземпляром класса или объектом.

Var

   aObject: TMyClass;

Экземпляр класса является динамической переменной – указателем, содержащим адрес объекта.

Begin

//Составные имена – это имя переменной (точка)имя поля

aObject.FIntField:=0;

aObject.FStrField:=’Строка символов’;

End.

Класс потомок получает все поля своих предков и может дополнять их своими, но не может их переопределять или удалять. Таким образом, чем ниже в дереве иерархии располагается класс, тем больше данных получает в свое распоряжение его объекты.

Методы

Инкапсулированные в классе процедуры и функции называются методами.

Они объявляются так же, как и обычные подпрограммы. Доступ к методам осуществляется с помощью составных имен:

Type

   TMyClass= class

                           Function MyFunc(aPar:Integer):Integer;

                           Procedure MyProc;

                        End;

Var

   aObject: TMyClass;

Begin

// Вызов метода через составное имя –это имя переменной(точка)имя метода

aObject.MyProc;

End.

Типы методов

В Delphi поддерживаются статические, виртуальные, динамические, перегружаемые и абстрактные методы.

Статические методы

Все методы по умолчанию считаются статическими

Type

   TParentClass= Class

                              Procedure DoWork;

                             End;

    TChildClass= Class(TParentClass)

                                Procedure DoWork;

                           End;

Var

Object_a: TParentClass;

Object_b: TGhildClass;

Потомки обоих классов могут выполнять сходную по названию процедуру   DoWork, но

будут делать ее по-разному. Такое замещение методов называется статическим, так как реализуется компилятором.  

Виртуальные и динамические методы

В Delphi чаще используется динамическое замещение методов на этапе прогона программы. Для реализации этого метода, замещаемый в родительском классе, должен объявляться как динамический (с директивой Dynamic) или виртуальный ( с директивой Virtual). В классе потомке замещаемый метод объявляется с директивой Override(перекрыть).

Перекрытие методов

Методы класса могут перекрываться в потомках.

Например, пусть родительский класс с помощью методов  Show и Hide   показывает изображение или прячет его на экране. Изображение создается методом Draw.

Type

   TVisualObject=Class( TWinControl);

                                 Procedure Show;

                                 Procedure Hide;

                                 Procedure draw(IsShow:Boolean); Virtual;//замещаемый

                               End;   

   TVisualChildObject=Class(TVisualOdject);

                                          Prvirtual;ocedure draw(IsShow:Boolean); Override;//замещающий

                                       End;

 Реализация методов Show и Hide очень проста .

Procedure TVisualObject.Show;

   Begin

     Draw(True);

  End;

Procedure TVisualObject.Hide;

   Begin

     Draw(False);

  End;

Методы Draw у родителя и потомка имеют разную реализацию и создают разные изображения. В результате родительские методы Show и Hide будут прятать или показывать те или иные изображения в зависимости от конкретной реализации метода

Draw у любого из своих потомков. Динамическое связывание в полной мере реализует

полиморфизм классов.

Абстрактные методы

Динамические перекрываемые методы часто могут ничего не делать. Такие методы называются абстрактными, они обязаны перекрываться в потомках. Можно запретить вызов абстрактного метода, объявив его с директивой Abstract. Например

Type

   TVisualObject=Class( TWinControl);

                                 procedure draw(IsShow:Boolean);virtual;abstract;

                             End;

TVisualChildObject=Class(TVisualOdject);

                                          Procedure draw(IsShow:Boolean); Override;

                                       End;

Var

aVisualObject: TVisualObject;

aVisualChildObject: TVisualChildObject;

begin

 aVisualObject.Show;           //Ошибка! Обращение к абстрактному методу

 aVisualChildObject.Show;  // Верное Обращение. Метод Draw у класса TVisualChildObject                    

                                              // перекрыт

end;

Конструкторы и деструкторы

В состав класса входят два специальных метода конструктор (constructor) и деструктор(Destructor).В  Delphi конструктор принято называть Create() а деструктор – Destroy(). Create выделяет динамическую память для объекта (размещаются поля объекта), а Destroy() освобождает динамическую память.  

 

Type

   TMyClass= class

                          FIntField: Integer;

                           Constructor Create(Value:Integer);

                            Destructor Destroy;

                         End;

Любые поля, а также методы класса, оперирующие его полями, могут вызываться только после  создания объекта вызовом конструктора.

Var

MyObject: TMyClass;

Begin

MyObject.FIntField := 0;           //Ошибка. Объект не создан

//Конструктор работает как функция, возвращающая адрес объекта

MyObject :=  TMyClass.Create; //Верно. Создаем объект

MyObject.FIntField  := 0;         // обращаемся к его полю

MyObject.Free;                         // уничтожаем объект

End;

В базовом классе TObject  определен метод Free, который проверяет действительность адреса объекта и затем вызывает деструктор Destroy.

                  If Self<>Nil then Destroy;

Специальная ссылка self всегда указывает текущий объект.

В модуле System определена процедура FreeAndNil, которая  не только уничтожает объект, но устанавливает  его

указатель в значение  Nil.

  FreeAndNil(MyObject);

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

Constructor TMyClass.Create(AOwner:TComponent;Value:integer);

// возможная реализация конструктора

Begin

Inherited Crete(Aowner:TComponent);//вызываем унаследованный конструктор

intField:=Value;//реализуем дополнительные действия

End;

Перегружаемые методы

В классах могут содержаться методы с одинаковыми именами , но с разными параметрами. Компилятор определяет, какой метод использовать в зависимости от типов его параметов.

Перегрузка методов обеспечивается  директивой Overload.  Пример

Type

T1=class(TObject)

       Procedure Sum(X,Y:Integer);overload;

       End;

T2=class(T1)

       Procedure Sum(X,Y:Real);overload;

       End;

Var Ct:T2;

Begin

Ct:=T2.Creat;

Ct.Sum(2,2);      //вызывается T1.sum()

Ct.Sum(2.0,2.0);// вызывается T2.sum()

End;

Перегружаемым может быть и виртуальный метод для этого в наследуемом методе дополнительно указать  ключевое слово reintroduce.

Type

T1=class(TObject)

       Procedure Sum(X,Y:Integer);overload; virtual;

       End;

T2=class(T1)

       Procedure Sum(X,Y:Real);reintroduce; overload;

       End;

Некоторые методы могут вызываться без создания  и инициализации объекта. Такие методы называются методами класса, они объявляются с помощью зарезервированного слова class.

Type

TMyclass=class(TObject)

                    Class Function GetClassName:String;

                 End;

Var

S:String;

Begin

S:=TMyClass.GetClassName;

End;

Свойства

Свойства – это специальные атрибуты классов, регулирующие доступ к полям. Свойства объявляются с помощью зарезервированных слов Property, read и write(слова  read и write считаются зарезервированными только в контексте объявления свойства). Обычно связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи а это поле или при чтении из него. Например

Type

TaClass=Class

                  IntField:Integer;

                  Function GetField:integer;

                  Procedure SetField( Value:integer);

                  Property IntegrValue:integer read GetField write SetFeild;

                End;

В контексте программы свойство ведег себя как обычное поле. Например, можно

написать такие операторы

var

 aclass:Taclass;

Value:integer;

Begin

 Aclass := Taclass.Create;// Обязательное обращение к конструктору перед обращением

                                          // к полю или свойству    

Aclass.IntegerValue:=0;

Value := aclass.IntegerValue;

Aclass.Destroy;// Удаление ненужного объекта

End;

Если необходимо, чтобы свойство было доступно только для чтения или только для записи, следует опустить соответственно части write или read.

Объявление класса

Любой вновь создаваемый класс может содержать разделы, определяемые зарезервированными словами  published (публикуемые), private(закрытые), protected(защищенные), public(доступные), automated(автоматизированные).

Внутри каждого раздела вначале определяются поля, а затем методы и свойства.

Эти разделы определяют области видимости членов класса. Раздел public  не накладывает ограничений на область видимости, перечисляемые в нем члены класса можно вызвать в другом модуле. Раздел published  не ограничивает область видимости, она доступна в окне инспектор объектов. Раздел private доступен только внутри методов данного класса и, подпрограммах, находящихся в том же модуле, где описан класс. Раздел Protected доступен методам самого класса и его потомкам независимо от их месторасположения.

Type

TForm =class(TForm)

                Button1:Tbutton;// доступна всей среде

               Private                // доступна  в модуле объявления этого класса

                    FintField:integer;

                     Procedure SetValue(Value:Integer);

                     FunctionGetValue:integer;

                Published        // доступна в любом модуле

                   Property intField read GetValue write SetValue

                Protected        //доступна  только методам  самого классам  и потомкам

                                        // не зависимо от их места расположения  

                      Procedure Proc1;

                Public             // доступна в любом модуле

                  Procedure Proc2;

              End;    

PAGE  7




1. Измерение и температуры
2. Comt~ Mison de l~Etudint 36 venue de l~observtoire 25030 Besn~on Cedex T~l- 33 03 81 66 66 20 Courriel - tufc@univfcomte
3. Тематика и содержание практических занятий по курсу уголовного права Источники уголовного права
4. Среда прямого воздействия согласно Элбингу включает факторы которые непосредственно влияют на операции
5. Тематика частушек не поддается учету.
6. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата хімічних наук Київ 2000 Дисертаціє
7. Реферат- Формы и направления инвестиционной деятельности- опыт развитых стран и России
8. Информационные ресурсы общества Образовательные информационные ресурсы Работа с программным обеспечением Инсталляция программного обеспечения, его использование и обновление
9. Подводная лодка Краб
10. Причины возникновения романтизма
11. Статья- Сеть (мрежа).html
12. Культура особенности и значение, взгляды и понятия
13. реферат дисертації на здобуття наукового ступеня кандидата педагогічних наук Харкі
14. Приведенная ниже таблица содержит описание не всех ошибок перевода а только тех которые являются наибо
15. В 1962 году я заболела раком
16. История Царского села
17. и вертолетостроение производство летательных аппаратов; 160400 ~ Ракетные комплексы и космонавтика; произ
18. Филипп Шарль Луи
19. Черемуха обыкновенная.html
20. История музыкального воспитания