C3 linearization (original) (raw)
在计算机科学中,C3算法主要用在多重继承中,确定子类应该继承哪一个父类的方法。换句话说,C3超类线性化的输出是确定性的方法解析次序(MRO:Method Resolution Order)。
Property | Value |
---|---|
dbo:abstract | في الحوسبة، (بالإنجليزية: C3 linearization) خطية الطبقة الفائقة C3 هي خوارزمية تُستخدم في المقام الأول للحصول على الترتيب الذي يجب أن تتوارث فيه الطرق في وجود وراثة متعددة. بعبارة أخرى، ناتج خطي الطبقة الفائقة C3 هو أمر قرار حتمي للطريقة (MRO). ينتج عن خطي الطبقة الفائقة C3 ثلاث خصائص مهمة: * رسم بياني متسق للأسبقية الموسعة، * الحفاظ على ترتيب الأسبقية المحلي، و * تلائم معيار الرتابة. تم نشره لأول مرة في مؤتمر OOPSLA لعام 1996 ، في ورقة بعنوان «خطية أحادية الطبقة فائقة المستوى لديلان». تم تكييفه مع تطبيق Open Dylan في يناير 2012 بعد اقتراح تحسين. تم اختيارها كخوارزمية افتراضية لتحليل الأسلوب في بايثون 2.3 (وأحدث) ، Raku ، Parrot ، ، Solidity ، وPGF / TikZ للبرمجة الموجهة للكائنات. يتوفر أيضًا كبديل غير افتراضي MRO في جوهر بيرل 5 بدءًا من الإصدار 5.10.0. يوجد تطبيق ملحق للإصدارات السابقة من بيرل 5 باسم Class::C3 على CPAN . يلخص جويدو فان روسوم بايثون خطية الطبقة الفائقة C3 بالتالي: «Basically, the idea behind C3 is that if you write down all of the ordering rules imposed by inheritance relationships in a complex class hierarchy, the algorithm will determine a monotonic ordering of the classes that satisfies all of them. If such an ordering can not be determined, the algorithm will fail.» (ar) "In object-oriented systems with multiple inheritance,some mechanism must be used for resolving conflicts when inheriting different definitions of the same propertyfrom multiple superclasses." C3 superclass linearization is an algorithm used primarily to obtain the order in which methods should be inherited in the presence of multiple inheritance. In other words, the output of C3 superclass linearization is a deterministic Method Resolution Order (MRO). C3 superclass linearization is called C3 because it "is consistent with three properties": * a consistent extended precedence graph, * preservation of local precedence order, and * fitting a monotonicity criterion. It was first published at the 1996 OOPSLA conference, in a paper entitled "A Monotonic Superclass Linearization for Dylan". It was adapted to the Open Dylan implementation in January 2012 following an enhancement proposal. It has been chosen as the default algorithm for method resolution in Python 2.3 (and newer), Raku, Parrot, Solidity, and PGF/TikZ's Object-Oriented Programming module. It is also available as an alternative, non-default MRO in the core of Perl 5 starting with version 5.10.0. An extension implementation for earlier versions of Perl 5 named Class::C3 exists on CPAN. Python's Guido van Rossum summarizes C3 superclass linearization thus: Basically, the idea behind C3 is that if you write down all of the ordering rules imposed by inheritance relationships in a complex class hierarchy, the algorithm will determine a monotonic ordering of the classes that satisfies all of them. If such an ordering can not be determined, the algorithm will fail. (en) La linéarisation de la superclasse C3 est un algorithme utilisé principalement pour obtenir l'ordre dans lequel les méthodes doivent être héritées en présence d'un héritage multiple. En d'autres termes, la sortie de la linéarisation de la superclasse C3 est un ordre de résolution de méthode (MRO) déterministe. « Dans les systèmes orientés objet avec héritage multiple, un mécanisme doit être utilisé pour résoudre les conflits lors de l'héritage de différentes définitions de la même propriété à partir de plusieurs superclasses. » La linéarisation de la superclasse C3 est appelée C3 car elle « est cohérente avec trois propriétés » : * un precedence graph étendue cohérent, * la préservation de l'ordre de préséance local, et * appliquant un critère de monotonie. Il a été publié pour la première fois lors de la conférence OOPSLA de 1996, dans un article intitulé A Monotonic Superclass Linearization for Dylan. Il a été adapté à l'implémentation d'Open Dylan en janvier 2012 à la suite d'une proposition d'amélioration. Il a été choisi comme algorithme par défaut pour la résolution de méthode dans Python 2.3 (et versions ultérieures), Raku, Parrot, Solidity et le module de programmation orientée objet de PGF/TikZ . Il est également disponible en tant que MRO alternatif, non par défaut, dans le cœur de Perl 5 à partir de la version 5.10.0. Une implémentation d'extension pour les versions antérieures de Perl 5 nommée Class::C3 existe sur CPAN . Guido van Rossum de Python résume ainsi la linéarisation de la superclasse C3 : « Fondamentalement, l'idée derrière C3 est que si vous écrivez toutes les règles d'ordonnancement imposées par les relations d'héritage dans une hiérarchie de classes complexe, l'algorithme déterminera un ordonnancement monotone des classes qui les satisfait toutes. Si un tel ordre ne peut être déterminé, l'algorithme échouera. » (fr) C3-линеаризация суперкласса (англ. C3 superclass linearization) — алгоритм, используемый преимущественно для получения устойчивой линеаризации иерархии множественного наследования в объектно-ориентированном программировании. Данная линеаризация используется для определения порядка, в котором должны наследоваться методы, что часто в англоязычной литературе обозначается как «MRO» (сокращение от «Method Resolution Order», то есть «порядок разрешения метода»). C3 в названии указывает на три главные особенности итоговой линеаризации: устойчивый и расширяющийся (по старшинству) граф, сохранение локального порядка старшинства, а также монотонность. Данная теория впервые была представлена в 1996 году в рамках конференции , в документе, озаглавленном «Монотонная линеаризация суперкласса для языка Dylan». Впоследствии данный алгоритм был выбран как алгоритм по умолчанию для разрешения методов в языке программирования Python 2.3 (и последующих версиях), Perl 6 и виртуальной машине Parrot. Он также доступен в виде альтернативы (не являясь MRO по умолчанию) в ядре Perl 5, начиная с версии 5.10.0. Расширенная реализация для более ранних версий Perl 5 носит название Class::C3 и существует в CPAN. (ru) 在计算机科学中,C3算法主要用在多重继承中,确定子类应该继承哪一个父类的方法。换句话说,C3超类线性化的输出是确定性的方法解析次序(MRO:Method Resolution Order)。 (zh) |
dbo:thumbnail | wiki-commons:Special:FilePath/C3_linearization_example.svg?width=300 |
dbo:wikiPageID | 8305253 (xsd:integer) |
dbo:wikiPageLength | 11049 (xsd:nonNegativeInteger) |
dbo:wikiPageRevisionID | 1120457699 (xsd:integer) |
dbo:wikiPageWikiLink | dbr:Python_(programming_language) dbr:Memoization dbr:Algorithm dbr:Perl dbc:Programming_language_implementation dbr:Topological_sorting dbr:Divide-and-conquer_algorithm dbr:Dylan_(programming_language) dbr:PGF/TikZ dbr:Parrot_virtual_machine dbr:Guido_van_Rossum dbc:Object-oriented_programming dbc:Articles_with_example_Python_(programming_language)_code dbr:Precedence_graph dbr:CPAN dbr:Solidity dbr:Method_(computing) dbr:OOPSLA dbr:Object-oriented dbr:Raku_(programming_language) dbr:Reentrancy_(computing) dbr:Multiple_inheritance dbr:File:C3_linearization_example.svg |
dbp:wikiPageUsesTemplate | dbt:Confusing dbt:Quote dbt:Sxhl |
dcterms:subject | dbc:Programming_language_implementation dbc:Object-oriented_programming dbc:Articles_with_example_Python_(programming_language)_code |
gold:hypernym | dbr:Algorithm |
rdf:type | dbo:Software |
rdfs:comment | 在计算机科学中,C3算法主要用在多重继承中,确定子类应该继承哪一个父类的方法。换句话说,C3超类线性化的输出是确定性的方法解析次序(MRO:Method Resolution Order)。 (zh) في الحوسبة، (بالإنجليزية: C3 linearization) خطية الطبقة الفائقة C3 هي خوارزمية تُستخدم في المقام الأول للحصول على الترتيب الذي يجب أن تتوارث فيه الطرق في وجود وراثة متعددة. بعبارة أخرى، ناتج خطي الطبقة الفائقة C3 هو أمر قرار حتمي للطريقة (MRO). ينتج عن خطي الطبقة الفائقة C3 ثلاث خصائص مهمة: * رسم بياني متسق للأسبقية الموسعة، * الحفاظ على ترتيب الأسبقية المحلي، و * تلائم معيار الرتابة. يلخص جويدو فان روسوم بايثون خطية الطبقة الفائقة C3 بالتالي: (ar) "In object-oriented systems with multiple inheritance,some mechanism must be used for resolving conflicts when inheriting different definitions of the same propertyfrom multiple superclasses." C3 superclass linearization is an algorithm used primarily to obtain the order in which methods should be inherited in the presence of multiple inheritance. In other words, the output of C3 superclass linearization is a deterministic Method Resolution Order (MRO). C3 superclass linearization is called C3 because it "is consistent with three properties": (en) La linéarisation de la superclasse C3 est un algorithme utilisé principalement pour obtenir l'ordre dans lequel les méthodes doivent être héritées en présence d'un héritage multiple. En d'autres termes, la sortie de la linéarisation de la superclasse C3 est un ordre de résolution de méthode (MRO) déterministe. « Dans les systèmes orientés objet avec héritage multiple, un mécanisme doit être utilisé pour résoudre les conflits lors de l'héritage de différentes définitions de la même propriété à partir de plusieurs superclasses. » (fr) C3-линеаризация суперкласса (англ. C3 superclass linearization) — алгоритм, используемый преимущественно для получения устойчивой линеаризации иерархии множественного наследования в объектно-ориентированном программировании. Данная линеаризация используется для определения порядка, в котором должны наследоваться методы, что часто в англоязычной литературе обозначается как «MRO» (сокращение от «Method Resolution Order», то есть «порядок разрешения метода»). C3 в названии указывает на три главные особенности итоговой линеаризации: устойчивый и расширяющийся (по старшинству) граф, сохранение локального порядка старшинства, а также монотонность. Данная теория впервые была представлена в 1996 году в рамках конференции , в документе, озаглавленном «Монотонная линеаризация суперкласса для языка D (ru) |
rdfs:label | سي 3 الخطية (خوارزمية) (ar) C3 linearization (en) Linéarisation C3 (fr) C3-линеаризация (ru) C3线性化 (zh) |
owl:sameAs | freebase:C3 linearization wikidata:C3 linearization dbpedia-ar:C3 linearization dbpedia-fr:C3 linearization dbpedia-ru:C3 linearization dbpedia-vi:C3 linearization dbpedia-zh:C3 linearization https://global.dbpedia.org/id/3jXbJ |
prov:wasDerivedFrom | wikipedia-en:C3_linearization?oldid=1120457699&ns=0 |
foaf:depiction | wiki-commons:Special:FilePath/C3_linearization_example.svg |
foaf:isPrimaryTopicOf | wikipedia-en:C3_linearization |
is dbo:wikiPageRedirects of | dbr:C3_Algorithm dbr:C3_method_resolution dbr:C3_superclass_linearisation dbr:C3_superclass_linearization |
is dbo:wikiPageWikiLink of | dbr:List_of_algorithms dbr:C3_Algorithm dbr:C3_method_resolution dbr:C3_superclass_linearisation dbr:C3_superclass_linearization dbr:C3 dbr:Constructor_(object-oriented_programming) dbr:Dominance_(C++) dbr:Solidity dbr:Multiple_inheritance |
is foaf:primaryTopic of | wikipedia-en:C3_linearization |