Объект объединяет данные и поведение
Пусть объект Экспонат хранит идентификатор, название и номер зала. Метод может формировать краткую подпись для показа посетителю. Класс описывает общую структуру таких объектов, а конкретный экземпляр содержит значения одного экспоната. Два объекта могут иметь одинаковые названия, поэтому одно название не всегда подходит для различения. В учебной модели назначим предметам идентификаторы сорок один, сорок два и сорок три. Смысл идентификатора состоит в устойчивом обозначении предмета, а не в его месте на экране.
Массив задаёт порядок элементов
Для примера используем массив с нумерацией от нуля, как в обычных массивах C#. Три элемента находятся на позициях ноль, один и два. На позиции ноль сейчас может лежать объект с идентификатором сорок один. Если отсортировать предметы по названию, на той же позиции окажется другой объект. Следовательно, индекс отвечает на вопрос о положении в текущем массиве, а идентификатор о том, какой именно предмет имеется в виду. Перед обращением к элементу нужно учитывать допустимые границы индекса.
База данных хранит записи и связи
В реляционной модели можно создать отдельные таблицы экспонатов и залов. У зала есть собственный ключ, а запись экспоната содержит ссылку на этот зал. Первичный ключ служит уникальным обозначением строки; внешний ключ помогает поддерживать связь с существующей записью другой таблицы. Ограничения должны быть действительно настроены и применяться выбранной системой. Просто назвать столбец номером зала недостаточно, чтобы автоматически запретить ошибочную ссылку. Такая структура также не является тем же самым, что массив объектов в памяти программы.
Изменение объекта и сохранение являются разными действиями
Если программа изменила название у объекта в памяти, это ещё не означает, что новое значение записано в базу. Нужен предусмотренный механизм сохранения и проверка его результата. При следующей загрузке данные снова получают из выбранного хранилища. В учебном проекте полезно явно различать чтение, изменение и сохранение. Тогда легче объяснить, почему после перезапуска старое название вернулось. Также нельзя связывать записи разных таблиц по случайному порядку строк: для связи используются значения ключей и условия запроса.
Попробуйте на практике
Постройте бумажную модель трёх музейных экспонатов и двух залов.
- Создайте три карточки объектов с идентификаторами сорок один, сорок два и сорок три. Придумайте названия и присвойте каждому один из двух условных залов.
- Разложите карточки в массив и подпишите позиции ноль, один и два. Запишите, какой идентификатор находится на каждой позиции.
- Переставьте карточки по алфавиту названий. Сравните новые позиции с идентификаторами и объясните, какие значения изменились, а какие сохранились.
- Нарисуйте две таблицы: залы и экспонаты. Покажите связь по номеру зала и найдите ошибку в вымышленной записи со ссылкой на несуществующий третий зал.
- Измените название на одной карточке объекта, оставив таблицу прежней. Объясните, какое отдельное действие требуется, чтобы обновление появилось в сохранённых данных.
Как проверить результат. Вы различаете индекс и идентификатор, можете показать связь между таблицами и объяснить, почему изменение объекта в памяти не гарантирует сохранения.
Частые вопросы
Может ли идентификатор случайно совпасть с индексом?
Да, но совпадение значений не делает их одной сущностью. После перестановки элементов индекс может измениться, а идентификатор продолжает обозначать тот же предмет.
Если используется ООП, база данных больше не нужна?
Нет. ООП относится к организации программы, а база данных решает задачи хранения и обработки данных. В проекте они могут использоваться совместно.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.