Potrebujem poradit... – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Potrebujem poradit... – Java – Fórum – Programujte.comPotrebujem poradit... – Java – Fórum – Programujte.com

 

SVKSuli0
Newbie
8. 4. 2015   #1
-
0
-

ahojte, chcel by som poprosiť o radu od skúsenejších ľudí.

nejaký ten čas sa už učím javu podla knihy http://www.martinus.sk/?uItem=132950 som na 9. lekcii a dá sa povedať že som si už prešiel všetky základy ktoré potrebujem vedieť, jednoduché programy ktoré majú tak 2-3 triedy nemám problém spraviť ale chcel by som si vyskúšať spraviť nejaký zložitejší program a tu mám problém že sa v tom začínam strácať a neviem ako postupovať, skúšal som metódu pokus omyl ale to nefunguje sa v podstate stále točím dokola a je v tom iba chaos.

nemáte pre mňa nejakú radu ako postupovať, ako to navrhnúť a nestratiť sa v tom? dik

Nahlásit jako SPAM
IP: 89.173.201.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
8. 4. 2015   #2
-
0
-

Jako samouk jsem měl naprosto stejný problém před několka lety. Na trhu v ČR,(SR) ale i ENG chybí knha jak vytvářet komplexnější programy tvz. architektura, návrh softwaru (nemyslím UML schémata). O něco v tom směru se pokouší vydávat Rudolf Pecinovský ( Učebnice objektové architektury Java - lze sehnat na warezu), sám tu knihu v papírové podobě vlastním ale zde těžce selhal. Dle mě to je shit, přestože jeho kniha o návrhových vzorech je bezkonkureční špička.

Takže ti zbývá :

1) prostudovávat cizí zdrojové kódy ( např. zde na fóru, přípaně konkurenční fóru  itnetwork.cz )

2) přes google si najdi Java programy  - které si dekompiluješ a opět prostuduješ jejich zdrojové kódy

3) požádáš nějakého zkušeného programátora aby ti u pivka,jointa nevysvětlil danou problematiku

4) vymyslet si nějaký GUI program (s 5-10 třídami) s nějakou funkčností a ten prostě naprogramovat

Nahlásit jako SPAM
IP: 217.112.161.–
SVKSuli0
Newbie
8. 4. 2015   #3
-
0
-

#2 NotBeginner
stým prezeraním konkurenčných kódov nieje zlý nápad ale často býva problém že málo kto ukáže kompletný program hlavne keď je moc veľký, bežne keď niečo riešia tak dajú iba časť s toho programu. neviem kde by som zohnal také vhodné príklady.

Nahlásit jako SPAM
IP: 89.173.201.–
ingiraxo+15
Grafoman
8. 4. 2015   #4
-
0
-

nejsem si jistý, jestli něco, co má 3 třídy se dá nazývat programem... podle kodexu, by třídy mělá obsahovat max 200 řádků kde počítám s tím, že třída s Main bude prakticky prázdná

k tématu...

- pokud hledáš příklady, tak zkus github nebo jiný repozitáře, tam máš kompletní zdrojáky/aplikace
- popravdě nerozumim, jak se můžeš ztrácet někde, co má jen 3 třídy,.. musíš si zvolil nějaký systém zápisu, vytvářet vhodně pojmenované balíčky, třídy, metody.. udržovat kód přehlednej a to tak, aby když to ukážeš někomu jinýmu, aby neluštil kde co je a co tohle dělá, ale hned to bylo jasný

hodně začátečníku třeba skoro vůbec nepoužívá balíčky nebo všechno cpe do jedné/dvou tříd.. případně názvy metod jsou chaotický a proměnné všude na jedno písmenko nebo zkratku

klidně sem nebo jinám dej kus toho, cos vymyslel, v čem se ztrácíš a já nebo někdo další ti to tady zkritizuje a poradí.. od toho tu fórum je

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
SVKSuli0
Newbie
8. 4. 2015   #5
-
0
-

#4 ingiraxo
indaxo zle si pochopil, ja sa nestrácam v malých 2-3 triedovych príkladoch ale vo večšich programoch. a dík skúsim sa pozrieť na tie stránky a keď ma niečo bude trápiť tak sa spýtam... 

a keď chceš tak tu máš taký príklad aké veci si nemám problém spraviť...

je to niečo ako poznámkový blok.


package napoveda;

import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

class text {
    String str;
    
    text(int i) {
        switch(i) { //... tu si napisem nejake poznamky podla obahu.
	    case 1:
	break;
	    case 2:
	break;
	    case N: //...skutocny obsah je zbytocny a dlhy.
	break;
    }
}

public class Napoveda {
    public static void main(String[] args) {
        
        JFrame frame = new JFrame("Napoveda");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setSize(300, 430);
        
        JLabel label = new JLabel(); /*trosku divne ale funguje to  a nechcelo sa mi to menit.*/
        frame.setContentPane(label);
        
        JTextArea textarea = new JTextArea();
        textarea.setSize(275, 355);
        textarea.setLocation(10, 10);
        textarea.setEditable(false);
        label.add(textarea);
        
        String combostr[] = {" default", "if", "switch", "for, for-each", "while", "do-while",
                             "break/continue", "return", "finalize", "this", "? (ternarni operator)",
                            "modifikatori pristupu","static", "extends", "super", "abstract, final",
                            "trieda Object", "implements"};
        JComboBox combobox = new JComboBox(combostr);
        combobox.setSize(140, 20);
        combobox.setLocation(10, 375);
        label.add(combobox);
        
        JButton button = new JButton("button");
        button.setSize(100, 20);
        button.setLocation(185, 375);
        label.add(button);
        button.addActionListener((ActionEvent ActionEvent) -> {
            int i = (int) combobox.getSelectedIndex();
            text text = new text(i);
            textarea.setText(text.str);
        });
        
        frame.revalidate();
        frame.repaint();
    }
}

taký malinky ale poslúži lepšie si zapametať jednotlivé základy ktoré sa učím. :)

Nahlásit jako SPAM
IP: 89.173.201.–
ingiraxo+15
Grafoman
8. 4. 2015   #6
-
0
-

#5 SVKSuli
ke zdrojáku

1) názvy tříd se VŽDY píší prvním písmenem velkým, je to přeci název třídy
2) např. vůbec na první pohled netušim, co dělá třída "text" a to kombo v konstruktoru... název parametri "i" je zrovna to, o čem jsem psal, že se nemá dělat!
3) nevim, co je na JLabel divný
4) to pole "combostr" by měla být instanční konstanta.. jsou tam hodnoty, který se měnit nebudou a slouží jen pro čtení
5) nebylo by na škodu to rozsekat do metod, např. pro vytvoření okna a nplnění okna daty
6) ten listener na button... jakooo, v tomhle případě je to sice ještě OK, ale normálně bych doporučil naimplementovat interface přímo do třídy Napoveda nebo vytvořit novou třídu s tím listenerem
7) co se týče balíčku, tak by měl být ideálně ve formátu "domena.autor.projekt.dalsi..."

jen pár postřehů ;-)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
SVKSuli0
Newbie
8. 4. 2015   #7
-
0
-

#6 ingiraxo
tak dik :D

a ma to vytvoriť okno, s comboboxu vyberiem čo chcem aby mi textarea vypísala a vypíše to čo je v pridelenom Switch indexu :D vpodstate tam napíšem na čo je napr. if, a keď narazím na niečo nové tak si to tak pekne pridám a popíšem do nového case vo switchu.

Nahlásit jako SPAM
IP: 89.173.201.–
ingiraxo+15
Grafoman
8. 4. 2015   #8
-
0
-

#7 SVKSuli
ano, chápu jak to funguje :) ale je to úplně na hov** řešený :-D

1) jakmile změníš pozice s kombáči, tak ti to přestane fungovat, protože to pracuje s indexy.. jinými slovy.. ty konstanty v kombáči jsou nepoužitý, můžu tam dát cokoliv a podle tvé logiky to bude fungovat stále jak má
2) ta tvoje třída "text" je v tomhle případě úplně na nic
3) to chování je opravdu k zamyšlení, jestli to nenapsat úplně jinak (třeba pomocí mapy) :-)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
8. 4. 2015   #9
-
0
-

#7 SVKSuli
jinak upravená verze, jak by to bylo mnohem lepší 

@SuppressWarnings("serial")
public class GuiDemo extends JFrame implements ActionListener
{
    private Map<String, String> map = new HashMap<String, String>();
    private JTextArea outputArea;

    public GuiDemo()
    {
        super("GUi Demo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(680, 250);
        setResizable(false);
        setLocationRelativeTo(this);
        setLayout(null);
        getContentPane().setBackground(Color.WHITE);

        prepareContentData();
        initializeComponents();
    }

    private void initializeComponents()
    {
        JLabel lb = new JLabel("Key:");
        lb.setSize(100, 30);
        lb.setLocation(10, 10);
        getContentPane().add(lb);

        JComboBox<Object> cbox = new JComboBox<>(map.keySet().toArray());
        cbox.setSize(200, 30);
        cbox.setLocation(50, 10);
        cbox.addActionListener(this);
        getContentPane().add(cbox);

        outputArea = new JTextArea();
        outputArea.setSize(600, 150);
        outputArea.setLocation(50, 50);
        outputArea.setEditable(false);
        outputArea.setLineWrap(true);
        outputArea.setBorder(new LineBorder(Color.GRAY));
        outputArea.setBackground(new Color(220, 220, 220));
        getContentPane().add(outputArea);

        cbox.setSelectedIndex(0);
    }

    // sem si pridat dalsi texty s infem... pokud toho bude hodne
    // tak je lepsi to dat do souboru a zde nacist do mapy
    private void prepareContentData()
    {
        map.put("Demo", "Nějaký text 1 ...");
        map.put("Test", "Nějaký text 2 ...");
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() instanceof JComboBox<?>) {
            JComboBox<?> src = (JComboBox<?>) e.getSource();

            if (map.containsKey(src.getSelectedItem())) {
                outputArea.setText(map.get(src.getSelectedItem()));
            }
        }
    }

    public static void main(String[] args)
    {
        new GuiDemo().setVisible(true);
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
NotBeginner
~ Anonymní uživatel
185 příspěvků
8. 4. 2015   #10
-
0
-

 Pominu-li logiku řešení na kterou zde poukázal Indi, tak se podívej na tuto formu zápisu.

- jméno balíčku malími

- jmeno třídy začíná velkým písmenem

- všimni že Frame okna je samostatný objekt zděděný od třídy JFrame

- vnitřní objekty(JPanel,TextArea,.. umístěné v Okně jsou jsou třídní proměnné protože se pak dají přes gettery/settery modifikovat

- vnitřní objekty(JPanel,TextArea,..) bylo vhodné nastavit opět jako samostatné dědící třídy.

- Listener na button jsem dal jako vnitřní třídy oproti tvojí anonymní třídě

- kvůli zjednodušení nejsou class public, i když u větších projektu má každá třída vlastní soubor a je tedy public

- Spousta lidí tuto formu zápisů interpertují jako přehlednější i když zabere 3x více místa.

package program.napoveda;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings("rawtypes")
class VnitrniComboBox extends JComboBox {
	private static final long serialVersionUID = 730774670720348778L;
	@SuppressWarnings("unchecked")
	public VnitrniComboBox(String[] combostr) {
		super(combostr);
        this.setSize(140, 20);
        this.setLocation(10, 375);
	}
}
class VnitrniTextArea extends JTextArea {
	private static final long serialVersionUID = -4861561073910948529L;
	VnitrniTextArea(){
		this.setSize(275, 355);
        this.setLocation(10, 10);
        this.setEditable(false);		
	}
}
class VnitrniPanel extends JPanel {
	private static final long serialVersionUID = 2659852460161037640L;
	private JTextArea textarea;
	private VnitrniComboBox combobox;
	private JButton button;
	public VnitrniComboBox getCombobox() {
		return combobox;
	}
	public void setCombobox(VnitrniComboBox combobox) {
		this.combobox = combobox;
	}
	
	public JTextArea getTextarea() {
		return textarea;
	}
	public void setTextarea(JTextArea textarea) {
		this.textarea = textarea;
	}
	private void pridejTextArea(){
		textarea = new JTextArea();
		this.add(textarea);
	}
	private void pridejComboBox(){
		String combostr[] = {" default", "if", "switch", "for, for-each", "while", "do-while",
                "break/continue", "return", "finalize", "this", "? (ternarni operator)",
               "modifikatori pristupu","static", "extends", "super", "abstract, final",
               "trieda Object", "implements"};
		combobox = new VnitrniComboBox(combostr);
        this.add(combobox);
	}
	VnitrniPanel(){
		pridejTextArea();
		pridejComboBox();
		nastavTlacitko();
	}
	private void nastavTlacitko(){
		button = new JButton("button");
        button.setSize(100, 20);
        button.setLocation(185, 375);
        button.addActionListener(new UdalostTlacitko());
        this.add(button);
	}
	class UdalostTlacitko implements ActionListener {
		public void actionPerformed(ActionEvent arg0) {
			int i = (int) combobox.getSelectedIndex();
			VolbaNapoveda text = new VolbaNapoveda(i);
            textarea.setText(text.str);
		}
	}
	class VolbaNapoveda {
		private String str;
		public VolbaNapoveda(int i) {
			switch(i) { 			//... tu si napisem nejake poznamky podla obahu.
		    	case 1:
		    		break;
		    	case 2:
		    		break;
		    	case 3: 			//...skutocny obsah je zbytocny a dlhy.
		    		break;
			}
		}
	}
}
class FrameOkno extends JFrame {
	private static final long serialVersionUID = 2415426565416004811L;
	private VnitrniPanel panel;
	public VnitrniPanel getPanel() {
		return panel;
	}
	public void setPanel(VnitrniPanel panel) {
		this.panel = panel;
	}
	private void nastaveniFrame(){
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        this.setSize(300, 430);
        this.setLocation(300,300);
	}
	private void nastavPanel(){
        panel = new VnitrniPanel();
        this.add(panel);		
	}
	FrameOkno(){		//	konstruktor
		nastaveniFrame();
		nastavPanel();
	}
}
public class Napoveda {
	public static void main(String [] args){
		new FrameOkno().setVisible(true);
	}
}
Nahlásit jako SPAM
IP: 217.112.161.–
SVKSuli0
Newbie
8. 4. 2015   #11
-
0
-

vďaka za ukážku ta mapa je pre mňa novinka tak na to sa ešte pozriem a tých foriem zápisu je ako vidím veľa tak to je asi komu sa čo páči viac.

Nahlásit jako SPAM
IP: 89.173.201.–
ingiraxo+15
Grafoman
8. 4. 2015   #12
-
0
-

#10 NotBeginner
promiň, že opravuju i tebe, ale nedá mi to :-)
S pár věcma nesouhlasim

1) JPanel, JTextArea apod.nemusí být třídní proměnné, vůbec je nemusíš děklarovat jako instanční proměnný třídy, pokud nejsou skutečně potřeba - kolikrát stačí jako lokální

2) každá komponenta jako JPanel, JTextArea nemusí a hlavně je to i zbytečné, aby měla vlastní třídu... tohle se dělá pouze v případě, že potřebuješ rozšířít logiku nebo upravit samotné chování komponenty.. běžně nerozšiřujeme komponenty, když není potřeba

3) trochu nepodstatný, ale deklarovat serializaci pro Frame je zbytečný, je dost nepravděpodobný, že se zrovna Frame bude serializovat.. takže lepší je přidat ignore na serializaci

4) co se týče události na tlačítko - proč má zase vlastní třídu? Máš nějak moc ve zvyku dělat na všechno objekty :-) Pro tento případ bohatě stačí použít již existující třídu Framu

5) tahle forma zápisu, která zabere 3x více místa rozhodně není přehlednější, spíš naopak :-)

- Jen bych doplnil, že správně by každej objekt, ať už třída, rozhraní, typ, cokoliv měl mít separátní souboru, i když bude třeba na 5 řádků... zpřehlední to kód

- nevytvářet zbytečně vnořený třídy... tohle má smysl pouze tehdy, pokud se ten objekt týká pouze rodiče a slouží pro interní potřeby.. nejčastěji takový objekty jsou DTO nebo Runnable objekty do vláken

- rozhodně nedávat do souboru více tříd/objektů (teď nemyslim vnořených)... každý soubor může mít pouze jeden public objekt, takže jediný, co tím autor dosáhne je to, že ušetří jeden soubor ale na přehlednosti to nepřidá

SVKSuli: - zápis není jen o tom, co se komu líbí víc, ale aby to taky bylo přehledný a zároveň rychlý a efektivní... "javisti" často zapomínaj a kolikrát ani neřešej, že každý vytvoření objektu něco stojí (systémový prostředky)... další věc je, že ně všude a né vždy má smysl vytvářet objekt, je dobré se nad tím déle zamyslet než jednat a potom si říct, že to takhle při dalším rozšíření nebude fungovat a bude potřeba to celý přepsat.. takže takto ne-e

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
NotBeginner
~ Anonymní uživatel
185 příspěvků
9. 4. 2015   #13
-
0
-

#12 ingiraxo

- neprožívej to tolik a hlavně klídek
1) Neříkal jsem že musí

2) Cílem bylo mu předvést jak se provádí větší programy, kdy prakticky každá objekt má vlastní třídu a je public

3) Pokud ne, Eclipse háže Warning - mě osobně například warningy vadí

4) Pokud řešíš jenom jednoduché události pak anonymní jsou v poho ale pokud už jsou složitější je vhodná vnitřní třída a pokud dochází k volání stejné události z jiných částech programu je nejlepší ji naprogramovat jako přímo public class

5) přečti si pořádně text, říkal někomu to připadá přehlednější

Uvědom si že SVKsuli je teenager, možná ještě chodí na základku. Šlo přeci o jeho rozšíření obzorů jak vytvářet větší programy a ne o měření pindíků( který zdrojový kód je lepší) kapišto? A to jsme docela si myslím splnily.

Nahlásit jako SPAM
IP: 217.112.161.–
Dano
~ Anonymní uživatel
101 příspěvků
9. 4. 2015   #14
-
0
-

#13 NotBeginner Na to, ze chcel Suli poradit, ako zvladnut vacsi projekt, tak sa velmi toho nedocital. Maximalne si mu ukazal, ako zbytocne vygenerovat inner classy a konstruktivnu kritiku beries ako osobny utok.

SVKSuli  k teme. Java projekt je vrstvova aplikacia a vacsinou sa sklada z API vrstvy, implementacnej vrstvy (implementacia API) a prezentacnej vrstvy (UI -  graficky alebo webovy interface). Takze v zaklade mas tri moduly. V kazdom module zotriedujes classy logicky do balickov.

- API  = stat.firma.projekt.api.db.dao - drzi interface pre DAO vrstvu (praca s DB) ako je insert, update, delete, select, ...
       = stat.firma.projekt.api.service - drzi interface pre service
       = stat.firma.projekt.api.dto - zakladne Data Transfer Object

- IMPL = stat.firma.projekt.impl.db.dao - drzi implementaciu interfacu pre DAO vrstvu
       = stat.firma.projekt.impl.service - drzi implementacia interface pre service

- UI   = stat.firma.projekt.ui.web - drzi
 naimplementovany webovy interface
Nahlásit jako SPAM
IP: 217.75.89.–
SVKSuli0
Newbie
9. 4. 2015   #15
-
0
-

#13 NotBeginner
ja len tak pre upresnenie :D

nie nechodím ešte do školy je mi 23, zaujímal som sa o to len po pri práci lebo by som sa tomu chcel v budúcnosti venovať, a momentálne sedím doma na podpore a učím sa to :)

Nahlásit jako SPAM
IP: 89.173.201.–
ingiraxo+15
Grafoman
9. 4. 2015   #16
-
0
-

Jen bych ještě doplnil k tomu, co psal Dano:

Když se jedná o větší aplikaci (spíše velkou než větší), tak celá aplikace se většinou zkládá z více projektů. Jeden projekt může být libka, kde budeš držet pomocné metody, objekty a takový "common" prvky. Druhý projekt bude třeba logika a 3 projekt UI a komponenty.

Hierarchie pak bude, že "common" libka bude sdílená mezi logikou a UI. A logika zas bude sdílená mezi UI.

Potom se nevyhneš použítí návrhových vzorů, který jsou poměrně klíčový pro větší projekty. Existují i tací, kteří používaj třeba Spring.core kvůli dependency injection (i když se nejedná o web app). Existuje celá řada způsobů jak řídit velký aplikace.

Dále výrazně doporučuju začít používat dokumentační komentáře (píšeš všude, co není private). Hodně ti to z budoucnu usnadní práci a nebudeš muset řešit a hledat logiku jak to funguje.
Jak si měl v parametru proměnnou "i", tak je to sice špatná praktika, ale kdyby tak byl ten doc. komentář s vysvětlením, tak se to dá ještě přehlédnout.

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Petr
~ Anonymní uživatel
746 příspěvků
10. 4. 2015   #17
-
0
-

#1 SVKSuli

Ahoj,

pokud se chces posunout nekam dale v jave tak bude nutne trochu nastudovat jak to funguje tzn:

1. nastudovat OOP (object oriented programming)

- co je to trida, co je to instance tridy, fields, getter a setter
- co je dedicnost, jak podedit tridu, co se stane kdyz podedim tridu, modifikatory public, private a protected, override metody
- konstruktory, konstruktory vs. dedicnost
- interface co to je jak se pouziva, co se chape pod implementaci interface, abstraktni trida, rozdil mezi interface a abstraktni tridou
- staticky kontext, klicove slovo static, co je to class loader + souvislost se statickym kontextem

2. podivat se na java Collections
- java.util.List
- java.util.Map
- java.util.Set
- java.util.Queue
- iteratory nad kolekcemi

3. genericke programovani (pokud jsi nekdy prisel do kontaktu s C++ tak se to da prirovnat k templates)

4. vyjimky (exception), zpracovani vyjimek - try catch finally, rozdily mezi checked a unchecked exception

5. rozdily mezi primitivnimi datovymi typy a tridami, pole vs. List

6. streamy - co to je, jak se s nimi pracuje (souvisi se soubory, siti, vstupne vystupni operace)

7. design patterns (navrhove vzory) - pochopit alespon ty zakladni tzn. singleton, vyse zmineny iterator, factory

8. nejake slozitejsi veci jako reflection, thready, veci z java EE bych nechal az nakonec

To co tu psali jak ma vypadat kod, jak se ma formatovat, naming conventions to je vsechno sice pekne ale pokud nevis co to dela tak se v tom vzdy ztratis.

Nahlásit jako SPAM
IP: 83.240.112.–
SVKSuli0
Newbie
10. 4. 2015   #18
-
0
-

#17 Petr
ahoj, skoro všetko čo si napísal už ovládam, akurát bod.2, 6, 7, 8 ešte nepoznám.

Ono nieje problém že by som nechápal tomu čo píšem ale skôr mam problém navrhnúť zložitejšie programy, lebo som ešte nevidel poriadny príklad.

Nahlásit jako SPAM
IP: 89.173.201.–
Petr
~ Anonymní uživatel
746 příspěvků
10. 4. 2015   #19
-
0
-

#18 SVKSuli

Pokud si myslis, ze to vsechno znas tak se mrkni treba na github, tam je spousta projektu a knihoven v jave. Treba tohle vypadlo z googlu jako jeden z prvnich odkazu: https://github.com/iluwatar/java-design-patterns

Vetsina projektu bude mit nejaky adresar se zdrojaky a pak adresar s testy, bude to nejak logicky rozdelene, podle toho co ktera cast dela. Pokud se pouziva maven, tak tam bude pom.xml atd.

V dnesni dobe pokud aplikace nejakym zpusobem zobrazuje vysledky uzivateli, tak se pouziva MVC design pattern (model view controller), model jsou data, controller obsahuje logiku, ktera to ridi a view to zobrazuje uzivateli, v kodu pak najdes casti, ktere toto nejakym zpusobem implementuji.

Dost casto se dnes taky pouziva vrstvena architektura, tzn kod je rozdelen na ruzne vrstvy, ktere mezi sebou komunikuji, na nejnizsi vrstve mas DAO objekty (data access object), ktere maji na starost samotny pristup k datum, napr spusteni dotazu nad databazi, zapis do souboru.

Nad DAO muze (a nemusi) byt nejaka service, ktera obsahuje logiku, ktera s temi daty neco dela, nad tim muze byt facade vrstva (ale vetsinou neni), ktera ridi volani service. Pokud je kod rozdelen na vetsi kusy (moduly) tak se tam muze vyskytovat vrstva adapteru, ktera umoznuje modul odebrat a nahradit ho jinym no a pak tam muzou byt vrstvy, ktere se staraji o gui.

U vrstvene architektury se na zacatku stanovi pravidla, ktera rikaji kdo s kym muze komunikovat a to se pak striktne dodrzuje, napr. kdyz se nekdo pokusi z gui komponenty zavolat DAO tak by to but nemelo jit a nebo tam bude nekdo kdo mu da pres prsty.

U amaterskych programu se vetsinou o architekture neda moc mluvit, aby architektura vubec mohla vzniknout tak nejprve musim vedet co chci delat, pak jak to budu delat a z jakych casti se to bude skladat a z toho uz mi automaticky vyplynou nektere veci jako jake dao objekty tam budou, jake rozhrani budu muset navrhnout (protoze neco bude komunikovat s necim) atd.

Kdyz treba reknes, ze chces udelat kalkulacku s gui, tak bych ti rekl, aby jsi to rozdelil na tridu s main metodou, pak tridu co bude obsluhovat ksicht a tridu, ktera bude delat samotne pocitani. Pokud budes chtit vetsi funkcionalitu, treba menu, dialog s nastavenim, tak si takovy kod vyextrahujes do nove tridy / souboru a budes to volat z techto puvodnich trid. Obecne by jsi se mel vyhnout tomu, ze jedna trida dela prilis mnoho veci, idealne by mela delat jen jednu vec a z nazvu tridy by melo patrne co dela.


Napriklad kdyz pojmenuju AddressDAO a budou v ni metody, save, load a delete, tak je jasne co to asi bude delat - save mi ulozi objekt typu Address, load ho nacte, delete ho smaze. Rozhodne by takova trida nemela ukladat jine typy objektu, nedejboze treba hrabat do nejakeho GUI atd.

Prijde mi ale celkem zvlastni ze tvrdis, ze toho spoustu znas a neslysel jsi o collections a ztracis se v par tridach. Problem muze byt v tom, ze prectenim nejakeho jednoducheho prikladu clovek casto nabude iluzi, ze vi jak to funguje a pritom to vubec neni pravda. Takze bych si ty zaklady prosel znovu ale poradne na nejakych komplexnich prikladech

Nahlásit jako SPAM
IP: 83.240.112.–
SVKSuli0
Newbie
10. 4. 2015   #20
-
0
-

#19 Petr
diky toto mi hodne pomôže, a presne ako píšeš, základy toho ako to funguje poznám ale vždy som videl iba nejaké základné príklady, a kedže sa učím podla knihy tak tam to ešte spomenuté nebolo.

Nahlásit jako SPAM
IP: 89.173.201.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

Potrebujem poradiť C++ — založil toso992

Potrebujem poradiť C++ — založil toso992

Potrebujem poradiť — založil stevo

Potrebujem poradiť C++ — založil toso992

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý