Технічна документація
Сторінка 3 з 25
абстракція даних
"Абстракція даних" - популярна і в загальному невірно визначається техніка
програмування. Фундаментальна ідея полягає в поділі несуттєвих
деталей реалізації підпрограми і характеристик істотних для для
коректного її використання.
Такий поділ може бути виражено через спеціальний "інтерфейс",
зосереджують опис всіх можливих застосувань програми.
Типовий приклад такого інтерфейсу.
- безліч функцій, які можуть мати доступ до структур
даних, за допомогою яких представлена "абстракція".
Одна з причин неповноти загальноприйнятого визначення полягає в тому, що
будь-яка мовна конструкція, що підтримує абстракцію даних буде висловлювати
тільки деякі аспекти фундаментальної ідеї при недостатності
вираження інших. наприклад:
1. упрятиванія інтерфейсів - Можливість специфікації інтерфейсів,
перешкоджають перекручуванню даних і звільняють користувача від
необхідності знати деталі реалізації.
2. Конструювання інтерфейсів - Можливість специфікації
інтерфейсів, що підтримують і нав'язують певні угоди
по використанню абстракцій.
Приклади включають перевантаження знаків операцій і динамічну типізацію.
3. Конкретизація - Можливість створення і ініціалізації
одного або більше "екземплярів" (змінних об'єктів копій версій)
однієї абстракції.
4. Локалізація - Можливість спрощення реалізації абстракції, приймаючи
до уваги, що весь доступ до неї направляється через її інтерфейс.
Приклади включають спрощення правил видимості і угод за викликом всередині
реалізації.
5. Програмне середовище - Можливість підтримки розробки программма,
використовують абстракції. Приклади включають. завантажувачі, які розуміють
абстракції; бібліотеки абстракцій; отладчики, що дозволяють програмісту
працювати в термінах абстракції.
6 Ефективність - Деяка конструкція мови повинна бути
"Достатня ефективна" для того, щоб бути корисною.
Передбачувана сфера застосування - важливий фактор для визначення,
які конструкції повинні бути представлений в мові. навпаки,
ефективність конструкцій визначає наскільки вільно вони
можуть використовуватися в даній програмі Ефективність повинна
розглядатися в трьох різних контекстах. при компіляції,
зв'язуванні і виконанні.
Основний упор при проектуванні можливостей абстракції даних в С
робився на 2 і 3 аспектах, тобто на ті можливості, які дозволяють
програмісту забезпечувати елегантні і ефективні інтерфейси до абстракції.
З абстракція даних підтримує можливість для програміста визначати
нові типи, звані "класами". Члени класу доступні тільки функціям
з явно оголошеного набору. Просто упрятиваніе інформації може бути
досягнуто, наприклад, так.
class data_type
/ описание данных
/ * Список функцій, які можуть
використовувати опису даних
( "Дружні" функції) * /
>;
де тільки "дружні функції (* 1) можуть мати доступ до змінних
класу d a t a _ t y p e в тому вигляді як вони визначені в описі даних.
В якості альтернативи і часто більш елегантно можна визначити тип
даних, в якому безліч функцій, що мають доступ до змінних класу,
саме є складовою частиною самого типу:
class object_type <
/ * Опису, використовувані
для реалізації object_type * /
public:
/ * Опису, специфицирующие
інтерфейс з object_type * /
>;
Одна явно не нетривіальна мета багатьох сучасних проектів
мов програмування полягає в тому, щоб дати можливість
користувачу визначати "абстрактні типи даних" з характеристиками
подібним характеристикам фундаментальних типів даних мови.
Нижче ми покажемо, як додається тип даних c o m p l e x в мову С
і при цьому до комплексних змінних можуть застосовуватися звичайні
арифметичні операції. Наприклад.
complex a, x, y, z;
a = x / y + 3 * z;
Ідея вистави об'єкта чорним ящиком надалі підтримується
механізмом ієрархічного конструювання класів з інших класів.
наприклад:
class shape;
class circle. shape;
Клас shape на додаток до того, що він використовується як клас shape
може бути використаний просто як circle. Кажуть що клас circle є
похідний клас (* 2) з класом shape як свого базового класу.
Є можливість відстрочити дозвіл типу об'єктів, що мають спільні
базові класи до часу виконання. Це дозволяє маніпулювати
об'єктами різних типів деяким загальним чином.