sobota 5. dubna 2008

Programování - Polymorfizmus

  • polymorfizmus
    • poly - mnoho
    • morfizmus - tvarost, tvarování
    • = mnohotvarost, různorodost
  • používáme v případě, kdy chceme zajistit různé chování metod potomků některé třídy
  • souvisí s virtuálními a přepsanými metodami (klíčová slova virtual a override)
  • vychází z předpokladu, že můžeme odkazovat na zděděný typ pomocí typu rodiče
    • Rodic b = new Potomek()
    • toto chování je přítomno ve všech moderních OOP jazycích a umožňuje nám například ukládat rodiče a potomky společně do pevně typovaných kolekcí a polí
   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:   
   5:  namespace TeoriePolymorfizmus
   6:  {
   7:      class Rodic
   8:      {
   9:          public void nevirtualniMetoda()
  10:          {
  11:              Console.WriteLine("Jsem nevirtualni metoda rodice");
  12:          }
  13:   
  14:          public virtual void virtualniMetoda()
  15:          {
  16:              Console.WriteLine("Jsem virtualni metoda rodice");
  17:          }
  18:      }
  19:   
  20:      class Potomek : Rodic
  21:      {
  22:          public void nevirtualniMetoda()
  23:          {
  24:              Console.WriteLine("Jsem nevirtualni metoda potomka");
  25:          }
  26:   
  27:          public override void virtualniMetoda()
  28:          {
  29:              Console.WriteLine("Jsem prepsana metoda");
  30:          }
  31:   
  32:      }
  33:   
  34:      class Program
  35:      {
  36:          static void Main(string[] args)
  37:          {
  38:   
  39:              Potomek a = new Potomek();
  40:              a.nevirtualniMetoda();
  41:              a.virtualniMetoda();
  42:   
  43:              Rodic b = new Potomek();
  44:              b.nevirtualniMetoda();
  45:              b.virtualniMetoda();
  46:   
  47:              /* Vystup bude: 
  48:               * 
  49:               * Jsem nevirtualni metoda potomka
  50:               * Jsem prepsana metoda
  51:               * Jsem nevirtualni metoda rodice  
  52:               * 
  53:               * // neni totiz jasne zda volame metodu rodice nebo potomka,
  54:               *    zavola se proto metoda rodice i presto ze sme vytvareli objekt
  55:               *    potomka
  56:               * 
  57:               * Jsem prepsana metoda
  58:               * 
  59:               * // tady uz se zavola metoda potomka, protoze jsme ji spravne prepsali 
  60:               */
  61:   
  62:              Console.ReadLine();
  63:   
  64:          }
  65:      }
  66:  }

Žádné komentáře: