SlideShare a Scribd company logo
1 of 28
Download to read offline
REACTIVE
PROGRMMING
ALPER AKALIN
ARSUITE IMMERSIVE INTELLIGENCE
TECHNOLOGY PLATFORM
Java Programmer || Software Architect || Author || Speaker
http://arsuite.com
http://bilisim.io/author/alperakalin
alperakalin@gmail.com
https://www.linkedin.com/in/alperakalin1
@alper_akalin
DATA, DATA MANIPULATION
• Veri Saklama
• Veri İşleme
• Veriyi elde etme, işleme ortamı, işleme yöntemi çeşitliliği
• Data Integrity & Data Consistency
OOP, FP
• Günümüzde yaygın olan ve ana akım olarak adlandırabileceğimiz
programlama dillerinin bir çoğu imperative (procedural) programlama
kategorisine girmektedirler. C#, C++, ve Java vb.
• Fonksiyonel programlama yazılım alt birimlerini tasarlarken ya da
geliştirirken onları birer fonksiyon olarak ele alan yazılım paradigmasıdır. Js,
Scala vb.
• Input/output
• Mutable/immutable
SIDE EFFECTS
• Bir kahveciden kahvenizi aldınız ve çıktınız.
• Belirli bir süre sonra kahvenizden ilk yudumu aldığınızda şeker ve süt eklenmediğini
farkettiniz.
• Bu durumda kahveciye dönerek yeni bir kahve siparişi vermeli ve tüm süreci yeniden
işletmelisiniz.
• Bir kahvecide kahve alma sırasına girdiniz.
• Kahvenizi alıncaya kadar başka bir iş yapamazsınız.
• Telefonuza bakamaz, tweet atamazsınız.
• Belki de o tweet ile dünyayı kurtaracaktınız. Kim bilir?
REACTIVE PROGRAMMING
• Yan etkileri işleyebilecek veya yan etkileri de anında işleme alabilecek şekilde
tasarlanmış uygulamalara / kod parçacıklarına Reactive denir.
• Reaktif programlar; uygulama çalışırken kod satırlarındaki akışı takip etmek
yerine olayları takip ederler. (event)
SIDE EFFECTS
• Kahvecide beklerken twitter akışını takip etmek kahve alma stream’i
içerisinde yan bir olaydır. (side effect).
• Kahvecinin iyi bir twitter kullanıcısı olduğunu düşünelim.
• Kahveci tweet atarak takipçileriyle promosyon kodu paylaşmaktadır.
• Kahvecinin takipçisi sırada beklerken bu promosyon kodunu alarak indirim kazanabilir.
• Böylece kahve alma stream’ine; dışarıdan ve stream’i doğrudan etkileyen bir event
eklemiş olur. (side effect)
EVENTS
• Event: Program akışında herhangi bir gelecekte oluşabilecek bir işlem ya da
işlem isteği olarak düşünebiliriz.
• Side effectleri bir event olarak da düşünebiliriz.
• Event e bir yıldız koyalım. Reaktif Programlama; stream’ler üzerine kurulduğundan
Stream'leri biraz detaylı konuşalım.
COLLECTIONS vs STREAMS
• Collection’lar; verileri çeşitli algoritmalar altında tutmaya, gruplamaya ve bu
verilerin üzerinde işlem/hesap yapmamıza olanak yarayan yapılardır.
• Stream’ler de ise durum biraz farklıdır. Verileri tutmaktan ziyade veriler
üzerinde işlem yapmaya yoğunlaşır.
COLLECTIONS vs STREAMS
• Collection’lar; veriyi gruplayan ve saklayan ve tekrar tekrar işlem yapılmasına
izin veren yapılardı.
• Herhangi bir collection yaratıldığında bu collection için memory’ de yer ayrılır. Yani
rezerve edilir.
• Stream’ler ise veriyi saklamayan sadece veri üzerinde işlem yapan ve
işlemden sonra bu veriyi unutan yapılardı.
• Stream’ler veriyi saklamadıklarından dolayı kaynak tüketiminde daha verimlidirler. Yani
memory tüketimi/kullanımı açısından daha efektiftirler.
COLLECTIONS vs STREAMS
• Bütün programlama dillerinde yapılan işlemler fonksiyon / metotların
döndürdüğü değerlere (return) bağlı değil midir?
• Herhangi bir metot/fonksiyon için Stream Return veya Collection Return yapılmasındaki
farklar nedir?
• Java NIO Path ile basit bir okuma işlemi yaptığımızı düşünelim.
• static List<String> readAllLinesByCollection(Path path)
• static Stream<String> readAllLinesByStream(Path path)
*** Search işlemi hangi akışı izler?
COLLECTIONS vs STREAMS
• Storage
• Functinal Behaviour
• Laziness-Seeking
• Infinite
• Multiple Consumption
FUNCTIONAL REACTIVE PROGRAMMING
• Functional Programlama ile Reactive Programlama aynı şey değillerdir.
• Sürekli bir arada kullanıldıklarından zaman zaman aynıymış gibi tanımlandıklarını
görmekteyiz.
• Birbirlerini tanımlamazlar ancak birbirlerini tamamladıklarını rahatlıkla söyleyebiliriz.
DATA FLOW
• Reaktif Programlama veri akışlarını ve olayları gözlemlemeyi temel alan bir
paradigmadır.
• Bir değişikliğin veri akışındaki (data flows) yayılımı ve/veya etkisi üzerine kurulmuştur..
• Büyükmüş küçükmüş ne farkeder, datayı işlemek ruhumuzda var.
• Evet veriyi işlemek önemlidir ancak bir o kadar da maaliyetlidir.
FUNCTIONAL REACTIVE PROGRAMMING
• Fonksiyonel programlama yazılım alt birimlerini tasarlarken ya da
geliştirirken onları birer fonksiyon olarak ele alan paradigmadır, demiştik.
• Functional programlama da data blokları üzerinde değişiklik yapamıyor sadece var olanı
işleyebiliyorduk.
• Yani side effectleri işleyemiyorduk.
• Reaktif davranışlar tam da bu noktada devreye girmektedir. Yani değişmesi
gereken noktaları Reactive Programming ele alacak ve düzenleyecektir.
FUNCTIONAL REACTIVE PROGRAMMING
• Fonksiyonel Programlama sayesinde tekrar tekrar kullanabileceğimiz
fonksiyonlara sahibiz.
• Reaktif Programlama sayesinde sonuçlara etki etme, davranışları etkileme
yani verileri değiştirme / işleme yeteneğine sahibiz.
OBSERVER DESIGN PATTERN
• Geliştirilen uygulama içerisine değişimini izlemek istediğimiz bir değer/obje
için kullanılan tasarım şablonudur.
• import java.util.Observer;
• import java.util.Observable;
OBSERVABLE
• import java.util.Observer;
• import java.util.Observable;
• Observer :: Gözlemci: Herhangi bir nesnenin durumundaki değişiklikten
haberdar olmak isteyen kişi/diğer nesne
• Observable :: Gözlemlenen: Değişikliği gözleyen nesnenin bağlanabileceği
(subscribe olabileceği) değişen/izlenen nesne.
• http://reactivex.io
REACTIVE PROGRAMMING
• Reaktif Programlamanın özünde ne var?
• Reaktif Programlama nasıl çalışır?
• Observation  Subscription  Observing
REACTIVE PROGRAMMING
• Observation  Subscription  Observing
REACTIVE PROGRAMMING
• Observable  Subscription  Observer
REACTIVE PROGRAMMING, Java
public static interface Subscriber<T> {
public void onSubscribe(Subscription subscription);
public void onNext(T item);
public void onError(Throwable throwable);
public void onComplete();
}
REACTIVE PROGRAMMING, JavaScript
const observer = {
next: function(value) {
console.log(value);
},
error: function(err) {
console.error(err);
},
complete: function() {
console.log("Completed");
}
};
REACTIVE PROGRAMMING, Python
class PrintObserver(Observer):
def on_next(self, value):
print("Received {0}".format(value))
def on_completed(self):
print("Done!")
def on_error(self, error):
print("Error Occurred: {0}".format(error))
REACTIVE PROGRAMMING
REACTIVE MANIFESTO
REACTIVE MANIFESTO
• Reactive Programming != Reactive System
• Responsive
• Resillent
• Elastic
• Message Driven

More Related Content

Similar to Reactive programming

agem_intern_report
agem_intern_reportagem_intern_report
agem_intern_report
Meliz Ersoy
 
Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)
Ahmet Yanik
 

Similar to Reactive programming (20)

Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.
 
12factor apps
12factor apps12factor apps
12factor apps
 
Oracle Policy Automation ile Karar Ve Kural Otomasyonu
Oracle Policy Automation ile Karar Ve Kural OtomasyonuOracle Policy Automation ile Karar Ve Kural Otomasyonu
Oracle Policy Automation ile Karar Ve Kural Otomasyonu
 
Microservices Architecture
Microservices ArchitectureMicroservices Architecture
Microservices Architecture
 
Spring application framework
Spring application frameworkSpring application framework
Spring application framework
 
Visual Studio Developer Tools
Visual Studio Developer ToolsVisual Studio Developer Tools
Visual Studio Developer Tools
 
Ajansız log toplama
Ajansız log toplamaAjansız log toplama
Ajansız log toplama
 
Çevik Yaklaşım, Scrum ve XP
Çevik Yaklaşım, Scrum ve XPÇevik Yaklaşım, Scrum ve XP
Çevik Yaklaşım, Scrum ve XP
 
yazılımmuh10.pptx
yazılımmuh10.pptxyazılımmuh10.pptx
yazılımmuh10.pptx
 
GDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme TeknikleriGDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme Teknikleri
 
CIO Grup-Eczacıbaşı Bilişim Etkinliği Sunumu (27.09.2016)
CIO Grup-Eczacıbaşı Bilişim Etkinliği Sunumu (27.09.2016)CIO Grup-Eczacıbaşı Bilişim Etkinliği Sunumu (27.09.2016)
CIO Grup-Eczacıbaşı Bilişim Etkinliği Sunumu (27.09.2016)
 
Çevik Yaklaşım ve Scrum
Çevik Yaklaşım ve ScrumÇevik Yaklaşım ve Scrum
Çevik Yaklaşım ve Scrum
 
Openbravo Gelişmiş Depo Otomasyonu Yazılımı
Openbravo Gelişmiş Depo Otomasyonu YazılımıOpenbravo Gelişmiş Depo Otomasyonu Yazılımı
Openbravo Gelişmiş Depo Otomasyonu Yazılımı
 
SDLC - Software Development Life Cycle
SDLC - Software Development Life CycleSDLC - Software Development Life Cycle
SDLC - Software Development Life Cycle
 
agem_intern_report
agem_intern_reportagem_intern_report
agem_intern_report
 
Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)
 
Yazilim Gelistirme Yöntemleri
Yazilim Gelistirme YöntemleriYazilim Gelistirme Yöntemleri
Yazilim Gelistirme Yöntemleri
 
Engin Ezer Dinamikler 2016
Engin Ezer Dinamikler 2016Engin Ezer Dinamikler 2016
Engin Ezer Dinamikler 2016
 
Bilgi sis..
Bilgi sis..Bilgi sis..
Bilgi sis..
 
Dba için oracle veritabanı 11g yeni özellikleri
Dba için oracle veritabanı 11g yeni özellikleriDba için oracle veritabanı 11g yeni özellikleri
Dba için oracle veritabanı 11g yeni özellikleri
 

Reactive programming

  • 2. ALPER AKALIN ARSUITE IMMERSIVE INTELLIGENCE TECHNOLOGY PLATFORM Java Programmer || Software Architect || Author || Speaker http://arsuite.com http://bilisim.io/author/alperakalin alperakalin@gmail.com https://www.linkedin.com/in/alperakalin1 @alper_akalin
  • 3.
  • 4. DATA, DATA MANIPULATION • Veri Saklama • Veri İşleme • Veriyi elde etme, işleme ortamı, işleme yöntemi çeşitliliği • Data Integrity & Data Consistency
  • 5. OOP, FP • Günümüzde yaygın olan ve ana akım olarak adlandırabileceğimiz programlama dillerinin bir çoğu imperative (procedural) programlama kategorisine girmektedirler. C#, C++, ve Java vb. • Fonksiyonel programlama yazılım alt birimlerini tasarlarken ya da geliştirirken onları birer fonksiyon olarak ele alan yazılım paradigmasıdır. Js, Scala vb. • Input/output • Mutable/immutable
  • 6. SIDE EFFECTS • Bir kahveciden kahvenizi aldınız ve çıktınız. • Belirli bir süre sonra kahvenizden ilk yudumu aldığınızda şeker ve süt eklenmediğini farkettiniz. • Bu durumda kahveciye dönerek yeni bir kahve siparişi vermeli ve tüm süreci yeniden işletmelisiniz. • Bir kahvecide kahve alma sırasına girdiniz. • Kahvenizi alıncaya kadar başka bir iş yapamazsınız. • Telefonuza bakamaz, tweet atamazsınız. • Belki de o tweet ile dünyayı kurtaracaktınız. Kim bilir?
  • 7. REACTIVE PROGRAMMING • Yan etkileri işleyebilecek veya yan etkileri de anında işleme alabilecek şekilde tasarlanmış uygulamalara / kod parçacıklarına Reactive denir. • Reaktif programlar; uygulama çalışırken kod satırlarındaki akışı takip etmek yerine olayları takip ederler. (event)
  • 8. SIDE EFFECTS • Kahvecide beklerken twitter akışını takip etmek kahve alma stream’i içerisinde yan bir olaydır. (side effect). • Kahvecinin iyi bir twitter kullanıcısı olduğunu düşünelim. • Kahveci tweet atarak takipçileriyle promosyon kodu paylaşmaktadır. • Kahvecinin takipçisi sırada beklerken bu promosyon kodunu alarak indirim kazanabilir. • Böylece kahve alma stream’ine; dışarıdan ve stream’i doğrudan etkileyen bir event eklemiş olur. (side effect)
  • 9. EVENTS • Event: Program akışında herhangi bir gelecekte oluşabilecek bir işlem ya da işlem isteği olarak düşünebiliriz. • Side effectleri bir event olarak da düşünebiliriz. • Event e bir yıldız koyalım. Reaktif Programlama; stream’ler üzerine kurulduğundan Stream'leri biraz detaylı konuşalım.
  • 10. COLLECTIONS vs STREAMS • Collection’lar; verileri çeşitli algoritmalar altında tutmaya, gruplamaya ve bu verilerin üzerinde işlem/hesap yapmamıza olanak yarayan yapılardır. • Stream’ler de ise durum biraz farklıdır. Verileri tutmaktan ziyade veriler üzerinde işlem yapmaya yoğunlaşır.
  • 11. COLLECTIONS vs STREAMS • Collection’lar; veriyi gruplayan ve saklayan ve tekrar tekrar işlem yapılmasına izin veren yapılardı. • Herhangi bir collection yaratıldığında bu collection için memory’ de yer ayrılır. Yani rezerve edilir. • Stream’ler ise veriyi saklamayan sadece veri üzerinde işlem yapan ve işlemden sonra bu veriyi unutan yapılardı. • Stream’ler veriyi saklamadıklarından dolayı kaynak tüketiminde daha verimlidirler. Yani memory tüketimi/kullanımı açısından daha efektiftirler.
  • 12. COLLECTIONS vs STREAMS • Bütün programlama dillerinde yapılan işlemler fonksiyon / metotların döndürdüğü değerlere (return) bağlı değil midir? • Herhangi bir metot/fonksiyon için Stream Return veya Collection Return yapılmasındaki farklar nedir? • Java NIO Path ile basit bir okuma işlemi yaptığımızı düşünelim. • static List<String> readAllLinesByCollection(Path path) • static Stream<String> readAllLinesByStream(Path path) *** Search işlemi hangi akışı izler?
  • 13. COLLECTIONS vs STREAMS • Storage • Functinal Behaviour • Laziness-Seeking • Infinite • Multiple Consumption
  • 14. FUNCTIONAL REACTIVE PROGRAMMING • Functional Programlama ile Reactive Programlama aynı şey değillerdir. • Sürekli bir arada kullanıldıklarından zaman zaman aynıymış gibi tanımlandıklarını görmekteyiz. • Birbirlerini tanımlamazlar ancak birbirlerini tamamladıklarını rahatlıkla söyleyebiliriz.
  • 15. DATA FLOW • Reaktif Programlama veri akışlarını ve olayları gözlemlemeyi temel alan bir paradigmadır. • Bir değişikliğin veri akışındaki (data flows) yayılımı ve/veya etkisi üzerine kurulmuştur.. • Büyükmüş küçükmüş ne farkeder, datayı işlemek ruhumuzda var. • Evet veriyi işlemek önemlidir ancak bir o kadar da maaliyetlidir.
  • 16. FUNCTIONAL REACTIVE PROGRAMMING • Fonksiyonel programlama yazılım alt birimlerini tasarlarken ya da geliştirirken onları birer fonksiyon olarak ele alan paradigmadır, demiştik. • Functional programlama da data blokları üzerinde değişiklik yapamıyor sadece var olanı işleyebiliyorduk. • Yani side effectleri işleyemiyorduk. • Reaktif davranışlar tam da bu noktada devreye girmektedir. Yani değişmesi gereken noktaları Reactive Programming ele alacak ve düzenleyecektir.
  • 17. FUNCTIONAL REACTIVE PROGRAMMING • Fonksiyonel Programlama sayesinde tekrar tekrar kullanabileceğimiz fonksiyonlara sahibiz. • Reaktif Programlama sayesinde sonuçlara etki etme, davranışları etkileme yani verileri değiştirme / işleme yeteneğine sahibiz.
  • 18. OBSERVER DESIGN PATTERN • Geliştirilen uygulama içerisine değişimini izlemek istediğimiz bir değer/obje için kullanılan tasarım şablonudur. • import java.util.Observer; • import java.util.Observable;
  • 19. OBSERVABLE • import java.util.Observer; • import java.util.Observable; • Observer :: Gözlemci: Herhangi bir nesnenin durumundaki değişiklikten haberdar olmak isteyen kişi/diğer nesne • Observable :: Gözlemlenen: Değişikliği gözleyen nesnenin bağlanabileceği (subscribe olabileceği) değişen/izlenen nesne. • http://reactivex.io
  • 20. REACTIVE PROGRAMMING • Reaktif Programlamanın özünde ne var? • Reaktif Programlama nasıl çalışır? • Observation  Subscription  Observing
  • 21. REACTIVE PROGRAMMING • Observation  Subscription  Observing
  • 22. REACTIVE PROGRAMMING • Observable  Subscription  Observer
  • 23. REACTIVE PROGRAMMING, Java public static interface Subscriber<T> { public void onSubscribe(Subscription subscription); public void onNext(T item); public void onError(Throwable throwable); public void onComplete(); }
  • 24. REACTIVE PROGRAMMING, JavaScript const observer = { next: function(value) { console.log(value); }, error: function(err) { console.error(err); }, complete: function() { console.log("Completed"); } };
  • 25. REACTIVE PROGRAMMING, Python class PrintObserver(Observer): def on_next(self, value): print("Received {0}".format(value)) def on_completed(self): print("Done!") def on_error(self, error): print("Error Occurred: {0}".format(error))
  • 28. REACTIVE MANIFESTO • Reactive Programming != Reactive System • Responsive • Resillent • Elastic • Message Driven