4 - Skládání vs. Dědičnost, implementace objektového návrhu

Teorie

  • Mělká / hluboká kopie
  • Diskutujte níže uvedený objektový návrh s příslušnou implementací. Jedná se o kvalitní objektový návrh? Pokud ne, jaká jsou slabá místa tohoto návrhu?

import java.util.List;
 
public class Sorting {
 
    public List sort(List listToSort){
        // Sorting algorithm implementation
        return listToSort;
    }
}
 
public class DynamicSet extends Sorting{
 
    // DynamicSet implementation
}
 
public class StaticSet extends Sorting {
 
    // Static set implementation
}
GIT: https://gitlab.fel.cvut.cz/B211_B6B36OMO/seminar/-/tree/master/cv4_compositionVsInterface

  • Upravte objektový návrh a jeho implementaci.
  • Příklad špatného návrhu z praxe: Java, vazba mezi Stackem a Vectorem

(Pro zájemce: https://stackoverflow.com/questions/2922257/what-are-the-negative-aspects-of-java-class-stack-inheriting-from-vector/)

Implementace objektového návrhu z minulého cvičení

  • Implementujte objektový návrh z minulého cvičení (podobné diagramu níže):

  • Výsledný objektový návrh bude podporovat následující uživatelské scénáře:

1. Práce s uživatelským účtem

1.1 Zájemce si chce založit na Blogu administrátorský nebo uživatelský (čtenářský) účet, pro vytvoření poskytne uživatelské jméno a heslo. Zvolené uživatelské jméno je unikátní, účet je v Blogu úspěšně založen.

1.2 Zájemce si chce založit na Blogu administrátorský nebo uživatelský (čtenářský) účet, pro vytvoření poskytne uživatelské jméno a heslo. Zvolené uživatelské jméno není unikátní, účet v Blogu není založen.

1.3 Uživatel se do blogu přihlásí pomocí správného uživatelského jména a hesla. Blog vrací referenci na daný uživatelský účet, pomocí kterého může uživatel s blogem pracovat.

1.4 Uživatel se do blogu přihlásí pomocí špatného uživatelského jména. Blog vypíše varování a nevrátí žádný uživatelský účet.

1.5 Uživatel se do blogu přihlásí pomocí správného uživatelského jména a špatného hesla. Blog vypíše varování a nevrátí žádný uživatelský účet.

1.6 Administrátor na základě uživatelského jména vyhledá čtenářský účet, který zablokuje.

1.7 Uživatel, jehož uživatelský účet je zablokován, se přihlásí do blogu pomocí správného uživatelského jména a hesla. Blog vypíše varování a nevrátí žádný uživatelský účet.


2. Práce s tématy

2.1 Uživatel si zobrazí seznam všech dostupných témat. Témata se zobrazují v následujícím formátu: [název]: [description]

2.2 Administrátor vytvoří nové téma s vyplněným jménem a popisem. Název tématu je unikátní, blog založí nové téma.

2.3 Administrátor vytvoří nové téma s vyplněným jménem a popisem. Název tématu je duplicitní, blog vypíše varování a nezaloží nové téma.


3. Práce s články

3.1 Administrátor vytvoří nový článek dvěma způsoby: interaktivní vyplnění nadpisu a obsahu, nebo nadpis a obsah je předán v parametru metody pro vytváření. Název článku je unikátní, blog založí nový článek. Po dokončení se článek nachází ve stavu Rozpracovaný.

3.2 Administrátor vytvoří nový článek dvěma způsoby: interaktivní vyplnění nadpisu a obsahu, nebo nadpis a obsah je předán v parametru metody pro vytváření. Název článku je duplicitní, blog nový článek nevytvoří.

3.3 Administrátor vyhledá existující článek pomocí jeho nadpisu. Blog vrací referenci na hledaný objekt.

3.4 Administrátor vyhledá neexistující článek pomocí jeho nadpisu. Blog vypíše varování a vrací null.

3.5 Administrátor publikuje vyhledaný článek, u článku dojde ke změně jeho stavu na Zveřejněný.

3.6 Administrátor prohlásí článek za zastaralý, u článku dojde ke změně jeho stavu na Zastaralý.

3.7 Článek lze registrovat pod určité téma. K článku je možné přiřadit více témat.


4. Práce s blogem

4.1 Uživatel si zobrazí články blogu s možností filtrovat podle jména tématu, ke kterému se váží. Pro zobrazení témat slouží dashboard. Dashboard zobrazuje pouze publikované články.

4.2 Uživatel má možnost editovat článek pomocí editoru. Editace je interaktivní, uživatel si může vybrat, zda si přeje editovat nadpis nebo obsah článku.


courses/b6b36omo/labs/lab042017.txt · Last modified: 2023/10/25 18:20 by masatma1