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

Изтрито е съдържание Добавено е съдържание
PegasusTeam (беседа | приноси)
Редакция без резюме
PegasusTeam (беседа | приноси)
Редакция без резюме
Ред 80:
В този случай това API може да се интерпретира като два метода <code>pop()</code> и <code>push()</code>, или по-общо казано като идея, при която някой може да използва елемент от тип <code>Stack</code>, който имплементира (наследява) поведението на стека: една купчина, на която да се премахват. Втората интерпретация изглежда по-подходяща в духа на [[Обектно-ориентирано програмиране|обектното ориентиране]].
 
Тази концепция може да бъде приложена до там, докъдето интерфейса на класа в едно API няма методи като цяло, а има само поведения свързани с него. Например, API-тата на езиците [[Java language|Java]] и [[Lisp (език за програмиране)|Lisp]] съдържат интерфейс с името Serializable, който е маркерен интерфейс, изискващ всеки клас да го имплементира с поведението на класа Serializable[[Serialization|serialized]]. Това не изисква имплементация на публичен метод, а изисква всеки клас, който имплементира този интерфейс да бъде на основата на представяне, което може да бъде записано по всяко време.
 
По същия начин поведението на обект в многонишкова среда не е задължително да се определя от конкретни методи, принадлежащи на имплементирания интерфейс, но все още принадлежащи и на API-то за обектите от този клас, и би трябвало а бъде описано в документацията.
Ред 120:
Когато отдалчението е на място, модификация на прокси обекта отговаря на модификация на отдалечение обект. Когато имаме само трансфер на обект, модификацията на локалното копие на обекта не е рефлектирано върху оригиналния обект, освен ако обекта не е изпратен към изпращаща система.
 
===Споделяне на API-та и преизползване чрез виртуална машина===
 
Някои езици, като тези, които се изпълняват върху [[виртуална машина]] (например .NET CLI компилиращите езици в CLR-а, и JVM-компилиращите езици в Java виртуалната машина) могат да споделят API. В този случай виртуалната машина позволява взаимодействието между езиците, правещ абстрактен програмния език, използвайки междинен байт кодекод и неговите езикови привързвания. В тези езици [[компилатора]] подготвя навременна компилация или преждевременна компилация, трансформирайки сорс кода, вероятно написан на няколко езика, в неговото независимо езиково байткод представяне.
 
Например чрез байкод представяне, програма, която е написана на езиците [[Groovy (език за програмиране)|Groovy]] или [[Scala (programming language)|Scala]] имат обектен модел, който е superset на този, който е на езика Java, така, че всяко API, което е представено чрез Java обект е досъпно чрез Groovy и Scala с еквивалентно извикване на обект, преведено в байткод.
 
От друга страна първокласните обекти, които не присъстват в Java като [[Затваряне (информатика)|закривания]]. Тези обекти не могат да бъдат естествено представени в езика Java (Java 8 въведе концепцията за ламбда[[Анонимна функция|анонимна еспрешънифункция]]. Така, че за да даде възможност за много операции, closure е капсулирана в стандартен Java обект. В този случай извикването на closure е посредничил с метод, с името <code>call()</code>, който често представя в closure обект , както е при Java, и в Java the closure не представя първокласен обект.
== Видове ==