Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Function TCar.StartEngine: Boolean;
Begin Result:= (Fuel>0); end; {Описание метода StartEngine. В качестве результата возвращается значение логического выражения (Fuel>0)} Function TCar.StopEngine: Begin end; {Описание метода StopEngine, не выполняющего никаких действий} Procedure AddFuel (NewFuel: Double); {Описание метода AddFuel} Begin Fuel:= Fuel + NewFuel; {Увеличение значения свойства Fuel на величину, переданную в качестве параметра NewFuel при вызове метода} end; End. {Окончание модуля}
Обратим внимание на использование свойства Fuel в методе AddFuel. Метод AddFuel, который является частью описания класса TCar, обращается к данному свойству по имени, хотя на этапе создания класса и неизвестно, какому именно экземпляру будет принадлежать изменяемое свойство. Однако точно известно, что каждый экземпляр обладает свойством Fuel, причем объект, из которого вызван метод AddFuel, также может быть определен системой. При вызове метода AddFuelH3 какого-либо экземпляра класса тсаг в качестве изменяемого свойства Fuel автоматически будет выбрано то, которое принадлежит этому же экземпляру. Возможность такого абстрактного подхода к описанию классов без указания их конкретных экземпляров и отличает объектно-ориентированный подход к созданию программы от модульного, несмотря на их некоторое сходство.
Методы класса
Интересным нововведением в Delphi являются так называемые методы класса, особенность которых состоит в том, что для их вызова нет необходимости создавать объект (экземпляр класса), а можно использовать их как обычные подпрограммы. Для описания таких методов используется ключевое слово class перед заголовком метода: Туре …………. <Имя класса> = class ……… class <Заголовок метода>; {Описание метода класса} End; При реализации методов класса в описательной части класса ключевое слово class также указывается: class <Имя класса>.<Заголовок метода>;
Методы класса применяются для создания библиотек специализированных методов, не требующих доступа к каким-либо данным, которые могут храниться в пределах объекта. В качестве примера приведем описание класса MthdClass, метод Get5 которого является методом класса (листинг 5.2).
Листинг 5.2. Пример описания методов класса
Unit DeclaringClassMethods; Interface Type MthdClass = class Class Function Get5: Double; End; Implementation Class Function Mthd.Class.Get5: Integer; {Описание метода Get5 класса MthdClass} Begin Result:= 5; end; End.
Для вызова метода класса необходимо указать название класса и название метода со списком необходимых параметров. Название класса и его метода разделяются точкой: <Класс>.<Метод>(<Список параметров>); Использование метода класса отражено в следующем листинге 5.3.
Листинг 5.3. Использование метода класса Unit UsingClassMethods; Uses DeclaringClassMethods; {Подключаем модуль DeclaringClassMethods, в котором описан класс MthdClass} Interface Implementation Procedure UsingClass; {Описание процедуры UsingClass} Var A: Integer; {Описание целочисленной переменной А} Begin A:= MthdClass. Get 5; {Вызов метода класса по имени класса и метода, в переменную А заносится значение 5} End; End.
Отметим, что методы класса иногда называют статическими методами.
Перегружаемые методы
Перегружаемые методы аналогичны перегружаемым процедурам и имеют такой же механизм работы. Пример, возможного описания класса с перегружаемыми методами приведен в листинге 5.4. Листинг 5.4. Описание класса с перегружаемыми методами Туре AClass = class Function Mult(A, B: Integer): Integer; overload; {Заголовок метода Mult с двумя целочисленными параметрами, возвращающий целочисленное значение} Function Mult(A, В: Double): Double; overload; {Заголовок метода Mult с двумя вещественными параметрами, возвращающий вещественное значение} end; Function AClass.Mult(A, B: Integer): Integer; Begin Result:= A * B; end; {Описание первого варианта метода Mult} Function AClass.Mult(A, B: Double): Double; Begin Result: = A * B; end; {Описание второго варианта метода Mult}
Области видимости элементов класса
Для разграничения доступа к свойствам и методам экземпляров классов между различными частями программы предусмотрены модификаторы доступа («видимости»), приведенные в табл. 5.1.
Модификатор доступа в Delphi (как и в Pascal, но в отличие от некоторых других языков программирования) относится не к конкретному свойству или методу класса, а ко всем элементам класса (свойствам и методам), описание которых располагается после указания модификатора. Один и тот же модификатор может указываться в описании класса более одного раза.
Сравнительная таблица модификаторов доступа в Pascal и Delphi Таблица 5.1
|
||||||
Последнее изменение этой страницы: 2021-04-04; просмотров: 56; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.67.251 (0.012 с.) |