The Concept of Abstraction

Günümüz programlama dillerinde 2 tür abstraction vardır.

Data Abstraction belirli, özel bilgiler içeren bir yapının görünüşüdür. Örneğin kuşları ele alırsak ve yapımıza AbsKus dersek 2 kanat, 2 ayak, kuyruk tüm kuşların ortak özelliğidir. Şimdide karga yı ele alalım. Karga tüm kuş özelliklerine sahip olduğu için karga bir kuştur ve AbsKus, tüm kuşları ifade eden bir yapıdır diyebiliriz. Belirtildiği gibi specific özelliklerin bir arada tutulmasına data abstraction(soyutlama) denilir.

ADT içinde veri ve bu veriler üzerinde işlem yapan metodların bir bütünüdür. Record-struct- C ve Cobol gibi dillerde data abstraction sağlarlar.

Process Abstraction ise özelliklerin değilde algoritmanın, yapılan işlerin soyutlanmasıdır. Örneği sort işlemi yapan bir template türündeki metodun işlemleri nasıl yaptığını bilmeyiz. Kendi içinde çağırdığı yardımcı metodlarda kullanıcıdan gizlenmiştir. Complexity e karşı çok sağlam bir silahtır.

C++/Java gibi dillerde Object tamamen ADT tanımına uyar.

Floating-Point ADT olarak tasarlanmıştır.

11.1 User-Defined Abstract Data Types

User-Defined ADT, bir programlama dilinin desteklediği ADT ler gibi olmalıdır.

  • Farklı tipte verileri içerir ve bunların tipini kullanıcıdan gizler
  • Veriler üzerinde işlem yapan metodlar içermelidir

--> Önemli bilgilerin ADT yardımıyla gizlenmesine Information-Hiding denir.

  • Güvenirliği(reliability) arttırır.
  • Değişkenlerin scope sini sınırladığı için isim çakılmalarını(name-conflicts) engeller.(Düşünsene sadece setter getterde bu isimler önemli)
  • Kullanılan veri yapısında alt taraflarda ufak veri tiplerinin değişmesi clienti etkilemez. Stack yerine arraylist kullanılması bir engel teşkil etmez.

Her ne kadar bilgilerin saklanması gereksede bazı verilerin clientin kullnımına açılması gereklidir. Bunun için getter-setter kullanımalıdır. Bunlara accessorlar denir. Peki bunların faydaları neler?

  • Read izni olanlara sadece getter ile erişileceği için değiştirilemezler
  • Değişken atamalarındaki kısıtlamalar setter içinde yapılabilir. Örneğin negatif değer atanmasını engelleme
  • Daha önce bahsettiğim gibi kullanılan veri tipi değişimi yapılabilir. Örneğin int yerine long kullanılması client tarafında ciddi sorunlara yol açmayacaktır. Clientin ruhu bile duymaz.

Bu ADT leri kullanan clientler doğrudan verileri değiştiremezler. Sadece sağlanan metodlar ile manipulasyon ve erişimler yapılabilir.

  • Header ve implementasyon kısmının bir arada(Java gibi) yani single syntactic unit içinde olmasının faydası metodların organizasyonunu kolaylaştırır. Compiler işlemlerini kolaylaştırır.
  • Farklı yerlerde, separate syntactic unit olması ise modülerliği, temiz dizasyn ve impl. kolaylaştırır.

Algebraic Specification of ADT

  1. Syntactic Specification(signiture, interface)
    Tiplerin adı ve metodların prototiplerinden oluşur

  2. Semantic Specification(axioms, implemenation)

Örnek: BST Algebraic Specification

results matching ""

    No results matching ""