Представьте, что вы дальнобойщик. Ваш грузовик — это компьютер. А ваш маршрут от склада до магазина — это программа, которую нужно выполнить. Большинство языков программирования дают вам длинный список точных инструкций: "поверни налево через 200 метров", "разгрузи три коробки", "позвони диспетчеру". Язык Smalltalk работает иначе. Он даёт вам не список, а целый мир объектов, с которыми можно разговаривать.
В Smalltalk всё является объектом. Число 5 — объект. Окно на экране — объект. Ваш грузовик в этой аналогии — тоже объект. Каждый объект может получать сообщения. Это как если бы вы, будучи грузовиком, могли получать сообщения: "грузовик, подай звуковой сигнал" или "грузовик, каков твой текущий вес?". Вы не выполняете команды, вы реагируете на запросы.
Вместо того чтобы написать сложную формулу, вы отправляете сообщение объекту. Например, чтобы прибавить 10 к числу 5, вы буквально говорите числу 5: "эй, прибавь к себе 10". На языке Smalltalk это пишется так: 5 + 10. Здесь 5 — объект (число), + — сообщение, а 10 — аргумент. Объект сам знает, как обработать это сообщение.
Что находится под капотом вашего грузовика? Мотор, топливный насос, генератор. Но вам как водителю не нужно лезть туда руками для каждой операции. У вас есть интерфейс: педаль газа, руль, приборная панель. Так и в Smalltalk: внутреннее устройство объекта скрыто (инкапсуляция). Вы взаимодействуете с ним только через его "приборную панель" — набор сообщений, которые он понимает. Вы говорите "грузовик, заведись", а как именно он это делает — его дело.
Допустим у вас есть базовая модель грузовика. Хотите создать рефрижератор? Вам не нужно описывать его с нуля. Вы говорите: "возьми всё от обычного грузовика, но добавь холодильную установку и датчик температуры". Это и есть наследование. Новый объект (рефрижератор) наследует все свойства и умения родительского объекта (грузовика), а вы добавляете лишь отличия.
Smalltalk был создан в 1970-х годах и стал одним из первых по-настоящему объектно-ориентированных языков. Он повлиял на множество современных технологий. Самая важная его идея в том, что программист не пишет сухой код, а моделирует мир из взаимодействующих объектов. Это как если бы вместо управления каждым винтиком в грузовике вы просто разговаривали с умным помощником, который сам знает все детали своей работы.
"Smalltalk — это язык общения с компьютером на уровне здравого смысла."