11 ИНТЕРФЕЙСТЕРДІ
ПАЙДАЛАНУ
11.1 Интерфейс ұғымы
"Интерфейс" сӛзінің мағынасы кӛп, түрлі жағдайларда әр түрлі
мағынада болуы мүмкін. Бағдарламалық және аппараттық
интерфейс
ұғымдары бар, бірақ кӛп жағдайларда интерфейс сӛзі объекттер немесе
процестер арасындағы байланысты анықтайды. Осы бӛлімде интерфейс
ұғымы қарастырылатын болады (интерфейс interface сӛзінен кейін
жазылады). Интерфейс – кластың дербес түрі.
Интерфейс ұғымы толығымен абстрактылы класты сипаттайды,
ондағы әдістер толығымен абстрактылы болады.
Интерфейстің абстрактылы кластан айырмашылығы синтаксисіндегі
және орындалу тәртібіндегі ӛзгешеліктерінде болады.
Синтаксистік айырмашылығы мынада: интерфейс әдістері қол жеткізу
модификаторынсыз жарияланады.
Орындалу тәртібіндегі ӛзгешелігі – ұрпақтарға қойылатын талаптардың
қатаң болуында. Интерфейсті мұраланатын класс (интерфейсті класс)
интерфейстің барлық әдістерін толық жүзеге асыруы тиіс.
Жоғарыда
сипатталған барлық ӛзгешеліктер интерфейстің абстрактылы класты
мұраланатын кластан айырмашылықтарын кӛрсетіп тұр. Абстрактылы
кластың ұрпағы (класы) аталық абстрактылы кластың
кейбір әдістерін ғана
орындай алады.
Интерфейстік кластың қарапайым кластан айырмашылығы – бірнеше
түпкі интерфейстерді мұралана алуында. Сонымен, С# тілінде интерфейстік
кластарда ғана бірнеше рет мұралануға рұқсат берілген.
Класс атауы мен қос нүктеден кейін түпкі интерфейстер тізім бойынша
бір бірден кӛрсетіледі:
public interface INewClass: IInt1, IInt2, ...,
IIntN
{ . . .}
Осындай интерфейстік кластарда түпкі
интерфейстердің барлық
әдістерінің іске асырылуы болуы керек.
Ескерту, интерфейстік класс интерфейстермен қатар қарапайым бір
класты (тек қана бір класты!) мұралануы мүмкін, қарапайым класты
мұраланғанда ол әдеттегі мұрагер ретінде оның әдістерін ӛзгерте алады және
ӛрістерді қоса алады т.б.
Бірнеше рет мұралануды қолданғанда атаулар
арасындағы қателіктер
немесе ортақ түпкі кластың болуына байланысты қателіктер кетуі мүмкін.
Атаулар арасындағы шиеленіс мына жағдайларда пайда болады: әр
түрлі түпкі интерфейстерде синтаксистері бірдей аттас әдістер болуы мүмкін.
Интерфейстік класс түпкі интерфейстердің барлық әдістерін жүзеге
асыруы керек болғандықтан коллизия пайда болады, оны шешудің бірнеше
жолы бар.
Әдістерді желімдеу. Интерфейстік класс
аттас әдістердің орындалуын
бірдей деп қарастырады және түпкі кластардың барлық аттас әдістерін іске
асыру үшін бір әдісті жариялайды.
Әдістерге басқа атау беру. Егер аттас әдістердің жүзеге асырылуы әр
түрлі болуы керек болса, онда әдістердің атаулары ӛзгертіледі.
Интерфейсті абстрактылы кластан ерекшелендіретін
тағы да бір
маңызды қызметі бар. Абстрактылы класс класты жобалаудың алғашқы
кезеңі болып табылады. Әрбір интерфейс класқа жаңа қосымша қасиеттерді
қосады.