OOP 'soyutlama' tanımı hakkında karışık


16

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 Humansınıf ve vererek int health, int age, String namevb ö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 ListJava'da bir nesne kullanıyor olabilir . bu nesne aslında bir ArrayListveya 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 ).


Soyutlama, bir şeyi daha da daraltmak için belirli bir TÜR (Hayvan => Köpek) olarak tanımlamaktır (Köpek => Kaniş).
Christine

Yanıtlar:


22

Soyutlama, Nesneye Yönelik Programlamanın (OOP) 3 temel direğinden biridir. Kelimenin tam anlamıyla bir sistemi veya bağlamdaki bir varlığı belirli bir perspektiften algılamak anlamına gelir. Gereksiz ayrıntıları çıkarırız ve yalnızca söz konusu bağlam veya sistem için gerekli olan hususlara odaklanırız.

İşte bazı iyi açıklamalar:

Bir kişi olarak farklı rollerde farklı ilişkileriniz var. Okuldayken, o zaman "Öğrenci" olursun . İş yerinde olduğunuzda, bir "Çalışan "sınız . Devlet kurumunda olduğunuzda, bir "Vatandaş" olarak görülebilir . Yani bir varlığa / nesneye hangi bağlamda baktığımızla ilgilidir. Dolayısıyla, bir Bordro Sistemi modelliyorsam , size Çalışan olarak bakacağım (PRN, Tam Zamanlı / Yarı Zamanlı, Atama) . Bir Kurs Kayıt Sistemini modelliyorsam , o zaman senin özelliklerini ve özelliklerini Öğrenci olarak değerlendireceğim (Rulo Numarası, Yaş, Cinsiyet, Derse Kayıtlı) . Ve eğer bir Sosyal Güvenlik Bilgi Sistemini modelleyeceksemayrıntılarınıza bir Vatandaş olarak bakacağım (DOB, Cinsiyet, Doğum Ülkesi vb.)

Soyutlamanın (gerekli ayrıntılara odaklanma) Kapsülleme'den (ayrıntıları dış dünyadan gizleme) farklı olduğunu unutmayın. Kapsülleme, nesnenin ayrıntılarını gizlemek ve dış dünyadaki varlıkların o nesne veya varlıkla etkileşime girmesi için iyi bir arayüz sağlamak anlamına gelir. Örneğin, birisi adımı bilmek istiyorsa, o zaman adımın ne olduğunu öğrenmek için beyin hücrelerime doğrudan erişemez. Bunun yerine o kişi ya adımı soracak. Bir sürücü bir aracı hızlandırmak istiyorsa, bu amaçla bir arayüz (gaz pedalı, vites, vb.) Vardır.

1. def çok net değil. Def 2 iyidir ama soyutlamayı Kapsülleme ve Kalıtım ile ilişkilendirmeye çalışırken acemi ile karıştırmaya meyillidir. Def 3, soyutlamanın tam olarak ne olduğunu açıkça tanımladığı için 3 tanımdan en iyisidir.


3
Yani bunun bir şartname yerine bir genelleme gibi olduğunu söyleyebilir misiniz?
Robert Rocha

1
@samyismyhero Kesinlikle! Soyutlama için nesnelerin genel niteliklerini ve davranışlarını arıyoruz.
Maxood

[Animal => Dog] bir soyutlamadır. Bir "Hayvan" ın bir "Köpek" yaratmak için ne gibi parçaları olabileceğini tanımlarsınız. (Kuyruk, bacaklar, kürk vb.). Daha sonra, bir Kaniş, Pit Bull vb. Tanımlamak için "Köpek" sınıfını kullanabilirsiniz. Böylece, bir "Hayvan" yerine "Köpek" sınıfına dayanan köpek ırkları ilan ediyorsunuz.
Christine

3

Tanım 1 kesinlikle bir soyutlama değildir. Bu modellemeyi daha yakından tanımlamaktadır .

2 ve 3 numaralı tanımlar aynı şeyi tarif etmektedir. Ve her ikisi de bir soyutlamanın oldukça iyi tanımlarıdır.


Bende böyle düşünmüştüm! abstract class Shapelol!
Robert Rocha

2

Bu tanımların her biri iyidir.

Soyutlama, yalnızca amacınız için önemli olan ayrıntılara odaklandığınız yerdir.

İlk durumda, (şu anda) kodunuza gerçek kişileri dahil edemezsiniz; amacınıza hizmet eden bir kişinin belirli ayrıntılarına odaklanırsınız. Başka bir programda farklı ayrıntılara odaklanmanız gerekebilir. Bunlar bir kişinin farklı soyutlamaları olacaktır ve her biri kendi bağlamında eşit derecede geçerli olabilir .

İkinci ve üçüncü tanımlar bu fikri yazılım varlıklarına uygulayarak devam eder.

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.