IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: Jak čistě a správně strukturovat program?

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Aleš13
Člen
Avatar
Aleš13:25.2.2019 13:38

Není mi úplně jasné jak má být správně postaven program v Javě (obecně programovat umím, ale Javu vidím poprvé v životě...). Myšlenka je taková, že budu mít nějakou class se složkami (int, String) jejichž hodnoty postupně v programu zadám (pomocí série formulářů udělaných v NetBeans JFrame), pak program provede nějaké výpočty a výsledek zobrazí. Úloha vcelku triviální (ano, jde o školní příklad), řešení též jednoduché, ale chtěl bych to vyřešit "čistě". Teď to mám tak, že složky té class jsou označené jako public static a ono to s tím funguje. Ovšem myslím, že se to má řešit nějak správněji. V jiných jazycích bych to udělal tak, že bych definoval class (se složkami bez onoho "static") a následně vytvořil její instanci, ke které bych buď přistupoval globálně nebo ji předával jednotlivým formulářům jako parametr. Už proto, že můžu chtít program modifikovat a mít těch výpočtů paralelně rozpracovaných několik, nebo si pamatovat jejich historii a podobně (pak by samozřejmě jedna class se statickými složkami nestačila). Ale tady se mi nedaří nějak "rozumně" udělat [statickou] instanci té třídy. Mohl byste mi prosím někdo poradit, co je správné, javovsky čisté řešení? Díky :-)

Zkusil jsem: Program je funkční, v tom není problém. Jen asi není dodržena "čistota koncepce". A bohužel z příruček a návodů které se mi podařilo najít mi to není moc jasné, asi se předpokládá, že takováhle samozřejmost se nemusí ani vysvětlovat :-)

Chci docílit: Pochopit programovací paradigma Javy :-) Aspoň po kouskách.

 
Odpovědět
25.2.2019 13:38
Avatar
Ondřej Němec
Tvůrce
Avatar
Ondřej Němec:25.2.2019 15:24

pokud jsem správně pochopil tvůj problém, mělo by to jít zhruba tak, jak jsi říkal: vytvoříš instanci třídy, atributy dostane v konstruktoru, instanci si předáváš v argumentech...
pokud bys chtěl něco specifičnějšího, mohl bys prosím nahrát tu třídu?

Nahoru Odpovědět
25.2.2019 15:24
Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód.
Avatar
Aleš13
Člen
Avatar
Odpovídá na Ondřej Němec
Aleš13:25.2.2019 15:47

Dík. Třída je úplně jednoduchá

class OzubeneKolo {
  static public int pocetZubu;
  static public int modul;
  static public int uhelZaberu;
  static public double roztecnaKruznice;
  }

časem tam přijde víc složek, ale teď pro rozchození tam mám jen tyhle čtyři. Vlastní program je

package test02;
public class Test02 {
  public static void main(String[] args) {
    Test03 a = new Test03();
    a.setVisible(true);
    }
}

kde Test03 je JFrame formulář, ve kterém se zadávají první tři složky třídy OzubeneKolo (a čtvrtá se pak vypočítá a zobrazí). Kam prosím mám zařadit to vytvoření instance třídy OzubeneKolo? Samozřejmě poté, co z ní odmažu ty "static". Má to být jako nějaká složka třídy Test02 nebo to má ležet někde mimo ni, aby oblast platnosti i viditelnosti odpovídala tomu co je v jiných jazycích globální proměnná? Nebo jsem úplně vedle?
Díky.

Editováno 25.2.2019 15:48
 
Nahoru Odpovědět
25.2.2019 15:47
Avatar
Ondřej Němec
Tvůrce
Avatar
Odpovídá na Aleš13
Ondřej Němec:25.2.2019 16:00

možnost A -> třída Test03 bude mít metodu getOzubeneKolo, tj ona ti vytvoří novou instanci
možnost B -> do konstruktoru třídy Test03 pošleš instanci OzubeneKolo a Test03 ji pomocí settrů naplní
jestli to není srozumitelné, pošlu ukázky

Nahoru Odpovědět
25.2.2019 16:00
Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód.
Avatar
Aleš13
Člen
Avatar
Odpovídá na Ondřej Němec
Aleš13:25.2.2019 16:12

Můžu poprosit o tu ukázku? Já s Javou teprve dneska začal a moc by mi to pomohlo :-)

 
Nahoru Odpovědět
25.2.2019 16:12
Avatar
Ondřej Němec
Tvůrce
Avatar
Odpovídá na Aleš13
Ondřej Němec:25.2.2019 17:49

## možnost A:
třída ozubene kolo:

// constructor
public OzubeneKolo(int pocetZubu, ....) {
....
}

// getry setry ...

třída Test03:

// tvoje implementace
private OzubeneKolo kolo;

//....

public void nejakaMetoda() {
        // ziskani dat z formu
        this.kolo = new OzubeneKolo(...);
}

// ....

public getOzubeneKolo() {
        return kolo;
}

getOzubeneKolo ti vratí instanci

## možnost B
třída ozubeneKolo má defaultní konstuktror, všechny atributy mají getry a setry

třída Test03

public Test03(OzubeneKolo kolo) {
// ....
}

public void nejakaMetoda() {
        // ziskani dat z formu
        this.kolo.setPocetzubu(data z formu);
}

a main

public class Test02 {
  public static void main(String[] args) {
        OzubeneKolo kolo = new OzubeneKolo();
    Test03 a = new Test03(kolo);
    a.setVisible(true);
    }
}

s instancí ozubeneho kola v proměnné kolo pak můžeš dál pracovat


ty ukázky samozřejmě nejsou plně funkční, musíš si je doupravit. kterou z možností si vybereš, zavisí na tobě a na tom, co s tím chceš dál dělat

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
25.2.2019 17:49
Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód.
Avatar
Aleš13
Člen
Avatar
Odpovídá na Ondřej Němec
Aleš13:25.2.2019 17:52

Jasný, myslím, že už to chápu :-)
Díky, hodně jsi mi pomoh.

 
Nahoru Odpovědět
25.2.2019 17:52
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 7 zpráv z 7.