Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Одиночные и двойные формирующие линии (ОФЛ и ДФЛ): геометрия, электротехнические параметры, диэлектрики для заполнения.

Читайте также:
  1. Ароматы линии ШАНС привнесут в жизнь каждой девушки искру романтики и поэзии.
  2. б) построить уравнение эмпирической линии регрессии и случайные точки выборки
  3. Б. береговые линии, территории на краю суши
  4. Беспроводные линии связи
  5. Бизнес-линии, методы оценки накопления активов, дисконтирование.
  6. Выбор наиболее подходящей линии тренда для данных
  7. Главные линии плоскости
  8. Графическое изображение электростатического поля. Силовые линии.
  9. Двойные звезды
  10. Двойные формирующие линии

В программе концепция полиморфизма реализуется при помощи виртуальных методов. Виртуальный метод объявляется в базовом объектном типе и в порожденных от базового типах. После его объявления должно быть помещено зарезервированное слово virtual.

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

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

Рассмотрим пример 5, указанный ниже. Объектовые типы Tp и Tc содержат поля и методы для рисования, стирания и передвижения точек и окружностей на экране дисплея. Эти два объектовых типа связаны отношениями наследования и содержат одноимённые методы Show (нарисовать), Hide (удалить с экрана) и Moveto (передвинуть). Для различных геометрических фигур алгоритмы методов Show и Hide существенно отличаются. Алгоритм метода Moveto для обеих фигур одинаков (удалить фигуру со старого места, изменить координаты размещения фигуры и нарисовать ту же фигуру на новом месте).Естественным является желание определить метод Moveto для объектового типа Tp и наследовать этот метод без переопределения во всех типах объектов-потомков. Поясним невозможность такого подхода в данной проблеме без дополнительных затрат.Допустим, что метод Moveto определён только в объектовом типе Tp. Если имеются экземпляры двух объектов: var P: Tp; C: Tc;, то вызов метода P.Moveto начнёт своё выполнение с метода Tp.Hide. Последующие действия метода Moveto приведут к ожидаемому результату. Теперь рассмотрим вызов C.Moveto. Экземпляр типа-потомка вызывает унаследованный метод Moveto, который жёстко связан с методами Tp.Show и Tp.Hide. Методы Show, Hide, Moveto были откомпилированы в одном контексте – в одном объектовом типе Tp. Поэтому метод Moveto всегда будет вызывать методы Tp.Show и Tp.Hide. Связь этих методов является статической, так как она была определена при компиляции. Методы С.Show и С.Hide вызваны не будут. Вызов С.Moveto приведёт к перемещению точки.Если мы хотим иметь один метод Moveto для различных объектов, необходимо разорвать статическую связь этого метода с методами Show иHide и обеспечить возможность для метода Moveto вызывать либо методы Tp.Show и Tp.Hide, либо . Show и . Hide в зависимости от того, какой объект вызывает метод Moveto. Такой механизм называют динамическим или поздним связыванием в отличие от статического или раннего связывания. Он достигается введением виртуальных методов.Для определения метода как виртуального после заголовка метода в объектовом типе указывается служебное слово VIRTUAL. При виртуализации методов должны выполняться следующие условия:1) если прародительский объектовый тип описывает метод как виртуальный, производные типы метод с тем же именем также должны описывать как виртуальный;2) заголовок в заново определённом виртуальном методе не может быть изменён;3) если объектовый тип содержит виртуальный метод, он должен содержать хотя бы один метод-конструктор;4) метод-конструктор должен быть применён к экземпляру объекта до первого вызова виртуального метода;5) каждый экземпляр объекта должен быть инициализирован отдельным вызовом конструктора;6) сам конструктор не может быть виртуальным. Пример 5. Текст программы, использующий виртуальные методы, может быть следующим:Uses Crt, Graph;Var gd,gm: integer;Type Tp = Object X,y,c: integer;

Constructor Init (ax,ay,ac: integer);

Procedure Show; Virtual;

Procedure Hide; Virtual;

Procedure Moveto (dx,dy: integer);

End;

Constructor Tp. Init;

Begin X:=ax; y:=ay; c:=ac End;

Procedure Tp. Show;

Begin Putpixel(x,y,c); End;

Procedure Tp. Hide;

Begin Putpixel(x,y,Getbkcolor) End;

Procedure Tp. Moveto;

Begin

Delay(1000); Hide;

X:=x+dx; y:=y+dy; Show End; Type Tc = Object (Tp) R: integer;

Constructor Init (ax,ay,ac,ar: integer);

Procedure Show; Virtual;

Procedure Hide; Virtual;

End;

Constructor Tc. Init;

Begin Inherited(ax,ay,ac); R:=ar End;

Procedure Tc. Show;

Begin Setcolor(c); Circle(x,y,r) End;

Procedure Tc. Hide;

Begin Setcolor(Getbkcolor); Circle(x,y,r) End;Var P: Tp; C: Tc;BeginGd:=Detect;Initgraph(Gd,Dm,’d:\bp\bgi’);

P. Init (100,120,yellow);

P. Show; P. Moveto (50,50);

Readln;

C.Init (200,300,Green,150);

C. Show; C.Moveto (10,10);

Readln;ClosegraphEnd. Пример 6. Пример использования виртуальных методов при работе с вектором и матрицей (предусмотрим ввод значений элементов рассматриваемой структуры данных, нахождение в структуре элемента с минимальным значением и вывод результата).const nmax=10;type tvect = array[1..nmax] of real;tmatr = array[1..nmax,1..nmax] of real; vect = object n:integer;{фактический размер вектора, количество строк матрицы } min: real; a: tvect; constructor init; procedure inpt; virtual; {ввод} procedure obr; virtual; {нахождение минимального элемента} procedure out; {вывод} procedure work;{полная обработка структуры данных} end;constructor vect. init; begin end;procedure vect. inpt;var i: integer;begin writeln('n=?'); readln(n); for i:=1 to n do begin write('a[i]-?'); readln(a[i]) end;end;procedure vect. obr;var i: integer;begin min:=a[1]; for i:=2 to n do if a[i]<min then min:=a[i]end;procedure vect. out;begin writeln('min=',min:7:3) end;procedure vect. work;begin inpt; obr; out end; type matr =object(vect) m: integer; {количество столбцов матрицы} b: tmatr; procedure inpt; virtual;{ввод} procedure obr; virtual;{нахождение мин. элемента} end;procedure matr. inpt;var i,j: integer;begin writeln('n,m=?'); readln(n,m); for i:=1 to n do for j:=1 to m do begin writeln('b[i,j]=?'); readln(b[i,j]) end;end;procedure matr. obr;var i,j: integer;begin min:=b[1,1]; for i:=1 to n do for j:=1 to m do if b[i,j]<min then min:=b[i,j]end; var ObjVect: vect; ObjMatr: matr;begin ObjVect. init; ObjVect. work; ObjMatr. init; ObjMatr. work;readln end.

Контрольные вопросы

1. Дайте определение понятию «виртуальная функция».

Одиночные и двойные формирующие линии (ОФЛ и ДФЛ): геометрия, электротехнические параметры, диэлектрики для заполнения.

 

 
 

В качестве уплотнителей энергии во многих схемах ускорителей используются различного рода линии с распределенными параметрами: одиночная формирующая линия - ОФЛ и двойная формирующая линия - ДФЛ. По типу геометрии различают плоские, коаксиальные и дисковые формирующие линии. Рассмотрим одну из простых ФЛ – плоскую или полосковую формирующую линию. Схема полосковой линии и ее основные параметры указаны на рис. 3.1. Известно, что при разрядке такой линии на нагрузку в ней бежит плоская волна со скоростью, равной , и соотношением электрического и магнитного полей . Емкость и индуктивность на единицу длины, а также волновое сопротивление такой линии равны:

(3.1)

В соответствии с приведенными формулами максимальная накопленная в линии энергия на единицу ее длины составляет величину:

, (3.2)

где Em- максимальное электрическое поле внутри диэлектрика, расположенного между полосками в линии. При подключении линии, предварительно заряженной до напряжения U=Em×d, выделяемая на нагрузочном сопротивлении R, близком по значению к волновому сопротивлению линии r, мощность имеет следующий вид:

. (3.3)

Далее рассмотрим коаксиальную формирующую линию, изображенную на рис. 3.2. Для получения максимальных параметров при коммутации такой линии на нагрузку необходимо учесть следующее обстоятельство. Из эксперимента известно, что максимально достижимое электрическое поле на электродах различной полярности имеет разное значение, это свойство характеризуется величиной , которая, как правило, больше 1. Так для типичных диэлектриков, применяемых при создании мощных устройств на основе линий, значение K для воды составляет 2, а для трансформаторного масла - 1.5.

Коаксиальная ФЛ имеет следующие основные параметры: погонные емкость и индуктивность, а также волновое сопротивление. Их величины даются следующими формулами:

. (3.4)

 
 

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

 

 

Максимальная накопленная в такой линии энергия на единицу ее длины составляет величину:

, (3.5)

где Em- максимальное электрическое поле вблизи внутреннего электрода линии в диэлектрике. Аналогично, при подключении линии, предварительно заряженной до напряжения , выделяемая на нагрузочном сопротивлении R, близком по значению к волновому сопротивлению линии r, мощность имеет следующий вид:

 
 

. (3.6)

 

При включении линии с однородным по длине волновым сопротивлением r, заряженной до напряжения U, на нагрузку с активным сопротивлением R, близким к r, и индуктивностью L выделяемая на сопротивлении R мощность P имеет следующий вид:

, (3.7)

где характерное время цепи. Наличие индуктивности в цепи приводит к заваливанию фронта напряжения на нагрузке с характерным временем t=tL.

Если же линия заряжается магнитной энергией (как индуктивный накопитель) от внешнего источника тока величиной I0 через прерыватель, то с момента времени, когда происходит очень быстрый разрыв тока прерывателем, ток в нагрузке описывается выражением:

, (3.8)

где C- паразитная емкость размыкателя и нагрузки, а - характерное время шунтирования емкостью сопротивления нагрузки. При этом мощность, выделяемая на нагрузке R, равна:

. (3.9)




Дата добавления: 2014-12-18; просмотров: 59 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав