Базовый CS с нуля
Абстракция: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый — решение, которое принимает работающий программист: не определение для заучивания, а граница между тем, что abstraction обещает, и тем, что она реально прячет.
Убедись, что связываешь четыре идеи, к которым вёл юнит — interface против implementation, encapsulation внутри связки, границу module и namespacing, а также компромисс протекающей abstraction — и применяешь их к коду, который ещё не видел.
Команда переписывает тело add(a, b), чтобы считать сумму быстрее. Имя, два входа и возвращаемая сумма остаются те же. Сколько из сотен мест вызова надо изменить и почему?
Объект-счётчик связывает поле данных count с методами increment() и value(). Что на самом деле даёт здесь encapsulation?
Module определяет шесть имён и помечает два как exports. Внешний код пытается вызвать одно из четырёх неэкспортированных имён напрямую. Что происходит и почему границу стоило сделать принудительной?
Большой программе нужны две функции, обе разумно названные format — одна для дат, другая для валюты. Почему помещение каждой в свой module не даёт им столкнуться?
Abstraction вызова функции отлично работает тысячи обычных вызовов, затем безудержная рекурсия падает с ошибкой stack overflow, называющей кадры стека. Как прочитать это через юнит?
Раз любая нетривиальная abstraction протекает, коллега заключает: можно перестать учить слои под теми, в которых работаешь. Что не так с этим выводом?
Сквозная нить юнита — одна цепочка: abstraction — это фиксированный interface над скрытой, заменяемой implementation; связка применяет это к данным плюс операциям над ними и зовёт сокрытие encapsulation; module применяет это к целой группе кода с принудительной границей и namespacing, так что приватная деталь остаётся недосягаемой, а короткие имена перестают сталкиваться; а укладка этих слоёв — то, как управляют сложностью. Цена — протечка: любая нетривиальная abstraction проступает нижним слоем, когда тот падает или тормозит, поэтому interface используют ради рассуждения, что он даёт, и всё равно учат машинерию под ним.