488 подписчиков
Дорогие читатели! Если среди ваших родственников-друзей-знакомых есть те, кого это может заинтересовать, прошу предупредить их и поделиться адресом.
Что тут будет.
1. Изложение предназначено для читателя, изучающего программирование. Уровень — выше среднестуденческого. Предполагается, что читатель способен понимать и/или писать простые вычислительные коды на С++, ограничивающиеся возможностями "чистого С". Понимание и умение использовать указатели настойчиво рекомендуется.
Это не учебник по языку программирования. Встретив что-то непонятное, читатель должен воспринимать это как стимул к самостоятельному получению необходимых знаний.
Как предполагается, читатель имеет склонность читать приводимый программный код, добиваясь его понимания, а не просто копировать его в свои закрома, авось пригодится. Образование это совокупность понятого и, возможно, потом забытого, а не множество скопированных на флешку текстов.
2. Следующий шаг после основ программирования — разработка (проектирование, кодирование, тестирование) классов объектов. Мы делаем это на С++, но материал будет полезен и использующим другие языки для создания классов. Особое внимание уделяется первоначальному проектированию классов. Этой работой традиционно пренебрегают программисты, научившиеся ловко писать код. Будут приведены примеры неудачных, а то и просто смешных, решений, принятых из-за отсутствия стадии проектирования.
3. Описываемая история реально происходила с Автором. Имея в качестве базы воспоминания о языке С, а также опыт работы в приложениях, я предпринял изучение С++ — а ради чего? — конечно, ради возможности создавать и использовать объекты. Причем я любил изучать такие вещи вместе со студентами, делая ошибки, исправляя их, понемногу улучшая проект. Натыкаясь на те или иные особенности языка (rvalue — lvalue, inline, ссылочные типы, copy elision, перемещение/move...) и постепенно приспосабливаясь использовать их. Все эти закавыки будут честно описаны в тексте. Ибо "на ошибках учатся" — это не пустая фраза.
4. Первоначально речь пойдет о классе многочленов с коэффициентами типа double. Как математик по образованию и роду занятий, я, естественно, выбрал такой класс. Вместе с тем, излагаемые правила, идеи и принципы во многом не зависят от конкретного языка и специфики разрабатываемого класса. Рассказываемые истории могут быть полезны даже проектировщику, не знающему глубоко ни одного языка.
5. Впоследствии возникнет вопрос, а что будет, если тип коэффициентов не double. Если это float или complex, то все решается контекстной заменой за пару секунд. Но могут быть типы коэффициентов с другими алгебраическими и программными свойствами, как, например, int. Тогда изменяется состав операций и алгоритмы их осуществления. В результате получается дерево классовых шаблонов и множество проблем, вызываемых таким решением.
6. Еще один подход, это создание генератора исходных кодов классов средствами препроцессора. Получив опыт проектирования дерева шаблонов, переписать полученные решения в генератор уже несложно.
7. Все описанное уже сделано, но только для типов коэффициентов, занимающих в памяти место постоянного размера (double, float, complex, long int, complex_int, residue, и т.д.). Требуется только выверка текстов описания перед публикацией. Случай коэффициентов переменного размера (многочлены, матрицы), хранящих свои данные в оперативной памяти — дело ближайшего будущего.
8. Все (будет) упаковано в 3–4 ZIP-архива, в составе которых тексты, тексты, тексты (PDF) и программный код — в такой примерно пропорции. Тексты предназначены для изучения и, возможно, для повторения приведенных в них экспериментов.
3 минуты
1 ноября 2022