DSA Material

Abstrakt ma'lumot turlari (ADTs)

Share to

Ushbu bob Necaise kitobidagi 1-bob (Abstract Data Types) ning asosiy g'oyalariga amal qiladi: avval xatti-harakatni belgilab oling, keyin uni amalga oshiring.

ADT kontrakt diagrammasi

ADT sizga nima beradi

ADT bu bir kontrakt (contract):

Aynan shu ajratish tufayli ADT'lar yirik loyihalarda yaxshi masshtablanadi.

Kontraktning asosiy qismlari

Har bir amal quyidagilar bilan belgilanishi kerak:

stack ustidagi pop() amali uchun misol:

Old shartlar va assertion'lar

Ma'lumotlar tuzilmalarini o'rganayotganda assert'lar kontraktlarni aniq qilib ko'rsatish uchun foydali.

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

    def pop(self):
        assert len(self._items) > 0, "precondition failed: stack must be non-empty"
        return self._items.pop()

Amaliy tizimlarda noto'g'ri amallar uchun odatda aniq exception'lar ko'tariladi.

Bir nechta amalga oshirish, bitta ADT

queue ADT'sini turli yo'llar bilan amalga oshirish mumkin:

Har bir amalga oshirish navbat semantikasini (FIFO) saqlab tursa, foydalanuvchiga ko'rinadigan kod o'zgarishsiz qoladi.

def process_jobs(queue):
    while not queue.is_empty():
        job = queue.dequeue()
        handle(job)

process_jobs ichki saqlash tartibi haqida qayg'urmasligi kerak.

Nega bu tuzilmalarni kodlashdan oldin muhim

Agar siz avval ADT kontraktini belgilab olsangiz, keyingi boblardagi amalga oshirish ishlari osonlashadi:

Bu ma'lumotlar tuzilmalari bo'limining qolgan qismi uchun poydevor hisoblanadi.