Yazılım Mimarileri - Öğr. Gör. Emre ÇAM | Kişisel Web Sitesi
Transkript
Yazılım Mimarileri - Öğr. Gör. Emre ÇAM | Kişisel Web Sitesi
10.11.2015 Yazılım Mimarileri - BP1047 H1 1.Bilgisayar Nedir? Yazılım Mimarileri Makineler insanların günlük hayatını kolaylaştırmak için ya da başka bir deyişle yapılan işleri daha hızlı yapabilmek için tasarlanırlar. Buradan hareketle bilgisayarlar, günlük yaşam içerisindeki etkileşimleri (real world interaction) daha hızlı yapan ya da hızlandıran makineler olarak tanımlanabilir. Giriş Öğr. Gör. Emre Çam Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 1.Bilgisayar Nedir? 1.Bilgisayar Nedir? En basit bilgisayar, bir işlemci ve bellekten oluşur. Burada sözü geçen etkileşim, bir verinin alınıp, çeşitli faaliyetlerin yapıldığı bir süreç sonrasında, bilgiye dönüştürülmesi işlemidir. Bellekler ROM (Read Only Memory) ve Veri, işlenmemiş ham varlıktır. Bir başka deyişle ne, nerede, hangisi gibi sorularının cevaplarının alınmadığı şeylerdir. RAM (Random Access Memory) olmak üzere iki türlüdür. Bilgi ise işlenmiş veridir. Süreç ise veriler üzerinde yapılan işlemlerin tamamıdır. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 1 10.11.2015 Yazılım Mimarileri - BP1047 1.Bilgisayar Nedir? ROM adından da anlaşılacağı üzere yalnızca okunabilir bir bellektir. İçindeki bilgiler elektrik kesintisinde kaybolmaz. RAM ise işlenen verilerin içinde yoğrulup bilgiye dönüştüğü bir bellektir. Yani içindeki bilgiler değişmektedir. Bir başka deyişle hem okunup hem de yazılabilir özelliği vardır. Ancak hem okunup hem de yazılabilen bu bilgiler elektrik kesintisinde kaybolurlar. 1.Bilgisayar Nedir? Günümüzde bilgisayarlar, basit bir bilgisayardan daha fazla donanıma sahiptir. Verilerin ve komutların girilebileceği klavyeye, seri ve paralel porta, bilgilerin gösterildiği bir ekran ile manyetik disklere sahiptirler. Elektrik kesintileri veya bilgisayarın kapatılıp açılması gibi durumlarda RAM bellekteki değişen bilgilerin geçici olarak bir yerde saklanması gerekir. İşte bu yer, RAM’den oldukça yavaş olan manyetik disklerdir. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 1.Bilgisayar Nedir? Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 1.Bilgisayar Nedir? 1. İşlemci bilgisayarın belli bir adresine yerleştirilen ROM belleği okumaya başlar. Bir kişisel bilgisayarın elektrik düğmesine basıldığında, tamamen açılana kadar şu işlemleri sırasıyla yapar: Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Bu adres bilgisayarlar için 0xFFFF0 (CS:IP FFFF:0000) adresidir. Bu ROM bellekte BIOS (Basic Input Output System) denilen yazılım vardır. BIOS yazılımı bilgisayara takılı olan ekranı, klavyeyi, bellek miktarını, manyetik diskleri tespit eder. Burada verilen açıklanacaktır. adreslerin neyi ifade ettiği daha sonra Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 2 10.11.2015 Yazılım Mimarileri - BP1047 1.Bilgisayar Nedir? 1.Bilgisayar Nedir? 2. BIOS, işletim sistemini belleğe yükleyecek olan önyükleme (boot) programını, veriyi kalıcı olarak saklayan ortamları belli bir sırada kontrol ederek arar. 3. Manyetik disklerde ve optik disklerde bilgiler halkalar haline olup, bu halkaların (track) bir dilimine sektör (sector) adı verilir. Bu sıraya önyükleme sırası (boot sequence) adı verilir. Önyükleme yapılacak ortamın ilk sektörünün son iki baytına bakılarak, önyükleme programının varlığı tespit edilir. Bu son iki bayt 0xAA55 ise, ilgili ortamın işletim sistemini barındırdığı anlaşılır. Bu değere önyükleme imzası (boot signature) adı verilir. Bu sektör, önyükleme sektörü (boot sector) olarak adlandırılır. Manyetik disklerde bu sektör, asıl önyükleme kaydı (master boot record) olarak adlandırılır. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 1.Bilgisayar Nedir? 4. BIOS tarafından, adresine yükler. önyükleme Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 1.Bilgisayar Nedir? sektörünü, 07C0:0000 Yüklenen bu program koduna önyükleme kodu (boot code) adı verilir. Manyetik disklerde MBR(master boot record), ilk önce önyüklemesi olan etkin bölümü (partition) tespit eder ve ilgili adrese bu bölümdeki kod yüklenir. 5. Önyükleme kodu, işletim sistemini bilgisayara yükler ve kullanıcı tarafından bilgisayar kullanabilir hale gelir. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 3 10.11.2015 Yazılım Mimarileri - BP1047 1.Bilgisayar Nedir? 1.Bilgisayar Nedir? 6. Bilgisayar, işletim sistemi yüklendikten sonra, kullanıcının verdiği komutları yerine getirmeye başlar. 7. Yazılım, gerekli verileri kullanıcının belirttiği yerden veya kendisinden alır. Kullanıcının yapmak istediği işe uygun yazılımı diskten belleğe yükleyerek çalıştırır. İşleyerek ekrana ya da kullanıcının belirttiği yere ya da diske kaydedilmesini sağlar. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 1.Bilgisayar Nedir? 8. 1.Bilgisayar Nedir? Yazılımlar, veriyi aşağıdaki yerlerden okurlar: Klavyeden (keyboard), Manyetik veya optik disklerdeki dosyalardan, Bir başka yazılımdan Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 9. Yazılımlar, işlenen veriyi ya da bilgiyi aşağıdaki yerlere yazarlar: Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Ekrana (screen), Dosyaya (file), Veritabanına (database), Bir başka yazılıma. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 4 10.11.2015 Yazılım Mimarileri - BP1047 1.Bilgisayar Nedir? 2.Yazılım Nedir? Etkileşimlerin, bilgisayar üzerinde çalışacak şekilde geliştirme sürecinden geçirilip, benzetim (simulation) yapılması ile yazılım (software) elde edilir. Kısaca yazılım, gerçek dünyanın bilgisayar üzerindeki benzetimidir. Burada benzetim yapma işlemine programlama (programming) adı verilir. Yapılan bilgisayar tanımı ve bilgisayara işletim sisteminin yüklenmesiyle ilgili konudan hareketle bir bilgisayar ile insanı yukarıdaki şekilde benzeştirebiliriz. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 2.Yazılım Nedir? Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 2.Yazılım Nedir? Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Günümüze kadar programlama iki farklı bakış açısı ile yapılmıştır. Bir başka deyişle yazılımlar, etkileşimleri iki farklı bakış açısı ile benzetim yaparlar. Bunlar yordamlı programlama (Procedural Programming) ile nesneye dayalı programlama (OOP-Object Oriented Programming) yöntemidir. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 5 10.11.2015 Yazılım Mimarileri - BP1047 2.Yazılım Nedir? 2.Yazılım Nedir? Bir programlama dilinin sözdizimini (syntax) geliştirmek için gerekli olup, yeterli değildir. yazılım Yazılım açısından bakacak olursak, kurumlar (enterprise) aşağıda verilen bileşenlerden oluşur: Programlama dilini iyi bilmek, kullanıcıların ihtiyaçlarını o an için, mevcut programlama dili yetenekleriyle çözebilir. 1. İş kuralları (business rules) 2. İş varlıkları (business entity) Ancak kullanıcılar yaşayan ve sürekli değişen organizasyonlar içinde olduklarından, zamanla kullanıcı ihtiyaçları da değişecektir. 3. Bilgi (information) 4. Uygulamalar (application) 5. Teknoloji (technology) bilmek, Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 2.Yazılım Nedir? Bunun yanında iş sürelerinin yazılımlara aktarılması için iyi analiz edilmesi gerekir. Yukarıda verilen bileşenlerin detaylı incelenmesinden oluşan bu analize iş analizi (business analysis) adı verilir. İş analizleri, iş akış diyagramlarının (business flowchart) çıkarılmasıyla yapılır. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 2.Yazılım Nedir? Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Gereksinim analizi (requirement analysis) ise bu iş analizinde yazılımı gerçekleştirilecek olan kısımların diğer kısımlardan ayrılması işlemidir. Ya da bir başka deyişle yazılımı yapılamayacak kısımların iş analizinden ayıklanmasıdır. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 6 10.11.2015 Yazılım Mimarileri - BP1047 2.Yazılım Nedir? 2.Yazılım Nedir? Gereksinim analizinden sonra, yazılım yapılacak olan sistem, problem kümelerine ayrılır ve bu kümelerdeki varlıklar belirlenir. Sonuç olarak yazılımı, değişime açık ve kurumun ihtiyaçlarını karşılayacak şekilde tasarlamak gerekir. Bu varlıklar kümesi bileşenlerine PDC (Problem Domain Component) adı verilir. Bu noktada, bu değişimleri karşılayabilecek yazılımların nasıl geliştirileceği büyük önem kazanmaktadır. Çok kapsamlı yazılımlar yapılacak ise bu problem kümeleri için sisteme ilişkin “use-case” adı verilen özet senaryolar hazırlanır. Değişimlerden az etkilenen yazılımlar nesneye dayalı yazılım paradigmasıyla geliştirilirler. Bu özet senaryolar UML (Unified Modeling Language) diyagramları ile gösterilirler. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 2.Yazılım Nedir? Örneğin veritabanına bağlanma, teorik olarak iki basit yöntemle yapılır. Eğer bu yöntemleri biliyorsak, eğitime olan ihtiyaç daha az olacak ve yeni teknolojinin bize sağladığı bileşenleri tanımak, yeni teknolojiye uyum için yeterli olacaktır. Böylece yazılımcıların kapsamlı bir eğitim alması gerekmeyecektir. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 2.Yazılım Nedir? Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Bu kapsamda bakıldığında ise, teknolojiyi değil, programlamanın teorisini iyi bilen yazılımcı sahibi olmak, bütün kurumların hedefi olmalıdır. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 7 10.11.2015 Yazılım Mimarileri - BP1047 Ne Yapıyorlar Microsoft Corporation (MSFT): PC Yazılımı Oracle Corporation (ORCL): Veri tabanı, uygulama sunucuları SAP ADR (SAP): İş yönetim yazılımları Intuit, Inc.: Kişisel mali yazılımlar Infosys Technologies Ltd. (INFY): Uluslararası yazılımlar Computer Associates Int’l: Bütünleşik yazılım çözümleri Wipro Ltd: İş yönetim yazılımları Yazılım Geliştirme İstatistikleri Tipik yazılım projesinin geliştirilmesi 1-2 yıl sürüyor ve en azından 500.000 kod satır içeriyor Tüm projelerin yalnız %70-80’i başarıyla tamamlanıyor Tüm geliştirme sürecinde her birey günde ortalama 10 satırdan az kod yazıyor Geliştirme süresince her 1000 kaynak kod satırında 50-60 hata bulunuyor (satışa sunulmuş sistemde hata sayısı 4/1000’e düşüyor) Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım Problemleri (Krizleri) Tasarlanan zamanın gerisinde kalma Bütçeyi aşma Yazılım-Donanım Evrimi Erken Yıllar 1950-1960ilk bilgisayarlar, makine dili, 3-4 şirket Yazılımlar; kullanıcı ile birebir iletişimde bulunmayan, işlerin toplu olarak verilip, yalnızca yazıcı çıktılarının alındığı biçimde geliştirilmekte idi. Ayrıca, yazılımlar bu günkü gibi ürün tarzında değil, kuruluşa özel olarak geliştirilmekte idi. Düşük Kalite Güvenilir olmayan yazılım Kullanıcı taleplerinin karşılanmasında yetersizlik Sürekliliğinin sağlanmasındaki zorluk Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 8 10.11.2015 Yazılım Mimarileri - BP1047 İlk Bilgisayarlar İlk Bilgisayarlar Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım-Donanım Evrimi Yazılım-Donanım Evrimi İkinci Dönem 1960-1975 Ana çatı, çok kullanıcılı sistemler, Veri tabanı yönetimi Çok kullanıcılı, gerçek zamanlı yazılımlar üretilmeye başlandı. bilgisayarlar VTYS önce yapılandırılmış dosya sistemleri ile ortaya çıktı. Yavaş yavaş ürün türü yazılımlar ortaya çıkmaya başladı. Üçüncü Dönem 1975-1990 Süper bilgisayarlar, Kişisel Açık sistem mimarisinin tanıtıldığı bu dönemde ürün bazlı yazılımlar oldukça yaygınlaştı. Kişisel bilgisayarlar yaygınlaşarak evlere girmeye başladı. Ağ yapısının gelişmesi ve güçlenmesiyle, dağıtılmış yazılım sistemleri geliştirilmeye başlandı. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yapay zeka teknolojisinin gelişmesiyle “akıllı uygulama yazılımları” üretilmeye başlandı Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 9 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım-Donanım Evrimi Programlama Dillerinin Seviyeleri Dördüncü Dönem 1990 - Yapay Zeka, Gömülü Sistemler, Paralel Sistemler, “Yazılımda Kalite” olgusu önem kazanmış ve yazılım ile ilgili standartlar olgunlaşmaya başlamıştır. Makine Dili 10101110 10010001 4. Kuşak Veri Yapısal CICS, SQL 2. Kuşak Assembler 8085, Z80, 68000, vs 5. Kuşak Yapay Zeka Ve Paralel Programlama CSP, OCCAM 3.Kuşak Üst Seviye Diller Pascal Coral66 Basic Bildirimsel LISP Hope Prolog Nesneye Yönelik Diller Smalltalk, C++, Java Uzman sistem yazılımları oldukça gelişmiş ve mikrobilgisayarlar üzerinde yaygınlaşmıştır. 1.Kuşak Yazılım üretimi ve ürünlerinin değerlendirilmesi amacıyla kurumlar oluşmaya başlamıştır. Yazılım Mimarileri - Öğr. Gör. Emre ÇAM Yazılım Mimarileri - Öğr. Gör. Emre ÇAM 10 10.11.2015 Yazılım Mimarileri - BP1047 1.Karmakarışık Programlama Yazılım Mimarileri Karmakarışık programlama programlama tekniğidir. Yazılım Programlama Teknikleri Kod içinde birçok GOTO ifadesi bulunur. Öğr. Gör. Emre ÇAM GOTO ifadelerinin fazla olması karmaşıklığa nedenle okunaklılık (readability) oldukça azdır. Buna örnek olarak aşağıdaki BASIC programı verilebilir. 1.Karmakarışık Programlama (spaghetti programming) ilk yol kullanılan açar bu 2.Yordamlı Programlama Karmakarışık programlama kod örneğinde, “50 ile 200 arasındaki kod gerekli ise 50 satırında neden GOTO kullandın? Eğer gerekli değil ise neden bu kod yazıldı?” sorularının cevabı net olarak verilememektedir. 1968 yılında Edsger W. Dijkstra tarafından GOTO ifadesi zararlı olarak nitelendirilmiş ve getirdiği karmaşıklığı ortadan kaldıracak yeni bir çalışma başlatılmıştır. 1 10.11.2015 Yazılım Mimarileri - BP1047 2.Yordamlı Programlama 3.Yapısal Programlama 2.Yordamlı Programlama Yordamlı programlama (procedural programming) tekniğinde aynı işle ilgili işlemlerin bir araya toplanmış olduğu altişlevler (subroutine) veya birden fazla giriş noktası olan işlevler (coroutine) çağrılarak programlama yapılır. Aşağıda verilen örnekte altişlevlere gidiş GOSUB kelimeleriyle, dönüş ise RETURN kelimesiyle yapılır. Bu programlama tekniğinde okunabilirlik kısmen ancak GOTO ifadeleri hala kafa karıştırmaya devam etmektedir. çözülmüştür 3.Yapısal Programlama Yapısal programlama (structural programming) tekniği, okunabilirliği sağlamak amacıyla GOTO kullanmamayı sağlamıştır. Veri, işlemi yapan koddan ayrıldığından, yapısal programlama, veriye dayalı (data oriented) programlama tekniği olarak da adlandırılır. Program içinde veriler, belli yapılara göre saklanırlar. Dijkstra önderliğinde GOTO ifadesinin yerini alacak birçok yapı geliştirilmiştir. Ancak program, alt bölümlere ayrılmış olarak ve tek bir yapı halinde yazılmaya devam edilmektedir. Bu yapılar veri yapısı (data structure) yada küme(collections) olarak adlandırılır. Daha sonraları verileri tanımlayacak kısım ile bunu işleyen kısımları birbirinden ayıracak yeni yaklaşımlar gelişmiştir. Yetmişli yıllarda veri yapılarının (data structure) kullanıldığı üç farklı yaklaşım Jean-Dominique Warnier, Michael A. Jackson ve Ken Orr tarafından ortaya konulmuştur. 2 10.11.2015 Yazılım Mimarileri - BP1047 3.Yapısal Programlama 3.Yapısal Programlama Veri yapıları; XML Belgesi (XML Document), 1. Değişken (Variable), Nesne Grafiği (Object Graph), Basit (simple) ise Dizi ve Liste, Dizi (Array), Veriseti (Dataset), İlişkili (relational) ise Veriseti, Liste (List), Sözlük (Dictionary) gibi yapılardır. Anahtar-değer (key-value) ise Sözlük, Yığın (Stack), Hiyerarşi ise ağaç veya XML Belgesi, Kuyruk (Queue), Ağ şeklinde ise Nesne Grafiği olarak veri yapısı belirlenir. Ağaç (Tree), Verinin hangi yapı içine konulacağını, verinin doğal şekli (structure nature) ve veriye erişim şekli (data access) belirler. 3.Yapısal Programlama 2. Verinin Doğal Şekli: 3.Yapısal Programlama Erişim Şekli: Dizinler üzerinden erişilecekse Array List, String Collection, Anahtarlar üzerinden erişilecekse Hash Table, Sorted List, List Dictionary, String Dictionary Ardışık olarak erişilecekse Linked List, FIFO (First In First Out) veya LIFO (Last In First Out) olarak erişilecekse Queue, Stack yapısı kullanılır. İşlevler (function) bir veriyi işleyip sonucunu geri döndürürler. Yordamlar (procedure) ise işlemin sonucunda bir değer geri döndürmezler. İşlevler ve yordamlar parametreli yada parametresiz olabilir. 3 10.11.2015 Yazılım Mimarileri - BP1047 3.Yapısal Programlama 3.Yapısal Programlama Burada; 1. Parametre (parameter), işlev ya da yordama giren değerleri tanımlayan ifadelerdir. Aşağıda verilen faktöriyel örneğinde f, parametredir. 2. Argüman (argument) ise işlev ya da yordama giden değerlerin kendisidir veya çağrıldıkları andaki değerlerdir. Aşağıda PASCAL dilinde verilen verilen faktöriyel örneğinde 5 ile input ise argümandır. 3.Yapısal Programlama 3.Yapısal Programlama Yapısal programlamada işlev veya yordamlar, mantıksal sıralardan (logical sequence) oluşurlar. Mantıksal sıralar bir veya birden fazla: Yapısal programlamada bir mantıksal yapı (logical structure) göz önüne alınarak kodlama yapılır. Ardışık işlem (sequential operation); Yapısal programlamanın adını aldığı ve sözdizimi (syntax) daha kolay anlaşılan bu yapıda: İlk önce değişkenler tanımlanır (variable declaration). Daha sonra programı yapılacak olan işi anlamlı parçalar halinde yapacak yordamlar (procedure) ve işlevler (function) tanımlanır. Son olarak, yapılacak işe bağlı olarak fonksiyonların belli sırada çağırıldığı, ana işlev (main function) veya giriş noktası (entry point) kodlanır. Tanımlamalar (declaration), İfadeler (expression), Giriş/çıkış işlemlerinden (input/output operation) oluşur. Duruma göre seçim (conditional choice) belirten if, switch gibi deyimler, do, while, for, foreach gibi deyimleri belirten ilişkisel döngü (relational loop) veya return, break, continue, catch gibi dallanmalardan (jump) oluşabilir. 4 10.11.2015 Yazılım Mimarileri - BP1047 3.Yapısal Programlama Yapılan iş mantığına uygun olacak şekilde program, kodlanan ya da yazılan satırları ifade eden fiziksel sıralar (physical sequence) ile icra edilen (execute) satırları ifade eden mantıksak sıralardan (logical sequence) oluşur. Bu çerçevede bakıldığında işlevler içinde temel olarak iki tip işlem yapılır; Fiziksel sıra ile ardışık sıranın aynı olduğu ardışık işlemler (sequential operation), Fiziksel sıra ile ardışık sıranın farklı olduğu kontrol işlemleridir (control operation). 4.Modüler Programlama 3.Yapısal Programlama Modüler programlama (modular programming) tekniğinde, birbirleriyle ilgili olduğu düşünülen ya da aynı çağrışım kümesi içinde olduğu düşünülen fonksiyonlar bir araya toplanarak genellikle farklı bir dosya içinde tutulurlar. Bu programlama tekniğinde okunabilirlik (readability) oldukça yüksek olmasına rağmen fonksiyonların sayısının çok olması veya yazılan kodun çok büyümesi durumunda bakım (maintenance) oldukça zor hale gelmektedir. 4.Modüler Programlama Modüllere neden ayırmalıyız? Bunu, iki problemi ele alarak açıklayalım. Eğer birinci problemin karmaşıklığı ikincisinden büyük ise birincisi için harcanan çaba, ikincisinden fazla olacaktır. Bu problemleri birleştirdiğimizde ise harcanan çaba ayrı ayrı harcanılan çabaların toplamından daha fazla olacaktır. Bu durumda çözüm bölmek ve üstesinden gelmektir (Divide and Conquer). 5 10.11.2015 Yazılım Mimarileri - BP1047 4.Modüler Programlama 4.Modüler Programlama 4.Modüler Programlama Yazılımlar, yönetilebilecek (modularization). küçük parçalar halinde Ayırma tek bir dosya üzerinde olabileceği gibi her biri ayrı bir dosya içinde bulunabilir. Burada amaç, yukarıdaki sorunun karmaşıklığı (complexity) azaltmaktır. Modül, bir eylemin soyut (abstract) tarafıdır. Modüllere ayırma bize soyutlama (abstraction), değişim yönetimi (change management) ve yeniden kullanılabilirlik (reusing) sağlar. cevabından da modüllere anlaşılacağı ayrılır üzere 4.Modüler Programlama Bu nedenle, bir yazılım, modüllere ayrılmak istendiğinde, performans (performance) ile bakım (maintenance) arasında seçim yapmak gerekir. 1. Performans istendiğinde daha az sayıda işlev olacak şekilde yazılım tasarlanır. Modüllere ayırma sonrasında; Yöntemlerin çağrılması ile ilgili yük arttırılır (calling overhead), İşlemci sürekli it-çek (push-pop) yapar, Sürekli olarak veri saklanır ve okunur. Bu durumda işlevlerin boyu uzayacak ve karmaşıklık artacaktır. Ayrıca bakım da kolay olmayacaktır. 2. Bakım istendiğinde ise, yazılım, işlev sayısı fazla olacak şekilde tasarlanır. Bu durumda işlevlerin boyu kısalacak ve okunabilirlik artacaktır. Ancak daha fazla işlev çağrılacak ve performans kaybı yaşanacaktır. 6 10.11.2015 Yazılım Mimarileri - BP1047 4.Modüler Programlama 4.Modüler Programlama Karmaşıklık derecesini ölçen yöntemler aşağıda sıralanmıştır: 1. 1976 yılında Thomas McCabe tarafından geliştirilen McCabe veya Cyclomatic ölçümü, Bu durumda şu sorular sorulabilir: “Yöntemleri neye göre daha küçük parçalara ayırmalıyız?” 2. 1977 yılında Maurice Halstead tarafından geliştirilen Halstead ölçümü, 3. Bowles ölçümü, ya da “Ayırma faktörü nedir?”. 4. Henry and Kafura ölçümü, İşte burada karmaşıklık derecesi (complexity) devreye girer. 5. Troy ve Zweben ölçümü ve 6. Ligier ölçümü. Modüllere ayırma işlemi sırasında işlevleri yada yöntemleri de bölmek gerekir. 4.Modüler Programlama Bunlardan en çok kullanılanı birincisi olan Cyclomatic ölçümüdür. Bu yöntem kısaca işlev yada yordam içinde alınan karar sayısını ölçer. Cyclomatic karmaşıklık derecesi (CC) ölçümü aşağıdaki gibi yapılır: 4.Modüler Programlama CC=Verilen Karar Sayısı+1 Burada fazla olan 1, geri kalan ifadeleri temsil etmektedir. Buna göre karmaşıklık derecesi aşağıdaki şekilde hesaplanır: 1. Ardışık işlemlerin (sequential operation) ve dallanmaların (jump) hepsinin karmaşıklık derecesi 1 olarak kabul edilir. 2. Duruma göre seçim (conditional choice) her biri karmaşık derecesini 1 arttırır. Yani if ifadelerinin her biri dereceyi 1 artırır. Her bir case ifadesi dereceyi 1 artırır, defaut: ifadesi dereceyi artırmaz. 7 10.11.2015 Yazılım Mimarileri - BP1047 4.Modüler Programlama 3. 4.Modüler Programlama İlişkili döngülerin (relational loop) her biri karmaşık derecesini 1 arttırır. Yani for, foreach, do, while gibi ifadeler dereceyi 1 artırır. Döngü, while(true) gibi duruma göre sonlanmıyorsa karmaşıklığı 0 kabul edilir. 4. İstisna yakala da icra edilen kod içinde bir dallanma kararı içerdiğinden her bir catch ifadesi de dereceyi 1 artırır. 4.Modüler Programlama 4.Modüler Programlama Normal olarak 10’un üzerindeki ölçümlerde işlevin yada yordamın bölünmesi gerekir. Bölünmediği takdirde, tabloda verildiği üzere, hata düzeltme olasılığı da artacakdır. Cyclomatic karmaşıklık ölçümünde esas olarak karmaşıklık sınırı 10 olarak kabul edilir. Kodun bölünmesi daha çok maliyet ve çaba gerektiriyorsa bu sınır 20’ye kadar artırılabilir. Karmaşıklık derecesi ölçümünde bool ifadesinin de göz önüne alındığı duruma, her bir bool ifadesinin de karmaşıklık derecesinin 1 artırdığı ölçüme, CC2 (Cyclomatic complexity with Booleans/Extended Cyclomatic Complexity) adı verilir. 8 10.11.2015 Yazılım Mimarileri - BP1047 4.Modüler Programlama 4.Modüler Programlama Modüllere ayırırken iki kavram ön plana çıkar. Bunlar uyum (cohesion) ve bağlaşımdır (coupling). 1. Case ifadelerinin her biri değil de sadece switch ifadesinin karmaşıklığı 1 artırdığı ölçüme ise CC3 (Cyclomatic complexity without Case/Modified Cyclomatic Complexity) adı verilir. Yani yukarıda verilen modüler programlama kod örneğinde dosya işlemleri modülünde “ElektronikPostaGönder” gibi konu dışında bir işlev olmaması gerekir. CC, CC2 ve CC3 ölçümlerinden hangisinin kullanılacağına yazılımcı karar verir. En çok kullanılanı CC ölçümüdür. Yani modülleri yüksek uyum (high cohesion) içinde oluşturmalıyız. 4.Modüler Programlama Uyum (cohesion), konu bütünlüğünü bozmadan modüller oluşturmaktır. 5.Olay Güdümlü Programlama 2. Bağlaşım (coupling), birinde yapılan değişikliğin diğerlerinde en az değişiklik gerektirecek şekilde modüllerin oluşturulmasıdır. Şimdiye kadar işlenen programlama tekniklerinde program tarafından, tuşa basılması veya farenin hereket ettirilmesi gibi, bir olayın olması beklenir. Yani modül, biryerinde olacak değişiklikte çorap söküğü gibi diğer modülleri en az etkilemecek şekilde zayıf bağlaşımla (loosely coupling) hazırlanmalıdır. Olay güdümlü programlama (event driven programming) tekniğinde ise olay gerçekleştiğinde ilgili işlev icra edilir. Yani, fare hareketi ve tuşa basılması gibi olaylar karşısında, gerekli fonksiyonun çağrılması sağlanarak programlama yapılır. 9 10.11.2015 Yazılım Mimarileri - BP1047 5.Olay Güdümlü Programlama 5.Olay Güdümlü Programlama Bu programlama tekniğinde olayları dinleyen fonksiyonlar yazılır. Beklenen olay numarası algılandığında, o olaya ilişkin alt işlev çağrılır. Beklenen olay karşısında bir fonksiyonun icra edilmesine yakalama (event capture) ya da sadece yakalama (capture) adı verilir. Bu programlama tekniğine ilişkin bir Windows uygulamasının giriş işlevine (main function) yönelik örnek kodlama aşağıda verilmiştir. olay Beklenmeyen bir olay kodu geldiğine ise hiçbir işlem yapılmaz. 5.Olay Güdümlü Programlama 6. Nesneye Dayalı Programlama İlk önceleri olayların numaralandırılması işlemi programcı tarafından yapıldığından, olay numaraları, yazılımdan yazılıma farklılık göstermiştir. Nesneye dayalı programlama (OOP) tekniğinde, olayları gerçekleştiren nesnelerdir. Daha sonraları bu tutarsızlığı gidermek için numaralama işlemi, işletim sistemi tarafından yapılarak bir standart sağlanmıştır. Nesneler gerçek hayattaki varlıklara (insan, araç, personel gibi) tekabül eder. Bir nesneye bir işi yapma iletisini (message) gönderen bir başka nesnedir. Yani nesneler birbirlerine ileti göndererek (message-passing) haberleşirler ve bu mesajlar karşısında nesneler davranış(behavior) gösterir veya yöntem (method) geliştirirler. Ancak bu programlama tekniğinin de daha öncekilerde olduğu gibi değişime karşı direnç gösteren bir yapısı vardır. Ayrıca gerçek dünyada nesneler vardır ve bu nesneler etkileşim içindedir. 10 10.11.2015 Yazılım Mimarileri - BP1047 7. İlgiye Yönelik Programlama 7. İlgiye Yönelik Programlama İlgiye Yönelik (AOP-Aspect Oriented Programming) programlama yöntemi, aslında nesneye dayalı programlamanın genişletilmiş halidir. Nesneye dayalı programlama tekniğinde, nesnenin asli görevleri dışındaki işlerin de nesne tarafından yapıldığı, bir tanımlama ya da modelleme yapılmaktadır. 1. Kod Karmaşası (code tangling): Nesneler, asli görevini yerine getirirken başka görevleri de yaparlar. Asli görevi olmayan bu işlevleri yerine getirmesini sağlayan kodlar, kod karmaşasına yol açarlar. 2. Saçılma Meselesi (scatterred concern): Nesneler, bir işi yapmak için diğer nesnelere de bazı işler yaptırırlar. Bu da çeşitli problemlere yol açmaktadır. Bu durumda işin tamamını ilgilendiren kod başka başka yerlere dağıtılır. Bunlardan birkaçı şu şekildedir: İşte bu durum, saçılma meselesi olarak adlandırılır. 3. Kesişme Meselesi (cross-cutting concern): Birbiriyle ilgisi (aspect) olmayan kodların birbirinden ayrılması için bu terim kullanılır. 7. İlgiye Yönelik Programlama Bu yeni yöntemde bize, nesnenin asli görevleri ile diğer görevleri birbirinden ayıracak bir yapı sağlanmaktadır. Bu programlama yöntemiyle, nesneye dayalı programlama ile birlikte gelen problemleri bertaraf edecek bazı yenilikler getirilmiştir. Bu nedenle Nesneye Dayalı Programlama Programlamanın yapılamayacağı bilinmelidir. bilinmeden İlgiye Dayalı 11 10.11.2015 Yazılım Mimarileri - BP1047 Programlama Paradigmaları Yazılım Mimarileri Programlama Paradigmaları Programlama tekniklerine bakıldığında paradigma (paradigm) olarak birçok farklı bakış açısı vardır. Paradigma, bir alana ilişkin fikir, yaklaşım ve kavramların oluşturduğu düşüncelere ait ortak anlayışlar ya da değerler dizisidir. Paradigmalar genel olarak iki başlık altında toplanabilir. Öğr. Gör. Emre ÇAM Programlama Paradigmaları 1.Yordamlı Programlama Paradigması Birinci paradigma, yordamlı programlamadır. Programlar, talimatlardan oluşan bir liste şeklinde yazılır. İkincisi ise; nesneye dayalı programlamadır. Bilgisayara ne yapacağı, adım adım (step-by-step) söylenir: Bu bölümde bu iki farklı paradigmanın, yazılımı yapılacak olan sisteme bakış açısı, üzerinde durulmaktadır. “Dosyayı aç, Bir rakam oku, 4 ile çarp, ekranda göster, …”. Bu adımlar gruplar halinde işlevlerin (function) içinde toplanır ve bu işlevler, ana işlev (main function) içinde sırasıyla çağrılır. 1 10.11.2015 Yazılım Mimarileri - BP1047 1.Yordamlı Programlama Paradigması 1.Yordamlı Programlama Paradigması 1.Yordamlı Programlama Paradigması Yordamlı programlamada bir işlem, sıralamada kendinden önceki işlemin gerçekleşmesi sonrasında gerçekleştirilir. Bir işlevin işi bitmeden diğer işlev işleme konulmaz. Yazılımcılarda, modellenecek iş sürecinin yazılım karşılığının, birbiriyle ilişkili yordamlar bütünü olacağı, anlayışı vardır. 2.Nesneye Dayalı Programlama Paradigması Bu programlama paradigması kullanılmamaktadır. fazla Bu yeni bakış açısında, benzetimi (simulation) yapılacak süreçteki nesneler (object) tek tek tanımlanır. Bunun sebebi, programlanan işte değişiklik olması halinde, tüm işlevlerin ve hatta ana işlev (main function) içindeki işlev sıralarının değiştirilmesi ihtiyacının ortaya çıkmasıdır. Nesnelerin her birinin kendine özgü davranışları (behavior) veya bir başka deyişle yöntemleri (method) vardır. Bir başka deyişle değişimin yazılıma aktarılmasında (change management) güçlük çekilir. Programlama bu nesnelerin göstermeleri ile yapılır. Burada, nesnelerin birbirlerinden etkilenmesi iletilerle (message) sağlanır. Bu işleme ileti gönderme (message-passing) adı verilir. son zamanlarda birbirlerinden etkilenerek davranış 2 10.11.2015 Yazılım Mimarileri - BP1047 2.Nesneye Dayalı Programlama Paradigması Gerçek dünyadaki gibi, süreci gerçekleştiren nesneler, özellikleri (attribute) ve davranışları (behavior) ile tanımlanır. Bu nesneler birbirlerine çeşitli olaylar (event) karşısında ileti göndererek davranış göstermesini isterler. Nesneler davranışları yöntemlerle gösterir, yani nesneye dayalı programlamada yöntem (method), yordamlı programladaki işlev (function) veya yordamı (procedure) ifade eder. 2.Nesneye Dayalı Programlama Paradigması 2.Nesneye Dayalı Programlama Paradigması 2.Nesneye Dayalı Programlama Paradigması Mesaj gönderme (message-passing) iki türlüdür: 1. İleti (message): Bir nesneden bir nesneye gönderilir. Nesne bunun karşısında bir davranış (behavior) gösterir. 2. İleti gönderme ile yöntem çağırma (function calling) arasındaki temel fark, ileti gönderilecek nesneye ait bir davranışın tanımlı olmasıdır. Yani yöntem, ancak bir nesne var olduğunda çağrılabilir. Yordamlı paradigmadaki işlevlerde ise bu zorunluluk yoktur. Uyarı (signal): Bir nesneden birçok nesneye gönderilir. Yani bir nesne bir olayın olduğunu ortama yayar (publish) ve bu çağrı karşısında nesneler tepki (handler) gösterirler. Gerçek dünyada olduğu gibi her nesne her çağrıya tepki vermez. Bu nedenle hangi çağrıya tepki verileceği önceden belirlenir. Bu nedenle nesneler, tepki gösterecekleri çağrı mekanizmasına önceden kayıt olurlar. 3 10.11.2015 Yazılım Mimarileri - BP1047 2.Nesneye Dayalı Programlama Paradigması 4 10.11.2015 Yazılım Mimarileri - BP1047 1.İlk Nesil Programlama Dilleri Yazılım Mimarileri John von Neumann tarafından geliştirilmiş iki önemli kavram, programlama dillerinin gelişiminde önemli rol oynamıştır. Programlama Dilleri Birinci kavram, programların paylaşımı (Shared Program Technique) adını taşır. Bilgisayar donanımı basittir ve üzerinde çalışacak programların her seferinde yeniden yazılması gerekmez. Öğr. Gör. Emre ÇAM 1.İlk Nesil Programlama Dilleri 1.İlk Nesil Programlama Dilleri İkinci kavram ise Kontrol Yapılarının Aktarımı (Conditional Control Transfer) olarak adlandırır. Von Neumann tarafından 1949 yılında “Short Code” adlı bir dil çalışması yapılmıştır. Bu kavramda bilgisayar, kronolojik olarak adımları yerine getirmez. Bu çalışma elektronik devreler için yazılmış ilk programlama dili olarak bilinir. Küçük bloklar (subroutine) ve kodlar üzerindeki sınıflamalar ile işlemleri yapması gerektiğini savunur. Bu dil programcıların yazdığı ifadeleri, bilgisayarın anladığı 1 ve 0’lara çevirir. Bilgisayarın anladığı 1 ve 0’lardan oluşan ikili tabandaki sayılar arda arda gelerek programları oluşturur. Bu tür sayılardan oluşan makine dili programları ilk nesil programlar olarak kabul edilir. Bu kavram, aynı zamanda kodu tekrar ve tekrar yazmamak için “if” deyimi ve “for” gibi kontrol yapılarının olması gerektiğini belirtir. 1 10.11.2015 Yazılım Mimarileri - BP1047 2.İkinci Nesil Programlama Dilleri 2.İkinci Nesil Programlama Dilleri 1. Programa ilişkin kod, programcı tarafından yazılır ve bilgisayarda çalışması için bilgisayarın anlayacağı sayılara dönüştürülür. Bu işleme birleştirme (assembly) adı verilir. 2. Sembolik dil belli bir işlemciye ve işlemcinin bulunduğu ortama bağımlıdır. 1951 yılında Grace Hopper tarafından ilk derleyici olan A–0 yazılmıştır. Derleyici (compiler) programlama dili ile yazılan ifadeleri bilgisayarın anlayacağı 1 ve 0’lara çeviren bir programdır. Derleyicinin ortaya çıkması, programcıların daha hızlı program yazmasını sağlamıştır. Bir sonraki aşama olarak bilgisayarın anladığı 1 ve 0’lardan oluşan her bir sayıya sembolik isimler verilerek programlar yazılmaya başlanmıştır. Bu sembolik isimler kullanılarak hazırlanmış programlar, sembolik derleyiciler (symbolic assembler) tarafından bilgisayarın anlayacağı sayılar dizisine dönüştürülürler. Bu tip diller, ikinci nesil programlama dili olarak adlandırılıp, iki özelliğe sahiptirler; 3.Üçüncü Nesil Programlama Dilleri Üçüncü Nesil Programlama Dilleri, ikinci nesil dillerin daha sadeleştirilmiş hali olan ve programın bir mantıksal yapıya kavuştuğu, kullanılan donanımdan bağımsız olarak derlenebilen ancak işletim sitemine bağımlı derlenip çalıştırılabilen dillerdir. Üçüncü nesil diller, daha çok programcı dostudur. Programcılara karmaşık veri tipleri ve kontrol yapılarını daha kolay ifade etme yeteneği verir. 2 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri FORTRAN,1954 “Formula Translating System” kelimelerinden adını alan FORTRAN 1954’den itibaren geliştirilmeye başlanmıştır. Matematiksel formülleri IBM 704 makine koduna çeviren bir grup tarafından tasarlanmıştır. İlk önce matematiksel ifadeleri makine koduna kolay çevirmek için geliştirilmiş, daha sonraları ise derleyici olarak yeniden tasarlanmıştır. 1957’de ilk FORTRAN dili kullanım kılavuzu yayınlanmıştır. 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri FORTRAN,1954 FORTRAN,1954 Değişken tanımlamaları (variable), deyimlerden (statement) oluşur. Bu nedenle yüksek düzey (high level) dil olarak adlandırılır. Aritmetik ifadeler ya da formülasyona izin verir İfadelendirme yeteneği yüksek olan yordamlı programlama (procedural programming) dilidir. Durumlara(condition) ve tekrarlanan (repetitive) dallanmaları (branching) sağlayacak kontrol yapılarına (control structure) sahiptir. Bu özellikten dolayı bu ve bundan sonra geliştirilen diller üçüncü nesil diller olarak adlandırılır. Derleme öncesinde uzunluğu bilinen diziler tanımlamaya izin verir. Dil içerisinde açıklama (remark/comment) yapılmasına izin verilen bir yapı mevcuttur. FORTRAN, Makine diline bağımlılıktan kurtulmuş bir dildir. ifadeler (expression) ve 3 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri LISP,1958 LISP,1958 Fonksiyonlar temel program parçalarıdır. Fonksiyonel ve etkileşimli bir dil olup, John McCarthy tarafından IBM 704 için 1956-1958 arasında tasarlanmıştır. Basit manada veri yapılarını (data structure) destekler. Dinamik veri yapısını destekler. Yapay zekâ araştırmalarına kolaylık sağlamak amacı ile de geliştirilen bu dilin kullanım kılavuzu 1960’da yayınlanmıştır. Kullanılmayan hafızayı yönetebilmek (garbage collection) için çeşitli araçlara sahiptir. Rakamlara karşılık gelen sembolik ifadeler kullanmayı destekler Fonksiyonları ifade etmek için matematiksel bir gösterim sağlayan Lambda Calculus’dan esinlenilmiştir. “LISt Processor” kelimelerinden adını almıştır. Yineleme ve durumlara göre dallanmayı sağlayan ifadeler gibi kontrol yapılarını destekler. LISP, ifadelerinin etkileşimli olarak işlenmesini sağlayan “eval” fonksiyonuna sahiptir. 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri ALGOL60,1958 ALGOL60,1958 Blok yapılar ve yerel değişken tanımlama özelliği bulunur. Uluslararası bir takım tarafından geliştirilmiştir. İç içe geçmiş program yapılarını destekler. ALGOL58, ALGOL60, ALGOL68 gibi birçok uyarlaması vardır. Gelişigüzel (free format) program kodu yazma özelliği bulunur. ALGOL60 bilgisayar bilimlerinin ve programlama dillerinin gelişimini önemli ölçüde etkilemiş, Pascal ise bu işlevi devam ettiren dillerden olmuştur. Yeni değişken tiplerinin tanımlanmasına (explicit type) izin verir. Dinamik bellek ayırma (memory allocation) yöntemini destekler. Fonksiyonlarda İsim ve değerler ile parametre kullanımına izin verir. 4 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri COBOL,1960 COBOL,1960 Amerika Savunma Bakanlığı’nın veri işleme (data processing) amacıyla ortak kullanılan bir programlama dili geliştirilmesi isteği üzerine geliştirilmiştir. CODASYL (Conference on Data Systems Languages) komitesi tarafından 1960’da COBOL (COmmon Business-Oriented Language) tamamlanmıştır. FORTRAN gibi makine dilinden bağımsız bir yapıya sahiptir. COBOL, Fortran, ALGOL58 ve İngilizce’nin sözdizimi yapısının egemen olduğu bir dildir. “record” veri yapısını desteklemektedir. Dosya tanımlamaları ve işlemleri yapılabilmektedir. Makineden bağımsız veri tanımlama ve program yapılmasına izin verir. Sözdizimi olarak İngilizce egemendir. Programlama dilleri doğası gereği olmayacak fakat okunabilirliği sağlamak amacıyla fazladan kelimelere sahiptir. Program, kendiliğinden bir dokümantasyona sahip olmaktadır. 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri APL,1962 BASIC,1964 APL(A Programming Language), Ken Iverson tarafından 1957 ve 1962 yılları arasında geliştirilmiştir. BASIC (Beginner’s All-purpose Symbolic Instructional Code) ilk defa 1964 de çalıştırılmıştır. Fonksiyonel, etkileşimli, bilimsel çalışmalara yönelik hazırlanmış, dizilerin öntanımlı (default) olduğu bir dildir. Bilgisayar bilimleriyle ilgili olmayan kişilerin bilgisayar kullanımını sağlamak amacı ile tasarlanmıştır. Çok boyutlu diziler ile rakamsal verilerin çokça işlendiği uygulamaların oluşturulmasına uygun bir dildir. FORTRAN ve ALGOL dillerinden etkilenilmiştir. Bu dilin temel amacı kullanıcı ara yüzünü basitleştirmektir. Bunun için; 5 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri BASIC,1964 SIMULA,1965 Hız yerine basitlik ön plana çıkarılmıştır. PUNC kartları üzerinde zaman harcama azaltılmıştır. Integer ve Real gibi değişken tipleri tek bir tip olarak tanımlanır. Değişkenler, değerler, diziler ve formatlar otomatik olarak öntanımlıdır. Hata mesajları silinebilmektedir. Öğrencilerin bilgisayar başında daha fazla zaman harcamalarını sağlayacak bir yapı öngörülmüştür. Uluslararası bir BASIC standardı bulunmamaktadır. ANSI standardı asgari standarttır. Daha sonraları Microsoft firması tarafından genişletilmiştir. Simula dili, Ole-Johan Dahl ve Kristen Nygaard tarafından 1962 ile 1965 yılları arasında, Simula 67 dili ise 1967 yılında geliştirilmiştir. Bu diller nesneye dayalı olarak geliştirilmiş ilk iki programlama dilidir. Nesne, sınıf, alt sınıflar, sanal yöntemler (virtual methods) ve çöp kovası (garbage collection) bu dilin getirdiği önemli yeniliklerdir. 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri PL/1,1965 PL/1,1965 Çok görevlilik (multitasking) özelliğine sahiptir. FORTRAN’ın bazı planlanmıştır. ve İlk olarak “FORTRAN Extension” olarak adlandırılmasına rağmen, sonraları PL/1 (Programming Language 1) olarak adlandırılmıştır. Programcı tarafından tanımlanan istisna yönetimi (exception management) yöntemlerine izin verir. Dil, tasarımında olan birçok yeniliklerinden çevrelerde oldukça ilgi görmüştür. Pointer ve listelerle ilgili tanımlamalarına izin verir. Oldukça büyük ve karmaşıktır. Birçok değişken saklama yöntemlerini (static, automatic, controlled) barındırır. Derleyicisi makinelerden ayrı olarak satılan ilk programlama dilidir. İşletim sisteminden kaynaklanabilecek problemleri göz önüne almamızı sağlayan yapılara izin verir. yeteneklere kavuşması için tasarlanmış dolayı akademik yeni değişken tipi 6 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri PL/1,1965 C,1972 Adını Fransız filozof ve matemetikçi Blaise Pascal’dan almıştır. Basit ve zariftir. Akademik çevreler tarafından yaygın olarak kullanılmıştır. “case” deyimi, kullanıcının tanımlayacağı yeni değişken tiplerine yönelik yeni bakış açısı, “record” veri yapısı, “new” ve “dispose” gibi dinamik bellek kullanımını sağlayan özel komutları vardır. Kenneth Thompson ve Dennis Ritchie tarafından Bell Laboratuarlarında 1972 yılında tasarlanmıştır. UNIX işletim sistemini daha taşınabilir (portable) yapmak amacıyla çeşitli işlevlerini (routine) kodlamak için tasarlanmıştır. Bu nedenle adlandırılır. yüksek düzey (high level) dil 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri C,1972 SmallTalk,1980 Kolay anlaşılabilir bir sözdizimine sahip değildir. Kodun okunması ve bakımı zordur. String, Set, List gibi bileşik (composite) veri tiplerini işleyebilecek dâhili (built-in) fonksiyonlara sahip değildir. Bu özelliğinden dolayı bu dil için, sağlayacak, birçok kütüphane yazılmıştır. Güçlü değişken tiplerine, çalıştırma anı (run-time) değişken tipi kontrolüne sahip değildir. Yüksek düzey (high level) bir dil ile düşük düzey (low level) işlemleri yapmamızı sağlayan bir yapıya sahiptir. Bu özelliği ile daha sonraları oldukça güçlü bir dil haline gelmiştir. daha sonraları avantaj olarak Bu dil nesneye dayalı programlamanın gerçek olarak hayata geçirildiği dildir. Bu dil, nesneye dayalı modellemenin yapıldığı, nesne tiplerinin dinamik olarak belirlendiği, Nesnelerin kendisine ait yapı (structure) ve davranışların (behavior) başka nesneler tarafından bilinmesini sağlayan yansıma (reflection) gibi özelliklere sahiptir. 7 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri SmallTalk,1980 SmallTalk,1980 Bir smalltalk nesneyi aşağıda verilen üç şeyi yapabilir: Durumları (state) ve diğer nesnelere olaran raferansları (reference) tutabilir. Bir nesneden yada kendinden ileti (message) alabilir. Bir iletiyi işlerken başka nesnelere veya kendine ileti gönderebilir. Phyton ve Ruby gibi birçok dil, smalltalk yaklaşımlarını C diline benzer sözdizimlerine uygulamışlardır. Perl 6 dili smalltalk dilinin nesne modeli üzerine kurulmuş bir dildir. Smalltalk dilinin modüler yapıda betik (script) olarak kullanımını sağlayan S# (S Sharp) adında bir dil de bulunmaktadır. Smalltalk dili saf bir nesneye dayalı dildir. Bu dilde bulunan tamsayı ve karakter gibi tüm ilkel tipler de birer nesne olarak tanımlanmıştır. 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri ADA,1983 C++,1985 Amerika Savunma Bakanlığında yer alan bilgisayarlarda kullanılan yüzlerce programlama dilinin yerini alması için hazırlatılmıştır. Proje tamamlandıktan sonra Ada adını alan bu dil, nesneye dayalı, yapısal, veri tanımlamayı zorunlu kılan (imperative), statik veri tipleri üzerine kurulmuş pascal tabanlı bir dildir. Geliştirilirken, program yazmayı kolaylaştırmak için okunabilirliğin arttırıldığı yapısal programlama yöntemleri göz önüne alınmıştır. İstisna yönetimi (exception management), paralel işlem (paralel processing) ve soyut veri tipleri (abstract data types) tanımlanmasına izin veren bir yapısı vardır. C++, nesneye yönelik kavramların C diline uygulanarak, eklentilerle genişletilmiş bir halidir. Bu nedenle Bjarne Stroustrup, bu yeni dilin adını "C with Classes" olarak koymuştur. Simula dilinin nesneye yönelik özelliklerini C diline uyarlamıştır. C dilini seçmesinin nedeni, o dönemki bilgisayar programcılarının hem düşük düzey hem de yüksek düzey programlama yapmasını sağlaması ve yaygın olarak kullanılmasından kaynaklanmaktadır. “C++” terimi ilk kez 1983’te kullanılmaya başlanmıştır. 8 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri JAVA,1995 JAVA,1995 Daha sonra hedefini doksanlı yılların ortasında web teknolojilerinin popüler olmasıyla birlikte buraya çevirmiştir. Doksanlı yılların başlarında, etkileşimli (interactive) televizyon, teknolojinin geleceği olarak görülüyordu. Bu amaçla Sun Microsystems tarafından, televizyon dahil birçok makine üzerinde çalışabilecek taşınabilir (portable) bir dil üzerinde çalışmaya başladı. 1995 yılında Netscape Java’yı lisanslayarak kendi internet tarayıcısı olan Navigator içine yerleştirmiştir. Bu noktadan itibaren Java, birçok yazılım işletmesi tarafından kullanılmaya başlandı. Popülaritesi ve gücü yüksek olan C diline benzeyen ve nesneye dayalı programlamayı daha da kolaylaştıran bu dil, Java adını almıştır 3.Üçüncü Nesil Programlama Dilleri 3.Üçüncü Nesil Programlama Dilleri JAVA,1995 C#,2001 İnternet üzerindeki uygulamalar, istemci-sunucu mimarisiyle hazırlandığından, Java dili, işletim sisteminden bağımsız programlama yapmayı sağlayan geniş çevreler tarafından kullanılan bir dil haline gelmiştir. Günmüzde JAVA geliştiriciler için aracıdır. dili, açık kaynak kodlu yazılım vazgeçilmez bir yazılım geliştirme Günümüz itibariyle, çoğunlukla eğitim ve web teknolojilerinde kullanılan ve gerçek olarak nesneye dayalı programlama yeteneğine sahip önemli bir dildir. C# adını C++ dilinin biraz daha genişletilmiş anlamında olan ve “++” karakterlerinin birleştirilmiş hali olan (C++)++ harflerinden almıştır. C# Dili, ECMA tarafından nesneye dayalı yazılım geliştirme tekniklerinin tümünü destekleyen bir dil olarak tasarlanmıştır. İkibinli yıllarda geliştirilmeye başlanan bu dilin ilk adı “Simple Managed C” olarak verilmiştir. Çünkü bu dil yalnızca .NET altyapısı üzerinde çalışmaktadır. Bu altyapı üzerinde çalışan uygulamalara yönetilmiş (managed) uygulama adı verilir. Bu altyapı dışında geliştirilmiş uygulamalara ise yönetilmemiş (unmanaged) uygulama adı verilir. 9 10.11.2015 Yazılım Mimarileri - BP1047 3.Üçüncü Nesil Programlama Dilleri 4.Dördüncü Nesil Programlama Dilleri C#,2001 Kurumsal yazılım geliştirme için iyi bir altyapı sağlayan bu dil, 2000 yılı temmuz ayında C# olarak adlandırılmış ve 2001 yılından itibaren yaygın olarak kullanılmaya başlanmıştır. 5.Nesneye Dayalı Programlama Dilleri 1961 başlarından itibaren nesneye mantığına uygun diller geliştirilmiştir. dayalı programlama Temel olarak amaç, programcıya olan ihtiyacın en aza indirilmesidir. Dördüncü nesil programlama ifadesinden ilk olarak 1982 yılında James Martin’in “Application Development without Programmers” adlı kitabında bahsedilmiştir. Başlıcaları tablo güdümlü programlama, kullanıcı arayüzü üreten programlar, rapor üreten programlar, veri yönetimine yönelik programlar olmak üzere bu nesil programlamanın birçok tipi vardır. Clipper, FoxPro, SQL, Informix-4GL, Progress-4GL, Metafont, Oracle Reports, Quest, Matlab, Mathematica, SPSS, ColdFusion dördüncü nesil dillere örnek gösterilebilir. 5.Nesneye Dayalı Programlama Dilleri Nesneye dayalı yazılım yapan uzmanlar programlama dillerini, hibrit (hybrid) ve saf nesneye dayalı olmak üzere ikiye ayırır. Hibrit diller bazı nesneye dayalı kavramların yanında geleneksel olarak kullanılan diğer modeller ile programlama yapmaya izin verirler. C++, Object Pascal, Java, Delphi gibi diller bu sınıfta yer almaktadır. Bu diller yazılımı yapılan sürece ilişkin nelerin yapılacağını değil, işin nasıl yapılacağını da belirtirler. C++ (a superset of C), Ada 95, and CLOS (LISP dilinin nesneye dayalı uyarlaması) gibi diller hibrit dillere örnek olarak verilebilir. Saf nesneye dayalı diller ise nesneye dayalı olarak programlama yapmaya izin verirler. Bu nedenle bu diller, tanıtıcı (declarative) diller olarak da anılırlar. SmallTalk, Eiffel, Simula, Java ve C#, saf nesneye dayalı programla dillerine örnek verilebilir. 10 10.11.2015 Yazılım Mimarileri - BP1047 5.Nesneye Dayalı Programlama Dilleri Yakın zamana kadar çok sayıda uygulamada, nesneye dayalı uygulama dili olarak C++ kullanılmaktadır. Bu dilin önemli üstünlüğü, sözdizimi olarak C diline benzemesi ve birçok programcı tarafından bilinip kullanılmasıdır. Bu da eğitim maliyetlerini azaltmaktadır. Bunun yanında C++, nesneye dayalı programlamanın tüm kavramların uygulanmasına izin verir. Bu dilinin zayıf taraflarından biri ise çokbiçimlik ve dinamik bağlama konusunda yeteneğinin sınırlı olmasıdır. Günümüzde en çok C#, Java nesneye dayalı uygulama dili olarak kullanılmaktadır. 11 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Geliştirme Süreci Ele Alınacak Hususlar Günümüzde bir kurumun birçok ihtiyacını karşılayan kurumsal yazılımlar geliştirilirken, aşağıdaki hususlar detaylı olarak ele alınır; Yazılım Mimarileri 1. Teknolojinin getirdiği mali yük, 2. Farklı teknolojilerden kaynaklanan karmaşıklık, Yazılım Mimarisi Modelleri 3. Çok işi az zamanda yapılmak istenmesi, Öğr. Gör. Emre ÇAM 4. Sınırlı kaynaklar, Yazılım Mimarisi Modelleri 1.Şelale Modeli Şelale modeli (waterfall model) 1970 de Royce tarafından tanımlanmıştır. Bu modelde bir sonraki aşamaya geçmek için, bir önceki aşamanın tamamlanması gerekir. Bir sonraki aşamaya geçmeden, içinde bulunulan aşamanın tüm dokümanları hazırlanır. Bu model, klasik yaşam döngüsü (classic life cycle), doğru sıralı (linear sequential) model olarak da adlandırılır. 5. Kayıplar ve sistemi bozan etkenler, 6. Dağıtık yazılım geliştirme, 7. Yazılım takımında koordinasyon ve iletişim, 8. Yazılım takımının yetenekleri, 9. Yazılım takımın eğitimi ve öğrenme eğrisi. Yazılım Mimarisi Modelleri 1.Şelale Modeli 1 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri 1.Şelale Modeli Projelerin küçük olması halinde bu modelde yanlış giden hiç bir şey olmayacaktır. Burada “küçük olması” ifadesi, projenin ilgili olduğu kişilerden oluşan grubun, sistemi anlayabilecek kadar az kişiden oluşabildiğini anlatmaktadır. Yazılım Mimarisi Modelleri 1.Şelale Modeli 1. Yazılım geliştirme sürecinde bu model, başa dönüp tekrar analiz yapma imkânı vermediğinden zaman geçtikce risk artar ve hata ayıklama maliyeti de hızla yükselir. Bu modelin zayıf tarafları: Çok fazla dokümana bağımlı kalınır (document driven). 2. Ele alınan proje büyüdükçe, karmaşıklıklar artar ve çeşitli zorluklarla karşılaşılır. 3. Kullanıcı, yazılım tamamlanmadan herhangi bir şey göremez. 4. Kullanıcının beklediği istekleri tam olarak yerine getiremez. Yazılım Mimarisi Modelleri 1.Şelale Modeli Bu modelin üstünlükleri: 1. Projede disiplin çok kolay sağlanır. 2. Proje dokümantasyonu üretmek çok kolaydır. 3. Test işlemi her aşamada yapılabilir. 4. Bakım işlemi kolaydır. Yazılım Mimarisi Modelleri 1.Şelale Modeli 5. Karmaşıklık arttıkça geliştiriciler üzerindeki yük de artar. 6. Olabilecek riskler önceden düşünülmez ya da daha sonraya ertelenir. 7. Büyük problemler projenin daha sonraki aşamalarında, özellikle sistem uyumlaştırma (integration) aşamasında ortaya çıkar. 8. Büyük projelerde her bir aşama oldukça uzun zaman aldığından dolayı, projeyi gerçekleştirecek personel maliyetleri de artar. 2 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri 2.Hızlı İlkörnek/Prototipleme Modeli Yazılım Mimarisi Modelleri 2.Hızlı İlkörnek/Prototipleme Modeli Bu modelin özellikleri; Hızlı prototipleme modelinde (rapid prototyping model), ilk olarak kullanıcının önüne hızlıca örnek bir yazılım konulur ve bu model geliştirilir. 1. Kullanıcı ve yazılımı geliştiren ekip birlikte iş konusunda etkileşim içinde bulunur ve birlikte proje hakkında tecrübe sahibi olur. Yani kullanıcı ile yazılımcı arasında iletişim vardır. Şelale modelinde bir önceki safhaya geçip tekrar gözden geçirme yapılmaz. 2. Yazılımın yapması gerekenler, kullanıcının ilk yazılıma bakıp ikna olmasından sonra belirlenir. Bu modelde ise çok az geriye dönüşe izin verilir. Yazılım Mimarisi Modelleri 3. Artımlı Model 3. Yazılım geliştirme süreci yine doğrusaldır. Çok az geriye dönüşe izin verilir. Bu nedenle kullanıcı istekleri daha iyi çözümlenir. Yazılım Mimarisi Modelleri 3. Artımlı Model Artımlı modelde (incremental model), kullanıcı istekleri aşamalı olarak karşılanacak şekilde birkaç yazılım ortaya konur ve gerçekleştirilir. Genellikle aşama sayıcı 5 ile 25 arasındadır. Bu modelin özellikleri; 1. Ara yazılımlar, kullanıcı tarafından kullanılabilir. 2. Ara yazılımın başarısı, nihai yazılımın başarısını da arttırır. 3. Yazılım açık mimaride ya da herkesin anlayacağı yapıda geliştirilmelidir. 4. Az sayıda ara yazılım çok sayıda düzeltme işlemini, çok sayıda ara yazılım az sayıda düzeltme işlemini doğurur. 5. Yazılımların çok olması bakım işlemini zorlaştırır. 3 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri 3. Artımlı Model Yazılım Mimarisi Modelleri 3. Artımlı Model Bu modelin üstünlükleri; Bu modelin zayıf tarafları; 1. Her bir ara yazılımda kullanıcı istekleri daha düzgün tahlil edilmiş ve yerine getirilmiş olunur. 1. Ek işlevleri yerine getiren yeni yazılım, bir öncekinin karşıladığı tüm işlevleri yerine getirmek zorundadır. 2. Yazılımın birbiriyle ilgisiz olan parçaları bağımsız geliştirildiğinden daha hızlı yazılım geliştirilmiş olunur. 2. Yazılım açık mimaride hazırlanmalıdır. Bu iyi bir şeydir ancak bakımı oldukça zordur. 3. Kullanıcılar, yazılım geliştirilirken, yazılımı kullandığından daha az direnç ile karşılaşılır. 3. Her yeni sürüm çıktığında, bileşen ara yüzleri ve bileşenler arasındaki bağımlılıklardan dolayı yeni düzeltmeler ortaya çıkabilecektir. 4. Yazılım kısmi olarak yapıldığından, projeye başlamak için çok fazla maliyet gerekmez. 5. Kullanıcı isteklerinin etkilemeyebilir. değişmesi, yazılımın tümünü Yazılım Mimarisi Modelleri 4. Sarmal Model Sarmal modelde (spiral model) kısa yaşam zamanlarına sahip döngüler ile yazılım geliştirme tamamlanır. Her bir döngü sonunda yazılımın yeni bir uyarlaması (version) hayata geçirilir. Amaç risklerin minimize edilmesidir. Her bir döngüde riskler (% olarak) ve bu riskler karşısında sistemin ne kadar etkileneceği (impact: 0-hiç,5-ölümcül) irdelenir. Proje, önemli risklerin bertaraf edilmesiyle sonlanır. Yazılım Mimarisi Modelleri 4. Sarmal Model 4 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri 4. Sarmal Model Bu modelin üstünlükleri; 1. Herhangi bir döngü sonunda elde edilen yazılımın yeniden kullanımı mümkündür. 2. Bakım bir başka döngüdür. 3. Yazılım geliştiren takım (team), her bir döngünün tüm aşamalarında (analiz, tasarım, kodlama ve test) yer alır. Yazılım Mimarisi Modelleri 4. Sarmal Model 5. Yazılımın her bir uyarlamasında ortaya çıkan veya giderilen problemler göz önüne alınarak risklerin önceden tespit edilmesi sağlanmış olur. 6. Zorluk derecelerine göre iş bölümlemesi yapılması sağlanır. 7. Teknolojideki değişiklikler kolayca yazılıma dâhil edilebilir. 4. Yazılımı talep eden kullanıcıdan alınan fikirler doğrultusunda geliştirilen uyarlama, daha sonraki uyarlamalarda çıkabilecek potansiyel problemler hakkında müşteriye fikir verir. 8. Yazılımın yeni sürümün çıkması takımdaki morali yükseltir. Yazılım Mimarisi Modelleri 4. Sarmal Model Yazılım Mimarisi Modelleri 4. Sarmal Model Bu modelin zayıf tarafları: 1. Çok fazla risk analizi maliyeti arttırır. Ayrıca risk analizi, geliştirmede çalışanların üzerinde fazladan yük olur. 2. Yazılım geliştirme süreci genellikle Hızlı Uygulama Geliştirme (RAD-Rapid Application Development) araçları ile yapıldığından, birkaç sürüm sonunda ortaya çıkan yazılımın birçok açığı ortaya çıkabilecektir. 9. Sistemin ne kadarının gerçekleştirilebildiğini gösteren proje durumu, daha doğru olarak tanımlanır. 3. Yönetilmesi oldukça güç olan bir yazılım geliştirme süreci ile karşı karşıya kalınacaktır. Şelale modelinde, Gantt Diyagramı (Gantt Chart) gibi yöntemler ile proje yönetimi yapılabilmesine rağmen, Spiral model için başka yöntemlere ihtiyaç duyulmaktadır. 4. Bu model daha çok geniş ölçekli ve kurumun iç ileriyle ilgili yazılım projelerinde kullanışlı olmaktadır. 5 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri 5. Aşırı Programlama Modeli Aşırı programlama modeli (XP model-eXtreme Programming model), yazılım geliştirme süreci ile daha önce denenmiş olumlu çözümler (best practice) ve kazanılan yazılım kültürünü birleştiren bir modeldir. Yazılım Mimarisi Modelleri 5. Aşırı Programlama Modeli Bu modelin amacı, yazılımın başarısını arttırmak ya da riskleri azaltmak için daha önce yaşanmış başarılı örnekleri kullanıp, yazılımdan beklenenleri karşılamayı en üst düzeyde tutmaktır. Bu modelin üstünlükleri; 1. Kullanıcı isteklerinin değiştiği ya da belirsiz olduğu durumlarda kullanışlıdır. 2. Yazılım ekibi ile iletişimi kolaylaştırır. 3. Yazılımcılar neyi ne zaman teslim edeceğini bilir. Yazılım Mimarisi Modelleri 5. Aşırı Programlama Modeli Bu model, kurum kültürüne, olumlu çözümleri ekleyerek kurumun yazılımı kabul etmesini kolaylaştırır. Testlerin üzerinde daha çok durulur. Artımlı ve yinelemelidir. Sürüm planlaması ve yeni döngü planlamasına sahiptir. Daha önce oluşmuş başarılı örnekler, UML olarak gösterilir. Yazılım Mimarisi Modelleri 5. Aşırı Programlama Modeli 6 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri 5. Aşırı Programlama Modeli Yazılım Mimarisi Modelleri 6.USDP Modeli Bu modelin zayıf yönleri; 1. Küçük yazılımlar geliştirilebilir. Başarılı bir örnek olay yok ise çözüm çok geç gelebilir. 2. Sistemin geneline ilişkin bir dokümantasyon çıkarma işini zorlaştırır. 3. Sistemin geneline ilişkin iş süreçlerinin gözden geçirilmesini zorlaştırır. 4. Yazılımcılar hep birlikte çalışma zorundadır. Ya da aynı fiziki yerde bulunmak zorundadır. USDP (Unified Software Development Process) olarak adlandırılan bu model, UML dilini esas alan bir modeldir. Bu model, use-case’ler üzerine kuruludur. Mimariyi ön planda tutan, artımlı ve yinelemeli bir yaklaşımla projeler gerçekleştirilir. Bu model, spiral modelin genişletilmiş bir halidir. Yani Spiral modeldeki döngü adedinin belirlenmesi nihai yazılıma nasıl ulaşılacağına ilişkin genel bir çerçeveyi ortaya koyar. Bu çerçeve yöntem, yinelemelerden oluşan dört ana safhadan oluşur. 5. Güçlü bir takım liderine ihtiyaç duyulur. 6. Küçük projeleri, kullanılmaktadır. küçük bir ekiple Yazılım Mimarisi Modelleri 6.USDP Modeli hayata geçirmek için Yazılım Mimarisi Modelleri 6.USDP Modeli Bu çerçeve yöntem, yinelemelerden oluşan dört ana safhadan oluşur. Bunlar; Algılama (inception), Somutlaştırma (elaboration), İmalat (construction), Geçiş (transition) aşamalarıdır. 7 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri 6.USDP Modeli Bu safhalar Şelale karıştırılmamalıdır. modelindeki Yazılım Mimarisi Modelleri 6.USDP Modeli aşamalar ile Bu model, UP (Unified Process), RUP (Rational Unified Process), Nesneye Dayalı (object oriented) veya Artımlı Yinelemeli Çerçeve (Iterative, Incremental Framework) model olarak da bilinir. Modelde her bir yineleme için disiplinler altında gösterilen her bir model, gözden geçirilip yenilenir. Yazılım Mimarisi Modelleri 6.USDP Modeli Bu modelin avantajları; 1. İş modelleme, yazılım örüntüleri (design pattern) gibi birçok alt modeli vardır. 2. Yazılımı diyagramlarla kullanıcıya gösterir. Kullanıcı yazılımın ne yapacağını görür. 3. Yazılımda yapılacak değişiklikler kayıt altına alınır. 4. Yazılımın, her döngüdeki test aşaması ile, kalitesi arttırılmış olur. Yazılım Mimarisi Modelleri 7.Microsoft Solutions Framework Modeli MSF modeli, Şelale modeli ile Spiral modelinin güçlü taraflarının bir araya getiren bir modeldir. Gerçekte altı adet alt modeli vardır. 2. Maliyeti azaltmak için yeniden kullanılabilir (reusable) bileşenlerle çalışılmak zorundadır. Bunlar; Kurumsal Mimari (Enterprise Architecture), 3. Takım (Team), Süreç (Process), Risk Yönetimi (Risk Management), Tasarım Süreci (Design Process), Uygulama (Application) modelleridir. Bunların yanında dezavantajları da vardır; 1. Sıkı çalışan bir ekip gerektirir. Aksi halde işlerin gecikmesi olasıdır. Başlangıç algılama (inception) çok kritiktir. 4. Kurum, nasıl bir yazılım alacağını detaylarına kadar bilmektedir. 5. Bu model bir kurumun iş süreçlerinin tamamının elektronik ortama taşınacağı projelerde daha çok başarılı olmaktadır. 8 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri Yazılım Mimarisi Modelleri 7.Microsoft Solutions Framework Modeli 7.Microsoft Solutions Framework Modeli Bu modelde üç çerçeve ön plana çıkar. Birinci çerçeve olan MRF (Microsoft Readiness Framework) sayeyinde, proje veya benzer projeler hakkında yukarıda verilen altı model için bilgi sahibi olunur. İkinci çerçeve MSF (Microsoft Solutions Framework) sayesinde, proje planlanır ve yapılır. Üçüncü çerçeve olan MOF (Microsoft Operations Framework) ile geliştirlen projenin yönetimini sağlanır. Bu modelde uyarlamalar kullanıcıya verilerek kullandırılır. Yazılım Mimarisi Modelleri Yazılım Mimarisi Modelleri 7.Microsoft Solutions Framework Modeli 7.Microsoft Solutions Framework Modeli Ortaya çıkan ilk uyarlama, daha önceki tecrübelerin anlatıldığı çerçeveler üzerinden yapıldığından, büyük bir oranda çalışacak ve kullanılacaktır. Zaman içinde ortaya çıkan hatalar ve istekler değerlendirilerek yeni sürümler ortaya konur. Yeni sürüm çıkarılırken kazanılan deneyimler, ilgili çerçevelerde yenilenir. Windows NT4, Windows 2000, Windows XP işletim sistemlerinin geliştirilmesinde kullanılmıştır. Artımlı modelin geliştirilmiş hali olan bu model, küçük takımların paralel çalışması ve her gün yapılan çalışmaların paylaşılması üzerine kurulmuştur. Paylaşılan deneyimler çerçeveler üzerinde güncellenir. 9 10.11.2015 Yazılım Mimarileri - BP1047 Yazılım Mimarisi Modelleri Yazılım Mimarisi Modelleri 7.Microsoft Solutions Framework Modeli 7.Microsoft Solutions Framework Modeli 1. Ayrıca sarmal (spiral) modelin güçlü yönlerini ortaya çıkaran bir çalışma anlayışı vardır. Sarmalın her bir döngüsünde; Kurgulama (envisioning phase), 2. Planlama (planning phase), 3. Geliştirme (developing phase), 4. Kararlı hale getirme (stabiling phase), 5. Gerekli olursa tekrar Yineleme (iteration) bulunur. Yazılım Mimarisi Modelleri Yazılım Mimarisi Modelleri 7.Microsoft Solutions Framework Modeli 7.Microsoft Solutions Framework Modeli Bu modelin üstünlükleri; 1. Zengin bir modeldir. 1. 2. Bileşenler her zaman birbirleriyle çalışır. 3. Önceden yazılımın ne yapacağı görülebilir. 2. Yeni değildir ve yeni yazılımcının bu modeli anlaması zaman almaktadır. 4. Yazılımın sıkça derlenmesi kaliteyi arttırır. 3. 5. Değişiklikler kayıt altına alınır. 6. Başlangıç koşulları değişse bile bu model kullanılabilir. Bu modelin dezavantajları; Oldukça karmaşıktır. Yazılım ekibinin çok güçlü olmasını gerektirir. Bu model, Microsoft gibi, çok fazla sayıda takım ile kurumsal yazılım geliştirmede kullanılır. 10 10.11.2015 Yazılım Mimarileri - BP1047 MODEL Klasik Derle ve Düzelt (Build-and-Fix) Şelale Modeli GÜÇLÜ YÖNLER Bakım Gerektirmeyen küçük yazılımlar için idealdir. ZAYIF YÖNLER Önemli yazılımlarda tercih edilmez. Projede bir disiplin vardır. Proje dokümantasyona bağlı olarak yürür. Hızlı Prototip Modeli Ortaya çıkan yazılımın, kullanıcı isteklerini karşılama oranı yüksektir. Ortaya çıkan yazılım, kullanıcı isteklerini karşılayamayabilir. Artımlı Model Yazılımdan hızlıca cevap alınmaya başlar. Bakımı kolaylaştırır. Aşırı Programlama Yazılımdan hızlıca cevap alınmaya başlar. Kullanıcı isteklerinin belirsiz ya da değişken olması projeyi etkilemez Yazılım, açık mimaride hazırlanmalıdır. Yeni eklentilerle ortaya çıkacak yeni sürüm, eski sürümlere bağımlıdır. İstenmeyen durumlar ortaya çıkabilir. Küçük projeler ve küçük takımlara uygundur. Tasarım dokümanı zayıftır. Herkes tarafından kabul edilen yaygın Kullanıcı ihtiyaçlarını karşılayıp karşılamadığı tam olarak detaylı olarak incelenmelidir. Proje büyüdükçe daha karmaşık hale gelir. 11