Что следует запомнить
В этой главе вы узнали о структурах данных и алгоритмах. Вот основные моменты, торые стоит запомнить.
• При разработке программ необходимо хорошо продумать структуры данных и применяемые алгоритмы.
• Не существует одной самой лучшей структуры данных и одного самого лучше¬го алгоритма. И для структуры данных, и для алгоритма нужны компромиссы. Необходимо выбрать такую структуру данных и алгоритм, которые лучше все¬го подходят к вашим конкретным потребностям с наименьшим количеством недостатков.
• Структуры данных и алгоритмы не должны принадлежать тому же классу. Они могут быть разными типами, и'зачастую именно так и есть.
• Структуры данных могут быть реализованы как значения, с помощью ключевого слова (struct) или как ссылочный тип (class).
• Типы значений, используемые как структуры данных, имеют три ограничения. Необходимо знать, что их данные копируются, что происходит, когда вы включаете ссылочный тип в тип значения или когда используете тип значения в качестве параметра метода.
• Как правило, вы используете ссылочные типы, но можете также использовать типы значений. При использовании типов значения необходимо знать, как это значение поведет себя в разных случаях, чтобы избежать нежелательных эффектов.
• Конструктор — это специальный тип метода, вызываемого при создании экзем¬пляра объекта. Если вы хотите получать объект сразу в работоспособном состоя¬нии, то вы можете использовать конструктор с параметрами.
• Эмпирическое правило использования типов значения и ссылочных типов — учет контекста. Вы создаете простую структуру, заполняемую только один раз, или сложную структуру с навигацией? Если ваша структура сложна, то используйте ссылочный тип; в противном случае прекрасно подходит тип значения.
• Когда вы создаете экземпляр типа, каждый объект имеет свой собственный экзем¬пляр методов и переменных-членов. Когда тип объявляет методы или переменные-члены с ключевым словом static, этот тип будет иметь единый экземпляр метода или переменной-члена, не связанный ни с одним конкретным экземпляром.
• Написание проверок до реализации типа позволяет разработчику выяснить то как тип должен выглядеть и вести себя, что предоставляет некоторое руководстве по его созданию.
• Когда вы пишете методы, не стоит особенно полагаться на волшебные данные, делающие всю работу. При написании классов необходимо учитывать фурнитуру IKEA (требует сборки), поскольку это сделает ваш код гибче и обеспечит его много¬кратное использование.
• Когда вы пишете циклы for, считайте операторы в скобках кодом, создающим индекс, для получения фактической информации в ходе итераций.
• Решения принимаются с помощью комбинаций операторов if, else if и else.