Programming blog posts

Ay: Mart 2019 (page 1 of 1)

Tasarım Kalıpları Örnekleri (Design Patterns)

Merhabalar,

Bu yazımda sizlere .Net framework içerisinde yer alan tasarım desenlerinden (design patterns) bahsedeceğim. Farkında olmadan bu tasarım desenlerinden  örneklerini farkında olmadan kullanıyoruz.

Factory Tasarım Deseni

Factory tasarım deseni  aynı abstract sınıfı veya arayüzü uygulayan sınıfların üretiminden sorumludur. En çok bilinen ve kullanılan tasarım desenlerinden olan Factory tasarım deseninin .Net framework içerisinde en güzel örneğini Convert sınfında görebiliriz. İlkel veri tipleri arasında tip değişiklikleri yapmamıza olanak sağlar.

Iterator Tasarım Deseni

Kümelenmiş veri setleri üzerinde dolaşmamıza imkan sağlayan bu tasarım deseni. .Net framework içerisinde IEnumerable sınıfı içerisinde örneklenmiştir. IEnumerable arayüzünü implemente etmiş sınıflar,koleksiyonlar(Collections) içerisinde foreach ile tek tek dolaşmamıza imkan verir.

Örnek olarak bir koleksiyon sınıfı olan ArrayList oluşturup bu sınıfın objelerini foreach kullanarak ekranda gösterdim.

ArrayList sınıfının IEnumerable arayüzünü implemente ettiğini aşağıda görebiliriz. Burada Iterator tasarım deseninin bir örneğini görmüş olduk.

Builder Tasarım Deseni

Birden fazla parçadan oluşan nesnelerin üretilmesinden sorumlu bir tasarım desenidir. Builder tasarım deseni .Net Framework içerisinde birkaç yerde kullanılmıştır. En belirgin örneği veritabanı bağlantı cümleciğinin(connection string) oluşturulmasıdır. Aşağıda DataCatalog,InitialCatalog,IntegratedSecurity,Pooling alanları alarak bir sql veritabanı bağlantısı oluşturulmuştur.

.Net framework içerisinde builder tasarım deseninin bir başka örneği de UriBuilder sınıfıdır.

Observer Tasarım Deseni

Observer tasarım desenindeki objeler arasında 1’e n sayıda ilişki tanımlanır ve bir objede değişiklik olduğunda ona bağlı olan diğer objeler de bilgilendirilir ve otomatik olarak güncellenir. Net framework içerisinde örnek olarak event’ler örnek gösterilebilir. .Net Framework’ün 4.0 versiyonu ile birlikte IObserverable arayüzü ile observer tasarımı deseni desteği direk olarak sağlanmıştır.Bir objedeki değişimin ona bağlı objelere bildirim gönderilmesi ve bu objelerin de otomatik güncellenmesi sağlanır.

Decorator Tasarım Deseni

Objelere dinamik olarak yeni özellikler eklenmesinin sağlayan bir tasarım desenidir. .Net Framework içerisinde bu tasarım deseninin en güzel örneği Stream sınıfı ve ondan türetilmiş sınıflardır.

Her biri Stream sınıfından türetilmiş her biri temelde stream’leri işlemek için kullanılır ancak her biri farklı stream çeşitlerine hizmet eder.

Prototype Pattern

Prototip deseninde referans türünden nesneler bir nesne kopyalama şekli olan derin-kopyalama (deep-copy ) metodu ile kopyalanabilir. Bu methotta yeni referans değişkenine atanması için nesneler kopyalanır. Bu, bellekte aynı türden iki nesnenin oluşturulması anlamına gelmektedir. .Net framework içerisinde örnekleri Cloning ve Serialization’dır.

Referanslar

  1. https://stackoverflow.com/questions/3252499/what-design-patterns-are-used-throughout-the-net-framework
  2. http://naveensanks.blogspot.com.tr/2011/07/examples-of-design-patterns-used-in-net.html

Python Programlama Dili Neden Giderek Popülaritesini Arttırıyor?

Sizlere dilim döndüğünce 1991 yılında Guido van Rossum tarafından geliştirilen ve ana feslefesi kod okunabilirliği olan Python programlama dilinin artan popülaritesinin nedenlerini açıklamaya çalışacağım. 2003 yılından itibaren en popüler 10 programlama dili arasına giriş yapan programlama dilinin popülaritesi doğrusal bir şekilde artıyor. Aşağıda 2003-2013 yılları arasında PYPL indeksi sonuçlarından oluşturulmuş grafiği göreceksiniz. PYPL (popularity of a programming language index) ilgili programlama dili üzerine ne kadar sıklıkla araştırma yapıldığını ortaya koyuyor. Elde edilen verilerin Google Trends’ten sağlandığı belirtiliyor. Guido van Rossum 2005-2012 yılları arasında Google bünyesinde çalışmış, Google’dan sonra Dropbox firmasında çalışmaya başlamış ve şu an Dropbox firmasında çalışmaya devam ediyor. Van Rossum’un 2005’te Google çalışmaya başlamasıyla birlikte Google’ın yoğun olarak Python programlama dilini kullanması Python programlama diline olan ilgiyi artırmıştır.

2017 Haziran itibariyle durum aşağıdaki gibi: (http://pypl.github.io/PYPL.html adresinden detaylı inceleyebilirsiniz)

Sitede Python’a artan rağbete de değinilmiş. Son 5 yılda Python ile ilgili araştırmalar yüzde 8,2 oranında artış yaşanırken PHP de yüzde 4,8’lik bir azalma meydana gelmiş.

Bir başka programlama dili popülaritesini inceleyen bir başka indeks olan TIOBE in sonuçları da aşağıdaki gibi: Yine değişimin artı yönde olduğunu görüyoruz. TIOBE indeksi de o programlama dilinde çalışan mühendis sayısı, programlama diline yönelik dersler, arama motorlarında aranma sıklığı gibi parametrelerin birleşiminden oluşturuluyor. Burada dikkat edilmesi gereken bu indeks en iyi programlama dili veya programlama diliyle ne kadar çok kod yazıldığını belirlemeye yönelik değildir. Ayrıca stackoverflow sitesinin yaptığı ankette 2013’ten 2017’ye Python programlama dilinin popülerliği %21’lerden %32’lere çıkmış.

Buraya kadar Python programlama dilinin artan popülaritesini ortaya koyduk. Şimdi bu durumun nedenlerinden bahsedelim. Python programlama dili, öğrenmesi oldukça kolay olan, syntax olarak İngilizce diline oldukça yakın, dinamik bir dil olması sebebiyle oldukça esnek bir yapıya sahiptir, katı kuralları yoktur. Programlamaya yeni başlayanlar için alışması oldukça kolay ve eğlencelidir. Bu eğlence de programlama dilini öğrenmek için gerçekten önemli bir motivasyon. Ayrıca Python ismi sanıldığı gibi piton yılanından değil de İngiliz komedi grubu Monty Python’dan gelmektedir. (http://www.montypython.com/pythons)  2014 Haziran’da yapılan bir araştırmaya göre Amerika’da  Bilgisayar Bilimi bölümlerinde öğrencilere başlangıç programlama dili olarak Python, Java’dan daha fazla tercih edilir hale gelmiş. İlk 10 üniversite içerisinde %80’i, 39 üniversite içerisinde 27’si (%69) Python’u programlamaya giriş dili olarak belirlemişler. Ülkemizde de İTÜ Fizik Mühendisliği bölümünden Berkin Malkoç “Temel Bilimler ve Mühendislik Eğitiminde Programlama Dili Olarak Python” adında bir bildiriye imza atmıştır. Python’un artan popülaritesinin altında kolay öğrenilmesinin yanısıra, geniş bir kullanıcı topluluğuna sahip olması, bilimsel çalışmalara olanak vermesi, çok geniş ölçekte geliştirme yapılabilmesi, veri madenciliği işlemlerini yapabilmesi , derin öğrenme gibi yapay zeka uygulamalarının da geliştirilebilmesi nedeniyle popülaritesini arttırmıştır. Python R programlama dilinden sonra veri madenciliği için en çok kullanılan ikinci yazılım dilidir. Python StackOverflow’da en büyük 5. Topluluğa sahip iken, GitHub’da en çok kullanılan 4. programlama dilidir.Meetup.com topluluğu olarak en büyük üçüncü kitle sahip programlama dilidir.

Python ile birçok geliştirmeler yapan Google’ın desteği de popülariteyi arttırmıştır. Wikipedia, Yahoo, CERN, NASA Python dilini kullanarak geliştirmeler yapmışlardır. Sosyal medya ağı sitesi Reddit tamamen Python diliyle yazılmıştır.

Python oldukça genel bir programlama dilidir. Web uygulamalarında servis geliştirmeden, veri madenciliğine, yapay zeka uygulamalarına, bilimsel hesaplama uygulamalarına, nesnelerin interneti uygulamalarına (IOT) yönelik geliştirmeler yapılabilir.

Python programlama dilinin kullanım alanları:

Web Uygulamaları Geliştirme

                Django ve Pyramid gibi web frameworkları

                Flask ve Bottle gibi micro-framework’ler

                Plone ve django CMS gibi İleri seviye içeri yönetimi istemleri

Python’un standard kütüphaneleri birçok Internet protokolünü destekler:

                HTML ve XML, JSON, E-mail processing, FTP, IMAP ve diğer Internet protokolleri

                Socket programlama arayüzü oldukça kolaydır.

Ayrıca paketlerde daha kullanışlı kütüphaneler mevcuttur:

                Requests gibi güçlü http istemci kütüphanesi

                BeautifulSoup gibi HTML parse(ayrışımı)

                Feedparser gibi RSS besleme kütüphanesi

                Paramiko gibi SSH2 protokolünü adapte etme

                Twisted Python Asenkron ağ programlama kütüphanesi

Python bilimsel ve numerik hesaplamalarda çokça kullanılır.

                SciPy, NumPy,Matplotlib,SageMath matematik,bilim,mühendislik dallarına yönelik paketler

IPython Paralel progralama ve görselleştirmeye izin veren kolayca düzenlenebilen ve kaydedilebilen bir Shell

Yapay zeka uygulamaları:

                Deepy, Caffe,OpenCV, Theano,TensorFlow, Sci-kit Learn, mlpy(Machine Learning Python), NLTK (Natural Language Toolkit), NeuroLab, PyMC

Nesnelerin İnterneti:

Raspberry Pi için temel programlama dili olarak belirlenmiştir.

MQTT Makineler arası bağlantı protokolü

Zerynth IoT ve Endüstri 4.0 uygulamalarına sahip framework

Veri Madenciliği (Data Mining) Uygulamaları:

Orange Veri analizi ve görselleştirme

PyData Python Veri Analiz Kütüphanesi

Pandas veri analizi ve modelleme

Referanslar