Soyutlama Seviyemizi Arttırmak
Yazılım geliştirmedeki çoğu ilerlemelerin temel amacını şu şekilde özetleyebiliriz:
Üzerinde programlama yaptığımız "makinenin" dilinden olabildiğince uzaklaşıp müşterinin-kullanıcının problem uzayında-iş alanında kullandığı dile yaklaşmak .

Model Güdümlü Geliştirme ( Model Driven Development - MDD - )

MDD programlama dillerindeki mevcut soyutlama seviyesini arttırak,çözümün bizzat problem uzayındaki kavramlarla-modellerle ifade edilebilmesini amaçlamaktadır. Daha sonra nihai ürün (çalışır yazılım) bu yüksek seviyeli tanımlamardan otomatik-yarı otomatik olarak oluşturulmaktadır.

MDD yaklaşımında "modeller" sistem geliştirmede başlı başına bir değer haline gelmektedir: kaynak "kodlar" (source code) yerine, kaynak "modellerimiz" (source model) var.

Bir MDD uygulaması olarak MDA (Model Driven Architecture)
MDA'yı kısaca OMG'nin (http://www.omg.org/) MDD için oluşturduğu bir standard olarak görebiliriz.

MDA'nin Temel Bileşenleri -> MDA'daki Modeller
MDA 3 ana model tanımlamaktadır
- The Computation Independent Model (CIM) : Sistemin görünür davranışının-işlevinin, sistemin iç yapısından bağımsız olarak( sistemin bunu nasıl yerine getireceğinden) tanımlandığı modeldir.
- Platform Independent Model (PIM) : Sistemin nasıl oluşturulacağını "gerçekleme" detaylarına girmeden tanımlayan modeldir.
- Platform Specific Model (PSM) : Sisteme ait PIM modelini alır ve bunun belirli bir "platformda" nasıl gerçekleştirileceğini detaylandırır.
MDA'nın Temel Süreç Akışı
Teorikte MDA süreci iş analistinin CIM modelini oluşturmasıyla(son kullanıcıların işbirliği ile) başlar.Bu model daha sonra bir Enterprise Architect tarafından PIM modeline dönüştürülür.Daha sonra sürecin tamamlanması için (çalıştırılabilir bir sistem oluşturmak için) PIM modeli bir "platform" uzmanı tarafından PSM'e çevrilir.

Farklı bir MDD Yaklaşımı : DSM ( Domain-Specific Modeling ) ve DSL (Domain Specific Language)

DSM oluşturulan modellerden doğrudan çalışır kod elde etmeyi hedefleyen bir yaklaşımdır. Bunu gerçekleşebilmek için modelleme dilini ve dönüştürücülerini belirli bir iş alanı-problem uzayı ile sınırlandır.( Genel modelleme dili ve dönüştürüceleri oluşturmanın başarısız olacağını varsayar).
DSM'nin Temel Varsayımı
Bir çok yazılım problemi, özel- amaçlı (special-purpose language) dillerin tasarlanmasıyla kolayca çözülebilir.Bu varsayımı daha ileri taşırsak :bir sistem birden fazla belirli bir alana özgü dilin (DSL- Domain Specific Language) kullanılmasıyla daha rahat tasarlanabilir. (çoğumuzun sıklıkla kullandığı SQL aslında ilişkişisel veri tabanları için oluşturulmuş bir DSL olarak görülebilir.)
Her iki yöntemin (MDA ve DSM) Ortak Özellikleri :
- Uygulamaya-İş Alanına-Problem uzayına ait kavramlarla geliştirme yapmak
- Bu kavramlardan-yapılardan çalıştırılabilir sistemin oluşturulmasını olabildiğince "otomatize" etmek.
Her iki yöntemin (MDA ve DSM) Farkları :
- -OMG'min MDA ile ulaşmak istediği "faztazi" aynı PIM Modelini farklı yazılım platformlarında kullanabilmek: bunu sağlamak içinde tüm çevrim(translations) ve model formatlarını standart hale getirmek böylece modellerin farklı üreticilerin sağladığı araçlarda kullanılabilmesini(portable)sağlamak. Not: İş modeli değişmedi halde teknolojinin değişmesi nedeniyle sistemlerini yeni teknolojiye geçirmek isteyen ve bu nedenle ciddi sıkıntılar yaşayan bir çok kuruluş var günümüzde.
- DSM temel odağı platfordan bağımsız modeller oluşturmaktan ziyade, sağlanan üst seviye soyutlamalar yardımıyla bizzat geliştiricinin verimliliğini arttırmaktır.
Mevcut Durum
İdeal bir MDA ortamında tüm sistemin çalıştırılabilir eksiksiz bir modeli oluşturulur(Grafiksel, metinsel veya her ilikisinin karışımı olan bir modellemel dili yardımı ile), daha sonra bu modelden kod otomatik olarak oluşturulur.Fakat oluşturulan bu kod geliştiriciler tarafından görülmez veya değiştirilmez. Yapılacak her şey (test,refactoring, debug hatta versiyon kontrol vb) bu üst seviyedeki modelleme dili üzerinden yapılır. MDA hem teorik, hem araç desteği, hemde kullanılabilirlik açılarından hala gelişme aşamasındadır: hala olgunluğa ulaşamamıştır.MDA yaklaşımı özellikle OMG ve IBM tarafından desteklenmektedir.
DSL'lerin kullanımı ise pratikte belirli-kısıtlı problem alanlarında çok faydalı olmakla bereber, bu alan çok fazla genişletildiğinde DSL'lerin diğer genel amaçlı programlama dillerinden bir farkı kalmamaktadır.DLS'lerin oluşturulması son zamanlarda çıkan geliştirme araçları sayesinde nispeten daha kolay hale gelmiştir.DSL yaklaşımı daha çok Microsoft tarafında popüler olan bir yaklaşım.
Gerçekler
Model ve bundan üretilen kodlar "Farklı Dünyalara" ait. Dolayısıyla Modelleme ve Programlama araçları da ""Farklı Dünyalara" ait.Teorikte üst seviye modeller ve onlara ait araçlarla uğraşmamız gerekirken pratikte kendimizi Model + Kod melezi olan ortmalarla uğraşırken buluyoruz.( şimdilik).Her ikisini iyi bir şekilde entegre ettiğini söyleyen araçlar "vaadlerini" yerine getirmekten uzaklar.
Soyutlama seviyemizi arttırırken, -bunun yan etkisi olarak- modelleme dilimizi ve model dönüştürücülerimizi belirli-sınırlı alanlara özgü yapmak zorunda kalıyoruz. Belirli bir uygulama alanına odaklanmadan "çalışır kod üretimi" gerçekleştirmek çok da gerçekci gözükmüyor.(en azından şimdilik). MDE yaklaşımında pratikte nasıl iteratif bir şekilde çalışılacak? Rol dağılımları nasıl olacak? yine cevaplanması gereken sorulardan.
Gelecek ve Farklı Bir Bakış Açısı
Son zamanlarda Language Oriented Programming kavramı ortaya atılmıştır: Bir sistemi geliştirirken DSL'lerin oluşturulmasına ve kullanılmasına odaklanan yazılım geliştirme sitili. Martin Fowler Language-Oriented Programming kavramı için ihtiyaç duyulan araç desteğini tanımlamak için Language Workbench tanımını ortaya atmıştır:( Bakınız : Language Workbenches: The Killer-App for Domain Specific Languages?http://martinfowler.com/articles/languageWorkbench.html)
Hamiş:
İlginizi çekebilecek bazı araçlar