Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Erhan BURHAN<br />www.eburhan.com<br />29 Aralık 2010 - ÇOMÜ<br />?<br />Yazılım MühendisliğiAspect OrientedProgramming(il...
Bölümler…<br />1 / 45<br />Bölüm 1: AOP’nin Tanıtılması<br />Bölüm 2: İlgiler ve İgilerin Ayrıştırılması<br />Bölüm 3: Asp...
2 / 45<br />~ BÖLÜM 1 ~<br />AOP’nin Tanıtılması<br />
1. AOP’nin Tanıtılması<br />3 / 45<br />Bu bölüm altındaki ana başlıklar:<br />Yeniden Kullanım (reuse) Problemi<br />AOSE...
1.1.  Yeniden Kullanım (reuse) Problemi<br />4 / 45<br />Gereksinimler ve Program Bileşenleri arasındaki ilişkiler çok kar...
1.2.  AOSE ve Aspect kavramı<br />5 / 45<br />Aspect-Oriented Software Engineering (AOSE)<br /><ul><li>  yeniden kullanım ...
   programların daha kolay bakımının yapılabilmesini sağlar</li></ul>AOSE, bir programın farklı noktalarında gerekli olabi...
  nesneler ve metotlar gibi diğer soyutlamalarla bir arada kullanılırlar</li></ul>Aspect Yönelimli bir bilgisayar programı...
1.2.1  Enine-Kesen İlgiler<br />6 / 45<br />Şekil1:  Enine-Kesen İlgiler<br />
1.3. Aspect’lerin önemliliği<br />7 / 45<br />Aspect’lerin önemli bir karakteristiği<br /><ul><li>  program içerisinde ner...
  enine-kesen ilgiyi gerçekleştirecek olan kodu barındırırlar</li></ul>Enine-kesen ilgiyi gerçekleştirecek kodun,<br /><ul...
 herhangi bir özelliğe (attribute) erişildiği zaman yerleştirilmesi gerektiğini</li></ul>belirtebilirsiniz.<br />	Aspect-O...
1.3. Aspect’lerin önemliliği<br />8 / 45<br />Enine-Kesen ilgileri Aspect’ler olarak ifade edebiliriz. Böylece:<br /><ul><...
  ilgileri daha kolay ve hızlı bir şekilde anlayabiliriz
  diğer ilgilerden bağımsız bir şekilde değiştirebiliriz</li></ul>Örneğinkullanıcı kimlik kontrolünü,  bir kullanıcı adı v...
1.4. AOP ve OOP ilişkisi<br />9 / 45<br /><ul><li>  AspectJ, PostSharp , AspectC++ ve AspectPHP gibi programlama dilleri var
  OOP’nin çözüm getiremediği sorunlara çözüm getirmeyi amaçlamaktadırlar
  OOP’nin yerini almak için değil, OOP’yi genişleterek geliştirmek içindirler</li></ul>grafik kaynak:  http://www.slidesha...
10 / 45<br />~ BÖLÜM 2 ~<br />İlgiler ve İlgilerin Ayrıştırılması<br />
2. İlgiler ve İlgilerin Ayrıştırılması<br />11 / 45<br />Bu bölüm altındaki ana başlıklar:<br />İlgilerin Ayrıştırılması n...
2.1.  İlgilerin Ayrıştırılması nedir, ne faydası var?<br />12 / 45<br /><ul><li>  İlgilerin ayrıştırılması yeni bir konu d...
  Prosedürel Programlama ve sonrasında gelen programlama mekanizmaları (class’lar gibi),</li></ul>ilgilerin ayrıştırılabil...
  diğer elemanları anlamaya gerek kalmaksızın, herbir program parçasını anlayabiliriz
  değişiklik gerektiği zaman, değişiklikten çok az sayıda eleman etkilenmiş olacaktır</li></li></ul><li>2.2.  İlgiler ve i...
 bazı müşteriler için performans  sadece bir ayrıntıdan ibaret olabilir
 sistemi destekleyen firmalar için kolay gerçeklenebilir bir şey olarak görülebilir</li></ul>Bu örnekten de görülebileceği...
2.3.  Çekirdek ilgiler & Enine-Kesen ilgiler<br />14 / 45<br />Çekirdek (core) ilgiler<br /><ul><li>  sistemin birincil am...
  hasta kayıtlarının düzenlenmesi
  hasta kayıtlarının listelenmesi
  hasta kayıtlarının yönetimi</li></ul>Birçok sistemde ikincil ilgiler de vardır.  İkincil ilgiler:           - çekirdek i...
2.3.  Çekirdek ilgiler & Enine-Kesen ilgiler<br />15 / 45<br />paylaşımlıtampon<br />tüketici<br />üretici<br />senkroneri...
  Tüketici süreç, paylaşımlı tampondan bir veri çeker-  Üretici süreç, tüketilmeden veri yazamamalıdır
  Tüketici süreç, tampon boş ise veri çekmeye çalışmamalıdır
  Her iki süreç de tampon alanına eş zamanlı (senkron) olarak erişmelidir</li></ul>Bu sistemdeki çekirdek ilgi,  tampona v...
2.4. Tangling (karışıklık) & Scattering (saçılma)<br />16 / 45<br />Programlama dillerindeki soyutlamalar (sınıflar, fonks...
2.4. Tangling (karışıklık) & Scattering (saçılma)<br />17 / 45<br />Şekil 2 :tanglingörneği<br />Birincil ilgiyi gerçekleş...
2.4. Tangling (karışıklık) & Scattering (saçılma)<br />18 / 45<br />Şekil 3:scatteringörneği<br />gri:  enine-kesenkırmızı...
2.4. Tangling (karışıklık) & Scattering (saçılma)<br />19 / 45<br /> Tangling ve Scattering sorunları , başlangıçtaki sist...
  herbir bileşeni tek tek değiştirmek zorunda kalacaksınız</li></ul>Bileşenlerin yeniden incelenmesi, değişikliğin uygulan...
  yapılacak değişiklikler birden fazla ise hata yapma olasılığınız artar</li></ul>Sonuç olarak;Değişikliklerden sonra ista...
20 / 45<br />~ BÖLÜM 3 ~<br />Aspect, Join Point, Pointcut<br />
3. Aspect, Join Point, Pointcut<br />21 / 45<br />Bu bölüm altındaki ana başlıklar:<br />Örnek bir Hastane Bilgi Sistemi s...
3.1.  Örnek bir Hastane Bilgi Sistemi senaryosu<br />22 / 45<br />Hastadeki bilgileri işleyen ve çeşitli bileşenlerden olu...
3.1.  Örnek bir Hastane Bilgi Sistemi senaryosu<br />23 / 45<br />Yeni gereksinimi gerçekleştirmenin bir yolu, kimlik doğr...
3.2.  Enine-Kesen ilgilerin Aspect olarak ifade edilmesi<br />24 / 45<br />Aspect-Yönelimli bir sistemde, enine-kesen ilgi...
3.3.  Pointcut  ve Advice kavramları<br />25 / 45<br />Aspect’lerin önemli bir avantajı pointcut (kesim noktası)  adı veri...
3.4.  Join Point ve Join Point Modeli<br />26 / 45<br />Kodun nerede çalıştırılacağını belirtebilme yeteneği (pointcut’lar...
Upcoming SlideShare
Loading in …5
×

Aspect Oriented Programming (İlgiye Yönelik Programlama)

4,968 views

Published on

bu sunum sayesinde "İlgiye Yönelik Programlama" yaklaşımını yakından tanıyabilirsiniz.

Published in: Technology

Aspect Oriented Programming (İlgiye Yönelik Programlama)

  1. 1. Erhan BURHAN<br />www.eburhan.com<br />29 Aralık 2010 - ÇOMÜ<br />?<br />Yazılım MühendisliğiAspect OrientedProgramming(ilgiye yönelik programlama)<br />
  2. 2. Bölümler…<br />1 / 45<br />Bölüm 1: AOP’nin Tanıtılması<br />Bölüm 2: İlgiler ve İgilerin Ayrıştırılması<br />Bölüm 3: Aspect, Join Point, Pointcut<br />Bölüm 4: AspectJ ile küçük bir uygulama<br />Bölüm 5: Soru & Cevap<br />
  3. 3. 2 / 45<br />~ BÖLÜM 1 ~<br />AOP’nin Tanıtılması<br />
  4. 4. 1. AOP’nin Tanıtılması<br />3 / 45<br />Bu bölüm altındaki ana başlıklar:<br />Yeniden Kullanım (reuse) Problemi<br />AOSE ve Aspect kavramı<br />Aspect’lerin önemliliği<br />AOP ve OOP ilişkisi<br />Bu bölümde Aspect’leri ve Aspect-Yönelimli Programlama yaklaşımını tanıyacağız. <br />Bu yaklaşımın, yazılımlardaki hangi sorunlara ne gibi çözümler getirdiğini göreceğiz<br />
  5. 5. 1.1. Yeniden Kullanım (reuse) Problemi<br />4 / 45<br />Gereksinimler ve Program Bileşenleri arasındaki ilişkiler çok karmaşıktır (complex)<br />Bir gereksinim birden fazla bileşen tarafından sağlanabilir.<br />Bir bileşen ise birden fazla gereksinimi sağlıyor olabilir.<br />Bileşen<br />Gereksinim<br />n<br />m<br />Gereksinimlerde değişiklik yapılmak istenirse?- birkaç bileşeni birden anlamak ve değiştirmek gerekir.<br />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<br />
  6. 6. 1.2. AOSE ve Aspect kavramı<br />5 / 45<br />Aspect-Oriented Software Engineering (AOSE)<br /><ul><li> yeniden kullanım sorununu çözmeye yönelik bir yaklaşımdır
  7. 7. programların daha kolay bakımının yapılabilmesini sağlar</li></ul>AOSE, bir programın farklı noktalarında gerekli olabilecek sistem fonksiyonlarını gerçekleştiren ve aspect olarak adlandırılan soyutlamalardan oluşmaktadır.<br />Aspect’ler<br /><ul><li>enine-kesen ilgiyi (cross-cutting concern) enkapsüle ederler, sarmalarlar
  8. 8. nesneler ve metotlar gibi diğer soyutlamalarla bir arada kullanılırlar</li></ul>Aspect 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.<br />
  9. 9. 1.2.1 Enine-Kesen İlgiler<br />6 / 45<br />Şekil1: Enine-Kesen İlgiler<br />
  10. 10. 1.3. Aspect’lerin önemliliği<br />7 / 45<br />Aspect’lerin önemli bir karakteristiği<br /><ul><li> program içerisinde nereye dokunacaklarının tarifini içerirler
  11. 11. enine-kesen ilgiyi gerçekleştirecek olan kodu barındırırlar</li></ul>Enine-kesen ilgiyi gerçekleştirecek kodun,<br /><ul><li> belli bir metot çağrısından önce veya sonra kaynak koda dahil edileceğini
  12. 12. herhangi bir özelliğe (attribute) erişildiği zaman yerleştirilmesi gerektiğini</li></ul>belirtebilirsiniz.<br /> Aspect-Oriented yaklaşımının en önemli faydası<br /> ilgilerin (concerns) ayrıştırılmasına imkan sağlamasıdır<br />ilgilerin bağımsız elemanlar olarak ayrıştırılması , aynı mantıksal soyutlama içerisinde<br />yer almasından çok daha iyi bir yazılım mühendisliği yaklaşımıdır.<br />
  13. 13. 1.3. Aspect’lerin önemliliği<br />8 / 45<br />Enine-Kesen ilgileri Aspect’ler olarak ifade edebiliriz. Böylece:<br /><ul><li> değiştirilecek kodun nerelerde kullanıldığını bilmemize gerek kalmaz
  14. 14. ilgileri daha kolay ve hızlı bir şekilde anlayabiliriz
  15. 15. diğer ilgilerden bağımsız bir şekilde değiştirebiliriz</li></ul>Örneğinkullanıcı kimlik kontrolünü, bir kullanıcı adı ve parolası isteyen bir aspect olarak <br />ifade edebiliriz. Böylelikle kimlik kontrolünün gerekli olduğu yerlerde bu aspect, program içerisine otomatik olarak örülür, dokunur.<br />Aspectkimlik_kontrolü();<br />Metod kimlik_kontrolü();<br />Metod kisiyi_guncelle();<br />Metod kisiyi_guncelle();<br />Metod yeni_kisi_yarat();<br />
  16. 16. 1.4. AOP ve OOP ilişkisi<br />9 / 45<br /><ul><li> AspectJ, PostSharp , AspectC++ ve AspectPHP gibi programlama dilleri var
  17. 17. OOP’nin çözüm getiremediği sorunlara çözüm getirmeyi amaçlamaktadırlar
  18. 18. OOP’nin yerini almak için değil, OOP’yi genişleterek geliştirmek içindirler</li></ul>grafik kaynak: http://www.slideshare.net/wcandillon/aspectoriented-programming-for-php<br />
  19. 19. 10 / 45<br />~ BÖLÜM 2 ~<br />İlgiler ve İlgilerin Ayrıştırılması<br />
  20. 20. 2. İlgiler ve İlgilerin Ayrıştırılması<br />11 / 45<br />Bu bölüm altındaki ana başlıklar:<br />İlgilerin Ayrıştırılması nedir, ne faydası var?<br />İlgiler ve ilgi türleri<br />Çekirdek ilgiler & Enine-Kesen ilgiler<br />Tangling (karışıklık) & Scattering (saçılma)<br />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.<br />
  21. 21. 2.1. İlgilerin Ayrıştırılması nedir, ne faydası var?<br />12 / 45<br /><ul><li> İlgilerin ayrıştırılması yeni bir konu değil !
  22. 22. Prosedürel Programlama ve sonrasında gelen programlama mekanizmaları (class’lar gibi),</li></ul>ilgilerin ayrıştırılabilmesi için daha iyi mekanizmalar sağlamak amacıyla tasarlanmışlardır<br /><ul><li> Fakat şimdiye kadarki mekanizmaların hepsinin, enine-kesen ilgilerle problemleri vardır </li></ul> Aspect’ler bu enine-kesen ilgilerin yönetimine yardımcı olmaları için icat edilmişlerdir (1999)<br /> İlgilerin Ayrıştırılması, program içerisindeki herbir elemanın (sınıf, metot, vs.) <br />yalnızca tek bir şey yapacak şekilde organize edilmesi anlamına gelir.<br /> İlgilerin Ayrıştırılması ne fayda sağlar?<br /><ul><li> programdaki diğer elemanları hesaba katmaksızın bir eleman üzerine odaklanabiliriz
  23. 23. diğer elemanları anlamaya gerek kalmaksızın, herbir program parçasını anlayabiliriz
  24. 24. değişiklik gerektiği zaman, değişiklikten çok az sayıda eleman etkilenmiş olacaktır</li></li></ul><li>2.2. İlgiler ve ilgi türleri<br />13 / 45<br />İlgiler, sistem üzerindeki hak sahiplerinin (stakeholders) önceliklerini ve sistem gereksinimlerini yansıtır. Örneğin “sistem performansı” bir ilgi olabilir mi?<br /><ul><li>kullanıcılar sistemden hızlı yanıt vermesini isteyebilirler
  25. 25. bazı müşteriler için performans sadece bir ayrıntıdan ibaret olabilir
  26. 26. sistemi destekleyen firmalar için kolay gerçeklenebilir bir şey olarak görülebilir</li></ul>Bu ö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.<br />Hak sahiplerinin önceliğine göre farklı ilgi türleri:<br />Fonksiyonel ilgiler (tren kontrol sisteminde “trenin frenlenmesi”)<br />Hizmet Kalitesi ilgileri (performans, emniyet, kullanılabilirlik)<br />Plan/Politika ilgileri (iş kuralları)<br />Sistem ilgileri (bakım yapılabilirlik ve yapılandırılabilirlik)<br />Kurumsal ilgiler (firmanın hedefleri ve öncelikleri)<br />
  27. 27. 2.3. Çekirdek ilgiler & Enine-Kesen ilgiler<br />14 / 45<br />Çekirdek (core) ilgiler<br /><ul><li> sistemin birincil amacıyla ilişkili olan fonksiyonel ilgilerdir</li></ul>Bir hastanedeki hasta bilgi sistemi için çekirdek ilgiler:<br /><ul><li> hasta kayıtlarının oluşturulması
  28. 28. hasta kayıtlarının düzenlenmesi
  29. 29. hasta kayıtlarının listelenmesi
  30. 30. hasta kayıtlarının yönetimi</li></ul>Birçok sistemde ikincil ilgiler de vardır. İkincil ilgiler: - çekirdek ilgilerle bilgi paylaşan fonksiyonları içerebilirler - fonksiyonel olmayan gereksinimleri karşılıyor olabilirler<br />Bunları çekirdek ilgilerden ayırt etmek için Enine-Kesen ilgiler olarak isimlendiriyoruz.<br />
  31. 31. 2.3. Çekirdek ilgiler & Enine-Kesen ilgiler<br />15 / 45<br />paylaşımlıtampon<br />tüketici<br />üretici<br />senkronerişim<br />senkronerişim<br />Gereksinimler:<br /><ul><li> Üretici süreç, paylaşımlı tampona bir veri yerleştirir
  32. 32. Tüketici süreç, paylaşımlı tampondan bir veri çeker- Üretici süreç, tüketilmeden veri yazamamalıdır
  33. 33. Tüketici süreç, tampon boş ise veri çekmeye çalışmamalıdır
  34. 34. Her iki süreç de tampon alanına eş zamanlı (senkron) olarak erişmelidir</li></ul>Bu sistemdeki çekirdek ilgi, tampona veri eklenmesi ve tampondan veri silinmesidir.<br />Ü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.<br />
  35. 35. 2.4. Tangling (karışıklık) & Scattering (saçılma)<br />16 / 45<br />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.<br />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:<br />tangling (karışıklık)<br />scattering (saçılma, dağılma, yayılma)<br />Tangling, sistem içerisindeki bir bileşen, farklı sistem gereksinimlerini gerçekleştiren kodu daiçerisine aldığı zaman meydana gelir.<br />Scattering, bir veya daha fazla gereksinimin gerçekleştirimi , program içerisindeki çeşitli bileşenler arasına dağıldığı zaman meydana gelir.<br />
  36. 36. 2.4. Tangling (karışıklık) & Scattering (saçılma)<br />17 / 45<br />Şekil 2 :tanglingörneği<br />Birincil ilgiyi gerçekleştiren kod (tampona veri eklenmesi) ile ikincil ilgiyi gerçekleştiren <br />senkronizasyon kodu birbiriyle iç içe girmiş, karışmış (tangling meydana gelmiş).<br />Senkronizasyon kodu, paylaşımlı tampona erişim sağlayan tüm metotlar içerisine tek tek elle dahil edilmek zorundadır.<br />
  37. 37. 2.4. Tangling (karışıklık) & Scattering (saçılma)<br />18 / 45<br />Şekil 3:scatteringörneği<br />gri: enine-kesenkırmızı: saçılmış<br />bir Hastane Kayıt Yönetimi Sistemi içindeki örnek 3 bileşen: Hasta, Film, Muayene<br />Sistemin birincil ilgisi; hasta, muayene, ilâç, teşhis, tedavi vs. yönetimidir.Sistemin, istatistiksel bilgiler sağlamak gibi ikincil bir görevi daha var.<br />Hastanın gizliliği için tıbbî veriler, veritabanına kaydedilmeden önce anonimleştirilmeli.<br />Anonimleştirme metodu birkaç bileşene birden saçılmış, dağılmış (scattering oluşmuş).<br />
  38. 38. 2.4. Tangling (karışıklık) & Scattering (saçılma)<br />19 / 45<br /> Tangling ve Scattering sorunları , başlangıçtaki sistem gereksinimlerinin değişmesi gerektiği zaman kendini gösterecektir. (değişiklik kaçınılmazdır!)<br />Örneğin eskisine ek olarak yeni istatistiki bilgilerin toplanması istensin. Bu durumda:<br /><ul><li> değiştirmek zorunda olduğumuz sistem bileşenlerini bulmak zamanınızı alacak
  39. 39. herbir bileşeni tek tek değiştirmek zorunda kalacaksınız</li></ul>Bileşenlerin yeniden incelenmesi, değişikliğin uygulanması ve test edilmesi masraflı bir iştir.<br /><ul><li> değişiklik yaptığınız kodda gözünüzden kaçan şeylerin olma ihtimali her zaman var
  40. 40. yapılacak değişiklikler birden fazla ise hata yapma olasılığınız artar</li></ul>Sonuç olarak;Değişikliklerden sonra istatistiki bilgilerin hatalı olmayacağını garanti edemezsiniz.<br />
  41. 41. 20 / 45<br />~ BÖLÜM 3 ~<br />Aspect, Join Point, Pointcut<br />
  42. 42. 3. Aspect, Join Point, Pointcut<br />21 / 45<br />Bu bölüm altındaki ana başlıklar:<br />Örnek bir Hastane Bilgi Sistemi senaryosu<br />Enine-Kesen ilgilerin Aspect olarak ifade edilmesi<br />Pointcut ve Advice kavramları<br />Join Point ve Join Point kavramları<br />Aspect dokuyucuları (weavers)<br />Bu bölümde, aspect-yönelimli yazılım geliştirimi ile alâkalı en önemli kavramlar tanıtılacak.<br />Hastane Bilgi Sistemi içerisinden örnekler verilerek kavramlar açıklanmaya çalışılacak.<br />Aspect-Yönelimli programlamanın teknik detayları da ele alınacaktır.<br />
  43. 43. 3.1. Örnek bir Hastane Bilgi Sistemi senaryosu<br />22 / 45<br />Hastadeki bilgileri işleyen ve çeşitli bileşenlerden oluşan bir bilgi sistemi düşünelim.<br />- Hasta isimli bileşen, bir hastayla ilgili kişisel bilgileri sağlıyor<br /><ul><li> İlâç isimli bileşen, reçeteye yazılan ilâçlar ile ilgili bilgileri tutuyor</li></ul>Bir veritabanında tutulan bilgiler, sistemin farklı yerlerinden güncellenmektedir. Örneğin hasta bilgisi; hastanın bilgileri değiştiğinde, hastaya verilen ilâçlar değiştiğinde veya hastaya yeni bir uzman atandığında güncellenebilir.<br />Bütün veritabanı güncellemeleri, “update” ile başlayan metotlar tarafından gerçekleştirilsin:<br />- 1. parametrede bilgileri güncellenecek hasta, 2. parametrede ise değişiklikler yer alır<br />- Güncellemeler, sisteme oturum açmış bir hastane personeli tarafından yapılır<br />fakat Müşteri yeni bir gereksinimle geldi ve güncellemelerin daha güvenli olmasını talep etti. Veritabanında bir değişiklik yapılmadan önce, değişikliği yapan kişi sisteme yeniden kendisini doğrulatmalı. Ve ayrıca değişikliği kimin yaptığının detayları da bir log dosyasına kaydedilmeli.<br />
  44. 44. 3.1. Örnek bir Hastane Bilgi Sistemi senaryosu<br />23 / 45<br />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.<br />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.<br />Fakat bu 2 yaklaşım da iyi bir çözüm değildir:<br />İ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.<br />İ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.<br />Kimlik doğrulama ve Loglama, sistemin çekirdek ilgilerini enine-kesen ilgilerdir.<br />
  45. 45. 3.2. Enine-Kesen ilgilerin Aspect olarak ifade edilmesi<br />24 / 45<br />Aspect-Yönelimli bir sistemde, enine-kesen ilgileri aspect olarak gösterebiliriz.<br />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. <br />Şekil 4:<br />kimlik doğrulama<br />ilgisi için örnek biraspect<br />
  46. 46. 3.3. Pointcut ve Advice kavramları<br />25 / 45<br />Aspect’lerin önemli bir avantajı pointcut (kesim noktası) adı verilen kavramı içermesidir. <br />Pointcut, aspect’in program içerisinde nereye dokunacağını tanımlayan bir ifadedir. <br />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 <br />çalıştırılması gerekliliğidir. Yıldız (*) karakteri bir jokerdir.<br />Aspect içine yazılan ve çalıştırılacak olan asıl program kodu advice olarak adlandırılır. <br />Advice’lar herhangi bir enine-kesen ilginin gerçekleştirimidir. Bu durumda şekil 4’teki advice,<br />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.<br />
  47. 47. 3.4. Join Point ve Join Point Modeli<br />26 / 45<br />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.<br /> Join Point, programın çalışması esnasında meydana gelen bir olay (event)’dır.<br />Bir metot çağrısı, bir değişkenin ilklendirilmesi veya bir nesne property’sinin güncellenmesi<br />bir join point olarak olabilir. Program çalışıyorken bunlara benzer birçok olay türü oluşabilir.<br /> Join Point Modeli, aspect-yönelimli bir program içerisinde referans alınabilen olayların kümesini tanımlar.<br />Join point modelleri standartlaşmış değildirler ve her aspect-yönelimli programlama dili kendi join point modeline sahip olabilir.<br />
  48. 48. 3.4. Join Point ve Join Point Modeli<br />27 / 45<br />Örneğin AspectJ isimli aspect-yönelimli programlama dilinde, join point modelinin elemanı olan olaylar şunlardır:<br /><ul><li>call events ----bir metot veya bir yapıcı çağrıldığında oluşur
  49. 49. execution events ----bir metot veya bir yapıcı çalıştırıldığında oluşur
  50. 50. initialization events ----bir sınıf veya nesne ilklendirildiğinde oluşur
  51. 51. data events ----bir alan güncellendiğinde veya erişildiğinde oluşur
  52. 52. exception events ----bir istisna meydana geldiğinde oluşur</li></ul>call event<br />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.<br />
  53. 53. 3.4. Join Point ve Join Point Modeli<br />28 / 45<br />Advice Dokunma Yerleri<br />1<br />Advice; belirli bir metodun, peşi sıra listelenmiş metotların veya bir şablon ile eşleşen <br />(update* gibi) isme sahip metotların çalıştırılmasından önce yer alabilir.<br />2<br />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.<br />3<br />Advice; bir nesne içindeki bir property değiştirildiği zaman yer alabilir. O özelliği<br />değiştirmek veya takibe almak için advice yerleştirebiliriz.<br />dokunma yeri<br />
  54. 54. 3.5. Aspect dokuyucuları (weavers)<br />29 / 45<br />Advice’ların program içerisine yerleştirilmeleri aspect dokuyucusu sorumluğundadır.<br />Aspect dokuyucuları:<br />- derleyici uzantılarıdır<br />- sınıfların, metotların ve aspect’lerin tanımlamalarını işlemekle görevlidirler<br /><ul><li> aspect’lerle birlikte yeni bir program kodu oluştururlar
  55. 55. enine-kesen ilgilerin, final sistemin doğru yerlerinde çalışmalarını sağlarlar</li></ul>bir aspect dokuyucusu, ham sınıflardan ve aspect’lerden gerekli bilgileri alır. <br />Sınıfların uygun yerlerine işlenmiş olan ve <br />aspect kodu içeren yeni sınıflar oluşturur.<br />
  56. 56. 3.5. Aspect dokuyucuları (weavers)<br />30 / 45<br />Şekil 5: aspect dokunma işlemi<br />Bu diagramda, hastane bilgi sisteminde yer alan kimlik doğrulama (authentication) veişlemleri kaydetme (logging) aspect’lerinin nasıl dokunduğu gösterilmektedir.<br />
  57. 57. 3.5. Aspect dokuyucuları (weavers)<br />31 / 45<br />Aspect dokuma işlemi için 3 farklı yaklaşım var:<br />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.<br />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.<br />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<br />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<br />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.<br />
  58. 58. 32 / 45<br />~ BÖLÜM 4 ~<br />AspectJ ile küçük bir uygulama<br />
  59. 59. 4. AspectJ ile küçük bir uygulama<br />33 / 45<br />Bu bölüm altındaki ana başlıklar:<br />Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />AspectJ ile loglama uygulamasının gerçekleştirimi<br />
  60. 60. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />34 / 45<br />Eclipse IDE’si ücretsiz olarak şuradan indirilebilir:<br />http://www.eclipse.org/downloads/<br />AspectJ araçları ücretsiz olarak şu sayfadan indirilebilir:<br />http://www.eclipse.org/ajdt/downloads/<br />NOT:<br />AspectJ için gerekli araçları, Eclipse içerisinden kolayca<br />yükleyebilirsiniz. Eclipse sizin yerinize herşeyi halleder.<br />
  61. 61. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />35 / 45<br />AspectJ araçlarının bulunduğu sayfaya girilir ve Update Site URL kopyalanır.<br />
  62. 62. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />36 / 45<br />Eclipse açılır ve HelpInstall New Sofware menüsüne girilir.<br />
  63. 63. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />37 / 45<br />Install penceresindeki Add… butonuna tıklanır<br />
  64. 64. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />38 / 45<br />Add Repository penceresindeki Location kutusuna daha önceden <br />kopyaladığımız URL yapıştırılır.<br />Name kutusuna ise AspectJ ile ilişkili bir isim verilir ve OK butonuna<br />tıklatılır.<br />
  65. 65. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />39 / 45<br />Install penceresinde Required olarak gösterilmiş seçenek işaretlenir.<br />
  66. 66. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />40 / 45<br />Detaylar kontrol edilir ve ilerlenir<br />
  67. 67. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />41 / 45<br />
  68. 68. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />42 / 45<br />
  69. 69. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi<br />43 / 45<br />
  70. 70. 4.2 AspectJ ile loglama uygulamasının gerçekleştirimi<br />44 / 45<br /><ul><li>“Kisi” isminde bir Java sınıfı yazacağız.
  71. 71. Bu sınıfın “ad – soyad – yas” alanları olacak.
  72. 72. Her “SET” metodundan önce ve sonra “AspectJ” kullanarak basit bir loglama işlemi yaptıracağız.</li></li></ul><li>45 / 45<br />~ BÖLÜM 5 ~<br />Soru & Cevap<br />
  73. 73. Aspect Oriented Programming<br />Erhan BURHAN<br />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.<br />29 Aralık 2010 - ÇOMÜ<br />

×