Array ( [0] => 14997194 [id] => 14997194 [1] => cswiki [site] => cswiki [2] => Duck-typing [uri] => Duck-typing [3] => [img] => [4] => [day_avg] => [5] => [day_diff] => [6] => [day_last] => [7] => [day_prev_last] => [8] => [oai] => [9] => [is_good] => [10] => [object_type] => [11] => 0 [has_content] => 0 [12] => [oai_cs_optimisticky] => ) Array ( [0] => '''Duck-typing''' ([[Angličtina#V.C3.BDslovnost|anglická výslovnost]] [dak ˈtajpiŋ], česky '''kachní typování''') je způsob dynamického typování, kdy se posuzuje objekt nikoli z hlediska jím deklarovaných předků nebo implementovaných [[Rozhraní (informatika)|rozhraní]], ale jen na základě jeho [[Metoda (programování)|metod]]. [1] => Původ systému je přisuzován větě Jamese Whitcomba Rileyho: [2] => :''„Pokud vidím ptáka, který chodí jako kachna, plave jako kachna a káchá jako kachna, tak o tomto ptáku tvrdím, že je to kachna.“'' [3] => [4] => == Upřesnění definice == [5] => Současná implementace duck-typingu tak, jak byla popsána v úvodu, se od této ideje poněkud liší. Při duck-typingu se nezkoumá, zda objekt kváká jako kachna, ale posuzovatele zajímá jen, zda implementuje metodu kvákni();. Po úpravě se tedy tvrdí, že: [6] => :''„Pokud vidím něco, co umí chodit, plavat a kvákat, pak věřím tomu, že vidím kachnu.“'' [7] => Objekt rozpoznaný pomocí duck-typingu se tedy chová stejně jako objekt implementující rozhraní: [8] => public interface IDuck [9] => { [10] => /** [11] => * Walk like a duck. [12] => */ [13] => public void walk(); [14] => /** [15] => * Swim like a duck. [16] => */ [17] => public void swim(); [18] => /** [19] => * Quack like a duck. [20] => */ [21] => public void quack(); [22] => } [23] => s tím rozdílem, že při duck-typingu ''není třeba implementovat rozhraní jako takové'' – stačí implementace zmíněných metod. [24] => [25] => == Problémy duck-typingu == [26] => Jsou způsobené právě zmíněnou vlastností, kdy je zkoumáno jen rozhraní (název a datové typy metod) bez ohledu na kontrakt, předky nebo implementovaná rozhraní. Mezi kachny se tak může dostat nejen myslivec, který se rozhodl přihlásit k rozhraní IDuck (pravděpodobně z důvodu vyšší úspěšnosti lovu), ale i dítě, které má v kapse vábničku na kachny a které se kachen bojí. [27] => [28] => Z tohoto důvodu se k duck-typingu přistupuje zejména v případech, kdy je k dispozici známá množina objektů a nehrozí dezinterpretace. Pokud by se pomocí duck-typingu například hledaly Hodiny jako objekty implementující metodu [29] => public void natáhni(); [30] => mohlo by dojít k nepříjemným překvapením, pokud by mezi dostupnými třídami existovala třída Facka. [31] => [32] => == Duckapter == [33] => Duckapter{{Citace elektronického periodika [34] => | titul = Duckapter [35] => | periodikum = Google Code Archive [36] => | url = https://code.google.com/archive/p/duckapter [37] => | datum přístupu = 2021-06-02 [38] => }} je knihovna vytvořená Vladimírem Oraným, která přináší duck-typing do programovacího jazyka [[Java (programovací jazyk)|Java]], kde jinak nelze použít duck-typing jinak než pomocí reflexe. [39] => [40] => Knihovna vychází z již zmíněné podobnosti s implementací rozhraní. V případě zájmu o zkoumání, zda instance kachna třídy Kachna je dle duck-typingu kachnou (i když se nehlásí k implementaci rozhraní IDuck), by se volalo: [41] => boolean isDuck = Duck.test(kachna, IDuck.class); [42] => a pro použití například: [43] => if (Duck.test(kachna, IDuck.class)) { [44] => IDuck theDuck = Duck.type(kachna, IDuck.class); [45] => System.out.println(theDuck.quack()); [46] => } [47] => [48] => == Groovy == [49] => Mnohem jednodušeji než „čistá“ Java přistupuje k duck-typingu jazyk [[Groovy]] [50] => class Duck [51] => { [52] => def walk() { println "I'm a Duck, I can walk…" } [53] => def swim() { println "I'm a Duck, I can swim…" } [54] => def quack() { println "I'm a Duck, I can quack" } [55] => } [56] => [57] => class Person [58] => { [59] => def walk() { println "I'm a Person, I can walk…" } [60] => def swim() { println "I'm a Person, I can swim…" } [61] => def talk() { println "I'm a Person, I can talk…" } [62] => } [63] => [64] => def d = new Duck() [65] => def p = new Person() [66] => [67] => d.walk() // Ok, duck has walk() method [68] => d.swim() // Ok, duck has swim() method [69] => d.quack() // Ok, duck has quack() method [70] => [71] => p.walk() // Ok, person has walk() method [72] => p.swim() // Ok, person has swim() method [73] => p.quack() // Runtime error, no quack() method [74] => [75] => == Reference == [76] => [77] => [78] => == Literatura == [79] => * Tate, A. B. Seven Languages in Seven Weeks, 1.st ed.; Pragmatic Programmers, LLC.: USA, 2010. {{en}} [80] => * Oraný, V. Automatické vyhodnocování studentských úloh. diplomová práce, VŠE v Praze, 4. května 2010. {{cs}} [81] => {{Autoritní data}} [82] => [83] => [[Kategorie:Objektově orientované programování]] [] => )
good wiki

Duck-typing

Duck-typing (anglická výslovnost [dak ˈtajpiŋ], česky kachní typování) je způsob dynamického typování, kdy se posuzuje objekt nikoli z hlediska jím deklarovaných předků nebo implementovaných rozhraní, ale jen na základě jeho metod. Původ systému je přisuzován větě Jamese Whitcomba Rileyho: :„Pokud vidím ptáka, který chodí jako kachna, plave jako kachna a káchá jako kachna, tak o tomto ptáku tvrdím, že je to kachna.

More about us

About

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.

You might be interested in

,'Angličtina#V.C3.BDslovnost','Rozhraní (informatika)','Metoda (programování)','Java (programovací jazyk)','Groovy','Kategorie:Objektově orientované programování'