Yazılım Tasarım Stratejileri
Yazılım tasarımı, yazılım gereksinimlerini yazılım uygulamasına kavramsallaştırma sürecidir. Yazılım tasarımı, kullanıcı gereksinimlerini zorluk olarak alır ve en uygun çözümü bulmaya çalışır. Yazılım kavramsallaştırılırken, amaçlanan çözümü uygulamak için mümkün olan en iyi tasarımı bulmak için bir plan hazırlanır.
Yazılım tasarımının birden çok çeşidi vardır. Bunları kısaca inceleyelim:
Yapısal Tasarım
Yapılandırılmış tasarım, problemin iyi organize edilmiş çözüm unsurlarına göre kavramsallaştırılmasıdır. Temelde çözüm tasarımı ile ilgilidir. Yapılandırılmış tasarımın faydası, sorunun nasıl çözüldüğünün daha iyi anlaşılmasını sağlamasıdır. Yapılandırılmış tasarım, tasarımcının probleme daha doğru bir şekilde konsantre olmasını da kolaylaştırır.
Yapılandırılmış tasarım çoğunlukla, bir sorunun birkaç küçük soruna bölündüğü ve her küçük sorunun, tüm sorun çözülene kadar ayrı ayrı çözüldüğü 'böl ve yönet' stratejisine dayanır.
Küçük problem parçaları çözüm modülleri ile çözülür. Yapılandırılmış tasarım, kesin çözüme ulaşmak için bu modüllerin iyi organize edilmesini vurgular.
Bu modüller hiyerarşi içinde düzenlenmiştir. Birbirleriyle iletişim kurarlar. İyi yapılandırılmış bir tasarım, her zaman birden fazla modül arasındaki iletişim için bazı kuralları izler, yani -
Cohesion - işlevsel olarak ilişkili tüm öğelerin gruplanması.
Coupling - farklı modüller arasında iletişim.
İyi yapılandırılmış bir tasarım, yüksek kohezyon ve düşük bağlantı düzenlemelerine sahiptir.
Fonksiyon Odaklı Tasarım
İşlev odaklı tasarımda sistem, işlevler olarak bilinen birçok küçük alt sistemden oluşur. Bu işlevler, sistemde önemli görevleri yerine getirebilir. Sistem, tüm işlevlerin üstten görünümü olarak kabul edilir.
İşlev odaklı tasarım, böl ve yönet metodolojisinin kullanıldığı yapısal tasarımın bazı özelliklerini devralır.
Bu tasarım mekanizması, tüm sistemi daha küçük işlevlere böler, bu da bilgiyi ve işleyişini gizleyerek soyutlama araçları sağlar. Bu işlevsel modüller, bilgi aktarımı ve küresel olarak mevcut bilgileri kullanarak bilgileri kendi aralarında paylaşabilir.
Fonksiyonların bir başka özelliği de, bir program bir fonksiyonu çağırdığında, fonksiyonun programın durumunu değiştirmesidir ki bu bazen diğer modüller tarafından kabul edilemez. İşlev odaklı tasarım, sistem durumunun önemli olmadığı ve program / işlevlerin bir durum yerine girdi üzerinde çalıştığı durumlarda iyi çalışır.
Dizayn süreci
- Tüm sistem, veri akış diyagramı ile verilerin sistemde nasıl aktığı olarak görülmektedir.
- DFD, fonksiyonların verileri ve tüm sistemin durumunu nasıl değiştirdiğini gösterir.
- Sistemin tamamı, mantıksal olarak, sistemdeki çalışmaları temelinde işlevler olarak bilinen daha küçük birimlere bölünür.
- Her bir işlev daha sonra geniş olarak açıklanır.
Nesneye Yönelik Tasarım
Nesneye yönelik tasarım, yazılım sisteminde yer alan işlevler yerine varlıklar ve özellikleri etrafında çalışır. Bu tasarım stratejileri, varlıklara ve özelliklerine odaklanır. Tüm yazılım çözümü kavramı, ilgili kuruluşlar etrafında döner.
Nesneye Yönelik Tasarımın önemli kavramlarını görelim:
- Objects - Çözüm tasarımına dahil olan tüm varlıklar nesneler olarak bilinir. Örneğin, kişi, bankalar, şirket ve müşteriler nesne olarak kabul edilir. Her varlığın kendisiyle ilişkili bazı öznitelikleri vardır ve öznitelikler üzerinde gerçekleştirmek için bazı yöntemleri vardır.
Classes - Bir sınıf, bir nesnenin genelleştirilmiş bir açıklamasıdır. Bir nesne, bir sınıfın bir örneğidir. Sınıf, bir nesnenin sahip olabileceği tüm nitelikleri ve nesnenin işlevselliğini tanımlayan yöntemleri tanımlar.
Çözüm tasarımında öznitelikler değişkenler olarak saklanır ve işlevler yöntemler veya prosedürler aracılığıyla tanımlanır.
- Encapsulation - OOD'de, öznitelikler (veri değişkenleri) ve yöntemler (veriler üzerinde işlem) birlikte paketlenir, kapsülleme olarak adlandırılır. Kapsülleme, yalnızca bir nesnenin önemli bilgilerini bir araya toplamakla kalmaz, aynı zamanda dış dünyadan veri ve yöntemlere erişimi de kısıtlar. Buna bilgi gizleme denir.
- Inheritance - OOD, benzer sınıfların, alt veya alt sınıfların izin verilen değişkenleri ve yöntemleri hemen süper sınıflarından içe aktarabildiği, uygulayabildiği ve yeniden kullanabildiği hiyerarşik bir şekilde yığılmasına izin verir. OOD'nin bu özelliği kalıtım olarak bilinir. Bu, belirli sınıfları tanımlamayı ve belirli sınıflardan genelleştirilmiş sınıflar oluşturmayı kolaylaştırır.
- Polymorphism - OOD dilleri, benzer görevleri gerçekleştiren ancak bağımsız değişkenlerde değişiklik gösteren yöntemlerin aynı adın atanabileceği bir mekanizma sağlar. Bu, farklı türler için görevleri gerçekleştiren tek bir arabirime izin veren polimorfizm olarak adlandırılır. İşlevin nasıl çağrıldığına bağlı olarak, kodun ilgili kısmı çalıştırılır.
Dizayn süreci
Yazılım tasarım süreci, iyi tanımlanmış adımlar dizisi olarak algılanabilir. Tasarım yaklaşımına göre değişiklik gösterse de (işlev odaklı veya nesne yönelimli, yine de aşağıdaki adımlar dahil olabilir:
- Gereksinimden veya daha önce kullanılan sistem ve / veya sistem sıra diyagramından bir çözüm tasarımı oluşturulur.
- Öznitelik özelliklerindeki benzerlik adına nesneler tanımlanır ve sınıflar halinde gruplandırılır.
- Sınıf hiyerarşisi ve aralarındaki ilişki tanımlanır.
- Uygulama çerçevesi tanımlanmıştır.
Yazılım Tasarım Yaklaşımları
Yazılım tasarımı için iki genel yaklaşım şunlardır:
Yukarıdan Aşağıya Tasarım
Bir sistemin birden fazla alt sistemden oluştuğunu ve birkaç bileşen içerdiğini biliyoruz. Ayrıca, bu alt sistemler ve bileşenler kendi alt sistem ve bileşenlerine sahip olabilir ve sistemde hiyerarşik yapı oluşturur.
Yukarıdan aşağıya tasarım, tüm yazılım sistemini tek bir varlık olarak alır ve daha sonra, bazı özelliklere dayalı olarak birden fazla alt sistem veya bileşen elde etmek için onu ayrıştırır. Her bir alt sistem veya bileşen daha sonra bir sistem olarak işlem görür ve daha da ayrıştırılır. Bu süreç, yukarıdan aşağıya hiyerarşideki en düşük sistem seviyesine ulaşılıncaya kadar çalışmaya devam eder.
Yukarıdan aşağıya tasarım, genelleştirilmiş bir sistem modeli ile başlar ve daha spesifik olan kısmını tanımlamaya devam eder. Tüm bileşenler bir araya geldiğinde tüm sistem ortaya çıkar.
Yukarıdan aşağıya tasarım, yazılım çözümünün sıfırdan tasarlanması gerektiğinde ve belirli ayrıntılar bilinmediğinde daha uygundur.
Aşağıdan Yukarıya Tasarım
Aşağıdan yukarıya tasarım modeli, en özel ve temel bileşenlerle başlar. Temel veya daha düşük seviyeli bileşenleri kullanarak daha yüksek seviyeli bileşenler oluşturmaya devam eder. İstenilen sistem tek bir bileşen olarak gelişene kadar daha yüksek seviyeli bileşenler oluşturmaya devam eder. Her yüksek seviyede, soyutlama miktarı artar.
Aşağıdan yukarıya strateji, yeni sistemde temel ilkellerin kullanılabileceği bazı mevcut sistemlerden bir sistemin oluşturulması gerektiğinde daha uygundur.
Hem yukarıdan aşağıya hem de aşağıdan yukarıya yaklaşımlar ayrı ayrı pratik değildir. Bunun yerine, her ikisinin de iyi bir kombinasyonu kullanılır.