http://ru.wikipedia.org/wiki/Абстрактный_тип_данных
Процитирую целиком, это песня:
"Абстрактный тип данных (АТД) - отвлечение от конкретного типа данных и работа с их структурой или структурой объекта, их содержащей. При этом не используются свойства данного типа. Однако не запрещается применять свойства объктов, как то: существование, порядок, существование способа сравнения и т.п."
Я примерно представляю, по какому пути шел автор, заблудившийся в трех строчках текста, но способен ли кто-то, не знакомый с понятием АТД, понять из этого текста, каким образом отвлечение от типа данных может привести к работе с их структурой (или, пуще того, "структурой объекта, их содержащей)?
В примерах тоже такой добрый тип данных "дека" приведен, ссылка на который ведет на музыкальную деку.
Дальше я вошел во вкус.
http://ru.wikipedia.org/wiki/Стек
Стек, оказывается, "даже поддерживается аппаратурой процессора". Аппаратура, архитектура, какая фиг разница...
http://ru.wikipedia.org/wiki/Язык_ассемблера
"Также в процессе линковки происходит связывание программы со статическими и динамическими библиотеками (тоже, по сути, объектными файлами)." Угу, библиотеки, по сути, являются книгами.
"Последние технологии безопасности, внедряемые в операционные системы и компиляторы не позволяют делать самомодифицирующего кода, т.к. исключают одновременную возможность исполнения программы и запись в одном и том же участке памяти." - смысл, конечно, понятен, но если ко мне на экзамене придет студент с такой формулировкой, я вряд ли удержусь от некого потаптывания костей.
http://ru.wikipedia.org/wiki/Объектно-ориентированный_язык_программирования
Всплыла типизация как, видимо, одна из ключевых, по мнению автора, составляющих ООП (поставлена перед полиморфизмом).
http://ru.wikipedia.org/wiki/Си_плюс_плюс
"Описатель inline означает, что вызовы функций заменяются макро-расширениями." Кхм. Тепло, конечно, но...
"Прежде всего, основным способом организации информации в Си++ являются классы. В отличие от структуры, состоящей только из полей, класс (class) состоит из полей и функций-членов (member functions)." Да, мои третьекурсники тоже часто не могут правильно рассказать, в чем разница между структурой и классом в С++.
"Для создания классов с добавленной функциональностью вводят наследование. Класс-наследник имеет поля и функции-члены базового класса, но не имеет права обращаться к собственным функциям базового класса." Я сперва слегка обалдел, потом наткнулся на формулировку "Наследование бывает публичным, защищённым и собственным." Традиция перевода термина private не для нас, да.
"Класс Си++ представляет собой объект ООП." Ну, положим, лет десять назад и можно было встретить подобную путаницу в терминологии (особенно у жертв Турбо Паскаля), но с этим уже давно разобрались, и классы с объектами давно разведены по своим углам.
Ну и из серии придирок.
"Например, объект cout, используемый для вывода текста в консоль, имеет переопределённый оператор << для вывода информации." - формально говоря, этот оператор все-таки имеет не объект cout, а класс ostream.
"Защищённые и собственные поля нельзя менять по-дурацки: к ним могут обращаться только функции-члены (и ещё так называемыефункции-друзья)."
"Функции-члены (и только они) могут иметь описатель const... Такие функции не имеют права изменять поля класса. Если они пытаются это сделать, программа вылетает на стадии компиляции."
"Копи-конструктор (copy constructor) Array::Array(const Array&) вызывается при присваивании." Перевод "конструктор копирования" тоже не катит.
И вот еще абсолютно шикарный код:
class ArrayWithAdd : public Array {
ArrayWithAdd(int n) : Array(n);
ArrayWithAdd() : Array();
ArrayWithAdd(const Array& a) : Array(a);
void Add(Array a);
};
Вызов базового конструктора в описании и без остального тела, ага.