NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 4 - Využití umělé inteligence při studiu programování Nové

V minulé lekci Java kurzu, Proměnné a typový systém v Javě, jsme si ukázali základní datové typy, byly to int, String a double.

V tomto tutoriálu se naučíme využívat AI při studiu programování. Ukážeme si, jak pomocí umělé inteligence lépe pochopit složité koncepty a zrychlit řešení úkolů, na kterých běžně trávíme spoustu času.

Využití AI při studiu programování

Učení se programování může být občas náročné. Budeme se setkávat se spoustou nových konceptů a nezvyklých problémů. Dnešní doba nám však poskytuje AI nástroje, které nám práci i studium velmi ulehčí. Stačí se je naučit správně používat. Nerozumíme nějakému tématu? ChatGPT nám danou problematiku na základě našich otázek znovu vysvětlí a pomůže nám si dané téma osvojit. Narazili jsme na problém v nějaké úloze? Nástroj Canvas ji s námi rozebere a v případě potřeby doporučí další postup, opraví chyby a podobně. Strávili jsme hodinu luštěním našeho kódu a nakonec jsme zjistili, že celý problém zapříčinila chybějící závorka? Nejsme první ani poslední – toto je skutečně více než běžné. Když si osvojíme používání AI nástrojů, bude řešení podobných problémů otázkou několika sekund.

AI je nápomocná v mnoha dalších oblastech. Jak ji správně využívat, se učíme v kurzech Umělá inteligence.

Potřebuješ poradit? ChatGPT ti pomůže rychleji než lektor

Skvělým parťákem, a to nejen při studiu, pro nás bude zejména ChatGPT. Srozumitelně nám vysvětlí složitější látku, prodiskutuje s námi náročnější koncepty a dokáže navrhnout i řešení technických problémů v našem počítači. Pro studenty našich rekvalifikačních kurzů jsou samozřejmě k dispozici konzultace s lektory.

Ve většině případů však můžeme náš problém či dotaz vyřešit pomocí ChatGPT mnohem rychleji a stejně efektivně jako s lektorem.

ChatGPT je k dispozici prostřednictvím mobilní aplikace nebo online na adrese chatgpt.com. V řešení problémů umí být opravdu vynalézavý a zeptat se ho můžeme prakticky na cokoli:

Prompt pro ChatGPT - Základní konstrukce jazyka Java

Při komunikaci s chatbotem se dozvíme spoustu zajímavých informací a pochopíme i složité koncepty, kterých je v programování mnoho:

Odpověď ChatGPT na zadaný prompt - Základní konstrukce jazyka Java

Můžeme se například zeptat na látku, která nám není jasná a kterou bychom potřebovali dovysvětlit:

Vysvětli, k čemu se používá v Javě abstraktní třída.

Odpověď od ChatGPT

V Javě se abstraktní třída používá k definování základní struktury a chování, které sdílejí všechny podtřídy, ale zároveň obsahuje metody, které mohou nebo musí být implementovány v těchto podtřídách.

Klíčové vlastnosti abstraktní třídy:

  1. Nemůže být instanciována – nelze vytvořit objekt přímo z abstraktní třídy.
  2. Může obsahovat abstraktní i neabstraktní metody – abstraktní metody nemají tělo a jejich implementaci musí poskytnout podtřídy.
  3. Může mít atributy a konstruktory – na rozdíl od rozhraní může abstraktní třída obsahovat instanční proměnné a konstruktory.
  4. Slouží jako základní třída – často se používá pro dědičnost, kdy definuje společné vlastnosti pro více podtříd.

Kdy použít abstraktní třídu místo rozhraní?

Chceme sdílet kód mezi podtřídami – abstraktní třída může obsahovat již implementované metody. Potřebujeme atributy nebo konstruktory – rozhraní je nemůže obsahovat. Víme, že třídy mají společný základ – například u modelování hierarchie objektů.

Příklad použití:

// Abstraktní třída Zvíře
abstract class Zvire {
    String jmeno;

    // Konstruktor
    public Zvire(String jmeno) {
        this.jmeno = jmeno;
    }

    // Abstraktní metoda – musí být implementována v podtřídě
    abstract void udelejZvuk();

    // Normální metoda – může být volána přímo
    public void vypisJmeno() {
        System.out.println("Jmenuji se " + jmeno);
    }
}

// Podtřída Pes, která dědí z abstraktní třídy
class Pes extends Zvire {
    public Pes(String jmeno) {
        super(jmeno);
    }

    // Implementace abstraktní metody
    @Override
    void udelejZvuk() {
        System.out.println("Haf haf!");
    }
}

public class Main {
    public static void main(String[] args) {
        Pes mujPes = new Pes("Rex");
        mujPes.vypisJmeno();  // Výstup: Jmenuji se Rex
        mujPes.udelejZvuk();   // Výstup: Haf haf!
    }
}

V tomto příkladu:

Zvire je abstraktní třída, protože všechna zvířata mají nějaké jméno a vydávají zvuk (ale zvuk je pro každé zvíře jiný). udelejZvuk() je abstraktní metoda, kterou každé zvíře implementuje jinak. vypisJmeno() je běžná metoda, kterou mohou podtřídy používat beze změny. Pes dědí od Zvire a implementuje metodu udelejZvuk().

Abstraktní třídy tedy pomáhají vytvářet organizovaný a přehledný kód při modelování objektových vztahů. 🚀

Dále se můžeme zeptat například na použití rozhraní v praxi a podobně:

Vysvětli, co je interface v Javě, k čemu se používá v praxi, a uveď jednoduchý příklad s kódem.

Odpověď od ChatGPT

V Javě je interface (rozhraní) speciální typ reference, který slouží jako smlouva: definuje, jaké metody musí třída implementovat, ale neurčuje jejich konkrétní chování (implementaci).

Používá se, když chceš:

  1. Definovat jednotné rozhraní pro více tříd, které se mohou chovat různě.
  2. Dosáhnout polymorfismu – umožňuje pracovat s různými objekty stejným způsobem.
  3. Oddělit návrh od implementace – interface říká co, ne jak.

🧠 Představ si:

Máš aplikaci, která pracuje s různými platebními metodami – kartou, převodem, kryptoměnou. Každá funguje jinak, ale všechny mají metodu zaplat().

Interface definuje:

public interface Platba {
    void zaplat(double castka);
}

🛠️ Implementace rozhraní:

public class PlatbaKartou implements Platba {
    public void zaplat(double castka) {
        System.out.println("Placení kartou: " + castka + " Kč");
    }
}
public class PlatbaPrevodem implements Platba {
    public void zaplat(double castka) {
        System.out.println("Placení převodem: " + castka + " Kč");
    }
}

Použití v praxi:

public class Obchod {
    public void provedPlatbu(Platba platba, double castka) {
        platba.zaplat(castka);
    }

    public static void main(String[] args) {
        Obchod obchod = new Obchod();

        Platba kartou = new PlatbaKartou();
        Platba prevodem = new PlatbaPrevodem();

        obchod.provedPlatbu(kartou, 500);
        obchod.provedPlatbu(prevodem, 1200);
    }
}

Výstup:

Konzolová aplikace
Placení kartou: 500.0 Kč
Placení převodem: 1200.0 Kč

Shrnutí:

Interface = smlouva, jaké metody má třída mít. Neobsahuje implementaci, jen definice metod. Pomáhá s modularitou, testovatelností a rozšiřitelností aplikace.

Chceš i ukázku s výchozími metodami v interface? 8)

Kvalita odpovědi závisí především na našem dotazu, tzv. promptu. Jak správně strukturovat prompt, se učíme v lekci Vytváříme efektivní prompty pro excelentní výstupy.

Nefunguje ti kód? Vyzkoušej nástroj ChatGPT Canvas

Při práci s ChatGPT lze využít rozšíření Canvas, které nabízí mimo jiné i rozhraní pro interaktivní práci s kódem. Na rozdíl od běžného chatovacího okna umožňuje organizovat odpovědi a návrhy kódu do bloků, což je ideální pro složitější úlohy, jako je návrh architektury aplikace nebo ladění rozsáhlejších projektů. Díky vizuálnímu uspořádání je možné lépe sledovat jednotlivé kroky návrhu, experimentovat s různými přístupy a snadno se vracet k předchozím verzím řešení. Nástroj spustíme tlačítkem Canvas v menu ChatGPT, které se nám otevře po kliknutí na tři tečky v chatovacím okně:

Zapnutí Canvasu v ChatGPT - Základní konstrukce jazyka Java

Nyní chatbotu předáme náš kód a začneme na něm pracovat:

import java.util.Scanner;

public class Program
{
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in, "Windows-1250");
        System.out.println("Zadej své jméno: ");
        String jmeno = scanner.nextLine();
        if ((jmeno.length()>3)||(jmeno.length()<10))
            System.out.println("Máš moc krátké nebo moc dlouhé jméno!");
        else
            System.out.println("Normální jméno.");
    }
}

Nástroj nám v kódu sám vyhledá a opraví chyby:

Editace kódu v Canvasu - Základní konstrukce jazyka Java

Při správně zadaném promptu můžeme v našem kódu jednoduše doplnit chybějící funkcionalitu:

Přidej do kódu validaci vstupu. Chci, aby nešlo zadat prázdné jméno.

Editace kódu v Canvasu – doplnění funkcionality - Základní konstrukce jazyka Java

GitHub Copilot – Pomocník přímo ve tvém IDE

GitHub Copilot je AI asistent vyvinutý společnostmi GitHub a OpenAI. V IntelliJ IDEA je k dispozici jako plugin, který je schopný navrhovat doplnění v našem kódu, generovat kód dle zadání či hledat a opravovat chyby.

Instalace pluginu

Pro využití GitHub Copilotu v IntelliJ IDEA je nutné jej nejprve nainstalovat. V levém horním rohu IDE vybereme možnost File, kde kliknutím na položku Settings otevřeme okno s nastavením:

Položka settings v IntelliJ - Základní konstrukce jazyka Java

V otevřeném menu zvolíme záložku Plugins a kliknutím na tlačítko Marketplace otevřeme výběr pluginů ke stažení:

Plugins v IntelliJ - Základní konstrukce jazyka Java

Do vyhledávacího pole zadáme GitHub Copilot a plugin nainstalujeme kliknutím na tlačítko Install:

GitHub Copilot v záložce plugins - Základní konstrukce jazyka Java

Po dokončení instalace budeme vyzváni k restartování IntelliJ IDEA a následně k přihlášení k našemu GitHub účtu.

V případě, že účet na GitHubu ještě nemáme, založíme si ho dle postupu v lekci Verzovací nástroj Git a IntelliJ IDEA.

Práce s GitHub Copilotem

Jakmile je Copilot aktivní, začne v reálném čase generovat návrhy k doplnění kódu. Pokud začneme psát metodu, Copilot se pokusí navrhnout její logiku. Při práci s třídami nebo cykly dokáže generovat celé bloky kódu. Umí se dokonce učit z našeho stylu kódování a přizpůsobit mu své návrhy. Navrhovaný kód potvrdíme zmáčknutím klávesy Tab:

Návrh doplnění kódu v GitHub Copilotu - Základní konstrukce jazyka Java

Kromě automatického doplňování kódu nabízí GitHub Copilot také chatovací rozhraní, které umožňuje pokládat dotazy, získávat vysvětlení ke kódu nebo generovat celé bloky kódu na základě zadání. V IntelliJ IDEA je chat dostupný po kliknutí na ikonu Copilot Chat v pravém bočním panelu. Do otevřeného okna můžeme zadat prompt, například pro vygenerování třídy s funkcí pro výpočet kvadratické rovnice:

Prompt na vytvoření funkce pro řešení kvadratických rovnic - Základní konstrukce jazyka Java

Po odeslání promptu nám GitHub Copilot poskytne hotový kód, který lze pomocí dvou tlačítek v pravém horním rohu zkopírovat nebo přímo vložit do našeho kódu:

Vložení kódu do třídy - Základní konstrukce jazyka Java

Mimo výběr AI modelu nám ještě chatovací rozhraní poskytuje možnost připojit konkrétní soubor pomocí ikony +. To je užitečné například při hledání chyb nebo optimalizaci kódu v rámci určitého souboru.

V našem případě jsme připojili soubor Main.java a zadali jsme prompt pro nalezení chyb. Obdrželi jsme následující odpověď s návrhy oprav:

Chatovací rozhraní v GitHub Copilotu – oprava kódu - Základní konstrukce jazyka Java

Claude Artifacts

Chatbotů, jako je ChatGPT, je k dispozici více. Mezi další oblíbené patří Claude. Podobně jako ChatGPT ho můžeme využít jako pomocníka při následujících úkonech:

  • programování – generování a oprava kódu, návrhy algoritmů, vysvětlení složitých konceptů,
  • psaní a editace textu – pomoc s tvorbou dokumentů, článků nebo e-mailů,
  • analýza a shrnutí informací – rychlé zpracování velkého množství textu a jeho převedení do stručné a srozumitelné podoby,
  • asistence při rozhodování – pomoc s logickým myšlením, plánováním projektů a brainstormingem.

Princip používání je podobný jako u ChatGPT:

Ukázkový prompt Claude - Základní konstrukce jazyka Java

Artifacts jsou potom speciální výstupy, které Claude generuje odděleně od hlavního chatu, aby byly přehledné a snadno dostupné. Nejedná se o plnohodnotný editor, ale spíše o způsob, jak strukturovaně uchovat kód, dokumenty nebo vizualizace bez ztráty v dlouhém průběhu konverzace. Když si například necháme vygenerovat kód, Claude ho automaticky uloží jako Artifact. Můžeme ho pak kdykoli otevřít, sdílet nebo dále rozšířit. Tímto způsobem máme důležité informace vždy na dosah, bez nutnosti se k nim složitě vracet.

AI nástroje dokážou výrazně pomoci při studiu programování – usnadňují pochopení obtížné látky a řešení náročných úloh. Po dohodě se zaměstnavatelem je lze uplatnit i v praxi, kde mohou šetřit čas a zvyšovat produktivitu. Proto je důležité se s nimi naučit efektivně pracovat a využívat jejich potenciál naplno.

V příští lekci, Načítání hodnot z konzole a parsování v Javě, se podíváme na načítání hodnot z konzole a parsování dat a poté si vytvoříme jednoduchou kalkulačku.


 

Předchozí článek
Proměnné a typový systém v Javě
Všechny články v sekci
Základní konstrukce jazyka Java
Přeskočit článek
(nedoporučujeme)
Načítání hodnot z konzole a parsování v Javě
Článek pro vás napsal Adam Straňovský
Avatar
Uživatelské hodnocení:
71 hlasů
.
Aktivity