Ин Делпхи, "интерфејс" има два различита значења. Ин ООП жаргоне, можете сматрати интерфејс као класу без примене. У одјељку интерфејса дефиниције јединице Делпхи користи се за декларирање свих јавних дијелова кода који се појављују у јединици. Овај чланак ће објаснити интерфејсе из ООП перспективе.
Ако планирате да креирате чврсту апликацију на начин да је ваш код одржив, поново употребљив и флексибилан, ООП природа Делпхија помоћи ће вам да возите првих 70% своје руте. Дефинисање интерфејса и њихова примена помоћи ће код преосталих 30%.
Сажетак наставе
О интерфејсу можете размишљати као о апстрактној класи са искљученом цијелом имплементацијом и уклањањем свега што није јавно. Апстрактна класа у Делпхи је класа која се не може инстанцирати - не можете створити објект из класе која је означена као апстрактна.
Погледајмо пример декларације интерфејса:
тип
ИЦонфигЦхангед = интерфејс['{0Д57624Ц-ЦДДЕ-458Б-А36Ц-436АЕ465Б477}']
процедура АпплиЦонфигЦханге;
крај;
Тхе ИЦонфигЦхангед је интерфејс. Интерфејс је дефинисан као класа, а уместо „класе“ користи се кључна реч „интерфејс“. Вриједност Гуид која прати кључну ријеч интерфејса користи компајлер за јединствену идентификацију интерфејса. Да бисте генерисали нову ГУИД вредност, само притисните Цтрл + Схифт + Г у Делпхи ИДЕ. Сваки интерфејс који дефинирате треба јединствену вредност Гуид-а.
Интерфејс у ООП-у дефинише апстракцију - предложак стварне класе која ће имплементирати интерфејс - који ће имплементирати методе дефинисане у интерфејсу. Интерфејс заправо ништа не ради, он само има потпис за интеракцију са другим (имплементационим) класама или интерфејсима.
Имплементација метода (функције, процедуре и својства Гет / Сет метода) се врши у класи која имплементира сучеље. У дефиницији интерфејса не постоје одељци опсега (приватни, јавни, објављени итд.) Све је јавно. Тип интерфејса може дефинисати функције, процедуре (које ће с временом постати методе класе која имплементира интерфејс) и својства. Када интерфејс дефинира својство, мора дефинирати методе гет / сет метода - сучеља не могу дефинирати варијабле.
Као и код класа, интерфејс може наслиједити друге интерфејсе.
тип
ИЦонфигЦхангедМоре = интерфејс(ИЦонфигЦхангед)
процедура АпплиМореЦхангес;
крај;
Програмирање
Већина Делпхи програмера када размишља о интерфејсима мисли на ЦОМ програмирање. Међутим, интерфејси су само ООП карактеристика језика - нису посебно везани за ЦОМ. Интерфејси се могу дефинисати и имплементирати у Делпхи апликацији, а да се уопште не дотакне ЦОМ.
Имплементација
Да бисте имплементирали интерфејс, морате да додате име интерфејса у изјаву класе, као у:
тип
ТМаинФорм = класа(ТФорм, ИЦонфигЦхангед)
јавни
процедура АпплиЦонфигЦханге;
крај;
У горњем коду Делпхи образац под називом "МаинФорм" имплементира ИЦонфигЦхангед интерфејс.
Упозорење: када класа имплементира интерфејс, она мора имплементирати све своје методе и својства. Ако не успете / заборавите да примените методу (на пример: АпплиЦонфигЦханге) грешка у времену компилације "Е2003 непризнати идентификатор: 'АпплиЦонфигЦханге'" ће се појавити.
Упозорење: ако покушате да одредите интерфејс без ГУИД вредности коју ћете добити: „Е2086 Тип„ ИЦонфигЦхангед “још увек није дефинисан у потпуности“.
Пример
Размотрите МДИ апликацију у којој се кориснику може приказати више образаца одједном. Када корисник промени конфигурацију апликације, већина образаца мора да ажурира свој приказ - покаже / сакрије неке тастере, ажурира титлове налепница итд. Требат ће вам једноставан начин да обавијестите све отворене обрасце да се догодила промјена у конфигурацији апликације. Идеално средство за посао је интерфејс.
Сваки образац који се мора ажурирати када се промене конфигурације имплементирају ИЦонфигЦхангед. Будући да је екран за конфигурацију приказан модално, када се затвори следећи код, осигурава се да се обавештавају сви ИЦонфигЦхангед имплементациони обрасци, а АпплиЦонфигЦханге се зове:
процедура ДоЦонфигЦханге ();
вар
цнт: интегер;
ицц: ИЦонфигЦхангед;
започети
за цнт: = 0 до -1 + Екран. ФормЦоунт урадити
започети
ако Подржава (екран. Обрасци [цнт], ИЦонфигЦхангед, ицц) онда
ицц. АпплиЦонфигЦханге;
крај;
крај;
Тхе Суппортс функција (дефинисано у Сисутилс.пас) означава да ли одређени објект или интерфејс подржавају одређено сучеље. Код се понавља кроз екран. Колекција образаца (за ТСцреен објект) - сви облици тренутно приказани у апликацији. Ако образац Екран. Обрасци [цнт] подржава сучеље, Подржава враћа сучеље за посљедњи параметар параметра и враћа труе.
Стога, ако образац имплементира ИЦонфигЦхангед, ицц варијабла се може користити за позивање метода интерфејса као што их реализује образац. Имајте на уму, наравно, да сваки облик може имати сопствена другачија примена процедуре АпплиЦонфигЦханге.
Предници
Свака класа коју дефинишете у Делфима мора имати претка. ТОбјецт је крајњи предак свих објеката и компоненти. Горња идеја односи се и на интерфејсе, ИИнтерфаце је основна класа за све интерфејсе. ИИнтерфаце дефинише 3 методе: КуериИнтерфаце, _АддРеф и _Релеасе.
То значи да наш ИЦонфигЦхангед такође има те 3 методе, али их ми нисмо имплементирали. То је зато што ТФорм наслеђује од ТЦомпонент-а који већ имплементира ИИнтерфаце за вас! Када желите да имплементирате интерфејс у класу која наслеђује од ТОбјецт, обавезно ваша класа наследи од ТИнтерфацедОбјецт. Пошто је ТИнтерфацедОбјецт ТОбјецт који имплементира ИИнтерфаце. На пример:
ТМиЦласс = класа(ТИнтерфацедОбјецт, ИЦонфигЦхангед)
процедура АпплиЦонфигЦханге;
крај;
Закључно, ИУнкновн = ИИнфацефаце. Непознато је за ЦОМ.