Тема: ЧАП по АТД, критика вітається!
П: Що таке абстрактні типи даних?
В: АТД – спеціальний клас змінних, визначених програмістом для конкретної програми, на відміну від стандартних типів даних, які визначаються мовою програмування.
П: Можете назвати якісь поширені приклади АТД?
В: Стандартні бібліотечні типи даних в С++ є яскравим прикладом АТД: потоки, вектори і т.ін.
П: Нащо потрібні АТД?
В: Для кращої побудови моделі чи кращого опису сутності в програмі. Наприклад, точка на площині може задаватися двома координатами; але часто зручніше працювати із нею саме як із точкою, з окремими функціями для переміщення точки, обчислення відстані між точками і т.д., ніж мати функції для обчисленя "відстані" між двома парами чисел.
П: Які принципи лежать в основі АТД?
В: Абстракція, інкапсуляція, наслідування.
П: Та це ж те саме ООП!
В: Ні. В АТД немає поліморфізму; нащадок успадковує поведінку предка, але кожна операція з об'єктом конкретного типу визначена на етапі компіляції. Так, змінні АТД можуть бути передані за значенням, для ООП це нонсенс.
Можна скористатися таким «правилом великого пальця», щоб відрізнити АТД від ООП: якщо ваші змінні статичні ( mytype a(10,10); ) – це АТД, якщо динамічні і не відповідають заявленим типам (mytype a=new myothertype(10,10); ) – то це ООП.
П: Нащо потрібні АТД, якщо є ООП?
В: З АТД значно простіше працювати. ООП потрібне там, де є багато різних сутностей, які мають багато спільного і різного; АТД – там, де сутностей мало. Використовувати ООП для роботи зі, скажімо, комплексними числами – це стріляти з гармат по горобцях.
П: З АТД працювати не так зручно, як із стандартними даними!
В: Зі складним завжди складніше, ніж із простим; втім, це значною мірою залежить від мови програмування і майстерності програміста.
П: Перевантаження операторів тільки все плутає!
В: Перевантаження операторів – найпотужніший механізм роботи з АТД, який, фактично, робить роботу із ними аналогчною роботі зі стандартними даними; але користуватися нею треба обережно. Головне – щоб перевантажені оператори не суперечили за сенсом базовим.
До речі, перезавантаження операторів – це «фішка» значно скоріше АТД, ніж ООП.