Cephe Yönelimli Programlama (Aspect Oriented Programming)

Eyl 08, 2013

Cepheye Yönelik Programlama (Aspect-Oriented Programming (AOP)) Xerox PARC tarafından 1990 yıllarında bulunmuş olup, kod geliştiricilere matematiksel işlemler ve kural dışı durumlar gibi içinden çıkılamaz şekilde karışık işleri en iyi şekilde ayırma imkanı sağlayan bir modeldir. Cepheye Yönelik Programlama tamamen yepyeni bir buluş olmayıp, günümüzdeki yazılım geliştirme gereksinimlerini daha modüler karşılayan bir yöntemdir. AOP programcılar açısından bakıldığında çok yararlı bir teknik oldugunu söyleyenebilir. Şöyle ki, bu yöntem farklı ve birbirinden bağımsız diğer tüm yöntemlerin iyi özelliklerini içeren bir özet oluşturmaktadır.

Cepheye Yönelik Programlamanın Yararları

  • Cepheye Yönelik Programlama'da kullanılan işlemlerin (operations) veya kodların diğer yöntemlere göre daha az ve daha öz olması nedeniyle bu yöntemin diğerlerine göre daha performanslı ve daha başarılı olduğu gözlemlenmiştir.
     
  • Bu yöntem ile bir programda az kodla çok iş yapılabilmekte ve aynı kodu tekrar tekrar yazarken çok fazla kolaylık sağlamaktadır. İşte bu özelliği sayesinde programlama yaparken programcılar tarafından harcanılan sürenin kısalmasını, yani zamandan tasarruf sağlamaktadır.

  • Cepheye Yönelik Programlama ile tasarlanması, anlaşılması ve güncellenmesi çok daha kolay programlar oluşturulabilir. Bu özellik ortak yapılan iş veya projelerin takibinde ya da bir başkası tarafından oluşturulmuş bir projenin devamını getirecek olan programcılara birçok kolaylık sağlar.

  • Bu yöntemin yeni özellikleri ve performansı üretkenliğin ve kalitenin artmasını sağlamaktadır, bunun yanında görselliğe de önem vererek ilgi çekici ürünler geliştirilmesine katkıda bulunur.

Cepheye Yönelik Programlama (AOP) ile Nesneye Yönelik Programlama (OOP) Arasındaki Benzerlikler ve Farklılıklar

Cepheye Yönelik Programlama (AOP) temel olarak Nesneye Yönelimli Programlama (Object Oriented Programming (OOP))’dan farklı olsa da aslında gereksinimler sonucu oluşan yeni özellikleriyle onu tamamlayıcı niteliktedir. Yani sanıldığı gibi OOP’nin yerini alacak bir sistem değildir. AOP’nin Nesneye Yönelimli Programlama’dan temel farkı ise cephe (aspect) denilen üniteler tanımlayarak birimselliği sağlamasıdır.

Aynı gerçek hayattaki nesnelerin yaşam döngüleri boyunca şekillerini değiştirebilmeleri gibi, bir uygulama da gelişim süresi boyunca yeni nitelikleri benimseyebilir. İşte AOP, uygulamaların statik OOP modelini dinamik olarak değiştirebilme imkânı sağlayarak yeni gereksinimleri karşılayabilen bir sistem yaratır. 

AOP teknolojisi bir projenin ikincil derece (secondary) gereksinimlerini karşılayan kodları içermesi için statik modeli dinamikleştirmeyi sağlar. Bunu projenin özgün statik modelini değiştirmeden sadece gerekli kodları ekleyerek yapar; çünkü aslında özgün (orjinal) kodlara ihtiyaç yoktur. Nesne Yönelimli Programlama kullanılırsa o eklenmiş kodların var olan modelin her yerine yayılması gerekir; fakat AOP o kodları tek bir alanda tutarak bu işlemi çok daha basit bir şekilde gerçekleştirmiş olur.

Örneğin: Başlangıç ve bitiş noktasından oluşan bir Doğru ve x, y koordinatlarından oluşan Nokta sınıfları üzerinde çalıştığımızı düşünelim. Nokta ve Doğru sınıfları kendisine yönelik işlemleri yönetmekle beraber nesne yönelim prensiplerine uygun olarak izleme ve loglama işlemlerini de gerçekleştirsin. Bu durumda oluşacak tasarım aşağıdaki gibi olur.

Loglama ve Izleme işlemlerinin sınıflara eklenmesi yazılım gereksinimlerini karşılamakta ancak bizi iyi bir tasarımdan uzaklaştırmaktadır; çünkü Nokta ve Dogru sınıfları gerçek ilgilerine yönelik işlemlerden oldukça uzaklaşmış, sınıflar arası bağımlılık artmıştır. Loglama ve Izleme sınıflarında yapılan değişikliklerden bütün sınıflar etkilenecek ve her bir yöntemin tekrar gözden geçirilmesi gerekecektir.

Yukarıdaki örnek sistemin cephe yönelimli yaklaşımla gerçeklenmesi durumunda ise aşağıdaki yapı oluşur.  

LogAspect  ve IzlemeAspect ilgileri Nokta ve Dogru sınıflarından kullanmak istediği yordamları belirli durumlar oluştuğunda yakalayıp bağlı olduğu sınıfın ilgili işlemlerini yürütecek yordamları tetikleyecektir. Geliştirme sürecinde birbirinden ayrı olarak gözüken bu yapılar daha sonra örme (weaving) denen işlemle bütünleştirilir. 

Nesneye Yönelimli Programlama'nın ihtiyaçları doğrultusunda gelişen Cepheye Yönelimli Programlama OOP'nin yerini almak için değil, tam aksine OOP'nin eksik kaldığı noktaları tamamlamak için gelişmiştir. Bu yöntem temel olarak cephe adı verilen üniteleri içererek birimselliği sağlamış ve programcılara daha performanslı, daha anlaşılır projeler geliştirme imkanı sağlamıştır. Ayrıca projelerin aktarımı ve devamı açısından bakıldığında da daha anlaşılır ve güncellenmesi daha basit programlar oluşturulabildiği gözlenmiştir.