Diskuse:Polymorfismus (programování)

message: Bohužel jsem musel předchozí článek celý přepracovat, a to z následujících důvodů
* chybí příklady
* vágnost (např. implementace se liší podle druhu polymorfismu - jak?)
* celková nesrozumitelnost (např. Polymorfismus může být dvojího druhu: univerzální (parametr typu může být jakýkoliv), omezený (typ jen z určitého výčtu). - co je to parametr typu?
* autor se soustředí na dichotomii, aniž by vysvětlil příčinu nebo souvislosti dělení 
* autor zabíhá do nepodstatných detailů (tabulka virtuálních metod), aniž si všímá podstatných věcí (Implementace se liší podle druhu polymorfizmu - jak? co je myšleno implementací? )
* rádoby programátorská hantýrka (orderable, "schované za pointrem")
* nesmyslně vysvětlené pojmy (Tzv. přetížené funkce (overloading) odpovídají statickému polymorfizmu, ale pro každý typ parametru/-ů generují samostatný kód) - tomu rozumím jen jako programátor. Člověk, který chce poznat, co je to polymorfismus, nemá šanci.
* subjektivní dojmy autora do článku nepatří (Kombinace podtypového a parametrického polymorfizmu není jednoduchá.)
Celkově na mě předchozí článek působil tak, že se do něj autor (pravděpodobně učitel informatiky, který se programováním nikdy neživil) pokusil nacpat co nejvíc odborných frází, ale polymorfismu v souvislostech nerozumí. Léta úspěšně objektově programuju, ale z předchozího článku jsem nebyl chytrý. Chudáci studenti.
Jan.turon.cz 11. 4. 2010, 12:04 (UTC)
replies: text: Vaše úpravy (odstranění vysvětlujícího textu a prezentace informací v článku pouze příklady) jsou IMO nevhodné. Článek mi před vaším zásahem přišel dostatečně srozumitelný. Absenci příkladů lze řešit jejich přidáním. Hantýrku a subjektivní dojmy lze odstranit. Jinak příklady v PHP zde nepovažuji za nejvhodnější, raději bych volil Javu. --DaBler 4. 10. 2010, 19:52 (UTC)

text: Přepracované (současné) pojetí se týka pouze OOP a pouze polymorfizmu objektů. Například generiky/šablony, makra a dynamicky typované jazyky taky využívají polymorfizmus a jiným způsobem než OOP, ideově i implementačně. K vysvětlení p. IMO patří typický způsob implementace, a tam je TVM podstatný pojem (speciálně v OOP) - samozřejmě lepší by bylo samostatné heslo. Protože se polymorfizmus vyskytuje běžně v různých oblastech  a kontextech s nejednotnou terminologií, je těžké o něm mluvit obecně. Předpokládal jsem, že můj text bude rozšiřován a upřesňován (i mnou). Samostatné kapitoly P. v OOP, v dynamicky typovaných jazycích, v šablonách, ve funkcionálním programování, při přetěžování, ... (některé možná časem) potřebují vhodný společný úvod.  --Jj14 5. 11. 2010, 00:48 (UTC)
Dovolím si ještě okomentovat:
* 1. "Polymorfismus je vlastnost programovacího jazyka, objektově orientovaného programování (OOP), která umožňuje:"
** -- polymorfizmus se netýká pouze OOP, viz výše. A v OOP ignorujete šablony a pod.
* 2. "jednomu objektu volat jednu metodu s různými parametry (parametrický polymorfismus)"
** -- na "různé parametry" nepotřebujete žádný polymorfizmus (možná "různé typy parametrů")
** -- jsou jazyky, které rozlišují metodu i podle typu výstupu
** -- IMO toto je příklad podtypového polymorfizmu anebo přetěžování (z popisu nejde rozlišit), ale ne parametrického p.
* 3. "objektům odvozených z různých tříd volat tutéž metodu se stejným významem v kontextu jejich třídy, často pomocí rozhraní"
** -- netuším :-), co je to rozhraní (v programování)
** -- pokud voláte "metodu se stejným významem", nepotřebujete polymorfizmus, a "stejný význam v kontextu" je taky vágní.
* 4. "přetěžování operátorů znamená provedení operace v závislosti na typu operandů (operátorový polymorfismus)"
** -- IMO zavádějící (2x), protože přesně stejným způsobem se dají přetížit nejen operátory (možná ne v PHP), ale i funkce
** -- pojem "operátorový polymorfizmus" jsem v životě neslyšel a, s odvoláním na autoritu, Google taky ne.
Proto prosím víc ohleduplnosti při promazávání. 
Jj14 5. 11. 2010, 01:49 (UTC)

message: Nemuzu si pomoct, ale priklady v PHP mi prijdou jako dostatecne nenazorne, navic si nejsem jist, jestli tam nejsou chybky (OOP v PHP neni ma nejsilnejsi stranka) - v prikladu:
  class Prism {
    protected $obj, $h;
 
    // $obj by měl být typu Circle, Triangle či jiného, který implementuje (má) metodu area()
    function __construct($obj,$h) {
      $this->obj = $obj;
      $this->h = $h;
    }
 
    // polymorfismus: volá se metoda area() třídy, nad kterou byl objekt Prism vytvořen
    function volume() {
       return $obj->area() * $this->h;
    }
  }
mi prijde ze by v function volume() melo byt $obj->area() spravne $this->obj->area() (resp. i kdyby to bylo spravne/zkraceny zapis, mozna kvuli prehlednosti bych ten zapis udelal formalneji?)
unavensluncem 28. 8. 2010, 12:32 (UTC)
Pokusil jsem se upravit příklady tak, aby dávaly smysl a byly funkční a příslušně upravil popisky.
Majkl578 6. 12. 2010, 12:56 (UTC)
thread_title:  Jsou priklady v PHP nejnazornejsi?