Интерфейс (програмиране)

Вижте пояснителната страница за други значения на Интерфейс.

Интерфейсът в информатиката е споделена граница между два разделени компютърни компонента, обменящи информация. Обмяната може да стане чрез софтуер, хардуер, периферни устройства, хора и различни съчетания от изброените. Някои компютърни хардуерни устройства като тъчскрийн могат едновременно да приемат и изпращат данни през интерфейса, докато други като мишка, микрофон и джойстик действат само едностранно.

Хардуерни интерфейси

[редактиране | редактиране на кода]

Хардуерните интерфейси съществуват в много от съставните части като устройства за съхранение на данни и други входно-изходни устройства. Хардуерният интерфейс е описан чрез механичните, електрическите и логичeски сигнали при интерфейса и протокол за тяхната последователност. Стандартен интерфейс, като SCSI, разделя проектирането и въвеждането на изчислителен хардуер, като входно-изходни устройства, от проектирането и въвеждането на други части от компютърната(изчислителната) система, позволявайки на ползватели и производители отлична гъвкавост при използването на изчислителни системи. Хардуерните интерфейси могат да бъдат успоредни с няколко електрически връзки поддържащи части от данните(паметта) едновременно или серийни, където данните се изпращат бит по бит.

Софтуерни интерфейси

[редактиране | редактиране на кода]

Софтуерни интерфейси в реалността

[редактиране | редактиране на кода]

Ключово правило за проектирането е да се забрани достъпа до всички ресурси по подразбиране и да се позволява достъп само чрез строго-определени точки за достъп, тоест интерфейсите. Софтуерният интерфейс предлага достъп до ресурсите на компютъра – памет, микропроцесор и т.н. Позволява директен достъп до такива ресурси, където софтуерът може да има много разклонения – понякога катастрофални – за функционалността и стабилността.

Интерфейсите между софтуерните компоненти предлагат: константи, видове данни, видове процедури, извънредни спецификации. Понякога, обществени данни(променливи) са също определени за част от интерфейса.

Интерфейсът на софтуерен модул А е умишлено определен отделно от въвеждането на самия модул А. Последният съдържа истинския код на процедурите (целите) и методите описани в интерфейса, като други „лични“ променливи, процедури и т.н. Друг софтуерен модул Б, например ползвател (клиент) на А, който взаимодейства с А е принуден да извършва това само чрез публикувания(този, до който има достъп) интерфейс. Едно практическо предимство на последно е, че замяната на А с друг със същия интерфейс няма да причини неудобство за Б – как A вътрешно отговаря на изискванията на интерфейса не е от значение за Б, който е загрижен само на спецификациите на интерфейса. (Погледнете за повече информация: Liskov substitution principle.)

Софтуерни интерфейси в обектно-ориентирани езици

[редактиране | редактиране на кода]

В обектно-ориентираните езици, терминът интерфейс е често използван за определяне на абстрактен вид (тип), който не съдържа данни или код, но определя поведението чрез методите. Клас, имайки код и данни за всички методи, отговарящ за този интерфейс трябва да въведе този интерфейс. Нещо повече, класът може да въвежда многофункционални интерфейси, тоест могат да бъдат различни видове едновременно.

Следователно интерфейс е определение за тип. Където и да можем да разменим обект(например при извикване на функция или метод), за да променим типа на обекта, може да се определи по отношение на неговото взаимодействие, без да посочва конкретен клас. Това означава, че всеки клас, който поддържа(въвежда) този интерфейс, може да бъде използван. Например, макетна (моделна) имплементация може да се използва, за да подпомогне развитието на проекта преди крайния продукт.

Обикновено, метод определен в интерфейс не съдържа код и сам по себе си не може да бъде извикан. Интерфейс наречен „стак“(„Stack“) може да определя(въвежда) два метода: push() и pop(). Може да има различни вариации, например, FastStack и GenericStack – първият, работещ със стакове с определен размер и вторият използващ структура от данни, която може да бъде преоразмерявана, но с цената на по-бавно действие.

Макар интерфейсите да съдържат много методи, те могат да съдържат и само един или нито един. Например, езикът Java дава интерфейсът Readable, който има единичен read() метод.

Маркиращи интерфейси като Serializable не съдържат методи и служи за предоставяне на информация по време на изпълнение на обработка.

Програмиране на интерфейс

[редактиране | редактиране на кода]

Използването на интерфейси позволява стил на програмиране, наречен programming to the interface. Идеята е да осигури логика на програмиране на интерфейсите на обектите, които са използвани, отколкото на вътрешните детайли по изпълнението.

Програмирането на интерфейса намалява зависимостта от спецификата на изпълнение и прави кода използваем многократно.