Author: Juraj Petrík

  • 7. Cvicenie

    Stiahnite si zdrojovy kod zo 6. prednasky.

    Uloha 1

    Identifikujte a opravte chyby v nasledujucom kuse kodu (skuste si ho pustit, aj viackrat):

    public class FunWithThreadsLive {
        List<String> listString = new ArrayList<>();
    
        public static void main(String[] params) throws InterruptedException {
            FunWithThreadsLive f = new FunWithThreadsLive();
            Random rand = new Random();
    
            for (int i = 0; i <= 100; i++)
                f.listString.add(String.valueOf(UUID.randomUUID()));
    
            Thread threadOne = new Thread(() -> {
                for (String s : f.listString)
                    System.out.println(s);
            });
    
            Thread threadTwo = new Thread(() -> {
                for (int i = 0; i < 99; i++)
                    f.listString.remove(rand.nextInt(f.listString.size()));
            });
    
            threadTwo.start();
            threadOne.start();
    
            threadTwo.join();
            threadOne.join();
        }
    

    Uloha 2

    Vytvorte novy (dalsi view) pre triedu Steve v baliku mvc.

    Tento view bude view pre CRUD operacie s triedou Steve v konzole (CLI), bude implementovat interface SteveView.

    Bonus: aj v baliku mvp

  • 6. Cvicenie

    Naimportujte si zdrojovy kod z 5. prednasky.

    Uloha 1

    Vasou ulohou je napisat jednotkove testy pre triedu Steve. Cielom je dosiahnutie 100% BRANCH coverage.

    Uloha 2

    Vytvorte GUI vo Swingu pre triedu Steve:

    • Je mozne vytvarat Stevov s pouzivatelskymi parametrami
    • Vsetci takto vytvoreni Stevovia sa budu zobrazovat v zozname, ktory je mozne scrollovat
    • Po kliknuti na zaznam v zozname sa zobrazia prehladne informacia o Stevovi

    Bonus: pouzite vzor MVC alebo MVP alebo MVVM a pod.

    Pomocky: Ako bolo povedane na prednaske, komponenty Swingu je mozne do seba vnarat, odporucame pozriet si dokumentaciu napr. k triede JPanel alebo aj JOptionPane.

  • 5. Cvicenie

    Stiahnite si zdrojovy kod z prednasky

    Uloha 1

    Majme nasledujuci kod:

                Steve steve1 = new Steve("a", 1, 1, 1, 1, 1, 1, false);
                Steve steve2 = new Steve("b", 2, 2, 1, 1, 1, 1, false);
                Steve steve3 = new Steve("c", 3, 3, 1, 1, 1, 1, false);
                Steve steve4 = new Steve("d", 4, 4, 1, 1, 1, 1, false);
                Steve steve5 = new Steve("d", 4, 4, 1, 1, 1, 1, false);
    
                List<Steve> steveList = new ArrayList<>();
                steveList.add(steve1);
                steveList.add(steve2);
                steveList.add(steve3);
                steveList.add(steve4);
                steveList.add(steve5);

    Zabezpecte aby po pridani objektov Steve do vhodnej struktury boli ulozene iba unikatne objekty a zaroven ich bolo mozne ziskat (iterovat) podla mena (name).

    Pouzite na to vhodnu strukturu a doimplementujte pripadne potrebne zavislosti.

    Uloha 2

    Pokracujte v predchadzajucom priklade. Vasou ulohou je teraz zvolit taku strukturu, aby sme vedeli ziskat vsetky objekty Steve, ktore maju rovnake meno. Napr. struktura.get(“Jurajko”) vrati vsetky objekty ktore maju name Jurajko.

    Uloha 3

    Upravte implementaciu tak, aby nebolo mozne vytvorit novy objekt Steve s nezmyselnymi parametrami.

    Praca na projekte

    Pracujte na projekte, nezabudnite najprv vytvorit rozhrania a az potom implementaciu. Rozhrania nasledne pouzijete napriklad pre GUI.

    Nezabudnite zacat pouzivat GitHub (ako je popisane na stranke projekt) – deadline je 19.3.2025 do 20:00.

    Uzitocne linky

    https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Collection.html

  • 4. Cvicenie

    Naimportujte si nasledujuci zdrojovy kod:

    Uloha 1

    Pridajte novy typ (strategiu) utoku (minecraft.item.weapon).

    Malo by to byt pomerne jednoduche a priamociare – takyto by mal byt dobre napisany a navrhnuty OOP kod – otvoreny na rozsirovanie, ale uzavrety na upravy.

    Uloha 2

    Prestudujte si balik minecraft.item.potion.

    Co keby chceme kombinovat rozne typy potionov? Ked chceme nabalovat jeden za druhym?

    Ake by bolo potrebne vykonat zmeny (keby pokracujeme v zauzivanom trende)? Bude takyto kod splnat OOP principy a princip KISS?

    Zistite ktory navrhovy vzor by bol vhodny na riesenie takehoto problemu. Implementujte ho.

    Jeden “typ potionu” je mozne pouzit aj viackrat, t.j. mozem napriklad zmiesat aj viac Speed potionov.

    Uloha 3

    Implementujte pocitadlo kolko “efektov na potion”(globalne v celom programe) bolo vytvorenych. Pouzite na to vhodny navrhovy vzor.

    Pocitadlo by mal byt objekt, nie len staticka trieda a mal by byt dostupny z celeho programu.

    Uzitocne linky:

    https://refactoring.guru/

    Literatura:

    Head first design patterns 2nd edition

    Nezabudnite konzultova a aj odovzdat svoje zamery do ais miesta odovzdania, neskorsie odovzdanie NIE je mozne.

  • 3. Cvicenie

    Uloha 1

    Stiahnite si kod (pokracovanie cvicenia 2)

    Mozete pokracovat aj vo vasom projekte z minuleho cvicenia (pokial sa podarilo spravit vsetko potrebne).

    Vytvorte system enchantingu pomocu rozhrani (zjednoduseneho z hry minecraft), vytvorte si najprv rozhrania a potom podla nich urobne konkretnu implementaciu. Postupujte systematicky (ako bolo vysvetlene na konci prednasky).

    • Zmente Enchantment na rozhranie (diskutujte, preco toto chceme/nechceme, je to dobre, nie je to dobre?)
    • Majte minimalne rozhrania ktore abstrahuju nasledujuce veci/udalosti/vlastnosti/atd:
      • Enchantment
      • To ze objekt moze byt vylepseny
      • Kontrola ci objekt bol vylepseny
      • Iny objekt vie aplikovat vylepsenie
      • Iny objekt vie zrusit vylepsenie
    • Objekt moze mat aplikovanych viacero vylepseni (pouzite napriklad ArrayList)
    • Implementujte aspon 2 rozne typy vylepseni (mozete aj viac), ktore mozu mat rozne urovne

    Uloha 2

    Vytvorte si novy projekt a experimentujte s modifikatormi pristupu (k triedam, atributom, metodam a konstruktorom).

    Budete potrebovat viacero balickov a viacero hierarchii dedenia. Mozete byt kreativni (budte!).

    Uloha 3

    Konzultujte zamer Vasho projektu.

WordPress Appliance - Powered by TurnKey Linux