Sarıcı sınıfı nedir?


Yanıtlar:


171

Genel olarak, bir sarmalayıcı sınıf, başka bir sınıfın veya bileşenin işlevselliğini "saran" veya "kapsülleyen" herhangi bir sınıftır. Bunlar, temel sınıfın veya bileşenin uygulanmasından bir düzeyde soyutlama sağlayarak yararlıdır; örneğin, COM bileşenlerini saran sarmalayıcı sınıfları, çağırma kodunu rahatsız etmeden COM bileşenini çağırma işlemini yönetebilir. Ayrıca, ilgili sayı arabirimi noktalarını azaltarak temeldeki nesnenin kullanımını basitleştirebilirler; bu genellikle alttaki bileşenlerin daha güvenli kullanımını sağlar.


15
Sarıcı belirli bir arayüze saygı duyması ve polimorfik bir davranışı desteklemesi gerektiğinde bir sargı sınıfı (adaptör olarak) kullanılır. Öte yandan, bir cephenin çalışması daha kolay veya daha basit bir arayüz istendiğinde kullanılır.
Yadu

3
Bu yazı, bir sarıcı bir sonradan bağlanan sınıf için kesinlikle tanımlanmış vekil oluşturmak için yararlı olabileceğini önerilmiştir: Can Geç bağlama kullanın ... . Bu, Paul Sonier'in yukarıda açıklananların ötesinde ambalajlar için geçerli bir ek kullanım mıdır?
Todd

1
@NirajanSingh Wrapper varolan iki arabirimi yeniden kullanır ve biri diğeriyle çalışmasını sağlar. Öte yandan, cephe yeni bir arayüz oluşturur.
Alireza

67

Tam olarak göründüğü gibi: başka bir sınıfın veya API'nın işlevselliğini daha basit veya yalnızca farklı bir API'de "saran" bir sınıf.

Bakınız: Adaptör deseni , Cephe deseni


Evet! Cephe modeli için genellikle eş anlamlıdır. Birçok kod belgesinde, "Wrapper to XX :: yy method" veya "Exra Wrapper to XX :: yy method" in istisna işlemeli "olarak tanımlanan belirgin Cephe yöntemini görüyorum.
Peter Krauss

41

Sarıcı sınıfları, ilkel türleri nesne olarak kullanmanın bir yolunu sunar. Her ilkel için, bir sarıcı sınıfımız var,

int Integer
byte Byte 

Tamsayı ve Bayt, ilkel int ve baytın sarıcı sınıflarıdır. Temel öğeleri nesne olarak kullanmanız gerektiğinde zamanlar / kısıtlamalar vardır, böylece sarma sınıfları boks / kutudan çıkarma olarak adlandırılan bir mekanizma sağlar.

Kavram aşağıdaki örnekle iyi anlaşılabilir:

double d = 135.0 d;
Double doubleWrapper = new Double(d);

int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();

işte bu şekilde, diğer ilkel türlere dönüştürmek için sarıcı sınıf türünü de kullanabiliriz. Bu tür bir dönüşüm, ilkel bir türü nesneye dönüştürmeniz ve bunları diğer ilkelleri almak için kullanmanız gerektiğinde kullanılır. Ancak, kod pasajı aşağıdaki gibi elde edilebildiğinden, basit döküm tekniği ile aynı şey elde edilebilir.

double d = 135.0;
int integerValue = (int) d ;

Çift değer açıkça tamsayı değerine dönüştürülse de alt çizgi olarak da adlandırılır.


1
Cevabınız sarıcı sınıfların yalnızca ilkel nesneler için olduğunu ima eder.
Guillaume F.

17

Bir sarmalayıcı sınıfının başka bir sınıfı sarması gerekmez. Örneğin, bir dll dosyasında bir API sınıfı kaydırma işlevi olabilir.

Örneğin, tüm dll başlatma ve temizleme işlemlerini halledecek ve örn GetProcAddress().

Şerefe!


8

Sarıcı sınıf, tıpkı adı gibi başka bir şeyin etrafına "sarılan" bir sınıftır.

Bunun daha resmi tanımı, Bağdaştırıcı Deseni'ni uygulayan bir sınıf olacaktır . Bu, bir API kümesini daha kullanışlı, okunabilir bir formda değiştirmenize olanak tanır. Örneğin, C # 'da, yerel Windows API'sını kullanmak istiyorsanız, .NET tasarım yönergelerine uygun bir sınıfa sarılmasına yardımcı olur.


2
Bağdaştırıcı modelini anladığım kadarıyla, bir sargıdan farklı: X Y'yi sararsa, X , Y durumunu kapsamalı , ancak kimliğini kapsamamalıdır . Her ikisi de bir Y'yi saran iki X örneği göz önüne alındığında, her iki X örneğinin de aynı Y örneğini sardığını kanıtlayabilmenin hiçbir yolu olmamalıdır. Buna karşılık, bir adaptör nesnesi genellikle kimliği kapsamayacak, ancak durumu kapsamayacaktır; uyarlanan nesnede yapılan bir değişiklik adaptörün kendisinde bir değişiklik olarak değerlendirilmez.
supercat


7

Bazı ortamlarda, sarmalayıcı sınıflarının yapabileceklerinin çoğunun yerine yönler verildiğini belirtmek de değerli olabilir.

DÜZENLE:

Genel olarak bir sargı, sargının uygulanmasıyla ilgili endişe duymadan sargının yaptığı şey üzerinde genişleyecektir, aksi takdirde sarılı sınıfı genişletmeye karşı sarmanın bir anlamı yoktur. Tipik bir örnek, diğer arayüz arayüzlerinin çevresine zamanlama bilgisi veya kayıt işlevselliği eklemektir.

Bu daha sonra Aspect programlama için tipik bir örnek olur. İşlevsel olarak bir arabirim işlevinden geçmek ve kazan plakası günlüğü eklemek yerine, en boy programlama, yöntemler için bir tür normal ifade olan bir nokta kesimi tanımlar ve ardından tüm yöntemlerin eşleştirilmesinden önce, sonra veya çevresinde yürütülmesini istediğiniz yöntemleri bildirirsiniz. nokta kesimi. En-boy programlamanın, sarmalayıcı sınıflarının da kullanılabileceği bir tür Dekoratör deseninin kullanımı olduğunu söylemek her zaman adil olur, ancak her iki teknolojinin de başka kullanımları vardır.


7

Wrapper sınıfı, başka bir sınıfı saran ve istemci ile kaydırılmakta olan orijinal sınıf arasındaki soyutlamayı sağlayan bir sınıftır.


5

bir sarmalayıcı sınıfı genellikle özel özellik olarak bir nesnesi olan bir sınıftır. sarmalayıcı bu özel nesnenin API'sini uygular ve böylece özel nesnenin nerede olacağı bir argüman olarak iletilebilir.

bir koleksiyonunuz olduğunu ve nesneler eklendiğinde bir tür çeviri kullanmak istediğinizi varsa, koleksiyonun tüm yöntemlerini içeren bir sarmalayıcı sınıfı yazarsınız. add () çağrıldığında, sarıcı bağımsız değişkenleri yalnızca özel koleksiyona aktarmak yerine çevirir.

sarmalayıcı, bir koleksiyonun kullanılabileceği her yerde kullanılabilir ve özel nesnenin yine de ona atıfta bulunan ve okuyan başka nesneleri olabilir.


1
Kabul ediyorum, sarmalayıcılar hakkındaki kişisel görüşüm , orijinal tür gibi görünüyor ve hissediyorlar ve aynı arabirimi uygulayabiliyorlar, kesinlikle sarılmış örneğin durumunu koruyorlar. Bunlar üyelere yapılan çağrıları "durdurmanın" bir yolu olarak mevcuttur.
Luke Puplett

3

Bir sarmalayıcı sınıfı, istemci ile kaydırılmakta olan orijinal sınıf arasına bir dolaylama ve soyutlama katmanı eklemek için başka bir sınıfı sarmak için kullanılan bir sınıftır.


3

Sarıcı sınıfı, ilkel bir veri türünün etrafındaki bir sarıcıdır. Karşılık gelen sınıf örneklerindeki ilkel veri türlerini temsil eder, örneğin bir boolean veri türü, bir Boolean sınıf örneği olarak temsil edilebilir. Java'daki ilkel sarmalayıcı sınıflarının tümü değiştirilemez, yani bir sarmalayıcı sınıfı örneğine bir değer atandıktan sonra daha fazla değiştirilemez.


3

Java programlama, ilkel veri türlerini sarıcı sınıf nesnesine karşılık gelecek şekilde dönüştürmek için her ilkel veri türü için sarıcı sınıfı sağlar.


1

Bir sarıcı sınıf refahı yapmak kolay bir iş değildir. Bir sarıcı sınıfın başkaları tarafından nasıl tasarlandığını anlamak da kolay bir iş değildir. Çünkü bu fikir değil, kod değil. Sadece fikri anladığınızda, sarıcıyı anlayabilirsiniz.


0

Sarmalayıcı sınıfları, programcıların temel ihtiyaçlarını karşılamak için - yani yalnızca Nesnelerin izin verildiği yerlerde ilkel değerleri kullanmak için - ortaya çıktı. Adından da anlaşılacağı gibi, sarmalayıcı sınıfları ilkel bir değerin etrafına sarılır ve değeri bir Nesnede tutar. Yani, jenerikler, hashmap anahtarları, Arraylists vb.Gibi ilkellerin izin verilmediği tüm yerler, programcıların artık bu ilkel değerleri karşılık gelen sargı tipleri olarak sağlama seçeneğine sahiptir.

Ek olarak, bu sargı tipleri, ilkel tipten karşılık gelen sargı tiplerine ve sırtına ve ayrıca Dizelerden sargı tiplerine ve sırtına dönüştürmek için bir dizi faydalı metoda sahiptir.

- Ben derinlemesine sarıcı türleri kavramını açıklayan bir Blogumda sarıcı sınıflar ayrıntılı bir yazı yazdım http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Açıklanması - Bu blog bana aittir)


0

Şu anda projem için bir sarıcı sınıf kullandım ve elde ettiğim ana faydalar (konu açıklamasını genişletmek için tek bir fayda):

Özel durum işleme: Benim ana sınıf, başka bir sınıf sarar, varsa, istisnalar atma yöntemleri vardır, bu yüzden istisnaları işleme ve hemen günlükleri bir sarmalayıcı sınıf oluşturdu. Yani, benim ana kapsamımda, istisna yönetimi yoktur. Sadece bir yöntem çağırıyorum ve bir şeyler yapıyorum.

Kolay Kullanım: Nesneyi kolayca başlatabilirim. Normalde başlatma aşaması birçok adımdan oluşur.

Kod Okunabilirliği: Başka bir programcı kodumu açtığında, kod çok açık ve kullanımı kolay görünecektir.

Ayrıntıları Gizleme: Başka bir programcının kullanacağı bir sınıf oluşturuyorsanız, "hata işleme, özel durum işleme, iletileri günlüğe kaydetme vb." Gibi ayrıntıları programlayıcının işlemesi gerekmeyecek şekilde sarabilirsiniz. kaos, sadece yöntemleri kullanır.


0

Bir sarmalayıcı sınıf, yalnızca bir şey tutma ve ona bazı işlevler ekleme amacına hizmet eden bir sınıftır. Java'da ilkeller (ints, float, chars ... gibi) nesne olmadığından, onlara bir tane gibi davranmak istiyorsanız, bir sarmalayıcı sınıfı kullanmanız gerekir. Bir ints Vektörü oluşturmak istediğinizi varsayalım, sorun bir Vector yalnızca ilkel nesneleri değil Nesneleri tutar. Yapacağınız şey tüm ints'ları bir Integer sarmalayıcıya koymak ve bunu kullanmaktır. Misal:

int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();

Bu, sarmak yerine boks ilkelleri olarak bilinir.
cyborg

-8

bir sarıcı, farklı platform arasındaki iki farklı uygulama arasında iletişim kurmak için kullanılan bir sınıftır


Ben sadece bu bir davadan çok daha fazlası için kullanabilirsiniz düşünüyorum
Flexo

1
Gerçekten de, bu sadece küçük bir kullanım durumudur.
praseodym

Bence bu web servislerinin tanımı
Bahadir Tasdemir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.