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?
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
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();
}