Késői kötés

A számítástechnikában a késői kötés vagy dinamikus csatolás[1] – bár nem azonos folyamat az importált kódkönyvtárak dinamikus összekapcsolásával – olyan számítógépes programozási mechanizmus, amelyben egy objektumra hívódik meg metódus vagy az argumentumokkal hívódik meg függvény, futásidőben. Más szavakkal, egy név egy adott művelethez vagy objektumhoz van társítva futási időben, nem pedig fordítás közben. A dinamikus kötés elnevezést csak ritkán használják,[2] de gyakrabban alkalmazzák a dinamikus hatókörre utalva.

A korai kötésnél vagy statikus kötésnél egy objektumorientált nyelvben a fordítási fázis minden típusú változót és kifejezést rögzít. Ezt általában a lefordított programban eltolásként tárolják egy virtuális metódustáblában ("v-tábla").[3] Ezzel szemben a késői kötésnél a fordító nem olvas elég információt ahhoz, hogy megerősítse a metódus létezését, vagy ahhoz, hogy köti-e a slotját a v-táblázaton. Ehelyett a metódus név szerint keres futás közben.

A COM (Component Object Model) programozásban a késői kötés használatának elsődleges előnye az, hogy nem szükséges, hogy a fordító hivatkozzon azokra a könyvtárakra, amelyek a fordítás során tartalmazzák az objektumot. Így a fordítási folyamat ellenállóbbá válik a verziókonfliktusokkal szemben, amelyekben az osztály v-táblázata véletlenül módosulhat. (Ez nem ad aggodalomra okot a just-in-time fordítással összeállított platformokon, mint pl. NET vagy Java, mert a v-táblát futás közben hozza létre a virtuális gép a futó alkalmazásba való betöltésekor a könyvtárakkal szemben.[4]

Történet

A "késői kötés" elnevezés legalább az 1960-as évekre nyúlik vissza, ahol megtalálható a Communications of the ACM-ben. Az elnevezést széles körben használták a hívási konvenciók leírása során olyan nyelveken, mint a Lisp, bár általában negatív konnotációval a teljesítményre vonatkozólag.[5]

Az 1980-as években a Smalltalk népszerűsítette az objektumorientált programozást (OOP), és ezzel együtt a késői kötést is. Alan Kay egyszer azt mondta: "Az OOP számomra csak az üzenetküldést, a helyi megőrzést, az állapotfolyamatok védelmét és elrejtését jelenti, és minden dolog rendkívül késői kötését. Megtehető Smalltalkban és LISP-ben. Lehetséges az, hogy vannak egyéb rendszerek, amelyekben ez lehetséges, de ennek nem vagyok tudatában."[6]

Az 1990-es évek elején és közepén a Microsoft erőteljesen népszerűsítette a COM-szabványát mint a különböző OOP programozási nyelvek közötti bináris interfész. A COM programozás egyaránt elősegítette a korai és késői kötést, számos nyelv támogatja mindkettőt szintaktikai szinten.

2000-ben Alex Martelli megalkotta a " kacsa gépelés " kifejezést, hogy hasonló fogalomra utaljon, de más hangsúlyozással. Míg a késői kötés általában a megvalósítás részleteire összpontosít, addig a kacsa gépelés arra a képességre, hogy figyelmen kívül hagyja a típusokat, és az objektum aktuális metódusaira koncentráljon.

Késői kötési implementációk

Késői kötés a dinamikusan tipizált objektumorientált nyelvekben

A legtöbb dinamikusan tipizált nyelvben az objektumon lévő eljárások listája futás közben változtatható. Ehhez késői kötés szükséges.

Késői kötés Lispben

A Lisp programban a késői kötött globális függvényhívások hatékonyan megkereshetők futási időben egy szimbólum függvénycellán keresztül. Ezek a függvénykötések változtathatók.

Példa egy interaktív Clozure Common Lisp munkamenet használatára:

? (defun foo ()
  (bar pi))  ; a still undefined function BAR gets called
;Compiler warnings :
;  In FOO: Undefined function BAR
FOO

? (defun bar (x)  ; now we define it
  (* x 2))
BAR

? (foo)  ; calling foo and it uses the recent definition of BAR
6.283185307179586D0

? (defun bar (x)  ; now we redefine BAR
  (* x 1000))
BAR

? (foo)  ; FOO now calls the new function, there is no need to recompile/link/load FOO
3141.592653589793D0

? (type-of 'bar)  ; BAR is a symbol
SYMBOL

? (symbol-function 'bar) ; the symbol BAR has a function binding
#<Compiled-function BAR #x302000D1B21F>

Késői kötés C++ nyelven

A C++ nyelvben a késői kötés (más néven "dinamikus kötés") arra utal, hogy általában mi történik, amikor a virtual kulcsszót használják egy metódus deklarációjában. A C++ ezután létrehoz egy úgynevezett virtuális táblát, amely az ilyen függvények keresési táblája, ami mindig lekérdezésre kerül, amikor meghívják őket.[7] Általában a "késői kötés" kifejezést a "dinamikus feladás" javára használják.

Késői kötés a COM nyelveken

A COM programozásban az IDispatch interfészen keresztül egy késői kötött metódushívás történik. Egyes COM-alapú nyelvek, mint például a Visual Basic 6 szintaktikai támogatással rendelkeznek ennek a felületnek a hívásához.[8] Ez úgy lehetséges, hogy a változó típusát Object-ként határozzuk meg. Másokhoz, például a C++-hoz, kifejezetten meg kell hívnia a GetIDsOfNames-t a metódus kereséséhez, az Invoke-ot pedig a meghíváshoz.

Késői kötés a .NET-ben

A .NET-ben, a késői kötés egy virtual eljárás, például a C++ felülbírálására vagy egy interfész megvalósítására utal. A fordító minden virtuális vagy interfész metódushíváshoz virtuális táblákat készít, amelyeket futási időben használnak a végrehajtandó megvalósítás meghatározására.

A COM-hoz és a Java-hoz hasonlóan a Common Language Runtime is biztosít olyan tükrözési API-kat, amelyek késleltetett kötési hívásokat indíthatnak el. E hívások használata nyelvenként különböző lehet.

A C#4-nél a nyelv hozzáadta a "dinamikus" pszeudo-típust is. Ez az Object típus helyett használható annak jelzésére, hogy késői kötés kívánatos. A szükséges konkrét késői kötési mechanizmust futási időben határozzák meg a Dynamic Language Runtime kiindulási pontként használva.

A Visual Basic akkor alkalmazza ezeket, amikor a változó Object típusú, és az "Option Strict Off" fordítói direktíva érvényben van. Ez az alapértelmezett beállítás egy új VB-projekthez. A 9-es verzió előtt csak a .NET és COM objektumok későn köthetők. A VB 10-nél ezt kiterjesztették a DLR-alapú objektumokra is.

Késői kötés Java nyelven

A Java-ban három definíció létezik a késői kötésre.

A Java korai dokumentumai azt vitatták, hogy az osztályokat hogyan nem kapcsolták össze a fordításkor. Míg a típusokat statikusan ellenőrzik a fordításkor, az osztályok különböző implementációit közvetlenül a futásidő előtt ki lehet cserélni az osztályfájl felülírásával. Amíg az új osztálydefiníció ugyanazokkal az osztály- és metódusnevekkel bír, a kód továbbra is működni fog. Ebben az értelemben hasonló a késői kötés hagyományos meghatározásához.

Jelenleg a Java programozásban népszerű a késői kötés kifejezés a dinamikus küldés szinonimájaként. Ez konkrétan a Java virtuális metódusokkal használt egyetlen küldési mechanizmusára vonatkozik.

Végül a Java használhat késői kötést a tükrözési API-k segítségével, és ugyanúgy begépelheti az introspekciót, mint ahogyan a COM-ban és a .NET programozásban is. Általában azok, akik csak Java nyelven programoznak, nem hívják ezt a késői kötést. Hasonlóképpen, a "kacsa gépelés" technikák használata rosszindulatú a Java programozásban, helyette absztrakt felületeket használnak.

Az Oracle, a Java jelenlegi tulajdonosa köztudottan a "kacsa gépelés" értelmében használja a késői kötés kifejezést, amikor a Java-ról és más nyelvekről beszél ugyanabban a dokumentációban.[9]

Korai vs. késői kötés PL/SQL-ben és Ada-ban

Ha korai összerendelést használ az Ada és egy adatbázisban tárolt eljárás között, egy időbélyeg ellenőrzi, hogy a tárolt eljárás nem változott-e a kód lefordítása óta. Ez gyorsabb végrehajtást tesz lehetővé, és meggátolja, hogy az alkalmazás a tárolt eljárás rossz verziójával szemben fusson.[10]

Késői kötés használatakor az időbélyeg-ellenőrzés nem történik meg, a tárolt eljárás pedig egy névtelen PL/SQL blokkon keresztül fut le. Bár ez lassabb is lehet, szükségtelenné válik az összes ügyfélalkalmazás újrafordítása, amikor egy tárolt eljárás megváltozik.

Úgy tűnik, hogy ez a megkülönböztetés egyedülálló a PL/SQL és az Ada esetében. Más nyelvek, amelyek PL/SQL-eljárásokat hívhatnak, valamint más adatbázismotorok csak késői összerendelést használnak.

Kritika

A késői kötés gyengébb teljesítményt nyújt, mint a korai kötésű metódushívás. A legtöbb megvalósításban a helyes metóduscímet minden hívásnál név szerint kell kikeresni, ami viszonylag költséges szótárkeresést és esetleges túlterhelés-feloldási logikát igényel. A legtöbb alkalmazásban a többlet számítási és időigény már elhanyagolható a modern számítógépeken.

Egyes fordítóknál a késői kötés megakadályozhatja a statikus típusellenőrzés alkalmazását. Késői kötött hívás indításakor a fordítónak feltételeznie kell azt, hogy a metódus létezik. Ez azt jelenti, hogy egy egyszerű helyesírási hiba futásidejű hibát okozhat. A modern fordítók ezt elkerülik azzal, hogy a fordítás során minden lehetséges hívásnak rendelkeznie kell implementációval.

A késői kötés megakadályozhatja az integrált fejlesztői környezet (IDE) által igényelt statikus elemzés formáit. Előfordulhat például, hogy egy IDE „meghatározásra lépés” funkciója nem működik későn kötött hívás esetén, ha az IDE nem tudja megtudni, hogy a hívás melyik osztályra vonatkozhat. Egy modern IDE különösen az objektumorientált nyelvek esetében könnyen megoldja ezt, mivel a késői kötésű metódusok mindig megadnak egy interfészt vagy egy alaposztályt, ahová a "meghatározásra lépés" vezet, a "minden hivatkozás keresése" pedig az összes megkeresésére megkeresésére vagy felülírására használható.[11]

Jegyzetek

  1. Schreiner, Axel-Tobias. Object-Oriented Programming With ANSI-C. Munich: Hanser, 15. o. (1994). ISBN 3-446-17426-5 
  2. Booch, Grady. Object-oriented Analysis and Design. Addison-Wesley, 1994. p71
  3. Using early binding and late binding in Automation. Microsoft, 2003. szeptember 6. [2014. június 27-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. június 27.)
  4. The Structure of the Java Virtual Machine: Dynamic Linking. Sun Microsystems, 1999. (Hozzáférés: 2013. szeptember 21.)
  5. Software engineering techniques, J. N. Buxton, Brian Randell, NATO Science Committee, NATO Science Committee, 1970
  6. Dr. Alan Kay on the Meaning of "Object-Oriented Programming". Purl.org. [2020. szeptember 16-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. augusztus 16.)
  7. 12.5 — The virtual table « Learn C. Learncpp.com, 2008. február 8. (Hozzáférés: 2013. augusztus 16.)
  8. Using early binding and late binding in Automation. Support.microsoft.com. (Hozzáférés: 2011. január 15.)
  9. Calling into WebLogic Server from a COM Client Application. Download.oracle.com. (Hozzáférés: 2013. augusztus 16.)
  10. Early and Late Binding, Oracle SQL *Module for Ada Programmer's Guide. Download.oracle.com. (Hozzáférés: 2011. január 15.)
  11. KathleenDollard: Early and Late Binding - Visual Basic (amerikai angol nyelven). learn.microsoft.com. (Hozzáférés: 2023. április 12.)

Fordítás

Ez a szócikk részben vagy egészben a Late binding című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Kapcsolódó szócikkek

Read other articles:

Bilangan desimal dengan angka 9 berulang tak terhingga. 0,999… dalam matematika adalah suatu bilangan desimal yang memuat angka 9 berulang tak terhingga. Juga bisa ditulis sebagai 0 , 9 ¯ {\displaystyle 0,{\bar {9}}} , 0 , 9 ˙ {\displaystyle 0,{\dot {9}}} , atau   0 , ( 9 ) {\displaystyle \ 0,(9)} . Bilangan ini merupakan sebuah bilangan real yang secara matematis memiliki nilai sama dengan 1. Dengan kata lain, 0,999… mewakili bilangan yang sama dengan angka 1. Persamaa...

 

Penampang melintang suatu bintil akar kedelai 'Essex'. Bakteri Bradyrhizobium japonicum menginfeksi akar dan bersimbiosis untuk mengikat nitrogen bebas. Tampak bagian sel dengan satu bakteroid dalam simbiosomnya. Tampak pula retikulum endoplasmik, diktiosom, dan dinding sel. Bintil akar merupakan tonjolan kecil di akar (kebanyakan adalah anggota Fabaceae) yang terbentuk akibat infeksi bakteri pengikat nitrogen yang bersimbiosis secara mutualistik dengan tumbuhan. Kerja sama ini memungkinkan t...

 

Spanish football manager In this Spanish name, the first or paternal surname is Villar and the second or maternal family name is Ferreiro. Pablo Villar Villar in 2023Personal informationFull name Pablo Villar FerreiroDate of birth (1986-09-04) 4 September 1986 (age 37)Place of birth Avilés, SpainHeight 1.86 m (6 ft 1 in)Position(s) GoalkeeperTeam informationCurrent team Meizhou Hakka (manager)Youth career Colegio San Fernando Histórico Carbayedo Navarro Quirinal2...

Basilika Bunda Maria dari KarmelBasilika Minor Bunda Maria dari KarmelSpanyol: Basílica de Nuestra Señora del Carmencode: es is deprecated Basilika Bunda Maria dari KarmelLokasiNogoyáNegara ArgentinaDenominasiGereja Katolik RomaArsitekturStatusBasilika minorStatus fungsionalAktif Basilika Bunda Maria dari Karmel adalah sebuah gereja basilika minor Katolik yang terletak di Nogoyá, Argentina. Basilika ini ditetapkan statusnya pada 1967 dan didedikasikan kepada Bunda dari Karmel.[1&...

 

Templat:Geobox2 pushpin map Biara Jerónimos (Mosteiro dos Jerónimos) Biara Hieronimus Biara (Mosteiro) Pintu masuk utama Nama resmi: Mosteiro da Santa Maria de Belém Nama asal: jerónimo atau Santo Hieronimus, mengacu kepada Ordo Santo Hieronimus Julukan: O Jerónimos Negara  Portugal Region Lisboa Sub-region Grande Lisboa Kabupaten Lisboa Munisipalitas Lisboa Lokasi Santa Maria de Belém  - elevasi 11 m (36 ft)  - koordinat Ars...

 

Hugo Chávez Presiden VenezuelaMasa jabatan2 Februari 1999 – 5 Maret 2013Wakil PresidenJulián Isaías Rodríguez DiazAdina BastidasDiosdado CabelloJosé Vicente RangelJorge RodríguezRamón CarrizalesElías JauaNicolás Maduro PendahuluRafael CalderaPenggantiNicolás Maduro Informasi pribadiLahirHugo Rafael Chávez Frías(1954-07-28)28 Juli 1954Sabaneta, VenezuelaMeninggal5 Maret 2013(2013-03-05) (umur 58)Caracas, VenezuelaPartai politikGerakan Republik Kelima (1997–2008)PS...

Mabalacat component city (en) Dinamakan berdasarkanZiziphus talanae (en) Tempat Negara berdaulatFilipinaRegion di FilipinaLuzon TengahProvinsi di FilipinaPampanga NegaraFilipina PendudukTotal293.244  (2020 )Tempat tinggal74.707  (2020 )Bahasa resmiKapampangan, Mag-antsi (en) dan Tagalog GeografiLuas wilayah83,18 km² [convert: unit tak dikenal]Ketinggian166 m Berbatasan denganBamban SejarahPembuatan1712 Organisasi politik• Kepala pemerintahanCrisostomo Garbo (en) Inf...

 

Major League SoccerAltri nomiMLS Sport Calcio TipoClub CategoriaMaschile Federazione USSF Paese Stati Uniti Canada Organizzatore Major League Soccer Direttore Don Garber TitoloCampione MLS CadenzaAnnuale AperturaFebbraio ChiusuraDicembre Partecipanti29 FormulaStagione regolare e play-off Sito Internetmlssoccer.com StoriaFondazione1993 Numero edizioni28 Detentore Columbus Crew Record vittorie LA Galaxy (5) Ultima edizioneMLS 2023 Edizione in corsoMLS 2024 Trofeo Philip Fred...

 

Amusement center Topgolf International, Inc.Topgolf logoTrade nameTopgolf Entertainment GroupCompany typeCorporationTraded asMODGIndustrySports entertainmentFounded2000; 24 years ago (2000)Watford, England, U.K.FoundersSteve JolliffeDave JolliffeMark MurrayBarry CumbieHeadquartersDallas, Texas, United StatesNumber of locations80Area servedAustraliaChinaGermanyMexicoThailandUAEUnited KingdomUnited StatesKey peopleArtie Starrs (CEO)Geoff Cottrill (CMO)Gen Gray (COO of Global T...

Kontributor utama artikel ini tampaknya memiliki hubungan dekat dengan subjek. Artikel ini mungkin memerlukan perapian untuk mematuhi kebijakan konten Wikipedia, terutama dalam hal sudut pandang netral. Silakan dibahas lebih lanjut di halaman pembicaraan artikel ini. (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Whizzkid beralih ke halaman ini. Untuk Grup Musik Indonesia, lihat Whizzkid (disambiguasi). Artikel ini sudah memiliki daftar referensi, bacaan terkait, atau pra...

 

此條目可参照英語維基百科相應條目来扩充。 (2021年5月6日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 约翰斯顿环礁Kalama Atoll 美國本土外小島嶼 Johnston Atoll 旗幟颂歌:《星條旗》The Star-Spangled Banner約翰斯頓環礁�...

 

 烏克蘭總理Прем'єр-міністр України烏克蘭國徽現任杰尼斯·什米加尔自2020年3月4日任命者烏克蘭總統任期總統任命首任維托爾德·福金设立1991年11月后继职位無网站www.kmu.gov.ua/control/en/(英文) 乌克兰 乌克兰政府与政治系列条目 宪法 政府 总统 弗拉基米尔·泽连斯基 總統辦公室 国家安全与国防事务委员会 总统代表(英语:Representatives of the President of Ukraine) 总...

Ikon Ortodoks Rusia tentang Pencuri yang Baik di Firdaus (Mazhab Moskow, c. 1560). Konversi menjelang ajal (bahasa Inggris: deathbed conversion) adalah tindakan menerima dan menganut suatu keyakinan agama tertentu sesaat sebelum orang tersebut wafat atau meninggal dunia. Seseorang yang melakukan konversi agama di ranjang kematiannya mungkin mencerminkan perubahan keyakinan yang seketika, keinginan menjadikan formal seperangkat keyakinan untuk jangka panjang, atau juga keinginan menyelesai...

 

Indian e-commerce company FlipkartCompany typeSubsidiaryIndustryE-commerceFounded2007; 17 years ago (2007)FounderSachin BansalBinny BansalHeadquartersBangalore, Karnataka, India (operational HQ)Singapore (legal domicile)Area servedIndiaKey peopleKalyan Krishnamurthi (CEO)[1]ServicesOnline shoppingRevenue ₹56,013 crore (US$6.7 billion)[2] (FY2022-23)Net income ₹−4,834 crore (US$−580 million)[2] (FY2022-23)Number of employees...

 

Overview of music traditions in the U.S. state of Illinois This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Music of Illinois – news · newspapers · books · scholar · JSTOR (June 2014) Music of the United States AK AL AR AS AZ CA CO CT DC DE FL GA GU HI IA ID IL IN KS KY LA MA MD ME MI MN MO MP MS MT...

Untuk kegunaan lain, lihat Kayu putih (disambiguasi). Kayu putih Kayu putih dari Koehler Klasifikasi ilmiah Kerajaan: Plantae (tanpa takson): Tracheophyta (tanpa takson): Angiospermae (tanpa takson): Eudikotil (tanpa takson): Eudikotil inti (tanpa takson): Asterid Ordo: Myrtales Famili: Myrtaceae Genus: Melaleuca Spesies: M. leucadendra Nama binomial Melaleuca leucadendra(L.) L. Kayu putih (Melaleuca leucadendra syn. M. leucadendron) merupakan pohon anggota suku jambu-jambuan (Myrtaceae)...

 

Municipality in Northeast, BrazilFeira Nova Município de Feira NovaMunicipality SealLocation of Feira Nova in SergipeFeira NovaLocation of Feira Nova in BrazilCoordinates: 10°15′50″S 37°18′46″W / 10.26389°S 37.31278°W / -10.26389; -37.31278Country BrazilRegionNortheastState SergipeFoundedOctober 18, 1963Government • MayorJonathas Oliveira SantosArea • Total183.3 km2 (70.8 sq mi)Population (2020 [1])&...

 

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字(Microsoftコードページ932(はしご高))が含まれています(詳細)。 2022年のNPBオールスターゲーム マイナビオールスターゲーム2022ゲームデータスポンサー マイナビセ監督 髙津臣吾パ監督 中嶋聡セ投票最多 村上宗隆パ投票最多 山川穂高第1戦日程 7月26日開催地 福岡PayPayドームスコア セ・リーグ 2-...

Questa voce sull'argomento società calcistiche greche è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Panīleiakos A.O.Calcio Segni distintiviUniformi di gara Casa Trasferta Terza divisa Colori sociali Rosso e bianco Dati societariCittàPyrgos Nazione Grecia ConfederazioneUEFA Federazione EPO CampionatoGamma Ethniki Fondazione1958 Presidente Christos Xitos Allenatore Angelos Digozis StadioDimotiko Stadio Pyrgou(6 750 posti) Sito webhttps://...

 

American basketball player (1915–2002) Ike PoolePersonal informationBorn(1915-10-10)October 10, 1915McGehee, ArkansasDiedJune 24, 2002(2002-06-24) (aged 86)NationalityAmericanListed height6 ft 3 in (1.91 m)Career informationCollegeArkansas (1933–1936)PositionForwardCareer highlights and awards Consensus All-American (1936) 2× All-SWC (1935, 1936) H. L. Ike Poole (October 10, 1915 – June 24, 2002) was an All-American basketball player at the University of Arkansas. H...