Dizayn Paternlerinde IDIOM Kavramı

Reklamlar

Overt Coupling & C++ Friend Class

C++ Friend Sınıf Mekanizması Overt Coupling’e Neden Olur

Bir sınıf başka bir sınıfa ilişkin üyeleri belli bir izin dahilinde kullanıyorsa aralarında overt coupling söz konusudur. Örneğin C++ programlama dilindeki friend anahtar sözcüğüyle belirlenen arkadaş sınıf mekanizması overt coupling’e neden olur. Hatırlanacağı üzere friend sınıf mekanizması, arkadaşlığın tanımlanmış olduğu sınıfa, arkadaşlığın tanımlandığı sınıfın private ve protected üyelerine özel bir erişim yetkisi vermek demektir.

Okumaya devam et

Tasarımda Statik Fonksiyonlar Ne Zaman Kullanılmalıdır ?

Tasarımda Statik Fonksiyonlar Ne Zaman Kullanılmalıdır ?

Tasarım esnasında statik fonksiyonları ne zaman ve hangi gerekçeyle kullanmanız gerektiğine karar veremiyorsanız eğer, şu soruyu kendinize sormanızı öneririm; “söz konusu fonksiyonun temsil ettiği eylem, o sınıfın tüm örneklerinin yapabildiği bir şey midir, yoksa sadece belirli örnekler mi bu eylemi yapabilmektedir ?” Şayet tüm örneklerin yapabildiği bir eylem ise o eylemi statik bir fonksiyonla modellemeli aksi takdirde nesne bağımlı bir fonksiyonla (instance method) modellemelisiniz.

Örneğin insanı ele alırsak, uyumak eylemi her insanın yapabildiği birşeyken, kod yazmak veya kalp ameliyatı yapmak sadece belirli kişilerin yapabildikleri şeylerdir. O halde insanı modelleyen bir sınıfta uyumak statik bir fonksiyonla ancak kod yazmak veya kalp ameliyatı yapmak nesne bağımlı bir fonksiyonla modellenmelidir. Unutmayınız ki nesneler, sınıfın tarif ettiği modele uyan özgün örnekleri temsil ederler.

NOT : Bu yazı Aykut TAŞDELEN’in C++ Java ve C# ile UML ve Dizayn Paternleri kitabından alıntıdır izinsiz kullanılıp alıntı yapılamaz ! Konunun devamı söz konusu kitapta yer almaktadır.

Dependency Injection & Inversion of Control

NOT : Bu yazı Aykut TAŞDELEN’in C++ Java ve C# ile UML ve Dizayn Paternleri kitabından sınırlı bir alıntıdır izinsiz kullanılıp alıntı yapılamaz ! Konunun devamı söz konusu kitapta yer almaktadır.

c++ java ve c# ile uml ve dizayn paternleri kitap

İlk Türkçe C++ ile Dizayn Paternleri kitabı çıktı !

7.1 Dependency Injection ve Inversion of Control Nedir ?

7.1.1 Giriş ve Tespit

Bu patern basit bir anlatımla bağımlılıkların (dependency) yönetimiyle ilgilidir. Nesne yönelimlilik paradigmasına göre yazılım geliştirmek demek; varlıkları nesneler ile modellemek, ve bu nesneler arasındaki olası ilişkiler ve iletişime dayalı programlama yapmak anlamına gelir. Bu durumun doğal sonucu nesnelerin birbirlerine bağımlı hale gelmeleridir. Bağımlılık algısı gerçek hayatta olduğu gibi nesne yönelimli programlama için de olumsuzdur. Bağımlılıklar mümkün olduğunca azaltılmalı ve yönetilebilir olmalıdır. Dependency Injection patern’i bu noktada bir çözüm sağlamayı hedefler.

Okumaya devam et

C++ Header File Circular Dependency Problem & Forward Declaration

Circular Dependency (Döngüsel Bağımlılık) bir antipatern’dir. Nesne veya modüllerin birbirlerini referanse etmesi yoluyla ortaya çıkan sıkı bağlılığın (tigthly coupling) neden olduğu olumsuz bir durumdur. Referans sayma yöntemiyle çalışan garbage collector’lerde (çöp toplayıcılarda) memory leak’lerin oluşması gibi sorunlara neden olabilir. Ayrıca bu tarz modüllerin birisinde yapılacak bir değişikliğin domino etkisi yaratması olasıdır.

C++ programlama dili özelinde include edilmesi gereken header (başlık) dosyaları bu duruma neden olabilir. Örneğin A sınıfının B sınıfı türünde bir pointer’a (göstericiye), B sınıfının da A sınıfı türünde bir pointer’a sahip olduğunu düşünelim.

Okumaya devam et

Interpreter Dizayn Paterni (Yorumlayıcı Kalıbı)

Belirli bir amaç için yazılmış, belirli bir sentaks veya notasyona sahip ifadelerin yorumlanması ve çalıştırılmasını tematize eden paterndir. Sözgelimi roma rakamları ve regex diye bilinen düzenli ifadeler gibi.

Interpreter patern’i son dönemde yazılım dünyasında popüler olan ana akım gui framework’lerinde (WPF, Android, QT gibi) XML ve türevleri ile yazılan dekleratif ifadelerden gui nesnelerinin oluşturulması veya Reporting Service gibi araçlardaki expression’larda ya da Asp.Net gibi web framework’lerindeki veri bağlama (binding) ifadelerinin yorumlanarak gerekli kodların üretimi gibi örneklerde kullanılabilir. (Şüphesiz burada sayılan araç veya teknolojilerin kendi kaynak kodlarını yazarın da bilmesi imkânsız olduğu için bu paragraf bir tahmini ifade etmektedir.)

NOT : Bu yazı Aykut TAŞDELEN’in C++ Java ve C# ile UML ve Dizayn Paternleri kitabından alıntıdır izinsiz kullanılıp alıntı yapılamaz ! Konunun devamı söz konusu kitapta yer almaktadır.

Okumaya devam et