Street of Code

Ep. 22 – OOP Part 6 (Polymorfizmus)


Listen Later

Objekt je polymorfický, keď je inštanciou viac ako jednej triedy. Vďaka polymorfizmu si vieme skrátiť a zjednodušiť kód, ale tak ako je to aj so všetkým ostatným, vieme si to aj poriadne skomplikovať.

Stiahnuť
https://wp.streetofcode.sk/wp-content/uploads/2019/09/StreetOfCode-Ep22.mp3

00:00 – 02:00 Čo je to polymorfizmus

02:01 – 04:56 Príklad – muž a človek
04:57 – 06:48 Kedy je objekt polymorfický
06:49 – 15:45 Typy polymorfizmu (statický a dynamický)
15:46 – 19:35 Další príklad polymorfizmu
19:36 – 19:35 Výhody a nevýhody polymorfizmu
27:03 –  Zhrnutie a záver + pár užitočných tipov

Statický polymorfizmus

V Jave, ale aj v iných OOP jazykov vieme vytvoriť v triede viaceré metódy s tým istým názvom, dokonca aj s tou istou návratovou hodnotou, ale s inými parametrami.

Toto sa nazýva method overloading. Vieme to teda docieliť nasledujúcimi spôsobmi:

  • Iný počet parametrov 
  • Iné typy parametrov 
  • Iné poradie parametrov (neodporúča sa, neprehľadné API) 
  • Kedže metódy majú iné parametre, tak metódy majú tým pádom inú signature

    Toto je statické, čiže compiler vie, ktorú metódu má v ktorom prípade použiť. 

    Dynamický polymorfizmus

    Táto forma polyformizmu nedovolí compileru dopredu vedieť, ktorú metódu bude treba zavolať. JVM (v pripade Javy) sa bude musieť rozhodnúť počas runtime. 

    Dynamickž polymorfizmus sa dá dosiahnuť pomocou method overriding. A toto sa dá dosiahnut ako sme už aj spomínali: 

    • Podtrieda overridne metódu svojho parenta (obe metódy majú rovnakú signaturu ale poskytujú rôzne implementácie) 
    • Trieda ktorá implementuje nejaký interface, implementuje jeho metódy
    • Práve vďaka dynamickému polymorfizmu vieme robiť “divočiny”.  

      Príklad

      Abstraktná trieda Animal, ktorá obsahuje spoločné vlastnosti a chovania zvierať. Obsahuje metódu move(), ktorú musia deti tejto triedy implementovať.

      abstract class Animal {
      String name;
      public Animal(String name) {
      this.name = name;
      }
      abstract void move();
      }

      Tri triedy (Horse, Bird, Fish), ktoré dedia od Animal. Každá implementuje metódu move() inak.

      class Horse extends Animal {
      public Horse(String name) {
      super(name);
      }
      @Override
      void move() {
      System.out.println("Riding");
      }
      }
      class Bird extends Animal {
      public Bird(String name) {
      super(name);
      }
      @Override
      void move() {
      System.out.println("Flying");
      }
      }
      class Fish extends Animal {
      public Fish(String name) {
      super(name);
      }
      @Override
      void move() {
      System.out.println("Swimming");
      }
      }

      Výhodu polymorfizmu môžeme vidieť na nasledujúcom snippete. Trieda ZooService obsahuje metódu moveAnimal, ktorá má parameter typu Animal. Ja do tejto metódy môžem poslať ale všetky jej deti, resp hocijakého koňa, vtáka či ryby.

      class ZooService {
      ...
      void moveAnimal(Animal animal) {
      animal.move();;
      }
      }
      ...
      Bird bird = new Animal("bird"); // Mozem vytvorit instanciu takto
      Bird bird2 = new Bird("bird"); // Aj takto, je to jedno a to iste
      Horse horse = new Horse("horse");
      Fish fish = new Fish("fish");
      zooService.move(bird); // vypise "Flying"
      zooService.move(bird2); // vypise "Flying"
      zooService.move(horse); // vypise "Riding"
      zooService.move(bird); // vypise "Swimming"
      ...

       

       

      Užitočné odkazy

      Jakubova hra, ktorá učí základné koncepty OOP

      Stará dobrá Wiki
      OOP pre 6 ročných

      The post Ep. 22 – OOP Part 6 (Polymorfizmus) appeared first on Street of Code.

      ...more
      View all episodesView all episodes
      Download on the App Store

      Street of CodeBy Street of Code


      More shows like Street of Code

      View all
      Dobré ráno | Denný podcast denníka SME by SME.sk

      Dobré ráno | Denný podcast denníka SME

      32 Listeners

      DEEP TALKS [CZE] by Petr Ludwig

      DEEP TALKS [CZE]

      20 Listeners

      Denník N Newsfilter by Denník N

      Denník N Newsfilter

      29 Listeners

      Index by SME.sk

      Index

      7 Listeners

      Lužifčák podcast by Lužifčák

      Lužifčák podcast

      14 Listeners

      Rozhovory ZKH by SME.sk

      Rozhovory ZKH

      12 Listeners

      PETR MÁRA PODCAST by Petr Mára

      PETR MÁRA PODCAST

      7 Listeners

      Piatoček by SME.sk

      Piatoček

      10 Listeners

      Diagnóza Podnikateľ by Edita Angyalová

      Diagnóza Podnikateľ

      0 Listeners

      V redakcii by Denník N

      V redakcii

      15 Listeners

      Mozgová Atletika by Denis a Patrik Kováč

      Mozgová Atletika

      11 Listeners

      Michal Truban Podcast by Michal Truban

      Michal Truban Podcast

      2 Listeners

      Ekonómia ľudskou rečou by skpodcasty.sk

      Ekonómia ľudskou rečou

      0 Listeners

      tak bolo by ZAPO

      tak bolo

      5 Listeners

      Mentalita Foundera by ZAPO

      Mentalita Foundera

      0 Listeners