OOP'taki 'soyutlama' tanımını anlamaya çalışıyorum.
Birkaç ana tanımla karşılaştım. Hepsi geçerli mi? Bunlardan biri yanlış mı? Kafam karıştı. (Tanımı kendi kelimelerimle yeniden yazdım).
Tanım 1:
Soyutlama, bir nesneyi gerçek dünyadan alıp programlama terimlerine dönüştürme kavramıdır. Bu tür bir oluşturma gibi Human
sınıf ve vererek int health
, int age
, String name
vb özellikleri ve eat()
vb yöntemleri.
Tanım 2:
Daha genel bir tanım. Soyutlama, 'işleri daha genel / daha basit / soyut' hale getiren bir yazılım sisteminde herhangi bir yerde gerçekleşen bir kavramdır . Birkaç örnek:
Yüksek sınıfların daha basit veya daha genel olduğu ve daha genel ve soyut uygulamayı tanımladığı bir miras hiyerarşisi. Hiyerarşideki alt sınıflar daha somut ve daha ayrıntılı uygulamaları tanımlar.
Bir sınıfın uygulanmasının ayrıntılarını diğer sınıflardan gizlemek için kapsülleme kullanmak, böylece sınıfı dış yazılım dünyasına daha 'soyut' (basit) yapmak.
Tanım 3
Başka bir genel tanım: Soyutlama, odağı bir şeylerin detaylarından ve somut uygulamasından, şeylerin türlerine (sınıflar), mevcut işlemlere (yani yöntemler), vb. ve daha soyut. (Bu, yazılım sisteminde herhangi bir yerde ve herhangi bir bağlamda gerçekleşebilir). Örneğin, kapsülleme yapılırken gerçekleşir, çünkü kapsülleme, uygulamanın ayrıntılarını gizlemek ve sadece şey türlerini ve daha genel ve soyut tanımlarını göstermek anlamına gelir. Anotehr örneği List
Java'da bir nesne kullanıyor olabilir . bu nesne aslında bir ArrayList
veya a'nın uygulama ayrıntılarını kullanır LinkedList
, ancak bu bilgiler daha genel ad kullanılarak soyutlanır List
.
Bu tanımlardan herhangi biri doğru mu? ( En geleneksel ve kabul edilen tanıma atıfta bulunuyorum ).