Soyutlama VS Bilgi Gizleme VS Kapsülleme


167

Yazılım geliştirmede soyutlama ile bilgi gizleme arasındaki farkın ne olduğunu söyleyebilir misiniz ?

Kafam karıştı. Soyutlama, ayrıntı uygulamasını ve bilgileri gizleyerek bir şeyin tüm ayrıntılarını gizler.

Güncelleme: Bu üç kavram için iyi bir cevap buldum. Oradan alınan birkaç alıntı için aşağıdaki ayrı cevaba bakınız .


"Kapsülleme o zaman bilgiyi, neyin gizli olması gerektiğini gizleyecek ve görünür olması istenen şeyi görünür yapacak şekilde paketleme tekniğidir." ; kapsüllemenin bilgi gizleme yoluyla sağlandığını hatırlamak.
wulfgarpro


alıntı kink kırık
Rishi Dua

Yanıtlar:


152

Kaynağa git! Grady Booch diyor ki (Nesneye Dayalı Analiz ve Tasarım, sayfa 49, ikinci baskı):

Soyutlama ve kapsülleme tamamlayıcı kavramlardır: soyutlama, bir nesnenin gözlemlenebilir davranışına odaklanır ... kapsülleme, bu davranışa yol açan uygulamaya odaklanır ... kapsülleme, çoğunlukla, tüm gizleme işlemi olan bilgi gizleme yoluyla gerçekleştirilir. temel özelliklerine katkıda bulunmayan nesnenin sırları.

Başka bir deyişle: soyutlama = dışsaldaki nesne; kapsülleme (bilgi gizleme yoluyla elde edilir) = nesne içeriden,

Örnek: .NET Framework'te, System.Text.StringBuildersınıf bir dize arabelleği üzerinde bir soyutlama sağlar. Bu arabellek soyutlaması, uygulanmasına bakılmaksızın arabellekle çalışmanıza izin verir. Böylece, arabellek StringBuilderişaretçi gibi şeyleri dahili olarak nasıl izlediğine ve arabellek dolduğunda (bilgi gizleme yoluyla kapsülleme ile yaptığı) belleği yönetmeye bakmadan arabellek dizeleri ekleyebilirsiniz .

rp


5
soyutlama ve kapsülleme gibi tamamlayıcı, kapsülleme ve bilgi gizlemenin de tamamlayıcı olduğunu söyleyebilir misiniz? Tabii, kapsülleme bilgi gizleme yoluyla elde ediliyor, ama ... kapsülleme bilgi gizlemenin gerçekleştirildiği mekanizma değil mi?
wulfgarpro


Kapsülleme en iyi Hizmet Kodu (yani Kapsüllenmiş Sınıfın kendisi) perspektifinden anlaşılırken, Soyutlamanın en iyi şekilde Müşteri kodunun perspektifinden anlaşıldığını söyleyebilir misiniz?
user1338998

Yukarıdaki tanım için Gerçek Dünya Örneği burada açıklanmıştır: stackoverflow.com/a/635755/3181500
user3181500

84

OP, sorusunu Edward V. Berard'ın "Soyutlama, Kapsülleme ve Bilgi Gizleme" başlıklı bir makalesinde bulduğu çeşitli alıntılarla güncelledi . OP'nin güncellemesinin biraz genişletilmiş ve yeniden biçimlendirilmiş bir sürümünü yeniden gönderiyorum, çünkü kendi başına bir cevap olmalı.

(Tüm alıntılar yukarıda belirtilen makaleden alınmıştır.)

Soyutlama:

"Soyutlama ile ilgili bir karışıklık, hem süreç hem de varlık olarak kullanılmasıdır. Soyutlama, bir süreç olarak, bir öğenin veya bir grup öğenin temel ayrıntılarının çıkartılmasını ve gereksiz ayrıntıları göz ardı etmesini ifade eder. varlık, bir modeli, bir görünümü veya gerçek bir öğe için başka bir odaklanmış temsili belirtir. "

Bilgi gizleme:

"Arayüzü veya tanımı, iç işleri hakkında olabildiğince az ortaya çıkarmak için seçildi." - [Parnas, 1972b]

"Soyutlama, hangi bilgilerin gizlenmesi gerektiğini belirlemek için bir teknik olarak kullanılabilir."

"İnsanlar bilginin gizlenmesi ile hangi bilgilerin gizleneceğini tanımlamak için kullanılan bir teknik (örn. Soyutlama) arasında ayrım yapmadığında karışıklık meydana gelebilir."

kapsülleme:

“Bu […] bazı şeylerin toplanması etrafında kavramsal bir engel olması durumunda bir kapsül inşa etmek anlamına gelir.” - [Wirfs-Brock ve diğ., 1990]

"Bir işlem olarak, kapsülleme, bir veya daha fazla öğeyi bir […] kapsayıcısı içine alma eylemidir. Kapsülleme, varlık olarak bir veya daha fazla öğeyi barındıran (içeren, çevreleyen) bir pakete veya bir kasaya işaret eder."

“Eğer kapsülleme 'bilgi gizleme ile aynı şey' ise, 'kapsüllenmiş olan her şeyin de gizli olduğu' iddiası ortaya çıkabilir. Bu kesinlikle doğru değil. "

Sonuç:

"Soyutlama, bilgi gizleme ve kapsülleme çok farklı, ancak yüksek oranda ilişkili kavramlardır. Soyutlamanın, hangi bilgilerin görünür olması ve hangi bilgilerin gizlenmesi gerektiğini belirlememize yardımcı olan bir teknik olduğu iddia edilebilir. bilgileri, neyin gizli olması gerektiğini gizleyecek ve görünür olması istenen şeyi görünür yapacak şekilde paketlemek için. "


pratikte büyük bir açıklama. Java'da somut örnekler sunmak harika olurdu. bana java setter / getter uygulamayı gizlemek, böylece elde Information Hiding(veya uygulama gizleme) iken, jenerik classkapsülleme ve soyutlama privateerişim yoluyla elde edilir
abarik

57

Abstraction temel işlevsellik üzerinde bir katman sağlayarak uygulama ayrıntılarını gizliyor.

Information Hidingsöz konusu uygulamadan etkilenen verileri gizliyor. Kullanımı privateve publicbunun altında gelir. Örneğin, sınıfların değişkenlerini gizleme.

Encapsulationsadece benzer verileri ve işlevleri Classprogramlama gibi bir gruba koymaktır ; Packetağ oluşturma.

Sınıfların kullanımı sayesinde, mümkünse üç kavram uygulamak - Abstraction, Information HidingveEncapsulation


33

Lütfen basit kavramları karmaşıklaştırmayın.

kapsülleme : Veri ve yöntemlerin tek bir birime sarılması Kapsülleme'dir (örn. Sınıf).

Soyutlama : Arka plan detayları dahil edilmeden sadece gerekli şeyleri temsil etme eylemidir. (örn. Arayüz)

ÖRNEKLER VE DAHA FAZLA BİLGİ GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Burada onaylanmış tanımlar

PS: Ayrıca, 11. sınıfta okuduğumuz Sumita Arora tarafından C ++ adlı bir kitabın tanımını hatırlıyorum;)


6

Burada amaçlanan anlama en yakın Oxford İngilizce Sözlüğü (OED) tarafından verilen soyutlamanın anlamı 'Düşüncede ayrılma eylemidir'. Daha iyi bir tanım, 'Arka plan veya gereksiz ayrıntı içermeden bir şeyin temel özelliklerini temsil etmek' olabilir.

Bilgi gizleme, bir yazılım bileşeninin (sınıf gibi) kullanıcılarının, bileşenin nasıl başlatılacağına ve erişileceğine ilişkin temel ayrıntıları bilmesi ve uygulamanın ayrıntılarını bilmesine gerek olmaması ilkesidir.

Düzenleme : Bana öyle geliyor ki soyutlama uygulamanın hangi bölümlerinin gizlenmesi gerektiğine karar verme sürecidir .

Yani onun soyutlama VERSUS bilgi gizleme değil. VIA soyutlamasını gizleyen bilgi.


4

Soyutlama

Soyutlama, arka plan detaylarını içermeden essentail ayrıntılarını temsil etme eylemidir. Soyut bir sınıfın yalnızca yöntem imzaları vardır ve uygulayıcı sınıfın kendi uygulaması olabilir, bu şekilde karmaşık ayrıntılar kullanıcıdan gizlenir. Soyutlama dış görünüme odaklanır. Diğer bir deyişle, Soyutlama arayüzlerin gerçek uygulamadan ayrılmasıdır.

kapsülleme

Kapsülleme, veri üyelerini ve yöntemlerini tek bir birime bağlamayı açıklar. Bilgi gizleme, kapsüllemenin temel amacıdır. Kapsülleme, özel, genel, korumalı gibi erişim belirteçleri kullanılarak elde edilir. Sınıf üyesi değişkenleri özel olarak yapılır, böylece doğrudan dış dünyaya erişilemez. Kapsülleme iç görünüme odaklanır. Başka bir deyişle, Kapsülleme, bir nesnedeki bilgileri diğer nesneden korumak için kullanılan bir tekniktir.


3

Soyutlama, koyduğunuzda uygulamanın ayrıntılarını gizliyor.

Bir şeyi bir eylemi gerçekleştirmek için çok basit bir şey yapmanız gerekecek kadar yüksek bir noktaya soyutlarsınız.

Bilgi gizleme, uygulama ayrıntılarını gizliyor. Programlama zor. Başa çıkmak ve idare etmek için birçok şeyiniz olabilir. Çok yakından takip etmek istediğiniz / ihtiyacınız olan değişkenler olabilir. Bilgilerin gizlenmesi, kimsenin herkese açık olarak ortaya koyduğunuz bir değişken veya yöntemi kullanarak yanlışlıkla bir şeyleri kırmamasını sağlar.

Bu 2 kavram, nesne yönelimli programlamada birbirine çok yakından bağlıdır.


3

Soyutlama - İlgisiz ve sıkıcı ayrıntılar içermeden bir nesnenin temel özelliklerini tanımlama işlemidir.

kapsülleme - Verileri ve bu verileri işleyen işlevleri tek bir birime ekleme işlemidir.

Soyutlama ve Kapsülleme birbiriyle ilişkili ancak birbirini tamamlayan kavramlardır.

  1. Soyutlama süreçtir. Kapsülleme, Soyutlamanın uygulandığı mekanizmadır.

  2. Soyutlama, bir nesnenin gözlemlenebilir davranışına odaklanır. Kapsülleme, bu davranışa yol açan uygulamaya odaklanır.

Bilgi Gizleme - Bir nesnenin uygulama ayrıntılarını gizleme işlemidir. Enkapsülasyonun bir sonucudur.


2

Kapsülleme: veri üyelerini ve üye işlevlerini birbirine bağlama, kapsülleme olarak adlandırılır. kapsülleme sınıf yoluyla yapılır. soyutlama: uygulama ayrıntılarını kullanım veya görünümden gizlemeye soyutlama denir. ör .: int x; int'in dahili olarak nasıl çalışacağını bilmiyoruz. ama int'in işe yarayacağını biliyoruz. bu soyutlamadır.


2

Soyutlama: Soyutlama, bir nesnenin dış görünüşünün ne olması gerektiğini tanımlamak için kullanılan kavram / tekniktir. Yalnızca gerekli arayüzü kullanılabilir hale getirmek.

Bilgi Gizleme: Bilgi gizleme yoluyla Soyutlama elde edildiği için Soyutlamayı tamamlayıcıdır. Dış görünüm dışında her şeyi gizlemek.

Kapsülleme: Veri ve ilgili işlevlerin bir birime bağlanmasıdır. Soyutlama ve bilgi gizlemeyi kolaylaştırır. Soyutlama ve Bilgi gizleme sağlamak için üniteye üye erişimi gibi özelliklerin uygulanmasına izin verme


2

Joel'in Sızdıran Soyutlamalar Kanunu hakkındaki yazısına bakın

JoelOnsoftware

Temel olarak, soyutlama size daha üst düzey kavramları düşünme özgürlüğü verir. Programlamayan bir benzetme, çoğumuzun gıdalarımızın nereden geldiğini veya nasıl üretildiğini bilmememizdir, ancak (genellikle) bunun için endişelenmemiz gerekmiyor, bizi başka şeyler yapmak için serbest bırakır programlama.

Bilgi gizleme konusunda, sıkışmaya katılıyorum.


2

Kısacası

Kapsülleme : - Bilgi gizleme

Soyutlama : - Uygulama gizleme

Abstractionwhat the object doesKapsülleme anlamına gelirken odaklanmanızı sağlarhow an object works


1

Soyutlama, karmaşık bir süreci basit bir süreç olarak ele almanızı sağlar. Örneğin, standart "dosya" soyutlaması dosyaları bitişik bayt dizisi olarak kabul eder. Kullanıcı / geliştirici, kümeler ve parçalanma sorunları hakkında düşünmek zorunda bile değildir. (Soyutlama normalde sınıflar veya alt rutinler olarak görünür.)

Bilgi gizleme, soyutlamalarınızı kötü niyetli / beceriksiz kullanıcılardan korumakla ilgilidir. Orijinal geliştiriciyle bazı durumların (örneğin sabit disk ayırma) denetimini kısıtlayarak, büyük miktarlarda hata işleme gereksiz hale gelir. Dosya sistemi sürücüsünün dışında hiç kimse sabit sürücüye yazamazsa, dosya sistemi sürücüsü sabit sürücüye neyin nerede yazıldığını tam olarak bilir. (Bu kavramın olağan tezahürü privateve protectedOO dillerindeki anahtar kelimelerdir.)


1

Bir şeyi soyutlamak için detayı gizlememiz veya soyutlamak için ihtiyacımız olan bir şeyin detayını gizlememiz gerekir. Ancak, her ikisi de kapsülleme ile elde edilebilir.

Yani, bilgi gizleme bir hedeftir, soyutlama bir süreçtir ve kapsülleme bir tekniktir.


Bunun için bir Java örneği sağlayabilir misiniz?
Chinmay

1

Soyutlama , kullanıcının yazılımı kullanmasına veya çalıştırmasına yardımcı olmak için yalnızca yazılımın sadece gerekli detaylarının kullanıcıya görünür kılındığı, dolayısıyla söz konusu yazılımın uygulama detaylarının gösterilmediği (görünmez hale getirildiği) tekniktir. Kapsülleme , bir veya daha fazla öğeyi barındıran ve dolayısıyla bazı bilgilerin (özellikle program ayrıntıları) görünen ve bazıları kullanıcı tarafından görülmeyen bir paketi olan tekniktir, bu nedenle kapsülleme, bilgi gizleme yoluyla elde edilir. Özetle. Soyutlama gözlemlenebilir davranış (dışsal) ve kapsülleme görünmezlik (içsel) içindir, ancak bu ikisi gerçekten tamamlayıcıdır.


1

Bilgi Gizleme hakkında daha fazla ayrıntı ekleyerek , bulundu Bu bağlantı örneklerle gerçekten iyi bir kaynaktır

Bilgi Gizleme, istenmeyen birleşmeyi önlemek için bir tasarım kararının sistemin geri kalanından gizlenmesi gerektiği fikridir. Bilgi Gizleme bir tasarım ilkesidir. Bilgi Gizleme, şeyleri kapsülleme şeklinizi bilgilendirmelidir , ancak elbette .

Kapsülleme bir programlama dili özelliğidir.


1

Hem Soyutlama hem de Kapsülleme, gerçek dünyadaki şeyleri nesnelere modellemenizi sağlayan dört temel OOP kavramından ikisidir, böylece bunları programınıza ve kodunuza uygulayabilirsiniz. Yeni başlayanların birçoğu Soyutlama ve Kapsülleme arasında karışır, çünkü ikisi de çok benzer görünür. Birisine Soyutlama'nın ne olduğunu sorarsanız, bunun gereksiz ayrıntıları gizleyerek ilgili bilgilere odaklanan bir OOP kavramı olduğunu söyleyecektir ve Kapsülleme hakkında soru sorduğunuzda, birçoğu bunun dış dünyadan verileri gizleyen başka bir OOP kavramı olduğunu söyleyecektir. Hem Soyutlama hem de Kapsülleme bir şeyi gizlediğinden tanımlar yanlış değildir, ancak temel fark niyettedir.

Soyutlama, size daha soyut bir resim, bir çeşit 10.000 feet görünüm vererek karmaşıklığı gizlerken, Kapsülleme daha sonra değiştirebilmeniz için dahili çalışmayı gizler. Diğer bir deyişle, Soyutlama ayrıntıları tasarım düzeyinde, Kapsülleme ise ayrıntıları uygulama düzeyinde gizler.


0

Yukarıdaki tüm cevapları tek tek okuduktan sonra kendimi

soyutlama, işi gerçekleştirebilen, durumlarını rapor edebilen ve durumlarını değiştirebilen ve sistemdeki diğer nesnelerle "iletişim kurabilen" soyut "aktörleri" temsil eden nesneleri tanımlama imkanını içerir.

Ancak kapsülleme yukarıdakilerden oldukça açıktır ->

Kapsülleme terimi, durum ayrıntılarının gizlenmesini ifade eder, ancak veri türü kavramını, davranışı verilerle en güçlü şekilde ilişkilendirmek ve farklı veri türlerinin etkileşim biçimini standartlaştırmak için önceki programlama dillerinden genişletmek, soyutlamanın başlangıcıdır.

referans wiki


0

Ben de Soyutlama ve Kapsülleme kavramları hakkında çok kafam karıştı. Ama soyutlama makalesini görünce myjavatrainer.com'daki Soyutlama ve Kapsülleme'nin Elma ve Portakal olduğu açıkça anlaşıldı, çünkü ikisi de gerekli çünkü onları karşılaştıramazsınız.

Kapsülleme, nesnenin nasıl yaratıldığı ve soyutlama, nesnenin dış dünyada nasıl göründüğüdür.


0

Kapsülleme: veri bağlama ve veriye etki eden yöntemler. bu, diğer sınıflardaki diğer tüm yöntemlerden verilerin gizlenmesini sağlar. örnek: MyListBir öğeyi eklemek bir öğe kaldırmak ve tüm öğeleri yöntemleri kaldırabilir sınıf add, removeve removeAlldışarıdan doğrudan erişilemez listede hareket (özel dizi).

Soyutlama: ilgisiz davranış ve verileri gizliyor. Öğelerin gerçekte nasıl saklandığı, eklendiği veya silindiği gizlidir (soyutlanmıştır). Verilerim basit dizi, ArrayList, LinkedList, vb. Ayrıca, yöntemlerin nasıl uygulandığı dışarıdan gizlenir.


0

Kapsülleme - dahili verilere kontrollü bir şekilde erişimi zorlama veya üyelerin doğrudan erişmesini önleme.

Soyutlama - Belirli yöntemlerin uygulama ayrıntılarını gizleme, soyutlama olarak bilinir

Bir örnek yardımıyla anlayalım: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

Şimdi soyutlama için sadece erişilebilen bir yöntem tanımlayın ve kullanıcı yöntemin gövdesinin ne olduğunu ve nasıl çalıştığını bilmiyor Yukarıdaki örneğe bakalım, dikdörtgenin alanını hesaplayan bir yöntem alanı tanımlayabiliriz.

 public int area()
 {
  return length*breadth;
 }

Şimdi, bir kullanıcı yukarıdaki yöntemi her kullandığında, alanı nasıl hesaplandığı gibi değil. Baskı için kullanıldığını bildiğimiz ve verileri nasıl yazdırdığını bilmediğimiz bir println () yöntemi örneğini düşünebiliriz. Ben daha fazla bilgi için aşağıdaki linke görebileceğiniz ayrıntılı bir blog yazdım encapsulation vs soyutlama


0

Bu terimlerin, https://pascal.computer.org/ adresinde aranabilen standartlaştırılmış IEEE tanımlarına sahip olduğunu belirtmek gerekir. .

soyutlama

  1. belirli bir amaçla ilgili bilgilere odaklanan ve bilginin geri kalanını göz ardı eden bir nesnenin görünümü
  2. bir görünümü formüle etme süreci
  3. basitleştirilmiş bir model oluşturmak için alakasız ayrıntıların bastırılması süreci veya bu sürecin sonucu

Bilgi gizleme

  1. modülün iç çalışmaları ve diğer modüller hakkında her modülün arayüzlerinin olabildiğince az açığa çıktığı yazılım geliştirme tekniğinin, modülün arayüz özelliklerinde olmayan modül hakkında bilgi kullanması engellenir
  2. kararın diğer modüllerden gizlenmesi için tasarım veya uygulama kararının tek bir modülde yer alması

kapsülleme

  1. bir modül içindeki bu veriler üzerinde bir sistem fonksiyonunun veya bir dizi veri ve işlemin izole edilmesinden ve modül için kesin özellikler sağlanmasından oluşan yazılım geliştirme tekniği
  2. bir sınıfın sorumluluklarının isimlerine, anlamlarına ve değerlerine erişim, onların gerçekleşmesine erişimden tamamen ayrılmıştır
  3. bir modülün kendi içinden farklı bir dışa sahip olduğu, harici bir arayüze ve dahili bir uygulamaya sahip olduğu fikri
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.