Cephe yönelimli programlama veya ilgiye yönelik programlama, bölerek modülerliği artırmayı amaçlayan bir programlama yaklaşımıdır. Bütün programlama yaklaşımlarında kodlar uzadıkça, kodların anlaşılabilirliği çok düşmekte, bazen de içinden çıkılmaz bir hal almaktadır. Programlamanın varlığıyla birlikte bu sorun da hep var olmuştur. Bu sorunla savaşabilmek için sürekli çalışmalar devam etmektedir, bu süreçte ortaya çıkan önemli bir programlama yaklaşımı da Cephe Yönelimli Programlamadır.
Cephe yönelimli yazılım geliştirme ve cephe yönelimli programlama paradigmaları, özellikle çapraz kesim konusunda, modüler programlamayı kolaylaştırmaya çalışmaktadır. Cephe yönelimli yazılım geliştirme, bileşik dil, çevre ve yöntem kullanırken, cephe yönelimli programlama, her şeyden önce, dil değişikliklerini kullanarak bunu gerçekleştirmektedir.
Sorunların ayrılması, bir programın, işlevsellikte, olabildiğince çakışan farklı kısımlara ayrılmasını gerektirmektedir. Yordamsal programlama ve nesne yönelimli programlama dahil tüm programlama teknikleri işlerin küçük varlıklara ayrılması ya da giydirilmesini desteklemektedir. Örneğin, metotlar, paketler, sınıflar ve yöntemlerin hepsi, programcılara, küçük birimler olarak yardımcı olurlar. Ama bazı işler, bu tarz giydirmeye karşı çıkmaktadırlar. Yazılım mühendisleri, bunları, çapraz kesim işleri olarak adlandırmaktadır, çünkü, program içerisindeki pek çok modülü, çapraz olarak kesmektedirler.
Temel Kavramlar
Kimi kod, anlamayı ve akılda tutmayı zorlaştıracak şekilde "dağınık" ve karmaşıktır. Tek bir iş (kaydetmek gibi) pek çok modül (örn.. sınıflar ve yöntemler) üzerinden dağılım gösterdiğinde dağınıktır. Bu, kaydı değiştirmek için, değişen, etkilenmiş olan tüm modülleri değiştirmek anlamına gelmektedir. Modüller, çoklu işlerle (örn.: hesap işlemi, kayıt ve güvenlik) karmaşık şekilde biter. Bu, tek bir modül değişiminin, tüm karmaşık işleri anlamayı gerektirdiği anlamını taşımaktadır. Örneğin, bir bankacılık uygulamasının bir hesaptan diğerine para transferi yapılan metodunu ele alalım:
void transfer(Account fromAccount, Account toAccount, int amount) { if (fromAccount.getBalance() < amount) { throw new InsufficientFundsException(); } fromAccount.withdraw(amount); toAccount.deposit(amount); }
(örnekler Java-benzeri sözdizimde verilmiştir, çünkü cephe yönelimli programlamaya ilişkin çalışmalarda Java veya Java benzeri sözdizimler kullanılmaktadır)
Bununla birlikte, bu transfer metodu gerçek dünyada bir bankacılık uygulamasına uygun görünmemektedir. İşlemi yapan kullanıcının, olması gereken kullanıcı olup olmadığına ilişkin güvenlik kontrolleri yapılmalıdır, veri kaybını önlemek için etkileşim içinde gerçekleşmelidir, loglama yapılmalıdır vs. Tüm bunların basitçe yapılmış hali şuna benzer :
void transfer(Account fromAccount, Account toAccount, int amount) { if (!getCurrentUser().canPerform(OP_TRANSFER)) { throw new SecurityException(); } if (amount < 0) { throw new NegativeTransferException(); } if (fromAccount.getBalance() < amount) { throw new InsufficientFundsException(); } Transaction tx = database.newTransaction(); try { fromAccount.withdraw(amount); toAccount.deposit(amount); tx.commit(); systemLog.logOperation(OP_TRANSFER, fromAccount, toAccount, amount); } catch(Exception e) { tx.rollback(); } }
Yapılan basit işlemin içine başka çeşitli işler girdiği için kod şıklığını ve basitliğini yitirdi. Transaction'lar, güvenlik, loglama; bunlar hep araya giren işler oldular.
Aynı zamanda, uygulamanın güvenlik işlerini (örneğin) hemen değiştirmek ihtiyacı duyarsak, ne olacağını düşününüz. Programın güncel versiyonunda, sayısız yönteme karşın, güvenlik ile ilgili operasyonların, "dağınık" gibi görünmektedir ve bu tür bir değişiklik, temel bir çaba gerektirmektedir. İşte bu yüzden, çapraz kesim işlerinin, kendi modülleri içerisinde, uygun şekilde kuşatılmadığını fark ediyoruz. Bu, sistem karmaşasını artırmakta ve gelişimi, önemli ölçüde zor hale getirmektedir.
Ayrıca bakınız
Kaynakça
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Cephe yonelimli programlama veya ilgiye yonelik programlama bolerek modulerligi artirmayi amaclayan bir programlama yaklasimidir Butun programlama yaklasimlarinda kodlar uzadikca kodlarin anlasilabilirligi cok dusmekte bazen de icinden cikilmaz bir hal almaktadir Programlamanin varligiyla birlikte bu sorun da hep var olmustur Bu sorunla savasabilmek icin surekli calismalar devam etmektedir bu surecte ortaya cikan onemli bir programlama yaklasimi da Cephe Yonelimli Programlamadir Cephe yonelimli yazilim gelistirme ve cephe yonelimli programlama paradigmalari ozellikle capraz kesim konusunda moduler programlamayi kolaylastirmaya calismaktadir Cephe yonelimli yazilim gelistirme bilesik dil cevre ve yontem kullanirken cephe yonelimli programlama her seyden once dil degisikliklerini kullanarak bunu gerceklestirmektedir Sorunlarin ayrilmasi bir programin islevsellikte olabildigince cakisan farkli kisimlara ayrilmasini gerektirmektedir Yordamsal programlama ve nesne yonelimli programlama dahil tum programlama teknikleri islerin kucuk varliklara ayrilmasi ya da giydirilmesini desteklemektedir Ornegin metotlar paketler siniflar ve yontemlerin hepsi programcilara kucuk birimler olarak yardimci olurlar Ama bazi isler bu tarz giydirmeye karsi cikmaktadirlar Yazilim muhendisleri bunlari capraz kesim isleri olarak adlandirmaktadir cunku program icerisindeki pek cok modulu capraz olarak kesmektedirler Temel KavramlarKimi kod anlamayi ve akilda tutmayi zorlastiracak sekilde daginik ve karmasiktir Tek bir is kaydetmek gibi pek cok modul orn siniflar ve yontemler uzerinden dagilim gosterdiginde daginiktir Bu kaydi degistirmek icin degisen etkilenmis olan tum modulleri degistirmek anlamina gelmektedir Moduller coklu islerle orn hesap islemi kayit ve guvenlik karmasik sekilde biter Bu tek bir modul degisiminin tum karmasik isleri anlamayi gerektirdigi anlamini tasimaktadir Ornegin bir bankacilik uygulamasinin bir hesaptan digerine para transferi yapilan metodunu ele alalim void transfer Account fromAccount Account toAccount int amount if fromAccount getBalance lt amount throw new InsufficientFundsException fromAccount withdraw amount toAccount deposit amount ornekler Java benzeri sozdizimde verilmistir cunku cephe yonelimli programlamaya iliskin calismalarda Java veya Java benzeri sozdizimler kullanilmaktadir Bununla birlikte bu transfer metodu gercek dunyada bir bankacilik uygulamasina uygun gorunmemektedir Islemi yapan kullanicinin olmasi gereken kullanici olup olmadigina iliskin guvenlik kontrolleri yapilmalidir veri kaybini onlemek icin etkilesim icinde gerceklesmelidir loglama yapilmalidir vs Tum bunlarin basitce yapilmis hali suna benzer void transfer Account fromAccount Account toAccount int amount if getCurrentUser canPerform OP TRANSFER throw new SecurityException if amount lt 0 throw new NegativeTransferException if fromAccount getBalance lt amount throw new InsufficientFundsException Transaction tx database newTransaction try fromAccount withdraw amount toAccount deposit amount tx commit systemLog logOperation OP TRANSFER fromAccount toAccount amount catch Exception e tx rollback Yapilan basit islemin icine baska cesitli isler girdigi icin kod sikligini ve basitligini yitirdi Transaction lar guvenlik loglama bunlar hep araya giren isler oldular Ayni zamanda uygulamanin guvenlik islerini ornegin hemen degistirmek ihtiyaci duyarsak ne olacagini dusununuz Programin guncel versiyonunda sayisiz yonteme karsin guvenlik ile ilgili operasyonlarin daginik gibi gorunmektedir ve bu tur bir degisiklik temel bir caba gerektirmektedir Iste bu yuzden capraz kesim islerinin kendi modulleri icerisinde uygun sekilde kusatilmadigini fark ediyoruz Bu sistem karmasasini artirmakta ve gelisimi onemli olcude zor hale getirmektedir Ayrica bakinizKaynakca