Transcript 5. Hafta

1. Nesneye
Yönelik Tasarım
İlkay YILMAZ
Nesneye yönelik
çözümleme ve tasarım
günümüz yazılım
geliştirme ortamlarının
en yaygın
kavramları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
gerekmektedir.
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 ise
sınıflardan yaratılan
nesneler ve onların
aralarındaki ilişkiler
tanımlanır.
Nesneye yönelik
tasarımın en basit
şekliyle, işlemlerden çok
nesne kullanan bir
düşünceye dayanır.
Bu düşünceyi destekleyen
programlama dilleri de
programı nesne adı
verilen küçük parçalara
bölebilmeyi sağlayan özel
yapılara sahiptir.
Nesnenin iç yapısında
durum bilgileri ve arayüz
olarak tanımlanan işlemler,
yani yordamlar kümesi
bulunur. Bu işlemlerle
durum bilgisi üzerinde
değişiklik yapılabilir.
Nesneye yönelik tasarımın
gerçekleştirilebilmesi için
mutlaka nesneye yönelik bir
programlama dili kullanılması
zorunlu değildir; ancak nesneye
yönelik tasarımın tüm özelliklerden
yarar sağlayabilmek, bu yararı
özellikle kodlamada görebilmek için
nesneye yönelik bir dil seçilmelidir.
Eğer bu sağlanmazsa,
nesneye dayalı bir dil
ile veya o hale
getirilmiş yapılarla
desteklenen bir dil
kullanılmalıdır.
Tasarımcılar artık
problemleri önceden
tanımlanmış veri ve
denetim yapıları
kullanarak çözmek
zorunda değillerdir.
Nesneye yönelim ile kendi
tasarladığı soyut veri
yapılarını ve işlevsel
kapsamayı kullanarak gerçek
dünya problemlerini çözebilir
duruma gelmişlerdir. Bu
amaçla kullanılan temel
soyutlama birimi de nesnedir.
Diğer tasarım
yöntemleri gibi nesneye
yönelik tasarım yöntemi
de bir dizi tanım,
gösterim şekli ve
yordam kullanmaktadır.
Bunlar, kullanılan araç
veya dile göre küçük
farklı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.
Diğer slaytta bir
nesnenin ayrıntılı yapısı
gösterilmekte ve bir
örnek verilmektedir.
Nesneler birbirleriyle ilişkili
veri ve işlemleri bir arada
tutarak kapsama
(encapsulation) ve iyi
tanımlanmış bir arayüz ile
modülerlik (modularity)
ilkelerini desteklerler.
Nesnenin genel kısmı
herkese açık ve paylaşılır
verileri içerirken özel
kısmında yalnızca kendisi
tarafından kullanılan
veriler bulunur.
Böylelikle de bilgi
gizleme (information
hiding) ilkesi
desteklenmiş olur.
Nesneye yönelik
tasarımın aşamalarına
geçmeden önce nesneye
yönelimin temel
özelliklerine değinmekte
yarar vardır.
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ış bir 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ı sağlanır.
Her nesne belirli bir veri
grubunu ve işlevleri
kapsar; farklı veriler
farklı nesnelerde yer
alır.
Sınıfların ve onlardan
yararlanılan nesnelerin
adları kapsamlarını en iyi
tanımlayacak şekilde
seçilir.
Nesneye yönelik
programlamanın en
önemli özelliklerinden
biri olan sınıf, kapsamayı
sağlayan bir
gruplandırma yapısıdır.
İçeriğinde hem veriler
hem de işlemler bulunur.
Sınıf kendisinden
yaratılacak nesneler için
bir şablon görevi görür.
● Çokşekillilik
(Polymorphism)
Çokşekillilik bir ismin
birbirleriyle bağlantılı
fakat aslında değişik
olan birden fazla
amaç için
kullanılmasıdır.
Çokşekilliliğin amacı,
bir tek ismi genel bir
işlevler kümesini
tanımlamada
kullanmaktır.
Hangi işlevi
gerçekleştireceği
üzerinde işlem
yapılacak veri tipi
tarafından belirlenir.
● TEMSILCILIK
(DELEGATION)
Bir nesnenin kullanımı
temsilcilik ya da kalıtımla
(inheritance)
genişletilebilir.
Temsilcilik bir işlemin o
nesne tarafından
yapılmaması durumunda
işlemin o işi yapabilecek
bir başka nesneye
aktarılması esasına
dayanmaktadır.
● Kalıtım
(Inheritance)
Kalıtım, bir sıradüzen
şeklinde, bir sınıftan veri
ve işlemlerin tekrar
kullanım amacıyla
devralınmasıdır.
Durağan kalıtımda
devralınan kod derleyici
tarafından türetilmiş
nesneye kopyalanır.
Dinamik kalıtımda ise,
sistem en uygun aktif
yöntemi yürütme
sırasında seçer ve
devralınan kısımla ilgili
bir görevcik başlatır.
Durağan kalıtım bellek
kullanımı dışında
oldukça etkin ve
güvenlidir.
İsteğe bağlı dinamik
kalıtımda ise işlemler ve
veriler ortak bir yerde
tutulur, gerektiğinde bu
kod dinamil olarak
bağlanır.
Tekrar kullanımı en
yükseğe çıkarabilmek için
birden fazla sınıfın temel
sınıf olduğu çoklu kalıtım
(multiple inheritance)
ortaya çıkmaktadır.
Bazı dil ve ortamlarda bu
yöntem diğer slaytta
gösterilen olası bir
soruna neden olabilir.
Bu özelliklerin tamamının
tasarım sırasında dikkate
alınması
gerçekleştiriminde
kullanılacak
programlama diline
bağlıdır.
Bazı diller kapsamayı
desteklerken sınıf
yapısını
desteklemezler;
bazıları da kalıtımı
desteklemezler.
Bu nedenle, nesneye
yönelik tasarımdan
yararlanabilmek için
tasarım aşaması
sırasında hangi dilin
kullanılacağına karar
verilmelidir.
1.2. Tipler ve Sınıflar
Tip kavramı önceleri
belirli bir topluluğun
genel özelliklerini temsil
etmek üzere küme
oluşturmada
kullanılmıştır.
Örneğin, integer tipi
tüm tamsayılar
kümesini temsil etmiş,
bu kümenin
elemanları üzerinde
de çeşitli işlemler
yapılabilmiştir.
Küme içinde altküme
adı verilen gruplarda
oluşturulabilir. Bu alt
kümeleri temsil eden
tipler alttip (subtype)
adını alırlar.
Örneğin; tamsayılar,
gerçel sayıların bir alt
kümesi olduğundan
C’deki int tipi float
tipinin alttipidir.
C ve C++ dillerinde
kullanılan unsigned int
ve unsigned char gibi
tipler de aslında birer
altkümedir.
İlk zamanlardaki sayısal
hesaplamalar mühendislik ve
matematik uygulama alanlarına
yönelik olduğundan, hesaplarda
kullanılan nesneler ve tipler,
günün gereksinimlerine göre,
kullanılan dilin değişkenliklerine
ve tiplerine karşı düşmekteydi.
Fakat programlama
dilleri gerçek dünyayı
makine dünyasına
yansıtmak için bir takım
yaklaşımlar ve
sınırlamalar yapmak
zorundadır.
Örneğin, sayı kümeleri
gerçek anlamda sınırsız
değildirler; gösterilebilecek
en büyük ve en küçük sayı
değerleri kullanılan bilgisayar
donanımının sözcük
uzunluğuna ve uygulanan
sayı biçimlerine bağlıdır.
Bu nedenle int ve float
tipleri makinede farklı
şekillerde işlem görürler.
1.3. Nesne Ve Sınıf
İlişkisi
Fehmi GÜR
Nesnelerle sınıflar
arasında bazı ilişkiler
kurulmaktadır.
Bunlardan en temel
onları şöyle
sıralayabiliriz:
● Tanımlama İlişkisi
Bu ilişki tipler ve sınıflar
arasında tek yönlü bir
tanımlama için kullanılır.
Örneğin , kişi sınıfından
türetilen öğrenci sınıfı
bu ilişkiye bir örnektir.
Bu ilişki daha çok genel
özellikleri kapsamak için
kullanılır.
● Sahip Olma İlişkisi
İki sınıf , bir sınıf ve bir
nesne veya iki nesne
arasındaki bir ilişkiyi
tanımlayan bu tip bir
taşıma belirtir.
Örneğin , bir bölüm
başkanı bir sekreter ve
üç asistan ’a sahiptir.
Buradaki asistanlar
öğrenci sınıfının birer
nesnesidir ve bölüm
başkanı sınıfının dışında
başka bir sınıf tarafından
doğrudan kullanılamazlar.
Kişi sınıfı belirli bir
kavramı tek başına ifade
edebilmektedir.
● Kullanılma İlişkisi
Bu ilişki , bir sınıfın üye
yordamının bir başka
sınıfın bir nesnesini
parametre olarak
kullanması ile meydana
gelir.
Bir sınıf ve bir nesne için
gerekli olan yaratma ilişkisi ,
bir sınıfın yordamı
yürütülürken bir başka sınıfın
nesnesini yaratmak için onun
yapıcısını çağırması şeklinde
ortaya çıkar.
Burada belirtilen 4 ilişki ,
varlıklar ve tipler arasında
ortak olan mantıksal bağları
ifade etmekte , bunların sınıf
ve nesneler şeklinde
gerçekleştirilmelerinin nasıl
yapılabileceğini açıklamaktadır.
1.4. Nesneye Yönelik
Tasarım Aşamaları
Nesneye yönelik tasarımı;
nesneye yönelik olmayan
programlama dilleri için
ve nesneye yönelik diller
için olmak üzere iki
şekilde incelemekte yarar
vardır :
Nesneler çözümleme
aşamasında genel olarak
belirlendikten sonra
tasarım tanımlaması
yapılır. Bu amaçla
nesnelerin iki türlü
tanımlaması olabilir:
○ İletişim tanımlaması,
nesnenin arayüzünü,
alabileceği iletileri ve
aldığı bir iletiyle ne gibi
bir işlem yapacağını
anlatır.
Genellikle iletinin adını
ve her bir ileti için
yapılacak işlemleri
anlatan bir liste
şeklindedir.
○ Gerçekleştirim
tanımlaması iletiyi
aldıktan sonra nesnenin
nesnenin yürüteceği
yordamın ayrıntılarını ,
nesnenin genel ve özel
kısımlarının yapısını içerir.
Diğer slaytta belirtilen
tasarım basamaklarını
kılavuz olarak kullanarak
ilerlemek başarılı bir
sonuç verir ;
▪ İsterler çözümlemesi
aşamasında ;
- Problem tanımlanarak
kapsam belirlenir.
Problemin yazılım ile
çözülecek kısmı metinsel
bir şekilde anlatılır.
- Nesneler ve öznitelikleri
belirlenir.
- Nesnelere uygulanacak
işlemler belirlenir.
Nesneler ve işlemler
arasındaki ilişki ortaya konur
ve arayüzler oluşturulur.
- Gerçekleştirim için
uygun bir
programlama dili
seçilmesine gayret
edilir ve tasarımda
kullanılacak yönteme
karar verilir.
▪ Nesnelerin öznitelikleri
olarak nesne içinde
kullanılacak veri tipleri
ve veri yapıları
tanımlanır.
▪ Her işlem için birer
yordam ve yordamlar
için ayrıntılar tanımlanır.
1.4.2. Nesneye
Yönelik Diller İçin
Tasarım
Nesneye yönelik bir
programlama dili
kullanmak için yapılacak
tasarım nesneye
yönelimin tüm
özelliklerini ortaya
çıkaracaktır.
Nesneye yönelik bir
programlama dilinin en
büyük özelliği sınıf
yapısıdır .Sınıfların
kullanımıyla yapılacak bir
tasarımın adımları
şunlardır;
▪ Çözümleme sırasında
belirlenen nesneler için
veri soyutlaması
yapılacak sınıflar
tanımlanır.
▪ Soyutlama sağlayan
her sınıf için öznitelikler
birer yaratım
değişkenleri haline
getirilir.
▪ Her nesne üzerinde
uygulanacak işlemler
birer sıanıf yordamı
haline dönüştürülürler.
▪ Nesneler arasındaki
ilaetişim tanımlanır. Bu
amaçla , iletiler
alındığında çağrılacak
yordamlar belirlenir.
▪ Tasarım bir senaryoya kağıt
üzerinde sınanır. Tatmin
edici bir başarım sağlaması,
yeterli bir hata hoşgörüsüne
sahip olması gibi durumlar
gözden geçirilir ve tüm ileti
alış-veriş seçenekleri
denenir.
1.5. Nesneye
Yönelimde Nitelik
Ölçütleri
Nesneye yönelimin en
büyük özelliği sınıflarıdır.
Her biri soyut bir tip
tanımlayan bu
sınıflardan nesneler
üretilir.
Sınıf yordamları , yani
metotlar , nesnenin iç
yapısına erişmek için
kullanılır.
Bir sınıfın sahip olduğu
yordamların sayısı ve her
bir yordamın
karmaşıklığı bir metrik
olarak
kullanılabilmektedir.
Sınıfların kalıtım yoluyla
devraldıkları yordamlar
bu metriğin değerini
arttırıcı nitelikte
olduğundan dikkatli bir
çözümleme yapılması
gereklidir.
● Kalıtımın Derinlik
Ağacı
Kalıtım sıra düzeninin
oluşturduğu ağacının
tepesinden sınıfın
bulunduğu yere kadar
olan düzey sayısıdır.
Bu sayı ne kadar büyük
olursa sınıfın kalıtımla
devraldığı yordam ve
veri sayısıda o kadar
artmış olur.
● Türetim Sayısı
Kalıtım sıra düzeni
içinde bir sınıftan
türetilen başka
sınıfların toplam
sayısıdır.
Bu sayı , tasarım ve
dolayısıyla da sistem
üzerinde bir sınıfın
potansiyel etkisinin bir
göstergesidir.
Türetim sayısının fazla
olması temel sınıfın
tekrar kullanımını da
gösterebilir.
1.6. Nesneye Yönelik
Tasarım İlkeleri
Nesneye yönelik
tasarımda genel olarak
diğer slayttaki
önerilerimizin dikkate
alınması iyi bir yazılımı
ortaya çıkarmak için
önemli bir adım olacaktır:
▪ Eğer iki sınıf arasında
önemli ölçüde ortak
yanlar varsa bu ortak
özellikler bir temel sınıf
içinde toplanmalıdır.
▪ Eğer bir sınıf birkaç
nesneyi üzerinde tutan
saklayıcı bir özellik
gösteriyorsa onu kalıp
yapmak yararlı olur.
▪ Evrensel veri ve
yordam
kullanılmamalıdır. Böyle
gereksinimler sınıflarla
karşılanmalıdır.
▪ Bir başka nesnenin iç
verilerine doğrudan
erişmeye çalışılmamalı ,
bunun yerine o
nesnenin yordamları
kullanılmalıdır.
2. Veriye
Yönelik Tasarım
Veriye yönelik
tasarımda, veriyle ilgili
işlemler fazla dikkate
alınmadığı için veri akış
diyagramı kullanılmasına
gerek yoktur.
Onun yerine veri
yapılarının ve
yordamlarının
tanımlamaları yapılır.
Tasarım sırasında
genellikle şu işlemler
gerçekleştirilir ;
▪ Veri yapılarının
özellikleri değerlendirilir.
▪ Verilerin saklama,
arama ve erişim
yöntemleri, veri
yapılarına ait temel
gösterim şekilleriyle
tanımlanır.
▪ Veri yapıları yazılımın
denetim sıra düzeni
içindeki yerine göre
uyarlanır.
▪ Bundan sonraki
yazılımın genel tasarımı
yordamsal tanımlama
şeklinde yapılır.
3. Tasarım
Kalıpları
Yazılım mühendisliğinde en
yaygın ve etkin
yöntemlerden biri olan
nesneye yönelik
çözümleme ve tasarım yeni
bir konunun doğmasına
neden olmuştur.
Tasarım kalıpları, elde edilen
deneyimlerin çıkarılan
derslerin ve en iyi sonuçların
belgelendirilmesiyle
oluşmuş modern mimarilere
problem çözme
disiplinleridir.
3.1. Kalıp Tanıtımı Ve
Özellikleri
Tasarım kalıpları
çözümleyicinin,
tasarımcının ve
kodlayıcının aynı dili
konuşmalarını
sağlayarak iletişimi
kolaylaştırır.
Bir tasarım kalıbı belirli
bir bağlam içindeki bir
problemi ve onun
çözümünü kapsayan bir
kuraldır.
Kalıpların ortak
özellikleri arasında
şunlar vardır ;
▪ Deneyimlerle ortaya
çıkmışlardır.
▪ Daha büyük
problemleri çözmek
için beraberce
kullanılabilirler.
▪ Çeşitli soyutlama
düzeylerinde
bulunurlar.
▪ Yapısal bir biçimde
yazılırlar.
▪ Tekrar kullanılabilir
öğelerdir.
● İsim
Kalıbı tanımlamak üzere
temsil ettiği bilgiyi ve
yapıyı anlatan anlamlı bir
isim kullanılmalıdır.
İyi seçilmiş isimlerle bir
kalıp sözlüğü
oluşturularak geniş bir
uygulama alanının
kapsanması sağlanabilir.
● Problem
Problem , kalıbın bağlam
içindeki kullanım
amacını belirleyen bir
açıklamadır.
● Bağlam
Problemin oluştuğu ve
çözümün arzu edildiği
ön koşullardır.
● Kuvvetler
Amaçlanan hedefle veya
birbirleriyle etkileşen
yada çelişen her türlü
kuvveti ve kısıtlamaları
anlatır.
Problemin karmaşıklık
derecesini ve
uygulamada
oluşabilecek istenmeyen
durumları gösterir.
● Çözüm
Arzu edilen getirinin
nasıl elde edileceğini
tanımlayan kurallardır.
● Örnekler
Kullanıcının kalıbın
kullanımını ve
uygulanabilirliğini daha
iyi anlamasına yardım
eden görsel ve metinsel
anlatımlardır.
● Sonuç Bağlamı
Bahadır AKPINAR
Kalıbın uygulamasından
sonra oluşabilecek
durumları, son koşulları
ve yan etkilerini
tanımlar.
● Mantık Açıklaması
Kalıp içindeki
basamakların ve
kuralların doğru
olduğunun
açıklanmasıdır.
Aynı bağlam yada sistem
içindeki kalıplarla bu
kalıp arasındaki ilişkiler
açıklanır.
● Bilinen Kullanımlar
Daha önce kullanıldığı
bilinen ve halen var olan
uygulamalarda bu
kalıbın kullanım şekli
anlatılır.
3.2. Karşı Kalıplar
Bir kalıp en iyi
uygulamayı ya da pratiği
gösterirken bir karşı
kalıp(anti-pattern)
çıkarılan bir dersi gösterir.
Karşı kalıpların iki şekli
vardır;
▪ Kötü sonuçlanan bir
problem çözümünde
kullanılan kötü bir
yöntemi tanımlayanlar
(kötü örnek).
▪ Kötü bir durumdan
kurtulup iyi duruma
geçmeyi tanımlayanlar
Karşı kalıplar, çeşitli
basılı yayınlarla
kullanıcının bilgisine
sunulur.
Sürekli gelişen bir bilgi
topluluğu olduğu için
henüz belirli bir standart
içinde değildir.
Kalıp örneklerini
geliştirme yapan büyük
deneyim sahibi firma,
kurum ve kuruluşlarda
bulabilmek mümkündür.
Bu konuda halen
yayınlanmakta olan bir çok
kaynakta vardır. Biz şimdi
yaygın olarak kullanılan
tasarım kalıplarından bazı
örnekleri kısa özet halinde
verelim:
● Önyüz (Façade)
Ön yüz kalıbı, bir nesne
grubuna arayüz olacak
şekilde dışarıdaki
nesnelerin erişebilceği bir
tek nesne sağlayarak
dışardakilerin grupla
haberleşmesini kolaylaştırır.
Genelde grup içinde yer
alan nesneler arasındaki
bağlılık kullanıcılar için
karmaşıklık getirir .Oysa
kullanıcı karmaşıklığının
azaltılması istenir.
Bu amaçla bir önyüz
nesnesi kullanılarak grup
ile kullanıcı arasında
soyutlama sağlanır.
Kullanıcıların ve
nesnenin arkasındaki
ayrıntıları bilmelerine
gerek yoktur.
Bu kalıpta bir sınıfın
yalnızca bir tek yaratımı
(istence) vardır. Bu sınıfın
yaratımlarını kullanan
diğer nesnelerin tümü
aynı yaratımı kullanırlar.
Genel olarak özkaynağın
merkezden yönetilmesi
amacı vardır.
Yönetilen özkaynak
dışsal bir veritabanı
bağlantısı olabileceği
gibi, durağan bir
değişkende tutulan içsel
bir sayaç olabilir.
Sınıfın tek yaratımı
yürütme başladığı anda
belleğe yüklenir. Bu tek
yaratıma erişmek için
sınıfın durağan bir işlemi
bulunur.
● Fabrika (Factory)
Fabrika kalıbı, kendisine
aktarılan veriye bağlı
olarak olası sınıflardan
birinin yaratımını
döndürür.
Genellikle, döndürülebilen
tüm sınıfların ortak bir
temel sınıfı ve ortak
işlemleri vardır, fakat her
biri başka tür verileri
işleyerek başka işler
yaparlar.
Her birinin aynı işlemi
bulunduğundan kullanıcı
açısından hangi sınıfın
döndürüldüğü fark etmez,
ancak bu sınıf işlemlerinin
gerçekleştirimleri farklıdır.
Hangi sınıfın nasıl ve
neye göre
döndürüleceği
tamamen fabrikaya
bağlıdır. Kullanıcı sınıf,
döndürülen sınıflardan
tamamen farklıdır.
● Bileşik (Composite)
Bileşik kalıpla ağaç
yapısında, birbirine
benzer nesneleri özyineli
(recursive) biçimde
oluşturarak karmaşık
nesneler yaratmak
mümkündür.
Hatta, tüm nesnelerin
ortak bir süper sınıfı
olduğu için ağaç
yapısındaki nesneler
üzerinde daha tutarlı
şekilde işlem yapmak
oldukça kolaylaşır.
Bir belgeyi oluşturan
karakterlerin, satırların,
metin sütunlarının ve
sayfaların gösterimi
buna örnektir.
Bunları içeren bir bileşik
belge nesnesi süper
sınıf olarak kullanılarak
alttaki nesnelerin
yönetimi sağlanır.
Bu şekilde karmaşıklık
alt parçalara bölünerek
azaltılmış olur. Alttaki
nesneler ise basit veya
bileşik olabilirler.
4. Kullanıcı
Arayüzü Tasarımı
Bilgisayar tabanlı
sistemler insanların
işlerini kolaylaştırmak
üzere geliştirilirler.
Ne kadar mükemmel
tasarlanmış ve
gerçekleştirilmiş olursa
olsun, eğer bir sistem
kullanıcısına zor anlar
yaşatıyorsa tam başarılı
sayılamaz.
Bu nedenle sistemin
insanlarla olan arayüzün
çok etkin ve kullanışlı
olarak, verimliliği
arttıracak şekilde,
kullanıcı dostu olarak
tasarlanması gereklidir.
Bilgisayar tabanlı sistem
arayüzünün önemi çok
geniş uygulama alanları
düşünüldüğünde daha
iyi ortaya çıkar.
Bir programlanabilir fırın veya çamaşır
makinesi, bir cep telefonu, bir tıbbi cihaz,
bir uçuş kontrol alt sistemi gibi gömülü
sistemlerin arayüzleri, bir veri tabanı
işletim sisteminin arayüzü , hele hele
günümüzde en yaygın bilgisayar
uygulamalarından biri olan internet
tabanlı programların arayüzleri insan
mühendisliğinin ne kadar önemli
olduğunu çok güzel ortaya koyan
örnekler arasındadır.
Bir sistemin arayüzünü
öğrenmek ve etkin bir
şekilde kullanmak ne
kadar kolay olursa o
sistemin yetenek ve
işlevlerinden yarar
sağlamakta o kadar artar.
4.1. İnsan-Bilgisayar
Etkileşimi
İnsan ile bilgisayar
arasındaki etkileşim
genellikle görsel, işitsel
ve dokunmatik olarak
gerçekleşir.
Ekrandaki bilgiler
görsel iletişimi
sağlarken, mikrofon ve
hoparlör ile ses bilgileri
alınır veya verilir.
Bunlar yanında, girdi
sağlamak için klavye,
mouse , joy-stick, çeşitli
özel tuşlar ve giriş aygıtları
kullanılır. Tüm bunlara
insan-makine arayüzü
(Humman-Machine
Interface – HMI) adı verilir.
Etkileşimin daha çok
bilgisayarla yapıldığı
durumlarda bu isim
İnsan - Bilgisayar
Arayüzü (HummanComputer Interface –
HCI) adını almaktadır.
Bu şekilde, bir insan,
bilgisayardan çeşitli
bilgileri alabilir, kendi
belleğinde saklayabilir,
neden-sonuç ilişkilerini
değerlendirebilir ve kendisi
yeni bilgiler girebilir.
Günümüzde, insanbilgisayar arasındaki
arayüzü daha da iyi
duruma getirebilmek için
bilimsel ve teknik
çalışmalar
sürdürülmektedir.
Örneğin, bir zamanlar siyah
beyaz olan ekranlar
sonradan. 16 renk , 256 renk
ve en sonunda da
milyonlarca rengi
desteleyerek gerçeğe en
yakın görüşü vermeye
başlamışlardır.
Aynı zamanda ekranların
çözünürlüğü, canlılığı ve
büyüklüğü artmış, insan
gözünü yormayacak (en az
72 Hz yatay tarama
standardı gibi) ve sağlığı
tehdit etmeyecek (düşük
radyasyon yayımı) hale
gelmişlerdir.
Tüm bilgisayarlı sistem
kullanıcıların aynı
anlayış derecesine
sahip olduklarını kabul
etmek yanlış olur.
Kimi kullanıcılar bilgisayara
alışkın olduklarından hızlı bir
şekilde öğrenip etkin olarak
kullanabilirken, kimileri
bilgisayarı ancak açıp yavaş
bir şekilde
kullanabilmektedir.
Bir bilgisayar
mühendisine çok uygun
gelen arayüz,
deneyimsiz bir işçi için
hiçte uygun olmayabilir.
Bu düşünceyle,
kullanıcıları üç sınıfa
ayırmak doğru olur:
▪ Deneyimsiz: Sistem
hakkında hiçbir bilgisi
olmayan ancak bir
miktar bilgisayar
kullanabilen kişilerdir.
▪ Az deneyimli: Sistem
hakkında bir miktar
bilgisi olan ancak az
miktarda kullanım
pratiğine sahip kişilerdir.
▪ Çok deneyimli: Hem
sistemi hem de
kullanımı iyi bilen, hatta
daha hızlı kullanabilmek
için kestirmeler arayan
kişilerdir.
Dolayısıyla insan bilgisayar
arayüzü, hedef kullanıcının yaş,
fiziksel yeterlilik, eğitim ve
kültürel durum, dil, kişisel güdü
ve amaçlarıyla konu hakkındaki
bilgi ve becerisi, hatta
teknolojik korkusu dikkate
alınarak tasarlanmalıdır.
Örneğin, ekran çıktısında bulunan bilgi
miktarı karmaşıklığa yol açmayacak
kadar az ve öz olmalı, kısaltmalar
herkes tarafından anlaşılabilir olmalı,
basılacak tuşların isimleri ve sırası
kolay takip edilebilmeli, yanlış sırada
kullanımları engellemek üzere giriş
seçenekleri kısıtlanmalıdır (istenen bir
bilgi girilmezse ”Tamam” tuşunun
geçerli hale gelmemesi gibi).
4.2. İnsan-Bilgisayar
Arayüz Tasarımı
Grafiksel sergileme
ortaya çıkmadan önce
bilgisayarlarla etkileşim
yalnızca klavye ile komut
satırlarından
yapılmaktaydı.
Öğrenmesi oldukça zor
ve hata yapma payı çok
yüksek olan komut satırı
ile işlem yapmak artık
geride kalmış sayılır.
Ancak, Unix tabanlı işletim
sistemleri gibi yaygın bazı
sistemler hala komut satırı
kullanmakta, büyük bir
kullanıcı kitlesi de bu
konutlarla daha etkin
kullanım sağlayabilmektedir.
Fakat uygulama
yazılımların çoğunlukla
grafiksel kullanıcı
arayüzüne sahip olacak
şekilde geliştirilmektedir.
Günümüzdeki bilgisayar işletim
sistemlerinden bir kısmı
tamamen pencere sitemine
dayalı olarak çalışmakta iken
bir kısmı da ek bir pencere
yönetim sisteminin (Linux ile XWindows Sistemi, vb.)
çalıştırılmasını gerektirir.
Pencere yönetim
sistemleri özel olarak
geliştirilebileceği gibi
yaygın standartlardan
biride seçilebilir.
Ancak dikkat edilmesi gerek
nokta, seçilen standarda
uygun olarak yazılım
geliştirme olanağı sağlayan
yazılım geliştirme
paketlerinin (Software
Development Kit)
kullanılmasıdır.
Zira kendi içlerinde
standart olsalar da
birbirleri arasında uyum
olmayan pek çok
pencere yönetim sistemi
bulunmaktadır.
Herhangi bir etkileşimli
yazılım iki öğeden oluşur.
Burada kullanıcı yazılıma
girdi sağlayan ve çıktıları
değerlendiren
işletmendir.
Bilgi işleme ve çözüm
üretici kendisine
ulaştırılan gerçeklenmiş
bilgilerin işlendiği ve
eldeki problemin
çözülmesi için gereken
bilgilerin üretildiği öğedir.

ŞEKİL……….
4.3. Arayüz Yazılım
Mimarisi
Bir uygulama yazılımı
tek bir yürütülebilir
yazılım biriminden, yani
programdan
oluşabileceği gibi
birden fazla birimden
de oluşabilir.
Pencere sistemi ile
uyum sağlayan arayüz
yazılımı ya ayrı bir
birim halinde geliştirilir
ya da aynı birim içine
gömülür.
Tek birimden oluşan
yazılımlarda, bilgi işleme
birimleri ile arayüz birimleri aynı
bağlam (context) içinde yer
alırlar diğer slaytta gösterilen ve
birleşik mimari olarak
adlandırılan bu yapı, tek
işlemciye ait bilgisayarlar için
uygundur.
 ŞEKİL….
Birden fazla işlemcisi olan
bilgisayarlarda veya tamamen
dağıtık mimaride çalışabilmek üzere
diğer slaytta gösterilen ayrık mimari
kullanılır. Bu mimarinin yararı, bilgi
işleme ile arayüz birimlerini
birbirinden ayırarak hem geliştirme
hem de yürütme bağımsızlığı
sağlanır.
• ŞEKİL….
4.4. Arayüz Yazılım
Birimleri
Arayüz donanımları
cinsleri ne olursa olsun
mutlaka ana sistemle
tümleştirilmeleri
gerekir.
Tümleştirme işlemi için
mutlaka birer arayüz
donanımı ve onları
etkinleştiren birer
yazılım birimi
kullanılmaktadır.
Örneğin, ekranı uygun
grafik özellikte sürmek
için yeterli güce sahip
bir grafik kartı
kullanılmalıdır.
Bu kartında uygun bir
sürücü yazılımı ile
sistemine tanıtılması
gerekir.
Kullanıcı arayüz
yazılımlarının bir kısmı
kullanıcı tarafından
fark edilmez.
Ancak en çok fark
edileni şüphesiz ki
ekran üzerinden çıkış,
klavye ve mouse ile
giriş olanağı sağlayan
grafiksel arayüz
yazılımlarıdır.
Günümüzde pek çok
işletim sistemi de
grafiksel arayüz
vermektedir. Bir kısmı
da özel paket yazılımlar
yardımıyla grafiksel
arayüze sahip olurlar.
Sistemin kullanıcı arayüz
yazılımları grafik özellikleri daha
uygun olan ayrı bilgisayarlar
üzerinde çalıştırılabileceği gibi,
sistem tasarımına ve yazılım
mimarisine bağlı olarak, ana
sistemle beraber aynı bilgisayar
üzerinde de çalışabilirler.
4.5. Arayüz
Tasarım İlkeleri
Ali Can AKIN
Kullanıcı arayüz tasarımı
genellikle tasarımcının
deneyimine ve uygulama
alanını ne kadar
tanıdığına bağlıdır.
Yazılım geliştirmeye
başlamadan önce
uygulama alanının
özellikleri dikkate alınarak
arayüz standartlarının
belirlenmesi büyük yara
sağlar.
4.5.1. Yüksek Nitelik
Arayüzün nitelikli
olmasını sağlayabilecek
bazı nitelikler şunlardır:
▪ Arayüzde kullanılan dil
kullanıcının rahatça
anlayabileceği ve işini
güvenli bir şekilde
yapabileceği bir dil
olmalıdır.
Örneğin, yabancı dilin geçerli
olduğu bir kullanım
ortamında Türkçe bir arayüz
kullanmaya çalışmak anlık
çeviri ve algılama güçlüğü
yaratabileceğinden arayüzün
o dilde gerçekleştirilmesi
daha uygun olur.
▪ Arayüzde uygulama
alanında yaygın olarak
kullanılan teknik terimler
veya kısaltmalar
kullanılmalıdır.
▪ Bu şekilde hem görsel
karmaşıklık giderilir, hem
de kullanıcının alışkın
olduğu terimlerle
çalışması sağlanmış olur.
▪ Arayüz üzerinde tüm
bilgiler, uygulama
alanına ve gerçeğine
uygun olarak mantıksal
bir sıralama içinde
bulunmalıdır.
▪ Arayüz, olabildiğince
tekdüze olmalı,
algılamayı azaltacak
karışıklıklara yer
verilmemelidir.
▪ Arayüz, sistemin o an
içinde bulunduğu durum,
çalışma kipi, yürütmekte
olduğu işlem, hata
durumları gibi bilgileri
her an kullanıcıya
gösterebilmelidir.
▪ Arayüzün değişik
bölümlerinde bir
etkinliğin
başlatılmasında herhangi
bir çelişik durum
olmamalıdır.
Örneğin, dosya açmak için
kullanıcı karşısına çıkan bir
pencerenin özellikleri, bir
dosyayı arayıp bulup onu
belgeye ekleyen bir işlev
için de aynı görüntüye
sahip olmalıdır.
▪ Kullanıcı, arayüzün
bir bölümünden diğer
bölüme geçtiğinde bir
önceki bölümdeki
bilgiyi hatırlamak
zorunda kalmamalıdır.
▪ Çok gerekli olmadıkça
kullanıcı onay isteyen bir
uygulama diğer
uygulamaların giriş
çıkışını durdurmamalıdır;
yani tüm giriş odağını
üstüne almamalıdır.
▪ Arayüz üzerinde verilen
her komutun sistem
tarafından doğru algılanıp
işleme sokulduğunun bir
göstergesi sergilenmelidir.
Buna sistemin yanıtı da
denilebilir.
▪ Arayüz, az bir öğretim
gerektirmelidir. Gerekli olan
bilgiler arayüz kullanılırken
verilmeli, bir tür kılavuzlama,
küçük simgelerle anlatım ve
standart terimler
kullanılmalıdır.
▪ Arayüz, herhangi bir
uygulama tarafından
gerek duyulan sesli
uygulamalar, görüntülü
yardımlar gibi çeşitli çıkış
türlerini desteklemelidir.
▪ Sistemin görüntülü,
yazılı, sesli ileti ve
uyarıları tarafsız bir
şekilde hazırlanmış
olmalı, kesinlikle
kişiselleştirilmemelidir.
Uyarı için kullanılan
metinler kısa ve öz
olmalı, sorunu
açıklamalı, suçlayıcı veya
incitici ifadeler
içermemelidir.
İnsan-Bilgisayar arayüzü,
etkileşimli yazılım
sistemlerinde kullanıcı ile
bilgi alış verişini sağlayan
kısım olduğundan,
olabildiğince kullanıcı dostu
olması, verimliliğini ve
iletişim güvenirliliğini arttırır.
Kullanıcı dostu olan bir
arayüzünün sağladığı
yararlardan bazıları
şunlardır:
▪ Kullanıcı, kullanım
kılavuzlarını yanında
bulundurmak veya
kullanmak zorunda
kalmadan bilgisayardan
yararlanabilir.
▪ Kullanıcı, yazılımı
kullanırken birçok bilgiyi
aynı anda karşısında
görebildiği için çok miktarda
bilgiyi belleğinde tutmak ve
gerek duyduğunda
anımsamak zorunda kalmaz.
▪ Kullanıcı, uygulama
alanının terimlerini
kullanabilir.
▪ Kullanıcı, yazılımı ve
sistem araçlarını
kullanırken veya
yardım pencerelerinde
dolaşırken pencere ve
menü seçimlerini
kolaylıkla yapabilir.
▪ Kullanıcı, en seri ve
doğru bir şekilde bilgi
girebilir ve alabilir.
4.5.3. Güvenirlik
Arayüzü yeterince güvenli
olmayan bir sistemin
işlevleri ne denli iyi ve
yüksek başarımlı olursa
olsun kullanıcıya zor anlar
yaşattığı ve çöktüğü sürece
hiçbir değer taşımaz.
Yazılımın asıl bilgi işleme
kısmı kadar kullanıcı
arayüzünün de güvenilir
olması için şunlara
dikkat edilmelidir:
▪ Veri veya komut girişi
sırasında yapılabilecek
hataların birçoğu
arayüzden gelecek
uyarılar ile önlenebilir.
Bu nedenle, giriş arayüzü,
hataları önlemek için tüm
girdileri görüntülemeli,
gerekli tip ve sınır
kontrollerini
yapabilmelidir.
▪ Çıkış arayüzü
tanımlanmış sınırlar
içindeki değerleri
göstermelidir.
▪ Uygulama alanının
özelliğine göre, yapılmış
bir işlevi geri almak
mümkün olabilmelidir.
4.5.4. Yardımlar
Grafiksel bir kullanıcı
arayüzünün
vazgeçilmez
özelliklerinden biri her
etkileşim aşamasında
kullanıcıya yardım
verebilmesidir.
Yardım olanakları ve
menüleri tasarlanırken
dikkate alınması gerekli
noktalar arasında
şunları sayabiliriz:
▪ Yardım tüm işlevleri
kapsayabileceği gibi,
seçenekli olarak,
yalnızca o anda yapılan
işlevlere ait olarak da
tasarlanabilir.
▪ Yardıma erişmek için
bir menüden seçmek,
bir tuşu tıklamak ya da
klavyeden bir tuşa
basmak yeterli
olmalıdır.
▪ Yardımdan ana uygulamaya
dönmek için iptal veya geri
tuşuna basmak, pencereyi
kapatmak, kaçış karakteri
kullanmak gibi yöntemler
benimsenmeli, hiç çıkmayıp
bir kenarda tutma özelliği de
dikkate alınmalıdır.
▪ Yardım penceresi
içinde zenginleştirici
eklemelerde yapılabilir.
Örneğin:
- Arama motoru
kullanılması günümüzde
pek çok yazılım
paketinde yaygın olarak
kullanılır hale gelmiştir.
- Sıkça sorulan sorular
şeklinde verilen yardım
da kullanıcının kendi
sorunlarını ifade
edebilecek hazır yapılar
bulabilmesini sağlar.
Bazı kullanıcılar uygulama
yazılımını yardımdan giderek
öğrenmeye çalışırlar. Bu
gerçeği göz önünde
bulundurarak, yardımların
aşamalı olarak, yönlendirici ve
uygulatıcı bir yapıya sahip
olması yararlı olur.
4.5.5. Hatalar Ve
Uyarılar
Kullanıcı arayüzünün
bir özelliği de bilgi
işleyici kısmı kullanıcı
hatalarından korumak
ve hata durumlarında
kullanıcıyı uyarmaktır.
Bu uyarıların bir kısmı
kullanıcının hatalı bilgi
girmesinden dolayı
yapılırken, bir kısmı geri
dönüşü olamayan bir işlem
gerçekleştirilmeden önce
onay almak için yapılır.
Bir kısmı da yazılımın
bütünü içinde meydana
gelen bir hatayı
kullanıcıya bildirmek ve
ne gibi bir işlem yapması
gerektiğini açıklamakta
kullanılır.
Bu bildirimler yapılırken
diğer slaytlarda belirtilen
noktalara dikkat edilmesi
yararlı olacaktır.
▪ Kullanıcının bilgi girmesi
gerek yerde yanlış biçimde
bilgi girmesi ya da eksik
alan bırakması durumunda,
kullanıcı arayüzü hatalı
girişi belirterek gerekli
uyarıyı vermelidir.
▪ Görsel uyarılar
gerçekten dikkat çekecek
şekilde, ekranın ortasına
ve gerekli görüldüğü
takdirde başka bir iş
yapılmasına izin
vermeyecek yapılmalıdır.
▪ Hata iletisi sorunu
açıklıkla tanımlanmalı, bir
takım kod numaraları
sergileyerek yazlnızca
hata oluştuğunu
belirtmekle
yetinmemelidir.
▪ Hata iletisi içinde
kesinlikle kullanıcıyı
suçlayıcı ifadeler yer
almamalıdır.
Bu tür yaklaşımlar
profesyonellikten
uzaklaşma anlamına
gelir.
4.5.6. Yapısal
Özellikler
Bir arayüzde bulunması
gereken yapısal
özellikleri de şu şekilde
sıralayabiliriz:
▪ Bir arayüzde, kullanım
sırasında ortaya çıkabilecek
programlama hatalarının
düzeltilmesi ya da daha
sonra oluşabilecek kullanıcı
istekleri ile ilgili değişiklikler
kolay ve hızlı olarak
yapılabilmelidir.
▪ Mümkünse belirli bir
kütüphane kullanılarak
standart geliştirme
sağlanmalıdır.
▪ Grafiksel kullanıcı arayüzleri
için estetik görünüm oldukça
önemlidir. Pencerelerde
renklendirme aşırıya
kaçmadan, belirli bir yöntem
izlenerek yapılmalı, tüm
nesneler hizalanmalı ve
etiketler çok düzgün
yerleştirilmelidir.
Bu maksatla önceden
hazırlanmış standart
öğelerin kullanımı
sağlanmalıdır.
▪ Arayüz, uzamanlar,
yeni başlayanlar gibi
farklı kullanıcılar için
gerekli işlevleri (kısa yol
gibi) sağlamalıdır.
Tüm sistem yazılımı
belirli bir disiplinin
uygulandığı geliştirme
süreci ile gerçekleştirilir.
Kullanıcı arayüz yazılımı
da ana sistem yazılımının
temel öğelerinden
biridir. Kendi içinde bir
süreç uygulanarak
geliştirilir.
Bu süreç yine standart
yazılım geliştirme
sürecine benzer ve üç
aşamadan oluşur.
4.6.1. Çözümleme
Bilgisayar tabanlı bir
sistem genellikle elle
yapılan işleri otomatik
hale getirmek üzere
tasarlanır ve geliştirilir.
Otomasyonun ne derece
olacağı, işletmenlerin
hangi düzeyde devreye
gireceği, sistemin girdi ve
çıktıları sistem
çözümlemesi sırasında
belirlenir.
Bu çözümleme sırasında,
sistemin kullanıcı arayüz
isterleride belirlenir.
Çözümleyici bu amaçla
sistemin amaçlarını ve
temel işlevlerini tanımlar.
Her amaca karşılık düşen
eylemleri ve bunların
kullanıcı arayüzünden
nasıl başlatacaklarını
belirtir.
Eylemler sırasında
sistemin içinde
bulunması gereken
durumları tanımlar.
Kullanılacak denetim
aygıtlarını ve
düzenekleri, bu
düzeneklerin sistem
durumunu nasıl
etkileyeceğini açıkça
ortaya koyar.
Kullanıcıya sistem
durumu hakkındaki
bilgilerin nasıl
sunulacağını, uyarıların
nasıl yapılacağını belirtir.
4.6.2. Tasarım
Sistemin arayüz tasarımı
sırasında kullanıcıya ne tür
arayüzler sağlanacağı, giriş
ve çıkışların hangi aygıtlarla,
ne şekilde yapılacağı, hata
ve uyarı iletilerinin nasıl
verileceği belirlenir.
Özel bir donanım ile arayüz
gerçekleştirilecekse,
donanım tasarımı
aşamasında gerekli çalışma
yapılmalı, uygulama alanının
özelliklerine göre en uygun
giriş/çıkış aygıtları
seçilmelidir.
Yalnızca akran, klavye ve
mouse tan oluşan standart
giriş/çıkış ile denetlenen bir
grafiksel kullanıcı arayüzü
bulunacaksa bunun gerekli
tasarımı yazılım geliştirme
aşamalarında yapılmalıdır.
Grafiksel kullanıcı
arayüzünü
gerçekleştirmeden önce
bir ilk örneğini yapmak ve
bunu kullanıcı ile gözden
geçirmek her zaman
büyük yarar sağlar.
4.6.3.Gerçekleştirim
Arayüz tasarımı çeşitli
çizim araçlarıyla
yapılabileceği gibi
gerçekleştirmede
kullanılacak geliştirme
aracıyla da yapılabilir.
Bu araçlar, önceden
geliştirilmiş çeşitli
grafiksel şablonlar, tuşlar,
menüler ve daha pek çok
grafik nesneler sağlayarak
çok hızlı geliştirme
olanağı sunmaktadır.