Kapsülleme mi, Soyutlama mı?


137

İşte kapsülleme ve soyutlamanın kısa tanımları.

Soyutlama:

Java'daki soyutlama işlemi, belirli ayrıntıları gizlemek ve yalnızca nesnenin temel özelliklerini göstermek için kullanılır. Başka bir deyişle, bir nesnenin (arayüz) dış görünümü ile ilgilenir. Bunun için farklı sitelerde gördüğüm tek iyi örnek arabirimdir.

kapsülleme:

Temel olarak, özel, kamu, korunan vb. Gibi değiştiricilerin yardımıyla nesnenin durumunu gizleme ile ilgili olarak, devleti sadece ihtiyaç duyulduğunda kamu yöntemleriyle ortaya koyarız.

Gibi biz değiştiricileri ile elde ne private, publicaynı zamanda hiçbir şey değil, aynı zamanda bir soyutlama kavramdır yan dünyaya dışarı gereksiz ayrıntıları gizler

Yani, yukarıdaki açıklama, kapsüllemenin soyutlamanın bir parçası olduğu ya da bunun bir soyutlamanın alt kümesi olduğunu söyleyebiliriz. Ama neden kapsülleme terimi sadece soyutlama ile başa çıkabileceğimiz zaman icat edilir? Eminim onları ayıran büyük bir fark olmalı ama internetteki materyallerin çoğu her ikisi için de hemen hemen aynı şeyi söylüyor.

Bu soru daha önce bu forumda da dile getirilmiş olsa da, yine belirli şüphelerle gönderiyorum. Bazı cevaplar aynı zamanda soyutlamanın bir kavram ve kapsüllemenin bir uygulama olduğunu söylüyor. Ama bunu satın almıyorum - eğer doğruysa, bu iki farklı kavramın bizi şaşırtmak için sağlandığını düşünebilirim.

Güncelleme: - 5 yıl sonra kendi cevaplarımı bu yazıdaki ve altındaki cevaplara dayanan özü buldum

  1. ve kapsülleme arasındaki fark nedir?
  2. kapsülleme vs soyutlama gerçek dünya örneği

Yukarıda tanımlandığı gibi kapsülleme bir soyutlama aracıdır, ancak onu bir sınıfın ne anlama geldiğini (erişimden bağımsız olarak işlevsellik / veri), soyutlamanın sizi somut uygulamaların kaygılarından, yani nasıl yapılır ve tam olarak ne yapılır wikipedia'dan yapılabilirAn 'abstraction' (noun) is a concept that acts as a super-categorical noun for all subordinate concepts, and connects any related concepts as a group, field, or category.
TI

Kapsülleme, bağlamla ilgili ayrıntıları (veriler üzerinde çalışan veriler ve davranışlar) bağlamaktan daha fazlasıdır. Ayrıca, private publicyalnızca yaptığımız bilgileri / verileri gizlemeyi sağladıkları gibi erişim belirteçleriyle de elde edilebilir , çünkü örneğin verilerini korumak iyi bir uygulamadır.
user3227986

Yanıtlar:


98

Kapsülleme , soyutlamanın bir parçası olarak kullanılan bir stratejidir. Kapsülleme nesnelerin durumunu ifade eder - nesneler durumlarını kapsül içine alır ve dışarıdan gizler; sınıfın dış kullanıcıları yöntemleriyle etkileşime girer, ancak sınıf durumuna doğrudan erişemezler. Böylece sınıf , durumuyla ilgili uygulama ayrıntılarını soyutlar .

Soyutlama daha genel bir terimdir, (diğerleri arasında) alt sınıflandırma ile de elde edilebilir. Örneğin, arayüz Liststandart kitaplığı konumlan ile endeksli öğeleri bir dizi için bir soyutlama, bir somut örnek List, bir olan ArrayListya da bir LinkedList. ListHangi tür listeyi kullandığının detayı üzerine özetlerle etkileşime giren kod .

Soyutlama genellikle altta yatan durumu kapsülleme ile gizlemeden mümkün değildir - eğer bir sınıf kendi iç durumunu ortaya koyarsa, iç işleyişini değiştiremez ve bu nedenle soyutlanamaz.


8
Kapsülleme, bir grup ilgili özellik, yöntem ve diğer üyelerin tek bir birim veya nesne olarak ele alındığı anlamına gelir. msdn.microsoft.com/en-us/library/dd460654.aspx
raberana

1
Kapsülleme, Soyutlamaya yol açar.
Martin

124

Soyutlama , neyin önemli olduğuna odaklanmak için bir şeyi daha basit terimlerle tanımlamak, yani ayrıntıları soyutlamak kavramını ifade eder (Bu, örneğin sanatçının görüntülerin yapı taşlarına odaklandığı, renk veya şekiller). Aynı fikir, daha fazla soyut kavramın en üstte ve altta daha somut fikirlerin soyutlamalarına dayandığı bir miras hiyerarşisini kullanarak OOP'ye dönüşür. En soyut düzeyinde, hiçbir uygulama detayı ve belki de çok az ortaklık vardır, bunlar soyutlama azaldıkça eklenir.

Örnek olarak, en üstte tek bir yöntemle bir arayüz olabilir, o zaman bir sonraki seviye, üst düzey hakkındaki bazı ayrıntıları doldurabilen veya etmeyebilen, ancak kendi soyut yöntemlerini ekleyerek dallar oluşturan birkaç soyut sınıf sağlar. bu soyut sınıfların her biri için, kalan tüm yöntemlerin uygulanmasını sağlayan somut sınıflardır.

Kapsülleme bir tekniktir . Bu soyutlamaya yardımcı olabilir veya olmayabilir, ama kesinlikle bilgi gizleme ve / veya organizasyonla ilgilidir. Verilerin ve işlevlerin bir şekilde gruplandırılmasını talep eder - elbette iyi OOP uygulaması soyutlama ile gruplandırılmasını talep eder. Bununla birlikte, sadece korunabilirliğe vb. Yardımcı olan başka kullanımlar da vardır.


13
Soyutlama tanımınız şimdiye kadar gördüğüm en iyisidir ve ilk kez gibi hissediyorum, aslında kafama tıkladı ve mantıklı geldi. Bunu yayınlamanızın üzerinden 3 yıldan fazla zaman geçtiğini biliyorum, ama teşekkür ederim.
Casey Crookston

1
Vay be ... Soyutlama .... sanat açısından ifade ... kırmızı öfke olabilir, bilmemiz gereken tek şey bu! Konseptin bu görünümü için teşekkür ederiz :-)
SlowLearner

Kapsülleme, "Gevşek Kavrama ve Yüksek Uyum" elde etmek için kullanılır.
Sıralayıcı

28

kapsülleme soyutlamanın bir parçasıdır ya da soyutlamanın bir alt kümesi diyebiliriz

Bunlar farklı kavramlardır.

  • Soyutlama, bir nesnenin gereksiz / önemsiz tüm niteliklerini arındırma ve yalnızca alanınız için en uygun özellikleri koruma sürecidir.

    Örneğin bir kişi için: adınızı ve soyadınızı ve SSN'yi korumaya karar verdiniz. Yaş, boy, kilo vb. Önemsizdir.

    Soyutlama tasarımınızın başladığı yerdir.

  • Kapsülleme, soyutlama işlemi sırasında saklamayı kabul ettiğiniz özelliklere uygun işlemleri tanıdığı bir sonraki adımdır. Verilerin, üzerlerine etki eden işlemle ilişkilendirilmesidir.
    Yani veriler ve yöntemler birlikte paketlenir.

Soyutlamanın bir tür tasarım konsepti olduğunu söyleyebilir miyiz?
M Sach

1
Kapsüllemede, verilerinize uygulanabilecek / uygulanması gereken işlemleri tanımlarsınız. Bu, tasarımın bir parçası olabilir. SSN'yi alın, ancak değiştirmeyin
Kratilus'unda

25

Kapsülleme, bir kapsül veya birimdeki gereksiz verileri gizliyor

Soyutlama bir nesnenin temel özelliğini gösteriyor

Kapsülleme, üyesini dış sınıftan ve arabirimden gizlemek için kullanılır.

Class Learn
{
  private int a;         // by making it private we are hiding it from other
  private void show()   //class to access it
  {
   console.writeline(a);
  }
}

Burada bir ünite veya kapsüle sarılmış veriler var, yani Sınıf.

Soyutlama, Kapsülleme'nin tam tersidir.

Soyutlama, kullanıcıya önemli ve alakalı verileri göstermek için kullanılır. en iyi gerçek dünya örneği Bir cep telefonunda, kamera, mp3 çalar, arama fonksiyonu, kayıt fonksiyonu, multimedya vb. gibi farklı işlev türlerini görürsünüz. Bu bir soyutlamadır, çünkü dahili mühendisliği yerine sadece ilgili bilgileri görüyorsunuz.

 abstract class MobilePhone
    {
        public void Calling();       //put necessary or essential data
        public void SendSMS();       //calling n sms are main in mobile
    }

    public class BlackBerry : MobilePhone   // inherited main feature
    {
        public void FMRadio();            //added new
        public void MP3();
        public void Camera();
        public void Recording();

    }

Katılıyorum. bu adamlar sorta karşıtlar. iyi oop değişmeyen şeyleri soyutlama ve [değişen renk tonlarını sarmalama] eğilimi gösterir [1]. [1]: principle-wiki.net/…
Ray Tayek

15

Soyutlama çok genel bir terimdir ve yazılımdaki soyutlama nesne yönelimli dillerle sınırlı değildir. Sözlük tanımı: "somut gerçeklikler, belirli nesneler veya gerçek örnekler dışında bir şeyi genel bir kalite veya karakteristik olarak görme eylemi".

Montaj dili, makine kodunun bir soyutlaması olarak düşünülebilir - montaj, makine kodunun temel ayrıntılarını ve yapısını ifade eder, ancak kullanılan opcodları, bellekteki kodun düzenini, atlamaları yapmaktan kurtulmanızı sağlar. doğru adres vb.

İşletim sisteminizin API'sı temel makinenin bir soyutlamasıdır. Derleyiciniz sizi montaj dilinin ayrıntılarından koruyan bir soyutlama katmanı sağlar. İşletim sisteminizde yerleşik olarak bulunan TCP / IP yığını, bitleri bir ağ üzerinden iletme ayrıntılarını ortadan kaldırır. Ham silikonun sonuna kadar giderseniz, CPU'nuzu tasarlayan insanlar bunu, elektronların yarı iletken kristallerden nasıl geçtiklerinin soyutlamaları olan "diyotlar" ve "transistörler" olarak yazılmış devre şemalarını kullanarak yaptılar.

Yazılımda her şey şey bir soyutlamadır. Gerçekliğin bazı yönlerini simüle eden veya modelleyen programlar geliştiriyoruz, ancak zorunlu olarak modellerimiz her zaman "gerçek şeyin" bazı ayrıntılarını soyutlamaktadır. Soyutlama katmanı üzerinde katman üzerine katman oluşturuyoruz, çünkü her şeyi yapmamızın tek yolu bu. (Bir sudoku çözücüsü yapmaya çalıştığınızı ve bunu sadece yarı iletken kristaller kullanarak tasarlamanız gerektiğini hayal edin. "Tamam, burada bir parça N tipi silikona ihtiyacım var ...")

Buna karşılık, "kapsülleme" çok spesifik ve sınırlı bir terimdir. Bu soruya verilen diğer cevapların bazıları zaten bunun için iyi tanımlar vermiştir.


14

Hala daha fazla ayrıntıya ihtiyacım olduğunu düşündüğüm için 5 yıl sonra kendi sorumu cevaplıyorum

Soyutlama:

Teknik Tanım: - Soyutlama, gereksiz ayrıntıları (karmaşık veya basit) gizlemek ve yalnızca nesnenin temel özelliklerini göstermek için kullanılan bir kavramdır. Burada bir uygulama yok, sadece bir kavram

Pratik olarak ne anlama geliyor: - Çalışanların müşteriye bağlanabilmeleri için şirketimin bazı araçlara / cihazlara ihtiyacı olduğunu söylediğimde. Bu cihaz / ortam telefon veya internet veya skype veya bizzat veya e-posta vb. Olabileceğinden en saf absitasyon şeklidir (java'daki arayüz gibi).

Şirketimin ortama / cihaza ihtiyacı olduğunu söylediğimde bile çalışanların sesli arama ile müşteriye bağlanabilmeleri için. Sonra da soyut konuşuyorum ama cihaz / ortam telefon veya skype veya başka bir şey olabilir gibi biraz daha düşük seviyede

Şimdi şirketimin telefona ihtiyacı olduğunu söylediğimde çalışanların sesli arama ile müşteriye bağlanabilmesi. Sonra da soyut konuşuyorum ama telefon iphone veya samsung veya nokia gibi herhangi bir şirketin olabileceği için biraz daha düşük seviyede

Kapsülleme: - Temel olarak özel, kamu, korunan vb.

Pratik olarak anlamı: - Şimdi benim şirket bazı iphone ihtiyacı böylece çalışanlar sesli çağrı yoluyla müşteriye bağlayabilirsiniz.Şimdi ben somut bir nesne (iphone gibi) hakkında konuşuyorum. Ben bile burada iphone nitty cesaret gitmiyorum ama iphone cihaz / araç yok onunla ilişkili bazı devlet / concrecrete bilgi / uygulama vardır. Somut nesne dediğimde, aslında bazı (java soyut sınıf gibi tam değil) uygulama / onunla ilişkili bilgi olan herhangi bir nesne anlamına gelir.

Yani iphone aslında burada kapsülleme durumunu / bilgilerini gizlemek ve sadece maruz kalması gerektiğini düşündüklerini ortaya çıkarmak için strateji olarak kullandı. Dolayısıyla hem soyutlama hem de kapsülleme bazı gereksiz ayrıntıları gizler ancak konsept düzeyinde soyutlama ve aslında uygulama düzeyinde kapsülleme

Bu, bu gönderideki ve altındaki yanıtlara dayanan özdür

  1. ve kapsülleme arasındaki fark nedir?
  2. kapsülleme vs soyutlama gerçek dünya örneği

5

Kapsülleme - dışarıdan doğrudan erişimi önlemek için sınıfın bileşenlerini gizleme işlemi. Diğer sınıflardan veya nesnelerden bazı sınıf üyelerine (veri alanı veya yöntemi) doğrudan erişimi önlemek için "özel" değiştirici kullanılarak elde edilirken, bu özel üyelere genel üyeler tarafından erişim (Arayüz) sağlanır. Bu, sınıf üyelerini cildin veya bir kalkanın altında gizli / kapsüllenmiş insan organları olarak korur.

Soyutlama - OOP programı yazılırken "sınıfta yalnızca programın görevinde ilginç olan bileşenleri dahil etmelisiniz" diyen bir ilke takip edilmelidir. Örneğin: nesne öğrencisi bir insan olarak birçok karaktere sahiptir: isim, yaş, ağırlık, saç rengi, göz rengi, vb. Ancak, OOP'de öğrencilerle çalışmak için bir sınıf oluşturduğunuzda, yalnızca gerçekten bu karakterleri eklemelisiniz. veritabanı için önemli: isim, yaş, uzmanlık, seviye, işaretler ... vb. C ++ 'ta sınıfta herhangi bir yöntemle "sanal" değiştiricisini kullanarak soyut sınıf oluşturabilirsiniz ve bu doğrudan kullanılamaz hale getirecektir, ancak ondan başka sınıflar türetebilir ve göreve gerekli üyeleri ekleyerek üyeleri için uygulama oluşturabilir.


4

Ben böyle anladım:

Nesne yönelimli programlamada sınıf diye bir şey var . Ne için bunlar? Bazı durumları depolamak ve bu durumu değiştirmek için bazı yöntemleri saklamak zorundadırlar, yani durumu ve yöntemlerini enkapsüle ederler .

Kendisinin veya içeriğinin görünürlüğünü umursamıyor. Biz ise gizlemeyi tercih eyalet veya bazı yöntemler, öyle bilgi gizleme .

Şimdi miras senaryosunu ele alalım . Bir temel sınıfımız ve bir kaç türetilmiş (kalıtsal) sınıfımız var. Peki, burada temel sınıf ne yapıyor? Bu edilir soyutlayarak türetilmiş sınıflardan bazı şeyleri.

Hepsi farklı, değil mi? Ancak, iyi nesne yönelimli programlar yazmak için onları karıştırıyoruz. Umarım yardımcı olur :)


3

Soyutlama , bir şeyin bağlama özgü, basitleştirilmiş bir temsilini tasvir eder; bağlamsal olarak alakasız ayrıntıları yok sayar ve bağlamsal açıdan önemli ayrıntıları içerir.

Kapsülleme , bir şeyin parçalarına dışarıdan erişimi kısıtlar ve o şeyin durumunu, durumu kullanan prosedürlerle birleştirir.


Örneğin insanları ele alalım. Ameliyat bağlamında, yararlı bir soyutlama bir kişinin dini inançlarını görmezden gelir ve kişinin vücudunu içerir. Ayrıca, insanlar anılarını bu anıları kullanan düşünce süreçleriyle kapsülliyorlar. Bir soyutlamanın kapsüllenmesine gerek yoktur; örneğin, bir kişinin resmi ne parçalarını gizler ne de prosedürlerini devletiyle birleştirir. Ve kapsülleme ile ilişkili bir soyutlamaya gerek yoktur; örneğin, gerçek insanlar (soyut olanlar değil) organlarını metabolizmalarıyla kapsüllemektedir.


1

NOT: Bunu paylaşıyorum. Bu, burada iyi bir cevap olmadığı anlamına gelmez, çünkü kolayca anladım.

Cevap:

Bir sınıf kavramsallaştırıldığında, bağlam göz önüne alındığında içinde sahip olabileceğimiz özellikler nelerdir. Bir hayvanat bahçesi bağlamında bir sınıf Hayvan tasarlıyorsak, evcil veya vahşi tanımlamak için animalType olarak bir özelliğe sahip olmamız önemlidir. Sınıfı farklı bir bağlamda tasarladığımızda bu özellik anlamlı olmayabilir.

Benzer şekilde, sınıfta geçireceğimiz davranışlar nelerdir? Burada soyutlama da uygulanır. Burada olması gerekenler ve aşırı doz ne olacak? Sonra sınıftan bazı bilgileri kestik. Bu süreç soyutlama uyguluyor.

Kapsülleme ve soyutlama arasındaki farkı istediğimizde, kapsülleme soyutlamayı bir kavram olarak kullanıyor diyebilirim . Öyleyse, sadece kapsülleme mi? Hayır, soyutlama kalıtım ve çok biçimliliğin bir parçası olarak uygulanan bir kavramdır.

Bu konu hakkında daha fazla açıklama için buraya gidin .


1

Farklı bir şekilde anlamaya çalışalım.

Soyutlama orada değilse ne olabilir ve Kapsülleme orada değilse ne olabilir.

Soyutlama orada değilse, nesnenin daha az kullanıldığını söyleyebilirsiniz. Nesneyi tanımlayamaz veya nesnenin herhangi bir işlevine erişemezsiniz. Açma, kanal değiştirme, ses seviyesini artırma veya azaltma gibi bir seçeneğiniz yoksa bir TV örneği alın, o zaman TV'nin kullanımı nedir ve nasıl kullanılır?

Kapsülleme orada değilse veya düzgün bir şekilde uygulanmıyorsa, nesneyi kötüye kullanabilirsiniz. Orada veriler / bileşenler tarafından yanlış kullanılabilir. TV'nin aynı örneğini alın, TV'nin hacmine yapılan bir kapsülleme yoksa, ses denetleyicisi, TV'nin altına gelmesi veya sınırının üzerine çıkmasıyla kötüye kullanılabilir (0-40 / 50).


1

Kapsülleme, nesnenin / örneğin dahili davranışını harici varlıktan daraltmaya karşı korur. Bu nedenle, sağlanan verilerin, varlığını sürdürmek için örnek / nesnenin iç sistemine zarar vermeyeceğini doğrulamak için bir kontrol sağlanmalıdır.

İyi örnek, Divider iki örnek değişkenli temettü ve bölen ve getDividedValue yöntemine sahip bir sınıftır.

Eğer bölen 0 olarak ayarlanırsa, iç sistem / davranış (getDivided) kırılacaktır.

Böylece, nesnenin iç davranışı bir yöntem aracılığıyla istisna atarak korunabilir.


0

basit bir cümleyle şunu söyleyebilirim: Soyutlamanın özü, gereksiz ayrıntıları atlarken temel özellikleri çıkarmaktır. Ama neden gereksiz ayrıntıları atlamalıyız? Temel motivasyon, değişim riskini önlemektir. Soyutlamanın kapsülleme ile aynı olduğunu düşünebilirsiniz. Ancak kapsülleme, ayrıntıları gizlememek yerine bir veya daha fazla öğeyi bir kabın içine alma eylemidir. Eğer "kapsüllenmiş olan her şey de gizlendi" iddiasını yaparsanız. Bu kesinlikle doğru değil. Örneğin, bilgiler kayıt yapıları ve diziler içinde kapsüllenebilse de, bu bilgiler genellikle gizlenmez (başka bir mekanizma ile gizlenmedikçe).

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.