Abartılı Özet (TM)
Birkaç şey elde edersiniz.
- Prototip palet mirası ve klonlama
- Dinamik yeni özellikler ekleme
- Aynı sınıfın farklı sürümlerindeki nesnelerin (şartname düzeyleri) birlikte varlığı.
- Daha yeni sürümlere (spesifikasyon seviyeleri) ait nesnelerin ekstra "isteğe bağlı" özellikleri olacaktır.
- Özelliklerin tanıtımı, eski ve yeni
- Doğrulama kurallarının tanıtımı (aşağıda tartışılmıştır)
Ölümcül bir dezavantaj var.
- Derleyici yanlış yazılmış dizeleri sizin için kontrol etmez.
- Otomatik yeniden düzenleme araçları, süslü olanlar için ödeme yapmazsanız, mülk anahtarı adlarını sizin için yeniden adlandırmaz.
Mesele şu ki, içgözlem kullanarak içgözlem alabilirsiniz. Genellikle olan budur:
- Yansımayı etkinleştir.
- Projenize büyük bir introspection kütüphanesi ekleyin.
- Çeşitli nesne yöntemlerini ve özelliklerini nitelikler veya ek açıklamalarla işaretleyin.
- İç gözlem kütüphanesinin sihri yapmasına izin verin.
Başka bir deyişle, FP ile arayüz kurmanız gerekmiyorsa, Rich Hickey'in tavsiyelerini almanız gerekmez.
Son olarak, ama en az değil (en güzel), String
özellik anahtarı olarak kullanmak en açık mantıklı olsa da, s'yi kullanmak zorunda değilsiniz String
. Android ™ dahil olmak üzere birçok eski sistem, sınıfları, özellikleri, kaynakları vb. Belirtmek için tam çerçeve kimliklerini tüm çerçeve boyunca kapsamlı bir şekilde kullanır.
Android, Google Inc.'in ticari markasıdır.
Her iki dünyayı da mutlu edebilirsiniz.
Java dünyası için alıcıları ve ayarlayıcıları her zamanki gibi uygulayın.
FP dünyası için,
Object getPropertyByName(String name)
void setPropertyByName(String name, Object value) throws IllegalPropertyChangeException
List<String> getPropertyNames()
Class<?> getPropertyValueClass(String name)
Bu Fonksiyonun içerisinde evet, ama ... akıllı eklenti kullanarak, sizin için dolduracaktır IDE eklentileri çirkin kod vardır okur kodunuzu.
Her şeyin Java tarafı her zamanki gibi performans gösterecektir. Kodun çirkin kısmını asla kullanmayacaklar . Hatta Javadoc'tan gizlemek isteyebilirsiniz.
Dünyanın FP tarafı istedikleri "leet" kodunu yazabilirler ve genellikle kodun yavaş olması konusunda size bağırmazlar.
Genel olarak, nesnenin yerine bir haritanın (özellik çantası) kullanılması yazılım geliştirmede yaygındır. İşlevsel programlamaya veya belirli bir dil türüne özgü değildir. Herhangi bir dil için deyimsel bir yaklaşım olmayabilir, ancak bunu gerektiren durumlar vardır.
Özellikle, serileştirme / serileştirme genellikle benzer bir teknik gerektirir.
"Nesne olarak harita" ile ilgili genel düşünceler.
- Yine de böyle bir "nesne olarak eşleme" işlevini doğrulamak için bir işlev sağlamanız gerekir. Fark, "nesne olarak eşle" seçeneğinin daha esnek (daha az kısıtlayıcı) doğrulama kriterlerine izin vermesidir.
- "Nesne olarak eşle" seçeneğine kolayca ekleme alanları ekleyebilirsiniz.
- Geçerli bir nesnenin minimum gereksiniminin bir belirtimini sağlamak için aşağıdakileri yapmanız gerekir:
- Haritada beklenen "minimum düzeyde gerekli" anahtar kümesini listeleyin
- Değeri doğrulanması gereken her anahtar için bir değer doğrulama işlevi sağlayın
- Birden fazla anahtar değerini kontrol etmesi gereken doğrulama kuralları varsa, bunu da sağlayın.
- Avantajı nedir? Belirtimi bu şekilde sağlamak içgözlemlidir: minimum düzeyde gerekli anahtar kümesini sorgulamak ve her anahtar için doğrulama işlevini elde etmek için bir program yazabilirsiniz.
- OOP'de, bunların tümü "kapsülleme" adı altında kara bir kutuya toplanır. Makine tarafından okunabilir doğrulama mantığı yerine, arayan yalnızca insan tarafından okunabilen "API dokümantasyonunu" okuyabilir (iyi ki varsa).