C Dilinde Iterator Yazılım Tasarım Deseni

Tüm yazılım tasarım desenleri, C dilinde de uygulanabilir. C, nesne yönelimli bir dil olmadığından dolayı C yazarken yazılımı dizayn etmek biraz daha zordur. Fakat, C kullanırken de nesne yönelimli gibi kullanabiliriz. Bununla alakalı yazdığım bir önceki yazıma göz atabilirsiniz. Zaman buldukça C dilinde tüm yazılım desenleri kod örnekleri vermeye çalışacağım. Bu yazıda C de Iterator tasarım deseninden örnek vereceğim.

Öncelikle Iterator yazılım desenini biraz açıklayayım. Bu tasarım desenini niçin kullanıyoruz? Tasarımda hangi problemleri bu desen ile çözebiliriz?

Problem:

Örneğin art arda işlemesi gereken büyük veri yapılarınız  ya da sınıflarınız var.  Bu veri yapıları ya da sınıflar arasında şeffaf geçişler sağlamak adına böyle bir tasarım deseni kullanabilirsiniz.  Gerçek bir örnek vermek gerekirse,  art arda belli zaman periyotları içerisinde belli işler yaptıracağınız bir program olabilir.  Bu durumda böyle bir tasarım deseni kullanılabilir.

Dizayn:

Art arda veya belli bir düzene göre işlenmesi gereken veri yapılarını veya sınıfları öncelikle bir Soyut(Abstract) sınıf altında topluyoruz.  Daha sonra, bir çatı altına topladığımız sınıfları listeleyen bir liste sınıf oluşturarak bu sınıfları bir liste haline getiriyoruz. Son olarak da bu listeyi teker teker iterasyon halinde işleyecek bir sınıf yazarak tasarım desenini tamamlıyoruz.

 

Örneğin yukarıdaki şemadaki gibi bir tasarım yapacağız. 3 zaman periyodumuz var.  Bu zaman periyotlarını iterasyona tabi tutarak belli zaman aralıkları ile belli fonksiyonları tetikliyoruz.  Bu operasyon için 3 tane “Periyod” nesnesinden oluşturup bu nesne sınıflarını “TimePeriyod”  Soyut(Abstract) sınıf altında topluyoruz.  Bu sınıfları iterasyon ile art arda çalışmalarını sağlamak için bir liste haline gitrmek gerekiyor. Bu işlemi “TimePeriodList” sınıfı ile gerçekleştiriyoruz. “Iterator” sınıfı ise liste sınıfından periyot nesnelerini sırayla çekip o periyotlarda yapılması gerekenleri yapan fonksiyonları çağırıyor.

İşte bu kadar.

Bu sefer programı github hesabımdan paylaşacağım.

https://github.com/electronicengine/design_patterns_c/tree/master/iterator

Yusuf

Yusuf

Bir Mühendis.

Önerilen makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Translate »