UML etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
UML etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Temmuz 2023 Salı

UML Package Diagram

Giriş
Açıklaması şöyle
The UML package diagram describes the structures of the designed system at the level of packages or the dependencies between the packages that make up a model.
Paketler Arası Bağımlılıklar
Bağımlılıkları gösteren bir örnek burada. Bağımlılıklar kesikli açık ok (dashed open arrow) ile gösterilir. Bağımlılıklar için stereotype etiketler kullanılabilir. Bunların bazıları şöyle
1. <<import>>
Açıklaması şöyle
One package imports the functionality of another package. Only public elements in the package will be imported.
2. <<access>>
Açıklaması şöyle
One package requires assistance from functions of another package. 
3. <<merge>>
Açıklaması şöyle. Bence extends diye adlandırılsaydı daha iyi olurdu
It is the directed relationship between 2 packages that indicates that the content of one package is extended by the contents of another package. 

15 Aralık 2020 Salı

UML Class Diagram - Composition (Birbirinden Ayrılamaz Parçalar)

Giriş
Not : UML Class Diagram yazısına bakabilirsiniz
Composition oluşum, bileşim olarak çevrilir. Bileşim olduğu için birbirinden ayrılamaz parçaları kasteder. Açıklaması şöyle.
A composition describes a relationship in which one object completely controls another object that has no independent lifecycle.
İçi dolu elmas ile gösterilir.
image

Örnek
Elimizde şöyle bir C++ kodu olsun. Bu kodda Player nesnesine bir Board nesnesi verilmeli ve pointer olmadığı için birbirinden ayırma şansı da yok
class Board {
    ...
};

class Player
{
  Board m_board;
  ...  
};

3 Ocak 2018 Çarşamba

UML Class Diagram

Not : UML yazısında diğer diagramlar var.

Class Diagram
Class diagram tasarımın (problem domain) static bir görüntüsünü verir. İşin nasıl yapıldığını anlatmaz sadece sınıfların yapısını belirtir.

Class diagram, diğer UML diagramlarına göre nesneye yönelik tasarıma göbekten bağlıdır. Başka bir iş için bence kullanılamaz. Örneğin Functional Programming için Class Diagram kullanılabileceğini hayal bile edemiyorum.

Diğer UML diagramları - mesela Component Diagram, Deployment Diagram - nesneye yönelik tasarım ile bu kadar yakinen ilişkili değildirler.

Class Alan ve Metodları
Class alan metodları + (public) , # (protected) , - (private) karakterleri ile başlar.

Class StereoType
Sınıflara da ilişkilerde olduğu gibi stereotype verilebilir.

İlişkiler
Class diagramda temel olarak kullanılan 4 çeşit ilişki vardır. Bunlar zayıftan kuvvetliye doğru olarak Dependency, Association, Aggregation ve Composition ilişkileridir. Aşağıdaki şekilde bazı ilişkiler görülebilir.


enter image description here

Not : UML standardında bir sınıfın property ve operation'ları yerine feature kelimesini kullanıyor.

1. Dependency - Bağımlılık
UML'de Class Diagram Connector ile belirtilir.
İki sınıftan birisi diğerini member variable olarak değil, local variable veya parametre olarak kullanıyorsa aralarında bağımlılık vardır denilir. Tüm UML ilişkileri arasında en zayıf olanıdır.

One class depends on another if the independent class is a parameter variable or local variable of a method of the dependent class.
class a {
    void foo(){
        b object= new b();
        object.baar();
    }
}
class b {
    void baar(){
    }
}
Kesikli düz çizgi ile gösterilir.
Illustration

Dependency'lere stereotype verilebilir. <<call>>, <<create>>,<<instantiate>>,<<send>> kullanılabilecek bazı standart stereotype örnekleri. Eğer istersek kendi stereotype'larımızı da yaratabiliriz. Örnekte <<throws>> gösteriliyor.

enter image description here

2. Association - Bağıntı
UML'de Class Diagram Connector ile belirtilir.
İki sınıf birbirini sınıf değişkeni (member variable) olarak kullanıyorsa aralarında association (bağıntı) var denilir. Düz çizgi ile gösterilir. Bağıntının adı ve çokluğu (multiplicity) olabilir.
An association almost always implies that one object has the other object as a field/property/attribute (terminology differs).
Basitten biraz daha karmaşığa giden bir kaç örneğe bakalım.

Örnek'ğe bakarak Class A nesnesini, Class B tipinden bir değişken içerdiğini söyleyebiliriz.
image

Bu örnekte ise association görülebilir ayrıca multiplicity de eklenmiş.
enter image description here

İlşkinin sahibi varsa küçük bir yuvarlak ile gösterilir.

3. Parça Bütün İlişkileri - Aggregation ve Composition
Yani Parent/Child ilişkileri . UML'de Class Diagram Connector ile belirtilirler. Düz çizgi ile gösterilirler. Bir ucu içi boş veya dolu elmas şeklindedir. Çizgiye bir isim (name) verilebilir. Kaynak ve Hedef sınıf arasında nicelik (multiplicity) tanımlanabilir.

3.1 Aggregation - Shared Association
Aggregation içerme olarak çevrilir. İçerme olduğu için parçalar birbirlerinden ayrılabilirler. Açıklaması şöyle.
An aggregation describes a relationship in which one object belongs to another object, but they are still potentially independent. The first object does not control the lifecycle of the second.
 İçi boş elmas ile gösterilir. Class B'nin başka sınıflar ile paylaşılabileceği (shared) ima edilir.
image


3.2 Composition - Not-Shared Association
Composition yazısına taşıdım

Realization
UML'de Class Diagram Connector ile belirtilir.
Bir arayüzün gerçekleştirilmesi. Kesikli çizgi ve ok ile gösterilir. Örnek:
Generalization - Genelleme
UML'de Class Diagram Connector ile belirtilir.
Sınıflar arası kalıtım. Düz çizgi ve ok ile gösterilir. Örnek:

3 Kasım 2017 Cuma

4+1 View ve UML

Giriş
Bu yazıda artık pek kullanılmayan 4+1 View ve bunları göstermek için kullanılan UML çizelgeleri anlatılıyor. 

Modern Yorumu Nasıl?
4 + 1 View modası geçmiş gibi görünse de, çözümü/sistemi bir anlamda kağıda döktüğü için bence faydalı yönleri var. 4+1 View Rational Rose şirketindeki Philippe Kruchten tarafından ortaya konulmuştu. Alternatif olarak Simon Brown tarafından geliştirilen C4 Model kullanılabilir.

Modern kullanımı şuna benzer bir hale geldi :

- Scenarios View altındaki maddeler çevik süreçlerle birlikte projenin her döngüsünde yapılmaya başlandı

- Logical View altındaki Sequence Diagram, Activity Diagram artık çevik süreçlerde üretilen User Story/Use Case belgelerinin içine gömülmeye başlandılar. Ya da yanında ek olarak veriliyorlar.

- Development View altındaki Class Diagram, Package Diagram, Component Diagram artık çizilmiyor. Bunları IDE'ler zaten istenildiği anda üretebiliyor. Dolayısıyla çizmeye yok.

- Physical View altındaki Deployment Diagram bence halen lazım. Her ne kadar bir sürü altyapı Dashboard gibi şeyler verse de sistemdeki bilgisayarları, ağ yapısı vs. kuşbakışı görmek için gerekiyor.

Peki Ne Kaybettik?
- Aslında, en büyük kayıp bir anlamda mühendislik kültürünün erozyona uğraması oldu. Bir işe başlamadan önce etraflıca düşünüp taşınma alışkanlığı kalktı. Tabii ki bunlar benim gördüğüm örnekler.

- Ayrıca eskiden kod ile bu 4 +1 View çizelgelerinin senkron veya tutarlı gitmesine özen gösterilirdi. Ve hatta bu modellerden kod üretildiği için mecburen bu iş yapılırdı. 

Şu anda benim gördüğüm örneklerde kod ile üretilen belgeler arasında farklılıklar/kopukluklar olsa bile bunlar düzeltilmiyor.


UML
UML yazılımın tasarımını belirtmek için kullanılır. Tüm modellerde (CMMI gibi) olduğu gibi UML de geliştirme sürecinin (development process) nasıl olması gerektiğini belirtmez!

UML 2.0 ile Telekom dünyasında kullanılan SDL'de standarda dahil edilmiştir. Şu anda UML 2.5 mevcut ancak bir çok kitap yenilenmedi ve halen UML 2.0 sürümünü anlatıyor.

4+1 View
Neden lazım sorusunu cevabı şöyle
No solution is better then the other if you cannot present it well.
4+1 view bir çok kişi tarafından farklı UML çizelgelerini içerecek şekilde tarifleniyor. Özellikle Logical View kimin tariflediğine göre epeyce farklılıklar gösterebilir. 

4+1 View modelini ilk tarifleyen Philippe Krutchen makalesinde UML gösterimini kullanmadığı için her tarifleme doğru sayılabilir.

View'lar şeklen şöyle

Kullanım yerleri şöyle
1. Scenarios View       -> Requirements Gathering Phase
2. Logical View          -> Requirements Gathering Phase
3. Development View ->  Development/Implementation Phase
4. Process View          ->  Development/Implementation Phase
5. Physical View         ->  Development/Implementation Phase

Bu view'lardan Scenarios View ve Logical View projenin Requirements Gathering Phase denilen safhasında kullanılır deniliyor.

Process View, Development View, Physical View ise projenin Development/Implementation Phase denilen safhasında kullanılır deniliyor.

Aslında 4 +1 View eski bir yöntem olduğu için günümüzde pek uymuyor ve biraz eski bir anlayışı yansıtıyor.

Modern çevik (agile) süreçlerle birlikte projenin bu birbirini takip eden safhaları kalktı ve artırımsal (incremental) olarak yapılmaya başlandı.

1.Scenarios View aka Use Case View
Bu view'da sistemin son kullanıcı açısından ne iş göreceği anlatılıyor. Bu iş için :

1. Use Case Diagram veya
2. Scrum'daki gibi Kullanım Durumu (User Story) 

tercih edilebilir.

Use Case Diagram
Bir projeye başlarken ilk tasarlanan UML görünümü Kullanım Durumlarıdır. Gerekçesi ise Kullanım Durumlarının sistemi tanımlamasıdır. Kullanım Durumları bazen bir özellik  (feature) geliştirmek için de kullanılır.

Kullanım Durumları çizildikten sonra genellikle her bir Kullanım Durumunu detaylandıran  bir Sequence Diagram çizilir.

Bu aşama da geçildikten sonra Sınıf Çizelgeleri çizilirler.

Aktörler
Primary aktör sistemin onsuz yapamayacağı şeydir
Secondary aktör yardımcıdır.

Bir aktör farklı işleri yapsa dahi aynı kişiyse genel bir isim kullanmak en iyisi. Örneğin kullanıcı hem Buyer hem de Seller olabiliyorsa iki tane farklı aktör yaratmak yerine Person diye bir aktör yaratılmalı.

Use Case (Kullanım Durumu)
Sistemin gerçekleştirdiği işlevi belirtir.

Sistem
Sistem geliştirilen şeyin ne olduğunu belirtir. Aktörler sistemi kullanırlar ve belirtilen faaliyetleri gerçekleştirirler.

 Bir örnek şöyle


Tüm Kullanım Durumları
Tüm kullanım durumlarının (use case) seviyesel olarak beraber gösterimini ilk defa burada gördüm.
Identified Use case Levels
inlude ve extend
--> ile gösterilir. A includes B demek A yapılırken B'nin de yapıldığı anlamına gelir. A extends B demek A yapılırken B'nin yapılabileceği anlamına gelir.

2. Logical View
Bileşenler yönünden gösterilebilir. Bir örnek şöyle

Akışlar yönünden gösterilebilir. Açıklaması şöyle. Sistemin sağlayacağı işlevi son kullanıcıya akışlar şeklinde gösterir. Akışlar için Sequence Diagram ve Activity Diagram kullanılabilir.
Denotes the functionality a system provides to the end-user. The view defines and documents systems, stakeholders, interfaces, and their relationships. It provides a big picture view of how the solution fits in the enterprise architecture. 
This view helps you to convince enterprise architects that the solution architecture fits well within the enterprise architecture and goals. 

The logical view can be documented easily using the sequence diagrams and activity diagrams.  For integration projects sequence diagrams makes sense as it clearly depicts the flow of information between systems e.g. communication between a computer and a server:
Sequence Diagram
UML Sequence Diagram yazısına taşıdım.

Activity Diagram
UML Activity Diagram yazısına taşıdım.

3. Development View
Açıklaması şöyle. Kodun yapısıyla ilgili çizelgeler bulunur.
This view is about document how to code the 'solution', this documents the code and the packages involved in the project. For an integration solution, this view would generally contain the drag and drop flow or class interaction diagram between different components. Sometimes this view can be extended to show the branching/merging strategies as well. 
Class Diagram
UML Class Diagram yazısına taşıdım.

Package Diagram
UML Package Diagram yazısına taşıdım.

Component Diagram
Yazılımın mimarisini en üst seviyeden anlatan çizelgedir. Kimin kimle konuştuğunu gösterir. Bu çizelgede "kim" çizime göre değişir. Bazen birbiri ile konuşan sınıflar, bazen web servisleri, bazen UI ve veri tabanı gösterilir. Component Diagram'da bir bileşenin bağımlılıklarının gösterildiğini de gördüm.

4.Process View
Açıklaması şöyle. Eski anlayışa göre Development/Implementation Phase başladığı için bu aşamada da yine Sequence Diagram ve Activity Diagram çiziliyor ancak, Requirements Gathering Phase safhasına göre daha detaylı çiziliyorlar.
Talks about the process the integration facilitates/enables between the end systems. This view is typically very important as it is the link between the business problem and the technical solution. 
Sequence Diagrams and Activity Diagrams represent the process view:
Bir örnek şöyle


5. Physical View aka Deployment View
Açıklaması şöyle. Genellikle Deployment Diagram ile gösterilir.
Also known as the deployment view, this view is for a systems engineer or a DevOps person showing different aspects of the system involved.  Usually, for an integration project, the physical view can be used in conjunction with the deployment view where different 'physical aspects' of the system are shown and how they interact with each other.
Target audience: DevOps Team, Enterprise Support Team, System Engineers. 
Bir örnek şöyle


Deployment Diagram
Bu çizelgede sistemin fiziksel şekil gösterilir. Donanım, işletim sistemi, ağ, arayüzler belirtilir.
"In a deployment model the physical architecture of the system is defined. Try to start capturing early the physical deployment characteristics, the hardware, operating system, network, interfaces and the support software of the new system for the need of a disaster recovering."
Deployment Diagram'da Node'lar kendi başına çalışan cihaz veya bilgisayarları temsil eder. Node'ların içinde Package, bunların içinde ise Component'ler bulunabilir.



17 Ağustos 2017 Perşembe

UML Sequence Diagram - Sıralı Diagram

Not : UML yazısında diğer diagramlar var.

Sequence Diagram ve Activity Diagram İlişkisi
Bence Activity Diagram, Sequence Diagram ile aynı şeyi gösteriyor. Yani birisi diğerinin yerini rahatlıkla alabilir. Sequence Diagram yatay olarak çizilirken, Activity Diagram serbest formatta çiziliyor.

Sequence Diagram
Sequence diagram genellikle nesneler arası metod çağrısını göstermek üzere kullanılır. Ancak tek kullanım yeri bu değildir. Sistemler, alt-sistemler arası çağrıları göstermek için de kullanılabilir.

Lifeline Gösterimi
Diklemesine çizgiye sahip ve çağrı başlatan, çağrı alan nesnelere lifeline denir. UML standardında lifeline nesnelerine verilen isimlerin nasıl olacağı tanımlı. Şöyle olmalı
Instance Name : Class Name
Örneğin içine Student nesneleri eklenen bir liste
Students : List<Student>
veya
:List<Student>
olarak isimlendirilir.

Küçük Daireler
Bazı diagramlarda küçük daireler şeklinde gösterim var. Ne olduğunu bilmiyorum.

enter image description here
Mesajlar - Nesneler arası çağrı
Bu diagramlarda yapılan  ve bence faydası olmayan bir kullanım şekli var. O da metod çağrılarında kullanılan tüm parametrelerin diagramda gösterilmesi. Sadece metod ismi bence yeterli olmalı. Aşağıdaki örnekte sadece metod isimlerinin kullanımı görülebilir.


UML 2.0'dan itibaren Bu diagram türü için Interaction Frame eklenmiş. Bu eklenti döngü veya seçime bağlı (optional) işleri çerçeve içine alıp gruplamaya yarıyor.

Koşul - Guards
Nesneler arası çağrı belli bir koşula bağlı olabilir. Bu durumda mesajın önüne 
[koşul] mesaj
şeklinde belirtilir. Buradaki örnekte opt isimli kutucuk balance > amount koşulu tutuyorsa çalıştırılır.







19 Ocak 2015 Pazartesi

UML Activity Diagram

Not : UML yazısında diğer diagramlar var.

Sequence Diagram ve Activity Diagram İlişkisi
Bence Activity Diagram, Sequence Diagram ile aynı şeyi gösteriyor. Yani birisi diğerinin yerini rahatlıkla alabilir. Sequence Diagram yatay olarak çizilirken, Activity Diagram serbest formatta çiziliyor.

Activity Diagram
Activity Diagram, 1920'lerden beri kullanılan Flow Chart ile aynı şeydir. Hatta özelleştirilmiş bir Flow Chart olarak düşünülebilir.

Activity Diagram Bize Ne Gösterir
Ben bu diagramları daha çok "business rule" yani iş kurallarını göstermek için kullanıyorum. Başka amaçlar için de kullanılabilir. Ancak Activity Diagram doğası gereği koddan daha üst seviye bir şey olduğu için, yani sınıflar arası etkileşimi göstermediği için en uygun kullanımı buymuş gibi geliyor.

Business Rule Nedir
Çok iyi olduğunu düşündüğüm bir açıklama

"People use the terms "business rule" and "business logic" to refer to the portion of your application that is specific to your application and represents the core behavior of how things are supposed to work as opposed to generic functionality that could be useful in software written for a different client/business/customer base or code that exists to support the infrastructure of the application.

Often business logic is subject to change when the needs of the customer change, so we like to put it in a special place/tier so that we can modify it as needed.

Although the term seems to imply otherwise, non-business software also has business logic. For example, a rule that states that "when a user does xyz, the application should validate something" can be classified as a business rule.

Utility code, such as parsing/processing/data access and such would not be considered business logic."

Activity Diagram'ın Gösteriminde Kullanılan Şekiller
Gösterimde bir çok şekil kullanılıyor. Diagramı anlamak için şekillerin anlamını bilmek gerekir.

1. Karar Noktaları (Elmas) - Decision Point
Activity Diagram en çok business logic denilen karar noktalarını, if/else koşullarını göstermek için bir kullanılır. Elmas'lar karar noktalarını belirtir.
enter image description here


2. Başlangıç ve Bitiş Noktası - Start and Stop Points
Diagram'da bir başlangıç ve birden fazla bitiş noktası bulunabilir.
"An activity diagram has a start and may have multiple endpoints."
3. Eşzamanlılık ve Zamanlama - Concurrency and Timing
Flow Chart'a ek olarak yazılımın doğasında bulunan concurrency ve timing bilgisini de gösterir.