NESNEYE YÖNELİK PROGRAMLAMA

advertisement
NESNEYE YÖNELİK
PROGRAMLAMA
Yrd.Doç.Dr. Zeynep ORMAN
ormanz@istanbul.edu.tr
Nesne Tabanlı Programlama Kavramları
• Nesne Tabanlı Programlama (OOP) tekniği, gerçek
dünyadaki somut nesnelerin bir yazılımın sunduğu
soyut modelde birer karşılığı olmasına dayanır.
• Bu karşılıklara da Nesne (object) denir.
• Nesne tabanlı programlama ile gerçek dünyadaki
varlıklar ile bu varlıkların yer aldığı ilişkilerin bire bir
modellenmesi ve bu modele göre kod yazılması
mümkündür.
Nesne Tabanlı Programlama Kavramları
• Örneğin, Bir insanın sahip olabileceği iki varlık ve bu
üçlünün yazılıma eşlenmesi
Nesne Tabanlı Programlama Kavramları
• Nesne tabanlı geliştirmede de diğer sistem geliştirme
süreçlerinde olduğu gibi modelleme aynı zamanda bir
sadeleştirmedir. Ne kadar sade modellerimiz olursa o
kadar sade kodlarımız olur.
• Örneğin bir bordro programında insanların boy ve
kilolarının önemi olmaz.
• Bazı durumlarda da aynı kişi tamamen aynı
verilerden beslenen başka bir role sahip olabilir.
Örneğin, sağlık sisteminde aynı veriler bir hastayı
simgeleyecektir.
Örnek: (Personel Sadeleştirmesi - Bordro)
(Personel Sadeleştirmesi – Sağlık)
Nesne Tabanlı Programlama Kavramları
• Bu sadeleştirmeler sonucunda işimize yarayan ve
yazılım bakış açısından görülen veriler ve bu veriler
üzerinde tanımlanmış işlemler içeren bir modele
ulaşırız.
• Bu modele alan modeli (domain model) adı verilir.
• Bu modeli kullanarak benzer özellikleri olan birden
fazla nesnenin üzerinde işlemler tanımlayabiliriz.
Nesne Tabanlı Programlama Kavramları
• Nesneye Yönelik programlamada üzerinde işlem
yapılacak bu nesnelerin yaratılması ve tanınması
gerekir.
• Nesnelerin programda nasıl yaratılacağı dilden dile
farklılık gösterir (C++, Java).
• Ancak nesnenin yaratılması için nesnenin bir plana
ihtiyacı vardır. Bu plana sınıf (class) denir
SINIF
Bir sınıf, ortak özellikleri ve davranışları olan
nesnelerin sözkonusu ortak özelliklerini ve ortak
davranışlarını barındıran soyut bir kavramdır.
• Yani bir sınıf temel olarak bir tanımdır.
• Bir özellik ve davranış yığını sunar ve bu yığına
topluca erişmemiz için bize birer isim verir.
• Bu ismi taşıyan nesneler bu yığındaki özellik ve
davranışlara sahip olurlar.
• Bu ilişkiyi nesne sınıfa aittir (belongs to) diyerek
açıklarız.
• ***Bir nesne bir sınıfta tanımlanan özellik ve
davranışlara sahipse o sınıfa aittir.
NESNE
• Sınıf nesne ilişkisinde kullanılan önemli diğer bir
kavramda bir nesnenin ait olduğu sınıfın bir örneği
(instance) olmasıdır.
Bir nesne, uygulama çalışırken bellekte ya da başka
bir kayıt ortamında (dosya, veritabanı, vs) bulunan ve
ait olduğu sınıfın tanımladığı davranış biçimlerine uyan
bir örnektir.
Nesne Tabanlı Programlama Kavramları
• Bir uygulama çalışırken bir sınıfa ait değişik
sayılarda örnek (yani nesne) bulunabilir.
• Herhangi bir anda o sınıfa ait hiç nesne
olmayabileceği gibi bir yada daha fazla sayıda
nesne de olabilir.
• Bir nesne genelde yalnızca bir sınıfın örneğidir.
(Ancak C++ gibi dillerde bir nesnenin birden fazla
sınıfın örneği olmasına izin vardır ama tercih
edilmez)
Örnek: (Nesnenin sınıfı örneklemesi)
Bir sınıftan birden fazla nesnenin
bulunması
Nesne Tabanlı Programlama Kavramları
• Sınıflar ve nesnelerden bahsederken sürekli olarak
nesnelerin özellikleri ve davranışlarından bahsederiz.
• Bir nesnenin özellikleri (attributes), o nesnenin içindeki
veriler ve bu verilerin yapısını kapsar.
• Özellikler değişik seviyelerdeki soyutlamaları içerebilir.
• Yani bir nesnenin bir özelliği başka bir nesne olarak
ifade edilebilir.
• Bu diğer nesne aynı sınıftan ya da farklı bir sınıftan
olabilir.
• Örnek: Bir Ev sınıfı düşünün; komşu özelliği de bir başka
Ev nesnesi olabilir.
Nesne Tabanlı Programlama Kavramları
• Bir nesne üzerindeki işlemler (operations) ile
nesnenin davranışını (behavior) niteleriz.
• Davranış nesnenin sistemde kullanıldığı zaman
yapacakları ve yapacaklarının sistemin durumu
üzerinde yol açacağı değişikliklerden oluşur.
• Davranış sonunda değişime uğrayan sadece nesne
olmak zorunda değildir. Çevresi de değişime
uğrayabilir.
• Bazen davranış sonucu nesnenin kendisi hiç
değişmezken çevresindeki diğer nesneler değişebilir.
Nesne Tabanlı Programlama Kavramları
• Örneğin, elimizde bir ütümüz olsun. Ütünün markası,
modeli, rengi, çalıştığı elektrik voltajı, ne tür kumaşları
ütüleyebildiği bu ütüye ait özelliklerdir (veri).
• Aynı zamanda ütümüzü ısıtabiliriz, ütüleme işinde
kullanabiliriz ve soğumaya bırakabiliriz. Bunlar ise ütünün
fonksiyonlarıdır (metot).
Nesne Tabanlı Programlama Kavramları
• Eğer ütü ile ilgili bir program yapmış olsak ve nesne
tabanlı programlama tekniğini kullansak hemen bir
ütü sınıfı (class) oluştururduk.
• Bu sınıfta ütüye ait bilgiler (veriler) ve ütü ile
yapabileceğimiz işler (metot) bulunurdu.
• O zaman nesne tabanlı programlamada bir sınıfta,
sınıfa ait veriler ve bu verileri işleyip bir takım faydalı
sonuçlar üreten fonksiyonlar metotlar bulunur.
• Dahası, biz bir tane ütü sınıfı tasarlarsak bu sınıftan
istediğimiz sayıda değişik ütüler (Object veya
instance) yapabiliriz.
Nesne Tabanlı Programlama Kavramları
• Bir nesne üzerindeki kısıtlamalar (constraints),
nesnenin uyması gereken kuralları simgeler.
• Bu kurallar genellikle nesnenin özellikleri ile ilgilidir.
• Nesnenin veri bütünlüğünün korunması için gereken
şeylerdir.
• Bu kısıtlamalar sayesinde nesnenin özellikleri anlamlı
olmaya devam eder.
• (Kısıtlamalar kötü bir şey olarak algılanmamalıdır.)
Nesne Tabanlı Programlama Kavramları
• Örneğin, bir araba için sürücünün iki ayağı
olacağından, debriyaj, fren ve gaz pedallarından aynı
anda en çok ikisine basılabilir.
• Bunu bir kural olarak tanımlarsak, Araba sınıfından
nesneler için bir kısıtlama olacaktır.
Nesne Tabanlı Programlama Kavramları
• Kısıtlamalara benzer diğer bir kavram da bir
nesnenin uyması beklenen sözleşmesi
(contract) dir.
• Sözleşme, nesnenin üzerindeki işlemler
gerçekleştirilirken nasıl davranması gerektiği
üzerine kurallardır.
• Kısıtlamalar ise nesnenin özelliklerinin her zaman
uyması gereken kurallardır.
• Sözleşmelerin daha çok davranışa, kısıtlamaların
ise veriye odaklı kurallar olduğunu söyleyebiliriz.
UML Sınıf ve Nesne Şemaları
• UML (Unified Modelling Language), nesne tabanlı
sistemlerin modellenmesinde kullanılan bir
modelleme dilidir.
• Sınıflar ve nesneler için çeşitli notasyonlar sunar.
• Bu notasyonlar grafik notasyonlardır.
• bir miktar metin katkısına da izin verirler.
• UML sınıf şeması 3 bölümlü bir dikdörtgenden oluşur:
• En üst bölüm sınıfın adını,
• Ortadaki bölüm özellikleri
• En son bölümde yöntemleri (metotları) gösterir.
UML Sınıf ve Nesne Şemaları
Nokta
x: double
y: double
no:Nokta
x = x0
y = y0
Nesne
Şeması
n1:Nokta
Sınıf Şeması
x = x1
y = y1
UML Sınıf ve Nesne Şemaları
• Nesne şemalarında isimlerin altı çizili ve nesnenin
özelliklerine değer atanması durumunda atama
işareti (=) kullanılmıştır.
• UML’de nesnelerin özelliklerinin tiplerini belirlemek
mümkündür.
• Özelliğin adından sonra iki nokta üst üste işareti (:) ile
ayrılarak tipinin adı belirtilir.
• Aynı tipten birden fazla özellik olsa bile her özelliğin
tipi tek tek belirtilecektir.
• Örneğin, double
UML Sınıf ve Nesne Şemaları
• İyi bir sınıf tasarımı iyi bir modeldir ve iyi modellerde
bulunması gereken özellikler şunlardır:
gerçek dünyayı doğru ifade etmelidir.
işlevi tasarımdan ayırmalıdır.
bütün önemli özellikleri doğrudan sunmalıdır.
• Sınıfları tasarlarken karşımıza çıkan en önemli
tasarım kriteri sade ve genel olması gerekliliğidir.
• Gereksiz özellikler olmamalıdır!!
• Ancak çoğu kez, bir sınıfın programlama diline bağlı
olarak zenginleştirilmesi gerekebilir.
UML Sınıf ve Nesne Şemaları
• Örnek: Gelişen nokta sınıfı
Nokta
x: double
y: double
equals(o:Object):boolean
toString():String
Yöntemler (metotlar)
• Java’da equals() ve toString() yöntemleri oldukça
kullanılan ve yararlı yöntemlerdir ve yazılmaları önerilir.
• Uygulama Java’da yazılacaksa sınıfı genişletmek gerekir.
Nesne Tabanlı Programlama
Kavramları- Devam
• Nesneye-yönelik programlamanın temel
ilkeleri şunlardır:
Soyutlama
Saklama, Paketleme
SINIF
Kalıtım
SINIF
HİYERARŞİSİ
Çok biçimlilik
Nesne Tabanlı Programlama
Kavramları- Devam
• Nesneye-yönelik programlamanın temel kavramları,
1.
büyük programlar yazmayı kolaylaştıran soyutlama
ve
programları
değiştirmeyi
ve
korumayı
kolaylaştıran saklama
2.
kalıtım ve çok biçimliğe izin veren ve programları
kolayca genişletilebilir kılan sınıf hiyerarşisidir.
• Herhangi bir programlama dilinde bu kavramları
uygulayabilirsiniz;
fakat,
nesneye-yönelik
programlama dilleri salt bu amaçla tasarlanmışlardır.
Soyutlama
• “Soyutlama” önemli özelliklere odaklanabilmek
için ayrıntıları göz ardı etme sürecidir.
• Geleneksel
olarak, bir programlama dili
soyutlama yapmaya izin verdiği ölçüde yüksekdüzeyli (high-level) kabul edilir.
• C++ (ve diğer nesneye-yönelik programla dilleri)
verilen bir işi C’den daha soyut bir tarzda
tanımlama imkanı verirken, C de Birleştirici
Dillerden daha soyut bir ortam sunar.
Soyutlama
“Soyutlama” ,
belirli bir bakış
açısından, önemli
özelliklere
odaklanabilmek
için ayrıntıları göz
ardı etme
sürecidir.
PROSEDÜREL SOYUTLAMA
• İşlemlere ilişkin ayrıntıları göz ardı etmemize izin
veren “prosedürel soyutlama” en yaygın soyutlama
tarzıdır.
• Programlarda kişileştirilmiş kod kullanmak yerine,
belirli görevleri gerçekleştirmek için standart
fonksiyonların oluşturulması
bir prosedürel
soyutlamadır.
• Kendi fonksiyonlarınızı yazarak, programın yaptığı
bir dizi işleme bir isim vermiş olursunuz.
PROSEDÜREL SOYUTLAMA
• Belirli bir dilde bir program yazarken programcı
kendisini bu dilin sunmuş olduğu soyutlama
düzeyiyle sınırlamak zorunda değildir. Birçok dil
kullanıcı-tanımlı fonksiyonlar (rutinler, prosedürler)
yardımıyla prosedürel soyutlama düzeyini daha
yukarılara taşımaya izin verir.
• Prosedürel
soyutlama ile kod tekrarlarından
kurtulmak mümkündür.
Veri Soyutlaması
• Bir veri tipinin nasıl yapılandığının ayrıntılarını göz
ardı etmemize izin veren soyutlama tarzına “veri
soyutlaması” denir.
• Örneğin, bilgisayardaki her tür veri ikili sayılar olarak
düşünülebilir. Fakat, birçok programcı ondalık
sayılarla düşünmeyi tercih ettiği için, dillerin çoğu tam
ve “floating” sayıları destekler.
• Basic dili karakter katarı (string) tipini bir veri soyutlaması
olarak destekler. Diğer yandan, C dili string soyutlamasını
doğrudan desteklemez. Bu dilde stringler ardışık bellek
hücrelerini işgal eden bir dizi karakter olarak tanımlanmıştır.
Veri Soyutlaması
• Prosedürel soyutlama kapasitelerinin aksine, birçok
dil yeni veri soyutlaması düzeyleri
konusunda sınırlı destek sağlarlar.
yaratmak
• C kullanıcı tanımlı veri tiplerini “structure”lar ve
“typedef”ler aracılığıyla destekler.
•C
dili, içsel olarak birbirlerine bağlı olmalarına
rağmen,
prosedürel
soyutlamayı
ve
veri
soyutlamasını iki ayrı teknik olarak sunar.
• Bu tekniklerin birleştiği noktada nesne-tabanlı ya da
nesneye-yönelik programlama yaklaşımı doğar.
Saklama, Paketleme (Encapsulation)
• Saklama (Paketleme), soyutlamayı desteklemek
ya da güçlendirmek için bir sınıfın iç yapısının
gizlenmesidir.
• Bu şekilde veriler fonksiyonlarla gizlenebilir.
• Nesnenin içindeki kod, veri veya her ikisi bu
nesneye private (özel) veya public (genel)
olabilir.
Saklama, Paketleme (Encapsulation)
• Private kod ve veriler, sadece o nesneye ait
bileşenler tarafından bilinebilir ve erişilebilir.
Programda nesneye ait olmayan bileşenler, bu
private kod ve verilere erişemez.
• Kod ve verilerimiz public ise, belirli bir nesnenin
içinde tanımlansalar da programın diğer parçaları
tarafından erişilebilirler.
• Nesnelere ait public elemanları, private
elemanlara denetlenebilir şekilde erişebilmek
amacıyla kullanırız.
Sınıf Hiyerarşisi
• Nesneye-yönelik programlamanın, prosedürel
programlamada bulunmayan, bir özelliği, tip
hiyerarşisi tanımlayabilme yeteneğidir.
• Nesneye-yönelik programlama, bir sınıfın başka bir
sınıfın alt-tipi olarak tanımlanmasına; sınıflar arası
benzerlikleri bir ortak üst-sınıf altında toplamaya
izin verir.
• Birkaç sınıf için ortak bir üst-sınıf tanımlama da bir
tür soyutlamadır.
• Sınıfların ortaklaşa taşıdıkları bazı yönler üzerinde
odaklaşıp diğerlerini göz ardı etmeye izin verir.
Sınıf Hiyerarşisi
•“Aslan”, “kaplan”, “ayı” ve “inek” türünün üstsınıfı ne olabilir?
KALITIM (MİRAS ALMA) - Inheritance
Kalıtım, bir sınıfa ait özellikler ve işlemlerin
yeni bir sınıfa birebir aktarılmasıdır.
Yeni sınıf eski sınıfın özellikleri ve işlemlerine
sahip olmasına ek olarak kendisi de özellikler
ve işlemler tanımlayabilir.
KALITIM (MİRAS ALMA) - Inheritance
• Kalıtım yolu ile eldeki sınıflardan yeni sınıflar
türetilir.
• Türeyen sınıflar türedikleri sınıfın özelliklerini
kalıtım yoluyla devralırlar ve kendisi de yeni
özellikler tanımlayabilir.
• Türetme ile sınıflar arasında hiyerarşik bir yapı
kurulabilir.
KALITIM
• Bir sınıf hiyerarşisi tanımlamanın 2 pratik
faydası vardır:
• Türetilmiş sınıf üst-sınıfın kodunu paylaşabilir
(Kod Kalıtımı)
• Türetilmiş sınıf üst-sınıfın arayüzünü
paylaşabilir
(Arayüz Kalıtımı)
KOD KALITIMI
• Eğer yeni bir sınıf tanımlıyorsanız ve mevcut
bir sınıfın işlevselliğinden yararlanmak
istiyorsanız, yeni sınıfınızı mevcut sınıftan
türetirsiniz.
• Bu durumda kalıtım mekanizmaları size
mevcut kodu yeniden kullanma imkanı sağlar.
• Örnek: Veri Girişi Formlarının tasarlanması.
ARAYÜZ KALITIMI
• Bir diğer kalıtım stratejisi, türetilmiş sınıfın üst-
sınıfının eleman fonksiyonlarının yalnızca
isimlerini kalıtım yoluyla almasıdır.
• Türetilmiş sınıf bu fonksiyonlar için kendi
kodunu kullanır.
• Arayüz kalıtımının temel faydası çokbiçimliliğe izin vermesidir.
• Örnek: Farklı veri tiplerindeki form girişleri ayrı
ayrı alınır.
ÇOK BİÇİMLİLİK (Polymorphism)
• Genel anlamı ile bir adın birbiriyle alakalı
fakat teknik açıdan farklı iki veya daha fazla
amaç için kullanılabilmesi yeteneğidir.
• NYP’de ise oluşturulan nesnelerin
gerektiğinde başka bir nesne gibi
davranabilmesine denir.
• Çok biçimlilikle programdaki her nesne kendi
davranışını değiştirmeden, kalıtım
hiyerarşisine göre farklı biçimlerde görülebilir.
Bir Çok Biçimlilik Örneği
• Örneğin C dilinde, mutlak değer bulma işlemi için
üç farklı fonksiyon tanımlıdır: abs(), labs() ve
fabs().
• Fakat çok biçimliliği destekleyen C++'da bu
fonksiyonlar, abs() gibi tek bir isimle adlandırılırlar.
• Fonksiyonu çağırmak için kullanılan veri tipi,
gerçekte hangi fonksiyonun çalışacağını belirler.
• Böylece bir fonksiyon adının birkaç farklı amaç için
kullanılması mümkündür.
• Buna fonksiyonların aşırı yüklenmesi denir.
Bir Çok Biçimlilik Örneği
UML DİYAGRAMLARI
Kullanım Senaryoları ve
Kullanım Durum Diyagramları
(Use Case Diagrams)
Kullanım Durumlarının Tanımı
• Kullanım durumları, sistemin kullanıcılara
sunacağı bir hizmetin senaryo şeklinde anlatımıdır.
• Sistem gereksinimlerinin anlaşılmasını ve ifade
edilmesini sağlayan bir yöntemdir.
• Senaryo, anlamlı bir sonuca (amaca) ulaşmak için
aktör ile sistem arasında gerçekleşen olayların belli
bir zinciridir.
• Bir sistemin çalışması sırasında birden fazla
senaryo gerçekleşebilir
• Olası tüm senaryolar, kullanım durumlarını (use
case) oluştururlar.
Kullanım Senaryoları
• Yazılım dünyasındaki önemli isimleri kullanım
senaryoları ile ilgili orijinal tanımları aşağıda verilmiştir:
•(Jacobson, Booch &Rumbaugh, 1999):
• “Bir Kullanım Senaryosu, bir sistemin gerçekleştirdiği ve
belirli bir aktör için gözlemlenebilir bir sonuç ortaya
çıkaran ve çeşitli varyasyonlar içeren eylemler serisini
ifade eder."
•(Cockburn, 2000):
• “Bir Kullanım Senaryosu, tasarlama aşamasındaki bir
sistem ve harici aktörler arasında belirli bir hedefe
yönelik gelişen olası etkileşim serilerinin
koleksiyonudur."
Senaryo 1 - a
Senaryo 1 - b
Senaryo 1 - c
Senaryo 1 - d
Senaryo 1 - e
Senaryo 2 - a
Senaryo 2 - b
Senaryo 2 - c
Senaryo 2 - d
Aktör
Birincil Aktör ve Sistemin Sınırları
• Üzerinde çalıştığımız sistemi hangi düzeyde
incelediğimize ve sınırlarını ne şekilde
çizdiğimize bağlı olarak birincil aktörler
değişiklik gösterir.
• Kullanım senaryolarını yazarken sistemin
sınırlarını doğru olarak belirlemek, nelerin
dışarıda nelerin içeride olacağına doğru karar
vermek gerekir.
Birincil Aktör ve Sistemin Sınırları
Birincil Aktör ve Sistemin Sınırları
Birincil Aktör ve Sistemin Sınırları
Birincil Aktör ve Sistemin Sınırları
Kullanım Senaryolarının Yazılması
• İhtiyaçların ve istenen özelliklerin listelenmesi
şeklinde DEĞİL.
• Sistem kara kutu olarak ele alınır. Sistemin iç
yapısı görülmez, sistemin dışarıya (aktörlere)
karşı sorumlulukları ifade edilir.
• Aktörler ile sistem arasındaki etkileşim etken
cümleler ile ifade edilir.
• "Ne yapar?" sorusu cevaplanır, "Nasıl
yapar?" değil.
Kullanım Senaryolarının Yazılması
• Sistemin sorumluluklarını nasıl yerine
getireceği daha sonra gelinecek olan tasarım
aşamasında ele alınacak bir problemdir.
• Kullanım senaryolarını yazdığımız şimdiki
aşamada ise sadece istekler anlaşılmaya
çalışılıyor.
• Sistemin bitmiş hali hayal edilerek bu sistem
çalıştığında oluşabilecek senaryolar yazılır.
Kullanım Senaryolarında Yer Alan
Bölümler
• Her kullanım senaryoları grubunun (use case) bir adı ve
numarası vardır. İsimden sonra şağıdaki bölümler gelir.
Önsöz (Preface) Bölümü
Önsöz (Preface) Bölümü
• Birincil aktör, destek aktörü ve diğer aktörlerin
belirlenmesi sistemin sınırlarını çizer.
• Kullanım senaryoları ilgililerin (aktörlerin) tüm
beklentilerini karşılayan tüm olayları ve
sadece onları içerir.
• Tüm ilgililerin ve beklentilerin ilk başta
belirlenmesi önemlidir.
• Aksi durumda senaryolarda bazı durumlar
unutulabilir ve bu eksiklik ancak ileriki
aşamalarda anlaşılabilir.
Ana Başarılı Senaryo (Temel Akış)
Bölümü
Ana Başarılı Senaryo (Temel Akış)
Bölümü
Uzantılar (Alternatif Akışlar) Bölümü
Uzantılar (Alternatif Akışlar) Bölümü
Diğer Bölümler
Sıra Dışı Durumlar Bölümü (Exceptions) :
• Sistemde hatalar oluştuğunda yapılacaklar sıralanır.
Bazı tasarımcılar bu bölümdeki olayları da uzantılar
bölümünde ele alırlar.
Özel İstekler Bölümü (Special Requirements) :
• İşlevler ile ilgili olmayan istekler bu bölümde belirtilir.
Bu istekler genellikle hız, güvenilirlik, rahat kullanım
gibi kalite kriterlerine yöneliktir.
Teknolojik Beklentiler Bölümü :
• Kullanıcıların ön gördükleri donanım özellikleri burada
sıralanır. Örneğin giriş/çıkış işlemlerinin hangi cihazlar
ile yapılması istendiği bu bölüme yazılır.
ÖRNEK
• Senaryo Grubu (Use Case) SG1: Satış İşlemleri
• Konu: Market Sistemi
• Birincil Aktör: Kasa Görevlisi
• İlgililer (Aktörler) ve Beklentileri (Stakeholders and
Interests):
Kasa Görevlisi: Bilgilerin doğru ve hızlı girilmesi,
toplamın doğru hesaplanması, para üstünün doğru
hesaplanması
Satış Elemanı: Komisyonun doğru hesaplanması ve
kayıt edilmesi
Müdür: Yetkili işlemleri (kasa görevlisinin
yapamadığı) kolaylıkla yapabilmek
ÖRNEK
• İlgililer (Aktörler) ve Beklentileri (Stakeholders and
Interests):
Vergi Dairesi: Vergilerin doğru hesaplanabilmesi ve
toplanabilmesi
Kredi Kartı Asıllama Merkezi: Ödeme bilgilerinin
doğru formatta gelmesi ve asıllama bilgilerinin kayıt
edilmesi
ÖRNEK
• Ön Koşullar (Preconditions):
Kasa görevlisi sisteme giriş yapmıştır.
• Son Koşullar (Postconditions):
Satış bilgileri kayıt edilmiştir.
Vergi doğru olarak hesaplanmıştır.
Muhasebe ve envanter kayıtları güncellenmiştir.
Komisyon kayıt edilmiştir.
Fatura oluşturulmuştur.
Kredi kartı onayı kayıt edilmiştir.
ÖRNEK
• Ana Başarılı Senaryo (Doğal Akış)
ÖRNEK
• Ana Başarılı Senaryo (Doğal Akış)
ÖRNEK
• Uzantılar (Alternatif Akışlar):
•*a. Herhangi bir anda müdür yetkili bir işlem yapmak
ister ve şifresini girer:
1.Sistem müdür-yetkisi konumuna geçer.
2.Müdür yetkili bir işlem gerçekleştirir. Örneğin
satışı iptal eder, bir ürünün fiyatını indirir vs.
3.Müdür sistemden çıkar.
4.Sistem normal konuma (kasa görevlisi yetkisi)
geçer.
ÖRNEK
Uzantılar (Alternatif Akışlar):
•*b. Herhangi bir anda sistemde bir hata oluşur:
Bu durumlarda bilgilerin kayıt edilmesi ve sistemin kaldığı
yerden devam edebilmesi istenir.
1. Kasa görevlisi sistemi yeniden başlatır, sisteme giriş
yapar ve sistemin önceki durumdan devam etmesini ister.
2. Sistem önceki durumu oluşturur.
2a. Sistem önceki durumu oluştururken
anormallik sezer.
1. Sistem hata uyarısı verir, hatayı kayıt eder
ve temiz (başlangıç) duruma geçer.
2. Kasa görevlisi yeni bir satış başlatır.
ÖRNEK
Uzantılar (Alternatif Akışlar):
3a. Geçersiz bir ürün kodu (Sistemde bulunamadı):
1. Sistem hata uyarısı verir, ürünü reddeder.
2. Kasa görevlisi hataya tepki verir:
2a. Ürünün üstünde okunabilir bir kod vardır:
1. Kasa görevlisi kodu sisteme elle (manual)
girer.
2. Sistem ürünün tanıtıcı bilgisini ve fiyatını gösterir.
2b. Ürünün üstünde kod yoktur, ama fiyatı yazılıdır:
1. Kasa görevlisi müdürden yetkili bir işlem yapmasını
ister.
2. Müdür şifresini girer.
3. Kasa görevlisi fiyatı elle girer.
ÖRNEK
• Uzantılar (Alternatif Akışlar):
3b. Aynı üründen bir taneden fazla alınmıştır (5 şişe
içecek):
1. Kasa görevlisi ürün kodunu ve adetini sisteme girer.
3-6a. Müşteri kasa görevlisine bir ürünü almaktan
vazgeçtiğini söyler:
1. Kasa görevlisi satıştan çıkarılacak ürünün kodunu
sisteme girer.
2. Sistem ürünü satıştan çıkarır ve geçerli toplamı
gösterir.
3-6b. Müşteri alışverişten vazgeçtiğini söyler:
1. Kasa görevlisi satışı iptal eder.
ÖRNEK
5. Müşteri indirim hakkı olduğunu söyler (müşteri kartına sahiptir):
1. Kasa görevlisi müşteri kodunu sisteme girer.
2. Sistem indirimi uygular ve yeni toplamı gösterir.
7a. Nakit ödeme:
1. Kasa görevlisi ödenen nakit miktarı sisteme girer.
2. Sistem para üstünü gösterir ve para çekmecesini açar.
3. Kasa görevlisi müşteriden ödemeyi alır ve para üstünü
verir.
4. Sistem nakit ödemeyi kayıt eder.
7b. Kredi kartı ile ödeme:
1. ....
7c. Çek ile ödeme:
1.
ÖRNEK
• Özel İstekler (Special Requirements):
• Düz kare monitör. Yazılar 1 metre uzaklıktan okunabilmeli.
• Kredi kartı sorgulamasının cevabı en geç 30 saniyede
gelmeli.
• ....
ÖRNEK
• Teknolojik Beklentiler (Technology Variations List):
•*a. Müdür kendisini sisteme bir kart okutarak ya da tuş
takımından şifresini girerek tanıtır.
3a. Ürün kodları bir barkod okuyucu ile veya tuş
takımından elle girilebilir.
7b. Kredi kartı bilgiler kart okuyucu ile veya tuş
takımından elle girilebilir.
• ....
Download