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:
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 modelleri
İ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:
air<const Key, T>>
class unordered_map
davranır
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
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:
};
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 modelleri
İ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:
class unordered_map
davranır
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