Dynamic dispatch (original) (raw)
Der Begriff dynamische Bindung (englisch dynamic binding) bezeichnet die verzögerte Bindung eines Namens an ein Objekt, das diesen Namen implementiert;die Bindung des Namens an z. B. eine konkrete Variable, Funktion oder Methode erfolgt erst zum Zeitpunkt der Anweisungsausführung, d. h. zur Laufzeit. Dynamische Bindung ist generell eine Eigenschaft schwach typisierter Programmiersprachen, die mittlerweile auch von streng typisierten Programmiersprachen eingesetzt wird. Historisch wurde dynamische Bindung mit den Lisp-Dialekten zuerst eingeführt.
Property | Value |
---|---|
dbo:abstract | Dynamický výběr, angl. dynamic dispatch, je v programování metoda výběru polymorfní operace (metody nebo funkce), která se má za běhu zavolat. Dynamický výběr je v protikladu ke (static dispatch), při kterém je (viz) polymorfní operace vybrána v průběhu kompilace.Účel dynamického výběru je podporovat ty případy, kdy nelze určit příslušnou implementaci polymorfní operace staticky kompilátorem, protože závisí na dynamickém (tj. běhovém) typu jednoho nebo více parametrů. Podobná implementační technika je pozdní vazba, late binding. Dynamický výběr se často používá v objektově-orientovaných jazycích, když různé třídy obsahují různé implementace stejné metody díky dědičnosti. Například předpokládejme, že dvě třídy B a C dědí metodu foo z A. Když x je proměnná typu A. Za běhu může x obsahovat hodnotu typu B nebo C kromě A a obecně tento konkrétní typ nelze určit při kompilaci. Při statickém výběru volání metody x.foo bude vždy odkazovat na implementaci foo ze třídy A, protože statický výběr určuje implementaci podle deklarovaného typu objektu. Při dynamickém výběru bude zjištěn typ hodnoty v proměnné x za běhu a zavolá se implementace foo, která je asociovaná s konkrétním typem uložené hodnoty, ať je to A , B nebo C. (cs) Der Begriff dynamische Bindung (englisch dynamic binding) bezeichnet die verzögerte Bindung eines Namens an ein Objekt, das diesen Namen implementiert;die Bindung des Namens an z. B. eine konkrete Variable, Funktion oder Methode erfolgt erst zum Zeitpunkt der Anweisungsausführung, d. h. zur Laufzeit. Dynamische Bindung ist generell eine Eigenschaft schwach typisierter Programmiersprachen, die mittlerweile auch von streng typisierten Programmiersprachen eingesetzt wird. Historisch wurde dynamische Bindung mit den Lisp-Dialekten zuerst eingeführt. (de) Στην επιστήμη των υπολογιστών και συγκεκριμένα στο αντικειμενοστρεφή προγραμματισμό η δυναμική αποστολή (Αγγλικά: Dynamic dispatch) είναι μια διαδικασία κατά την υλοποίηση μιας πολυμορφικής ενέργειας (μεθόδου ή συνάρτησης) που καλείται κατά τον χρόνο εκτέλεσης. Η δυναμική αποστολή έχει διαφορά με την στατική αποστολή (αγγλικά: static dispatch) η οποία υλοποιεί μια πολυμορφική ενέργεια κατά την διάρκεια της μεταγλώττισης του κώδικα. Ο στόχος της δυναμικής αποστολής είναι η υποστήριξη περιπτώσεων όπου η πολυμορφική ενέργεια δεν μπορεί να καθοριστεί κατά την διάρκεια του χρόνου μεταγλώττισης αλλά εξαρτάται από τις συνθήκες και τις παραμέτρους που καθορίζονται στον χρόνο εκτέλεσης. Γενικά ο όρος δέσμευση ή σύνδεση (Αγγλικά: binding) αναφέρεται στον τρόπο που γίνεται η κλήση μιας μεθόδου και του συσχετισμού με τον κώδικά της. Κατά τον μηχανισμό καθυστερημένης δέσμευσης (Αγγλικά: late binding) ο κώδικας της μεθόδου συσχετίζεται κατά την εκτέλεση του κώδικα (Αγγλικά: runtime). Στην Java χρησιμοποιείται για κάθε κλήση μεθόδων ως προεπιλογή ο μηχανικός καθυστερημένης δέσμευσης με εξαίρεση τις private, final και static μεθόδους. Στην C++ χρησιμοποιείται η τεχνική πρώιμης δέσμευσης (Αγγλικά: early binding) όπου ο κώδικας της μεθόδου συσχετίζεται κατά την μεταγλώττιση του κώδικα (Αγγλικά: compile time). Στην C++ χρησιμοποιείται ως προεπιλογή η στατική αποστολή (Αγγλικά: static dispatch) και η δυναμική αποστολή γίνεται όταν ορίζουμε μια μέθοδο ως virtual και για να υλοποιηθεί η δυναμική αποστολής ένας πίνακας συσχέτισης υπερβατικών συναρτήσεων (Αγγλικά: virtual method table) vtable . (el) In computer science, dynamic dispatch is the process of selecting which implementation of a polymorphic operation (method or function) to call at run time. It is commonly employed in, and considered a prime characteristic of, object-oriented programming (OOP) languages and systems. Object-oriented systems model a problem as a set of interacting objects that enact operations referred to by name. Polymorphism is the phenomenon wherein somewhat interchangeable objects each expose an operation of the same name but possibly differing in behavior. As an example, a File object and a Database object both have a StoreRecord method that can be used to write a personnel record to storage. Their implementations differ. A program holds a reference to an object which may be either a File object or a Database object. Which it is may have been determined by a run-time setting, and at this stage, the program may not know or care which. When the program calls StoreRecord on the object, something needs to choose which behavior gets enacted. If one thinks of OOP as sending messages to objects, then in this example the program sends a StoreRecord message to an object of unknown type, leaving it to the run-time support system to dispatch the message to the right object. The object enacts whichever behavior it implements. Dynamic dispatch contrasts with static dispatch, in which the implementation of a polymorphic operation is selected at compile time. The purpose of dynamic dispatch is to defer the selection of an appropriate implementation until the run time type of a parameter (or multiple parameters) is known. Dynamic dispatch is different from late binding (also known as dynamic binding). Name binding associates a name with an operation. A polymorphic operation has several implementations, all associated with the same name. Bindings can be made at compile time or (with late binding) at run time. With dynamic dispatch, one particular implementation of an operation is chosen at run time. While dynamic dispatch does not imply late binding, late binding does imply dynamic dispatch, since the implementation of a late-bound operation is not known until run time. (en) El enlace dinámico es un mecanismo por el cual se escoge, en tiempo de ejecución, el método que responderá a un determinado mensaje. Es útil cuando este no puede ser determinado de forma estática, es decir, en tiempo de compilación. Esta característica de la programación orientada a objetos permite definir varias implementaciones usando la misma interfaz, por tanto el enlace Dinámico constituye un tipo de polimorfismo. (es) 디스패치는 어떤 메소드를 호출할 것인가를 결정하여 그것을 실행하는 과정이다. 동적 디스패치와 정적 디스패치가 있는데, 동적 디스패치(dynamic dispatch)는 메소드 오버라이딩이 되어있는 경우 실행시점에 어떤 메소드를 실행할 지 결정되는 것이다. 정적 디스패치는 그와 다르게 컴파일 시점에 어떤 메소드를 실행할지 결정된다. (ko) Na programação orientada a objetos, ligação dinâmica significa determinar a exata implementação de uma requisição com base no nome da requisição (operação) e no objeto que executa a operação no tempo de execução. Geralmente acontece quando uma função membro de uma é invocada usando um ponteiro para sua classe base. A implementação de uma classe derivada será invocada ao invés da operação da classe base. Isto permite a substituição de uma implementação particular usando a mesma interface, o que por sua vez habilita o uso de polimorfismo. (pt) 在计算机科学中,动态分派(Dynamic dispatch)是指运行时选择哪一个多态的实现(具體的方法或函数)来调用的过程。动态分派通常被应用于面向对象编程(OOP)的语言和系统,并被认为是一个主要特点。 面向对象的系统把一个问题看作是一系列通过名字引用来制定操作的相互影响的物体。多态性是指一些可互换的物体虽有相同名字但却在行为上不同的现象。例如,一个文件对象和一个数据库对象都有一个储存记录的方法来记录需要存储的的个人记录,但是二者的实现却不同。一个程序可以有对文件或数据库的访问。当一个程序调用对象的存储记录时,有一些东西需要来决定采取哪种行为。如果有人认为OOP仅仅指给对象发送信息,那么在这个例子中程序仅仅把一条存储记录信息发送给了一个未知类型的对象,而把如何将这条信息发送给正确对象交给运行支持系统来处理。这个对象来决定它执行哪些行为。 与动态分派成对比的是静态分派,在静态分派中,对一个多态操作的实现是在编译时间就选择好的。动态分派的目的在于支持那些当在编译时间内无法决定一个多态操作的合适的实现因为这个决定取决于这个操作的一个或多个实际参数的运行类型的情形。 动态分派和动态绑定不同。在选择操作的上下文中,绑定把名称和操作相关联,而分派则在确定名称所引用的操作之后选择操作的实现。通过使用动态分派,名称可以在编译时被绑定到多态操纵中,但是直到运行时才执行该实现。虽然动态分派不暗示后期绑定,但后期绑定意味着动态分派,因为绑定决定了什么可以分派。 (zh) |
dbo:wikiPageExternalLink | https://digitalmars.com/articles/C-biggest-mistake.html https://libcello.org/learn/a-fat-pointer-library https://web.archive.org/web/20200221130238/https:/marc.info/%3Fl=freedos-dev&m=101853130816682&w=2 https://web.archive.org/web/20220608050019/https:/www.digitalmars.com/articles/C-biggest-mistake.html https://web.archive.org/web/20220711181009/https:/libcello.org/learn/a-fat-pointer-library https://marc.info/%3Fl=freedos-dev&m=101853130816682&w=2 https://archive.today/20190420111421/https:/groups.google.com/forum/%23!msg/comp.os.geos.programmer/8NNPJ4VU23A/cucVV95kf9oJ https://groups.google.com/d/msg/comp.os.geos.programmer/8NNPJ4VU23A/cucVV95kf9oJ |
dbo:wikiPageID | 847810 (xsd:integer) |
dbo:wikiPageLength | 19385 (xsd:nonNegativeInteger) |
dbo:wikiPageRevisionID | 1112643422 (xsd:integer) |
dbo:wikiPageWikiLink | dbr:Python_(programming_language) dbr:Ruby_(programming_language) dbr:Message_passing dbr:Method_(computer_programming) dbr:Method_overriding dbr:Julia_(programming_language) dbr:Inline_caching dbr:Real_mode dbr:Protected_mode dbr:Common_Lisp dbr:Matrix_(mathematics) dbr:Run_time_(program_lifecycle_phase) dbr:Rust_(programming_language) dbr:Object-oriented_programming dbr:Open_system_(computing) dbr:Function_overloading dbr:Go_(programming_language) dbr:Smalltalk dbr:Compile_time dbr:Computer_science dbr:Function_multi-versioning dbr:Pointer_(computer_programming) dbr:Polymorphism_(computer_science) dbr:Public_interface dbr:C++ dbr:C_Sharp_(programming_language) dbc:Polymorphism_(computer_science) dbr:Fat_pointer dbr:Late_binding dbr:Addison-Wesley dbr:DOS dbr:Dylan_(programming_language) dbr:Nim_(programming_language) dbr:Overlay_(programming) dbr:Floating_point dbr:Groovy_(programming_language) dbr:Prototype-based_programming dbr:JavaScript dbr:Java_(programming_language) dbr:A20_line dbc:Method_(computer_programming) dbr:Swift_(programming_language) dbr:High_memory_area dbr:Digital_Mars dbr:Division_(mathematics) dbr:IBM_Interrupt_Sharing_Protocol dbr:IBM dbr:Intel dbr:Nibble dbr:Objective-C dbr:Rational_numbers dbr:Self_(programming_language) dbr:X86 dbr:Name_binding dbr:Multiple_inheritance dbr:Virtual_memory dbr:Virtual_method_table dbr:Static_dispatch dbr:Segment:offset_addressing_(x86) dbr:PC/GEOS dbr:Real-mode |
dbp:cs1Dates | y (en) |
dbp:date | July 2022 (en) |
dbp:wikiPageUsesTemplate | dbt:About dbt:Anchor dbt:Cite_book dbt:Cite_journal dbt:Cite_newsgroup dbt:Cite_web dbt:Cn dbt:Fact dbt:Main dbt:Mono dbt:More_footnotes dbt:Reflist dbt:See_also dbt:Short_description dbt:Use_dmy_dates dbt:Use_list-defined_references dbt:Polymorphism |
dcterms:subject | dbc:Polymorphism_(computer_science) dbc:Method_(computer_programming) |
gold:hypernym | dbr:Process |
rdf:type | owl:Thing dbo:Election |
rdfs:comment | Der Begriff dynamische Bindung (englisch dynamic binding) bezeichnet die verzögerte Bindung eines Namens an ein Objekt, das diesen Namen implementiert;die Bindung des Namens an z. B. eine konkrete Variable, Funktion oder Methode erfolgt erst zum Zeitpunkt der Anweisungsausführung, d. h. zur Laufzeit. Dynamische Bindung ist generell eine Eigenschaft schwach typisierter Programmiersprachen, die mittlerweile auch von streng typisierten Programmiersprachen eingesetzt wird. Historisch wurde dynamische Bindung mit den Lisp-Dialekten zuerst eingeführt. (de) El enlace dinámico es un mecanismo por el cual se escoge, en tiempo de ejecución, el método que responderá a un determinado mensaje. Es útil cuando este no puede ser determinado de forma estática, es decir, en tiempo de compilación. Esta característica de la programación orientada a objetos permite definir varias implementaciones usando la misma interfaz, por tanto el enlace Dinámico constituye un tipo de polimorfismo. (es) 디스패치는 어떤 메소드를 호출할 것인가를 결정하여 그것을 실행하는 과정이다. 동적 디스패치와 정적 디스패치가 있는데, 동적 디스패치(dynamic dispatch)는 메소드 오버라이딩이 되어있는 경우 실행시점에 어떤 메소드를 실행할 지 결정되는 것이다. 정적 디스패치는 그와 다르게 컴파일 시점에 어떤 메소드를 실행할지 결정된다. (ko) Na programação orientada a objetos, ligação dinâmica significa determinar a exata implementação de uma requisição com base no nome da requisição (operação) e no objeto que executa a operação no tempo de execução. Geralmente acontece quando uma função membro de uma é invocada usando um ponteiro para sua classe base. A implementação de uma classe derivada será invocada ao invés da operação da classe base. Isto permite a substituição de uma implementação particular usando a mesma interface, o que por sua vez habilita o uso de polimorfismo. (pt) Dynamický výběr, angl. dynamic dispatch, je v programování metoda výběru polymorfní operace (metody nebo funkce), která se má za běhu zavolat. Dynamický výběr je v protikladu ke (static dispatch), při kterém je (viz) polymorfní operace vybrána v průběhu kompilace.Účel dynamického výběru je podporovat ty případy, kdy nelze určit příslušnou implementaci polymorfní operace staticky kompilátorem, protože závisí na dynamickém (tj. běhovém) typu jednoho nebo více parametrů. Podobná implementační technika je pozdní vazba, late binding. (cs) Στην επιστήμη των υπολογιστών και συγκεκριμένα στο αντικειμενοστρεφή προγραμματισμό η δυναμική αποστολή (Αγγλικά: Dynamic dispatch) είναι μια διαδικασία κατά την υλοποίηση μιας πολυμορφικής ενέργειας (μεθόδου ή συνάρτησης) που καλείται κατά τον χρόνο εκτέλεσης. Η δυναμική αποστολή έχει διαφορά με την στατική αποστολή (αγγλικά: static dispatch) η οποία υλοποιεί μια πολυμορφική ενέργεια κατά την διάρκεια της μεταγλώττισης του κώδικα. Ο στόχος της δυναμικής αποστολής είναι η υποστήριξη περιπτώσεων όπου η πολυμορφική ενέργεια δεν μπορεί να καθοριστεί κατά την διάρκεια του χρόνου μεταγλώττισης αλλά εξαρτάται από τις συνθήκες και τις παραμέτρους που καθορίζονται στον χρόνο εκτέλεσης. (el) In computer science, dynamic dispatch is the process of selecting which implementation of a polymorphic operation (method or function) to call at run time. It is commonly employed in, and considered a prime characteristic of, object-oriented programming (OOP) languages and systems. Dynamic dispatch contrasts with static dispatch, in which the implementation of a polymorphic operation is selected at compile time. The purpose of dynamic dispatch is to defer the selection of an appropriate implementation until the run time type of a parameter (or multiple parameters) is known. (en) 在计算机科学中,动态分派(Dynamic dispatch)是指运行时选择哪一个多态的实现(具體的方法或函数)来调用的过程。动态分派通常被应用于面向对象编程(OOP)的语言和系统,并被认为是一个主要特点。 面向对象的系统把一个问题看作是一系列通过名字引用来制定操作的相互影响的物体。多态性是指一些可互换的物体虽有相同名字但却在行为上不同的现象。例如,一个文件对象和一个数据库对象都有一个储存记录的方法来记录需要存储的的个人记录,但是二者的实现却不同。一个程序可以有对文件或数据库的访问。当一个程序调用对象的存储记录时,有一些东西需要来决定采取哪种行为。如果有人认为OOP仅仅指给对象发送信息,那么在这个例子中程序仅仅把一条存储记录信息发送给了一个未知类型的对象,而把如何将这条信息发送给正确对象交给运行支持系统来处理。这个对象来决定它执行哪些行为。 与动态分派成对比的是静态分派,在静态分派中,对一个多态操作的实现是在编译时间就选择好的。动态分派的目的在于支持那些当在编译时间内无法决定一个多态操作的合适的实现因为这个决定取决于这个操作的一个或多个实际参数的运行类型的情形。 (zh) |
rdfs:label | Dynamický výběr (cs) Dynamische Bindung (de) Δυναμική αποστολή (υπολογιστές) (el) Enlace dinámico (programación orientada a objetos) (es) Dynamic dispatch (en) 동적 디스패치 (ko) Ligação dinâmica (programação orientada a objetos) (pt) 动态分派 (zh) |
rdfs:seeAlso | dbr:Smart_pointer |
owl:sameAs | freebase:Dynamic dispatch wikidata:Dynamic dispatch dbpedia-cs:Dynamic dispatch dbpedia-de:Dynamic dispatch dbpedia-el:Dynamic dispatch dbpedia-es:Dynamic dispatch dbpedia-fi:Dynamic dispatch dbpedia-hu:Dynamic dispatch dbpedia-ko:Dynamic dispatch dbpedia-pt:Dynamic dispatch dbpedia-tr:Dynamic dispatch dbpedia-zh:Dynamic dispatch https://global.dbpedia.org/id/J81q |
prov:wasDerivedFrom | wikipedia-en:Dynamic_dispatch?oldid=1112643422&ns=0 |
foaf:isPrimaryTopicOf | wikipedia-en:Dynamic_dispatch |
is dbo:wikiPageDisambiguates of | dbr:Dispatch |
is dbo:wikiPageRedirects of | dbr:Trait_object_(Rust) dbr:Fat_pointer dbr:Method_dispatch dbr:Interface_(Go) dbr:Dynamic_method_binding dbr:Dynamic_method_dispatch dbr:Runtime_dispatch dbr:Runtime_polymorphism dbr:Single-dispatch dbr:Single_dispatch |
is dbo:wikiPageWikiLink of | dbr:Ruby_(programming_language) dbr:Method_(computer_programming) dbr:Perl dbr:Design_Patterns dbr:Dynamic_linker dbr:Dynamic_loading dbr:Index_of_object-oriented_programming_articles dbr:Indirection dbr:Inline_caching dbr:.NET_Framework_version_history dbr:Comparison_of_C_Sharp_and_Java dbr:Comparison_of_programming_paradigms dbr:Conditional_(computer_programming) dbr:Rust_(programming_language) dbr:Object-oriented_programming dbr:Elixir_(programming_language) dbr:Function_(computer_programming) dbr:Function_overloading dbr:GNU_Guix_System dbr:Go_(programming_language) dbr:Control_table dbr:Trait_object_(Rust) dbr:Lisp_(programming_language) dbr:Call_graph dbr:Call_site dbr:Smalltalk dbr:Polymorphism_(computer_science) dbr:Synchronization_(computer_science) dbr:C++ dbr:Ad_hoc_polymorphism dbr:Type_system dbr:Data-oriented_design dbr:Fat_pointer dbr:Late_binding dbr:Linker_(computing) dbr:Loader_(computing) dbr:Ada_(programming_language) dbr:D_(programming_language) dbr:Dynamic_Language_Runtime dbr:PHP dbr:Fat_binary dbr:Forwarding_(object-oriented_programming) dbr:Prototype-based_programming dbr:Dynamic_binding dbr:Swift_(programming_language) dbr:Mixin dbr:Class_variable dbr:Method_dispatch dbr:Inheritance_(object-oriented_programming) dbr:Oberon_(programming_language) dbr:Objective-C dbr:R_(programming_language) dbr:Chain-of-responsibility_pattern dbr:Name_binding dbr:Multiple_inheritance dbr:Scope_(computer_science) dbr:Virtual_function dbr:Virtual_method_table dbr:Dispatch dbr:IBM_System_Object_Model dbr:Execute_instruction dbr:Multiple_dispatch dbr:Single_instruction,_multiple_data dbr:Interface_(Go) dbr:Dynamic_method_binding dbr:Dynamic_method_dispatch dbr:Runtime_dispatch dbr:Runtime_polymorphism dbr:Single-dispatch dbr:Single_dispatch |
is foaf:primaryTopic of | wikipedia-en:Dynamic_dispatch |