Transcript 4. Hafta

YAZILIM
TASARIMI
Yazılım tasarımı
Tasarım, herhangi bir mühendislik
ürünü geliştirme sürecindeki ilk
adım sayılabilir. Tasarımcının amacı,
geliştirilecek bir ürünün ilk
modelini veya gösterimini ortaya
çıkarmaktır.
Tasarım genel olarak deneyim ve
bilgi birikimiyle desteklenen
çeşitli kurallarla yapılır. İnşaat,
makine, mekanik düzenek veya
elektronik tasarımlar için çeşitli
hesaplamalar ve yardımcı araçlar
kullanılabilir.
 Bilgisayar yazılımın tasarımı ise
daha yeni bir geçmişe sahiptir.
Çeşitli geliştirme teknikleri,
tanımlama ve tasarım yöntemleri
bulunsa da yazılım mühendisliği
hala bir “ sanat” niteligindedir.
Bir kodlayıcı ne kadar iyi olursa olsun,
bir tasarım yapıp onu yeterli şekilde
yazılı hale getirmekten sonra verimli
bir geliştirme yapamaz. En küçük kod
parçaları için dahi olsa mutlaka önce
tasarım yapılmalı, ondan sonra kod
yazımına geçilmelidir.
Hiçbir bilgisayar programı
dogrudan kod yazma ile
başlamamalıdır. Zira, yazılım
tasarımı, bir binanın temeline
benzetilebilir
 Yeteri kadar sağlam olmayan bir
temel üzerine plansızca inşa
edilen katlardan oluşan bir
binanın depreme dayanıklı
olmasıda beklenemez. Ayrıca
üzerine başka bir kat çıkmakda
mümkün olmaz.
Bu bölümde genel olarak yazılım
tasarımı hakkında temel bilgiler
verilecek, basamaklar, yöntemler,
kurallar ve çeşitli özel durumlar
anlatılacaktır.
Tasarım aşaması
Genelde bir bütün olarak
düşünülmesine rağmen
yazılım tasarımı aşaması
adımlar halinde
gerçekleştirilir. En önemli
adımlardan biri veri
tasarımıdır;
çözümleme sırasında
toplanan bilgilerin bilgi
yapılarının yazlımda
kullanılacak veri yapılarına
dönüştürülmesini içerir.
Daha sonra gelen mimari
tasarımı, yazılım birimlerinin
yapısal parçalarını,
birbirleriyle ilişkisini

Yordamsal
tasarım, yazılımı
oluşturan yapısal birimler
yordam ve fonksiyonlar
haline dönüştürür. Arayüzü
tasarımı da insan-makine
etkileşiminin şeklini,
altsistemlerle olan
arayüzlerinin ayrıntılarını
içerir
Tüm bunlar bir belgede
toplanır, değerlendirilir ve
sonrada kodlama
aşamasınıa geçilir. Tasarım,
yazılımın testine kadar
herşeyi etkilediğinden
nitelik unusurunun öne
çıktığı ilk aşama olma
özelliğini taşımaktadır.

Yazılım
gelişim çevrimi
içinde yer alan ve
tekrarlanarak yapılan
tasarımla ilgili çeşitli
işlemler vardır. Bunlar
arasında projenin bir bütün
olarak tasarlanması, yani
sistem tasarımın yapılması,
Standart
yazılım
birimlerinin belirlenmesi
ve bu uygulama için
hazırlanması, yeni yazılım
birimlerinin oluşturulması,
bu birimlerin iç
yapılarının belirlenmesi,
birimleri biraraya
getirerek sistemin
Tasarımcılar
bu işleri
yaparken sıfırdan
başlamak zorunda
değillerdir. Örneğin dört
kapılı orta büyüklükte yeni
model bir arabanın
tasarımını göz önüne
alalım. Böyle bir arabanın
tasarımı yeni baştan
Önce fabrikanın elindeki
yedek parça, malzeme ve
tezgahlar incelenecek,
bunların amaca
uygunlukları dikkate
alınacak, daha önce
yapılmış bir arabanın
tasarımı örnek alınarak
tekrar kullanılabilcek

yeni
araba için düşünülen
eklemeler yapılacak,
parçalar üzerinde bu yeni
tipe uygun küçük
değişiklikler tasarlanıp
üretilecek, ortaya çıkan ilk
örneğin denenmesi ve
testlerden sonrada seri
üretime geçilecektir.
 Yazılım
geliştirmede benzer
bir yol izler. Burada söz edilen
ana mazlemeler, yedek parça
ve tezgah gibi standart birimler
değil, o çalışma grubu
tarafından belirli amaçlar için,
kullanılmakta olan yazılım
yardımcı araçları veya tekrar
kullanılabilir kod parçaları
olabilir.
Standart
birimler yeterli
olmadığı zaman projenin
isterlerini karşılayabilcek
yeni birimler oluşturulur.
Son aşamada da tüm
parçalar bir araya
getirilerek tasarıma son
şekli verilir.
Tasarımın
birinci amacı
herzaman basitlik
olmalıdır. Çnkü, anlaşılır
ve basit bir tasarım hem
kodlamada hemde
sonraki değişikliklerde
kolaylık sağlar.
İleride gereksinim duyulabilecek
iyileştirme, genişleme,
taşınabilirlik gibi bazı
durumların önceden
sezilenmemesi halinde, sistemin
bu tür değişime açık olması
tasarım ve gerçekleştirimin basit
olması ile gerçekleşebilir.
Sistem
öyle
tasarlanmalıdır ki, bir dizi
değişiklik yapılsa bile
sistem tasarımı hala basit
kalabilmelidir. Bunun için
değişiklik yapılması olası
olan kısımlara özel dikkat
gösterilmeli,
veri
yapılarında esneklik
sağlanmalı, programlama
dilinin sağladığı kolaylıklar
göz önüne alınmalıdır.
Yazılım
tasarımı sırasında
sürekli olarak gözetilmesi
gereken temel ilkelerden
en önemli gördüğümüz üç
unsuru şunlardır:
Soyutlama
(abstraction),
denetimi ve anlaşılabilirliği
artırmak üzere en az ayrıntı ile
işlen yapmaktır. Bu amaçla,
yazılım isterlerini gruplayarak
karşılamak üzere bileşenler,
birimler ve modüller oluşturulur,
aralarındaki ilişkinin en aza
indirgenmesine çalışılır.
Birbirlerinden
soyutlanan
modüllerde bulunan
yordam ve veriler üzerinde
erişim kısıtlamaları
sağlanarak bilgi güvenliği
artılırır.
Bilgi
gizleme (information
hiding), modüllerin iç yapılarını
değerlerinden gizlemek, bu
şekilde karmaşıklığı
engellemek ve soyutlamayı
arttırmaktır. Bunun yararıda
geliştirme, testler ve bakım
sırasında ortaya çıkarak
gereksinim duyulabilecek
değişiklerden etkilenme en aza
indirgenir.
Kapsama
(encapsulation),
tüm isterlerin etkisiz olarak
karşılanması amacıyla
yordam ve verilerin
denetim altına alınmasıdır.
Bu
ilkelerin sayısını daha
da arttırmak mümkündür.
Yazılım nitelik etmenlerini
tasarıma yansıtmakta bir
ilke olarak
değelendirilebilir
Esneklik, gelişebilirlik
ve
taşınabilirlik özelliklerine
tasarım aşamasında gerekli
önem verilmesi ile, bakım
sırasında gereksinim duyulan
niteliksel özelliklerde
kendiliğinden belirlenmiş ve
ortaya çıkması olası sorunların
önüne geçilmiş olur.
Tasarım
nitelikleri olarak
adlandırılan aşağıda
sıraladığımız bu özelliklerin
yazılım tasarımı yapılırken
sürekli göz önünde
bulundurulması gereklidir:
İsterler
ile izlenebilirliği
olmalıdır.
Geliştirilen birimin kodu ve
tesleri ile izlenebilirliği
olmalıdır.
Programlama dilinden
olabildiğince bağımsız
olmalıdır.
İşlevselliği, başarımı ve
Yürütme
sırasında oluşabilcek
hataların ilgili iş sürecini
aksatmayacak şekilde kurtarılması
sağlanmalıdır.
Öğrenmesi ve kullanması kolay bir
ürünü hedeflemelidir.
Tekrar kullanılabilir olmalıdır.
Bir ürün ailesin temel
oluşturabilmelidir
Kolay
anlaşılmalıdır.
Gerektiğinde kolaylıkla
değiştirilebilmelidir.
Kurumsal tasarım standartlarına
uygun olmalıdır.
Diğer tasarımlarla birleştirilmesi
mümkün olmalıdır.
Yazılım
projelerinde tasarım,
projenin büyüklüğüne göre, yazılım
tasarım uzmanları tarafından
yapılır; personel yeterlilğine,
deneyime ve projenin
karmaşıklığına bağlı olarak sistem
çözümleyicisi veya proje yöneticisi
hatta kodlayıcılar tarafından da
yapıldığı olur.
Bazen
de, büyük bir sistem
bileşenlere ayrılır ve
herbir bileşenin
çözümlemesi, tasarımı ve
gerçekleştirilmesi ayrı
gruplar tarafından yapılır.
Yazılım
Yazılım
Tasarım Süreci
geliştirme sürecinin
ana aşamaları daha önce
belirtilmişti. Bu aşamalardan
ilki olan isterler çözümlemesi
daha kurumsal iken,
tasaraım,kodlama ve test daha
tekniktir.
Tasarım
aşaması bir tür
süreç şeklindedir. B u süreç
sonunda ortaya cıkan
tasarım , kodlamanın ve
testin temeli oldugu için
mutlaka yeterli zaman
ayrılması gereklidir.
Tasarımın
niteligini
degerlendirebilmek için iyi
bir tasarım kıstasların
belirlenmesi gereklidir. B u
kıstaslar genellikle yazılım
geliştirme planında
kullanılan standaryla
belirtilidir.
Yazılım
tasarımı sürecinde
ve tanımlamalarda rehber
olarak aşagıdaki standartlar
kullanılabilir:
Tasarım
için çeşitli yazılım
geliştirme yardımcı araçları
kullanabilcegi gibi, çeşitli
tasarım yöntemleri de
kullanılabiliri sonuçta
ortaya elektronik yada
basılı ortamda çeşitli
belgeler çıkar. .
Tasarım
sırasında isterler yazılım
geliştirmede kullanılacak ifade lere
dönüştürürler.Teknik olarak,süreç
başında,bu ifadeler ve gösterim
tarzı ve yazılım genel görünüşü
oluşturulurken ,süreç sonunda
tasarım kaynak koda yakın bir hale
gelir. Yönetsel olarak bu süreç iki
aşamada ele alınır:
ön
tasarım(preliminary
design):İsterlerin veri ve mimari
tasarımına dönüştürülmesidir.
Ayrıntılı tasarım(detail
design):Veri ve mimari
tasarımın ayrıntılı veri yapıları
ile algoritmik gösterime
dönüştürülmesidir.
Her
iki aşamanın
sonunda resmi gözden
geçirme işlemi
yapılır.Pek cok projeden
bu aşamalar ödemeye
esas önemli geçiş
noktalarıdır.
Yazılım
tasarımı,isterler
cözümlenmesi sonunda elde
edilen bilgilerle gercekleştirilir.Ve
kodlamaya esas olacak veri
tasarımı ,mimari tasarım,
yordamsal tasarımive ara yüz
tasarımı yapılır.Bu arada gerekli
belgeler üretilir .
 Şekil
 VERİ TASARIMI
 Veri yapıları ve
modelleri,birbirleriyle mantıksal
olarak ilişkili veririleri
yönetilebilir olarak bir arada
tutmaya yararlar.bu yapılar ve
modeller, veriler arasındaki sıra
düzensel ilişkileri ve erişim
yöntemlerini belirler.
 Yapıların düzenlenmesi ve karmaşıklık
derecesi tamamen tasarımcı
tarafından belirlenir.tasarımcı,veriye
erişim
yöntemi,hız,etkinlik,büyüklük,işllev
bakımından çözümlemesini yaparak
en uygun veri tiplerini ve yapıları
belirler
 veri yapıları ve modelleri bu
kitabın konusu dışında
tutulduğu için yanlızca
tanımlama olarak kısaca
değinelim:
 sayısal ögeler,belirli bir temel
tipten olup programlama dili
ve donanıma göre değişiklik
gösterilebilir. örneğin C
dilindeki tam sayı,bazı
donanımlar için 32 bit,bazıları
için 64 bit ile gösterilmektedir.
 diziler birden fazla aynı tür
ögenin ardışık olarak
sıralanmasıyla oluşur.Tek
boyutlu olanlar bazen vektör
adını alır.Dizilerin çok sayıda
boyuta sahip olduğu durumda
matrisler oluşur.
 dinamik veri yapıları,programın
çalışması sırasında gereksinim
duyuldukça bellekde yaratılması
ve yönetilmesi esasıuna
dayanır.bağlı listeler(linked
list),ağaç(tree)ve
eşlem(map)yapıları buna
örnektir.
 veri yapılarının ve modellerinin ne
şekilde kullanıcağı da ayrı
soyutlama kavramlarının
kullanımını gerektirir.örneğin,bir
bağlı liste ,ya"ilk giren ilk
çıkar"(first -in first-out)ilkesine
dayalı bir yığın(stack)yada rastgele
erişimli bir depo olabilir.
 tasarım sırasında benimsenen
soyutlama derecesine göre,veri
yapısının iç tasarımı belirtilmeden
işlevselliği ön planda
tutulabilir.yani,tasarımcı,yanlızca
bir yığın kullanmak istediğini
belirtebilir,yığının
gerçekleşinmine kodlayıcıya
bırakabilir.
 veri yapısı ile veri modeli içiçe
geçmiş iki ayrı kavramdır.
birisi verinin bellekde
tutulması veya saklanmasıyla
ilgilenirken diğeri veriler
arasındaki ilişki ve bağıntıla
konusuyla ilgilenir.
 veriler üzerinde işlem yapacak
olan algoritmalar da bu veri
modellerine göre tasarlanırlar.
 iyi bir veri tasarımı
yapabilmek için aşağıdaki
kuralların uygulanmasında
yarar vardır.
 1-işlevsel çözümlemeye verilen
önem kadar veri çözümlemesi ve
tasarımına da önem
verilmelidir.Gözden geçirmeler
sırasında veri yapılarının da tasarımı
incelenmelidir. önem verilmeyen ,
göz ardı edilen bir tasarımın başarılı
olması beklenemez.
 2-veri yapıları ve modelleri
yanında bu yapılar üzerinde
yapılacak işlemlerin de
tanımlanması gereklidir. bu
tanımlama nesneye yönelik
programlamada doğal olarak
yapılır;
 ancak yapısal programlamada
özel dikkat gereklidir. nesneye
dayalı programlamada
kullanılan soyut veri tipleri de
veri ve işlemleri içerdiğinden
önerilebilir.
 3-kullanılacak veri yapılarını
oluşturan birimlerin
türleri,sınırları ve birbirleri ile
olan ilişkileri bir veri sözlüğü
içinde toplanmalıdır.bu sözlük
kullanılarak karmaşık yapıların
ve algoritmaların tasarımında
kolaylık sağlanır.
 4-veri yapılarının
tanımlanmasında döngüsel bir
yol izlenmesi daha uygundur.
her şeyin başında iken tüm veri
yapılarını en ince ayrıntılarına
kadar tasarlamaya çalışmak
başarılı bir sonuuç vermeyebilir.
 bu nedenle, tasarımın başında
anahatları oluşturulan veri
yapılarının tasarım ilerledikçe
alt düzey ayrıntılarını
tamamlamak daha fazla yarar
ve zamandan kazanç sağlar.
 5-veri yapıları yalnızca
kendilerini kullanan modüllere
görünür olmalıdır. bu şekilde
"Bilgi Gizleme"ilkesine
uyulmuş olur.
 6-çok kullanılması olası veri
yapıları , soyut veri türleri
şeklinde önceden geliştirilerek
bir kütüphane haline
getirilirse,geliştirme sırasında
veri yapılarını kodlamak ve test
etmek için zaman ayrılmasına
gerek kalmaz.
 Örneğin,bir bağlı liste ve ilgili
işlemleri genel amaçlı olarak
önceden geliştirilirse,kod
yazarken açıkta kalan
göstergeç(dangling pointer)
veya bellek temizlenmemesi
gibi problemlerden sakınılmış
olur.
 Bir başka öneri de , C++ dilinin
desteklediği "Standart
Template Library" gibi
önceden geliştirilmiş hazır ve
standart yapıların kullanımıdır.
 7-Tasarım sırasında ,
kodlamada kullanılacak
programlama dilinin özellikleri
dikkate alınarak veri yapıları
tanımlanmalıdır.
 Günümüzde kullanılmakta olan
genel amaçlı programlama
dillerinde pek sorun
yaşanmayabilir;ancak
,FORTRAN gibi bir dilde bağlı
liste yaratmak mümkğn değildir.
 8-karmaşık veri yapılarının
kullanımı gerekiyors
kullanılacak programlama dili
soyut veri türlerini(abstract
data types) destekleyebilecek
şekilde seçilmelidir.
 Nesneye yönelik bir
programlama dili
kullanılabilecekse onunla
yapısal programlama
yapmaya çalışmak pek doğru
olmaz.
MİMARİ
Uygulama
TASARIM
yazılımı bir
problemin çözümünü çeşitli
parçalara bölerek
sağlayabilir.bu parçaların
yazılımdaki karşılığı
modüllerdir. Modüllerin
sıradüzensel ilişkilerini
gösteren yapıya uygulama
yazılımı mimarisi denir.
Yazılım
içindeki modüller birer
nesneye olabileceği gibi,tasarım
veya gerçekleştirim yönteminin
özelliğine göre ,birer program
,birer paket ,birer nesne veya
birer yordam olabilirler.yapıının
çıkış yelpazesi,genişliği ve
derinliği modüler yapı
hakkındaki önemli ölçütlerdir.
Bu
modüller ayrıt 2.6 da
değindiğimiz genel yazılım
mimarileri şeklinde
yapılanabilirler. Yazılım
mimarisi seçiminde
dikkate alınması gerekli
noktaları şu şekilde
özetleyebiliriz.
1-UYGULAMA ALANININ ÖZELLİKLERİ
Yazılımın
kullanacağı alanın
gereksinimlerine göre yazılım
birimlerini fiziksel olarak
belirli donanım öğeleri üzerinde
çalıştırmak gerekebilir.
Sistemin
merkezi yada
dağıtık olması , açık sistem
olması , belirli bir amaçla
kullanmak üzere tahsis
edilmesi yada gömülü
sistem olması mimari
seçimine etki eder.
2-UYGULAMA YAZILIMININ
KARMAŞIKLIK DERECESİ
Basit
uygulamalar,tek
program içinde,her türlü
arayüz ve bilgi işlemeyi
kapsayacak şekilde
geliştirilebilirler.
Daha
karmaşık
uygulamalarda,hem
geliştirilme hem de
yürütme bakımından
yazılımı öğelere ,öğeleri de
birimlere bölmek daha
kolay şekilde
geliştirme,test ve bakım
3-KULLANICI ARAYÜZÜ
KISITLAMALARI
Bilgi işleme birimleri ile
kullanıcı arayüzünün farklı
mimariye sahip işlemcilerde
çalışması gereken durumlar
olabilir.
Yüksek
nitelikde grafik
görüntü verebilen
bilgisayarlar her amaç için
uygun olmadıklarından bir
ayrım yapmak gerekebilir.
o taktirde , uygun bir
iletişim alt yapısı
kullanılması zorunludur.
1-TAŞINABİLİRLİK
Geliştirilen
yazılımın
sonradan başka işletim sistemi
veya donanım ile kullanılmak
üzere farklı ortamlara
taşınması
gerekiyorsa,katmanlı bir
yaklaşımla,asıl yazılımı olası
taşıma işinden etkilenmeyecek
şekilde tasarlamak gerekir.
Bu
amaçla,yazılım
mimarisi içine uygun
katmanlar
yerleştirilebileceği gibi
iletişimin zorluklarını
gidermek üzere bir ara
katman mantığı da
 Yordamlar(procedure,function)
bilgi işlemeyi gerçekleştirmek
üzere yazılım modülünün iç
yapısında bulunurlar.bir
yordam,veri
yapıları,döngüler.karşılaştırmalar,
dallanmalar yardımıyla tüm bilgi
işleme özelliklerini tanımlamalıdır.
 Yordamlar arasında da belirli
bir yapı gözetilmesi
zorunludur.bir yordam içinde
başka yordamların
çağrılması,yazılım
mühendisliği kuralları
bakımından gereklidir.
 Bir modülün tüm işlevlerinin
tek bir yordamla
gerçekleştirilmesi olası
olmadığı gibi,yordam içinde
yordam çağırmada aşırıya
kaçılmamalıdır.
 Veri ve program yapılarının
tasarımı tamamlandıktan sonra
yordamsal tasarım
başlar.Yordamsal
tasarım,modüllerin iç
yapılarındaki algoritmik
ayrıntıların tanımlamnmasıdır.
 Tasarım konuşma diline yakın
bir anlatımla yapılabileceği
gibi çeşitli şekilsel
gösterimlerle de
yapılabilir.şimdi yordamsal
tasarımın nasıl yapılacağını
görelim.
YAPISAL PROGRAMLAMA
GÖSTERİMİ
 Yazılım
tarihinin en eski tasarım
yöntemlerinden biri işlevleri
metinsel bir şekilde
anlatmaktır.bu anlatım için
genellikle ingilizce
kullanılmaktadır.Program
tasarım dili(programming
Desing Language)adı verilen
bir dilde tasarım için
Sözde
kod(pseudo) adı
verilen bu yöntemle ,
gerçek programlama dili
yapılarına benzer şekilde
,ancak daha serbest bir söz
dizimiyle her yapı ve her
yordam
tanımlanır.genellikle ardışık
deyimler, koşullu dallanma
Program
tasarım dilleri
genellikle ADA veya
PASCAL gibi yüksek düzey
bir dili andırırlar. özel bir
yazılım paketi
gerektirmeksizin normal bir
metin yazıcı kullanılabilir.
Tasarım
dili ile yazılmış
metin dosyalarını grafiksel
bir tasarım yöntemine
dönüştürebilen araçlarda
bulunmaktadır.Örneğin,bi
r yazılım paketi bir tasarım
kodunu tarayıp akış
diyagramı üretebilir.
Piyasadan
temin
edilebilecek çeşitli
tasarım dilleri de vardır.
Bunların sahip oldukları
ortak özellikler arasında
şunlar sayılabilir:
 1-Her
türlü yapıyı
destekliyebilen sabit bir
anahtar sözcük listesi
 2-Veri tipleri ve veri yapıları
tanımlama yeteneği
 3-Alt program tanımlama ve
çağırma düzeneği
 4-Bilgi işlemeyi serbest bir dille
anlatabilme olanağı
5-arayüz
tanımlama
yeteneği
6-koşul ve çevrim yapıları
7-giriş/çıkış yapıları
8-zaman belirtimleri
Bilinen
yapıların kullanımı
nedeniyle okunması ve
takibi kolaydır.
Programlama diline yakın
olduğu için kodlayıcının işi
daha kolaydır.
Ancak
bu anlatımda aşırıya
kaçılır ve gereksiz ayrıntıya
girilirse (örneğin anlaşılır
olmasına rağmen bir veri
yapısının üm alanlarına tek
tek veri atmayı göstermek)
tasarım uzar,ayrıntıya
boğulur ve amacı dışına
çıkar.
Böyle bir
tasarımda,tutarlılığı korumak
son derece güç olur. Öte
yandan ,kod içinde yapılan
küçük değişikliklerinde
tasarım belgelerine
uygulanması gerekir.

 Bazen
bir resim bir çok satırdan
oluşan bir anlatımın yerine
geçebilir,bu gerçekten hareketle,
çeşitli grafiksel gösterim
yöntemleri bulunmuş, bu
yöntemleri kullanan yazılım
tasarım araçları geliştirilmiştir.
Ancak , bir şeklin eksik yada
yanlış çizilmesi , okuyucunun
gösterim simgelerini iyi bilmemesi
sonucu tasarımı yanlış anlaması
hatalı kodlamaya neden olabilir.
 Bu
nedenle grafiksel
gösterimlerin iyi
öğrenilmesi ve iyi
anlaşılması
gereklidir.Şimdi grafik
tabanlı gösterim
şekillerine biraz
değinelim :
 Yapısal
çözümleme ve
tasarım yapmak için veri
akış diyagramları ve durum
geçiş diyagramları
kullanılır.bu konudaki
ayrıntılı bilgiler yapısal
çözümleme kısmında
verilmiştir.
 "Unified
Modelling
Language"(UML),nesneye yönelik
çözümleme ve tasarımın hem
metinsel hem de grafiksel olarak
yapılabilmesine yardımcı olan
uluslararası çevrelerce kabul
edilmiş,standart ve yaygın bir
tanımlama dilidir.
Piyasada bu dili
destekleyen çeşitli yazılım
araçları ve tümleşik
ortamlar
bulunmaktadır.UML
hakkında tanıtıcı bilgiler
Ek-D de Verilmektedir.

 En
eski ve en yaygın program
tasarım yöntemlerinden biri
akış diyagramları (flow chart)
kullanmaktadır. günümüzde
bir program çok sayıda
modülden veya yordamdan
oluştuğundan , çok sayıda akış
diyagramı kullanmak
 Uzun
veya karmaşık
yordamlarda iç içe
diyagramlar kullanmakda
mümkündür.Hazırlanan
diyagramlar arası geçişin
sağlanması ve tutarlılığın
korunması bir miktar
zorluk getirir.
Çeşitli
tasarım yöntemlerinde
kullanılabilecek görsel
anlatımları ve diyagramları
ikiye ayırmak mümkündür.
Bunlardan ilki olan ve durağan
olarak nitelendirilebilecek
yapısal tasarım gösterim
teknikleri içinde şunlar yer
alabilir:
1-sınıf
nesne diyagramları
2-bileşen diyagramları(component
diagrams)
3-konuşlandırma
diyagramları(deployment diagrams)
4-Varlık-ilişki diyagramları(entityrelationship diagrams)
5-Yapı diyagramları(structure charts)
Dinamik
olan
davranışsal tasarım için
de aşagıdaki
tekniklerinden biri
kullanılabilir:
1-işleklik
diyagramları(activity
diagrams)
2-işbirliği diyagramları
(collaboration diagrams)
3-veri akış diyagramları
(data flow diagrams)
4-karar
tabloları ve
diagramları(decision
tables)
5-akış
diyagramları(flowcharts)
6-Sözde kod(pseudo code)
7-Ardıllık
diyagramları(sequence
diagrams)
8-Etkileşim
diyagramları(interaction diagrams)
9-Durum geçiş diyagramları(state
transition diagrams)
10-durum diagramları(statechart
diagrams)
ARAYÜZ TASARIMI
 Modüller
bir şekilde geliştirilen
yazılımın çeşitli arayüzleri
bulunur. bunların bir kısmı içsel
arayüzler bir kısmıda dışsal
arayüzlerdir. içsel arayüzler
genellikle yazılımın kendi iç
öğeleri,bileşenleri ve birimleri
arasındadır.
Yazılımın
dış dünya ile
arayüzü ise başka
sistemlerle olabileceği gibi
etkileşimli sistemler için
kullanıcıyla da olabilir.
Tasarım,arayüzün bu
özelliğine göre değişiklik
BİLEŞEN ARAYÜZ TASARIMI
Büyük
yazılımlar bir kaç ana
öğeden , her bir öğe birkaç
bileşenden ya da birimden
oluşabilir.bu bileşenler arasında
mutlaka tanımlı bir arayüz
vardır.Bileşenler ya da birimler birer
yürütülebilir program olabilecekleri
gibi,bir program grubuda olabilirler.
Daha
ince tanelikli yapılarda
ise bileşenler ayrı birer
görevcik(thread),hatta birer
yordam grubu
olabilirler.Bağımsız birer süreç
halinde geliştirilen bileşenler
birbiriyle işletim sisteminin
sağladığı çeşitli alt düzey
iletişim düzenekleriyle
haberleşirler.
 Örneğin,
Unix tabanlı işletim
sistemleri için bağlantılar(socket),ileti
kuyrukları(message
queue),paylaşılır bellek
parçaları(shared memory) ve
semaforlar kullanılır. Bu düzenekler
yardımıyla arayüzü oluşturan
iletilerin veya uzaktan yordam
çağrılarının(remote procedure call)
gerçekleştirimi yapılır.
Bileşenler arası Arayüz
tasarlarken dikkat edilmesi
gerekenleri şöyle
özetleyebiliriz:
1-Arayüz anlaşılır yapıya
sahip ileti ya da
yordamlardan oluşmalıdır.
2-İleti tabanlı arayüzlerde
başarım için ileti boyutu
uygun şekilde ayarlanmalı,
çok kısa ve çok uzun iletiler
kullanılmamalıdır.

3-Büyük
miktarda veri
aktarımı için ileti yerine
ortak bir veri deposu ve
aktarılıcak verinin adresi
kullanılmalıdır.
4-Arayüzler belirli bir veri
tipine bağımlı olmamalıdır.
KULLANICI ARAYÜZ YAZILIMI
TASARIMI
Bilgisayar
sistemlerinin
hemen hemen hepsi
insanların denetiminde
çalısırlar. Bu nedenlede
kullanımı kolay,etkili ve açık
bir arayüze sahip
olmalıdırlar.
Sistemler
genellikle
standart bir bilgisayarın
arayüzü ile denetlenirler.
Yani, bir klavye ile girdi
sağlanır ve ekranda çıktı
görülür.
Bunlar
dışında basılı
çıktılar,çeşitli göstergeler
çıktı için kullanılabileceği
vibi çeşitli tuş takımları,
işaretçi ayar düğmeleride
girdi için kullanılabilir.
Önemli
olan,uygulama
alanında en uygun kullanım
olanağını sağlayacak
yöntemi bulmak,uygulamak
ve en iyi etkileşimi
sağlamaktır.
SİSTEM-ALTSİSTEM ARAYÜZ
YAZILIMI TASARIMI
 Çogu
sistem birkaç altsistemi
tümleştirerek daha büyük sistemler
elde etmek üzere tasarlanır.
Tümleştirme için altsistem arayüz
yazılımları kullanılır.bu yazılımlar
denetledikleri alt sistemlerin
gerektirdiği iletişim protokollerini
destekleyerek veri alışverişini
sağlarlar.
Arayüz
yazılımları
tümleştirilen altsistemin
özelliğine göre çok çeşitli
yapıda olabilirler.Alt
sistemden gelen veriler Veri
alıcı modul ile arayüz
donanımından okunur.
Bir
veri katarı şeklinde olan
bu ham veri,Arayüz isterleri
Belirtiminde yada teknik
anlaşmada anlatılan
yönteme göre ve sınır
kontrolü yapılarak tüm
alanları anlaşılabilir iletiler
haline dönüştürülür.
İletinin
adına göre bir dallanma
yapılarak içindeki veriler işlenmek
üzere alınır ve bilgi haline
getirilir.bu bilgiler ana sistemin
kullandığı arayüze sistem girdisi
yada bir komutun yanıtı olarak
gönderilir,aynı zamanda sistem
içinde bulunan ortak veri
yapılarıda tazelenir.
Ana
sistemden gelen
çıktılar yada komutlar
arayüz giriş biriminde
işlenerek ortak yapıların
da yardımıyla iletiler
oluşturulur.
Bu
iletiler protokole gore veri
katarına çevrilerek arayüz
donanımına yazılır.Ana
sistemden gelen komutlara
göre bir test çevrimi başlatmak
yada durum bilgisi almak
mümkündür.
Bazı
altsistemler düzenli
aralıklarla haberleşmek
isteyebilirler.Bu iletileri
üretmek,zaman aşımlarını
denetlemek ve artık toplamak
üzere bilgisayar saatini
kullanan bir periyodik işlem
birimi kullanılabilir.
 Bu
işlevler yanında,altsistem
arayüz yazılımı tüm birimlerden
gelen hata iletilerini toplayıp
raporlama ve sonradan
çözümleme amaçlı olarak
kaydetme yeteneğine sahip
olmalıdır.Her altsistem,ana
sisteme kendi durumu hakkında
sürekli rapor(heartbeat)vermelidir.
TASARIM YÖNTEMLERİ
İyi bir tasarım için belirli bir
yöntemi seçip kurallarıyla
uygulamak gereklidir.hangi
tasarım yöntemi veya aracı
seçilirse seçilsin iyi kullandığı
takdirde pek çok yarar sağlar.
 Ancak eksik yada hatalı kullanım
geliştirilecek yazılımında hatalı
olmasına neden olur.çünkü
kodlama tasarıma dayanarak
yapılır.projede resmi tasarım
tekniklerinin benimsenmesi bazı
etmenlerden dolayı engelleniyor
olabilir.
 Bunlar arasında,proje sürelerinin
yeterli olmaması, tasarım araçlarına
yeterince yatırım
yapılmaması,gerekli eğitimlerin
alınamaması,üst yönetimden yeterli
desteğin sağlanamaması,yazılım
geliştirme personelinin isteksizliği
gibi nedenler sayılabilir. yinede
belirli bir yöntem seçilerek kurallara
göre uygulanması için çaba
harcanmalıdır.
 Yazılım tasarımında
kullanılabilecek pek çok yöntem
bulunmaktadır.Bu yöntemleri şu
şekilde listeleyebiliriz:
 1-Böl ve yönet(divide-and-conquer)
 2-Tümevarım(bottom-up)
 3-Tümdengelim(top-down)
 4-Aşamalı
ayrıntılandırma(stepwise
refinement)
 5-Buluşsal yöntemler(heuristic
methods)
6-Deneme yanılma
yaklaşımı(iterative approach)
7-Artımlı
yaklaşım(incremental
approach)
8-İşleve yönelik
tasarım(function-orient
design)
9-Yapısal tasarım(structural
design)
10-Veri akışına yönelik
tasarım(dataflow-orient
design)
11-Nesneye yönelik
tasarım(object-orient design)
12-Veriye yönelik
tasarım(data-orient design)
Tasarım oldukça geniş bir
konu olduğu için,bir burada
en yaygın olarak kabul edilen
yöntemlerden bir kaçının
özelliklerine değinmek
istiyoruz.
Bunlar yapısal
tasarım(structral
design),veri akışına yönelik
tasarım(data-flow-orient
design),nesneye
yönelik(objectoriented)tasarım ve veriye
yönelik (data-oriented)
tasarımdır.
VERİ AKIŞINA YÖNELİK TASARIM
 Yazılım isterleri çözümlemesinin
bir parçasının bilginin
çözümlenmesi olduğuna
değinmiştik.Bilgisayar tabanlı bir
sistemde,bilgi belirli bir şekilde
sisteme girer,çeşitli aşamalarda
değişikliğe uğrar ve sistemden
çıkar.
Yazılım tasarımında bu bilgi
akışı dikkate alınarak veri
akış diyagramları(data flow
diagram)kullanılır.Bu
diagramlara daha önce
yapısal çözümleme kısmında
değinmiştik.
Veri akışına yönelik(data
flow-oriented)tasarım
yönteminde verilerin değişim
şekilleri program yapısına
uyarlanır.
Bu yöntem modüler
yaklaşım,yukarıdan aşağı
tasarım modeli ve yapısal
programlama ile birleştirilerek
oluşturulmuştur.Her ikiside
aynı özellikleri taşıdığından
yapısal tasarıma ayrıca
değinmeyeceğiz.
Veri akışına yönelik
yöntemin çok çeşitli
uygulama alanları
vardır.Aslında,her türlü
yazılım bir veri akış
diagramıyla gösterilebilir.
Ancak veri akışına yönelik
yaklaşım,özellikle sıra
düzensel veri yapılarının
bulunmadığı ve bilgilerin
ardışık olarak işlendiği
yazılımlar için daha
kullanışlıdır.
Karmaşık sayısal çözümleme
yazılımları,mühendislikle
ilgili çeşitli yazılımlar ve
kontrol sistemleri yazılımları
örnek olarak verilebilir.
 Bu yöntemin biraz daha
genişletilerek gerçek zamanlı ve
kesme kontrollü uygulamalarda
kullanılması sağlanmıştır.veri
tabanı sistemleri,uzman
sistemler,nesneye yönelik
arayüzlerin bulunduğu
sistemlerde diğer yöntemlerin
kullanılması daha uygun olur.
Yazılım isterlerini veri akışına
yönelik olarak tasarıma
aktarabilmek için bilgi
akışının program yapılarına
dönüştürülmesi gereklidir.
Bu amaçla bilgi
akışının,sınırların,işleme
şeklinin ve yapıların
tanımlanması
gereklidir.Tanımlaama için
kullanılacak veri akış
diyagramlarında gösterim şekli
olarak iki tür bilgi akışı yer alır.
 DÖNÜŞÜM(transform)AKIŞI:
 Her sisteme dış dünyadan bir giriş
vardır.Girişler sistem içinde işlenir
ve dış dünyaya çıkış şeklinde
gönderilir.Giriş akışı,sistemin
dönüşüm merkezinde işlenir ve
çıkış haline dönüşür.
Her giriş bu merkezde ardışık
bir sıra ile işlenir ve bir
dönüşüm akışını oluşturur.
 ARA-İŞLEM(transaction)AKIŞI:
Giriş şeklinde gelen bir veri
akışı ,bir veri öğesine göre
,çeşitli akış yollarından birine
yönlendirilerek bir başka veri
akışını tetikleyebilir.
Bu şekilde bir ara işlem akışı
oluşur.Her akışda ara-işlem
değerlendirilerek elde edilen
değere göre bir hareket yolu
seçilir.
 TASARIM
veri
AŞAMALARI
akışına yönelik
tasarım,akış diyagramının
incelenmesiyle
başlar.Önce akış türleri
belirlenir ve akışın sınırları
çizilir. Dönüşüm ve araişlem merkezleri belirlenir.
Sınırların
yerine göre
dönüşümleryani daire ile
gösterilen süreçler,birer
modül olarak program
yapısı ile örtüşür hale
getirilirler.
Tanımlama
ve
örtüşmenin yapılışı
dönüşüm ve ara-işlem
çözümlemeleri ile
gerçekleşir
Süreçlerle
yapıların hassas
bir şekilde örtüşmesi,
yürütme denetiminin
yukarıdan aşağı doğru
süreçlere dağıtılmasıyla
yapılır. Bu aşamada
modülerlik özelliğinin
korunmasına dikkat edilir.
DÖNÜŞÜM
ÇÖZÜMLEMESİ
Dönüşüm
çözümlemesi,program
yapısını oluşturmak üzere ,
isterler çözümlemesi
sırasında yapılan işin tekrar
gözden geçirilmesiyle
başlar.
yazılım isterleri
belirtiminde anlatılan
sistem özellikleri ile düzey
0 veri akış diyagramı
kullanılarak bilgi akışları
yapı ve arayüzler incelenir.

veri
akış diyagramı daha
ayrıntılı hale getirilerek
Düzey 1 ve düzey 2 veri akış
diyagramları hazırlanır.Bunlar
içinde dönüşüm akış
özellikleri olanlar aranır.
Bu
maksatla girişden çıkışa
doğru giden akışlar ele
alınır.ara-işlem dönüşümü
olup olmadıgına bakılır.
bilginin
yorumlanarak girişe
dönüştürüldüğü ve işlenen
verilerin çıkış bilgisi haline
dönüştüğü yerler akış sınırları
olarak çizilir.bu sınırlar arasında
kalan süreçler dönüşüm
merkezini oluşturur.
Program
yapısı,yürütme
denetiminin yukarıdan
aşağıya dağıtımının bir
gösterimidir.
bu
yapının oluşturulması
amacıyla ayrıştırma
yapılır,giriş,karar
verme,bilgi işleme,çıkış ve
bazı diğer toplu işlerin
yapıldığı modüller
belirlenir.
önce,giriş,dönüşüm
ve
çıkış akışları üzerinde
bulunan süreçler modüllere
dağıtılır,sonra da kalan
süreçler en uygun
modüllere bölüştürülür.
genel
tasarım ilkeleri göz
önüne alınarak program yapısı
iyileştirilir.bir kısım modüller
birleştirilir yada daha küçük
parçalara ayrılır.sonuçta
iyileştirilmiş bir program yapısı
elde edilir
ARA
ara
İŞLEM ÇÖZÜMLEMESİ
işlem çözümlemesinde izlenen
yol aşağı yukarı dönüşüm
çözümlemesinde olduğu
gibidir.Aralarındaki temel fark veri
akış diyagramının program
yapısına uydurulmasıdır.
düzey
0 veri akış diyagramı,yada
diğer adıyla temel sistem modeli
incelenir.
veri akış diyagramları gözden
geçirilir ve gerekiyorsa düzeltme
yapılır.
veri akış diyagramının neresinde
dönüşüm,neresinde ara-işlem akışı
olduğu araştırılır.
bir
giriş ve birden fazla çıkış
olan süreçler ara-işlem
merkezi olarak belirlenir ve
her çıkış yani her eylem yolu
için akış özellikleri
tanımlanır.giriş yolu yani araişlem akışı ile çıkış yolları
için sınırlar çizilir.
ara
işlem akışı
,dağıtıcı(dispatcher)bir
program yapısına
uydurulur.girişe göre
yapılacak bir dallanmada
kullanılacak modüller
tanımlanmış olur.
genel
tasarım ilkeleri göz
önüne alınarak program
yapısı
iyileştirilir.modüllerin
bazıları birleştirilerek veya
daha küçük parçalara
ayrılarak program yapısı
iyileştirilir.
MODÜLER
veri
TASARIM
akışına yönelik tasarımla oluşturulan
program yapısı üzerinde bazı
düzenlemeler yapılarak etkin bir
modüler,yani birimsel tasarım elde
edilebilir.sistem parçalara ayrıldıkça,her
parçanın karmaşıklık derecesi azalacak
,dolayısıyla da sistemin toplam
karmaşıklığı düşecektir
modül
sayısının çok az olması
yeterli soyutlama ve ayrıştırma
sağlamaz dolayısıyla da
gerçekleştirimde yarar
sağlamaz.modül sayısının çok
fazla olması da hem iş gücünü
hemde arayüzleri
arttırır,tümleştirme güçlükleri
yaratır.
modüllerin
sıra
düzensel yapısının
gösterildiği sistem
yapısında oluşan derinlik
veya genişlik çok
fazlaysa azaltılmalıdır.
Bunun
için denetim ve
karar verme yapıları
yukarıya
çekilmeli,yalnızca
çağrılarak kullanılan
yapılar alt düzeyde
tutulmalıdır.
TASARIM
iyi
ANLATIMI
bir mimari tasarım için
dönüşüm yada ara-işlem
çözümlemesi yanında iyi bir
anlatımda gereklidir.Bu
amaçla yazılım tasarımının
belgelendirmesi yapılır.
Genel
olarak tasarım
tanımlaması(design description) adını
taşıyan belge içinde,her modül için
yapılan işin metinsel
anlatımı,arayüzün tanımı,yerel ve
evrensel veri yapılarının
tanımı,bellek,işlemci ve zamansallık
gibi kısıtlamaların belirtimi
bulunur.Karar verme düzenekleri ve
giriş/çıkışlar belirtilir
Her
yazılım geliştirme işlemi
gibi bu ön tasarımında bi
gözden geçirmesi
yapılır,bulunan eksiklikler
giderilir,gerekirse iyileştirme
yapılır.Bundan sonrada takip
eden aşama olan ayrıntılı
tasarıma geçilir.
NESNEYE
Nesneye
YÖNELİK TASARIM
yönelik çözümleme ve
tasarım günümüz yazılım geliştirme
ortamlarının en yaygın
kavramlarınından biridir.Çoğu
zaman büyük bir kurtarıcı olarak
algılanmasına rağmen gerçekte
böyle bir kurtarıcı
bulunmamaktadır.
Nesneye
yönelim ,daha
geleneksel olan işlevsel
çözümleme ve veri akış
yöntemlerine göre daha
değişik bir yaklaşım
gerektirmektedir.
Nesneye
yönelik
çözümleme ile nesneye
yönelik tasarım arasında
kesin bir ayrım yapmak
bazen mümkün değildir.
Temel
olarak çözümleme bir
sınıflandırma etkinliği olarak
değerlendirilebilir.bu aşamada
problem çözümü için kullanılacak
nesnelerin ait olacağı sınıfların
belirlenmesi için çalışma
yapılır.Tasarım aşamasında
sınıflardan yaratılan nesneler ve
onların aralarındaki ilişkiler
tanımlanır
nesneye
yönelik tasarım en
basit şekliyle işlemlerden cok
nesne kullanan bir düşünceye
dayanır. bu düşünceyi
destekleyen programlama dilleri
de porgramın nesne adı verilen
küçük parçalara bölebilmeyi
saglayan özel yapılara sahiptir
nesnenin iç yapısında
durum bilgileri ve arayüzs
olarak tanımlanan işlemler,
yani yordamlar kümesi
bulunur bu işlemlerle durum
bilgisi üzerinde degişiklik
yapılabilir

nesneye
yönelik tasarımın
gerçekleştirilibeilmesi için
mutlaka nesneye yönelik bir
porglamlama dili kullanılması
zorunlu degildir ;ancak
nesneye yönelik tasarımın
tüm özelliklerden yarar
saglayabilmek ,
bu
yararı acık ve kodlama
görebilmek için nesneye
yönelik bir dil seçilmelidir.
eger bu saglanmazsa nesneye
dayalı bir dil ile veya o halde
getirilmiş yapılara
desteklenen bir dil
kullanılmalıdır .
tasarımcılar
artık
problemleri önceden
tanımlanmış veri ve
denetim yapıları
kullanılarak cözmek
zorunda degillerdir.
nesneye
yönelim ile kendi
tasarladı soyut veri yapılarını
ve işlevsel kapsamayı
kullanarak gerçek dünya
problemlerinin cözebilir
duruma gelmişlerdir. Bu
amaçla kullanılan temek
soyutlama birimide nesnedir.
diger
tasarım yöntemleri
gibi nesneye yönelik
tasarım yöntemi de bir dizi
tanım, gösterim şekli ve
yordan kullanmaktadır.
bunlar,
kullanılan araç veya dile
göre küçük farlılıklar gösterseler
de temelde aynıdırlar . en önemli
ortak özellik olan nesne gerçek
dünyadaki varlıkların yazılım
alanına uyarlanmasında kullanılır
.her nesnenin bir ayayüzü bir veri
yapısı ve bir dizi işlemi vardır
nesneler
birbirleriyle
ilişki veri ve işlemleri bir
arada tutarak kapsama
(encapsulation ) ve iyi
tanımlanmış bir ayayüz
ile modülerlik ilkeleri
destekler .
nesnenin
genel kısmı herkeze
acık ve paylaşılır verileri
içerirken özel kısmında
yanlızca kendisi tarafından
kullanılan veriler bulunur.
böylelikle de bilgi gizleme
(informatinon hiding ) ilkesi
desteklenmiş olur
nesneye
yönelik tasarım
aşamalarına geçmeden
önce nesneye yönelimin
temel özelliklerine
degmekte yarar vardır
6.5.1
TEMEL ÖZELLİKLER
nesneye yönelik tasarım
yönteminin en temel
özellikleri şunlardır:
kapsama(encapsulation)
bir
;
veri yapısı ve onun
üzerinde işlem yapan bir grup
yordamın iyi tanımlanmış bşr
arayüzü olan , erişimi ve
kullanımı kolay bir yapı içine
konmasına kapsama denir
nesneye
yönelik
tasarımda bu yapı
nesnedir ve gönderilen
iletilerle arzu edilen işi
yapması saglanır. her
nesne belirli bir veri
grubunu ve işlevleri
farklı
veriler farklı
nesnelerde yer alır sınıfların
ve onlardan yaratılan
nesnelerin adları
kapsamlarını en iyi
tanınlayacak şekilde seçilir
Öğr. Gör. Mevlüt İNAN