C# Abstraction (Soyutlama) = Karmaşıklığı yönetmek için kullanılır. Nesnenin diğer tüm nesne türlerinden ayıran temel özelliklerini belirtir, böylece izleyicinin bakış açısından açıkça tanımlanmış bir kavramsal sınır sağlar. Nesne yönelimli programlamada, ayırma, ayrıntıları tanımlamaktan ziyade sınıflar veya yöntemler için temel görevleri tanımlamak anlamına gelir. Temel olarak, problemi çözmek için kullanılan yöntem öncelikle daha genel, daha basit ve soyut olmalıdır.
Örneğin Bir daire, kare, üçgen tanımlarken bunları soyut olan bir şekilden somut olarak düşünerek bir nesneye çeviririz. Şeklin bir nesneye çevrilmesi işte bu gibi durumlarda OOP yapısına aykırı olacaktır . Çünkü şekil sadece türetmek (somut bir nesneyi oluşturma içindir) ama kendisinden nesne oluşturulması durumunda gereksiz bir sınıf ortaya çıkacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public abstract class sekil { public int çevre() { return 0; } } public class Dikdortgen : sekil { private int en; private int boy; public override double Alan() { throw new NotImplementedException(); } public int çevre() { return (2 * (boy + en)); } public override double Çevre() { throw new NotImplementedException(); } } } |
Gerçek yaşamdan örnek verilecek olursak, bir cep telefonunda olması gereken en temel özellikler olan arama yapma ve mesaj atabilme işlemleri soyutlaştırılabilir. Bu işlemler cep telefonu modelinden veya operatörden bağımsızdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | abstract class MobilePhone { public void Calling(); public void SendSMS(); } public class Samsung: MobilePhone {} public class Nokia2700: MobilePhone { public void FMRadio(); public void MP3(); public void Camera(); } public class BlackBerry: MobilePhone { public void FMRadio(); public void MP3(); public void Camera(); public void Recording(); public void ReadAndSendEmails(); } |
Örnegimizde soyut bir MobilePhone sınıfı oluşturulmuş bulunmaktadır. Bu abstract sınıfa ait iki adet metod bulunmaktadır. Bunlar arama yapmak için kullanılan, Calling() ve mesaj gönderebilmek için kullanılan SendSMS() metodlarıdır. Ardından cep telefonu modellerini içeren sınıflar bu abstract sınıftan türetilmiş bulunmaktadır. Yeni türetilen modele ait sınıflar abstract class’ı kullanmaktadır. Çünkü tüm modeller için, abstract sınıftaki arama yapmak ve mesaj göndermek temel fonksiyonlardır.