Методы объектов

Энергия

Химическая промышленность является одной из самых энергоемких отраслей индустрии.

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

Электрическая применяется для приведения в движение электрические двигатели. Ее производят гидроэлектростанции, тепловые и атомные станции.

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

Атомная энергия применяется для производства электрической энергии на атомных электростанциях.

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

Световая энергия применяется для проведения разнообразных фотохимических реакций.

Рассмотрим сравнительные характеристики различных источников энергии в кВт∙ч/кг:

Каменный уголь – 8,0

Торф – 4,0

Природный газ – 10,6

Уран – 22,5∙106

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

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

Методы — это процедуры и функции, которые принадлежат объекту. С помощью своих методов объект выполняет возложенные на него обязанности. Теперь нам предстоит узнать о методах объектов немного больше.

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

  • static (статические) — это простые процедуры и функции. Если при описании метода вы ничего не указали, то используется именно этот тип. Для компилятора это самый простой тип метода, потому что в потомках такой метод не может быть изменен, и поэтому заранее можно узнать адрес этого метода в памяти.
  • virtual (виртуальные) — такие методы могут быть переопределены в потомках объекта. Например, если у вас есть объект гараж и метод ворота, то в его потомке этот метод может быть заменен улучшенной версией. Для определения адреса Delphi строит таблицу виртуальных методов, которая позволяет во время выполнения программы определить адрес метода. В такой таблице хранятся все методы текущего объекта и его предка.
  • dynamic (динамические) — эти методы схожи с виртуальными, но для определения адреса используется другой способ. Для каждого объекта строится таблица только из его методов. Каждому методу назначается уникальный индекс. В данном случае экономится память, потому что не надо хранить адреса методов предков, но для поиска любого из них тратится намного больше времени.
  • message (сообщения) — такие методы реагируют на события операционной системы. Для большинства сообщений ОС Windows в Delphi уже есть специальные обработчики событий, но если вам нужно, чтобы метод реагировал на определенное событие, которого нет у компонента, необходимо определить его вручную.
  • abstract (абстрактный) — такой метод будет только объявлен в объекте, а реализации у него не будет. Если в объекте есть хотя бы один такой метод, то он считается абстрактным. Такой объект нельзя использовать.
    Реализацию метода должны сделать потомки, и именно с потомками можно работать. Таким образом, вы можете в каком-либо объекте зарезервировать имя метода для потомков, чтобы они реализовали в нем какое-то действие.

Если вы объявили метод как virtual или dynamic, то можно переопределить их действия в наследниках.

Type TDate=class

Math, Day, Year:integer;

Procedure SetValue(m,d,y:integer);

Function heapYear:Boolean;

End;

Procedure TDate.SetValue (m,d,y:integer);

Begin

Mont:=m; day:=d; Year:=y;

End;

*конструктор унаследован от TObject

Function TDate.heapYear:Boolean;

Begin

Result:=IsHeapYear(Year); {ß---------sysUtils.pas}

End;

Использование классов:

Var Aday: Tdate;

begin

Aday:=Tdate.Create;

ADay.SetValue(9, 10, 2011);

If Aday.heapYear then ShowMessage(‘висакосный год: ’+IntToStr(Aday.Year);

Aday.Free;

…………………

SELF

Методы очень похожие с процедурами или функциями.

Отличие состоит в том что у методов есть неявный параметр, который является ссылкой на экземпляр объекта, вызвавший данный метод. Внутри метода на этот параметр можно ссылаться явно при помощи ключевого слова self. Явное его использование необходимо в случаях когда имеется несколько экземпляторв объектов одного и того же класса чтобы избежать конфликта имен.

Self.Month:=m;

Self.year:=y;

Метод отличается тем что у него есть адрес экземпляра объекта.

Создание компонентов динамически

Self часто используется когда необходимо явно обратиться к текущей форме в одном из её методов. При создании компонента на этапе выполнения программы необходимо передать параметр Owner(владелец) конструктору create компонента, а потом присвоить то же значение свойству Parent. Свойство Parent элемента управления содержит информацию о том какой другой элемент управления несет ответственность за отображение данного элемента на экране. Если элемент расположен на форме то форма становиться владельцем и родителем, если же поместить его внутри другого элемента(например на панель) то форма будет владельцем а родителем – панель.

Пример – формы приложения нет дочерних компонентов, есть только обработчик события OnMouseDown.

Procedure TForm1.FormMouseDown ();

Var Btn:TButton;

Begin

Btn:=Tbutton.Create(Self);

Btn.Parent:=Self;

Btn.left:=x; Btn.Top:=y;

Btn.Width:=Btn.Width+50;

Btn.Caption:=format(‘Button at %d, %d,’,[x,y]);

……………………..

……….при указании конкретного значения ….. кнопки будут появл только на форме с именем Форм1 даже если мы будем щелкать по другим формам.

Зад. Написать приложение почти такое же как этот пример только на форму поместить 1 кнопочку назвать ее, создать форму, при щелчке по этой кнопке должны создавать формы этого же класса Tform1 (их положение можно смещать относительно друг друга). При щелчке на любой из форм должны появляться динамически создаваемые кнопочки + указание их координат.

Перегрузка методов в обжект паскале. Допускается существование нескольких методов с одинаковым именем при условии что параметры у них различные. Анализируя набор аргументов компилятор определяет какую именно версию процедуры необходимо вызвать.

Правила.

1.Каждая версия метода должна сопровождаться директивой overload;

2.Разница между версиями должна быть в количестве и типе параметров. Или в том и другом.

3. Тип возвращаемого значения нельзя использовать в качестве отличительного признака версий.

Пример.

Type TDate=class

Fdate:TdateTime;

Public

Procedure SelValue(m,d,y:integer); overload;

Procedure SetValue(newDate:TDateTime); overload;

…………….

End;

Procedure TDate.SetValue(m,d,y:integer);

Begin

Fdate:=EncodeDate(y,m,d);

End;

Методы класса и данные класса

Определяя поля в рамках класса, мы указываем на то что поле должно быть добавлено каждому экземпляру данного класса. Каждый экземпляр обладает собственным представлением, которое хранится в памяти, адрес которого можно узнать прочитав значение параметра Self. В некоторых случаях требуется, чтобы некоторая информация была общей для всех объектов этого класса.

(сколько лап у кошки?)Как этого реализовать

1. Можно было бы в модуль хранящий реализацию класса добавить некую локальную для данного модуля переменную, и она будет доступна всем классам, которые реализованы в данном модуле.

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

2. Можно написать глобальную функцию или процедуру которая будет доступна этим классам.

3. Объявление метода класса.

Class function……………..

* Классовые методы нельзя применять в отношении конкретного экземпляра.Они могут быть и виртуальные!


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: