NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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í.

Diskuze – Lekce 1 - Úvod do objektově orientovaného programování v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Lukáš Hornych
Lubor Pešek:15.3.2021 19:54

No, v tom je právě ten rozdíl. Pokud bys měl předávat nějaké metodě víckrát tu samou instanci, tak by už bylo hodně k zamyšlení, proč ji předávat jako parametr a ne ji mít jako atribut. Proto předávání jedné a té samé instance jako parametr není vhodné.

A k té přepravce jsem se vyjádřil, že ta už se spíš nepoužívá. Je to skutečně zastaralé, protože je to nahrazeno novějšími způsoby.

Co jsem si četl tvé komentáře, tak tobě nemusím nic vysvětlovat. Ty víš, která bije a tobě nemusím říkat, že když něco jde a kód to dokáže přelouskat, tak že je to v pořádku :D

Tak jak jsi to popsal, tak se z toho dalo pochopit, že bys právě i třeba singletona předával jako parametr.
Ale ok, jestlis to tak myslel, tak pak to beru zpět a není o čem diskutovat;)

Odpovědět
15.3.2021 19:54
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Lukáš Hornych
Lubor Pešek:15.3.2021 19:54

Jo a samozřejmě k tomu i patří moje omluva.

Odpovědět
15.3.2021 19:54
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na Lukáš Hornych
Lukáš Hornych:15.3.2021 20:01

Uznávám, že jsem se mohl asi lépe a podrobněji rozepsat, ale ano myslíme to stejně, i jsem v původním komentáři psal, že pokud bude pracovat s tou instancí více metod není úplně vhodné ji dávat jako argument do metody.

 
Odpovědět
15.3.2021 20:01
Avatar
Niki Vávrová:21.12.2022 18:45

Pěkně napsaný článek.

 
Odpovědět
21.12.2022 18:45
Avatar
Jan Trnka
Člen
Avatar
Jan Trnka:5.1.2023 17:13

Je to dobře napsané. Díky.

 
Odpovědět
5.1.2023 17:13
Avatar
Jiri Sana
Člen
Avatar
Jiri Sana:18.3.2023 11:03

Nauč se psát. Tohle je nečitelné, nezajímavé a vážně pochybuju že je to užitečné.

 
Odpovědět
18.3.2023 11:03
Avatar
Stanislav Kus:14.6.2023 19:35

1. úloha
Adresa

private String ulice;
    private int cisloPopisne;
    private int cisloOrientacni;
    private String mesto;
    private String psc;
    private String stat;

    public Adresa(String ulice, int cisloPopisne, int cisloOrientacni, String mesto, String psc) {
        this.ulice = ulice;
        this.cisloPopisne = cisloPopisne;
        this.cisloOrientacni = cisloOrientacni;
        this.mesto = mesto;
        this.psc = psc;
        stat = "Česká republika";
    }

    public String getUlice() {
        return ulice;
    }

    public int getCisloPopisne() {
        return cisloPopisne;
    }

    public int getCisloOrientacni() {
        return cisloOrientacni;
    }

    public String getMesto() {
        return mesto;
    }

    public String getPSC() {
        return psc;
    }

    public String getStat() {
        return stat;
    }

Objednavka

private ArrayList<String> nazvyProduktu;
    private ArrayList<Integer> mnozstviProduktu;
    private ArrayList<Double> cenyProduktu;

    private int cisloObjednavky;

    private Produkt produkt;
    private Zakaznik zakaznik;
    private Adresa fakturacni;
    private Adresa dodaci;

    public Objednavka(int cisloObjednavky, Produkt produkt, Zakaznik zakaznik, Adresa fakturacni, Adresa dodaci) {
        nazvyProduktu = new ArrayList<>();
        nazvyProduktu.add(produkt.getNazev());

        mnozstviProduktu = new ArrayList<>();
        mnozstviProduktu.add(zakaznik.getPocetKusu());

        cenyProduktu = new ArrayList<>();
        cenyProduktu.add(produkt.getCena());


        this.cisloObjednavky = cisloObjednavky;
        this.produkt = produkt;
        this.zakaznik = zakaznik;
        this.fakturacni = fakturacni;
        this.dodaci = dodaci;
    }


    @Override
    public int getNumber() {
        return cisloObjednavky;
    }

    @Override
    public String getFirstName() {
        return zakaznik.getJmeno();
    }

    @Override
    public String getLastName() {
        return zakaznik.getPrijmeni();
    }

    @Override
    public String getStreet() {
        return fakturacni.getUlice();
    }

    @Override
    public int getHouseNumber() {
        return fakturacni.getCisloPopisne();
    }

    @Override
    public int getRegistryNumber() {
        return fakturacni.getCisloOrientacni();
    }

    @Override
    public String getCity() {
        return fakturacni.getMesto();
    }

    @Override
    public String getZipCode() {
        return fakturacni.getPSC();
    }

    @Override
    public String getCountry() {
        return fakturacni.getStat();
    }

    @Override
    public ArrayList<String> getProducts() {
        return nazvyProduktu;
    }

    @Override
    public ArrayList<Integer> getProductQuantities() {
        return mnozstviProduktu;
    }

    @Override
    public ArrayList<Double> getProductPrices() {
        return cenyProduktu;
    }

Produkt

private String nazev;
    private String popis;
    private double cena;

    public Produkt(String nazev, String popis, int cena) {
        this.nazev = nazev;
        this.popis = popis;
        this.cena = cena;
    }

    public String getNazev() {
        return nazev;
    }

    public String getPopis() {
        return popis;
    }

    public double getCena() {
        return cena;
    }

Zakaznik

private String jmeno;
    private String prijmeni;
    private int pocetKusu;

    public Zakaznik(int pocetKusu, String jmeno, String prijmeni) {
        this.pocetKusu = pocetKusu;
        this.jmeno = jmeno;
        this.prijmeni = prijmeni;
    }

    public String getJmeno() {
        return jmeno;
    }

    public String getPrijmeni() {
        return prijmeni;
    }

    public int getPocetKusu() {
        return pocetKusu;
    }

2.úloha
Main

// Vytvoření a výpis bedny

        Bedna bedna = new Bedna(10000);
        System.out.println(bedna);

        // Vytvoření nářadí
        Nastroj kladivko = new Kladivo(1000, "Kladívko", false);
        Nastroj velkeKladivo = new Kladivo(3000, "Velké kladivo", true);
        Nastroj bouraciKladivo = new Kladivo(4000, "Bourací kladivo", true);
        Nastroj sroubovak = new Sroubovak(500, "Šroubovák Philips");
        Nastroj pila = new Pila(2000, "Zrezivělá pila");
        Nastroj elektrickySroubovak = new ElektrickySroubovak(1000, "Elektrický šroubovák Bosh", 4000);

        bedna.vlozNastroj(kladivko);
        bedna.vlozNastroj(velkeKladivo);
        bedna.vlozNastroj(bouraciKladivo);
        bedna.vlozNastroj(sroubovak);
        bedna.vlozNastroj(elektrickySroubovak);

        System.out.println(bedna);

        System.out.println(bedna.vyjmiNastroj(pila));
        System.out.println(bedna.vyjmiNastroj(kladivko));
        System.out.println(bedna.vyjmiNastroj(sroubovak));

        bedna.vlozNastroj(pila);

        System.out.println(bedna);

        kladivko.pracuj();
        velkeKladivo.pracuj();
        elektrickySroubovak.pracuj();
        pila.pracuj();

        bedna.getVahaObourucnichKladiv();
        }

Bedna

private int maximalniNosnost;
    private int vahaVlozenehoNaradi;
    private Nastroj nastroj;

    private ArrayList<Nastroj> vlozeneNaradi;

    public Bedna(int maximalniNosnost) {

        this.maximalniNosnost = maximalniNosnost;
        vlozeneNaradi = new ArrayList<>();

    }

    public void vlozNastroj(Nastroj nastroj) {
        if (!((nastroj.getVaha() + vahaVlozenehoNaradi) > maximalniNosnost)) {
            vlozeneNaradi.add(nastroj);
            vahaVlozenehoNaradi += nastroj.getVaha();
        } else {
            System.out.println("Nařádí nelze vložit, bedna by byla příliš těžká.");
        }
    }

    public String vyjmiNastroj(Nastroj nastroj) {
        for (Nastroj naradi : vlozeneNaradi) {
            if (naradi.getNazev().equals(nastroj.getNazev())) {
                vlozeneNaradi.remove(nastroj);
                vahaVlozenehoNaradi -= nastroj.getVaha();
                return "Vyndavám nástroj: " + nastroj.getNazev();
            }
        } return "Vyndavám nástroj: " + nastroj.getNazev() + "\n" + "Tento nástroj v bedně není";
    }

    public void getVahaObourucnichKladiv() {
        int celkovaHmotnostObourucnichKladiv = 0;
        for (Nastroj naradi : vlozeneNaradi) {
            if (naradi instanceof Kladivo) {
                if (((Kladivo) naradi).jeObourucni() == true) {
                    celkovaHmotnostObourucnichKladiv += ((Kladivo) naradi).getVaha();
                }
            }
        }
        System.out.println("Váha obouručních kladiv je " + celkovaHmotnostObourucnichKladiv + " gramů");
    }

    public List<Nastroj> getNastroje() {
        return Collections.unmodifiableList(vlozeneNaradi);
    }

    @Override
    public String toString() {
        ArrayList<String> nazvyVlozenehoNaradi = new ArrayList<>();
        if (vahaVlozenehoNaradi == 0) {
            return "Bedna je prázdná.";
        } else {
            for (Nastroj naradi : vlozeneNaradi) {
                nazvyVlozenehoNaradi.add(naradi.getNazev());
            }
        }
        return "V bedně je: " + String.join(", ", nazvyVlozenehoNaradi);
    }

ElektrickySroubovak

private int kapacitaBaterie;

    public ElektrickySroubovak(int vaha, String nazev, int kapacitaBaterie) {
        super(vaha, nazev);
        this.nazev = nazev;
        this.vaha = vaha;
        this.kapacitaBaterie = kapacitaBaterie;
    }

    @Override
    public void pracuj() {
        System.out.println("Šroubuji elektricky s kapacitou " + kapacitaBaterie);
    }

    @Override
    public int getVaha() {
        return vaha;
    }

    @Override
    public String getNazev() {
        return nazev;
    }

Kladivo

private boolean obourucni;

    public Kladivo(int vaha, String nazev, boolean obourucni) {
        super(vaha, nazev);
        this.nazev = nazev;
        this.vaha = vaha;
        this.obourucni = obourucni;

    }

    public boolean jeObourucni() {
        return obourucni;
    }

    @Override
    public void pracuj() {
        System.out.println("Zatloukám");
    }

    @Override
    public int getVaha() {
        return vaha;
    }

    @Override
    public String getNazev() {
        return nazev;
    }

Nastroj

protected int vaha;
    protected String nazev;

    public Nastroj(int vaha, String nazev) {
        this.vaha = vaha;
        this.nazev = nazev;
    }

    public abstract void pracuj();
    public abstract int getVaha();
    public abstract String getNazev();
    }

Pila

public Pila(int vaha, String nazev) {
        super(vaha, nazev);
        this.nazev = nazev;
        this.vaha = vaha;
    }

    @Override
    public void pracuj() {
        System.out.println("Řežu");
    }

    @Override
    public int getVaha() {
        return vaha;
    }

    @Override
    public String getNazev() {
        return nazev;
    }

Sroubovak

public Sroubovak(int vaha, String nazev) {
        super(vaha, nazev);
        this.nazev = nazev;
        this.vaha = vaha;
    }

    @Override
    public void pracuj() {
        System.out.println("Šroubuji");
    }

    @Override
    public int getVaha() {
        return vaha;
    }

    @Override
    public String getNazev() {
        return nazev;
    }

3.úloha
Main

ArrayList<Clovek> lide = new ArrayList<>();

        Clovek karelNovak1 = new Muz("Karel", "Novák", LocalDate.of(1988, 2 , 5));
        Clovek josefNovy = new Muz("Josef", "Nový", LocalDate.of(1978, 3 , 19));
        Clovek janMarek = new Muz("Jan", "Marek", LocalDate.of(1968, 4 , 28));
        Clovek karelNovak2 = new Muz("Karel", "Novák", LocalDate.of(1958, 6 ,25));
        Clovek marieNova = new Zena("Marie", "Nová", LocalDate.of(1988, 8 , 15));
        Clovek veraNovakova = new Zena("Věra", "Nováková", LocalDate.of(1978, 10 , 2));
        Clovek simonaMlada = new Muz("Simona", "Mladá", LocalDate.of(1968, 1 , 8));
        Clovek michaelaMarna = new Muz("Michaela", "Marná", LocalDate.of(1958, 12 , 6));

        lide.add(karelNovak1);
        lide.add(josefNovy);
        lide.add(janMarek);
        lide.add(karelNovak2);
        lide.add(marieNova);
        lide.add(veraNovakova);
        lide.add(simonaMlada);
        lide.add(michaelaMarna);

        Collections.sort(lide);

        for (Clovek clovek : lide) {
            System.out.println(clovek);
        }
        System.out.println("");
        System.out.println(karelNovak1 + " a " + marieNova + " spolu mají dítě " + karelNovak1.plus(marieNova));
        }

Clovek

private String jmeno;
    private String prijmeni;
    private LocalDate datumNarozeni;
    private Random random;
    private Clovek clovek;

    public Clovek(String jmeno, String prijmeni, LocalDate datumNarozeni) {
        this.jmeno = jmeno;
        this.prijmeni = prijmeni;
        this.datumNarozeni = datumNarozeni;
    }

    public String getJmeno() {
        return jmeno;
    }

    public String getPrijmeni() {
        return prijmeni;
    }

    public LocalDate getDatumNarozeni() {
        return datumNarozeni;
    }

    @Override
    public String toString() {
        if (datumNarozeni.isAfter(LocalDate.of(1999, 12, 31))) {
            return getJmeno() + " " + getPrijmeni() + " " + datumNarozeni.minusYears(2000).getYear();
        } else {
            return getJmeno() + " " + getPrijmeni() + " " + datumNarozeni.minusYears(1900).getYear();
        }
    }

    @Override
    public int compareTo(Clovek jinyClovek) {
        if (this.getJmeno().equals(jinyClovek.getJmeno())) {
            return this.getDatumNarozeni().compareTo(jinyClovek.getDatumNarozeni());
        }
        return this.getJmeno().compareTo(jinyClovek.getJmeno());
    }

    public Clovek plus(Clovek other) {
        random = new Random();
        int muzZena = random.nextInt(100) + 1;
        if ((clovek instanceof Muz) && (other instanceof Muz) || (clovek instanceof Zena) && (other instanceof Zena)) {
            return null;
        } else if (muzZena <= 50) {
            return clovek = new Muz("Adam", getPrijmeni(), LocalDate.now());
        } else {
            return clovek = new Zena("Eva", other.getPrijmeni(), LocalDate.now());
        }
    }

Muz

public Muz(String jmeno, String prijmeni, LocalDate datumNarozeni) {
        super(jmeno, prijmeni, datumNarozeni);
    }

Zena

public Zena(String jmeno, String prijmeni, LocalDate datumNarozeni) {
            super(jmeno, prijmeni, datumNarozeni);
        }
Editováno 14.6.2023 19:36
 
Odpovědět
14.6.2023 19:35
Avatar
Marek Jiříček:16.7.2023 0:22

Pisete: " Zpráva obvykle vypadá takto: prijemce.jmeno­Metody(parame­try). Např. karel.pozdrav(sou­sedka) by mohl způsobit, že instance karel pozdraví instanci sousedka."

  • Prakticky protimluv. Nasledne zde asi chybi alespon jedno slovo ve vete: "Rozhraní (interface) třídy rozdělí na veřejně přístupné (public) a vnitřní strukturu (private)."
 
Odpovědět
16.7.2023 0:22
Avatar
Samuel Hél
Tvůrce
Avatar
Odpovídá na Marek Jiříček
Samuel Hél:20.7.2023 9:37

Ahoj, ani v jednom případě nejde o chybu. Poslední věta je v pořádku, a popis odesílání zpráv (příjemce.jmenoMetody(parametry)) jde jen o způsob myšlení OOP, viz náš discord - https://discord.com/…919887339550

Odpovědět
20.7.2023 9:37
?
Avatar
Jana Jacková:14.2.2024 16:17

Nerozumím tomuto odstavci: "Komunikace mezi objekty probíhá pomocí předávání zpráv, díky čemuž je syntaxe přehledná. Zpráva obvykle vypadá takto: prijemce.jmeno­Metody(parame­try). Např. karel.pozdrav(sou­sedka) by mohl způsobit, že instance karel pozdraví instanci sousedka."

Ve zprávě v závorce jsou (parametry) a v např. je (instance). Můžete mi, prosím, někdo uvést celý příklad, abych porozuměla, jak to vypadá prakticky?

 
Odpovědět
14.2.2024 16:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 54.