Вопрос 4.
АТД, реализованный как файл С, не дотягивает до полноценного типа данных, каким является любой стандартный (встроенный) тип:
Необходимо самому кодировать процедуры создания и уничтожения экземпляра
Этот тип не поддерживается компилятором в смысле контроля правильности использования
Этот тип не передается функциям как параметр
Концепция объектно-ориентированной технологии
В конце 80-х популярность завоевала методика ОО-проектирования и программиро-вания: языки Object Pascal, Eiffel, Object C, C++ и др. В этих языках класс – это также АТД, но более полноценный тип. Пример описания класса «стек символов» на С++:
class stack
{
// скрытая часть: инкапсулированные данные
int size; // размер
char* top // верх
char* bottom // дно
public: // интерфейс объектов класса stack
stack (int); // конструктор
~stack; // деструктор
void push (char);
void pop();
}
Вопрос 5.
Однако простые классы как АТД страдают отсутствием гибкости: если в другом контексте тип нужно повторно использовать с небольшими изменениями, то его приходится заново описывать. Наследование и полиморфизм решают эту проблему: общие свойства объектов воплощаются в базовом классе, а специфические свойства (данные и операции) добавляются или переопределяются в производных классах.
ОО-технология улучшает качество ПП, а именно:
Ясность, понятность, обозримость проекта и кода. Разрыв между понятиями предметной области и элементами программы сокращается: объекты имеют прототипы в реальности. Код может быть короче в 1.5-2 раза из-за наследования (общие свойства разделяются родственными объектами). Сокращается пространство имен: полиморфные методы имеют несколько реализаций.
Корректность (безошибочность) - благодаря инкапсуляции и статическому контролю классов как типов объектов.
Повторное использование библиотек классов лучше, чем библиотек подпрограмм. Вопрос 6.
ОО-технология хорошо соответствует нисходящей и инкрементальной стратегии разработки; раздельная компиляция описаний классов и их реализаций способствует раннему обнаружению ошибок сопряжения.
Объектная структура ПП хорошо соответствует архитектуре распределенных систем, где естественна множественная реализация методов на разных машинах.
Недостаток ОО-программ - потери эффективности по времени из-за:
динамического связывания полиморфных методов - в среднем в два раза дольше, чем обращение к обычной подпрограмме
динамического порождения и уничтожения объектов, что дороже статического
в большой системе разные классы объявляются в разных файлах, и при вызове методов часто требуются скачки по памяти, ухудшающие локальность обращения к памяти и приводящие к листанию (свопингу)
ОО парадигма не ограничивается программированием приложений. Другие сферы:
Многооконные среды (MS Windows, X/Window для Unix): объекты - окна, методы - способы манипуляции ими, атрибуты (данные) - графические стили, наследование - дочерние окна наследуют атрибуты родительских.
Операционные системы (NextStep, Taligent): объекты - ресурсы ОС (такие, как память или файлы).
ОО базы данных (OpenODP, UniSQL) - нужны для данных со сложной структурой и неоднородных (много типов, но мало экземпляров) - мультимедиа, САПР, геоинформационные системы, базы знаний. Данные хранятся вместе с методами их семантической интерпретации, нужными для поиска и отображения (вывода).