Diskuze – Lekce 1 - Úvod do objektově orientovaného programování v Javě
ZpětUpozorň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ů.
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.
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);
        }
					Pisete: " Zpráva obvykle vypadá takto: prijemce.jmenoMetody(parametry). Např. karel.pozdrav(sousedka) 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)."
 
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
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.jmenoMetody(parametry). Např. karel.pozdrav(sousedka) 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?
Zobrazeno 10 zpráv z 54.
				

