Yazilim projeleri maliyet tahmini ve cocomo modeli
Aspect Oriented Programming (İlgiye Yönelik Programlama)
1. Erhan BURHAN www.eburhan.com 29 Aralık 2010 - ÇOMÜ ? Yazılım MühendisliğiAspect OrientedProgramming(ilgiye yönelik programlama)
2. Bölümler… 1 / 45 Bölüm 1: AOP’nin Tanıtılması Bölüm 2: İlgiler ve İgilerin Ayrıştırılması Bölüm 3: Aspect, Join Point, Pointcut Bölüm 4: AspectJ ile küçük bir uygulama Bölüm 5: Soru & Cevap
4. 1. AOP’nin Tanıtılması 3 / 45 Bu bölüm altındaki ana başlıklar: Yeniden Kullanım (reuse) Problemi AOSE ve Aspect kavramı Aspect’lerin önemliliği AOP ve OOP ilişkisi Bu bölümde Aspect’leri ve Aspect-Yönelimli Programlama yaklaşımını tanıyacağız. Bu yaklaşımın, yazılımlardaki hangi sorunlara ne gibi çözümler getirdiğini göreceğiz
5. 1.1. Yeniden Kullanım (reuse) Problemi 4 / 45 Gereksinimler ve Program Bileşenleri arasındaki ilişkiler çok karmaşıktır (complex) Bir gereksinim birden fazla bileşen tarafından sağlanabilir. Bir bileşen ise birden fazla gereksinimi sağlıyor olabilir. Bileşen Gereksinim n m Gereksinimlerde değişiklik yapılmak istenirse?- birkaç bileşeni birden anlamak ve değiştirmek gerekir. Bir bileşen hem çekirdek fonksiyonu hem de sistem fonksiyonu yerine getiriyorsa?- gereksinimlerde değişiklik yapmak çok masraflı bir hale dönüşmeye başlar- bileşenlerin yeniden kullanımı istenilen düzeyde gerçekleştirilemez
6.
7.
8. nesneler ve metotlar gibi diğer soyutlamalarla bir arada kullanılırlarAspect Yönelimli bir bilgisayar programıkaynak kodda yer alan tanımlamara göre nesnelerin, metotların ve aspect’lerin otomatik olarak birleştirilmesi ile yani dokunması (weaving) ile oluşturulur.
12. herhangi bir özelliğe (attribute) erişildiği zaman yerleştirilmesi gerektiğinibelirtebilirsiniz. Aspect-Oriented yaklaşımının en önemli faydası ilgilerin (concerns) ayrıştırılmasına imkan sağlamasıdır ilgilerin bağımsız elemanlar olarak ayrıştırılması , aynı mantıksal soyutlama içerisinde yer almasından çok daha iyi bir yazılım mühendisliği yaklaşımıdır.
13.
14. ilgileri daha kolay ve hızlı bir şekilde anlayabiliriz
15. diğer ilgilerden bağımsız bir şekilde değiştirebilirizÖrneğinkullanıcı kimlik kontrolünü, bir kullanıcı adı ve parolası isteyen bir aspect olarak ifade edebiliriz. Böylelikle kimlik kontrolünün gerekli olduğu yerlerde bu aspect, program içerisine otomatik olarak örülür, dokunur. Aspectkimlik_kontrolü(); Metod kimlik_kontrolü(); Metod kisiyi_guncelle(); Metod kisiyi_guncelle(); Metod yeni_kisi_yarat();
18. OOP’nin yerini almak için değil, OOP’yi genişleterek geliştirmek içindirlergrafik kaynak: http://www.slideshare.net/wcandillon/aspectoriented-programming-for-php
19. 10 / 45 ~ BÖLÜM 2 ~ İlgiler ve İlgilerin Ayrıştırılması
20. 2. İlgiler ve İlgilerin Ayrıştırılması 11 / 45 Bu bölüm altındaki ana başlıklar: İlgilerin Ayrıştırılması nedir, ne faydası var? İlgiler ve ilgi türleri Çekirdek ilgiler & Enine-Kesen ilgiler Tangling (karışıklık) & Scattering (saçılma) Bu bölümde “ilgi” kavramını, ilgiler ayrıştırıldığında ve ayrıştırılmadığında yazılımlarda ne gibi sorunlar meydana gelebileceğini örneklerle birlikte göreceğiz.
21.
22.
23. diğer elemanları anlamaya gerek kalmaksızın, herbir program parçasını anlayabiliriz
24.
25. bazı müşteriler için performans sadece bir ayrıntıdan ibaret olabilir
26. sistemi destekleyen firmalar için kolay gerçeklenebilir bir şey olarak görülebilirBu örnekten de görülebileceği üzere ilgi, bir hak sahibinin veya hak sahibi grubunun ilgilendiği veya önem verdiği şey olarak kısaca tanımlanabilir. Hak sahiplerinin önceliğine göre farklı ilgi türleri: Fonksiyonel ilgiler (tren kontrol sisteminde “trenin frenlenmesi”) Hizmet Kalitesi ilgileri (performans, emniyet, kullanılabilirlik) Plan/Politika ilgileri (iş kuralları) Sistem ilgileri (bakım yapılabilirlik ve yapılandırılabilirlik) Kurumsal ilgiler (firmanın hedefleri ve öncelikleri)
30. hasta kayıtlarının yönetimiBirçok sistemde ikincil ilgiler de vardır. İkincil ilgiler: - çekirdek ilgilerle bilgi paylaşan fonksiyonları içerebilirler - fonksiyonel olmayan gereksinimleri karşılıyor olabilirler Bunları çekirdek ilgilerden ayırt etmek için Enine-Kesen ilgiler olarak isimlendiriyoruz.
31.
32. Tüketici süreç, paylaşımlı tampondan bir veri çeker- Üretici süreç, tüketilmeden veri yazamamalıdır
33. Tüketici süreç, tampon boş ise veri çekmeye çalışmamalıdır
34. Her iki süreç de tampon alanına eş zamanlı (senkron) olarak erişmelidirBu sistemdeki çekirdek ilgi, tampona veri eklenmesi ve tampondan veri silinmesidir. Üretici ve tüketici süreçlerin birbirleriyle çakışmaması için bu sistem , ikincil bir ilgi olan senkronizasyon ilgisini de sunmak zorundadır. Bu da enine-kesen ilgi olarak ifade edilir.
35. 2.4. Tangling (karışıklık) & Scattering (saçılma) 16 / 45 Programlama dillerindeki soyutlamalar (sınıflar, fonksiyonlar v.s) çoğunlukla bir sistemin çekirdek ilgilerini planlamak ve organize etmek amacıyla kullanılan mekanizmalardır. Fakat geleneksel programlama dillerinde çekirdek ilgilerin gerçekleştirimi, genellikle enine-kesen ilgileri de gerçekleştiren ilâve kod içerir. Bu durum 2 sakıncalı durumun oluşmasına neden olur: tangling (karışıklık) scattering (saçılma, dağılma, yayılma) Tangling, sistem içerisindeki bir bileşen, farklı sistem gereksinimlerini gerçekleştiren kodu daiçerisine aldığı zaman meydana gelir. Scattering, bir veya daha fazla gereksinimin gerçekleştirimi , program içerisindeki çeşitli bileşenler arasına dağıldığı zaman meydana gelir.
36. 2.4. Tangling (karışıklık) & Scattering (saçılma) 17 / 45 Şekil 2 :tanglingörneği Birincil ilgiyi gerçekleştiren kod (tampona veri eklenmesi) ile ikincil ilgiyi gerçekleştiren senkronizasyon kodu birbiriyle iç içe girmiş, karışmış (tangling meydana gelmiş). Senkronizasyon kodu, paylaşımlı tampona erişim sağlayan tüm metotlar içerisine tek tek elle dahil edilmek zorundadır.
37. 2.4. Tangling (karışıklık) & Scattering (saçılma) 18 / 45 Şekil 3:scatteringörneği gri: enine-kesenkırmızı: saçılmış bir Hastane Kayıt Yönetimi Sistemi içindeki örnek 3 bileşen: Hasta, Film, Muayene Sistemin birincil ilgisi; hasta, muayene, ilâç, teşhis, tedavi vs. yönetimidir.Sistemin, istatistiksel bilgiler sağlamak gibi ikincil bir görevi daha var. Hastanın gizliliği için tıbbî veriler, veritabanına kaydedilmeden önce anonimleştirilmeli. Anonimleştirme metodu birkaç bileşene birden saçılmış, dağılmış (scattering oluşmuş).
38.
39.
40. yapılacak değişiklikler birden fazla ise hata yapma olasılığınız artarSonuç olarak;Değişikliklerden sonra istatistiki bilgilerin hatalı olmayacağını garanti edemezsiniz.
41. 20 / 45 ~ BÖLÜM 3 ~ Aspect, Join Point, Pointcut
42. 3. Aspect, Join Point, Pointcut 21 / 45 Bu bölüm altındaki ana başlıklar: Örnek bir Hastane Bilgi Sistemi senaryosu Enine-Kesen ilgilerin Aspect olarak ifade edilmesi Pointcut ve Advice kavramları Join Point ve Join Point kavramları Aspect dokuyucuları (weavers) Bu bölümde, aspect-yönelimli yazılım geliştirimi ile alâkalı en önemli kavramlar tanıtılacak. Hastane Bilgi Sistemi içerisinden örnekler verilerek kavramlar açıklanmaya çalışılacak. Aspect-Yönelimli programlamanın teknik detayları da ele alınacaktır.
43.
44. 3.1. Örnek bir Hastane Bilgi Sistemi senaryosu 23 / 45 Yeni gereksinimi gerçekleştirmenin bir yolu, kimlik doğrulama ve loglama kodlarını alıp herbir bileşendeki güncelleme metotlarına (“update” ile başlayan) tek tek eklemektir. Alternatif olarak, sistem öyle bir değiştirilmelidir ki her güncelleme metodu çağrısı olduğunda ilk önce kimlik doğrulama çağrısı, daha sonra da loglama çağrısı yapılsın. Fakat bu 2 yaklaşım da iyi bir çözüm değildir: İlk yaklaşımda karışıklık (tangling) problemi oluşur. Mantıksal olarak bir veritabanını güncellemek, kişiyi sisteme doğrulatmak ve işlemleri loglamak ayrı ilgilerdir. Her zaman bu üç ilgi bir arada kullanılacak diye bir şey de yok. İkinci yaklaşım dağınık (scattering) bir gerçekleştirime yol açar. Her güncelleme çağrısından önce veya sonra kimlik doğrulama ve loglama yapan metot çağrılarını açık bir şekilde eklerseniz, bu metotlar sistemin farklı birkaç noktasına yayılmış olacaktır. Kimlik doğrulama ve Loglama, sistemin çekirdek ilgilerini enine-kesen ilgilerdir.
45. 3.2. Enine-Kesen ilgilerin Aspect olarak ifade edilmesi 24 / 45 Aspect-Yönelimli bir sistemde, enine-kesen ilgileri aspect olarak gösterebiliriz. Aspect, enine-kesen ilginin program içerisinde nereye dokunacağının tarifini ve bahsi geçen ilgiyi gerçekleştiren program kodunu içeren yeni bir soyutlamadır. Şekil 4: kimlik doğrulama ilgisi için örnek biraspect
46. 3.3. Pointcut ve Advice kavramları 25 / 45 Aspect’lerin önemli bir avantajı pointcut (kesim noktası) adı verilen kavramı içermesidir. Pointcut, aspect’in program içerisinde nereye dokunacağını tanımlayan bir ifadedir. Bu kodun anlamı, ismi “update” ile başlayan ve herhangi bir karakter dizesi ile devam eden herhangi bir metot çağrısı yapılmadan önce, aspect içerisindeki program kodunun çalıştırılması gerekliliğidir. Yıldız (*) karakteri bir jokerdir. Aspect içine yazılan ve çalıştırılacak olan asıl program kodu advice olarak adlandırılır. Advice’lar herhangi bir enine-kesen ilginin gerçekleştirimidir. Bu durumda şekil 4’teki advice, güncelleme isteği yapan kişiden bir parola alır ve o an oturumu açık olan kullanıcının parolası ile eşleştirir. Parolalar aynı değilse kullanıcı oturumu kapatılır ve güncelleme işlemi durdurulur.
47. 3.4. Join Point ve Join Point Modeli 26 / 45 Kodun nerede çalıştırılacağını belirtebilme yeteneği (pointcut’lar kullanılarak), aspect’lerin ayırt edici bir özelliğidir. Ancak pointcut’ları tam olarak anlayabilmek için Join Point yani “birleştirme noktası” isimli başka bir kavramı daha anlamamız gerekir. Join Point, programın çalışması esnasında meydana gelen bir olay (event)’dır. Bir metot çağrısı, bir değişkenin ilklendirilmesi veya bir nesne property’sinin güncellenmesi bir join point olarak olabilir. Program çalışıyorken bunlara benzer birçok olay türü oluşabilir. Join Point Modeli, aspect-yönelimli bir program içerisinde referans alınabilen olayların kümesini tanımlar. Join point modelleri standartlaşmış değildirler ve her aspect-yönelimli programlama dili kendi join point modeline sahip olabilir.
48.
49. execution events ----bir metot veya bir yapıcı çalıştırıldığında oluşur
50. initialization events ----bir sınıf veya nesne ilklendirildiğinde oluşur
51. data events ----bir alan güncellendiğinde veya erişildiğinde oluşur
52. exception events ----bir istisna meydana geldiğinde oluşurcall event Buradaki bir olayın veya olayların hangi advice ile ilişkilendirilmesi gerektiğini pointcut’lar tanımlar. Bu şu anlama gelir; desteklenen join point modeline bağlı olarak bir program içerisine, içeriği birbirinden farklı olan birçok advice dokuyabilirsiniz.
53. 3.4. Join Point ve Join Point Modeli 28 / 45 Advice Dokunma Yerleri 1 Advice; belirli bir metodun, peşi sıra listelenmiş metotların veya bir şablon ile eşleşen (update* gibi) isme sahip metotların çalıştırılmasından önce yer alabilir. 2 Advice; bir metottan geri dönen istisnadan veya değerden sonra yer alabilir. Meselâşekil 4’teki örnekte, tüm update metotlarından sonra loglama kodunu çalıştıran bir pointcut daha tanımlayabiliriz. 3 Advice; bir nesne içindeki bir property değiştirildiği zaman yer alabilir. O özelliği değiştirmek veya takibe almak için advice yerleştirebiliriz. dokunma yeri
54.
55. enine-kesen ilgilerin, final sistemin doğru yerlerinde çalışmalarını sağlarlarbir aspect dokuyucusu, ham sınıflardan ve aspect’lerden gerekli bilgileri alır. Sınıfların uygun yerlerine işlenmiş olan ve aspect kodu içeren yeni sınıflar oluşturur.
56. 3.5. Aspect dokuyucuları (weavers) 30 / 45 Şekil 5: aspect dokunma işlemi Bu diagramda, hastane bilgi sisteminde yer alan kimlik doğrulama (authentication) veişlemleri kaydetme (logging) aspect’lerinin nasıl dokunduğu gösterilmektedir.
57. 3.5. Aspect dokuyucuları (weavers) 31 / 45 Aspect dokuma işlemi için 3 farklı yaklaşım var: Kaynak kod ön-işlemedokuyucu kaynak kod girdisini alır ve Java/C++ gibi bir dilde yeni baştan bir kaynakkod oluşturur. Daha sonra standart dil derleyisi kullanılarak derleme işlemi yapılır. Bağlama zamanında dokumaderleyici, bir aspect dokuyucusu içermesi için değiştirilir. AspectJ gibi bir aspect-yönelimli dil işlenir ve standart Java bytecode oluşturulur. Daha sonra bu, Java yorumlayıcısı tarafından doğrudan çalıştırılır veya doğal makine kodu oluşturulması için başka bir işleme sokulur. Yürütme zamanında dinamik dokumaBu yaklaşımda, join point’ler takip edilir ve pointcut içerisinde referans gösterilmişolay meydana geldiği zaman ilgili advice yürütülen programa o an entegre edilir Bağlama Zamanı yaklaşımı en yaygın kullanılanıdır. Çünkü büyük bir çalışma zamanı ek yükü getirmeden aspect’lerin efektif gerçekleştirimine imkan sağlar. Dinamik dokuma en esneğidir fakat program yürütülüyorken ciddi bir performans sorunu oluşturur. Kaynak kod ön-işleme ise artık çok nadir kullanılmaktadır.
58. 32 / 45 ~ BÖLÜM 4 ~ AspectJ ile küçük bir uygulama
59. 4. AspectJ ile küçük bir uygulama 33 / 45 Bu bölüm altındaki ana başlıklar: Eclipse IDE’sine AspectJ araçlarının yüklenmesi AspectJ ile loglama uygulamasının gerçekleştirimi
60. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 34 / 45 Eclipse IDE’si ücretsiz olarak şuradan indirilebilir: http://www.eclipse.org/downloads/ AspectJ araçları ücretsiz olarak şu sayfadan indirilebilir: http://www.eclipse.org/ajdt/downloads/ NOT: AspectJ için gerekli araçları, Eclipse içerisinden kolayca yükleyebilirsiniz. Eclipse sizin yerinize herşeyi halleder.
61. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 35 / 45 AspectJ araçlarının bulunduğu sayfaya girilir ve Update Site URL kopyalanır.
62. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 36 / 45 Eclipse açılır ve HelpInstall New Sofware menüsüne girilir.
64. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 38 / 45 Add Repository penceresindeki Location kutusuna daha önceden kopyaladığımız URL yapıştırılır. Name kutusuna ise AspectJ ile ilişkili bir isim verilir ve OK butonuna tıklatılır.
73. Aspect Oriented Programming Erhan BURHAN bu sunumun hazırlanmasında Ian Sommerville tarafından kaleme alınmış olanSoftware Engineering isimli kitaptan büyük ölçüde yararlanılmıştır. 29 Aralık 2010 - ÇOMÜ