Размазывание знаний


Мощь современных языков программирования может принести вред в неумелых руках.

Возможность лёгким движением руки создавать структуры данных произвольной конфигурации: каждый элемент структуры будет нужного нам типа и называться нужным нам именем (а то и вовсе размещаться под нужным номером) — поставила нас на скользкий путь.

Я говорю о стандартном типе данных «хэш», он же «ассоциативный массив».

Хэш прекрасен, но только до тех пор, пока мы не начинаем его использовать не по прямому назначению, а для представления сущностей предметной области, то есть совокупности атрибутов — значений разного типа и предназначения.

Опасность этого широко распространённого подхода в том, что операции над атрибутами, то есть данными, содержащимися внутри сущностей, отрываются от самих данных.

У большинства сущностей в проекте есть поведение, то есть специфические только им присущие операции над атрибутами. Применить хэш для хранения сущности — то же самое, что создать класс с открытыми полями и без единого метода, да ещё и без явного объявления полей, то есть трижды ущербный класс.

Инкапсуляция как раз и придумана для того, чтобы объединить данные с операциями над ними, да ещё и скрыть реализацию этих операций.

Хэши предназначены для хранения коллекций однородных объектов, доступ к которым предоставляется не по номеру, а по значению произвольного типа (строке и т. п.).

Смотри также