Ce diferență este între includ
și se extind
in caz de utilizare diagrama]1?
Extinderea este utilizat atunci când un caz de utilizare se adaugă pașii de la alta clasa întâi caz de utilizare.
De exemplu, imaginați-vă "Retragere de Numerar" este un caz de utilizare de la un bancomat (ATM). "a Evalua Taxa de" s-ar extinde și Retrage Numerar și descrie condiționat "punct de extensie" care este instanțiat în cazul în care ATM utilizatorul nu't banca la ATM's a deține instituție. Observați că de bază "Retragere de Numerar" caz de utilizare se află pe cont propriu, fără extensie.
Includ este folosit pentru a extrage caz de utilizare fragmente care sunt duplicate în mai multe cazuri de utilizare. Inclus caz de utilizare nu poate sta singur și utilizarea originală caz nu este completă fără a inclus o. Acest lucru ar trebui să fie utilizate cu moderație și numai în cazul în care suprapunerea este semnificativ și există de design (mai degrabă decât printr-o coincidență).
De exemplu, fluxul de evenimente care apare, la fiecare început de ATM caz de utilizare (atunci când utilizatorul pune în lor de card de ATM-uri, intră codul PIN, și este afișat meniul principal) ar fi un candidat bun pentru o includ.
Acest lucru poate fi controversată, dar "include întotdeauna și se extinde uneori sunt" este o concepție greșită foarte frecvente, care are aproape preluat acum ca de facto sens. Aici este o abordare corectă (din punctul meu de vedere, și-a verificat împotriva Jacobson, Fowler, Larmen și 10 alte referințe).
Cheia pentru a Include și extinde caz de utilizare relații este să realizăm că, în comun cu restul de UML, săgeata punctată între cazuri de utilizare este o relație de dependență. Voi folosi termenii de bază', 'inclus' și 'prelungire' pentru a se referi la cazul de utilizare roluri.
O bază de caz de utilizare este dependentă inclus caz de utilizare(s); fără ea/i pe bază de caz de utilizare este incompletă, deoarece incluse caz de utilizare(s) reprezintă sub-secvențe de interacțiune care se pot întâmpla întotdeauna SAU uneori. (Acest lucru este contrar la o concepție greșită despre asta, ceea ce-ti caz de utilizare sugerează întotdeauna se întâmplă în scenariul de bază și, uneori, se întâmplă în supleant curge pur și simplu depinde de ceea ce alegi ca scenariu principal; cazuri de utilizare pot fi ușor de restructurat pentru a reprezenta un flux diferit ca scenariul principal și acest lucru nu ar trebui să conteze).
În cea mai bună practică de un fel de dependență de bază în caz de utilizare știe (și se referă la) incluse caz de utilizare, dar incluse caz de utilizare nu ar trebui să "știe" despre baza de caz de utilizare. Acest lucru este de ce a inclus cazuri de utilizare pot fi: a) baza de cazuri de utilizare în dreptul lor propriu și b) împărtășite de un număr de bază de cazuri de utilizare.
Extinderea caz de utilizare este dependent pe bază de caz de utilizare; ea literalmente se extinde comportamentul descris de bază în caz de utilizare. Baza de caz de utilizare ar trebui să fie pe deplin funcțional caz de utilizare în dreptul său propriu ('includ inclus, desigur), fără extinderea caz de utilizare este o funcționalitate suplimentară.
Extinderea cazuri de utilizare pot fi folosite în mai multe situații:
Un aspect important de luat în considerare este că extinderea caz de utilizare poate introduce comportamentul în mai multe locuri în bază de caz de utilizare este fluxul, nu doar într-un singur loc ca un incluse caz de utilizare nu. Pentru acest motiv, este foarte puțin probabil ca o prelungire caz de utilizare va fi adecvat să se extindă mai mult de o bază de caz de utilizare.
Ca la dependență, extinderea caz de utilizare este dependent pe bază de caz de utilizare și este din nou un-un fel de dependență, adică de utilizare a bazelor de caz nu are nevoie de nici o referire la extinderea caz de utilizare în secvență. Asta nu înseamnă că nu poți demonstra punctele de extensie sau pentru a adăuga un x-ref la extinderea caz de utilizare în altă parte în șablon, dar pe bază de caz de utilizare trebuie să fie capabil să lucreze fără extinderea caz de utilizare.
Sper că am arătat că concepție greșită comună de "include întotdeauna, se extinde uneori sunt" este fie prost sau cel mai simplist. Această versiune, de fapt, face mai mult sens dacă ia în considerare toate aspectele referitoare la direcția de săgeți greșită prezintă – în modelul corect este doar dependență și nu are potențial schimba dacă refactor caz de utilizare cuprins.
Eu folosesc de multe ori acest lucru să ne amintim două:
Meu caz de utilizare: eu mă duc la oraș.
include -> conduce masina
extinde -> a umple cu benzină
"Umple benzina" nu se poate cere în orice moment, dar poate fi, opțional, necesar în funcție de cantitatea de benzină în mașină. "Conduce masina" este o condiție necesară, prin urmare, sunt inclusiv.
Cazurile de utilizare sunt folosite pentru a documenta comportament, de exemplu, răspunsul la această întrebare.
Un comportament se extinde cu încă dacă este în plus, dar nu neapărat parte din comportament, de exemplu, cercetarea răspunsul.
De asemenea, rețineți că cercetarea răspunsul nu't prea are sens dacă nu sunteți încercarea de a răspunde la întrebare.
Un comportament este inclus într-un alt cazul în care este parte, inclusiv de comportament, de exemplu de conectare a stiva de schimb.
Pentru a clarifica, ilustrația este valabil doar daca vrei sa raspunzi aici, în stack overflow :).
Acestea sunt definiții tehnice din UML 2.5 pagini 671-672.
Am subliniat ceea ce cred că sunt puncte importante.
Iese
Un Extinde este o relație dintr-o prelungire UseCase (extensia) pentru o perioadă prelungită UseCase (la extendedCase) care specifică cum și când comportamentul definit în extinderea UseCase poate fi introdus în comportamentul definit în extins UseCase. Extinderea are loc la unul sau mai multe puncte de extensie definite în extins UseCase.
Extinderea este destinat a fi utilizat atunci când există o suplimentare de comportament care ar trebui să fie adăugat, eventual condiționat, la comportamentul definit în unul sau mai multe UseCases.
De extins UseCase este definit independent de extinderea UseCase și este semnificativ independent de prelungire UseCase. Pe de altă parte, extinderea UseCase definește de obicei comportament care nu poate fi neapărat semnificativ de la sine. În schimb, extinderea UseCase definește un set de modulare a comportamentului trepte care imbogatesc o executie a extins UseCase în condiții specifice.
...
Include
Include un DirectedRelationship între două UseCases, indicând faptul că comportamentul inclus UseCase (adaos) este introdus în comportamentul inclusiv UseCase (la includingCase). Este, de asemenea, un fel de NamedElement, astfel încât acesta poate avea un numele în contextul său deține UseCase (la includingCase). Inclusiv UseCase poate depinde de modificările produse de executarea incluse UseCase. Inclus UseCase trebuie să fie disponibile pentru comportamentul inclusiv UseCase să fie complet descrise.
Include relația este destinat a fi utilizat atunci când există părți comune de comportamentul a două sau mai multe UseCases. Asta parte comună este apoi extras separat UseCase, pentru a fi incluse de către toți baza UseCases având această parte în comun. Ca utilizarea principală a Include relație este pentru reutilizare a părților comune, ce este lăsat într-un baza*UseCase este, de obicei, nu este completă în sine* dar depinde de piese de schimb incluse pentru a fi semnificative. Acest lucru este reflectat în direcția de relație, indicând faptul că baza UseCase depinde de plus, dar nu vice-versa.
...
Cred că's important să înțelegem intenția de a include și extinde:
"include relația este destinat pentru reutilizarea comportamentul modelat de un alt caz de utilizare, întrucât extinde relația este destinat pentru adăugarea piese existente cazuri de utilizare , precum pentru modelare optionale serviciile de sistem" (le overgaard și Palmkvist, Cazuri de Utilizare: Modele și Planuri. Addison-Wesley, 2004).
Acest lucru se citește la mine ca:
Include = reutilizare de funcționalitate (de exemplu, cele incluse funcționalitate este folosit sau ar putea fi utilizat și în altă parte în sistem). Include, prin urmare, denotă o dependență pe un alt caz de utilizare.
Se extinde = adăugarea (nu reutilizare) funcționalitatea și de asemenea orice opțional funcționalitate. Se extinde, prin urmare, poate desemna unul din două lucruri:
Rezumat:
Includ = reutilizarea funcționalitate
Se extinde = noi și/sau funcționalitate opțională
Veți mai găsi de multe ori a 2-a utilizare (de exemplu, funcționalitate opțională) de a se extinde, pentru că dacă funcționalitatea nu este opțional, atunci de cele mai multe ori acesta este construit în caz de utilizare în sine, mai degrabă decât să fie o extensie. Cel puțin asta's a fost experienta mea. (Julian C subliniază că uneori vezi 1 de utilizare (de exemplu, adăugarea de noi caracteristici) de a se extinde atunci când un proiect intră's faza 2).
Las's face acest lucru mai clar. Vom folosi "includ" de fiecare dată când vrem să-și exprime faptul că existența unui caz depinde de existența unui alt.
EXEMPLE:
Un utilizator poate face cumpărături on-line numai după ce s-a autentificat în contul său. Cu alte cuvinte, el poate't face orice cumpărături până când el s-a autentificat în contul său.
Un utilizator poate't descarca de pe un site inainte de materiale au fost încărcate. Deci, am putea't descărcați dacă nu a fost încărcat.
Ai înțeles?
L's despre condiționat consecință. Nu pot't face acest lucru dacă anterior am n't face asta.
Cel puțin, cred că acest lucru este modul în care folosim "Include". Eu tind să cred că exemplul cu Laptop și de garanție de la dreapta de mai sus este cel mai convingător!
Pentru a simplifica,
pentru "includ"
un exemplu tipic: între conectare și verificați dacă parola
(login) --- << includ >> ---
pentru procesul de autentificare cu succes, "verificați dacă parola" trebuie să fie de succes, precum și.
pentru "prelungească"
un exemplu tipic: între conectare și arată mesaj de eroare (doar s-a întâmplat uneori)
(login)
"arată mesaj de eroare" doar se întâmplă, uneori, atunci când procesul de autentificare nu a reușit.
Cred că ceea ce msdn explicat aici sunt destul de ușor de înțeles.
Includ [5]
inclusiv Un caz de utilizare apeluri sau invocă incluse unul. Incluziunea este folosit pentru a arăta modul în care un caz de utilizare se rupe în pași mai mici. Inclus caz de utilizare este la arrowhead end.
Extinderea [6]
între Timp, o prelungire caz de utilizare se adaugă obiective și măsuri pentru utilizarea extinsă caz. Extensiile funcționează numai în anumite condiții. Utilizarea extinsă caz este la arrowhead end.
ori de câte ori există premise pentru un usecase apoi,du-te pentru a include.
pentru usecases a fi nevoie de autentificare,în cel mai rău caz scenariu,sau sunt opționale apoi du-te pentru a extinde..
exemplu:pentru un caz de utilizare a solicită admiterea,numirea,rezervare de bilete TREBUIE să COMPLETAȚI UN formular (de înregistrare sau formular de feedback)....acest lucru este în cazul în care includ vine..
exemplu:pentru un caz de utilizare verificarea de autentificare sau înregistrați în contul dvs.,dvs. de autentificare este o necesitate.de asemenea, cred că de cele mai grave scenarii.ca revenirea carte cu bine..NU faci rost de o rezervare..plata facturii DUPĂ DATA SCADENȚEI..acest lucru este în cazul în care extinde vine vorba de a juca...
nu excesivă include și extinde în diagrame.
PĂSTRAȚI-L SIMPLU O PROSTIE!!!
De asemenea, feriți-vă de UML versiunea : o's a fost o lungă perioadă de timp acum, că << folosește >> și << include >> au fost înlocuite cu << includ >> și << transmite >> de << extind >> ȘI generalizare. Pentru mine asta's de multe ori înșelătoare punct : ca un exemplu de Stephanie's post și link-ul este despre o versiune veche :
atunci Când plata pentru un element, puteți alege să plătiți la livrare, plata prin paypal sau plata prin card. Toate acestea sunt alternative la "plăti pentru produs" caz de utilizare. Eu pot alege oricare dintre aceste opțiuni, în funcție de preferința mea.
În fapt, nu există nicio alternativă la "plăti pentru produs" ! În zilele noastre UML, "plata la livrare" este o extinde, și "plata prin paypal"/"plata prin card" sunt specializari.
"Include" este folosit pentru a prelungi durata de utilizare de bază de caz și este o condiție și anume incluse caz de utilizare a rula trebuie să ruleze cu succes pentru a finaliza utilizare de bază.
de exemplu Ia în considerare un caz de Servicii de e-Mail, aici "Login" este un incluse caz de utilizare care trebuie să fi rulat pentru a trimite un e-Mail de Bază (caz de utilizare)
"Exclude" pe de altă parte este opțională caz de utilizare care extinde baza de caz de utilizare, de utilizare a bazelor de caz, poate rula cu succes, chiar și fără invocarea/asteptare extinderea caz de utilizare.
de exemplu Considera "Laptop Achiziționa" ca bază de caz de utilizare și "Garanție Suplimentară" ca extinderea caz de utilizare, aici puteți rula bază de caz de utilizare "Laptop Achiziționa" chiar și fără a lua suplimentare de garanție.
Aceasta este o mare resursa cu mare explicație: Ceea ce se includ în caz de utilizare? Ce se Extinde în caz de utilizare?
Extinderea caz de utilizare definește de obicei opțional comportament. Este independent de extinderea caz de utilizare
Include folosit pentru a extrage piese comune de comportamente de două sau mai multe cazuri de utilizare
Diagrama Elemente
Actori: de Asemenea, menționată ca Roluri. Numele și stereotip de un actor poate fi schimbat în Proprietățile sale tab.
Moștenirea: Perfecționarea relațiilor dintre actori. Această relație poate transporta un nume și un stereotip.
Cazuri de utilizare: Acestea pot avea Puncte de Extensie.
Puncte de extensie: Aceasta definește o locație în cazul în care o extensie pot fi adăugate.
Asociații: Între roluri și cazuri de utilizare. Este util să dea asociații vorbind nume.
Dependențe: Între cazuri de utilizare. Dependențele de multe ori au un stereotip pentru a defini mai bine rolul de dependență. Pentru a selecta un stereotip, selectați în dependență de schema sau panoul de Navigare, apoi schimba stereotipul în fila Properties. Există două tipuri de dependențe: <<extind>> " și " <<includ>>
, pentru care Poseidon oferă butoane proprii (a se vedea mai jos).
Extinde relația: O uni-directional relația dintre două cazuri de utilizare. Un extinde relația dintre caz de utilizare B și Un caz de utilizare înseamnă că comportamentul B pot fi incluse în A.
Include relația: O uni-directional relația dintre două cazuri de utilizare. O astfel de relație între cazuri de utilizare a și B înseamnă, că comportamentul B este întotdeauna inclus în A.
Sistem de frontiera: sistemul frontieră este, de fapt, nu s-a implementat ca element de model în Poseidon pentru UML. Puteți trage pur și simplu un dreptunghi, trimite-l la fundal și de a folosi ca sistem de frontiera de a pune toate corespunzătoare cazuri de utilizare în interiorul dreptunghiului.
Ambele <includ> " și " <extind>
sunt dependente de clasa de baza dar <extind>
este opțională, de exemplu, este derivată din clasa de bază, dar, în punctul de utilizatori de vedere acesta poate fi folosit sau nu poate fi utilizat.
<includ>
este încorporată în clasa de bază și anume, este compulsary de a utiliza `
de exemplu:
În BANCOMAT construcție (în funcție de utilizatori, punctul de vedere):
1: Retragere,depunere de numerar și verificarea contului vine sub `
2: "Introduceți pin-ul, introducerea cardului, de ștergere de carte" astea sunt lucruri care vin de sub `
Iese este utilizat atunci când vei înțelege că ai caz de utilizare este mult prea complex. Deci extract complex de măsuri în propria lor "extensia" cazuri de utilizare.
Include este utilizat atunci când veți vedea comportament comun în două cazuri de utilizare. Deci abstracte comune de comportament într-o separat "rezumat" caz de utilizare.
(ref: Jeffrey L. Whitten, Lonnie D. Bentley, Sisteme de analiză & metode de proiectare, McGraw-Hill Irwin, 2007)
Eu nu't recomanda utilizarea de acest lucru să ne amintim două:
Meu caz de utilizare: eu mă duc la oraș.
include -> conduce masina
extinde -> a umple cu benzină
Aș prefera să utilizați: Meu caz de utilizare: eu mă duc la oraș.
extinde -> conducere auto
include -> a umple cu benzină
Am învățat că extinde relația continuă comportamentul de o clasa de baza. Clasa de bază funcționalități trebuie să fie acolo. Include relație pe de altă parte, sunt asemănătoare cu funcții care poate fi numit. Poate este în bold.
Acest lucru poate fi văzut de la agilemodeling Reutilizare în Caz de Utilizare de Modele
La includ relația permite un caz de utilizare să includă pași de un alt caz de utilizare.
De exemplu, să presupunem că aveți un Cont Amazon și doriți să verificați pe un ordin, ei bine, este imposibil să verificați pe ordinea fără logare în contul dvs.. Deci, fluxul de evenimente ar dori așa...
La extinderea relația este utilizat pentru a adăuga un pas suplimentar pentru fluxul de un caz de utilizare, care este de obicei un pas opțional...
Imaginați-vă că suntem încă mai vorbesc despre contul amazon. Să presupunem cazul de bază este de Ordine și extinderea caz de utilizare este Amazon Prime. Utilizatorul poate alege pentru a comanda doar elementul cu regularitate, sau, utilizatorul are opțiunea de a selecta Amazon Prime, care asigura comanda va ajunge mai repede la costuri mai mari.
Cu toate acestea, rețineți că utilizatorul nu trebuie să selectați Amazon Prime, aceasta este doar o opțiune, ei pot alege să ignore acest caz de utilizare.
Diferența între cele două a fost explicat aici. Dar ceea ce nu a fost explicat este faptul că <<includ>> " și " <<extind>>
ar trebui pur și simplu să nu fie folosite deloc.
Dacă ai citit Bittner/Spence știi că cazurile de utilizare sunt pe cale de sinteza, nu analiza. O re-utilizarea de cazuri de utilizare este un nonsens. Aceasta arată în mod clar că te-ai tăiat domeniu în mod eronat. Valoarea adăugată trebuie să fie unic în sine. Numai re-utilizarea de valoare adăugată știu este franciza. Deci, dacă sunteți în afaceri burger, frumos. Dar peste tot sarcina ta ca BA este de a încerca să găsească un USP. Și care trebuie să fie prezentate în bună cazuri de utilizare.
Ori de câte ori văd oameni care folosesc unul dintre aceste relații este atunci când încearcă să facă descompunere funcțională. Și că's simplu greșit.
Pentru a pus-o simplu: dacă puteți răspunde la șeful tău, fără ezitare "am făcut ..." apoi "..." este cazul dumneavoastră de utilizare de când te-ai bani pentru a face asta. (Care va face, de asemenea, clar că "login" nu este un caz de utilizare la toate.)
În acest sens, găsirea de sine statator cazuri de utilizare, care sunt incluse sau de a prelungi alte cazuri de utilizare este foarte puțin probabil. În cele din urmă, puteți utiliza `<
Îmi place să cred că "include" ca o condiție necesară/acompaniament de bază caz de utilizare. Acest lucru înseamnă că la baza utilizării caz nu poate fi considerată completă fără utilizarea de caz include. Am'll da exemplu de un e-commerce site-ul care vinde articole pentru clienți. Nu's nici un fel te pot plăti pentru un element fără ca mai întâi selectarea elementului respectiv și pune-l în coș. Acest lucru implică faptul că în caz de utilizare "Plăti pentru Produs" include "selectați elementul".
Există diferite utilizări ale extinde, dar îmi place să cred că de ea ca o alternativă care poate sau nu poate fi folosit. De exemplu - tot pe e-commerce site-ul. Atunci când plata pentru un element, puteți alege să plătiți la livrare, plata prin paypal sau plata prin card. Toate acestea sunt alternative la "plăti pentru produs" caz de utilizare. Eu pot alege oricare dintre aceste opțiuni, în funcție de preferința mea.
Pentru mai multă claritate și regulile privind cazuri de utilizare, citiți articolul meu de aici:
http://businessanalystlearnings.com/ba-techniques/2013/2/20/use-case-diagram-the-basics