OOAD - Hızlı Kılavuz
Kısa bir tarihçe
Nesne yönelimli paradigma, şeklini yeni bir programlama yaklaşımının ilk konseptinden alırken, tasarım ve analiz yöntemlerine ilgi çok daha sonra geldi.
İlk nesne yönelimli dil, 1960 yılında Norveç Bilgi İşlem Merkezindeki araştırmacılar tarafından geliştirilen Simula (Gerçek sistemlerin simülasyonu) idi.
1970 yılında Alan Kay ve Xerox PARK'daki araştırma grubu, Dynabook'u programlamak için Dynabook adlı kişisel bir bilgisayar ve ilk saf nesne yönelimli programlama dili (OOPL) - Smalltalk'ı yarattı.
1980'lerde Grady Booch, ağırlıklı olarak Ada programlama dili için bir tasarım sunan Nesne Yönelimli Tasarım başlıklı bir makale yayınladı. Sonraki baskılarda, fikirlerini tam bir nesneye yönelik tasarım yöntemine genişletti.
1990'larda Coad, davranışsal fikirleri nesneye yönelik yöntemlere dahil etti.
Diğer önemli yenilikler James Rumbaugh'un Object Modeling Techniques (OMT) ve Ivar Jacobson'ın Object-Oriented Software Engineering (OOSE) oldu.
Nesneye Yönelik Analiz
Nesneye Yönelik Analiz (OOA), yazılım mühendisliği gereksinimlerini belirleme ve etkileşim nesnelerinden oluşan bir yazılım sisteminin nesne modeline göre yazılım spesifikasyonları geliştirme prosedürüdür.
Nesne yönelimli analiz ile diğer analiz biçimleri arasındaki temel fark, nesne yönelimli yaklaşımda gereksinimlerin hem verileri hem de işlevleri bütünleştiren nesneler etrafında organize edilmesidir. Sistemin etkileşime girdiği gerçek dünya nesnelerine göre modellenirler. Geleneksel analiz metodolojilerinde, iki yön - işlevler ve veriler - ayrı ayrı ele alınır.
Grady Booch, OOA'yı “Nesneye yönelik analiz, problem alanının kelime dağarcığında bulunan sınıflar ve nesneler açısından gereksinimleri inceleyen bir analiz yöntemidir” olarak tanımlamıştır .
Nesne yönelimli analizde (OOA) birincil görevler şunlardır:
- Nesneleri tanımlama
- Nesne modeli diyagramı oluşturarak nesnelerin düzenlenmesi
- Nesnelerin veya nesne niteliklerinin iç kısımlarını tanımlama
- Nesnelerin davranışını, yani nesne eylemlerini tanımlama
- Nesnelerin nasıl etkileşime girdiğini açıklama
OOA'da kullanılan yaygın modeller, kullanım durumları ve nesne modelleridir.
Nesne Tabanlı Tasarım
Nesneye Yönelik Tasarım (OOD), nesne yönelimli analiz sırasında üretilen kavramsal modelin uygulanmasını içerir. OOD'de, analiz modelindeki teknolojiden bağımsız olan kavramlar, uygulama sınıfları ile eşleştirilir, kısıtlamalar belirlenir ve arayüzler tasarlanır, bu da çözüm alanı için bir model ile sonuçlanır, yani sistemin nasıl olacağına dair ayrıntılı bir açıklama beton teknolojileri üzerine inşa edilmiştir.
Uygulama ayrıntıları genellikle şunları içerir:
- Sınıf verilerinin yeniden yapılandırılması (gerekirse),
- Yöntemlerin uygulanması, yani iç veri yapıları ve algoritmalar,
- Kontrolün uygulanması ve
- Derneklerin uygulanması.
Grady Booch, nesne yönelimli tasarımı “nesneye yönelik ayrıştırma sürecini kapsayan bir tasarım yöntemi ve tasarımdaki sistemin hem mantıksal hem fiziksel hem de statik ve dinamik modellerini gösteren bir gösterim” olarak tanımlamıştır .
Nesne yönelimli programlama
Nesne yönelimli programlama (OOP), modülerlik ve yeniden kullanılabilirlik avantajlarını birleştirmeyi amaçlayan nesnelere (hem verilere hem de yöntemlere sahip) dayalı bir programlama paradigmasıdır. Genellikle sınıfların örnekleri olan nesneler, uygulamalar ve bilgisayar programları tasarlamak için birbirleriyle etkileşim kurmak için kullanılır.
Nesne yönelimli programlamanın önemli özellikleri şunlardır:
- Program tasarımında aşağıdan yukarıya yaklaşım
- Nesneler etrafında organize edilmiş, sınıflarda gruplanmış programlar
- Nesnenin verileri üzerinde işlem yapma yöntemleriyle verilere odaklanın
- Fonksiyonlar aracılığıyla nesneler arasındaki etkileşim
- Mevcut sınıflara özellikler ekleyerek yeni sınıflar oluşturarak tasarımın yeniden kullanılabilirliği
Nesne yönelimli programlama dillerinin bazı örnekleri C ++, Java, Smalltalk, Delphi, C #, Perl, Python, Ruby ve PHP'dir.
Grady Booch, nesne yönelimli programlamayı “programların, her biri bir sınıfın bir örneğini temsil eden ve sınıflarının tümü kalıtım ilişkileri yoluyla birleştirilmiş bir sınıf hiyerarşisinin üyeleri olan nesnelerin işbirliğine dayalı koleksiyonları olarak organize edildiği bir uygulama yöntemi olarak tanımlamıştır. ” .
Nesne modeli, bir yazılım uygulamasındaki öğeleri nesneler açısından görselleştirir. Bu bölümde, nesne yönelimli sistemlerin temel kavramlarını ve terminolojilerini inceleyeceğiz.
Nesneler ve Sınıflar
Nesnelerin ve sınıfların kavramları içsel olarak birbiriyle bağlantılıdır ve nesne yönelimli paradigmanın temelini oluşturur.
Nesne
Bir nesne, fiziksel veya kavramsal bir varoluşa sahip olabilen, nesne yönelimli bir ortamda gerçek dünya unsurudur. Her nesnede -
Onu sistemdeki diğer nesnelerden ayıran kimlik.
Bir nesnenin karakteristik özelliklerini ve aynı zamanda nesnenin sahip olduğu özelliklerin değerlerini belirleyen durum.
Durumundaki değişiklikler açısından bir nesne tarafından gerçekleştirilen harici olarak görünür etkinlikleri temsil eden davranış.
Uygulamanın ihtiyacına göre nesneler modellenebilir. Bir nesnenin müşteri, araba vb. Gibi fiziksel bir varlığı olabilir; veya bir proje, süreç vb. gibi soyut bir kavramsal varoluş
Sınıf
Bir sınıf, ortak davranış sergileyen aynı karakteristik özelliklere sahip nesnelerin bir koleksiyonunu temsil eder. Ondan oluşturulabilecek nesnelerin planını veya açıklamasını verir. Bir sınıfın üyesi olarak bir nesnenin yaratılmasına somutlaştırma denir. Dolayısıyla, nesne bir sınıfın bir örneğidir.
Bir sınıfın bileşenleri şunlardır:
Sınıftan somutlaştırılacak nesneler için bir öznitelik kümesi. Genel olarak, bir sınıfın farklı nesnelerinin özniteliklerin değerlerinde bazı farklılıkları vardır. Nitelikler genellikle sınıf verileri olarak adlandırılır.
Sınıfın nesnelerinin davranışını gösteren bir dizi işlem. İşlemler ayrıca işlevler veya yöntemler olarak adlandırılır.
Example
İki boyutlu bir uzayda geometrik şekilli daireyi temsil eden basit bir sınıf olan Circle'ı ele alalım. Bu sınıfın nitelikleri şu şekilde tanımlanabilir -
- x koordinat, merkezin x koordinatını belirtmek için
- y koordinat, merkezin y koordinatını belirtmek için
- a, dairenin yarıçapını belirtmek için
İşlemlerinden bazıları şu şekilde tanımlanabilir -
- findArea (), alanı hesaplama yöntemi
- findCircumference (), çevreyi hesaplama yöntemi
- scale (), yarıçapı artırma veya azaltma yöntemi
Örnekleme sırasında, en azından bazı öznitelikler için değerler atanır. My_circle nesnesini yaratırsak, durumunu göstermek için x-coord: 2, y-coord: 3 ve a: 4 gibi değerler atayabiliriz. Şimdi, ölçek () işlemi my_circle üzerinde 2 ölçekleme faktörü ile gerçekleştirilirse, a değişkeninin değeri 8 olacaktır. Bu işlem, my_circle durumunda bir değişiklik getirir, yani nesne belirli davranışlar sergilemiştir.
Kapsülleme ve Veri Gizleme
Kapsülleme
Kapsülleme, bir sınıf içinde hem öznitelikleri hem de yöntemleri birbirine bağlama işlemidir. Kapsülleme yoluyla, bir sınıfın iç detayları dışarıdan gizlenebilir. Sınıfın öğelerine, yalnızca sınıf tarafından sağlanan arabirim aracılığıyla dışarıdan erişilmesine izin verir.
Veri Gizleme
Tipik olarak, bir sınıf, verilerine (özniteliklerine) yalnızca kendi sınıf yöntemleriyle erişilebilecek ve doğrudan dış erişimden yalıtılabilecek şekilde tasarlanır. Bir nesnenin verilerini yalıtma işlemine veri gizleme veya bilgi gizleme denir.
Example
Circle sınıfında, sınıfın dışından öznitelikleri görünmez hale getirerek ve sınıf verilerine erişmek için sınıfa iki yöntem daha ekleyerek veri gizleme dahil edilebilir, yani -
- setValues (), x-coord, y-coord ve a'ya değer atama yöntemi
- getValues (), x-coord, y-coord ve a değerlerini alma yöntemi
Burada my_circle nesnesinin özel verilerine, Circle sınıfı içinde kapsüllenmemiş herhangi bir yöntemle doğrudan erişilemez. Bunun yerine setValues () ve getValues () yöntemleri aracılığıyla erişilmelidir.
İleti geçişi
Herhangi bir uygulama, uyumlu bir şekilde etkileşimde bulunan birkaç nesne gerektirir. Bir sistemdeki nesneler birbirleriyle mesaj geçişini kullanarak iletişim kurabilir. Bir sistemin iki nesnesi olduğunu varsayalım: obj1 ve obj2. Obj1, obj2'nin yöntemlerinden birini yürütmesini isterse, obj1 obj2 objesine bir mesaj gönderir.
Mesaj geçişinin özellikleri şunlardır:
- İki nesne arasında geçen mesaj genellikle tek yönlüdür.
- Mesaj geçişi, nesneler arasındaki tüm etkileşimleri sağlar.
- Mesaj geçişi esasen sınıf yöntemlerini çağırmayı içerir.
- Farklı süreçlerdeki nesneler mesaj geçişine dahil olabilir.
Miras
Kalıtım, yeteneklerini genişleterek ve iyileştirerek mevcut sınıflardan yeni sınıfların oluşturulmasına izin veren mekanizmadır. Mevcut sınıflar temel sınıflar / üst sınıflar / süper sınıflar olarak adlandırılır ve yeni sınıflar türetilmiş sınıflar / alt sınıflar / alt sınıflar olarak adlandırılır. Alt sınıf, süper sınıfın izin vermesi koşuluyla, süper sınıfın / sınıfların özniteliklerini ve yöntemlerini miras alabilir veya türetebilir. Ayrıca, alt sınıf kendi niteliklerini ve yöntemlerini ekleyebilir ve süper sınıf yöntemlerinden herhangi birini değiştirebilir. Kalıtım, bir "eşittir" ilişkisini tanımlar.
Example
Bir Memeli sınıfından, İnsan, Kedi, Köpek, İnek vb. Gibi bir dizi sınıf türetilebilir. İnsanlar, kediler, köpekler ve inekler, memelilerin farklı özelliklerine sahiptir. Ek olarak, her birinin kendine özgü özellikleri vardır. Bir ineğin bir memeli "olduğu" söylenebilir.
Kalıtım Türleri
Single Inheritance - Bir alt sınıf, tek bir süper sınıftan türemiştir.
Multiple Inheritance - Bir alt sınıf, birden fazla süper sınıftan türemiştir.
Multilevel Inheritance - Bir alt sınıf, başka bir sınıftan türetilen bir süper sınıftan türetilir ve bu böyle devam eder.
Hierarchical Inheritance - Bir sınıfın, bir ağaç yapısı oluşturmak için bir dizi seviye boyunca devam eden, her biri ardışık alt sınıflara sahip olabilen birkaç alt sınıfı vardır.
Hybrid Inheritance - Bir kafes yapısı oluşturmak için çoklu ve çok düzeyli kalıtımın bir kombinasyonu.
Aşağıdaki şekil, farklı kalıtım türlerinin örneklerini göstermektedir.
Polimorfizm
Polimorfizm, başlangıçta, birden çok biçim alma yeteneği anlamına gelen Yunanca bir kelimedir. Nesne yönelimli paradigmada, polimorfizm, üzerinde çalıştıkları örneğe bağlı olarak işlemleri farklı şekillerde kullanmayı ifade eder. Çok biçimlilik, farklı iç yapılara sahip nesnelerin ortak bir dış arayüze sahip olmasına izin verir. Çok biçimlilik, kalıtımı uygularken özellikle etkilidir.
Example
Her biri findArea () yöntemine sahip Circle ve Square adlı iki sınıfı ele alalım. Sınıftaki yöntemlerin adı ve amacı aynı olsa da dahili uygulama yani alan hesaplama prosedürü her sınıf için farklıdır. Circle sınıfının bir nesnesi findArea () yöntemini çağırdığında, işlem, Square sınıfının findArea () yöntemiyle herhangi bir çakışma olmadan dairenin alanını bulur.
Genelleme ve Uzmanlık
Genelleme ve uzmanlaşma, alt sınıfların süper sınıflardan miras aldığı, sınıflar arasındaki bir ilişki hiyerarşisini temsil eder.
Genelleme
Genelleme sürecinde, sınıfların ortak özellikleri, daha yüksek bir hiyerarşi düzeyinde bir sınıf oluşturmak için birleştirilir, yani, genelleştirilmiş bir süper sınıf oluşturmak için alt sınıflar birleştirilir. "Bir tür" ilişkiyi temsil eder. Örneğin, "araba bir tür kara aracıdır" veya "gemi bir tür su aracıdır".
Uzmanlık
Uzmanlaşma, genellemenin tersi bir süreçtir. Burada, nesne gruplarının ayırt edici özellikleri, mevcut sınıflardan özel sınıflar oluşturmak için kullanılır. Alt sınıfların süper sınıfın özelleştirilmiş versiyonları olduğu söylenebilir.
Aşağıdaki şekil bir genelleme ve uzmanlaşma örneğini göstermektedir.
Bağlantılar ve Dernek
Bağlantı
Bağlantı, bir nesnenin diğer nesnelerle işbirliği yaptığı bir bağlantıyı temsil eder. Rumbaugh bunu “nesneler arasında fiziksel veya kavramsal bir bağlantı” olarak tanımladı. Bir bağlantı aracılığıyla, bir nesne yöntemleri çağırabilir veya başka bir nesnede gezinebilir. Bir bağlantı, iki veya daha fazla nesne arasındaki ilişkiyi gösterir.
bağlantı
İlişkilendirme, ortak yapıya ve ortak davranışa sahip bir bağlantı grubudur. İlişki, bir veya daha fazla sınıfın nesneleri arasındaki ilişkiyi gösterir. Bir bağlantı, bir ilişkilendirmenin bir örneği olarak tanımlanabilir.
Bir Dernek Derecesi
Bir ilişkinin derecesi, bir bağlantıya dahil olan sınıfların sayısını gösterir. Derece tekli, ikili veya üçlü olabilir.
Bir unary relationship aynı sınıftaki nesneleri birbirine bağlar.
Bir binary relationship iki sınıftaki nesneleri birbirine bağlar.
Bir ternary relationship üç veya daha fazla sınıftaki nesneleri birbirine bağlar.
Derneklerin Önem Oranları
Bir ikili ilişkinin önemi, bir ilişkilendirmeye katılan örneklerin sayısını gösterir. Üç tür kardinalite oranı vardır:
One–to–One - A sınıfının tek bir nesnesi, B sınıfının tek bir nesnesiyle ilişkilendirilir.
One–to–Many - A sınıfının tek bir nesnesi, B sınıfının birçok nesnesiyle ilişkilidir.
Many–to–Many - A sınıfının bir nesnesi, B sınıfının birçok nesnesiyle ilişkilendirilebilir ve bunun tersine, B sınıfının bir nesnesi, A sınıfının birçok nesnesiyle ilişkilendirilebilir.
Toplama veya Kompozisyon
Toplama veya kompozisyon, bir sınıfın diğer sınıfların nesnelerinin herhangi bir kombinasyonundan oluşabileceği, sınıflar arasındaki bir ilişkidir. Nesnelerin doğrudan diğer sınıfların bünyesine yerleştirilmesine izin verir. Toplama, bütünden kendi parçalarına gitme yeteneği ile bir "parçası" veya "bir-bir" ilişkisi olarak adlandırılır. Bir toplu nesne, bir veya daha fazla başka nesneden oluşan bir nesnedir.
Example
İlişkide, “bir arabanın bir motoru vardır”, araba tüm nesne veya toplamdır ve motor, arabanın bir “parçasıdır”. Toplama şunları ifade edebilir -
Physical containment - Örneğin, bir bilgisayar monitör, CPU, fare, klavye ve benzerlerinden oluşur.
Conceptual containment - Örneğin, hissedarın bir payı vardır.
Nesne Modelinin Faydaları
Artık nesne yönelimi ile ilgili temel kavramları gözden geçirdiğimize göre, bu modelin sunduğu avantajları not etmek faydalı olacaktır.
Nesne modelini kullanmanın faydaları şunlardır:
Yazılımın daha hızlı geliştirilmesine yardımcı olur.
Bakımı kolaydır. Bir modülün bir hata geliştirdiğini varsayalım, o zaman bir programcı, yazılımın diğer parçaları hala çalışır durumdayken bu belirli modülü düzeltebilir.
Nispeten sorunsuz yükseltmeleri destekler.
Nesnelerin, tasarımların ve işlevlerin yeniden kullanılmasını sağlar.
Özellikle karmaşık sistemlerin entegrasyonunda geliştirme risklerini azaltır.
Nesneye Yönelik Modelleme (OOM) tekniğinin, nesneler etrafında düzenlenmiş modelleri kullanarak bir uygulamadaki şeyleri görselleştirdiğini biliyoruz. Herhangi bir yazılım geliştirme yaklaşımı aşağıdaki aşamalardan geçer -
- Analysis,
- Dizayn ve
- Implementation.
Nesne yönelimli yazılım mühendisliğinde, yazılım geliştiricisi, uygulamayı herhangi bir özel programlama dilinde veya yazılım araçlarında nihai temsillerinden önce nesne yönelimli kavramlar açısından tanımlar ve düzenler.
Nesne Tabanlı Yazılım Geliştirme Aşamaları
Nesne yönelimli metodoloji kullanan yazılım geliştirmenin ana aşamaları nesne yönelimli analiz, nesne yönelimli tasarım ve nesne yönelimli uygulamadır.
Nesneye Yönelik Analiz
Bu aşamada problem formüle edilir, kullanıcı gereksinimleri belirlenir ve ardından gerçek dünya nesnelerine dayalı bir model oluşturulur. Analiz, istenen sistemin nasıl çalışması gerektiğine ve nasıl geliştirilmesi gerektiğine dair modeller üretir. Modeller, herhangi bir teknik olmayan uygulama uzmanı tarafından anlaşılabilmesi ve incelenebilmesi için herhangi bir uygulama detayı içermemektedir.
Nesneye Yönelik Tasarım
Nesneye yönelik tasarım, sistem tasarımı ve nesne tasarımı olmak üzere iki ana aşamayı içerir.
System Design
Bu aşamada istenilen sistemin eksiksiz mimarisi tasarlanır. Sistem, sınıflar halinde gruplandırılmış etkileşimli nesnelerin bir hiyerarşisinden oluşan bir dizi etkileşimli alt sistemler olarak tasarlanmıştır. Sistem tasarımı hem sistem analiz modeline hem de önerilen sistem mimarisine göre yapılır. Burada sistemdeki süreçlerden çok sistemi oluşturan nesneler üzerinde durulmaktadır.
Object Design
Bu aşamada hem sistem analizi aşamasında geliştirilen modellere hem de sistem tasarım aşamasında tasarlanan mimariye dayalı bir tasarım modeli geliştirilir. Gerekli tüm sınıflar belirlenir. Tasarımcı karar verir:
- sıfırdan yeni sınıflar oluşturulacak,
- mevcut herhangi bir sınıf orijinal formunda kullanılabilir veya
- yeni sınıflar mevcut sınıflardan miras alınmalıdır.
Tanımlanan sınıflar arasındaki ilişkiler kurulur ve sınıfların hiyerarşileri belirlenir. Ayrıca geliştirici, sınıfların iç detaylarını ve ilişkilerini, yani her bir öznitelik için veri yapısını ve işlemler için algoritmaları tasarlar.
Nesneye Yönelik Uygulama ve Test
Bu aşamada nesne tasarımında geliştirilen tasarım modeli, uygun bir programlama dili veya yazılım aracında koda çevrilir. Veritabanları oluşturulur ve özel donanım gereksinimleri belirlenir. Kod şekillendiğinde, koddaki hataları tanımlamak ve kaldırmak için özel teknikler kullanılarak test edilir.
Nesne Tabanlı Sistemlerin Prensipleri
Nesne yönelimli sistemlerin kavramsal çerçevesi, nesne modeline dayanmaktadır. Nesne yönelimli bir sistemde iki öğe kategorisi vardır -
Major Elements- Büyük derken, bir modelin bu unsurlardan herhangi birine sahip olmaması durumunda, nesne yönelimli olmasının sona erdiği kastedilmektedir. Dört ana unsur:
- Abstraction
- Encapsulation
- Modularity
- Hierarchy
Minor Elements- Küçük ile, bu öğelerin yararlı olduğu, ancak nesne modelinin vazgeçilmez bir parçası olmadığı kastedilmektedir. Üç küçük unsur:
- Typing
- Concurrency
- Persistence
Soyutlama
Soyutlama, OOP'deki bir öğenin veya nesnenin temel özelliklerine, gereksiz veya kazara özelliklerini göz ardı ederek odaklanmak anlamına gelir. Temel özellikler, nesnenin kullanıldığı içeriğe bağlıdır.
Grady Booch, soyutlamayı şu şekilde tanımlamıştır:
"Soyutlama, bir nesneyi diğer tüm nesnelerden ayıran ve böylece izleyicinin perspektifine göre net bir şekilde tanımlanmış kavramsal sınırlar sağlayan temel özelliklerini belirtir."
Example - Bir sınıf Öğrenci tasarlandığında, enrolment_number, isim, kurs ve adres nitelikleri dahil edilirken pulse_rate ve size_of_shoe gibi özellikler eğitim kurumunun perspektifiyle alakasız olduğundan elimine edilir.
Kapsülleme
Kapsülleme, bir sınıf içinde hem öznitelikleri hem de yöntemleri birbirine bağlama işlemidir. Kapsülleme yoluyla, bir sınıfın iç detayları dışarıdan gizlenebilir. Sınıf, sınıf tarafından sağlanan hizmetlerin kullanılabileceği kullanıcı arabirimleri sağlayan yöntemlere sahiptir.
Modülerlik
Modülerlik, problemin genel karmaşıklığını azaltmak için bir problemi (programı) bir dizi modüle ayırma sürecidir. Booch, modülerliği şu şekilde tanımlamıştır:
"Modülerlik, bir dizi birleşik ve gevşek bir şekilde bağlanmış modüle ayrıştırılmış bir sistemin özelliğidir."
Modülerlik özünde kapsülleme ile bağlantılıdır. Modülerlik, kapsüllenmiş soyutlamaları modüller içinde yüksek kohezyona sahip gerçek, fiziksel modüllere eşlemenin bir yolu olarak görselleştirilebilir ve bunların modüller arası etkileşimi veya bağlantısı düşüktür.
Hiyerarşi
Grady Booch'un sözleriyle, "Hiyerarşi, soyutlamanın sıralaması veya sıralanmasıdır". Hiyerarşi yoluyla, bir sistem, kendi alt sistemlerine sahip olabilen birbiriyle ilişkili alt sistemlerden oluşabilir ve en küçük seviyeli bileşenlere ulaşılana kadar böyle devam eder. "Böl ve yönet" ilkesini kullanır. Hiyerarşi, kodun yeniden kullanılabilirliğine izin verir.
OOA'daki iki tür hiyerarşi şunlardır:
“IS–A” hierarchy- Kalıtımdaki hiyerarşik ilişkiyi tanımlar, böylece bir süper sınıftan, yine alt sınıflara sahip olabilecek bir dizi alt sınıf türetilebilir. Örneğin, bir Çiçek sınıfından bir Gül sınıfı türetersek, bir gülün çiçektir "olduğunu" söyleyebiliriz.
“PART–OF” hierarchy- Bir sınıfın diğer sınıflardan oluşabileceği kümelenmedeki hiyerarşik ilişkiyi tanımlar. Örneğin, bir çiçek çanak yaprakları, yaprakları, organlarındaki ve karpelden oluşur. Bir taç yaprağının çiçeğin “parçası” olduğu söylenebilir.
Yazıyor
Soyut veri türü teorilerine göre, bir tür, bir dizi öğenin karakterizasyonudur. OOP'de bir sınıf, diğer türlerden farklı özelliklere sahip bir tür olarak görselleştirilir. Yazma, bir nesnenin tek bir sınıf veya türün bir örneği olduğu fikrinin uygulanmasıdır. Ayrıca, farklı türlerdeki nesnelerin genel olarak birbirleriyle değiştirilmemesini zorunlu kılar; ve ancak kesinlikle gerekliyse çok kısıtlı bir şekilde değiştirilebilir.
İki tür yazım:
Strong Typing - Burada, Eiffel programlama dilinde olduğu gibi, bir nesne üzerindeki işlem derleme sırasında kontrol edilir.
Weak Typing- Burada mesajlar herhangi bir sınıfa gönderilebilir. Smalltalk programlama dilinde olduğu gibi, işlem yalnızca yürütme sırasında kontrol edilir.
Eşzamanlılık
İşletim sistemlerindeki eşzamanlılık, birden çok görevi veya işlemi aynı anda gerçekleştirmeye izin verir. Bir sistemde tek bir süreç olduğunda, tek bir kontrol dizisi olduğu söylenir. Bununla birlikte, çoğu sistemde birden fazla iş parçacığı vardır, bazıları aktif, bazıları CPU için bekliyor, bazıları askıya alındı ve bazıları sonlandırıldı. Birden çok CPU'ya sahip sistemler, doğası gereği eşzamanlı kontrol iş parçacıklarına izin verir; ancak tek bir CPU üzerinde çalışan sistemler, eşzamanlılığı sağlamak için iş parçacığına eşit CPU süresi vermek için uygun algoritmalar kullanır.
Nesne yönelimli bir ortamda, aktif ve pasif nesneler vardır. Aktif nesneler, diğer nesnelerin iş parçacıklarıyla eşzamanlı olarak çalışabilen bağımsız denetim iş parçacıkları içerir. Aktif nesneler birbirleriyle ve tamamen sıralı nesnelerle senkronize olur.
Kalıcılık
Bir nesne bir bellek alanını kaplar ve belirli bir süre boyunca var olur. Geleneksel programlamada, bir nesnenin ömrü tipik olarak onu yaratan programın çalıştırılma süresidir. Dosyalarda veya veritabanlarında nesne ömrü, nesneyi oluşturan işlemin süresinden daha uzundur. Bir nesnenin yaratıcısı yok olduktan sonra bile var olmaya devam etmesini sağlayan bu özellik, kalıcılık olarak bilinir.
Yazılım geliştirmenin sistem analizi veya nesneye yönelik analiz aşamasında, sistem gereksinimleri belirlenir, sınıflar belirlenir ve sınıflar arası ilişkiler belirlenir.
Nesneye yönelik analiz için birbiriyle bağlantılı olarak kullanılan üç analiz tekniği, nesne modelleme, dinamik modelleme ve işlevsel modellemedir.
Nesne Modelleme
Nesne modelleme, yazılım sisteminin nesneler açısından statik yapısını geliştirir. Nesneleri, içinde gruplanabilecek nesnelerin sınıflarını ve nesneler arasındaki ilişkileri tanımlar. Ayrıca, her bir sınıfı karakterize eden ana öznitelikleri ve işlemleri tanımlar.
Nesne modelleme süreci aşağıdaki adımlarda görselleştirilebilir -
- Nesneleri tanımlayın ve sınıflar halinde gruplayın
- Sınıflar arasındaki ilişkileri tanımlayın
- Kullanıcı nesnesi modeli diyagramı oluşturun
- Kullanıcı nesnesi niteliklerini tanımlayın
- Sınıflarda yapılması gereken işlemleri tanımlayın
- Gözden geçirme sözlüğü
Dinamik Modelleme
Sistemin statik davranışı incelendikten sonra zamana ve dışsal değişikliklere göre davranışının incelenmesi gerekir. Dinamik modellemenin amacı budur.
Dinamik Modelleme, "bireysel bir nesnenin diğer nesneler tarafından tetiklenen iç olaylara veya dış dünya tarafından tetiklenen harici olaylara, olaylara nasıl tepki verdiğini açıklamanın bir yolu" olarak tanımlanabilir.
Dinamik modelleme süreci aşağıdaki adımlarda görselleştirilebilir -
- Her nesnenin durumlarını tanımlayın
- Olayları tanımlayın ve eylemlerin uygulanabilirliğini analiz edin
- Durum geçiş diyagramlarından oluşan dinamik model diyagramı oluşturun
- Her durumu nesne nitelikleri açısından ifade edin
- Çizilen durum geçiş diyagramlarını doğrulayın
Fonksiyonel Modelleme
Fonksiyonel Modelleme, nesne yönelimli analizin son bileşenidir. İşlevsel model, bir nesne içinde gerçekleştirilen işlemleri ve yöntemler arasında hareket ederken verilerin nasıl değiştiğini gösterir. Nesne modelleme işlemlerinin anlamını ve dinamik modelleme eylemlerini belirtir. Fonksiyonel model, geleneksel yapılandırılmış analizin veri akış diyagramına karşılık gelir.
Fonksiyonel modelleme süreci aşağıdaki adımlarda görselleştirilebilir -
- Tüm giriş ve çıkışları tanımlayın
- İşlevsel bağımlılıkları gösteren veri akışı diyagramları oluşturun
- Her işlevin amacını belirtin
- Kısıtlamaları belirleyin
- Optimizasyon kriterlerini belirtin
Yapılandırılmış Analiz ve Nesne Yönelimli Analiz
Yapılandırılmış Analiz / Yapılandırılmış Tasarım (SASD) yaklaşımı, şelale modeline dayalı geleneksel yazılım geliştirme yaklaşımıdır. SASD kullanan bir sistemin geliştirme aşamaları şunlardır:
- Fizibilite çalışması
- Gereksinim Analizi ve Spesifikasyon
- Sistem tasarımı
- Implementation
- Uygulama Sonrası İnceleme
Şimdi, yapılandırılmış analiz yaklaşımı ve nesne yönelimli analiz yaklaşımının göreceli avantaj ve dezavantajlarına bakacağız.
Nesne Yönelimli Analizin Avantajları / Dezavantajları
Avantajlar | Dezavantajları |
---|---|
Yapılandırılmış Analizde olduğu gibi prosedürler yerine verilere odaklanır. | İşlevsellik nesneler içinde sınırlandırılmıştır. Bu, doğası gereği yordamsal veya hesaplamaya dayalı sistemler için bir sorun oluşturabilir. |
Kapsülleme ve veri gizleme ilkeleri, geliştiricinin sistemin diğer bölümleri tarafından tahrif edilemeyecek sistemler geliştirmesine yardımcı olur. | Hangi nesnelerin optimal bir sistem tasarımı oluşturacağını belirleyemez. |
Kapsülleme ve veri gizleme ilkeleri, geliştiricinin sistemin diğer bölümleri tarafından tahrif edilemeyecek sistemler geliştirmesine yardımcı olur. | Nesne yönelimli modeller, sistemdeki nesneler arasındaki iletişimi kolayca göstermez. |
Modülerlik sayesinde yazılım karmaşıklığının etkin bir şekilde yönetilmesini sağlar. | Nesneler arasındaki tüm arayüzler tek bir diyagramda gösterilemez. |
Yapılandırılmış analizi izleyen sistemlere göre küçükten büyüğe sistemlere daha büyük bir kolaylıkla yükseltilebilir. |
Yapılandırılmış Analizin Avantajları / Dezavantajları
Avantajlar | Dezavantajları |
---|---|
Nesne yönelimli analizin aşağıdan yukarıya yaklaşımının aksine yukarıdan aşağıya bir yaklaşım izlediği için, OOA'dan daha kolay anlaşılabilir. | Geleneksel yapılandırılmış analiz modellerinde, bir aşama bir sonraki aşamadan önce tamamlanmalıdır. Bu, özellikle hatalar ortaya çıkarsa veya gereksinimler değişirse, tasarımda bir sorun oluşturur. |
İşlevselliğe dayanmaktadır. Genel amaç belirlenir ve ardından yazılımı geliştirmek için işlevsel ayrıştırma yapılır. Vurgu, yalnızca sistemin daha iyi anlaşılmasını sağlamakla kalmaz, aynı zamanda daha eksiksiz sistemler üretir. | Sistemin kurulumunun ilk maliyeti yüksektir, çünkü tüm sistemin bir kerede tasarlanması gerekir ve daha sonra işlevsellik eklemek için çok az seçenek bırakılır. |
İçerisindeki özellikler basit bir İngilizce dilinde yazılmıştır ve bu nedenle teknik olmayan personel tarafından daha kolay analiz edilebilir. | Kodun yeniden kullanılabilirliğini desteklemez. Dolayısıyla, geliştirmenin zamanı ve maliyeti doğası gereği yüksektir. |
Dinamik model, bir sistemin zamana bağlı yönlerini temsil eder. Bir sistemdeki nesnelerin durumlarındaki zamansal değişikliklerle ilgilenir. Ana kavramlar -
Durum, bir nesnenin ömrü boyunca belirli bir durumda olan durumdur.
Geçiş, eyalette bir değişiklik
Olay, geçişleri tetikleyen bir olay
Eylem, bir olay nedeniyle meydana gelen kesintisiz ve atomik bir hesaplama ve
Geçişlerin eşzamanlılığı.
Bir durum makinesi, bir nesnenin davranışını, hem bazı olaylar hem de olaylar nedeniyle meydana gelen eylemler nedeniyle ömrü boyunca bir dizi durumdan geçerken modeller. Bir durum makinesi, bir durum geçiş diyagramı aracılığıyla grafik olarak temsil edilir.
Durumlar ve Devlet Geçişleri
Durum
Durum, nesnenin belirli bir zaman diliminde sahip olduğu niteliklerin değerleriyle verilen bir soyutlamadır. Belirli koşulları yerine getirdiği, belirli faaliyetleri gerçekleştirdiği veya belirli olayların meydana gelmesini beklediği, bir nesnenin ömrü boyunca sınırlı bir süre boyunca meydana gelen bir durumdur. Durum geçiş diyagramlarında, bir durum yuvarlatılmış dikdörtgenlerle temsil edilir.
Bir eyaletin bölümleri
Name- Bir dizge bir durumu diğerinden ayırır. Bir eyaletin herhangi bir adı olmayabilir.
Entry/Exit Actions - Devlete giriş ve çıkışta yapılan faaliyetleri ifade eder.
Internal Transitions - Durumda değişikliğe neden olmayan bir durum içindeki değişiklikler.
Sub–states - Eyaletler içindeki eyaletler.
İlk ve Son Durumlar
Bir nesnenin varsayılan başlangıç durumuna, başlangıç durumu denir. Son durum, durum makinesinin yürütülmesinin tamamlandığını gösterir. Başlangıç ve son durumlar sözde durumlardır ve ad dışında normal bir durumun bölümlerine sahip olmayabilir. Durum geçiş diyagramlarında, başlangıç durumu dolu siyah bir daire ile temsil edilir. Son durum, başka bir doldurulmamış siyah daire içinde çevrelenmiş dolu siyah bir daire ile temsil edilir.
Geçiş
Bir geçiş, bir nesnenin durumundaki bir değişikliği ifade eder. Bir olay meydana geldiğinde bir nesne belirli bir durumdaysa, nesne belirli koşullara tabi olarak belirli etkinlikleri gerçekleştirebilir ve durumu değiştirebilir. Bu durumda, bir durum geçişinin meydana geldiği söylenir. Geçiş, ilk durum ile yeni durum arasındaki ilişkiyi verir. Bir geçiş, kaynak durumdan hedef duruma doğru katı yönlendirilmiş bir yay ile grafiksel olarak temsil edilir.
Bir geçişin beş bölümü -
Source State - Geçişten etkilenen eyalet.
Event Trigger - Koruma koşulu karşılanırsa, kaynak durumdaki bir nesnenin geçişe maruz kalması nedeniyle meydana gelen olay.
Guard Condition - True ise, olay tetikleyicisini alırken geçişe neden olan bir Boole ifadesi.
Action - Bir olay nedeniyle kaynak nesnede gerçekleşen kesintisiz ve atomik bir hesaplama.
Target State - Geçişin tamamlanmasından sonraki hedef durum.
Example
Bir kişinin X noktasından Y noktasına taksiyle gittiğini varsayalım. Kişinin durumları şunlar olabilir: Beklemek (taksi bekliyor), Binmek (taksisi var ve içinde seyahat ediyor) ve Ulaştı ( hedef). Aşağıdaki şekil durum geçişini göstermektedir.
Etkinlikler
Olaylar, bir nesnenin veya bir nesne grubunun durum geçişini tetikleyebilen bazı olaylardır. Olayların zaman ve mekanda bir konumu vardır, ancak kendisiyle ilişkili bir zaman periyodu yoktur. Olaylar genellikle bazı eylemlerle ilişkilendirilir.
Olaylara örnek olarak fare tıklaması, tuşa basma, kesme, yığın taşması vb. Verilebilir.
Durum diyagramlarında geçişleri tetikleyen olaylar geçiş yayının yanında yazılır.
Example
Yukarıdaki şekilde gösterilen örnek dikkate alındığında Bekleme durumundan Binicilik durumuna geçiş kişi taksiye bindiğinde gerçekleşir. Aynı şekilde varış noktasına ulaştığında da son duruma ulaşılır. Bu iki oluşum, Get_Taxi ve Reach_Destination olayları olarak adlandırılabilir. Aşağıdaki şekil bir durum makinesindeki olayları göstermektedir.
Harici ve Dahili Olaylar
Harici olaylar, sistemin bir kullanıcısından sistem içindeki nesnelere geçen olaylardır. Örneğin, kullanıcının fare tıklaması veya tuşa basması harici olaylardır.
Dahili olaylar, bir sistem içindeki bir nesneden başka bir nesneye geçen olaylardır. Örneğin, yığın taşması, bölme hatası vb.
Ertelenen Olaylar
Ertelenmiş olaylar, mevcut durumdaki nesne tarafından hemen işlenmeyen, ancak daha sonraki bir zamanda başka bir durumda nesne tarafından işlenebilmeleri için bir kuyrukta sıraya dizilen olaylardır.
Etkinlik Sınıfları
Olay sınıfı, ortak yapı ve davranışa sahip bir olay grubunu belirtir. Nesne sınıflarında olduğu gibi, olay sınıfları da hiyerarşik bir yapıda organize edilebilir. Etkinlik sınıfları, kendileriyle ilişkili özniteliklere sahip olabilir, zaman örtük bir özniteliktir. Örneğin, aşağıdaki sınıfa ayırabileceğimiz bir havayolunun uçuşunun kalkış olaylarını ele alabiliriz -
Flight_Departs (Flight_No, From_City, To_City, Route)
Hareketler
Aktivite
Etkinlik, bir nesnenin belirli bir zaman dilimi gerektiren durumları üzerine yapılan bir işlemdir. Kesilebilen bir sistem içinde devam eden infazlardır. Aktiviteler, bir aktiviteden diğerine akışı gösteren aktivite diyagramlarında gösterilir.
Aksiyon
Eylem, belirli olayların bir sonucu olarak yürütülen atomik bir işlemdir. Atomik ifadesiyle, eylemlerin kesintisiz olduğu kastedilmektedir, yani bir eylem yürütülmeye başlarsa, herhangi bir olay tarafından kesintiye uğramadan tamamlanmaya başlar. Eylem, bir olayın tetiklendiği bir nesne üzerinde veya bu nesne tarafından görülebilen diğer nesneler üzerinde çalışabilir. Bir dizi eylem bir faaliyet içerir.
Giriş ve Çıkış İşlemleri
Giriş eylemi, o duruma yol açan geçişe bakılmaksızın, bir duruma girerken gerçekleştirilen eylemdir.
Aynı şekilde, bir durumdan çıkarken, o durumdan çıkan geçişe bakılmaksızın gerçekleştirilen eyleme, çıkış eylemi denir.
Senaryo
Senaryo, belirli bir eylem dizisinin açıklamasıdır. Belirli bir eylem serisinden geçen nesnelerin davranışını gösterir. Birincil senaryolar temel sekansları gösterir ve ikincil senaryolar alternatif sekansları gösterir.
Dinamik Modelleme için Diyagramlar
Dinamik modelleme için kullanılan iki ana diyagram vardır -
Etkileşim Diyagramları
Etkileşim diyagramları, farklı nesneler arasındaki dinamik davranışı tanımlar. Bir dizi nesneden, bunların ilişkilerinden ve nesnelerin gönderdiği ve aldığı mesajdan oluşur. Böylece, etkileşim, birbiriyle ilişkili bir grup nesnenin davranışını modeller. İki tür etkileşim diyagramı şunlardır:
Sequence Diagram - Mesajların zamansal sırasını tablo şeklinde temsil eder.
Collaboration Diagram - Köşeler ve yaylar aracılığıyla mesaj gönderen ve alan nesnelerin yapısal organizasyonunu temsil eder.
Durum Geçiş Şeması
Durum geçiş diyagramları veya durum makineleri, tek bir nesnenin dinamik davranışını tanımlar. Bir nesnenin ömrü boyunca geçtiği durum dizilerini, durumların geçişlerini, geçişe neden olan olay ve koşulları ve olaylara bağlı tepkileri gösterir.
Olayların Eşzamanlılığı
Bir sistemde iki tür eşzamanlılık mevcut olabilir. Onlar -
Sistem Eş Zamanlılığı
Burada eşzamanlılık, sistem düzeyinde modellenmiştir. Genel sistem, her bir durum makinesinin diğerleriyle eşzamanlı olarak çalıştığı durum makinelerinin bir araya getirilmesi olarak modellenmiştir.
Bir Nesne İçinde Eş Zamanlılık
Burada, bir nesne eşzamanlı olaylar yayınlayabilir. Bir nesne, alt durumlardan oluşan durumlara sahip olabilir ve alt durumların her birinde eşzamanlı olaylar meydana gelebilir.
Bir nesne içindeki eşzamanlılıkla ilgili kavramlar aşağıdaki gibidir -
Basit ve Bileşik Durumlar
Basit bir devletin alt yapısı yoktur. İç içe geçmiş daha basit durumlara sahip bir duruma bileşik durum denir. Alt durum, başka bir durumun içine yerleştirilmiş bir durumdur. Genellikle bir durum makinesinin karmaşıklığını azaltmak için kullanılır. Alt durumlar, herhangi bir sayıda seviyeye yerleştirilebilir.
Bileşik durumlar, sıralı alt durumlara veya eşzamanlı alt durumlara sahip olabilir.
Sıralı Alt durumlar
Sıralı alt durumlarda, yürütme kontrolü, bir alt durumdan diğer bir alt duruma sıralı bir şekilde geçer. Bu durum makinelerinde en fazla bir ilk durum ve bir son durum vardır.
Aşağıdaki şekil, sıralı alt durumlar kavramını göstermektedir.
Eşzamanlı Alt devletler
Eşzamanlı alt durumlarda, alt durumlar paralel olarak çalışır veya başka bir deyişle, her durum kendi içinde eşzamanlı olarak çalışan durum makinelerine sahiptir. Durum makinelerinin her birinin kendi başlangıç ve son durumları vardır. Bir eşzamanlı alt durum son durumuna diğerinden önce ulaşırsa, kontrol son durumunda bekler. Tüm iç içe geçmiş durum makineleri son durumlarına ulaştığında, alt durumlar tek bir akışa geri döner.
Aşağıdaki şekil, eşzamanlı alt durumlar kavramını göstermektedir.
Fonksiyonel Modelleme, nesneye yönelik analiz modelinin süreç perspektifini ve sistemin ne yapması gerektiğine dair genel bir bakış sağlar. Veri Akış Diyagramları (DFD'ler) yardımıyla sistemdeki iç süreçlerin işlevini tanımlar. Veri değerlerinin, hesaplandıklarında nasıl türetildiklerini veya neden hesaplanmaları gerektiğini belirtmeden fonksiyonel türetilmesini gösterir.
Veri Akış Şemaları
Fonksiyonel Modelleme, DFD'lerin bir hiyerarşisi aracılığıyla temsil edilir. DFD, sisteme girişleri, girişler üzerindeki işlemleri, sistemin çıktılarını ve dahili veri depolarını gösteren bir sistemin grafiksel bir temsilidir. DFD'ler, nesneler veya sistem üzerinde gerçekleştirilen dönüşümler veya hesaplamalar dizisini ve dönüşümü etkileyen harici kontrolleri ve nesneleri gösterir.
Rumbaugh vd. DFD'yi şu şekilde tanımlamışlardır: "Bir veri akış diyagramı, nesnelerdeki kaynaklarından gelen veri değerlerinin akışını, onları diğer nesneler üzerindeki hedeflerine dönüştüren süreçler yoluyla gösteren bir grafiktir."
Bir DFD'nin dört ana bölümü şunlardır:
- Processes,
- Veri Akışları,
- Aktörler ve
- Veri Depoları.
DFD'nin diğer kısımları -
- Kısıtlamalar ve
- Kontrol Akışları.
DFD'nin özellikleri
Süreçler
Süreçler, veri değerlerini dönüştüren hesaplama etkinlikleridir. Bütün bir sistem üst düzey bir süreç olarak görselleştirilebilir. Bir işlem ayrıca daha küçük bileşenlere bölünebilir. En düşük seviyeli süreç basit bir işlev olabilir.
Representation in DFD - Bir süreç, içinde adı yazılı olan bir elips olarak temsil edilir ve sabit sayıda girdi ve çıktı verisi değeri içerir.
Example - Aşağıdaki şekil, iki tamsayıyı giriş olarak kabul eden ve bunların HCF (en yüksek ortak faktör) ve LCM (en az ortak çoklu) çıkışlarını veren bir İşlem Compute_HCF_LCM'yi göstermektedir.
Veri Akışları
Veri akışı, iki işlem arasındaki veri akışını temsil eder. Bir aktör ile bir süreç arasında veya bir veri deposu ile bir süreç arasında olabilir. Bir veri akışı, hesaplamanın bir noktasında bir veri öğesinin değerini belirtir. Bu değer, veri akışı tarafından değiştirilmez.
Representation in DFD - Bir veri akışı, taşıdığı veri öğesinin adıyla etiketlenmiş, yönlendirilmiş bir yay veya bir okla temsil edilir.
Yukarıdaki şekilde, Tamsayı_a ve Tamsayı_b, sürece giriş veri akışlarını temsil ederken, LCM ve HCF çıktı veri akışlarıdır.
Aşağıdaki durumlarda bir veri akışı çatallanabilir -
Çıkış değeri, aşağıdaki şekilde gösterildiği gibi birkaç yere gönderilir. Burada, aynı değeri gösterdikleri için çıkış okları etiketsizdir.
Veri akışı toplu bir değer içerir ve bileşenlerin her biri aşağıdaki şekilde gösterildiği gibi farklı yerlere gönderilir. Burada çatallı bileşenlerin her biri etiketlenmiştir.
Aktörler
Aktörler, ya veri üreterek ve sisteme girerek ya da sistem tarafından üretilen verileri tüketerek sistemle etkileşime giren aktif nesnelerdir. Başka bir deyişle, aktörler verilerin kaynağı ve yutağı olarak hizmet eder.
Representation in DFD- Bir oyuncu bir dikdörtgenle temsil edilir. Aktörler giriş ve çıkışlara bağlıdır ve DFD'nin sınırında yer alır.
Example - Aşağıdaki şekil, bir sayaç satış sistemindeki aktörler, Müşteri ve Sales_Clerk'i göstermektedir.
Veri Depoları
Veri depoları, bir veri deposu görevi gören pasif nesnelerdir. Oyuncuların aksine herhangi bir işlem yapamazlar. Verileri saklamak ve saklanan verileri almak için kullanılırlar. Bir veri yapısını, bir disk dosyasını veya bir veritabanındaki bir tabloyu temsil ederler.
Representation in DFD- Bir veri deposu, veri deposunun adını içeren iki paralel çizgi ile temsil edilir. Her veri deposu en az bir işleme bağlıdır. Giriş okları, veri deposunun içeriğini değiştirmek için bilgiler içerirken, çıkış okları veri deposundan alınan bilgileri içerir. Bilginin bir kısmı alınacağı zaman, çıktı oku etiketlenir. Etiketsiz bir ok, tam veri almayı gösterir. İki yönlü bir ok, hem alma hem de güncelleme anlamına gelir.
Example- Aşağıdaki şekil, tüm satışların ayrıntılarını saklayan Sales_Record veri deposunu göstermektedir. Veri deposuna giriş, kalem, fatura tutarı, tarih vb. Gibi satış ayrıntılarından oluşur. Ortalama satışları bulmak için süreç, satış kayıtlarını alır ve ortalamayı hesaplar.
Kısıtlamalar
Kısıtlamalar, zaman içinde yerine getirilmesi gereken koşulları veya kısıtlamaları belirtir. Yeni kuralların eklenmesine veya mevcut olanların değiştirilmesine izin verirler. Kısıtlamalar, nesne yönelimli analizin üç modelinde de görünebilir.
Nesne Modellemede, kısıtlamalar nesneler arasındaki ilişkiyi tanımlar. Bir nesnenin farklı zamanlarda alabileceği farklı değerler arasındaki ilişkiyi de tanımlayabilirler.
Dinamik Modellemede, kısıtlamalar, farklı nesnelerin durumları ve olayları arasındaki ilişkiyi tanımlar.
Fonksiyonel Modellemede kısıtlar, dönüşümler ve hesaplamalar üzerindeki kısıtlamaları tanımlar.
Representation - Bir kısıtlama, kaşlı ayraçlar içinde bir dizge olarak oluşturulur.
Example- Aşağıdaki şekil, satış departmanının tüm çalışanlarına teşvik vermeye ve İK departmanının tüm çalışanlarının maaşını artırmaya karar veren bir şirketin çalışanlarının maaşını hesaplamak için DFD'nin bir bölümünü göstermektedir. {Dept: Sales} kısıtlamasının sadece departman satış ise teşvikin hesaplanmasına neden olduğu ve {Dept: HR} kısıtının ise artışın sadece departman İK ise hesaplanmasına neden olduğu görülmektedir.
Kontrol Akışları
Bir süreç, belirli bir Boolean değeriyle ilişkilendirilebilir ve yalnızca değer doğruysa değerlendirilir, ancak bu sürece doğrudan bir girdi değildir. Bu Boole değerlerine kontrol akışları denir.
Representation in DFD - Kontrol akışları, Boole değerini üreten süreçten onlar tarafından kontrol edilen sürece kadar noktalı bir yay ile temsil edilir.
Example- Aşağıdaki şekil, aritmetik bölme için bir DFD'yi temsil etmektedir. Bölen, sıfır olmayan için test edilir. Sıfır değilse, OK kontrol akışı True değerine sahiptir ve daha sonra Bölme işlemi Bölümü ve Kalanı hesaplar.
Bir Sistemin DFD Modelini Geliştirme
Bir sistemin DFD modelini geliştirmek için, bir DFD hiyerarşisi oluşturulur. Üst düzey DFD, tek bir süreçten ve bununla etkileşime giren aktörlerden oluşur.
Birbirini izleyen her alt düzeyde, daha fazla ayrıntı kademeli olarak dahil edilir. Bir süreç alt süreçlere ayrıştırılır, alt süreçler arasındaki veri akışları belirlenir, kontrol akışları belirlenir ve veri depoları tanımlanır. Bir süreci ayrıştırırken, sürece giren veya çıkan veri akışı, DFD'nin bir sonraki düzeyindeki veri akışıyla eşleşmelidir.
Example- Bir toptan satış mağazasının işlemlerini otomatikleştiren bir yazılım sistemi olan Toptancı Yazılımı düşünelim. Mağaza toplu olarak satılır ve tüccarlar ve perakende mağaza sahiplerinden oluşan bir müşteri kitlesine sahiptir. Her müşteriden kendi ayrıntılarıyla kaydolması istenir ve kendisine benzersiz bir müşteri kodu, C_Code verilir. Bir satış yapıldıktan sonra, mağaza ayrıntılarını kaydeder ve malları sevkiyat için gönderir. Mağaza her yıl müşterilerine toplam satışa ve mal sahibinin kararına bağlı olarak bir gümüş para veya bir altın madeni paradan oluşan Noel hediyeleri dağıtır.
Toptan Satış Yazılımının işlevsel modeli aşağıda verilmiştir. Aşağıdaki şekil üst düzey DFD'yi göstermektedir. Yazılımı tek bir süreç olarak ve onunla etkileşime giren aktörleri gösterir.
Sistemdeki aktörler -
- Customers
- Salesperson
- Proprietor
Bir sonraki seviye DFD'de, aşağıdaki şekilde gösterildiği gibi, sistemin ana süreçleri tanımlanır, veri depoları tanımlanır ve süreçlerin aktörlerle etkileşimi ve veri depoları oluşturulur.
Sistemde üç süreç tanımlanabilir, bunlar:
- Müşterileri Kaydet
- Satış Süreci
- Kesin Hediyeler
Gerekli olacak veri depoları şunlardır:
- Müşteri detayları
- Satış Ayrıntıları
- Hediye Detayları
Aşağıdaki şekil Müşteriyi Kaydet işleminin ayrıntılarını gösterir. İçinde üç işlem vardır: Ayrıntıları Doğrula, Kod Oluşturma ve Müşteri Ayrıntılarını Güncelle. Müşterinin detayları girildiğinde doğrulanır. Veriler doğruysa, C_Code oluşturulur ve Müşteri Ayrıntıları veri deposu güncellenir.
Aşağıdaki şekil, Kesin Hediyeler sürecinin genişlemesini göstermektedir. İçinde Toplam Satışı Bul ve Hediye Coin Türüne Karar Ver olmak üzere iki süreci vardır. Toplam Satış Bul işlemi, her müşteriye karşılık gelen yıllık toplam satışları hesaplar ve verileri kaydeder. Bu kayıt ve mal sahibinin kararı girdi olarak alınarak, hediye jetonları, Hediye Jetonuna Karar Verme işlemi ile tahsis edilir.
DFD'nin Avantaj ve Dezavantajları
Avantajlar | Dezavantajları |
---|---|
DFD'ler bir sistemin sınırlarını tasvir eder ve bu nedenle, harici nesneler ile sistem içindeki işlemler arasındaki ilişkiyi tasvir etmede yardımcı olur. | DFD'lerin oluşturulması uzun zaman alır ve bu, pratik amaçlar için uygun olmayabilir. |
Kullanıcıların sistem hakkında bilgi sahibi olmalarına yardımcı olurlar. | DFD'ler, zamana bağlı davranış hakkında herhangi bir bilgi sağlamaz, yani dönüşümlerin ne zaman yapıldığını belirtmezler. |
Grafiksel temsil, programcıların bir sistem geliştirmesi için bir taslak görevi görür. | Hesaplamaların sıklığına veya hesaplamaların nedenlerine ışık tutmazlar. |
DFD'ler, sistem süreçleri hakkında ayrıntılı bilgi sağlar. | DFD'lerin hazırlanması, önemli ölçüde uzmanlık gerektiren karmaşık bir süreçtir. Ayrıca, teknik bilgisi olmayan bir kişinin anlaması zordur. |
Sistem dokümantasyonunun bir parçası olarak kullanılırlar. | Hazırlama yöntemi özneldir ve geniş kapsamın belirsiz olmasını sağlar. |
Nesne, Dinamik ve İşlevsel Modeller arasındaki İlişki
Nesne Modeli, Dinamik Model ve İşlevsel Model, eksiksiz bir Nesne Yönelimli Analiz için birbirini tamamlar.
Nesne modelleme, yazılım sisteminin nesneler açısından statik yapısını geliştirir. Böylece bir sistemin “uygulayıcılarını” gösterir.
Dinamik Modelleme, dış olaylara yanıt olarak nesnelerin zamansal davranışını geliştirir. Nesneler üzerinde gerçekleştirilen işlemlerin sırasını gösterir.
İşlevsel model, sistemin ne yapması gerektiğine dair bir genel bakış sağlar.
Fonksiyonel Model ve Nesne Modeli
İşlevsel Modelin nesne modeli açısından dört ana bölümü şunlardır:
Process - Süreçler, uygulanması gereken nesnelerin yöntemlerini ifade eder.
Actors - Aktörler, nesne modelindeki nesnelerdir.
Data Stores - Bunlar, nesne modelindeki nesneler veya nesnelerin nitelikleridir.
Data Flows- Aktörlere veya aktörlerden veri akışları, nesneler üzerindeki veya nesneler tarafından gerçekleştirilen işlemleri temsil eder. Veri depolarına giden veya gelen veri akışları, sorguları veya güncellemeleri temsil eder.
Fonksiyonel Model ve Dinamik Model
Dinamik model, işlemlerin ne zaman yapıldığını belirtirken, fonksiyonel model bunların nasıl gerçekleştirildiğini ve hangi argümanların gerekli olduğunu belirtir. Aktörler aktif nesneler olduğundan, dinamik model ne zaman hareket ettiğini belirtmelidir. Veri depoları pasif nesnelerdir ve yalnızca güncellemelere ve sorgulara yanıt verirler; bu nedenle dinamik modelin ne zaman hareket edeceklerini belirtmesi gerekmez.
Nesne Modeli ve Dinamik Model
Dinamik model, nesnelerin durumunu ve olayların oluşumunda gerçekleştirilen işlemleri ve durumlardaki sonraki değişiklikleri gösterir. Değişikliklerin bir sonucu olarak nesnenin durumu, nesne modelinde gösterilir.
Birleşik Modelleme Dili (UML), bir yazılım sisteminin planını yazmak için standart bir yol sağlayan OOAD için bir grafik dilidir. Nesne yönelimli bir sistemin yapıtlarını görselleştirmeye, belirlemeye, inşa etmeye ve belgelemeye yardımcı olur. Karmaşık bir sistemdeki yapıları ve ilişkileri tasvir etmek için kullanılır.
Kısa Tarih
1990'larda, Grady Booch tarafından OOAD tekniği, James Rumbaugh tarafından OMT (Nesne Modelleme Tekniği) ve Ivar Jacobson tarafından OOSE (Nesne Yönelimli Yazılım Mühendisliği) olmak üzere çeşitli tekniklerin bir karışımı olarak geliştirilmiştir. UML, OOAD'ın anlamsal modellerini, sözdizimsel notasyonlarını ve diyagramlarını standartlaştırmaya çalıştı.
UML'deki Sistemler ve Modeller
System- Belirli hedeflere ulaşmak için organize edilmiş bir dizi unsur bir sistem oluşturur. Sistemler genellikle alt sistemlere bölünür ve bir dizi modelle tanımlanır.
Model - Model, sistemin daha iyi anlaşılması için oluşturulan basitleştirilmiş, eksiksiz ve tutarlı bir sistem soyutlamasıdır.
View - Görünüm, bir sistem modelinin belirli bir perspektiften izdüşümüdür.
UML'nin Kavramsal Modeli
UML'nin Kavramsal Modeli, üç ana unsuru kapsar -
- Temel yapı taşları
- Rules
- Ortak mekanizmalar
Temel Yapı Taşları
UML'nin üç yapı taşı şunlardır:
- Things
- Relationships
- Diagrams
Bir şeyler
UML'de dört tür şey vardır:
Structural Things- Bunlar, fiziksel veya kavramsal olabilecek statik öğeleri temsil eden UML modellerinin isimleridir. Yapısal şeyler; sınıf, arayüz, işbirliği, kullanım durumu, aktif sınıf, bileşenler ve düğümlerdir.
Behavioral Things- Bunlar, UML modellerinin zaman ve mekândaki dinamik davranışı temsil eden fiilleridir. İki tür davranışsal şey etkileşim ve durum makinesidir.
Grouping Things- UML modellerinin organizasyonel kısımlarını oluştururlar. Yalnızca bir tür gruplama olayı vardır, yani paket.
Annotational Things - Bunlar, öğeleri tanımlamak için uygulanan yorumları temsil eden UML modellerindeki açıklamalardır.
İlişkiler
İlişkiler, şeyler arasındaki bağlantıdır. UML'de temsil edilebilecek dört tür ilişki şunlardır:
Dependency- Bu, iki şey arasındaki anlamsal bir ilişkidir, öyle ki bir şeydeki bir değişiklik diğerinde bir değişiklik getirir. İlki bağımsız şey, ikincisi bağımlı şeydir.
Association - Bu, ortak yapıya ve ortak davranışa sahip bir grup bağlantıyı temsil eden yapısal bir ilişkidir.
Generalization - Bu, alt sınıfların yapı ve davranışı süper sınıflardan devraldığı bir genelleme / uzmanlaşma ilişkisini temsil eder.
Realization - Bu, iki veya daha fazla sınıflandırıcı arasındaki anlamsal bir ilişkidir, öyle ki bir sınıflandırıcı diğer sınıflandırıcıların uymayı garantilediği bir sözleşme yapar.
Diyagramlar
Diyagram, bir sistemin grafik temsilidir. Genellikle bir grafik biçiminde bir grup unsurdan oluşur. UML toplamda dokuz diyagram içerir, yani -
- Sınıf diyagramı
- Nesne Diyagramı
- Kullanım Şeması
- Sıra Diyagramı
- İşbirliği Şeması
- Durum Şeması
- Etkinlik şeması
- Bileşen Şeması
- Dağıtım Şeması
Kurallar
UML, modellerin anlamsal olarak kendi kendine tutarlı olması ve sistemdeki diğer modellerle uyumlu bir şekilde ilişkilendirilmesi için bir dizi kurala sahiptir. UML, aşağıdakiler için anlamsal kurallara sahiptir -
- Names
- Scope
- Visibility
- Integrity
- Execution
Ortak Mekanizmalar
UML'nin dört ortak mekanizması vardır -
- Specifications
- Adornments
- Ortak Bölümler
- Genişletilebilirlik Mekanizmaları
Teknik Özellikler
UML'de, her grafiksel gösterimin arkasında, sözdizimini ve anlambilimini belirten bir metinsel ifade vardır. Bunlar özelliklerdir. Spesifikasyonlar, bir sistemin tüm parçalarını ve farklı yollar arasındaki ilişkiyi içeren anlamsal bir arka plan sağlar.
Süslemeler
UML'deki her öğenin benzersiz bir grafik gösterimi vardır. Ayrıca, bir unsurun isim, kapsam, görünürlük gibi önemli yönlerini temsil eden gösterimler de vardır.
Ortak Bölümler
Nesneye yönelik sistemler birçok şekilde bölünebilir. Bölmenin iki yaygın yolu şunlardır:
Division of classes and objects- Sınıf, bir grup benzer nesnenin soyutlamasıdır. Nesne, sistemde fiili varlığa sahip olan somut örnektir.
Division of Interface and Implementation- Bir arayüz, etkileşim kurallarını tanımlar. Uygulama, arayüzde tanımlanan kuralların somut olarak gerçekleştirilmesidir.
Genişletilebilirlik Mekanizmaları
UML, açık uçlu bir dildir. Bir sistemin gereksinimlerine uyacak şekilde UML'nin yeteneklerini kontrollü bir şekilde genişletmek mümkündür. Genişletilebilirlik mekanizmaları -
Stereotypes - Mevcut olanlardan yeni yapı bloklarının oluşturulabileceği UML'nin kelime dağarcığını genişletir.
Tagged Values - UML yapı taşlarının özelliklerini genişletir.
Constraints - UML yapı taşlarının anlamlarını genişletir.
UML, yapı bloklarının her biri için özel gösterimler tanımlar.
Sınıf
Bir sınıf, üç bölümden oluşan bir dikdörtgenle temsil edilir -
- sınıfın adını içeren üst bölüm
- sınıf özniteliklerini içeren orta bölüm
- sınıfın işlemlerini temsil eden alt bölüm
Özniteliklerin ve işlemlerin görünürlüğü aşağıdaki şekillerde gösterilebilir -
Public- Sistemin herhangi bir yerinden halka açık bir üye görülebilir. Sınıf diyagramında, '+' sembolü ile başlar.
Private- Özel bir üye yalnızca sınıfın içinden görülebilir. Sınıf dışından erişilemez. Özel bir üye '-' sembolü ile başlar.
Protected- Korumalı bir üye, sınıfın içinden ve bu sınıftan miras alınan alt sınıflardan görülebilir, ancak dışarıdan görünmez. Başına '#' sembolü gelir.
Soyut bir sınıfın sınıf adı italik olarak yazılmıştır.
Example- Daha önce tanıtılan Circle sınıfını ele alalım. Circle'ın nitelikleri x-coord, y-coord ve radius'tur. İşlemler findArea (), findCircumference () ve scale () şeklindedir. X-coord ve y-coord'un özel veri üyeleri olduğunu, radius'un korumalı bir veri üyesi olduğunu ve üye işlevlerinin herkese açık olduğunu varsayalım. Aşağıdaki şekil sınıfın şematik temsilini vermektedir.
Nesne
Bir nesne, iki bölümden oluşan bir dikdörtgen olarak temsil edilir -
Üst bölüm, nesnenin adını, bir örneği olduğu sınıfın veya paketin adını içerir. İsim aşağıdaki biçimleri alır -
object-name - sınıf adı
object-name - sınıf-adı :: paket-adı
class-name - anonim nesneler olması durumunda
Alt bölüm, özniteliklerin değerlerini temsil eder. Öznitelik-isim = değer biçimini alır.
Bazen nesneler yuvarlatılmış dikdörtgenler kullanılarak temsil edilir.
Example- Circle sınıfının c1 adlı bir nesnesini ele alalım. C1'in merkezinin (2, 3) 'de ve c1'in yarıçapının 5 olduğunu varsayıyoruz. Aşağıdaki şekil nesneyi göstermektedir.
Bileşen
Bir bileşen, sistemin bir dizi arayüze uyan ve bunların gerçekleştirilmesini sağlayan fiziksel ve değiştirilebilir bir parçasıdır. Sınıflar ve arayüzler gibi öğelerin fiziksel paketlemesini temsil eder.
Notation - UML diyagramlarında, bir bileşen aşağıdaki şekilde gösterildiği gibi sekmeleri olan bir dikdörtgen ile temsil edilir.
Arayüz
Arayüz, bir sınıfın veya bileşenin yöntemlerinin bir koleksiyonudur. Sınıf veya bileşen tarafından sağlanabilecek hizmet setini belirtir.
Notation- Genel olarak bir arayüz, ismiyle birlikte daire şeklinde çizilir. Arayüz hemen hemen her zaman, onu gerçekleştiren sınıfa veya bileşene eklenir. Aşağıdaki şekil bir arayüzün gösterimini vermektedir.
Paket
Bir paket, organize bir unsurlar grubudur. Bir paket, içindeki sınıflar, bileşenler ve diğer paketler gibi yapısal şeyler içerebilir.
Notation- Grafiksel olarak, bir paket sekmeli bir klasörle temsil edilir. Bir paket genellikle sadece adıyla çizilir. Bununla birlikte, paketin içeriği hakkında ek ayrıntılara sahip olabilir. Aşağıdaki şekillere bakın.
İlişki
Farklı ilişki türleri için gösterimler aşağıdaki gibidir:
Genellikle bir ilişkideki öğeler, ilişkide belirli roller oynar. Rol adı, belirli bir bağlama katılan bir öğenin davranışını belirtir.
Example- Aşağıdaki şekiller, sınıflar arasındaki farklı ilişkilerin örneklerini gösterir. İlk şekil, Departman ve Çalışan olmak üzere iki sınıf arasındaki bir ilişkiyi gösterir; burada bir departmanda çalışan birkaç personel olabilir. İşçi, rol adıdır. Departman ile birlikte '1' ve Çalışan ile birlikte '*', kardinalite oranının bire-çok olduğunu gösterir. İkinci şekil, birleştirme ilişkisini tasvir etmektedir; bir Üniversite, birçok Bölümün “bütünüdür”.
UML yapısal diyagramları şu şekilde kategorize edilir: sınıf diyagramı, nesne diyagramı, bileşen diyagramı ve dağıtım diyagramı.
Sınıf diyagramı
Bir sınıf diyagramı, bir sistemin statik görünümünü modeller. Bir sistemin sınıflarından, arayüzlerinden ve işbirliklerinden oluşur; ve aralarındaki ilişkiler.
Bir Sistemin Sınıf Diyagramı
Basitleştirilmiş bir Bankacılık Sistemini ele alalım.
Bir bankanın birçok şubesi vardır. Her bölgede bir şube, o bölgedeki diğer şubeleri denetleyen bölgesel genel müdürlük olarak belirlenir. Her şubenin birden fazla hesabı ve kredisi olabilir. Bir hesap, bir mevduat hesabı veya bir cari hesap olabilir. Bir müşteri hem mevduat hesabı hem de cari hesap açabilir. Ancak, bir müşterinin birden fazla tasarruf hesabı veya cari hesabı olmamalıdır. Bir müşteri ayrıca bankadan kredi satın alabilir.
Aşağıdaki şekil, ilgili sınıf şemasını göstermektedir.
Sistemdeki sınıflar
Banka, Şube, Hesap, Tasarruf Hesabı, Cari Hesap, Kredi ve Müşteri.
İlişkiler
A Bank “has–a” number of Branches - kompozisyon, bire çok
A Branch with role Zonal Head Office supervises other Branches - tekli ilişki, bire çok
A Branch “has–a” number of accounts - toplama, bire çok
Sınıf Hesabı'ndan, Tasarruf Hesabı ve Cari Hesap olmak üzere iki sınıf miras alınmıştır.
A Customer can have one Current Account - ilişkilendirme, bire bir
A Customer can have one Savings Account - ilişkilendirme, bire bir
A Branch “has–a” number of Loans - toplama, bire çok
A Customer can take many loans - ilişkilendirme, bire çok
Nesne Diyagramı
Bir nesne diyagramı, bir nesne grubunu ve belirli bir zamandaki bağlantılarını modeller. Bir sınıf diyagramında nesnelerin örneklerini gösterir. Nesne diyagramı, bir etkileşim diyagramının statik parçasıdır.
Example - Aşağıdaki şekil, Bankacılık Sisteminin sınıf diyagramının bir kısmının bir nesne diyagramını göstermektedir.
Bileşen Şeması
Bileşen diyagramları, bir grup bileşen arasındaki organizasyonu ve bağımlılıkları gösterir.
Bileşen diyagramları şunlardan oluşur:
- Components
- Interfaces
- Relationships
- Paketler ve Alt Sistemler (isteğe bağlı)
Bileşen diyagramları aşağıdakiler için kullanılır:
ileri ve geri mühendislik yoluyla sistemler inşa etmek.
nesne yönelimli bir programlama dili kullanarak bir sistem geliştirirken kaynak kod dosyalarının konfigürasyon yönetimini modelleme.
Veritabanlarını modellemede şemaları temsil etmek.
dinamik sistemlerin modelleme davranışları.
Example
Aşağıdaki şekil, C ++ kullanılarak geliştirilen bir sistemin kaynak kodunu modellemek için bir bileşen diyagramını göstermektedir. Myheader.h, otherheader.h, öncelik.cpp ve other.cpp olmak üzere dört kaynak kodu dosyasını gösterir. Myheader.h'nin son sürümden atasına kadar uzanan iki sürümü gösterilir. Öncelikli.cpp dosyası other.cpp üzerinde derleme bağımlılığına sahiptir. Other.cpp dosyasının otherheader.h dosyasında derleme bağımlılığı vardır.
Dağıtım Şeması
Bir dağıtım diyagramı, çalışma zamanı işleme düğümlerinin ve bunlarda yaşayan bileşenlerinin yapılandırmasına vurgu yapar. Genellikle düğümler ve bağımlılıklar veya düğümler arasındaki ilişkilerden oluşurlar.
Dağıtım diyagramları şu amaçlarla kullanılır:
tipik olarak yazılım yoğun donanım koleksiyonundan oluşan gömülü sistemlerdeki model aygıtlar.
istemci / sunucu sistemlerinin topolojilerini temsil eder.
tamamen dağıtılmış sistemleri modelleyin.
Example
Aşağıdaki şekil, istemci / sunucu mimarisini izleyen bir bilgisayar sisteminin topolojisini göstermektedir. Şekil, işlemcilerden oluşan sunucu olarak kalıplaşmış bir düğümü göstermektedir. Şekil, sistemde dört veya daha fazla sunucunun kullanıldığını göstermektedir. Sunucuya bağlı, her düğümün iş istasyonu, dizüstü bilgisayar, tarayıcı veya yazıcı gibi bir terminal aygıtını temsil ettiği istemci düğümleridir. Düğümler, gerçek dünyadaki eşdeğerini açıkça gösteren simgeler kullanılarak temsil edilir.
UML davranış diyagramları, bir sistemin dinamik yönlerini görselleştirir, belirtir, oluşturur ve belgeler. Davranış diyagramları şu şekilde kategorize edilir: vaka diyagramları, etkileşim diyagramları, durum grafiği diyagramları ve aktivite diyagramları kullanın.
Kullanım Durumu Modeli
Kullanım alanı
Kullanım senaryosu, bir sistemin gerçekleştirdiği ve görünür sonuçlar veren işlemlerin sırasını açıklar. Sistem dışındaki şeylerin sistemin kendisiyle etkileşimini gösterir. Kullanım senaryoları tüm sisteme uygulanabileceği gibi sistemin bir kısmına da uygulanabilir.
Aktör
Bir aktör, kullanım senaryolarının kullanıcılarının oynadığı rolleri temsil eder. Bir aktör, bir kişi (ör. Öğrenci, müşteri), bir cihaz (ör. İş istasyonu) veya başka bir sistem (ör. Banka, kurum) olabilir.
Aşağıdaki şekil Öğrenci adlı bir aktörün notasyonlarını ve Performans Raporu Oluştur adlı bir kullanım senaryosunu göstermektedir.
Durum diyagramlarını kullanın
Kullanım durumu diyagramları, bir sistemdeki öğelerin nasıl davrandığına ve bağlam içinde nasıl kullanılabileceklerine ilişkin bir dış görünüm sunar.
Kullanım durumu diyagramları şunlardan oluşur:
- Kullanım durumları
- Actors
- Bağımlılık, genelleme ve ilişkilendirme gibi ilişkiler
Kullanım durumu diyagramları kullanılır -
Bir sistemin tüm faaliyetlerini bir dikdörtgen içine alarak ve onunla etkileşime girerek sistemin dışındaki aktörlere odaklanarak bir sistemin bağlamını modellemek.
Bir sistemin gereksinimlerini dış bakış açısıyla modellemek.
Example
Otomatik İşlem Evi Sistemini düşünelim. Sistemin aşağıdaki özelliklerini varsayıyoruz -
Ticaret evinin iki tür müşteri, bireysel müşteriler ve kurumsal müşterilerle işlemleri vardır.
Müşteri sipariş verdikten sonra satış departmanı tarafından işleme alınır ve müşteriye fatura verilir.
Sistem, yöneticinin müşteri hesaplarını yönetmesine ve müşteri tarafından gönderilen soruları yanıtlamasına olanak tanır.
Etkileşim Diyagramları
Etkileşim diyagramları, nesnelerin etkileşimlerini ve ilişkilerini gösterir. Aralarından geçen mesajları da içerirler. İki tür etkileşim diyagramı vardır -
- Sıra Diyagramları
- İşbirliği Diyagramları
Modelleme için etkileşim diyagramları kullanılır -
sıra diyagramlarını kullanarak zaman sıralamasına göre kontrol akışı.
işbirliği diyagramlarını kullanarak organizasyonun kontrol akışı.
Sıra Diyagramları
Sıra diyagramları, mesajların zamana göre sıralanmasını gösteren etkileşim diyagramlarıdır.
Notations- Bu diyagramlar iki boyutlu grafikler şeklindedir. Etkileşimi başlatan nesneler, x eksenine yerleştirilir. Bu nesnelerin gönderdiği ve aldığı mesajlar, yukarıdan aşağıya doğru artan süre sırasına göre y ekseni boyunca yerleştirilir.
Example - Otomatik İşlem Evi Sistemi için bir sıra diyagramı aşağıdaki şekilde gösterilmektedir.
İşbirliği Diyagramları
İşbirliği diyagramları, mesaj gönderen ve alan nesnelerin yapısını gösteren etkileşim diyagramlarıdır.
Notations- Bu diyagramlarda etkileşime katılan nesneler köşeler kullanılarak gösterilmiştir. Nesneleri birbirine bağlayan bağlantılar, mesaj göndermek ve almak için kullanılır. Mesaj etiketli bir ok olarak gösterilir.
Example - Otomatik İşlem Evi Sistemi için işbirliği şeması aşağıdaki şekilde gösterilmektedir.
Durum Tablosu Diyagramları
Durum grafiği diyagramı, bir nesnenin bir durumdan diğerine kontrol akışını gösteren bir durum makinesini gösterir. Bir durum makinesi, bir nesnenin olaylar nedeniyle maruz kaldığı durum dizilerini ve olaylara tepkilerini tasvir eder.
Durum-Grafik Diyagramları şunlardan oluşur:
- Durumlar: Basit veya Kompozit
- Devletler arası geçişler
- Geçişlere neden olan olaylar
- Olaylardan kaynaklanan eylemler
Durum şeması diyagramları, doğası gereği reaktif olan nesneleri modellemek için kullanılır.
Example
Otomatik İşlem Evi Sisteminde, Siparişi bir nesne olarak modelleyelim ve sırasını izleyelim. Aşağıdaki şekil, ilgili durum tablosu diyagramını göstermektedir.
Aktivite Diyagramları
Bir etkinlik diyagramı, bir durum makinesinde devam eden atomik olmayan işlemler olan faaliyetlerin akışını gösterir. Faaliyetler atomik işlemler olan eylemlerle sonuçlanır.
Aktivite diyagramları şunlardan oluşur:
- Etkinlik durumları ve eylem durumları
- Transitions
- Objects
Modelleme için aktivite diyagramları kullanılır -
- aktörler tarafından görüldüğü şekliyle sistemle etkileşime giren iş akışları.
- akış şemalarını kullanarak işlemlerin veya hesaplamaların ayrıntıları.
Example
Aşağıdaki şekil Otomatik İşlem Evi Sisteminin bir kısmının faaliyet diyagramını göstermektedir.
Analiz aşamasından sonra kavramsal model, nesne yönelimli tasarım (OOD) kullanılarak nesne yönelimli bir modele dönüştürülür. OOD'de, analiz modelindeki teknolojiden bağımsız kavramlar, uygulama sınıfları ile eşleştirilir, kısıtlamalar belirlenir ve arayüzler tasarlanarak çözüm alanı için bir model elde edilir. Özetle, sistemin beton teknolojiler üzerine nasıl inşa edileceğini belirten ayrıntılı bir açıklama yapılır.
Nesneye yönelik tasarım aşamaları şu şekilde tanımlanabilir:
- Sistem bağlamının tanımı
- Sistem mimarisinin tasarlanması
- Sistemdeki nesnelerin tanımlanması
- Tasarım modellerinin yapımı
- Nesne arayüzlerinin spesifikasyonu
Sistem tasarımı
Nesneye yönelik sistem tasarımı, bir sistemin bağlamını tanımlamayı ve ardından sistemin mimarisini tasarlamayı içerir.
Context- Bir sistemin bağlamı statik ve dinamik bir bölüme sahiptir. Sistemin statik bağlamı, bir alt sistemler hiyerarşisine genişletilen tüm sistemin basit bir blok diyagramı kullanılarak tasarlanmıştır. Alt sistem modeli, UML paketleri ile temsil edilir. Dinamik bağlam, sistemin çevresi ile nasıl etkileşime girdiğini açıklar. Kullanılarak modellenmiştiruse case diagrams.
System Architecture- Sistem mimarisi, alan bilgisi kadar mimari tasarım ilkelerine uygun olarak sistemin bağlamı esas alınarak tasarlanır. Tipik olarak, bir sistem katmanlara bölünür ve her katman alt sistemleri oluşturmak için ayrıştırılır.
Nesne Tabanlı Ayrıştırma
Ayrıştırma, büyük bir karmaşık sistemi böl ve yönet ilkelerine göre daha az karmaşıklığa sahip daha küçük bileşenlerden oluşan bir hiyerarşiye bölmek anlamına gelir. Sistemin her ana bileşenine alt sistem adı verilir. Nesneye yönelik ayrıştırma, bir sistemdeki bağımsız özerk nesneleri ve bu nesneler arasındaki iletişimi tanımlar.
Ayrışmanın avantajları -
Tek tek bileşenler daha az karmaşıktır ve bu nedenle daha anlaşılır ve yönetilebilirdir.
Özel becerilere sahip iş gücünün bölünmesini sağlar.
Diğer alt sistemleri etkilemeden alt sistemlerin değiştirilmesine veya değiştirilmesine izin verir.
Eş Zamanlılığı Tanımlama
Eşzamanlılık, birden fazla nesnenin aynı anda olay almasına ve birden fazla etkinliğin aynı anda yürütülmesine izin verir. Eşzamanlılık tanımlanır ve dinamik modelde temsil edilir.
Eşzamanlılığı etkinleştirmek için her bir eşzamanlı öğeye ayrı bir kontrol dizisi atanır. Eşzamanlılık nesne düzeyinde ise, iki eşzamanlı nesneye iki farklı kontrol dizisi atanır. Tek bir nesnenin iki işlemi doğası gereği eşzamanlıysa, o nesne farklı iş parçacıkları arasında bölünür.
Eşzamanlılık, veri bütünlüğü, kilitlenme ve açlık sorunları ile ilişkilidir. Bu nedenle, eşzamanlılık gerekli olduğunda net bir strateji oluşturulmalıdır. Ayrıca, eşzamanlılığın tasarım aşamasında tanımlanması gerekir ve uygulama aşamasına bırakılamaz.
Kalıpları Tanımlama
Uygulamaları tasarlarken, bazı problem kategorileri için genel kabul görmüş bazı çözümler benimsenmiştir. Bunlar tasarım kalıplarıdır. Bir kalıp, belirli türdeki uygulama geliştirme problemlerinde kullanılabilen, belgelenmiş bir yapı taşları seti olarak tanımlanabilir.
Yaygın olarak kullanılan bazı tasarım modelleri şunlardır:
- Cephe deseni
- Model görünümü ayırma modeli
- Gözlemci deseni
- Model görünümü denetleyici modeli
- Abone kalıbı yayınlayın
- Proxy kalıbı
Olayları Kontrol Etme
Sistem tasarımı sırasında, sistem nesnelerinde meydana gelebilecek olayların tanımlanması ve uygun şekilde ele alınması gerekir.
Bir olay, zaman ve uzayda bir konuma sahip olan önemli bir olayın spesifikasyonudur.
Modellenebilecek dört tür olay vardır:
Signal Event - Bir nesne tarafından fırlatılan ve başka bir nesne tarafından yakalanan adlandırılmış bir nesne.
Call Event - Bir işlemin gönderilmesini temsil eden eşzamanlı bir olay.
Time Event - Zamanın geçişini temsil eden bir olay.
Change Event - Durumdaki değişikliği temsil eden bir olay.
Sınır Koşullarını Yönetme
Sistem tasarım aşaması, sistemin bir bütün olarak ve her bir alt sistemin başlatılmasını ve sonlandırılmasını ele almalıdır. Belgelenen farklı yönler aşağıdaki gibidir -
Sistemin başlatılması, yani sistemin başlatılmamış durumdan sabit duruma geçişi.
Sistemin sonlandırılması, yani çalışan tüm konuların kapatılması, kaynakların temizlenmesi ve gönderilecek mesajlar.
Sistemin ilk yapılandırması ve gerektiğinde sistemin yeniden yapılandırılması.
Sistemin arızalarını veya istenmeyen sonlandırmayı öngörmek.
Sınır koşulları, sınır kullanım durumları kullanılarak modellenmiştir.
Nesne Tasarımı
Alt sistemler hiyerarşisi geliştirildikten sonra, sistemdeki nesneler tanımlanarak detayları tasarlanır. Burada tasarımcı, sistem tasarımı sırasında seçilen stratejiyi detaylandırır. Vurgu, uygulama alanı kavramlarından bilgisayar konseptlerine doğru kaymaktadır. Analiz sırasında belirlenen nesneler, yürütme süresini, bellek tüketimini ve toplam maliyeti en aza indirgemek amacıyla uygulama için belirlenir.
Nesne tasarımı aşağıdaki aşamaları içerir -
- Nesne tanımlama
- Nesne gösterimi, yani tasarım modellerinin oluşturulması
- İşlemlerin sınıflandırılması
- Algoritma tasarımı
- İlişkilerin tasarımı
- Dış etkileşimler için kontrolün uygulanması
- Sınıfları ve ilişkilendirmeleri modüllere paketleyin
Nesne Tanımlama
Nesne tasarımının ilk adımı nesne tanımlamadır. Nesneye yönelik analiz aşamalarında tanımlanan nesneler, sınıflara ayrılır ve gerçek uygulamaya uygun olmaları için rafine edilir.
Bu aşamanın işlevleri:
Her alt sistem veya paketteki sınıfları tanımlama ve iyileştirme
Sınıflar arasındaki bağlantıları ve ilişkileri tanımlama
Sınıflar arasındaki hiyerarşik ilişkilerin tasarlanması, yani genelleme / uzmanlaşma ve miras
Toplamaları tasarlama
Nesne Gösterimi
Sınıflar belirlendikten sonra, nesne modelleme teknikleri kullanılarak temsil edilmeleri gerekir. Bu aşama, esas olarak UML diyagramlarının oluşturulmasını içerir.
Üretilmesi gereken iki tür tasarım modeli vardır -
Static Models - Sınıf diyagramları ve nesne diyagramları kullanarak bir sistemin statik yapısını tanımlamak.
Dynamic Models - Bir sistemin dinamik yapısını tanımlamak ve etkileşim diyagramları ve durum grafiği diyagramları kullanarak sınıflar arasındaki etkileşimi göstermek.
Operasyonların Sınıflandırılması
Bu adımda OOA aşamasında geliştirilen üç model, yani nesne modeli, dinamik model ve fonksiyonel model birleştirilerek nesneler üzerinde gerçekleştirilecek işlem tanımlanır. Bir işlem nasıl yapılacağını değil neyin yapılacağını belirtir.
İşlemlerle ilgili olarak aşağıdaki görevler gerçekleştirilir -
Sistemdeki her nesnenin durum geçiş diyagramı geliştirilir.
Nesnelerin aldığı olaylar için işlemler tanımlanır.
Bir olayın aynı veya farklı nesnelerde diğer olayları tetiklediği durumlar belirlenir.
Eylemler içindeki alt işlemler tanımlanır.
Ana eylemler, veri akış diyagramlarına genişletilmiştir.
Algoritma Tasarımı
Nesnelerdeki işlemler algoritmalar kullanılarak tanımlanır. Algoritma, bir işlemde ortaya konan problemi çözen aşamalı bir prosedürdür. Algoritmalar, nasıl yapılacağına odaklanır.
Belirli bir işleme karşılık gelen birden fazla algoritma olabilir. Alternatif algoritmalar tanımlandıktan sonra, verilen problem alanı için optimal algoritma seçilir. En uygun algoritmayı seçmek için ölçütler şunlardır:
Computational Complexity - Karmaşıklık, bir algoritmanın verimliliğini hesaplama süresi ve bellek gereksinimleri açısından belirler.
Flexibility - Esneklik, seçilen algoritmanın çeşitli ortamlarda uygunluk kaybı olmadan uygun şekilde uygulanıp uygulanamayacağını belirler.
Understandability - Bu, seçilen algoritmanın anlaşılması ve uygulanmasının kolay olup olmadığını belirler.
İlişkilerin Tasarımı
İlişkileri uygulama stratejisi, nesne tasarım aşamasında yazılmalıdır. Ele alınan ana ilişkiler, ilişkilendirmeler, toplamalar ve kalıtımlardan oluşur.
Tasarımcı, ilişkilendirmelerle ilgili olarak aşağıdakileri yapmalıdır -
Bir ilişkilendirmenin tek yönlü veya çift yönlü olup olmadığını belirleyin.
İlişkilendirme yolunu analiz edin ve gerekirse güncelleyin.
Çoktan çoğa ilişkiler olması durumunda ilişkilendirmeleri ayrı bir nesne olarak uygulayın; veya bire bir veya bire çok ilişki durumunda diğer nesneye bağlantı olarak.
Kalıtımlarla ilgili olarak, tasarımcı aşağıdakileri yapmalıdır:
Sınıfları ve ilişkilerini ayarlayın.
Soyut sınıfları tanımlayın.
Davranışların ihtiyaç duyulduğunda paylaşılması için hükümler koyun.
Kontrolün Uygulanması
Nesne tasarımcısı, durum grafiği modelinin stratejisine iyileştirmeler ekleyebilir. Sistem tasarımında dinamik modeli gerçekleştirmek için temel bir strateji yapılır. Nesne tasarımı sırasında, bu strateji uygun uygulama için uygun şekilde süslenir.
Dinamik modelin uygulanmasına yönelik yaklaşımlar şunlardır:
Represent State as a Location within a Program- Bu, kontrol konumunun program durumunu tanımladığı geleneksel prosedür odaklı yaklaşımdır. Sonlu durum makinesi bir program olarak uygulanabilir. Bir geçiş bir girdi deyimi oluşturur, ana kontrol yolu talimat dizisini oluşturur, dallar koşulları oluşturur ve geriye doğru yollar döngüleri veya yinelemeleri oluşturur.
State Machine Engine- Bu yaklaşım, bir durum makinesi motor sınıfı aracılığıyla doğrudan bir durum makinesini temsil eder. Bu sınıf, durum makinesini uygulama tarafından sağlanan bir dizi geçiş ve eylem aracılığıyla yürütür.
Control as Concurrent Tasks- Bu yaklaşımda, bir nesne programlama dilinde veya işletim sisteminde bir görev olarak uygulanır. Burada, görevler arası çağrı olarak bir olay uygulanır. Gerçek nesnelerin içsel eşzamanlılığını korur.
Ambalaj Sınıfları
Herhangi bir büyük projede, bir uygulamanın modüllere veya paketlere titizlikle bölümlenmesi önemlidir. Nesne tasarımı sırasında, sınıflar ve nesneler, birden çok grubun bir proje üzerinde işbirliği içinde çalışmasını sağlamak için paketler halinde gruplandırılır.
Ambalajın farklı yönleri şunlardır:
Hiding Internal Information from Outside View - Bir sınıfın "kara kutu" olarak görülmesine izin verir ve sınıf uygulamasının, sınıfın herhangi bir istemcisinin kodu değiştirmesine gerek kalmadan değiştirilmesine izin verir.
Coherence of Elements - Sınıf, işlem veya modül gibi bir öğe, tutarlı bir plan üzerinde düzenlenmişse ve tüm parçaları, ortak bir amaca hizmet edecek şekilde özünde birbiriyle ilişkili ise tutarlıdır.
Construction of Physical Modules - Aşağıdaki yönergeler fiziksel modüller oluştururken yardımcı olur -
Bir modüldeki sınıflar, aynı bileşik nesnedeki benzer şeyleri veya bileşenleri temsil etmelidir.
Yakın bağlantılı sınıflar aynı modülde olmalıdır.
Bağlantısız veya zayıf bağlantılı sınıflar ayrı modüllere yerleştirilmelidir.
Modüller iyi bir bütünlüğe, yani bileşenleri arasında yüksek işbirliğine sahip olmalıdır.
Bir modülün diğer modüllerle düşük bağlantısı olmalıdır, yani modüller arasında etkileşim veya karşılıklı bağımlılık minimum olmalıdır.
Tasarım Optimizasyonu
Analiz modeli, sistem hakkındaki mantıksal bilgileri yakalarken, tasarım modeli verimli bilgi erişimini desteklemek için ayrıntılar ekler. Bir tasarım uygulanmadan önce, uygulamayı daha verimli hale getirmek için optimize edilmelidir. Optimizasyonun amacı, maliyeti zaman, alan ve diğer ölçütler açısından en aza indirmektir.
Bununla birlikte, tasarım optimizasyonu fazla olmamalıdır, çünkü uygulama kolaylığı, sürdürülebilirlik ve genişletilebilirlik de önemli konulardır. Mükemmel şekilde optimize edilmiş bir tasarımın daha verimli, ancak daha az okunabilir ve yeniden kullanılabilir olduğu sıklıkla görülür. Bu yüzden tasarımcı ikisi arasında bir denge kurmalıdır.
Tasarım optimizasyonu için yapılabilecek çeşitli şeyler şunlardır:
- Gereksiz ilişkilendirmeler ekleyin
- Kullanılamayan ilişkilendirmeleri atlayın
- Algoritmaların optimizasyonu
- Karmaşık ifadelerin yeniden hesaplanmasını önlemek için türetilmiş öznitelikleri kaydedin
Yedekli Derneklerin Eklenmesi
Tasarım optimizasyonu sırasında, yeni ilişkilendirmeler türetmenin erişim maliyetlerini düşürüp düşürmeyeceği kontrol edilir. Bu fazlalık ilişkilendirmeler herhangi bir bilgi eklemeyebilir, ancak genel modelin verimliliğini artırabilirler.
Kullanılamayan İlişkilendirmelerin İhmal Edilmesi
Çok fazla ilişkinin varlığı, bir sistemi çözülemez hale getirebilir ve dolayısıyla sistemin genel verimliliğini azaltabilir. Böylece optimizasyon sırasında, kullanılamayan tüm ilişkilendirmeler kaldırılır.
Algoritmaların Optimizasyonu
Nesne yönelimli sistemlerde, veri yapısının ve algoritmaların optimizasyonu ortak bir şekilde yapılır. Sınıf tasarımı oluşturulduktan sonra, işlemlerin ve algoritmaların optimize edilmesi gerekir.
Algoritmaların optimizasyonu şu şekilde elde edilir -
- Hesaplama görevlerinin sırasının yeniden düzenlenmesi
- İşlevsel modelde ortaya konulandan döngülerin yürütme sırasının tersine çevrilmesi
- Algoritma içindeki ölü yolların kaldırılması
Türetilmiş Özniteliklerin Kaydedilmesi ve Saklanması
Türetilmiş öznitelikler, değerleri diğer özniteliklerin (temel öznitelikler) bir işlevi olarak hesaplanan özniteliklerdir. Türetilmiş özniteliklerin değerlerinin her ihtiyaç duyulduğunda yeniden hesaplanması zaman alıcı bir işlemdir. Bundan kaçınmak için değerler hesaplanabilir ve hesaplanmış formlarında saklanabilir.
Bununla birlikte, bu, güncelleme anormallikleri, yani, türetilen özelliklerin değerlerinde karşılık gelen bir değişiklik olmaksızın temel özelliklerin değerlerinde bir değişiklik meydana getirebilir. Bunu önlemek için aşağıdaki adımlar atılır -
Temel öznitelik değerinin her güncellemesinde, türetilen öznitelik de yeniden hesaplanır.
Türetilen tüm öznitelikler, her güncellemeden sonra değil, bir grupta periyodik olarak yeniden hesaplanır ve güncellenir.
Tasarım Dokümantasyonu
Belgeleme, yazılımın yapım prosedürünü kaydeden herhangi bir yazılım geliştirme sürecinin önemli bir parçasıdır. Tasarımı başkalarına iletmek için önemsiz olmayan herhangi bir yazılım sistemi için tasarım kararlarının belgelenmesi gerekir.
Kullanım Alanları
İkincil bir ürün olmasına rağmen, özellikle aşağıdaki alanlarda iyi bir dokümantasyon zorunludur -
- Bir dizi geliştirici tarafından geliştirilen yazılımın tasarımında
- Yinelemeli yazılım geliştirme stratejilerinde
- Bir yazılım projesinin sonraki sürümlerini geliştirirken
- Bir yazılımı değerlendirmek için
- Test koşullarını ve alanlarını bulmak için
- Yazılımın bakımı için.
İçindekiler
Yararlı bir belge esas olarak aşağıdaki içerikleri içermelidir -
High–level system architecture - Süreç şemaları ve modül şemaları
Key abstractions and mechanisms - Sınıf diyagramları ve nesne diyagramları.
Scenarios that illustrate the behavior of the main aspects - Davranış diyagramları
Özellikleri
İyi bir dokümantasyonun özellikleri şunlardır:
Kısa ve aynı zamanda, açık, tutarlı ve eksiksiz
Sistemin gereksinim özelliklerine göre izlenebilir
Well-structured
Açıklayıcı yerine şematik
Nesne yönelimli bir tasarımın uygulanması genellikle standart bir nesne yönelimli programlama dili (OOPL) kullanmayı veya nesne tasarımlarını veritabanlarına eşlemeyi içerir. Çoğu durumda her ikisini de içerir.
Programlama Dillerini Kullanarak Uygulama
Genellikle, bir nesne tasarımını koda dönüştürme görevi basit bir süreçtir. C ++, Java, Smalltalk, C # ve Python gibi herhangi bir nesne yönelimli programlama dili, sınıfları temsil etmek için hüküm içerir. Bu bölümde, C ++ kullanan kavramı örnekleyeceğiz.
Aşağıdaki şekil Circle sınıfının C ++ kullanılarak temsilini gösterir.
Uygulama Birlikleri
Çoğu programlama dili, ilişkilendirmeleri doğrudan uygulamak için yapılar sağlamaz. Dolayısıyla, dernekleri uygulama görevi önemli ölçüde düşünülmelidir.
Dernekler tek yönlü veya çift yönlü olabilir. Ayrıca, her ilişki bire bir, bire çok veya çoktan çoğa olabilir.
Tek Yönlü Dernekler
Tek yönlü ilişkilerin uygulanması için, tek yönlülüğün muhafaza edilmesi için özen gösterilmelidir. Farklı çokluk için uygulamalar aşağıdaki gibidir -
Optional Associations- Burada, katılan nesneler arasında bir bağlantı olabilir veya olmayabilir. Örneğin aşağıdaki şekilde Müşteri ile Cari Hesap arasındaki ilişkide bir müşterinin cari hesabı olabilir veya olmayabilir.
Uygulama için, Müşteri'ye NULL olabilecek bir öznitelik olarak Cari Hesap nesnesi eklenir. C ++ kullanarak uygulama -
class Customer {
private:
// attributes
Current_Account c; //an object of Current_Account as attribute
public:
Customer() {
c = NULL;
} // assign c as NULL
Current_Account getCurrAc() {
return c;
}
void setCurrAc( Current_Account myacc) {
c = myacc;
}
void removeAcc() {
c = NULL;
}
};
One–to–one Associations- Burada, bir sınıfın bir örneği, ilişkili sınıfın tam olarak bir örneği ile ilgilidir. Örneğin, Departman ve Müdür aşağıdaki şekilde gösterildiği gibi bire bir ilişkiye sahiptir.
Bu, NULL olmaması gereken bir Yönetici nesnesi olan Departmana dahil edilerek uygulanır. C ++ kullanarak uygulama -
class Department {
private:
// attributes
Manager mgr; //an object of Manager as attribute
public:
Department (/*parameters*/, Manager m) { //m is not NULL
// assign parameters to variables
mgr = m;
}
Manager getMgr() {
return mgr;
}
};
One–to–many Associations- Burada, bir sınıfın bir örneği, ilişkili sınıfın birden fazla örneğiyle ilgilidir. Örneğin, aşağıdaki şekilde Çalışan ve Bağımlı arasındaki ilişkiyi düşünün.
Bu, Çalışan sınıfına Bağımlıların bir listesi eklenerek uygulanır. C ++ STL liste kapsayıcısı kullanarak uygulama -
class Employee {
private:
char * deptName;
list <Dependent> dep; //a list of Dependents as attribute
public:
void addDependent ( Dependent d) {
dep.push_back(d);
} // adds an employee to the department
void removeDeoendent( Dependent d) {
int index = find ( d, dep );
// find() function returns the index of d in list dep
dep.erase(index);
}
};
Çift Yönlü Dernekler
İki yönlü ilişkilendirmeyi uygulamak için, her iki yöndeki bağlantıların sürdürülmesi gerekir.
Optional or one–to–one Associations - Aşağıdaki şekilde gösterildiği gibi, Proje ile bire bir çift yönlü ilişkiye sahip Proje Yöneticisi arasındaki ilişkiyi düşünün.
C ++ kullanarak uygulama -
Class Project {
private:
// attributes
Project_Manager pmgr;
public:
void setManager ( Project_Manager pm);
Project_Manager changeManager();
};
class Project_Manager {
private:
// attributes
Project pj;
public:
void setProject(Project p);
Project removeProject();
};
One–to–many Associations - Aşağıdaki şekilde gösterildiği gibi, Departman ve Çalışan arasındaki bire çok ilişkisi olan ilişkiyi düşünün.
C ++ STL liste kapsayıcısı kullanarak uygulama
class Department {
private:
char * deptName;
list <Employee> emp; //a list of Employees as attribute
public:
void addEmployee ( Employee e) {
emp.push_back(e);
} // adds an employee to the department
void removeEmployee( Employee e) {
int index = find ( e, emp );
// find function returns the index of e in list emp
emp.erase(index);
}
};
class Employee {
private:
//attributes
Department d;
public:
void addDept();
void removeDept();
};
İlişkilendirmeleri Sınıflar Olarak Uygulama
Bir ilişkinin ilişkili bazı öznitelikleri varsa, ayrı bir sınıf kullanılarak uygulanmalıdır. Örneğin, aşağıdaki şekilde gösterildiği gibi Çalışan ve Proje arasındaki bire bir ilişkiyi düşünün.
WorksOn'un C ++ kullanarak uygulanması
class WorksOn {
private:
Employee e;
Project p;
Hours h;
char * date;
public:
// class methods
};
Kısıtlamaları Uygulama
Sınıflardaki kısıtlamalar, özniteliklerin alabileceği değerlerin aralığını ve türünü kısıtlar. Kısıtlamaları uygulamak için, sınıftan bir nesne başlatıldığında özniteliğe geçerli bir varsayılan değer atanır. Çalışma zamanında değer değiştirildiğinde, değerin geçerli olup olmadığı kontrol edilir. Geçersiz bir değer, bir istisna işleme rutini veya diğer yöntemlerle işlenebilir.
Example
Yaşın 18 ila 60 aralığında değerlere sahip olabilen bir öznitelik olduğu bir Çalışan sınıfını düşünün. Aşağıdaki C ++ kodu bunu içerir -
class Employee {
private: char * name;
int age;
// other attributes
public:
Employee() { // default constructor
strcpy(name, "");
age = 18; // default value
}
class AgeError {}; // Exception class
void changeAge( int a) { // method that changes age
if ( a < 18 || a > 60 ) // check for invalid condition
throw AgeError(); // throw exception
age = a;
}
};
Durum Grafiklerini Uygulama
Durum grafiği diyagramlarında durumları uygulamak için iki alternatif uygulama stratejisi vardır.
Sınıf içi numaralandırmalar
Bu yaklaşımda, durumlar bir veri üyesinin (veya veri üyeleri kümesinin) farklı değerleri ile temsil edilir. Değerler, sınıf içindeki bir numaralandırma ile açıkça tanımlanır. Geçişler, ilgili veri üyesinin değerini değiştiren üye işlevlerle temsil edilir.
Bir Genelleme Hiyerarşisinde Sınıfların Düzenlenmesi
Bu yaklaşımda, durumlar, ortak bir işaretçi değişkeni ile başvurulabilecek şekilde bir genelleme hiyerarşisi içinde düzenlenir. Aşağıdaki şekil, durum çizelgesi diyagramından genelleme hiyerarşisine bir dönüşümü göstermektedir.
Veritabanı Sistemine Nesne Eşleştirme
Nesnelerin Kalıcılığı
Nesneye yönelik sistemler geliştirmenin önemli bir yönü, verilerin kalıcılığıdır. Kalıcılık sayesinde nesnelerin, onu oluşturan programdan daha uzun ömrü vardır. Kalıcı veriler, gerektiğinde yeniden yüklenebilecekleri ikincil depolama ortamına kaydedilir.
RDBMS'ye Genel Bakış
Veritabanı, ilgili verilerin sıralı bir koleksiyonudur.
Veritabanı yönetim sistemi (DBMS), veritabanlarındaki verileri tanımlama, oluşturma, depolama, kullanma, geri alma, paylaşma ve kaldırma süreçlerini kolaylaştıran bir yazılım koleksiyonudur.
İlişkisel veritabanı yönetim sistemlerinde (RDBMS) veriler, her bir sütun veya alanın bir özniteliği ve her satır veya demet bir örneğin kaydını temsil ettiği ilişkiler veya tablolar olarak depolanır.
Her satır, adı verilen seçilmiş bir minimum öznitelik kümesiyle benzersiz bir şekilde tanımlanır primary key.
Bir foreign key ilgili tablonun birincil anahtarı olan bir özelliktir.
Sınıfları RDBMS'de Tablolar Olarak Gösterme
Bir sınıfı bir veritabanı tablosuna eşlemek için, her özellik tabloda bir alan olarak temsil edilir. Mevcut öznitelik (ler) birincil anahtar olarak atanır veya ayrı bir kimlik alanı birincil anahtar olarak eklenir. Sınıf, ihtiyaca göre yatay veya dikey olarak bölünebilir.
Örneğin, Circle sınıfı aşağıdaki şekilde gösterildiği gibi tabloya dönüştürülebilir.
Schema for Circle Table: CIRCLE(CID, X_COORD, Y_COORD, RADIUS, COLOR)
Creating a Table Circle using SQL command:
CREATE TABLE CIRCLE (
CID VARCHAR2(4) PRIMARY KEY,
X_COORD INTEGER NOT NULL,
Y_COORD INTEGER NOT NULL,
Z_COORD INTEGER NOT NULL,
COLOR
);
İlişkilendirmeleri Veritabanı Tablolarıyla Eşleme
Bire Bir Dernekler
1: 1 ilişkileri uygulamak için, herhangi bir tablonun birincil anahtarı, diğer tablonun yabancı anahtarı olarak atanır. Örneğin, Departman ve Müdür arasındaki ilişkiyi düşünün -
Tabloları oluşturmak için SQL komutları
CREATE TABLE DEPARTMENT (
DEPT_ID INTEGER PRIMARY KEY,
DNAME VARCHAR2(30) NOT NULL,
LOCATION VARCHAR2(20),
EMPID INTEGER REFERENCES MANAGER
);
CREATE TABLE MANAGER (
EMPID INTEGER PRIMARY KEY,
ENAME VARCHAR2(50) NOT NULL,
ADDRESS VARCHAR2(70),
);
Bire Çok Dernek
1: N ilişkilendirmelerini uygulamak için, ilişkilendirmenin 1 tarafındaki tablonun birincil anahtarı, ilişkilendirmenin N tarafındaki tablonun yabancı anahtarı olarak atanır. Örneğin, Departman ve Çalışan arasındaki ilişkiyi düşünün -
Tabloları oluşturmak için SQL komutları
CREATE TABLE DEPARTMENT (
DEPT_ID INTEGER PRIMARY KEY,
DNAME VARCHAR2(30) NOT NULL,
LOCATION VARCHAR2(20),
);
CREATE TABLE EMPLOYEE (
EMPID INTEGER PRIMARY KEY,
ENAME VARCHAR2(50) NOT NULL,
ADDRESS VARCHAR2(70),
D_ID INTEGER REFERENCES DEPARTMENT
);
Çoktan Çoğa Dernekler
M: N ilişkilerini uygulamak için, ilişkiyi temsil eden yeni bir ilişki oluşturulur. Örneğin, Çalışan ve Proje arasındaki şu ilişkiyi düşünün:
Schema for Works_On Table - WORKS_ON (EMPID, PID, HOURS, START_DATE)
SQL command to create Works_On association - TABLO İŞLERİ OLUŞTUR_ON
(
EMPID INTEGER,
PID INTEGER,
HOURS INTEGER,
START_DATE DATE,
PRIMARY KEY (EMPID, PID),
FOREIGN KEY (EMPID) REFERENCES EMPLOYEE,
FOREIGN KEY (PID) REFERENCES PROJECT
);
Devralmayı Tablolarla Eşleme
Kalıtımı eşlemek için, temel tabloların birincil anahtarı, türetilmiş tablo (lar) da birincil anahtar ve yabancı anahtar olarak atanır.
Example
Bir program kodu yazıldıktan sonra, içindeki tüm hataları tespit etmek ve ardından işlemek için test edilmelidir. Test amaçlı bir dizi şema kullanılmaktadır.
Bir diğer önemli husus, programın amaçladığı amaca hizmet edip etmediğini tespit eden bir programın amacına uygunluğudur. Uygunluk, yazılım kalitesini tanımlar.
Nesne Tabanlı Sistemlerin Test Edilmesi
Test, yazılım geliştirme sırasında sürekli bir faaliyettir. Nesne yönelimli sistemlerde test, birim testi, alt sistem testi ve sistem testi olmak üzere üç seviyeyi kapsar.
Birim Testi
Birim testinde, bireysel sınıflar test edilir. Sınıf özniteliklerinin tasarıma göre uygulanıp uygulanmadığı ve yöntemlerin ve arabirimlerin hatasız olup olmadığı görülür. Birim testi, yapıyı uygulayan uygulama mühendisinin sorumluluğundadır.
Alt Sistem Testi
Bu, belirli bir modülü veya bir alt sistemi test etmeyi içerir ve alt sistem liderinin sorumluluğundadır. Alt sistem içindeki ilişkilerin ve alt sistemin dışarıyla etkileşiminin test edilmesini içerir. Alt sistem testleri, alt sistemin her yeni yayımlanan sürümü için regresyon testleri olarak kullanılabilir.
Sistem Testi
Sistem testi, sistemin bir bütün olarak test edilmesini içerir ve kalite güvence ekibinin sorumluluğundadır. Ekip, yeni sürümleri bir araya getirirken genellikle sistem testlerini regresyon testleri olarak kullanır.
Nesneye Dayalı Test Teknikleri
Gri Kutu Testi
Nesneye yönelik programları test etmek için tasarlanabilen farklı test senaryoları, gri kutu test durumları olarak adlandırılır. Gri kutu testinin önemli türlerinden bazıları şunlardır:
State model based testing - Bu, eyalet kapsamını, durum geçiş kapsamını ve durum geçiş yolu kapsamını kapsar.
Use case based testing - Her kullanım durumundaki her senaryo test edilir.
Class diagram based testing - Her sınıf, türetilmiş sınıf, ilişkilendirmeler ve toplamalar test edilir.
Sequence diagram based testing - Sıra diyagramlarındaki mesajlardaki yöntemler test edilir.
Alt Sistem Test Teknikleri
Alt sistem testinin iki ana yaklaşımı şunlardır:
Thread based testing - Bir alt sistemde tek bir kullanım durumunu gerçekleştirmek için gereken tüm sınıflar entegre edilir ve test edilir.
Use based testing- Her hiyerarşi düzeyindeki modüllerin arayüzleri ve hizmetleri test edilir. Test, bireysel sınıflardan sınıflardan oluşan küçük modüllere, kademeli olarak daha büyük modüllere ve son olarak tüm ana alt sistemlere kadar başlar.
Sistem Testi Kategorileri
Alpha testing - Bu, yazılım geliştiren organizasyon içindeki test ekibi tarafından gerçekleştirilir.
Beta testing - Bu, işbirliği yapan seçilmiş müşteriler grubu tarafından gerçekleştirilir.
Acceptance testing - Bu, teslimatları kabul etmeden önce müşteri tarafından gerçekleştirilir.
Yazılım kalite güvencesi
Yazılım Kalitesi
Schulmeyer ve McManus, yazılım kalitesini “toplam yazılım ürününün kullanımına uygunluk” olarak tanımladı. Kaliteli bir yazılım, tam olarak yapması gerekeni yapar ve kullanıcı tarafından belirlenen gereksinim spesifikasyonunun karşılanması açısından yorumlanır.
Kalite güvencesi
Yazılım kalite güvencesi, bir yazılım ürününün ne ölçüde kullanıma uygun olduğunu belirleyen bir metodolojidir. Yazılım kalitesini belirlemek için dahil edilen faaliyetler şunlardır:
- Auditing
- Standartların ve yönergelerin geliştirilmesi
- Raporların üretimi
- Kalite sisteminin gözden geçirilmesi
Kalite Faktörleri
Correctness - Doğruluk, yazılım gereksinimlerinin uygun şekilde karşılanıp karşılanmadığını belirler.
Usability - Kullanılabilirlik, yazılımın farklı kullanıcı kategorileri (yeni başlayanlar, teknik olmayanlar ve uzmanlar) tarafından kullanılıp kullanılamayacağını belirler.
Portability - Taşınabilirlik, yazılımın farklı donanım cihazlarıyla farklı platformlarda çalışıp çalışamayacağını belirler.
Maintainability - Sürdürülebilirlik, hataların düzeltilme ve modüllerin güncellenme kolaylığını belirler.
Reusability - Yeniden kullanılabilirlik, modüllerin ve sınıfların diğer yazılım ürünlerini geliştirmek için yeniden kullanılıp kullanılamayacağını belirler.
Nesne Tabanlı Metrikler
Metrikler genel olarak üç kategoriye ayrılabilir: proje ölçümleri, ürün ölçümleri ve süreç ölçümleri.
Proje Metrikleri
Proje Metrikleri, bir yazılım proje yöneticisinin devam eden bir projenin durumunu ve performansını değerlendirmesini sağlar. Aşağıdaki ölçüler nesne yönelimli yazılım projeleri için uygundur -
- Senaryo komut dosyası sayısı
- Anahtar sınıfların sayısı
- Destek sınıfı sayısı
- Alt sistem sayısı
Ürün Metrikleri
Ürün ölçümleri, geliştirilen yazılım ürününün özelliklerini ölçer. Nesne yönelimli sistemler için uygun ürün ölçümleri şunlardır:
Methods per Class- Bir sınıfın karmaşıklığını belirler. Bir sınıfın tüm yöntemlerinin eşit derecede karmaşık olduğu varsayılırsa, daha fazla yönteme sahip bir sınıf daha karmaşıktır ve dolayısıyla hatalara daha duyarlıdır.
Inheritance Structure- Birkaç küçük kalıtım kafesine sahip sistemler, tek bir büyük kalıtım kafesine sahip sistemlerden daha iyi yapılandırılmıştır. Genel bir kural olarak, bir miras ağacının 7'den (± 2) fazla seviye olması ve ağaç dengelenmesi gerekir.
Coupling and Cohesion - Düşük kuplaj ve yüksek kohezyona sahip modüller, daha fazla yeniden kullanılabilirlik ve bakım kolaylığı sağladıkları için daha iyi tasarlanmış olarak kabul edilir.
Response for a Class - Sınıfın örnekleri tarafından çağrılan yöntemlerin verimliliğini ölçer.
Süreç Ölçüleri
Süreç ölçümleri, bir sürecin nasıl performans gösterdiğini ölçmeye yardımcı olur. Uzun süreler boyunca tüm projelerde toplanırlar. Uzun vadeli yazılım süreci iyileştirmeleri için gösterge olarak kullanılırlar. Bazı süreç ölçümleri -
- KLOC Sayısı (Kilo Kod Satırları)
- Kusur giderme verimliliği
- Test sırasında tespit edilen ortalama arıza sayısı
- KLOC başına gizli kusurların sayısı