SlideShare una empresa de Scribd logo
1 de 47
Erhan BURHAN www.eburhan.com 29 Aralık 2010 - ÇOMÜ ? Yazılım MühendisliğiAspect OrientedProgramming(ilgiye yönelik programlama)
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
2 / 45 ~ BÖLÜM 1 ~ AOP’nin Tanıtılması
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
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
1.2.  AOSE ve Aspect kavramı 5 / 45 Aspect-Oriented Software Engineering (AOSE) ,[object Object]
   programların daha kolay bakımının yapılabilmesini sağlarAOSE, bir programın farklı noktalarında gerekli olabilecek sistem fonksiyonlarını gerçekleştiren ve aspect olarak adlandırılan soyutlamalardan oluşmaktadır. Aspect’ler ,[object Object]
  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.
1.2.1  Enine-Kesen İlgiler 6 / 45 Şekil1:  Enine-Kesen İlgiler
1.3. Aspect’lerin önemliliği 7 / 45 Aspect’lerin önemli bir karakteristiği ,[object Object]
  enine-kesen ilgiyi gerçekleştirecek olan kodu barındırırlarEnine-kesen ilgiyi gerçekleştirecek kodun, ,[object Object]
 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.
1.3. Aspect’lerin önemliliği 8 / 45 Enine-Kesen ilgileri Aspect’ler olarak ifade edebiliriz. Böylece: ,[object Object]
  ilgileri daha kolay ve hızlı bir şekilde anlayabiliriz
  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();
1.4. AOP ve OOP ilişkisi 9 / 45 ,[object Object]
  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çindirlergrafik kaynak:  http://www.slideshare.net/wcandillon/aspectoriented-programming-for-php
10 / 45 ~ BÖLÜM 2 ~ İlgiler ve İlgilerin Ayrıştırılması
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.
2.1.  İlgilerin Ayrıştırılması nedir, ne faydası var? 12 / 45 ,[object Object]
  Prosedürel Programlama ve sonrasında gelen programlama mekanizmaları (class’lar gibi),ilgilerin ayrıştırılabilmesi için daha iyi mekanizmalar sağlamak amacıyla tasarlanmışlardır ,[object Object], Aspect’ler bu enine-kesen ilgilerin yönetimine yardımcı olmaları için icat edilmişlerdir (1999)   İlgilerin Ayrıştırılması, program içerisindeki herbir elemanın (sınıf, metot, vs.)  yalnızca tek bir şey yapacak şekilde organize edilmesi anlamına gelir.   İlgilerin Ayrıştırılması ne fayda sağlar? ,[object Object]
  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,[object Object]
 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ü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)
2.3.  Çekirdek ilgiler & Enine-Kesen ilgiler 14 / 45 Çekirdek (core) ilgiler ,[object Object],Bir hastanedeki hasta bilgi sistemi için çekirdek ilgiler: ,[object Object]
  hasta kayıtlarının düzenlenmesi
  hasta kayıtlarının listelenmesi
  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.
2.3.  Çekirdek ilgiler & Enine-Kesen ilgiler 15 / 45 paylaşımlıtampon tüketici üretici senkronerişim senkronerişim Gereksinimler: ,[object Object]
  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ş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.
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.
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.
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ş).
2.4. Tangling (karışıklık) & Scattering (saçılma) 19 / 45  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!) Örneğin eskisine ek olarak yeni istatistiki bilgilerin toplanması istensin. Bu durumda: ,[object Object]
  herbir bileşeni tek tek değiştirmek zorunda kalacaksınızBileşenlerin yeniden incelenmesi, değişikliğin uygulanması ve test edilmesi masraflı bir iştir. ,[object Object]
  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.
20 / 45 ~ BÖLÜM 3 ~ Aspect, Join Point, Pointcut
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.
3.1.  Örnek bir Hastane Bilgi Sistemi senaryosu 22 / 45 Hastadeki bilgileri işleyen ve çeşitli bileşenlerden oluşan bir bilgi sistemi düşünelim. - Hasta isimli bileşen, bir hastayla ilgili kişisel bilgileri sağlıyor ,[object Object],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. Bütün veritabanı güncellemeleri,  “update” ile başlayan metotlar tarafından gerçekleştirilsin: - 1. parametrede bilgileri güncellenecek hasta, 2. parametrede ise değişiklikler yer alır - Güncellemeler, sisteme oturum açmış bir hastane personeli tarafından yapılır 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.
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.
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
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.
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.

Más contenido relacionado

Similar a Aspect Oriented Programming (İlgiye Yönelik Programlama)

Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingDilaver Demirel
 
Implementation.pptx
Implementation.pptxImplementation.pptx
Implementation.pptxglkabakc
 
Yazılım mühendisliğinde i̇nsan bilgisayar etkileşimi
Yazılım mühendisliğinde i̇nsan bilgisayar etkileşimiYazılım mühendisliğinde i̇nsan bilgisayar etkileşimi
Yazılım mühendisliğinde i̇nsan bilgisayar etkileşimiBetul Kesimal
 
Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse Ertugrul Akbas
 
SİSTEM İSTERLERİNİN TESPİTİ
SİSTEM İSTERLERİNİN TESPİTİ SİSTEM İSTERLERİNİN TESPİTİ
SİSTEM İSTERLERİNİN TESPİTİ cgoze
 
Sistem İsterlerinin Tespiti ve Modellenmesi
Sistem İsterlerinin Tespiti ve ModellenmesiSistem İsterlerinin Tespiti ve Modellenmesi
Sistem İsterlerinin Tespiti ve Modellenmesicgoze
 
Sunucu işletim sistemi 4
Sunucu işletim sistemi 4Sunucu işletim sistemi 4
Sunucu işletim sistemi 4Erol Dizdar
 
TÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİ
TÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİTÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİ
TÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİErtugrul Akbas
 
Kurumsal kaynak planlama sistemi teknik şartnamesi
Kurumsal kaynak planlama sistemi teknik şartnamesiKurumsal kaynak planlama sistemi teknik şartnamesi
Kurumsal kaynak planlama sistemi teknik şartnamesialinizam99
 
Oğuz yavuz si̇stem modelleme ve tasarim
Oğuz yavuz si̇stem modelleme ve tasarimOğuz yavuz si̇stem modelleme ve tasarim
Oğuz yavuz si̇stem modelleme ve tasarimOğuz YAVUZ
 
Angular Framework (Tanıtım Sunumu) - 2024
Angular Framework (Tanıtım Sunumu) - 2024Angular Framework (Tanıtım Sunumu) - 2024
Angular Framework (Tanıtım Sunumu) - 2024eburhan
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3Erol Dizdar
 
Kurumsal Bilgi Portali - Knowledge Management
Kurumsal Bilgi Portali - Knowledge ManagementKurumsal Bilgi Portali - Knowledge Management
Kurumsal Bilgi Portali - Knowledge ManagementSevket Akpinar
 
Sistem i̇sterlerinin tespiti ve modellenmesi
Sistem i̇sterlerinin tespiti ve modellenmesiSistem i̇sterlerinin tespiti ve modellenmesi
Sistem i̇sterlerinin tespiti ve modellenmesiMehmet Zah't
 
Yazilim projeleri maliyet tahmini ve cocomo modeli
Yazilim projeleri maliyet tahmini ve cocomo modeliYazilim projeleri maliyet tahmini ve cocomo modeli
Yazilim projeleri maliyet tahmini ve cocomo modeliZafer Düzen
 

Similar a Aspect Oriented Programming (İlgiye Yönelik Programlama) (20)

Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Implementation.pptx
Implementation.pptxImplementation.pptx
Implementation.pptx
 
Yazılım mühendisliğinde i̇nsan bilgisayar etkileşimi
Yazılım mühendisliğinde i̇nsan bilgisayar etkileşimiYazılım mühendisliğinde i̇nsan bilgisayar etkileşimi
Yazılım mühendisliğinde i̇nsan bilgisayar etkileşimi
 
Tasarım kuralları
Tasarım kurallarıTasarım kuralları
Tasarım kuralları
 
Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse
 
Log yonetimi
Log yonetimiLog yonetimi
Log yonetimi
 
SİSTEM İSTERLERİNİN TESPİTİ
SİSTEM İSTERLERİNİN TESPİTİ SİSTEM İSTERLERİNİN TESPİTİ
SİSTEM İSTERLERİNİN TESPİTİ
 
Sistem İsterlerinin Tespiti ve Modellenmesi
Sistem İsterlerinin Tespiti ve ModellenmesiSistem İsterlerinin Tespiti ve Modellenmesi
Sistem İsterlerinin Tespiti ve Modellenmesi
 
Sunucu işletim sistemi 4
Sunucu işletim sistemi 4Sunucu işletim sistemi 4
Sunucu işletim sistemi 4
 
TÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİ
TÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİTÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİ
TÜRKİYE’DE YAPILAN SIEM PROJELERİNDE MEMNUNİYET VE FAYDA ÇELİŞKİSİ
 
Kurumsal kaynak planlama sistemi teknik şartnamesi
Kurumsal kaynak planlama sistemi teknik şartnamesiKurumsal kaynak planlama sistemi teknik şartnamesi
Kurumsal kaynak planlama sistemi teknik şartnamesi
 
Oğuz yavuz si̇stem modelleme ve tasarim
Oğuz yavuz si̇stem modelleme ve tasarimOğuz yavuz si̇stem modelleme ve tasarim
Oğuz yavuz si̇stem modelleme ve tasarim
 
Bilgi sis..
Bilgi sis..Bilgi sis..
Bilgi sis..
 
Angular Framework (Tanıtım Sunumu) - 2024
Angular Framework (Tanıtım Sunumu) - 2024Angular Framework (Tanıtım Sunumu) - 2024
Angular Framework (Tanıtım Sunumu) - 2024
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3
 
Kurumsal Bilgi Portali - Knowledge Management
Kurumsal Bilgi Portali - Knowledge ManagementKurumsal Bilgi Portali - Knowledge Management
Kurumsal Bilgi Portali - Knowledge Management
 
Isl sis
Isl sisIsl sis
Isl sis
 
Yazılım Gereksinim Mühendisliği Semineri
Yazılım Gereksinim Mühendisliği SemineriYazılım Gereksinim Mühendisliği Semineri
Yazılım Gereksinim Mühendisliği Semineri
 
Sistem i̇sterlerinin tespiti ve modellenmesi
Sistem i̇sterlerinin tespiti ve modellenmesiSistem i̇sterlerinin tespiti ve modellenmesi
Sistem i̇sterlerinin tespiti ve modellenmesi
 
Yazilim projeleri maliyet tahmini ve cocomo modeli
Yazilim projeleri maliyet tahmini ve cocomo modeliYazilim projeleri maliyet tahmini ve cocomo modeli
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
  • 3. 2 / 45 ~ BÖLÜM 1 ~ AOP’nin Tanıtılması
  • 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.
  • 9. 1.2.1 Enine-Kesen İlgiler 6 / 45 Şekil1: Enine-Kesen İlgiler
  • 10.
  • 11.
  • 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();
  • 16.
  • 17. OOP’nin çözüm getiremediği sorunlara çözüm getirmeyi amaçlamaktadırlar
  • 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)
  • 27.
  • 28. hasta kayıtlarının düzenlenmesi
  • 29. hasta kayıtlarının listelenmesi
  • 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 HelpInstall New Sofware menüsüne girilir.
  • 63. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 37 / 45 Install penceresindeki Add… butonuna tıklanır
  • 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.
  • 65. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 39 / 45 Install penceresinde Required olarak gösterilmiş seçenek işaretlenir.
  • 66. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 40 / 45 Detaylar kontrol edilir ve ilerlenir
  • 67. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 41 / 45
  • 68. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 42 / 45
  • 69. 4.1 Eclipse IDE’sine AspectJ araçlarının yüklenmesi 43 / 45
  • 70.
  • 71. Bu sınıfın “ad – soyad – yas” alanları olacak.
  • 72.
  • 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Ü