Yazılım Geliştirmede Idioma: Polimorfi ve Modeller
C ++ deyimleriyle ilgili makalelerimde, bu makale özel bir rol üstleniyor, çünkü yakın geçmişte zaten polimorfi ve modellerde çeşitli yerlerde yazdım. Şimdi C ++ 'da sık kullanılan bu deyimler hakkında en önemli gerçekleri özetlemek istiyorum. Kendimi gereksiz yere tekrarlamamak için, bu noktada konunun kısa bir açıklamasını sunmak ve daha ayrıntılı metinlere başvurun.
Polimorfizm ve modeller için deyimler genellikle C ++ 'da önemli bir rol oynar. Bu nedenle her ikisi de sıklıkla kullanılır.
Polimorfik
Polymorphia, farklı türlerin aynı arayüzü destekleyebileceğini garanti eden mülktür. C ++ 'da dinamik ve statik polimorfik arasında bir ayrım yapılır.
Dinamik polimorf
Dinamik polimorfizm yürütme aşamasında gerçekleşir, nesnelere yönelime dayanır ve arayüz ile bir sınıf hiyerarşisinin uygulanması arasındaki ayrılmaya izin verir. Geç nakliye, dinamik sevkiyat veya yürütme sırasında nakliye almak için iki bileşene ihtiyaç vardır: sanallık ve dolaylı olarak bir işaretçi veya referans olarak.
Meraklı tekrarlayan model modeli (CRTP)
CTP'nin ana fikri basit: bir sınıf Derived Bir sınıf modeli tarafından yönetilir Base Kapalı ve taban var Derived model bir konu olarak.
template <typename T>
class Base {
...
};
class Derived : public Base<Derived> {
...
};
Statik polimorf
Statik polimorfi CRTP'ye dayanır. Statik polimorfi derleme sırasında meydana gelir ve çalışma zamanı maliyeti yoktur.
Aşırı yük modeli
Genel olarak, aşırı yük modeli bir tane için gelir std::variant kullanılmış. std::variant Türlerinden birinden bir değere sahip tipe dayanıklı bir birliktir. Std :: Ziyaret, bir ziyaretçinin uygulamasına izin verir. Bu tam olarak C ++ 20'deki aşırı yük modelinin çok pratik olduğu yerdir.
template<typename ... Ts>
struct Overload : Ts ... {
using Ts:
perator() ... ;
};
Modeller
C ++ 'nın birçok yeni deyimle genişlemesinden model.
Karışık
Mixins, yeni bir kodu karıştırmak için sınıfların tasarımında popüler bir fikirdir. Mixins, CTP kullanılarak C ++ 'da uygulanabilir. İyi bilinen bir örnek sınıftır std::enable_shared_from_this.
İfade modelleri
Ekspresyon modelleri genellikle doğrusal cebirde kullanılır ve “derleme sırasında bir hesaplamayı temsil eden yapılardır, bu da yapıların sadece eğlenceli hesaplanması için ürünün etkili kodu için gerekirse değerlendirilir”. Başka bir deyişle: İfade modelleri sadece gerekirse değerlendirilir.
İfade modelleri ile geçici nesneden kaçının
Siyaset
Bir politika, davranışı yapılandırılabilen genel bir işlev veya sınıftır. Siyaset parametreleri için genellikle standart değerler vardır. std::vector VE std::unordered_map Standart modeller kütüphanesinde 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
Vuruş
Özellikler, jenerik tipin özelliklerini sağlayan sınıf modelleridir. Bir sınıf modelinin bir veya daha fazla özelliğini çıkarabilirsiniz.
Bir günün nakliyesi
Etiket gönderimi, genellikle özelliklere dayanan kavramlara dayalı olarak fonksiyonel aşırı yüklemeyi simüle etmek için bir yöntemdir.
Tip İptal
Türün iptali, farklı belirli türlerin genel bir arayüzle kullanılmasını sağlar. C'de void-Mors, C ++ 'da nesnelere veya modellere yönlendirilir.
Sırada ne var?
Bir sonraki makalemde Alex Eisenhut'un konuk katkısını sunmayı seviyorum. Alex tutkusu hakkında rapor verecek: “iyi” yazılım mimarisi.
Modern C ++ Mentorluk (İngilizce)
Özel ders programlarım hakkında bilgi sahibi olmak ister misiniz? BURADA KAYDET
Açık Eğitim (Almanca)
(harita)
Ne yazık ki, bu bağlantı artık geçerli değil.
Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.
Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!
Yazılım Geliştirmede Idioma: Polimorfi ve Modeller
C ++ deyimleriyle ilgili makalelerimde, bu makale özel bir rol üstleniyor, çünkü yakın geçmişte zaten polimorfi ve modellerde çeşitli yerlerde yazdım. Şimdi C ++ 'da sık kullanılan bu deyimler hakkında en önemli gerçekleri özetlemek istiyorum. Kendimi gereksiz yere tekrarlamamak için, bu noktada konunun kısa bir açıklamasını sunmak ve daha ayrıntılı metinlere başvurun.

Polimorfizm ve modeller için deyimler genellikle C ++ 'da önemli bir rol oynar. Bu nedenle her ikisi de sıklıkla kullanılır.
Polimorfik
Polymorphia, farklı türlerin aynı arayüzü destekleyebileceğini garanti eden mülktür. C ++ 'da dinamik ve statik polimorfik arasında bir ayrım yapılır.
Dinamik polimorf
Dinamik polimorfizm yürütme aşamasında gerçekleşir, nesnelere yönelime dayanır ve arayüz ile bir sınıf hiyerarşisinin uygulanması arasındaki ayrılmaya izin verir. Geç nakliye, dinamik sevkiyat veya yürütme sırasında nakliye almak için iki bileşene ihtiyaç vardır: sanallık ve dolaylı olarak bir işaretçi veya referans olarak.
Meraklı tekrarlayan model modeli (CRTP)
CTP'nin ana fikri basit: bir sınıf Derived Bir sınıf modeli tarafından yönetilir Base Kapalı ve taban var Derived model bir konu olarak.
template <typename T>
class Base {
...
};
class Derived : public Base<Derived> {
...
};
Statik polimorf
Statik polimorfi CRTP'ye dayanır. Statik polimorfi derleme sırasında meydana gelir ve çalışma zamanı maliyeti yoktur.
Aşırı yük modeli
Genel olarak, aşırı yük modeli bir tane için gelir std::variant kullanılmış. std::variant Türlerinden birinden bir değere sahip tipe dayanıklı bir birliktir. Std :: Ziyaret, bir ziyaretçinin uygulamasına izin verir. Bu tam olarak C ++ 20'deki aşırı yük modelinin çok pratik olduğu yerdir.
template<typename ... Ts>
struct Overload : Ts ... {
using Ts:
};
Modeller
C ++ 'nın birçok yeni deyimle genişlemesinden model.
Karışık
Mixins, yeni bir kodu karıştırmak için sınıfların tasarımında popüler bir fikirdir. Mixins, CTP kullanılarak C ++ 'da uygulanabilir. İyi bilinen bir örnek sınıftır std::enable_shared_from_this.
İfade modelleri
Ekspresyon modelleri genellikle doğrusal cebirde kullanılır ve “derleme sırasında bir hesaplamayı temsil eden yapılardır, bu da yapıların sadece eğlenceli hesaplanması için ürünün etkili kodu için gerekirse değerlendirilir”. Başka bir deyişle: İfade modelleri sadece gerekirse değerlendirilir.
İfade modelleri ile geçici nesneden kaçının
Siyaset
Bir politika, davranışı yapılandırılabilen genel bir işlev veya sınıftır. Siyaset parametreleri için genellikle standart değerler vardır. std::vector VE std::unordered_map Standart modeller kütüphanesinde 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
Vuruş
Özellikler, jenerik tipin özelliklerini sağlayan sınıf modelleridir. Bir sınıf modelinin bir veya daha fazla özelliğini çıkarabilirsiniz.
Bir günün nakliyesi
Etiket gönderimi, genellikle özelliklere dayanan kavramlara dayalı olarak fonksiyonel aşırı yüklemeyi simüle etmek için bir yöntemdir.
Tip İptal
Türün iptali, farklı belirli türlerin genel bir arayüzle kullanılmasını sağlar. C'de void-Mors, C ++ 'da nesnelere veya modellere yönlendirilir.
Sırada ne var?
Bir sonraki makalemde Alex Eisenhut'un konuk katkısını sunmayı seviyorum. Alex tutkusu hakkında rapor verecek: “iyi” yazılım mimarisi.
Modern C ++ Mentorluk (İngilizce)
Özel ders programlarım hakkında bilgi sahibi olmak ister misiniz? BURADA KAYDET
Açık Eğitim (Almanca)
(harita)
Ne yazık ki, bu bağlantı artık geçerli değil.
Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.
Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!