Bilişim IO - Yazılım, Mobil, Big Data, Yapay Zeka, Machine Learning, Bilim, Teknoloji, Haber, Makale, Tool, Tutorial, Video ve Etkinlik paylaşım platformu
Anasayfa
Java
.Net
Data
Mobil
Pm
IT
Haber
TechTalks
Bizimle Yazın
Anasayfa
Yazılım Metodolojileri
Reactive Programming
Reactive Programming – 1 – Reactive Programlama Nedir?
Reactive Programming
Reactive Programming – 1 – Reactive Programlama Nedir?
By Alper Akalın Last updated Jul 28, 2018
8 10,519
Paylaş
Yeni ve uzun soluklu iki makale serisine başlıyoruz. (Allah utandırmasın) Bu seride reaktif programlamayı ele alacağız. Paralelinde ise microservisler konusunda ilerlemeye çalışacağız. İki konunun özüne kısa bir göz attığımızda data üzerinde yoğunlaştıklarını görmekteyiz. Aslında birbirleriyle de iyi anlaşırlar.
Bu yazı dizisinde konuşacaklarımız tüm programlama dillerine uyarlanabilir. Herhangi bir dil üzerinden ya da salt herhangi bir dili baz alarak ilerlemeyeceğiz.
Bu yazı dizisinde Reactive Programlama, Functional Programlama, Functional Reactive Programming, Stream, Big Data ve Microservice konularında uzunca konuşacağız. Serinin anahtar kelimeleri bunlar olacaklar. İlk olarak temel tanımlamaları yapacağız ardında kod anlamında örnekler eşliğinde ilerleyeceğiz.
Functional Programlama ile Reactive Programlama aynı şeyler 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.
Aslında tüm yazılım dilleri ve paradigmaları data ve/veya veri üzerinde yoğunlaşmıyorlar mı? Yazılım dediğimiz serüven en nihayetinde; veriyi bir yerden alıp, bir şekilde işleyip, bir yere taşıyıp, bir yere yazmak değil midir?
Büyükmüş küçükmüş ne farkeder, datayı işlemek ruhumuzda var diyerek olaya arabesk bir boyut katmaktan zarar gelmeyecektir. Canlılık bile katacaktır. Müslüm Gürses – Hangimiz Sevmedik
Evet data’nın büyüğü küçüğü yoktur, olmamalıdır. Data her anlamda biz yazılımcıların en değerli varlığıdır. Yazılım evriminin bir döneminde veriyi yaratmak ve bir yerlerde saklamak çok büyük önem arz etmekteydi. Günümüzde ise kaydedilmiş veriyi başarılı şekilde işlemek büyük önem arzetmektedir.
Bu iki makale serisinde veri işleme, veriyi işlemek gibi terimler kullanıldığında
veriyi bir yerden alıp, bir şekilde işleyip, bir yere taşıyıp, bir yere yazmak
şeklindeki genel veri işleme süreçleri kastedilmektedir
Günümüzde veri işleme yöntemleri çeşitlendiği gibi verilerin elde edildiği ve işlendiği ortamlarda çok çeşitlenmiştir. Nihayetinde veriyi elde etme ve işleme ortamlarımız arasında bir senkronizasyona, kaliteli ve tutarlı işlem yapma becerisine ihtiyacımız bulunmaktadır. (Data Integrity ve Data Consistency gibi kavramlar incelenebilir.) Bu bağlamda işin tarihsel akışına girmeden ve girişi daha uzatmadan reaktif programlamaya girelim.
Günümüzde çok 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. Bu yaklaşım ya da paradigmaya sahip olan dillerde yazılımcı; problemin çözüm aşamalarını detaylıca adım adım kodlar ve makineler bu kodları adım adım çalıştırıp verileri işleyerek sonuç üretirler. Burada yazılan kod odak noktasını kaybetmez. Yani sadece üzerine aldığı işi bitirmeye odaklanmıştır. Bu kod içerisine bu işlem ile ilgili başka bir değişken, yeni bir değer eklemeye çalıştığımızda çarşı karışır. (side effect) Doğru sonucu üretmek isteyen uygulama yeni gelen veri işlemek için yaptığı tüm işlemleri geri sarmalı (callback) ve hesaplamalarını baştan yapmalıdır. Yani bir işlem bir sıralama içerisinde yapılmalıdır.
Side effects olarak da adlandırabileceğimiz sonradan yapılmış veri değişiklikleri ve/veya veri istekleri ele alınırken kullanılan yöntem, günümüzdeki hız ve verim ihtiyacı düşünülünce yetersiz kalmaktadır.
Güncel hayata uyarlama yaparsak;
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 bilebilir?
Bu noktada başka bir manifesto ya da paradigma olan Reaktif Programlama öne çıkmaktadır. Peki nedir bu Reaktif Programlama.
Reactive Programlama Nedir?
Yan etkileri işleyebilecek veya yan etkileri de anında işleme alabilecek şekilde yapılan tasarımlara sahip uygulamalara / kod parçacıklarına Reactive denir. Örneğin kahve sırasında beklerken başka bir işlemi yapmak side effect’i de program içerisinde işleme almak demektir.
Reaktif programlar; uygulama çalışırken kod satırlarındaki akışı takip etmek yerine olayları takip ederler. (event)
Event
Olayları gelecekte oluşabilecek herhangi bir işlem ya da işlem isteği olarak düşünebiliriz. Bir nevi oluşabilecek side effects olarak da adlandırabiliriz.
Stream
Genelde programlar birden fazla olayı ele aldıklarından bu olaylar bir dizi gibi düşünülebilir ya da bir dizi oluşturabilirler. Bu olaylar dizisine ise Stream denir. (stream of events) Reaktif programlama; stream’ler üzerine kuruludur. Bu stream’ler bir çok yolla uygulamaya ulaşabilir. Uygulama daima bu stream’lere cevap verebilecek durumda olmalıdır.
Güncel hayata uyarlama yaparsak;
Kahvecide beklerken twitter akışını takip etmek kahve alma stream’i içerisinde yan bir olaydır. (side effect)
Ya da kahvecinin iyi bir twitter kullanıcısı olduğunu düşünelim. Kahveci tweet atarak takipçileriyle promosyon kodu paylaşmaktadır. Siz de kahvecinin takipçisi iseniz bu promosyon kodunu kullanarak indirim kazanabilirsiniz. Bakın kahve alma sürecine; dışarıdan ve süreci doğrudan etkileyen bir olay eklemiş olduk. (side effect)
Buradan hareketle Reaktif uygulamalar; aynı anda birden çok olayı –Stream– dinleyerek ya da takip ederek pozisyon alabilen ya da değiştirebilen kod parçacıklarından oluşurlar.
Not: Bu stream’ler birbirlerini refere edilebilir, map’lenebilir ya da karşılatırılabilirler.
Object Oriented Programming, nesneleri baz alarak oluşturulan yazılım deseninin adıdır. Yani yazılımlar; gerçek hayattaki nesneler ve nesnelerin bileşenleri / organları baz alınarak tasarlanmaktadır.
Reactive Programming ise olaylar baz alınarak tasarlanan yazılım deseninin adıdır diyebiliriz. Hayatlarımızda anlık / günlük olarak yüzlerce olay ortaya çıkmaktadır. Bu olayları bazen biz yaratır bazen de sadece tepki veririz. Bu bakımdan reaktif programalamayı yaşanan bir hayat gibi cap canlı bir mekanizma olarak düşünmek oldukça yerinde olacaktır. Bir yerde bir olay var ise bir yerde de bu olaya bir tepki oluşacaktır.
Günümüzde biz mi uygulamaları yönetiyoruz uygulamalar bizi mi çok net değil. Oldukça gri bir çağda yaşıyoruz. Öyle ki yazılımları; hayatımızın her alanında bizlerle birlikte yaşayan elektro organizmalar olarak düşünmeden edemiyor insan. (side effect)
Böyle bir çağda uygulamaları sadece katı nesnel kalıplar içerisinde düşünmek yerine olaylara karşı tepki veren elektro organizmalar olarak düşünmek daha yerinde olmaz mı? (Reactive Programming)
Bir sonraki yazımızda Reactive Manifestoya değineceğiz. Merak edenler buradan Reactive Manifesto inceleyebilirler.
Sonrasında; Functional Programlama, Functional Reactive Programming, Stream, Big Data ve Microservice metodolojilerinin tanımlamalarını yaparak Elektro Organizma evrenindeki yerlerine bakacağız.
BigDataMicroserviceReactive ProgrammingReactiveXStream
8 10,519
Paylaş
Alper Akalın
Java Programmer || Software Architect || Author || Speaker
Önceki makale
Kotlin’e Giriş
Sonraki makale
Java 9 Yenilikleri-1-Ne Oldu?
İlginizi çekebilir Yazarın diğer makaleleri
Reactive Programming
Reactive Programming – 4 – Collections vs Streams
Reactive Programming
Reactive Programming – 3 – Functional Reactive Programming…
Java Core
Java 9 Yenilikleri-3-Reactive Stream (Flow API)
Reactive Programming
Reactive Programming – 2 – Reactive Manifesto
8 Comments
sefa cihangir says 4 years önce
Ağzınıza sağlık, çok teşekkürler hocam.Reaktif programlama da tüm işler asenkron şekilde yürütülüyor diyebilir miyiz?Reaktif programlamayı gerçekleyebilmek için alakalı tüm sistemlerin reaktif özelliği olması gerekir mi mesela veritabanı gibi.
Reply
Alper Akalın says 4 years önce
Teşekkürler Sefa’cım.
Side efect diyebileceğimiz olaylar uygulamaya zaten asenkron olarak dahil olmuyor mu? 🙂
Umuyorum ki tüm sorularına makale serisi içerisnde cevap bulacaksın, az sabır. Burada yazarsak makaleyi yazmayalım değil mi. 🙂
Reply
Serkan Tunç says 4 years önce
Hocam Makale Çok İyi Devamını Bekliyorum Çok Teşekkürler
Reply
Alper Akalın says 4 years önce
Teşekkürler, İnşaallah 😉
Reply
Ahemt Burak says 4 years önce
Devamını bekliyoruz harika bi makale olmuş:) Hatta RxJava ile örnekler verilebilirse minnettar kalırım 🙂
Reply
Alper Akalın says 4 years önce
Teşekkürler Burak,
İnşaallah hedef RxJava yönünde olacak.
Reply
bora says 4 years önce
Makale için teşekkürler, anlaşılabilir derecede basite indirgenmiş makale bulmak hakikaten çok zor.
Reply
Alper Akalın says 4 years önce
Nazik düşünceleriniz için teşekkürler.
Reply
Reply To bora
Yanıtı geri çek
Email adresiniz yayınlanmayacaktır.
Bir dahaki yorum için bilgilerimi bu browserda sakla
Güncel Yazılar
IOS
Swift: Custom Slider
Barış Uyar Nov 27, 2021 0
Blockchain/NFT Temelli Oyunlar 1, Metaverse? Play to Earn Game?,…
Nov 15, 2021
Lojistik Regresyon Neden Lineerdir?
Aug 18, 2021
Singleton Tasarım Kalıbı ve Yapay Öğrenme
Aug 4, 2021
Prev Next 1 of 112
Stay With Us
Facebook Beğen
Twitter Takipçi
Youtube Takipçi
Instagram Takipçi
Linkedin Bize Katıl
446 Posts
Populer Yazılar
MVC Net
ASP.NET MVC 5 Rol bazlı yetki kontrolü
Hakan Lana Jun 6, 2017 0
IdentityRole sınıfı ASP.NET için kimlik doğrulama altyapısını (Authentication) sağlar. Ancak ciddi bir…
IT Security
Python ile Adım Adım Bitcoin Adresi Hesaplama
MVC Net
MVC Ajax POST – Response Obje Kullanımı
Mobil Haber
Android Uygulamalarını Windows 10’da Çalıştırmak
Prev Next 1 of 112
Facebook Facebook'ta Takip Et
Twitter Twitter'da Takip Et
Instagram Instagram'da Takipt Et
Linkedin Linkedin'de Bize Katıl
Anasayfa
Java
.Net
Data
Mobil
PM
IT
Haber
TechTalks
Bizimle Yazın
İş Birliklerimiz
© 2021 Bilişim 10. All Rights Reserved.
Yazılım, Mobil, Big Data, Yapay Zeka, Machine Learning, Bilim, Teknoloji, Haber, Makale, Tool, Tutorial, Video ve Etkinlik paylaşım platformu