Arda Çetinkaya www.minepla.net   @ardacetinkaya [email_address]
Gündem <ul><li>Ne değildir? </li></ul><ul><li>Nedir? Ne işe yarar? </li></ul><ul><li>Problem mi var? </li></ul><ul><li>Bir...
<ul><li>Yeni bir programlama dili değil... </li></ul><ul><li>OOP’den sonraki ya da onun yerine geçecek yaklaşım hiç değil....
Nedir? Ne işe yarar? <ul><li>Birbiri ile kesişen ilgileri ayırmak ve basitleştirmek için kullanılabilecek bir yaklaşımdır....
Problem mi var? <ul><li>         public Account OpenNewCustomerAccount(Customer customer, Currency currency)         {    ...
Problem mi var? <ul><li>Zaman içerisinde ortaya çıkan durumlar </li></ul><ul><li>Belli bir zaman diliminde sahip olunan öz...
Bir biri ile kesişen ilgiler mi? <ul><li>Bir modüle ayrılamazlar... </li></ul><ul><li>İlgilerin ayrılmasını zorlaştırırlar...
Bir biri ile kesişen ilgiler mi? <ul><li>Loglama ( Logging ) </li></ul><ul><li>Ön belleğe alma (Caching) </li></ul><ul><li...
Peki bu ‘Aspect’ ne? <ul><li>Bir biri ile kesişen ilgilerin ayrıldığı parçalar... </li></ul><ul><li>Yazılım yaşam süresi b...
Anahtar kelimeler <ul><li>Advice: ‘Aspect’ içerisinde bulunan ilginin yapması gereken operasyon... </li></ul><ul><ul><li>Ö...
Anahtar kelimeler <ul><li>Pointcut: Bağlantı noktalarının kümesi ve bağlantı noktalarını bulan mekanizma...Bağlantı noktal...
Nasıl? <ul><li>Çalışma zamanında gerçekleşebilir(Run-time) </li></ul><ul><ul><li>Performans açısından yavaş olur </li></ul...
.NET’de AOP nasıl olur... <ul><li>Spring.NET </li></ul><ul><li>PostSharp </li></ul><ul><li>Aspect# </li></ul><ul><li>Unity...
Bir görseydik örneği...
Bu kadar... <ul><li>Haydi sor sor.... </li></ul><ul><li>Teşekkürler (: </li></ul>
Upcoming SlideShare
Loading in...5
×

'Aspect Oriented' Programlama

4,416

Published on

Nedir?tv.com'un 5.yılı kapsamında düzenlenen etkinlikteki 'Aspect Oriented' programlama ile ilgili sunumum...

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,416
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

'Aspect Oriented' Programlama

  1. 1. Arda Çetinkaya www.minepla.net @ardacetinkaya [email_address]
  2. 2. Gündem <ul><li>Ne değildir? </li></ul><ul><li>Nedir? Ne işe yarar? </li></ul><ul><li>Problem mi var? </li></ul><ul><li>Bir biri ile kesişen ilgiler mi? </li></ul><ul><li>Peki bu ‘Aspect’ ne? </li></ul><ul><li>Anahtar kelimeler </li></ul><ul><li>Nasıl? </li></ul><ul><li>.NET’de AOP nasıl olur... </li></ul><ul><li>Bir görseydik örneği... </li></ul><ul><li>Bu kadar... </li></ul>
  3. 3. <ul><li>Yeni bir programlama dili değil... </li></ul><ul><li>OOP’den sonraki ya da onun yerine geçecek yaklaşım hiç değil... </li></ul><ul><li>Kusursuz da değil... </li></ul><ul><li>Sadece loglama ya da hata yakalama operasyonları için değildir... (: </li></ul>Ne değildir?
  4. 4. Nedir? Ne işe yarar? <ul><li>Birbiri ile kesişen ilgileri ayırmak ve basitleştirmek için kullanılabilecek bir yaklaşımdır. </li></ul><ul><li>Yazılımdaki, tekrar kullanılabilirlik ve birimselik kalite özelliklerine katkı sağlar... </li></ul><ul><li>Yazılımdaki ilgilerin netleşmesini sağlar... </li></ul><ul><li>Değişikliklere kolay adaptasyonu getirir... </li></ul><ul><li>Yazılımın yaşam süresinin uzamasını sağlar... </li></ul><ul><li>Genişletilebilirliğe ön ayak olur... </li></ul><ul><li>Daha düzenli ve kontrol edilebilir kod sağlar... </li></ul>
  5. 5. Problem mi var? <ul><li>         public Account OpenNewCustomerAccount(Customer customer, Currency currency)         {             try             {                  Logger.Write(&quot;OpenNewCustomerAccount is executing...&quot;);                   if (!CheckPermission(CURRENTUSER))                     throw new Exception(&quot;User does not have permission&quot;);                if (HasCustomerAnyLoa n (customer ,100000000 ))                     throw new Exception(&quot;Customer has a big amount of loa n &quot;);                  Logger.Write(&quot;Account is opening&quot;);                   Account.Open(currency);                 Account.SendInformation();                 Account.Transfer(1000);                 Account.Save();                  Logger.Write(&quot;Account is opened&quot;);             }             catch (Exception ex)             {                 Logger.Write(&quot;An error is occured.&quot;);                ExceptionHandler.Handle(ex);             }         } </li></ul>Çok fazla ilgi iç içe,karışık İş kuralları kodun içinde saklı Değiştirmek zor Dağınık
  6. 6. Problem mi var? <ul><li>Zaman içerisinde ortaya çıkan durumlar </li></ul><ul><li>Belli bir zaman diliminde sahip olunan özellikler, fonksiyonlar... </li></ul><ul><li>Bebek, çocuk, genç,öğrenci, çalışan,yaşlı.... </li></ul>
  7. 7. Bir biri ile kesişen ilgiler mi? <ul><li>Bir modüle ayrılamazlar... </li></ul><ul><li>İlgilerin ayrılmasını zorlaştırırlar... </li></ul><ul><li>Eğer bir ilgi, farklı başka bir ilgi içerisinde de kullanılıyorsa karmaşıklık ortaya çıkar ( tangled ) </li></ul><ul><ul><li>İş kuralların da bu karmaşıklık minimum şekilde oluşmalıdır. </li></ul></ul><ul><li>Bir ilgi birden fazla modülün içerisine gömülüyse dağınıklık ortaya çıkar. ( scattered ) </li></ul>
  8. 8. Bir biri ile kesişen ilgiler mi? <ul><li>Loglama ( Logging ) </li></ul><ul><li>Ön belleğe alma (Caching) </li></ul><ul><li>Hata yakalama (Exception Handling) </li></ul><ul><li>Doğrulama (Validation) </li></ul><ul><li>Yetkilendirme (Authorization) </li></ul><ul><li>Kimlik doğrulama (Authentication) </li></ul><ul><li>İş kuralları (Business Rules) </li></ul>Data Access Business UI
  9. 9. Peki bu ‘Aspect’ ne? <ul><li>Bir biri ile kesişen ilgilerin ayrıldığı parçalar... </li></ul><ul><li>Yazılım yaşam süresi boyunca kazandığı ya da sahip olduğu özellikler, şekiller...Görünümü... </li></ul><ul><li>Özel bir tipi olan modül... </li></ul><ul><li>‘ Aspect’ler, ilgilerin gizlendiği birer kutu gibidir...Kendi </li></ul><ul><li>özellikleri, sahip olduğu metodlar içlerinde saklıdır... </li></ul>
  10. 10. Anahtar kelimeler <ul><li>Advice: ‘Aspect’ içerisinde bulunan ilginin yapması gereken operasyon... </li></ul><ul><ul><li>Örnek: Metod çağrımlarında çalışacak, Loglama modülü içerisinde ki Write() metodu.... </li></ul></ul><ul><li>Joint-Point: ‘Aspect’ler ile uygulamanın bağlantı noktaları... </li></ul><ul><ul><li>Örnek: Metod çağrımı, nesne yaratılması, özelliğe değer atanması... </li></ul></ul>
  11. 11. Anahtar kelimeler <ul><li>Pointcut: Bağlantı noktalarının kümesi ve bağlantı noktalarını bulan mekanizma...Bağlantı noktalarınının ne zaman geçerli olacağını belirler, ‘Advice’ları çalıştırır... </li></ul><ul><ul><li>Örnek: Metod tam çağrılmadan önce ki, ya da bir nesne yaratıldıktan sonra ki, ya da bir özelliğe değer atandıktan sonra ki nokta... </li></ul></ul><ul><li>Weaving: Pointcut’ları kontrol eden ve yöneten mekanizma...Bu sayede uygulama için gerekli ‘Aspect’ler yaratılır... </li></ul><ul><ul><li>Örnek: Uygulamanın ‘Aspect’leri çalıştırma şekli... </li></ul></ul><ul><ul><ul><li>Compile zamanında... </li></ul></ul></ul><ul><ul><ul><li>Dinamik olarak, çalışma zamanında... </li></ul></ul></ul>
  12. 12. Nasıl? <ul><li>Çalışma zamanında gerçekleşebilir(Run-time) </li></ul><ul><ul><li>Performans açısından yavaş olur </li></ul></ul><ul><ul><li>Daha esnek olur, genişletilebilir </li></ul></ul><ul><li>Derleme zamanında gerçekleşebilir... </li></ul><ul><ul><li>Hızlı olur... </li></ul></ul><ul><ul><li>Type-safe olur... </li></ul></ul><ul><li>Uygulamanın bazı kısımlarında, araya girerek </li></ul><ul><li>‘ Aspect’’lerimizi çalıştırırız... (interception) </li></ul>
  13. 13. .NET’de AOP nasıl olur... <ul><li>Spring.NET </li></ul><ul><li>PostSharp </li></ul><ul><li>Aspect# </li></ul><ul><li>Unity Application Block(Unity) </li></ul><ul><li>.NET Framework içerisinde AOP yaklaşımını uygulayabilecek </li></ul><ul><li>sınıflar, metodlar, özellikler ....vs. mevcut... </li></ul><ul><ul><li>ContextBoundObject </li></ul></ul><ul><ul><li>Attribute </li></ul></ul><ul><ul><li>......vs. </li></ul></ul>
  14. 14. Bir görseydik örneği...
  15. 15. Bu kadar... <ul><li>Haydi sor sor.... </li></ul><ul><li>Teşekkürler (: </li></ul>

×