Arasındaki fark nedir include
ve extend
bir de kullanma durumu diyagramı ?
Arasındaki fark nedir include
ve extend
bir de kullanma durumu diyagramı ?
Yanıtlar:
Genişlet , bir kullanım senaryosu başka bir birinci sınıf kullanım senaryosuna adımlar eklediğinde kullanılır.
Örneğin, "Para Çekme" nin Otomatik Para Çekme Makinesi (ATM) için bir kullanım durumu olduğunu düşünün. "Değerlendirme Ücreti", Para Çekme Parasını uzatacak ve ATM kullanıcısı ATM'nin sahibi olduğu kurumda banka kullanmadığında somutlaştırılan koşullu "uzatma noktasını" açıklayacaktır. Temel "Para Çekme" kullanım durumunun, uzantı olmadan kendi başına durduğuna dikkat edin.
Include , birden çok kullanım durumunda çoğaltılan kullanım örneği parçalarını çıkarmak için kullanılır . Birlikte verilen kullanım durumu tek başına duramaz ve dahil edilen kullanım kutusu olmadan orijinal kullanım durumu tamamlanmaz. Bu çok az kullanılmalıdır ve sadece çoğaltmanın önemli olduğu ve tasarımla (tesadüf yerine) var olduğu durumlarda kullanılmalıdır.
Örneğin, her ATM kullanım durumunun başında gerçekleşen olayların akışı (kullanıcı ATM kartını koyduğunda, PIN kodunu girdiğinde ve ana menü gösterildiğinde) dahil etme için iyi bir aday olacaktır.
Include is used to extract use case fragments that are duplicated in multiple use cases
Ne bu adımda ayıklanır: puts in their ATM card, enters their PIN, and is shown the main menu
? Teşekkürler
Bu çekişmeli olabilir ama “içerme her zaman vardır ve bazen uzanır” fiili anlam olarak neredeyse üstesinden gelen çok yaygın bir yanlış anlamadır. İşte doğru bir yaklaşım (benim görüşüme göre ve Jacobson, Fowler, Larmen ve diğer 10 referansa karşı kontrol edildi).
Kullanım durumu ilişkilerini dahil etmenin ve genişletmenin anahtarı, UML'nin geri kalanında olduğu gibi, kullanım örnekleri arasındaki noktalı okun bağımlılık ilişkisi olduğunun farkına varmaktır. Kullanım durumu rollerine atıfta bulunmak için 'temel', 'dahil' ve 'genişletme' terimlerini kullanacağım.
Temel kullanım durumu, birlikte verilen kullanım durumlarına bağlıdır; bunlar olmadan, temel kullanım durumu eksiktir, çünkü dahil edilen kullanım durumları her zaman VEYA bazen gerçekleşebilecek etkileşimin alt dizilerini temsil eder. (Bu, bununla ilgili popüler bir yanlış anlamaya aykırıdır, kullanım durumunuzun önerdiği şey ana senaryoda her zaman olur ve bazen alternatif akışlarda gerçekleşir, yalnızca ana senaryo olarak neyi seçtiğinize bağlıdır; kullanım senaryoları farklı bir akışı temsil etmek için kolayca yeniden yapılandırılabilir ana senaryo olarak ve bu önemli olmamalıdır).
Tek yönlü bağımlılığın en iyi uygulamasında, temel kullanım durumu dahil edilen kullanım durumunu bilir (ve buna atıfta bulunur), ancak dahil edilen kullanım durumu temel kullanım durumu hakkında 'bilmemelidir'. Bu nedenle, dahil edilen kullanım durumları şunlar olabilir: a) kendi başlarına temel kullanım durumları ve b) birkaç temel kullanım vakası tarafından paylaşılır.
Genişleyen kullanım durumu, temel kullanım durumuna bağlıdır; temel kullanım durumu tarafından açıklanan davranışı tam anlamıyla genişletir. Temel kullanım durumu, genişletilmiş kullanım durumunun ek işlevselliği olmadan, kendi başına tamamen işlevsel bir kullanım durumu olmalıdır ('dahil olanlar da dahil).
Kullanım durumlarını genişletmek çeşitli durumlarda kullanılabilir:
Dikkate alınması gereken önemli bir husus, genişletilen kullanım durumunun, dahil edilen kullanım durumunun yaptığı gibi tek bir yerde değil, taban kullanım durumunun akışındaki çeşitli yerlere davranış ekleyebilmesidir. Bu nedenle, genişleyen bir kullanım durumunun, birden fazla temel kullanım durumunun genişletilmesi için uygun olması muhtemel değildir.
Bağımlılık ile ilgili olarak, genişleyen kullanım durumu, taban kullanım durumuna bağlıdır ve yine tek yönlü bir bağımlılıktır, yani taban kullanım durumu, sekanstaki genişleyen kullanım durumuna herhangi bir referans gerektirmez. Bu, uzantı noktalarını gösteremeyeceğiniz veya şablonun başka bir yerinde genişletilen kullanım durumuna bir x-ref ekleyemeyeceğiniz anlamına gelmez, ancak temel kullanım durumu, genişleyen kullanım durumu olmadan çalışabilmelidir.
Umarım “içerme her zaman vardır, bazen uzanır” gibi ortak yanlış anlama ya yanlış ya da en iyi ihtimalle basittir. Bu kavram, yanlış kavramın sunduğu okların yönlülüğü ile ilgili tüm konuları düşünürseniz daha mantıklıdır - doğru modelde sadece bağımlılıktır ve kullanım senaryosu içeriğini yeniden düzenlerseniz potansiyel olarak değişmez.
Bunu sık sık ikisini hatırlamak için kullanıyorum:
Benim kullanım durumum: Şehre gidiyorum.
içerir -> arabayı sür
uzanır -> benzin doldurun
"Benzini doldurun" her zaman gerekli olmayabilir, ancak isteğe bağlı olarak araçta kalan benzin miktarına göre gerekli olabilir. "Arabayı sür" bir ön koşul.
Davranışları belgelemek için kullanım örnekleri kullanılır, örneğin bu soruyu cevaplayın.
Bir davranış, davranışa ek olmakla birlikte zorunlu olmamakla birlikte başka bir şeyi genişletir, örneğin cevabı araştırın.
Ayrıca, soruyu cevaplamaya çalışmıyorsanız cevabı araştırmanın pek mantıklı olmadığını unutmayın.
Davranış, dahil edilen davranışın bir parçasıysa başka bir davranışa dahil edilir, örn. Yığın değişimine giriş.
Açıklığa kavuşturmak için, illüstrasyon yalnızca yığın taşmasıyla burada cevap vermek istiyorsanız :) doğrudur.
Bunlar UML 2.5 sayfa 671-672'nin teknik tanımlarıdır .
Önemli noktalar olduğunu düşündüğümü vurguladım.
Uzattı
Genişlet, genişleyen UseCase'de (uzantı) , genişletilmiş UseCase'de tanımlanan davranışın genişletilmiş UseCase'de tanımlanan davranışa nasıl ve ne zaman eklenebileceğini belirten genişletilmiş UseCase'e (extendedCase) bir ilişkidir. Uzantı, genişletilmiş UseCase öğesinde tanımlanan bir veya daha fazla belirli uzantı noktasında gerçekleşir.
Genişletme, bir veya daha fazla UseCases içinde tanımlanan davranışa , muhtemelen koşullu olarak eklenmesi gereken bazı ek davranışlar olduğunda kullanılmak üzere tasarlanmıştır .
Genişletilmiş Usecase uzanan USECASE bağımsız tanımlandığı gibidir ve bağımsız olarak uzanan USECASE anlamlı olan . Öte yandan, genişleyen UseCase tipik olarak kendi başına anlamlı olması gerekmeyen davranışları tanımlar . Bunun yerine, genişleyen UseCase, belirli koşullar altında genişletilmiş UseCase'in yürütülmesini artıran bir dizi modüler davranış artışı tanımlar.
...
İçerir
Include, iki UseCas arasındaki DirectedRelationship olup, dahil edilen UseCase (ekleme) davranışının dahil edilen UseCase ( includeCase) davranışına eklendiğini gösterir . Aynı zamanda bir tür NamedElement olup kendi UseCase'i (includeCase) sahip olma bağlamında bir ada sahip olabilir. Dahil edilen UseCase, birlikte verilen UseCase çalıştırılarak üretilen değişikliklere bağlı olabilir. Dahil edilen UseCase'in davranışının tam olarak açıklanması için birlikte verilen UseCase kullanılabilir olmalıdır.
Include ilişkisi, iki veya daha fazla UseCases davranışının ortak bölümleri olduğunda kullanılmak üzere tasarlanmıştır. Bu ortak kısım daha sonra, bu kısmı ortak olan tüm temel UseCas'ler tarafından dahil edilmek üzere ayrı bir UseCase'e ekstrakte edilir . Include ilişkisinin birincil kullanımı ortak parçaların yeniden kullanılması içindir, bir temelde kalan UseCase genellikle kendi içinde tam değildir, ancak dahil edilen parçaların anlamlı olmasına bağlıdır. Bu ilişki yönüne yansır, bu da temel UseCase öğesinin eklemeye bağlı olduğunu, bunun tersi olmadığını gösterir.
...
Bence içerme ve genişletme niyetini anlamak önemlidir:
"İlişkisi için tasarlanmıştır dahil yeniden tarafından modellenen davranışı başka bir kullanım durumunda uzatmak ilişki içindir, oysa ekleyerek kullanım durumları varolan parçaları yanı sıra modellik opsiyonel Kullanım Durumları sistem hizmetlerini" (Overgaard ve Palmkvist,:. Desenleri ve Blueprints Addison -Wesley, 2004).
Bu bana şöyle diyor:
Include = işlevselliğin yeniden kullanımı (yani dahil edilen işlevsellik kullanılır veya sistemin başka bir yerinde kullanılabilir). Bu nedenle ekle, başka bir kullanım durumuna bağımlı olduğunu gösterir.
= Uzatır ekleme (yeniden kullanma) işlevselliği ve aynı zamanda herhangi bir isteğe bağlı özelliğe. Bu nedenle genişletmeler iki şeyden birini gösterebilir:
1. bir kullanım senaryosuna yeni özellikler / yetenekler ekleme (isteğe bağlı veya değil)
2. isteğe bağlı tüm kullanım örnekleri (mevcut veya değil).
Özet:
Include = işlevselliğin yeniden kullanımı
Extends = yeni ve / veya isteğe bağlı işlevsellik
Çoğu zaman genişletmelerin 2. kullanımını (yani isteğe bağlı işlevsellik) bulacaksınız, çünkü işlevsellik isteğe bağlı değilse, çoğu zaman bir uzantı olmak yerine kullanım senaryosunun içine yerleştirilir. En azından bu benim deneyimimdi. (Julian C, bazen bir proje 2. aşamaya girdiğinde genişletmelerin 1. kullanımını (yani yeni özellikler ekleme) gördüğünüze dikkat çeker).
Basitleştirmek için,
için include
tipik bir örnek: giriş ve doğrulama şifresi arasında
(giriş) --- << dahil >> --- > (şifreyi doğrula)
oturum açma işleminin başarılı olması için "parolayı doğrula" nın da başarılı olması gerekir.
için extend
tipik bir örnek: giriş ve gösteri hata mesajı arasında (sadece bazen oldu)
(giriş) < --- << genişlet >> --- (hata mesajını göster)
"hata mesajını göster" yalnızca oturum açma işlemi başarısız olduğunda gerçekleşir.
Bence msdn'nin burada anlattıklarını anlamak oldukça kolay.
Dahil et [5]
Dahil olan bir kullanım senaryosu, dahil olanı çağırır veya çağırır. Ekleme, kullanım senaryosunun daha küçük adımlara nasıl girdiğini göstermek için kullanılır. Birlikte verilen kullanım durumu ok ucu ucundadır.
Genişlet [6]
Bu arada, genişleyen bir kullanım durumu, genişletilmiş kullanım durumuna hedefler ve adımlar ekler. Uzantılar sadece belirli koşullar altında çalışır. Genişletilmiş kullanım durumu ok ucu ucundadır.
Bunu daha netleştirelim. Kullanırızinclude
Bir vakanın varlığının diğerinin varlığına bağlı olduğu gerçeğini ifade etmek istediğimiz her seferinde .
ÖRNEKLER:
Bir kullanıcı, yalnızca hesabına giriş yaptıktan sonra çevrimiçi alışveriş yapabilir. Başka bir deyişle, hesabına giriş yapana kadar alışveriş yapamaz.
Malzeme yüklenmeden önce bir kullanıcı siteden indiremez. Bu yüzden, hiçbir şey yüklenmediyse indiremiyorum.
Anladın mı?
Koşullu sonuçlarla ilgilidir. Daha önce yapmamışsam bunu yapamam .
En azından, bu doğru şekilde kullandığımızı düşünüyorum Include
. Dizüstü bilgisayar örneğini düşünmeye meyilliyim ve garanti yukarıdaki en inandırıcı!
ne zaman bir usecase için önkoşullar varsa, include'a gidin.
kimlik doğrulaması, en kötü durum senaryosu olan veya isteğe bağlı olan kullanımlar için uzatın.
örnek: giriş, randevu, bilet rezervasyonu için bir kullanım durumunda bir form (kayıt veya geri bildirim formu) doldurmalısınız ...
örnek: girişinizi doğrulamak veya hesabınızda oturum açmak için bir kullanım örneği için, kimlik doğrulamanız bir zorunluluktur.Ayrıca, en kötü durum senaryolarını düşünün. uzatma oynamaya geliyor ...
Şemaları aşırı kullanmayın ve çizmeyin.
BASİT SILLY TUTUN!
Ayrıca UML sürümüne dikkat edin: << kullanım >> ve << içerikler >> ile << dahil >> ile değiştirildi ve << genişletme >> ile << genişletme >> VE genelleme uzun zamandır oldu .
Benim için bu genellikle yanıltıcı bir nokta: örnek olarak Stephanie'nin gönderisi ve bağlantısı eski bir versiyonla ilgili:
Bir ürün için ödeme yaparken, teslimatta ödeme yapmayı, paypal kullanarak ödeme yapmayı veya kartla ödeme yapmayı seçebilirsiniz. Bunların hepsi "öğe için ödeme" kullanım durumuna alternatiflerdir. Tercihime bağlı olarak bu seçeneklerden herhangi birini seçebilirim.
Aslında "öğe için ödeme" gerçekten alternatifi yok! Günümüzde UML'de, "teslimatta ödeme" bir uzatmadır ve "paypal kullanarak ödeme" / "kartla ödeme" uzmanlık alanlarıdır.
"Dahil et" temel kullanım durumunu genişletmek için kullanılır ve bu bir zorunluluk koşuludur, yani dahil kullanım durumu çalışması temel kullanımı tamamlamak için başarıyla çalıştırılmalıdır.
Örneğin, bir E-posta Hizmeti durumu düşünün, burada "Giriş", bir E-posta göndermek için çalıştırılması gereken bir kullanım durumudur (Temel kullanım durumu)
"Hariç tut" ise, temel kullanım durumunu genişleten isteğe bağlı kullanım durumudur, taban kullanım durumu, genişleyen kullanım durumunu çağırmadan / çağırmadan bile başarıyla çalışabilir.
Örneğin, temel kullanım durumu olarak "Dizüstü Bilgisayar Satın Alma" ve genişletilmiş kullanım durumu olarak "Ek Garanti" olarak düşünün, burada ek garanti almadan bile temel kullanım durumunu "Dizüstü Satın Alma" çalıştırabilirsiniz.
Login
hiç bir kullanım durumu değildir. Bir ön koşulu yerine getirmek için gerçekleştirilen bir işlevdir.
Bu harika bir açıklama ile harika bir kaynak: Kullanım durumunda içerme nedir? Kullanımda genişletme durumu nedir?
Kullanım senaryosunu genişletmek genellikle isteğe bağlı davranışı tanımlar. Bu ise , bağımsız olarak uzanan senaryosunun
İki veya daha fazla kullanım örneğinin davranışlarının ortak bölümlerini çıkarmak için kullanılanları dahil et
Diyagram Elemanları
Aktörler: Roller olarak da adlandırılır. Bir aktörün adı ve klişesi Özellikler sekmesinden değiştirilebilir.
Kalıtım: Aktörler arasındaki ayrıntılandırma ilişkileri. Bu ilişki bir isim ve bir klişe taşıyabilir.
Kullanım örnekleri: Bunların Uzatma Noktaları olabilir.
Uzantı Noktaları: Bu, uzantının eklenebileceği bir konumu tanımlar.
Dernekler: Roller ve kullanım örnekleri arasında. Derneklere konuşma isimleri vermek faydalıdır.
Bağımlılıklar: Kullanım durumları arasında. Bağımlılıkların genellikle bağımlılığın rolünü daha iyi tanımlamak için bir klişesi vardır. Bir stereotip seçmek için, diyagramdan veya Gezinme bölmesinden bağımlılığı seçin, ardından Özellikler sekmesindeki stereotipi değiştirin. İki özel bağımlılık vardır: <<extend>>
ve <<include>>
bunun için Poseidon'un kendi düğmeleri sunduğu (aşağıya bakın).
İlişkiyi genişlet: İki kullanım durumu arasında tek yönlü bir ilişki. Kullanım durumu B ve kullanım durumu A arasındaki genişletilmiş ilişki, B'nin davranışının A'ya dahil edilebileceği anlamına gelir.
İlişkiyi dahil et: İki kullanım durumu arasında tek yönlü bir ilişki. A ve B kullanım durumları arasındaki böyle bir ilişki, B'nin davranışının daima A'ya dahil olduğu anlamına gelir.
Sistem sınırı: Sistem sınırı aslında UML için Poseidon'da model öğesi olarak uygulanmamıştır. Basitçe bir dikdörtgen çizebilir, arka plana gönderebilir ve ilgili tüm kullanım örneklerini dikdörtgenin içine koyarak sistem kenarlığı olarak kullanabilirsiniz.
Her ikisi de <include>
ve <extend>
temel sınıfa bağlıdır ancak<extend>
isteğe bağlı bir deyişle, bu temel sınıfından ama kullanıcı noktasında elde edilen bu kullanılabilir veya kullanılmayabilir görüntülemek edilir.
<include>
baz sınıfına dahil edilir, yani kullanılması zorunludur <include>
kullanım durumunuzda aksi takdirde eksik olarak kabul edilir.
Örneğin:
ATM makine yapımında (kullanıcıların bakış açısına göre):
1: Para çekme, para yatırma ve hesabı kontrol etme <extend>
, kullanıcının para çekme ya da para yatırma ya da kontrol etme işlemine bağlı olduğuna bağlıdır. Bunlar kullanıcının yaptığı isteğe bağlı şeylerdir.
2: "Pimi girin, kartı yerleştirin, kartı çıkarın" bunlar <include>
, kullanıcının bir kart yerleştirmesi ve doğrulama için geçerli bir pim girmesi gerektiği için girmesi gereken şeylerdir .
İkisini hatırlamak için bunun kullanılmasını önermiyorum:
Benim kullanım durumum: Şehre gidiyorum.
içerir -> arabayı sür
uzanır -> benzin doldurun
Kullanmayı tercih ederim: Kullanım durumum: Şehre gidiyorum.
uzanır -> arabayı sürmek
içerir -> benzin doldurun
Uzamış ilişkinin bir temel sınıfın davranışını sürdürdüğü öğretildi. Temel sınıf işlevleri orada olmalıdır. Diğer taraftan içerme ilişkisi, çağrılabilecek işlevlere benzer. Mayıs kalın yazı tipindedir.
Bu da görüleceği Kullanımı-Vaka Modellerinde Yeniden kullanım agilemodeling
Her ikisi arasındaki fark burada açıklanmıştır. Ama ne açıkladı edilmemiştir gerçek olduğunu <<include>>
ve<<extend>>
sadece hiç kullanılmamalıdır.
Bittner / Spence'ı okursanız kullanım örneklerinin analizle değil sentezle ilgili olduğunu bilirsiniz. Kullanım durumlarının yeniden kullanılması saçmalıktır. Alanınızı yanlış bir şekilde kestiğinizi açıkça gösteriyor. Katma değer kendi başına benzersiz olmalıdır. Bildiğim katma değerin tek kullanımı franchise. Eğer burger işinde iseniz, güzel. Ama BA olarak göreviniz her yerde bir USP bulmaya çalışmak. Ve bu iyi kullanım durumlarında sunulmalıdır.
İnsanları bu ilişkilerden birini kullanarak her gördüğümde, fonksiyonel ayrışma yapmaya çalıştıkları zamandır. Ve bu tamamen yanlış.
Basitçe söylemek gerekirse: Patronunuza tereddüt etmeden cevap verebilirseniz "Ben yaptım ..." o zaman "..." sizin kullanım durumunuzdur. (Bu da "giriş" in bir kullanım durumu olmadığını açıkça gösterecektir.)
Bu bağlamda, diğer kullanım durumlarını içeren veya genişleten kendi kendine kullanım durumlarını bulmak çok düşük bir ihtimaldir. Sonunda <<extend>>
sisteminizin opsiyonelliğini göstermek için kullanabilirsiniz , yani bazı lisanslar için kullanım durumlarını dahil etmeyi veya bunları atlamayı sağlayan bazı lisanslama şeması. Ama başka - sadece kaçının.
Kullanım durumunuzun çok karmaşık olduğunu anladığınızda Extends kullanılır. Böylece karmaşık adımları kendi "uzantı" kullanım durumlarına çıkarırsınız.
İçerir , iki kullanım durumunda ortak davranış gördüğünüzde kullanılır. Böylece ortak davranışı ayrı bir "soyut" kullanım senaryosuna özetlersiniz.
(ref: Jeffrey L. Whitten, Lonnie D. Bentley, Sistem analizi ve tasarım yöntemleri, McGraw-Hill / Irwin, 2007)
Dahil ilişki bir kullanım durumu başka bir kullanım durumunda adımlarını eklemenize olanak verir.
Örneğin, bir Amazon Hesabınız olduğunu ve bir siparişi kontrol etmek istediğinizi varsayalım, ilk önce hesabınıza giriş yapmadan siparişi kontrol etmek imkansızdır. Yani olayların akışı böyle olur ...
Uzatmak ilişki genellikle isteğe bağlı bir adımdır kullanma dosyası akımına ilave bir adım, eklemek için kullanılır ...
Hala Amazon hesabınızdan bahsettiğimizi düşünün. Temel durumun Order ve uzantı kullanım durumunun Amazon Prime olduğunu varsayalım . Kullanıcı sadece öğeyi düzenli olarak sipariş etmeyi seçebilir veya kullanıcının siparişinin daha yüksek maliyetle daha hızlı ulaşmasını sağlayan Amazon Prime'ı seçme seçeneği vardır.
Ancak, kullanıcının Amazon Prime'ı seçmek zorunda olmadığını unutmayın, bu sadece bir seçenektir, bu kullanım durumunu görmezden gelmeyi seçebilirler.
Amazon Prime
? Bir fiil bile içermiyor.
"İçerir" i, temel kullanım durumunun gerekli bir ön koşulu / refakatçisi olarak düşünmeyi seviyorum. Bu, temel kullanım durumunun, içerdiği kullanım durumu olmadan tamamlanamayacağı anlamına gelir. Müşterilere ürün satan bir e-ticaret sitesi örneği vereceğim. Bir öğeyi ilk önce o öğeyi seçip sepete koymadan ödeyemezsiniz. Bu, "Öğe için Öde" kullanım durumunun "öğe seç" i içerdiği anlamına gelir.
Uzatmanın çeşitli kullanımları vardır, ancak bunu kullanılabilecek veya kullanılamayacak bir alternatif olarak düşünmeyi seviyorum. Örneğin - hala e-ticaret sitesinde. Bir ürün için ödeme yaparken, teslimatta ödeme yapmayı, paypal kullanarak ödeme yapmayı veya kartla ödeme yapmayı seçebilirsiniz. Bunların hepsi "öğe için ödeme" kullanım durumuna alternatiflerdir. Tercihime bağlı olarak bu seçeneklerden herhangi birini seçebilirim.
Daha fazla açıklık ve kullanım örneklerini çevreleyen kurallar için buradaki makalemi okuyun:
http://businessanalystlearnings.com/ba-techniques/2013/2/20/use-case-diagram-the-basics
login
de create
kullanım örnekleri. Her ikisi de işlevlerdir. Bu nedenle -1