Yazılım geliştirmede deyimler: polimorfizm ve şablonlar

Adanali

Member


  1. Yazılım geliştirmede deyimler: polimorfizm ve şablonlar

C++ deyimleriyle ilgili makaleler dizimde bu gönderi özel bir yer tutuyor çünkü yakın geçmişte çeşitli yerlerde çok biçimlilik ve örüntüler hakkında yazılar yazdım. Ama şimdi C++’da sıkça kullanılan bu deyimler hakkında en önemli gerçekleri özetlemek istiyorum. Ancak gereksiz yere kendimi tekrar etmemek için burada kendimi konunun kısa bir tanımını sunmakla ve daha derinlemesine metinlere atıfta bulunmakla sınırlayacağım.








Polimorfizm ve şablonlar için deyimler genel olarak C++’da önemli bir rol oynar. Bu nedenle her ikisi de sıklıkla kullanılır.

polimorfizm


Polimorfizm, farklı türlerin aynı arabirimi desteklemesine izin veren özelliktir. C++’da dinamik ve statik polimorfizm arasında bir ayrım yapılır.

Dinamik polimorfizm


Dinamik polimorfizm, çalışma zamanında oluşur, nesne yönelimlidir ve arayüz ile bir sınıf hiyerarşisinin uygulanması arasında ayrılmaya izin verir. Geç bağlama, dinamik gönderim veya çalışma zamanı gönderimi elde etmek için iki bileşen gerekir: sanallık ve işaretçi veya referans gibi bir dolaylı.


Merakla Yinelenen Model Şablonu (CRTP)


CRTP’nin ana fikri basittir: bir sınıf Derived bir sınıf modelinden geliyor Base kapalı ve taban Derived bir model argümanı olarak.


template <typename T>
class Base {
...
};

class Derived : public Base<Derived> {
...
};


statik polimorfizm


Statik polimorfizm, CRTP’ye dayalıdır. Statik polimorfizm, derleme zamanında oluşur ve çalışma zamanı maliyeti yoktur.

aşırı yük modeli


Tipik olarak, aşırı yük modeli bir std::variant kullanmak için. std::variant türlerinden birinin değerine sahip tür güvenli birleşimdir. std::visit ona bir ziyaretçi uygulamanıza izin verir. C++20’deki aşırı yük modelinin kullanışlı olduğu yer burasıdır.


template<typename ... Ts>
struct Overload : Ts ... {
using Ts::eek:perator() ... ;
};


modeller


Şablonlar, C++’ı birçok yeni deyimle genişletir.

karışımlar


Karıştırmalar, yeni kodu karıştırmak için sınıflar tasarlarken popüler bir fikirdir. Mixin’ler, CRTP kullanılarak C++’da uygulanabilir. İyi bilinen bir örnek, sınıftır. std::enable_shared_from_this.

ifade kalıpları


İfade kalıpları tipik olarak doğrusal cebirde kullanılır ve “derleme zamanı hesaplamasını temsil eden yapılardır, bu yapılar yalnızca tüm hesaplama için verimli kod üretmek için gerektiğinde değerlendirilir”. Başka bir deyişle: İfade şablonları yalnızca gerektiğinde değerlendirilir.

İfade kalıplarıyla geçici nesnelerden kaçının

Siyaset


İlke, davranışı yapılandırılabilen genel bir sınıf veya işlevdir. Tipik olarak, ilke parametreleri için varsayılan değerler vardır. std::vector VE std::unordered_map Standart Şablon Kitaplığındaki bu tasarım fikrinin örnekleridir.


template<class T, class Allocator std::allocator<T>>
class vector;

template<class Key,
class T,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
class allocator = std::allocator<std::pair<const Key, T>>
class unordered_map


özellikler


Nitelikler, genel bir türün özelliklerini sağlayan sınıf şablonlarıdır. Bir sınıf modelinin bir veya daha fazla özelliğini ayıklayabilirsiniz.

gönderen etiketler


Etiket gönderimi, genellikle özellik tabanlı olan kavramlara dayalı olarak özellik aşırı yüklemesini simüle etmek için bir yöntemdir.

İptali girin


Type Erasure, genel bir arayüzle farklı beton türlerini kullanmanıza olanak tanır. C’de dayanmaktadır void-işaretçiler, C++’da nesne veya model oryantasyonu için.

Sıradaki ne?


Bir sonraki yazımda, Alex Eisenhut’un konuk katkısını sunmaktan mutluluk duyuyorum. Alex tutkusundan bahsedecek: “iyi” yazılım mimarisi.


Modern C++ Danışmanlığı (İngilizce)

Mentorluk programlarımdan haberdar olmak ister misiniz? buradan kaydolun

Açık eğitim kursları (Almanca)






(harita)



Haberin Sonu
 
Üst