WRAPPER terimi programlamada nerede ve nasıl kullanılır, ne yapmaya yardımcı olur?


87

Diğer sınıfların veya API'lerin Sarmalayıcılarını veya hatta bazı kodları oluşturma terimini kullanan yazılım geliştiricilerle karşılaşıyorum, bu deneyimli Yazılım Programcıları tarafından kullanılan bir terim

Yani bununla ne demek istediklerine dair herhangi bir fikriniz;

örneğin basit bir soru; iki tür dizi sıralama tekniğimiz var, bunun için bir sarmalayıcı oluşturalım

Yukarıdakiler çok basit bir örnek

Yanıtlar:


137

'Sarmalayıcı' terimi çok fazla atılıyor. Genellikle, başka bir sınıfın bir örneğini içeren, ancak bu örneği doğrudan açığa çıkarmayan bir sınıfı tanımlamak için kullanılır. Sarmalayıcının ana amacı, sarmalanmış nesneyi kullanmak için 'farklı' bir yol sağlamaktır (belki de sarmalayıcı daha basit bir arayüz sağlar veya bazı işlevler ekler).

'Sarıcı' kelimesi, klasik tasarım modellerini tanımlarken de kullanılabilir.

Basitleştirilmiş bir arayüz sağlamak için bir nesneyi sarmak, genellikle 'Cephe' modeli olarak tanımlanır. Sarıcı cephedir.

Bazen belirli bir arayüze uyan bir sınıfa sahip olabilirsiniz, ancak bu arayüze uyması için kodunu değiştiremezsiniz. Bu sınıf için arabirimi uygulayan, ancak çağrıların çoğunu sarmalanmış nesneye yönlendiren bir sarmalayıcı oluşturabilirsiniz. Bu, 'Adaptör' kalıbıdır. Sarıcı adaptördür.

Tanımladığınız örnek, farklı algoritmalar kullanarak dizi sıralaması yapabilen iki sınıfınız olduğunda, bazı nesnelerde bir işlem gerçekleştirmenin bir yolunu sağladığınız 'Strateji' kalıbı gibi görünür, ancak bu işlem için kullanılan algoritma bağlı olarak farklı olabilir. o nesnenin yapısı üzerine.

Örneğin, sıralama algoritmalarınızdan biri 100'den az uzunluktaki diziler için harika olabilir, ancak bu durumda performans bunun için bir sorun olabilir. Diğer algoritma daha büyük diziler için iyi olabilir. Sıralama işlemini destekleyen ancak dizi uzunluğuna bağlı olarak hangi algoritmanın kullanılacağına karar veren iki algoritma için bir 'sarmalayıcı' oluşturabilirsiniz.

Sarmalayıcıların büyük çoğunluğu bir tür karmaşıklığı gizlemek için var.


5
ah, buldum ... teşekkürler :) çok ayrıntılı cevap, benim sarıcı sorunlar çözüldü orada :)
Basit Anwer

Python'da xdress paketi github.com/xdress/xdress vardır . Bir sarmalayıcı üreteci olduğunu söylüyor. Bu bağlamda bu ne anlama geliyor? C'de bir yürütülebilir dosya oluşturuyor mu (bu gerçekten sarmalanmış nesneyi (Python'da) kullanmak için 'farklı' (C'de) bir yol sağlar mı yoksa kafam mı karıştı?

79

Benzetmeyle Basit Açıklama: Sarma nedir?

Açıklamak için kullanılmayan kod.

Örnek 1: Bir iPad, bir iPhone'u "sarar"

İPhone'un yapmadığı ipad ne yapıyor?

Birinin daha büyük ekranı olması dışında temelde aynı şey değiller mi?

Ipad, iphone'u "sarar": yani iphone'un tüm avantajlarına ipad İÇİNDE sahip olursunuz VE daha büyük bir ekranın avantajlarına sahip olursunuz. Ancak temelde, ipad'in içinde bir Iphone yatıyor.

O halde farklı olan ne? Farklı olan tek şey dış kısım: daha büyük bir ekranınız var ve belki de Ipad'den telefon görüşmesi yapamıyorsunuz.

Bir iPad, bir iPad'in içindeki tek şeydir.  Ipad tam anlamıyla Iphone'u sarıyor.  Telefon görüşmesi yapma yeteneği "açığa çıkmadığı" için bir Ipad ile arama yapamazsınız.  Apple, yalnızca bir tane değil x2 ürün satın almanızı istiyor: P

Kelimenin tam anlamıyla "nesneler" ile aynı şey.

............. içeride aynı olan ama farklı bir dış cephe olan tüm güzel şeyler var. Farklı bir paketleyici.

"Sarmalayıcılar temeldeki nesneden farklı özellikleri açığa çıkarabilir" ...... tamam, ama bu ne anlama geliyor?

Bazen paketleyici, içeride erişebileceğiniz şeyleri sınırlayabilir. Örneğin, ipad, içine gömülü iPhone bu özelliğe sahip olsa bile telefon görüşmesi yapma yeteneğinizi sınırlayabilir.

Örnek 2: Manuel bir arabaya sarıcı görevi gören otomatik araba

Otomatik bir araba ve manuel bir araba düşünün. Perde arkasında, otomatik bir arabada, vitesleri sizin için otomatik olarak değiştiren bazı mühendislik mekanizmaları vardır, ancak temelde, yüzeyin altında, araba hala manuel bir arabadır. Başka bir deyişle, arabanın otomatik özellikleri, arabanın manuel işlevselliğini "sarar". Otomatik bir arabada vitesleri kendiniz manuel olarak değiştirmek istiyorsanız - bunu yapamazsınız. Otomatik arabada vites değiştirme yeteneği "açığa çıkmaz". Ancak manuel bir arabada açığa çıkar. Benzetme biraz gergin, ama umarım ne yaptığımı anlarsınız.

Ama bir paketleyicinin amacı nedir?

İşleri basitleştirmek istiyorsanız bir paketleme sınıfı yazarsınız. Kullanımı kolay bir "sarmalayıcı" oluşturursunuz ve tüm karmaşık bitleri paketleyicinin içinde bırakarak bu karmaşık bitlerin "açığa çıkmamasını" sağlarsınız.

Örneğin, altında COM çağrıları yapan bir .net sarmalayıcınız olabilir. Bir sarmalayıcınız yoksa, bu COM çağrılarını kendiniz yapmak zorunda kalırsınız. Neyse ki sarmalayıcıyla, yalnızca .net sarma koduna çağrı yaparsınız - bu da bu COM çağrılarını yapar. Ve umarım bu işleri sizin için basitleştirir.


8
Teknoloji jargonlarını açıklarken bu tür açıklamaları seviyorum. Herhangi bir sitenin bunu özellikle yaptığını biliyor musunuz? Teşekkürler.
viggy28

3
Bu çok mantıklı.
L Dai

11

Sadece, altındaki kodun karmaşıklığını gizlemek için bazı kullanımı kolay kodlar yazarsınız. Daha yüksek seviyeli bir dilden bazı düşük seviyeli API'leri çağırmanız gerektiğinde ve tüm "çirkin" kodu gizlemek istediğinizde özellikle yararlıdır.

Düzenleme: Bu iki wiki makalesinde bununla ilgili daha fazla bilgi bulabilirsiniz: kütüphane ve işlev


4

Bir Sarmalayıcı, gerçek API'yi değiştirmeden bazı API'leri dahili olarak çağırmak için oluşturulan bir koddur.

Bunun bir örneği, Facebook'un Facebook C # SDK'sı yayınlamasıdır . SDK, size belirli yöntemler ve sınıflar vermeden yalnızca temel platformunu çağırmanıza izin verdiği için aslında bir sarmalayıcıdır. Öte yandan, Facebook Developer Toolkit tam API'sidir.


Komut dosyası oluşturan bir C # programı yazmam gerekiyor (komut dosyası dili bir donanım aygıtına özeldir ve çağrılır CoraScript). CoraScript'te yaklaşık 50 kadar komut vardır, örneğin bir cihaza bağlanan, bu cihaza dosya gönderen, Flash belleğinde bir uygulamayı çalıştırmasını söyleyen vb. Bir CoraScript'i elle kodlamak yerine, Böyle bir komut dosyası oluşturacak bir C # kitaplığı oluşturmak gibi. Bu C # kitaplığına wrapper libraryCoraScript kodlama dili için mi denilir?
Minh Tran

Bu komut dosyası dili için komut satırı yorumlayıcısı bir konsol uygulamasıdır. Bu uygulama çalışırken, CoraScript komutlarını alır, bunları yürütür ve o komutun çıktısını döndürür (örneğin, Connect localhostCoraScript komutu +connect,"coralib3.dll version 1,8,11", komutun başarıyla yürütüldüğünü belirtmek için dizeyi döndürür ).
Minh Tran

2

Birçok "sarmalayıcı" örneği vardır ve terim bazen birbirinin yerine kullanılır. Akla gelen birkaç örnek aşağıdadır:

DLL Sarmalayıcı

Geçmişte, COM'u anlayan ancak .NET'i anlamayan eski uygulamalarda .NET'in gelişmiş özelliklerini kullanmak için bir .NET DLL etrafında bir COM sarıcı oluşturmuştum.

Nesne Sarmalayıcı (Java)

Java'da, java.langsekiz ilkel tür için nesne yöntemleri sağlamak üzere pakette sağlanan bir sınıf vardır. Java'daki tüm ilkel sarmalayıcı sınıfları değişmezdir. Dolayısıyla Wrappersınıflar, bir Objectgerekli olduğunda ilkel değerleri temsil etmek için kullanılır .


1

Sarmalayıcı işlevi, asıl amacı ikinci bir işlevi çağırmak olan bir işlev


-1

Diyelim ki kodunuza daha fazla işlev eklemek istiyorsunuz, ancak kodu değiştiremiyorsunuz. Sarıcının yardımcı olduğu yer burasıdır. Orijinal kodu değiştirmeden çıktıyı almak için bir sarmalayıcı kullanabilirsiniz.

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.