Naučit se HTML & CSS, JS a Bootstrap Sleva na školení
Získej 500 Kč na naše školení. Více zde
Probíhá výprodej HTML & CSS, JavaScript a Bootstrap
Avatar
Aleš13
Člen
Avatar
Aleš13:25. února 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. února 13:38
Avatar
SolusLupusUmbra
Redaktor
Avatar
SolusLupusUmbra:25. února 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. února 15:24
Avatar
Aleš13
Člen
Avatar
Odpovídá na SolusLupusUmbra
Aleš13:25. února 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. února 15:48
 
Nahoru Odpovědět 25. února 15:47
Avatar
SolusLupusUmbra
Redaktor
Avatar
Odpovídá na Aleš13
SolusLupusUmbra:25. února 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. února 16:00
Avatar
Aleš13
Člen
Avatar
Odpovídá na SolusLupusUmbra
Aleš13:25. února 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. února 16:12
Avatar
SolusLupusUmbra
Redaktor
Avatar
Odpovídá na Aleš13
SolusLupusUmbra:25. února 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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 25. února 17:49
Avatar
Aleš13
Člen
Avatar
Odpovídá na SolusLupusUmbra
Aleš13:25. února 17:52

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

 
Nahoru Odpovědět 25. února 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.