ADT (abstrakt verilənlər tipi) tipin nə etdiyini təsvir edir: əməliyyatlar, xətalar və invariantlar. Verilənlər strukturu isə bunun necə edildiyidir: massiv, bağlı siyahı, hash cədvəli. Bu dərsdə eyni stek və lüğət interfeysini iki cür yazırıq. Interfeysin Python-da rəsmiləşdirilməsi növbəti dərsdədir: ADT-nin Protocol və ABC ilə yazılması.

Müştəri kodu Stack ADT interfeysindən istifadə edir, onu iki implementasiya yazır
Müştəri kodu Stack ADT interfeysindən istifadə edir, onu iki implementasiya yazır

ADT: əməliyyatlar və müqavilə

Stek ADT-nin müqaviləsi: push(x) elementi əlavə edir, pop() ən son əlavə olunanı qaytarır və çıxarır (LIFO), boş stekdə pop() IndexError verir, len həmişə push və pop fərqinə bərabərdir. Bu cümlələrdə massiv və ya göstərici yoxdur — bu ADT-dir. Aşağıda onu list üzərində yazırıq; drain funksiyası yalnız len və pop bilir.

python
class ListStack:
    def __init__(self):
        self._items = []

    def push(self, x):
        self._items.append(x)

    def pop(self):
        if not self._items:
            raise IndexError("pop from empty stack")
        return self._items.pop()

    def __len__(self):
        return len(self._items)