“Veri gizleme” ve “kapsülleme” arasındaki fark nedir?


29

"Uygulamada Java eşzamanlılığı" okuyorum ve şöyle söylendi: "Neyse ki, iyi düzenlenmiş, korunabilir sınıflar yazmanıza yardımcı olan aynı nesne yönelimli teknikler - kapsülleme ve veri gizleme gibi sınıflar."

Problem # 1 - Verilerin gizlendiğini duymadım ve ne olduğunu bilmiyorum.

Sorun # 2 - Ben her zaman kapsüllemenin kamuya karşı özel kullanıyor olduğunu ve aslında veri gizleme olduğunu düşündüm.

Hangi verilerin saklandığını ve kapsüllemeden nasıl farklı olduğunu açıklayabilir misiniz?


2
Kodu oku 2. baskı tamamlandı . Sorunuzun çoğuna cevap verecektir.
Shiplu Mokaddim

Bilgi gizleme ile ilgili olarak, bakınız: javaworld.com/jw-05-2001/jw-0518-encapsulation.html
Dave Jarvis

Bu link, bu Bilgi ile ilgili faydalı fikirlere sahiptir. Tasarım ilkesini gizlemek , istenmeyen eşleşmeyi önlemek için tasarım kararının sistemin geri kalanından gizlenmesi gerektiğini belirtir. Bir şeyleri içine alma şeklinizi bildirmeli, ama elbette buna gerek yok. Kapsülleme bir programlama dili özelliğidir.
Abhijeet,

Yanıtlar:


19

Veri ve bilgi gizleme, bilgisayar bilimleri ve yazılım mühendisliğinde bulunan daha geniş bir kavramdır. Değişen bir bilgisayar programının bu kısmının diğer modüllerden / istemcilerden erişilebilir olmaması gerektiği anlamına gelir.

Kapsülleme, Nesne Yönelimli paradigmada bulunan ve verileri özel alanlarda tutmak ve sadece yöntemlerle değiştirmek anlamına gelen bir terimdir.

Dolayısıyla, kapsülleme, nesne yönelimli sistemlerde veri gizlemeyi başarmanın bir yolu olarak görülebilir .


1
Cevabınız için teşekkür ederim. Yine de anlamıyorum, neden veri gizleme aynıysa, ancak kapsülleme işleminden biraz daha genişse, kitapta bir başkasıyla değil, aynı genişlikte olduğu anlaşılıyor.
dhblah

Yazarlar muhtemelen veri gizleme ve bilgiyi gizleme anlamında bir fark yaratır; veri gizleme sadece veri yapılarını gizler - özel alanlar - bilgi gizleme uygulama detaylarını (örneğin, kullanılan algoritmalar) iletişimin sadece arayüzler üzerinden yapılmasını ifade edebilir.
m3th0dman

2
Diğerine sahip olmadan bir tanesine sahip olabilirsiniz - Python'a bakın, hiçbir yerde saklanacak bir veri yok (özel veya korumalı bir özellik gibi).
Latty

@ Lattyware'in noktası çok doğru ve önemlidir. Biri ayrıca (burada tarif ettiğim şey nedeniyle itiraz ettiğim tanımına göre) bir şeyi gizlemeden, yani her üye için önemsiz bir alıcıyı ve belirleyiciyi kör bir şekilde açığa vurmak suretiyle kapsülleme yapabilir. Bu hiçbir şeyi gizlemez ve hiçbir şeyi engellemez, ancak mektuba enkapsülasyonun genel tanımını yerine getirir.

1
Kapsülleme, verileri özel alanda tutmak değildir, bu daha fazla bilgi gizlenmesidir. Kapsülleme, genel olarak, bilgi / veri ve yöntemleri bir sınıfa koyma (kapsülleme) kavramıdır.
nbro

6

Kapsülleme ve veri gizleme ilgili terimlerdir. Soyutlama ile ilgili olarak ortaya çıktıklarını anlamak önemlidir . Booch ve diğ. ark. içinde Nesne Tabanlı Uygulamalar ile Analizi ve Tasarımı açıklıyor,

Soyutlama ve kapsülleme tamamlayıcı kavramlardır: Soyutlama, bir nesnenin gözlenebilir davranışına odaklanırken, kapsülleme bu davranışa yol açan uygulamaya odaklanır. Kapsülleme, en çok, temel özelliklerine katkıda bulunmayan bir nesnenin tüm sırlarını gizleme süreci olan bilgi gizleme (yalnızca veri gizleme değil); tipik olarak, bir nesnenin yapısı ve yöntemlerinin uygulanması gizlenir.


5

Bir sınıf oluşturmak, kapsülleme kavramını içerir. Bir sınıf oluşturduğunuzda veriyi ve davranışları sınıfın içine koyarsınız ve sınıf bir nesne dediğimiz bir birim haline gelir. Dolayısıyla veri gizleme, kapsüllemenin bir parçasıdır.


4

Gönderen Vikipedi :

Bir programlama dilinde, kapsülleme iki ilişkili fakat farklı kavramdan birine ve bazen bunların kombinasyonuna atıfta bulunmak için kullanılır:

  • Nesnenin bileşenlerinin bazılarına erişimi kısıtlamak için kullanılan bir dil mekanizması .
  • Verilerin bu veriler üzerinde çalışan yöntemlerle (veya diğer işlevlerle) birleştirilmesini kolaylaştıran bir dil yapısı .

Bazı programlama dili araştırmacıları ve akademisyenleri, birinci anlamı tek başına veya ikincisi ile birlikte nesne yönelimli programlamanın ayırt edici bir özelliği olarak kullanırken, sözcüksel kapanma sağlayan diğer programlama dilleri de endikasyonu nesnenin oryantasyonuna dik bir dil olarak görür.

İkinci tanım, birçok OOP dilinde bileşenlerin gizlenmesinin otomatik olmadığı veya geçersiz kılınabilmesi; Böylece bilgi gizleme, ikinci tanımı tercih edenler tarafından ayrı bir kavram olarak tanımlanır.


Cevabın için teşekkürler. Bir takip soruları: 1) Java programlama dili, kapsülleme ile ilgili ikinci fikrin ifade ettiği imkanlara sahip mi? 2) Verilerin gizlenmesinin neden önemli olduğunu anlamadım. Örneğin, java'da yansıma yoluyla herhangi bir alana (genel veya özel) erişebilirsiniz.
dhblah

@ Yazılım Mühendisliği Öğrenen: Kaynak kod yapıları olarak sınıflar ikinci kavramı temsil eder. Bilgiyi gizlemeye gelince, amaç veri sınırlamasının genellikle belirli ve ayrı dil mekanizmalarına dayanmasıdır.
Michael Borgwardt

2

Tartışmalarda sıklıkla birbirlerinin yerine kullanılırlar ve sıklıkla aynı amacı gerçekleştirmek için birlikte çalıştıklarını düşünüyorum ve aşağıdakiler tam olarak doğru olmasa da, bir ayrım yapılması gerekiyorsa anlamlı bir ayrım sağlayabilir:

Kapsülleme hakkında konuşurken, çoğu zaman prosedürel / işlevsel bir mekanizma olarak uygulanır. Temel durum için bir tür koruma vardır ve korumadan erişim, erişim için belirli protokollerin izlenmesini gerektirir (istenen durumu okuyun veya değiştirin). Kapsülleme ayrıca erişim nedeniyle (kademeli durum değişikliği ya da bir olayı bildirme / yükseltme / ilgilenilen bir şey okunduğunda veya değiştirildiğinde bir sinyal verir) ortaya çıkması nedeniyle yan etkilerin ortaya çıkması için fırsat sunar. Yine, sık sık kapsüllemeyi bir prosedür olarak uygulanan bir kavram olarak düşünüyorum.

Veri gizleme kavramının kapsülleme amacı ile benzer olduğunu düşünüyorum; ancak, mekanizma yapısaldır ve farklı bir seviyede çalışır. Uygulamada, prosedür yoluyla bir bekçi ve yan etki mekanizması sağlamak yerine, dil ve çalışma zamanının yapısal mekanizmalarıyla devlet korunmakta ve etkilenmektedir. Bu tip gardiyanlar görünürlük maddeleri, tür tanımları, kalıtım ve benzeri olacaktır. Yapısal olarak korunan nesnelerden yararlanabileceğiniz yan etkiler, yine dile ve çalışma süresine bağlı olan bir şeydir: belki de nesne aktivasyonu, referans sayısı veya bu satırlar boyunca bir şey.


0

Genellikle, belki de genellikle birbirlerinin yerine kullanılırlar. Ancak, yukarıdaki Booch teklifinin "Enkapsülasyon, genellikle bilgi gizleme yoluyla elde edilir ...", yani çoğu zaman, ancak her zaman her zaman değil, olduğunu söyler .

Python'un sınıfta veri toplamaya izin verdiğini ancak özel değişkenlere izin vermediğini unutmayın. Böylece Python'un veri gizlemeden kapsülleme sağladığı söylenebilir.

Aynı şeyi Java'da tüm üye değişkenlerinizi yaparak da yapabilirsiniz public, ancak herkese kalp krizi vermenin yanı sıra, bir nesnenin semantiğini durumunu kısıtlayarak erişimini koruyarak veri gizleme avantajını da kaybedersiniz.


0

Nesneye yönelik, Kapsülleme bilgiler bir nesne içinde tutulan yerdir. Örneğin, bir Kişinin Personbir nameve müşterisi vardır (örneğin siz) , Kişinin bir ortak alana veya erişimci yöntemlerine göre bir adı olduğunu biliyor . Ve umarım, bazı küresel isimler dizisindeki isimleri de tutmanız gerekmez. Bu, yönetilemez makarna kodundan kaçınmak için bu büyük bir adımdır. Ancak müşterinin, Kişilerin adları nasıl kullandığı hakkında bir şeyler bilmesi gerekir: örn. Boşluk veya virgülle ayrılmış?

Veri Gizleme , Personbir ad alanına sahip olan alandır, ancak en azından teoride kimse bilmiyor . Alan, halka açık erişim yöntemleri olmadan özeldir. İstemciler, bir veritabanı kaydından bir ad alabilir, XML, HTTP POST, her neyse, ancak Kişinin adı nasıl kullandığına dair dahili çalışma "kara kutu" dur. Kişinin gelecekteki uygulamaları, örneğin firstNamebirlastName .

İdeal bir dünyada Veri Gizleme, Kapsülleme'den üstündür, ancak tüm dünyalar ideal değildir. :-)

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.