Spustit jako prezentaci

Co se nestihlo...

Pseudokód

Priklady z minula, ktore sa nestihli... Neprehanat to - aby bolo dost casu na UML.

UML: Unified Modeling Language

UML Class Diagram

UML

Diagramy UML

UML diagrams
Ukazat UML_TomasBures.pdf, z toho slajdy ukazujuce jednotlive diagramy. CCa po page 13 - UML Case Diagram.

UML class diagram

Class diagram

UML class diagram

Relations UML
  • The association link indicates that two classes have a relationship: a student attends a school; a student takes courses.
  • Composition indicates that one class belongs to the other. A polygon is made up of several points. If the polygon is destroyed, so are the points.
  • Aggregation is similar to composition, but is a less rigorous way of grouping things. An order is made up of several products, but a product continues to exist even if the order is destroyed.

Dědičnost nebo kompozice?

UML class diagram: příklad

Zadaní - jednoduchá hra

Tančíky se pohybují po terénu, střílejí po tančíkách ostatních hráčů. Občas z nebe spadne bonus box s nějakým vylepšením (zhoršením) - bonusem. Viditelné objekty se vykreslují, musí mít nějaký grafický a kolizní model.

Navrhněte UML class diagram!

UML class diagram: nápověda

Jaké máme objekty?

UML class diagram: možné řešení

UML diagram

Příklad

Naprogramujte rozhraní tříd z diagramu.

Ak sme na tom dobre s casom, nech si nakoduju rozhranie tried z diagramov. Zvlast zaujimave moze byt porovnanie medzi viacerymi jazykmi - snazit sa, aby pracovali kazda skupinka v inom (rozumnom) jazyku.

UML sequence diagram: příklad

Zadání - získání známky

Jak dostanete známku z tohohle předmětu - předpokládejte, že se nějak dohodne cvičící, vyučující, podívají se do databáze, co jste přes rok dělali a případně zapíší známku do SISu.

Navrhněte UML sequence diagram!

UML sequence diagram: nápověda

Jaké máme objekty?

UML sequence diagram: možné řešení

UML diagram

Dokumentace

Popis rozhraní

Popis rozhraní

Nieco malo porozpravat o to, ako ma vypadat dokumentacia rozhrania. Urcite nieco ako ze dat popis k parametru length, ze to je dlzka nema prilis zmysel.

Popis rozhraní

Pozor - není to všechno!

Nezapomenout na popis celého díla:

V pripade DU2 ide predovsetkym o zdovodnenie navrhu ktore ma popisovat rozhodnutia a logiku riesenia, plus uvidna stranka dokumentacie, kde je napisane, ako to cele 'vlastne chodi'

Ukázka: Java

Příklad (Java/JavaDoc)

					
public
interface List<E> extends Collection<E> {
  /* ... */

  /**
  * Returns the element at the specified position in this list.
  *
  * @param index index of element to return
  * @return the element at the specified position in this list.
  * @throws IndexOutOfBoundsException if the index is out of range
  *         (<tt>index &lt; 0 || index &gt;= size()</tt>).
  */
  E get(int index);

  /* ... */
}
					
				

V Javě se na dokumentaci rozhraní používá nástroj JavaDoc. Programátor zapíše dokumentaci do speciálně označených a formátovaných komentářů, které JavaDoc projde a sestaví z nich dokumentaci v HTML.

Výhodou tohoto přístupu je, že dokumentace je pohromadě s kódem a hrozí tedy menší riziko jejího zastarání (kód bude aktualizován, ale dokumentace ne). Na druhou stranu, dokumentace zabírá v kódu dost místa a ztěžuje tak navigaci. Tento problém dnes naštěstí vcelku uspokojivě řeší různá vývojová prostředí.

Dokumentace v JavaDocu trpí značnou mírou byrokracie – např. kromě popisu metody je potřeba popsat zvlášť i její parametry, návratovou hodnotu a vyhazované výjimky, což udělá ze stručného neformálního komentáře na tři řádky poměrně dlouhý kus textu s redundancemi (zde např. popis metody a její návratové hodnoty). Pokud bychom popis některých prvků vynechali, objeví se ve vygenerované dokumentaci prázdné místo, což není moc pěkné. Příliš vhodné není ani použití HTML pro text komentáře, což vede k nutnosti escapování.

Byrokracie při psaní dokumentace vede k tomu, že psaní dokumentace je otravná činnost a programátoři ji tedy často nevykonávají, nejsou-li k tomu nuceni. Neformální komentáře by přitom možná napsali. Opět zde částečně pomáhají vývojová prostředí, která umí připravit šablonu dokumentačních komentářů.

Ukázka: C#

Příklad (C#/XML)

					
public
interface List<E>: Collection<E> {
  /* ... */

  /// <summary>
  /// Returns the element at the specified position in this list.
  /// </summary>
  ///
  /// <param name="index">index of element to return</param>
  /// <returns>
  /// the element at the specified position in this list.
  /// </returns>
  /// <exceptions name="ArgumentOutOfRangeException">
  /// if the index is out of range
  /// (<c>index &lt; 0 || index &gt;= size()</c>)
  /// </exceptions>
  E get(int index);

  /* ... */
}
					
				
Byť je dokumentace v JavaDocu relativně byrokratická, je alespoň syntakticky stručná. Oproti tomu v C# je dokumentace psána pomocí XML, což je ukázkový příklad špatně zvoleného použití tohoto jazyka. Popravdě řečeno těžko chápu, jak v tom může vůbec někdo dokumentaci psát.

Ukázka: Ruby

Příklad (Ruby/rdoc)

					
class List
  # ...

  # Returns the element at the specified position in this list.
  # The position must be nonnegative and less than size of this
  # list, otherwise +IndexError+ is thrown.
  def get(index)
    # ...
  end

  # ...
end
					
				

Ruby pro dokumentaci používá nástroj rdoc, v principu podobný JavaDocu, ale místo HTML a @-tagů používá jednoduchou wiki-like syntaxi. Dokumentaci umí vygenerovat v HTML a několika dalších formátech.

Ukázka: Python

Příklad (Python/dokumentační řetězce)

					
class List:
  # ...

  def get(index):
    """Returns the element at the specified position in this list.
    The position must be nonnegative and less than size of this
    list, otherwise IndexError is thrown."""
    # ...

# ...
					
				

V Pythonu je dokumentace integrována přímo do jazyka – je-li první výraz uvnitř třídy či metody řetězec, je považován za dokumentační komentář. Dá se k němu dokonce přistupovat v runtime pomocí atributu __doc__.

Je hezky vidět, že stejně jako v kódu, i v dokumentaci mají statické jazyky sklon k byrokracii a dynamické naopak k jisté neformálnosti.