#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.