Интерфейс (програмиране): Разлика между версии

Изтрито е съдържание Добавено е съдържание
Danitdanit (беседа | приноси)
Пренаписах и допълних.
м форматиране: 10 интервала, нов ред (ползвайки Advisor)
Ред 1:
При'''Интерфейсът''' компютрите,в интерфейсът[[информатика]]та е споделена граница между два разделени компютърни[[компютър]]ни компонента, обменящи информация. Обмяната може да стане посредствомчрез [[софтуер]], [[хардуер]], [[периферни устройства]], хора и различни комбинации от изброените. Някои компютърни хардуерни устройства като [[тъчскрийн]] могат едновременно да приемат и изпращат данни през интерфейса, докато други като [[Мишка (хардуер)|мишка]], [[микрофон]] и [[джойстик]] действат само едностранно.
 
== Хардуерни интерфейси ==
Хардуерните интерфейси съществуват в много от съставните части като устройства за съхранение на данни и други входно-изходни устройства. Хардуерният интерфейс е описан чрез механичните, електрическите и логични сигнали при интерфейса и протокол за тяхната последователност. Стандартен интерфейс, като SCSI, разделя проектирането и въвеждането на изчислителен хардуер, като входно-изходни устройства, от проектирането и въвеждането на други части от компютърната(изчислителната) система, позволявайки на ползватели и производители отлична гъвкавост при използването на изчислителни системи. Хардуерните интерфейси могат да бъдат успоредни с няколко електрически връзки поддържащи части от данните(паметта) едновременно или серийни, където данните се изпращат бит по бит.
 
== Софтуерни интерфейси ==
 
=== Софтуерни интерфейси в реалността ===
Ключово правило за проектирането е да се забрани достъпа до всички ресусрсиресурси по подразбиране и позволявайкида се позволява достъп само чрез строго-определенитеопределени точки за достъп, тоест интерфейсите. Софтуерният интерфейинтерфейс предлага достъп до ресурсите на компютъра – памет, микропроцесор и т.н.. Позволява директен достъп до такива ресурси, където софтуерът може да има много разклоненичразклонения – понякога катастрофални – за  функционалностфункционалността и стабилностстабилността.
 
Интерфейсите между софтуерните компоненти предлагат: константи, видове данни, видове процедури, извънредни спецификации. Понякога, обществени данни(променливи) са също определени за част от интерфейса.
 
Интерфейсът на софтуерен модул А е умишлено определен отделно от въвеждането на самия модул А. Последният съдържа истинския код на процедурите (целите) и методите описани в интерфейса, като други „лични“ променливи, процедури и т.н.. Друг софтуерен модул Б, например ползвател (клиент) на А, който взаимодейства с А е принуден да извършва това само чрез публикувания( този, до който има достъп ) интерфейс. Едно практическо предимство на последно е, че замяната на А с друг със същия интерфейс няма да причини неудобство за Б – как A вътрешно отговаря на изискванията на интерфейса не е от значение за Б, който е загрижен само на спецификациите на интерфейса. (Погледнете за повече информация:  [[Liskov substitution principle]].)
 
=== Софтуерни интерфейси в обектно-ориентирани езици: ===
В обектно-ориентираните езици, терминът интерфейс е често използван за определяне на абстрактен вид (тип), който не съдържа данни или код, но определя поведението чрез методите. Клас, имайки код и данни за всички методи, отговарящ за този интерфейс трябва да въведе този интерфейс. Нещо повече, класът може да  въвежда многофункционални интерфейси, тоест могат да бъдат различни видове едновременно.
 
Следователно интерфейс е определение за тип. Където и да можем да разменим обект(например при извикване на функция или метод), за да променим типа на обекта, може да се определи по отношение на неговото взаимодействие, без да  посочва конкретен клас. Това означава, че всеки клас, който поддържа(въвежда) този интерфейс, може да бъде използван. Например, макетна (моделна) имплементация може да се използва, за да подпомогне развитието на проекта преди крайния продукт.
 
Обикновено, метод определен в интерфейс не съдържа код и сам по себе си не може да бъде извикан. Интерфейс наречен „стак“(„Stack“) може да определя(въвежда) два метода: push()  и pop(). Може да има различни вариации, например, FastStack и GenericStack – първият, работещ със стакове с определен размер и вторият използващ структура от данни, която може да бъде преоразмерявана, но с цената на по – бавно действие.
 
Макар интерфейсите да съдържат много методи, те могат да съдържат и само един или нито един. Например, езикът Java дава интерфейсът Readable, който  има едениченединичен  read() метод.
 
Маркиращи интерфейси като  Serializable не съдържат методи и служи за предоставяне на информация по време на изпълнение на  обработка.
 
=== Програмиране на интерфейс: ===
Използването на интерфейси позволява стил на програмиране, наречен programming to the interface. Идеята е да осигури логика на програмиране на интерфейсите на обектите, които са използвани, отколкото на вътрешните детайли по изпълнението.
 
Програмирането на интерфейса намалява зависимостта от спецификата на изпълнение и прави кода преизползваемизползваем многократно.
 
== Вижте също ==