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.