UML Class Diagram – Chytré telefony, komunikátory a jejich OS – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

UML Class Diagram – Chytré telefony, komunikátory a jejich OS – Fórum – Programujte.comUML Class Diagram – Chytré telefony, komunikátory a jejich OS – Fórum – Programujte.com

 

Tunco0
Duch
29. 1. 2015   #1
-
0
-

Ahojte, chcem by som vás poprosiť, na študijné účely, či je môj UML diagram správne, resp. niektoré veci sú mi neni jasné, konkrétne :
- Trieda Naklady a trieda Druh_Nakladu. Druh_nakladu som zvolil ako abstraktnú triedu. Vychádzal som z toho, že samotný objekt druh nákladu nebude existovať. Ide mi len o to, aby sa v triede Naklady rozlišovalo a aký druh nákladu ide. Na základe toho vieme spraviť štatistiku (v členení podľa druhu nakladu). Zvolil som vzťah <<uses>> nakoľko asociácia pri abstraktnej triede je nevhodná, a agregácia mi prišla zbytočná. Je to podľa vás správne?

- Trieda Vynosy - Do atributov som nedával atribút Zakazka, nakoľko je s Triedou Zákazka v agregácií, ale do metody pridaj zakazku som tento atribut dal, nakoľko pri zadavani nakladu bude potrebne uviesť aj na aku zákazku tento náklad patrí. Pochopil som správne, že keď je tam agragácia, tento atribút nemusím do triedy Výnosy uvádzať?

- Vidíte na diagrame nejaké do očí bijúce chyby?

P.S. : Je to moj prvý diagram.
Ďakujem veľmi pekne.

Připojen obrázek.

Nahlásit jako SPAM
IP: 95.103.172.–
m4r100
Návštěvník
29. 1. 2015   #2
-
0
-

#1 Tunco
Ahoj, par veci, kterych jsem si vsiml na prvni pohled: 

  • Druh_Nakladu je urcite spatne, protoze tu tridu mas oznacenou jako abstraktni, takze z ni nemuzes vytvorit objekt a tim padem nemas co ve tride Naklady priradit do promenne DruhNakladu
  • Naklady dedi z Vynosy? Volat potom metodu pridatVynos na objektu Naklady je blbost ne?
  • Celkove se zamysli nad metodami typu pridajZmluvu(..), pridajZakazku(..), atd. Protoze co takove metody budou delat? Budou staticke a budou vytvaret objekt Zmluva a nekdo jiny si ten objekt ulozi nekam do kolekce? Nebo nekdo vytvori objekt Zmluva a potom na nim zavola pridajZmluvu? Oba pristupy jsou spatne. Osobne bych to udelal treba tak, ze bude existovat trida Zmluva (pouze data) a dalsi trida ZoznamZmluv, ktera bude mit v sobe kolekci Zmluv a metody pridatZmluvu(Zmluva z), atd..
  • To stejne bych udelal i u jinych trid jako jsou Zakazky, Firmy, atd.. Az pozdeji bych resil vztahy.

Nahlásit jako SPAM
IP: 94.112.137.–
Tunco
~ Anonymní uživatel
2 příspěvky
1. 2. 2015   #3
-
0
-

#2 m4r10

Ďakujem veľmi pekne za všetky postrehy, veľmi si to vážim. Zjavne som prečítal málo alebo možno až príliš veľa literatúry na túto tému, no teoria bez praxe býva často zbytočná. Celý class diagram som prepracova - možno pozrieť  - http://www.imgup.cz/images/2015/02/01/CLASSDIAGRAMe801d.jpg 

1. Spravil som všeobecnú triedu položka z ktorej budú dediť trieda Naklady a trieda Vynosy. Ďalej som opravil triedu DruhNakladu - enumeration stereotyp. 

2. Pre triedy ako Firma, Zakazka, Objednavka a podobne som spravil tak ako ste mi odporučili  - SpravaFiriem (metody pridaj,zmen,..) a trieda Firma samostatne. 

3.Trieda Tlač je interface, správne. Chcel som tým vyjadriť možnosť vytlačiť zákazky ako aj Reportov zo zákaziek. 

Nové dotazy:

Vytvoril som interface Priradzakazku - má vyjadrovať, že k nákladom, výnosom ako aj dokladom (zmluva, objednávka) je potrebné vždy priradiť konkrétnu zákazku. 

Nie som si istý či som zvolil správne vzťahy medzi interfacemi a triedami. 

Princím má byť Diagram tried, ktorý bude možno implementovať v c#. Zmysel "programu" - Evidovať všetko o zákazkách, ich náklady, výnosy, priradené zmluvy alebo objednávky, počítať ich výnosnosť. Trieda ZakazkyReport má práve slúžiť na to, aby:

Připojen obrázek.

 - zobrazila náklady, výnosy a % plnenie rozpočtu vybranej zákazky za obdobie, ktoré si zvolí užívateľ (atribúty DatumReportOD, DatumReportDO). Naklady by sa mali zobraziť v členení podľa druhu a následne spočítať spolu. Z toho mám úplny zmätok ako to v metóde vyjadriť. 

Ďakujem za všetky postrehy. 

Nahlásit jako SPAM
IP: 95.103.172.–
m4r100
Návštěvník
8. 2. 2015   #4
-
0
-

#1 Tunco
#3 Tunco

Ahoj, tak poporade:

1. UML

Zakladni pravidlo efektivniho pouzivani UML je: "mene je vice". Modeluji jenom nezbytne veci (napriklad chci nejaky kousek systemu vysvetlit kolegovi v praci a pomoci class diagramu je to vice srozumitelne). Navrhovat cely system pomoci UML je naprosta ztrata casu.

Osobne pokud neco modeluju pomoci UML, tak si vzdycky v hlave promitam jak by dany kousek realne vypadal v kodu. Kdysi kdyz jsem toho jeste moc nenaprogramoval, bylo pro mne tezke UML modely vytvaret a byl to celkove chaos. Na to pomuze pouze jedno: naprogramovat kousek kodu a prevest ho na UML model. Diky tomu si udelas v hlave jasno. Priklad: 

public class SeznamPolozek
{
  private List<Polozka> _polozky = new List<Polozka>();
  
  public void PridatPolozku(Polozka pol)
  {
    _polozky.Add(pol);
  }
  public void SmazatPolozku(Polozka pol)
  {
    ...
  }
}

// Kod 1.1
public class Polozka
{
  protected int pcd;
  private DateTime datum;

  public int GetPcd()
  {
    return pcd;
  } 
}

// Kod 1.2
public class Polozka
{
  private SeznamPolozek _seznam;
  protected int pcd;
  private DateTime datum;

  public Polozka(SeznamPolozek seznam)
  {
    _seznam = seznam; 
  }

  public int GetPcd()
  {
    return pcd;
  } 
}

2. Vztahy (asociace, agregace, kompozice)
Vsechny vztahy rozdelovat na agregace a kompozice je zbytecne. V 90% uplne postaci asociace, ale hlavne orientovane asociace (se sipkou) s kardinalitou (0,1,1..*,*). Napriklad pro jazyk C# agregace nema zadny smysl (neni ji jak zachytit v kodu, garbage collector sam uklizi objekty), oproti tomu v jazyce C++ by to smysl melo. Kompozici v C# zachytit lze, ma ale smysl ve specifickych pripadech, napriklad pokud trida implementuje ICloneable a chceme ukazat, ze i trida v danem vztahu ma byt zklonovana. Priklad: 

public class Employee : ICloneable
{
  private List<string> _phoneNumbers = new List<string>();
  public void AddPhoneNumber(string number)
  {
    _phoneNumbers.Add(number);
  }

  public object Clone()
  {
    Employee clone = (Employee)this.MemberwiseClone();
    clone._phoneNumbers = (List<string>)_phoneNumbers.Clone();
    return clone;
  }
}

Asociace: trida (interface) pouziva (ma ulozneny odkaz na) dalsi tridu (interface).

3. Vztah generalizace

Vztah generalizace se pouziva jak pro dedeni, tak pro implementaci interfejsu (viz 2. diagram). U tebe u interfejsu "PriradenieZakazky" musi byt prazdny trojuhelnik a cara k "Zakazka".

4. Stereotyp <<use>>

Se pouziva v pripade, ze treba trida A prijima v nejake sve metode jako parametr objekt tridy B.

public class B {}

public class A
{
  public void MethodOne(B par)
  {
    ...
  }
}

5. Jenoduchy nastrel pro tvuj system

Připojen obrázek.

Nahlásit jako SPAM
IP: 94.112.137.–
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

 

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