
Správný objektový návrh
Zdravím. Prosím o doporučení stránek/literatury věnující se objektovému návrhu programu. Vím jak fungují třídy a objekty, už jsem s nimi párkrát pracoval např. v php, pythonu nebo c++. Teorii kolem také trochu znám, bylo to v rámci jednoho předmětu. Co nás na škole bohužel nenaučili je objektový návrh. Jak správně dekomponovat řešený problém na objekty. Momentálně tvořím školní projekt tftp server v c++ a tam se použití objektů imho velmi nabízí, např. samotný server může běžet na více rozhraních najednou - několik instancí jednoho objektu běžících každá v jednom vlákně. Chci si to ale navrhnout tentokrát nějak rozumně. Tak jak je běžné v praxi.
Díky.
Zrovna to, co jsi v dotazu popsal, s objektovým návrhem zase tak moc nesouvisí.
Začni s problémem jako celkem a postupně ho rozděluj na menší části, které spolu souvisí. Ty opět rozděluj na menší, až se dostaneš do stavu, kde každá část vykonává pouze jednu činnost (případně několik činností, které spolu ale velmi úzce souvisí, např. jedna bez druhé nemá smysl). Pro ty jednotlivé malé kousky si pak vytvoř Interface a k těm už si pak napiš třídy, které je implementují.
Díky za radu, něco takového jsem dělal už několikrát (i v neobjektovém jazyce), ale nikdy jsem si právě nebyl jistý, jestli to dělám správně. Řešení pak třeba bylo moc komplikované, zadrátované apod. Ve škole nám kontrolují jen správnou funkčnost, nikoliv kvalitu návrhu. A školní projekty nebudu dělat do nekonečna, tak bych se to chtěl naučit pořádně.
Proč objekty:
1. zapouzdřenost - jsou to samostatné celky, které dělají nějakou konkrétní činnost - tohle může být tvůt TFTP, který poskytuje vše kolem komunikace. Stejnou činnost by měl dělat (zapouzdřovat) pouze jeden objekt. Zbytek obslužného programu pak bude v vláknech vytvářet objekty TFTP, udržovat jejich seznam atd.
2. dědičnost - je třeba dobře nadefinovat základní objekt. Tohle bys využil, pokud bys měl např, nějakou implementaci obecného protokolu pro přenos souborů jako objekt a pomocí dědičnosti z něj udělal FTP, SFTP, FTPS, TFTP, ... Vlastní program pak nezajímá, jaký protokol používá, ke všem přistupuje stejně, volá stejné metody apod.
Zatím to mám takto:
Objekt Service - jako služba. V tom je hlavní smyčka. Naslouchá se na určité adrese a portu. Jak dojde nějaký request od klienta, vytvoří se nové vlákno, nová instance objektu Client a je mu předán paket. Pak znovu čeká na další request. Instancí Service může být víc, pokud má server běžet na více rozhraních.
Objekt Client - vytvoří nový socket na jiném portu a ve smyčce přes něj obsluhuje klienta. K tomu obsahuje různé metody na parsování zprávy.
Pak jsem uvažoval ještě o objektu File. Obsahoval by deskriptor souboru, se kterým se pracuje a různé metody k tomu. Instanci by prováděl(y) objekt(y) Client, pro každý soubor jednu instanci.