Вы можете рассматривать функцию как вычислительную реализацию некоторой способности или поведения.
Например, если вы моделируете лампу, которую вы можете включить или выключить, вы можете зафиксировать эти возможности в двух функциях.switchON()
и switchOFF()
.Или вы могли бы предпочесть реализовать те же способности, используя одну функцию switch(b)
с формальным параметром b
и т. Д. Обдумывая эти соображения, само понятие lamp значительно упрощается, так как вы будетеинтересуют только некоторые аспекты реальной лампы: состояние (ВКЛ / ВЫКЛ), цвет и т. д. В зависимости от роли, которую лампа будет играть по отношению к другим объектам, вы будете включать некоторые характеристики и игнорировать многие другие (например, цену, вес).и т. д.).
Область, определяющая вашу модель, т. е. функции, на которые вы будете обращать пристальное внимание, составляет вашу абстракцию лампы.Вы можете думать об абстракции как о карикатуре, версии фактической вещи (или концепции), разделяющей столько оригинальных атрибутов, сколько напоминает ее, а не столько, сколько возможно, чтобы полностью воспроизвести ее.
Что такое уровень абстракции тогда?Это набор атрибутов и поведений, которые представляют определенную черту, принадлежащую модели: тот, который имеет отношение к достижению какой-то цели.
Например, если ваша цель - моделировать светофор, ваш Лампа должна иметь возможность только включать и выключать и иметь цвет внутри ЗЕЛЕНЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ.
Теперь предположим, что вы хотите смоделировать динамическую систему движения для оптимизации потока транспортных средств вгород.Ваши абстракции должны включать улицы, перекрестки, проспекты и т. Д. При создании модели вы будете переключаться между различными уровнями: лампа, светофор, зеленая волна, часы пик, праздники, выходные.
Идея, которую автор пытался донести, состоит в том, что было бы плохо для функции контроллера, такой как circumvent(accident)
, включать строку кода, касающуюся реализации switch(b)
, потому что такая строка кода принадлежитдругой уровень детализации, т. е. в другом уровне абстракции, который соответствует реализации лампы.Точно так же было бы плохо для тела circumvent(accident)
ссылаться на какое-то условие SELECT
базы данных, где хранится информация, потому что такая строка кода хорошо подходит только для уровня хранилища данных (который знает очень малоо accident
).
Итак, при разработке программы или приложения обратите особое внимание на распознавание различных его слоев.А затем, при написании функции, убедитесь, что ее код принадлежит только одной из ваших абстракций.