Шаг 4 - Операторы, функции, классы и пространства имен.

Давным давно, весь код состоял из команд и меток. В простых языках программы так же состояли из операторов и меток (примеров не знаю, разве что машина Тьюринга).

По мере усложнения программ начали использовать служебные подпрограммы, а в архитектуру компьютера ввели стек возвратов. Подпрограммы помечались меткой начала, а завершались командой возврата (пример - BASIC в ZX Spectrum).

Без комментариев было трудно выяснить, значение каких переменных программы нужно задать перед вызовом подпрограммы, и какие переменные меняются в процессе ее работы. Тогда подпрограммы начали называть функциями и ввели понятия глобальных и локальных переменных и параметров. Теперь стало нужно явно указывать, какие переменные передаются в функцию и какие используются внутри (пример - язык "чистый C").

Программы становились сложнее. Стали создаваться наборы функций, предназначенных для выполнения частей единой задачи и использующих набор общих глобальных переменных. Вскоре выяснилось, что пользователю нужно знать только часть функций, а вспомогательные функции и данные желательно скрыть. Так появились модули (пример - модули в Turbo Pascal 6.0). А чтобы модули можно было различать, им давали имена.

Был однако у модулей недостаток - у модуля могло быть только одно состояние (набор значений переменных). Нельзя иметь несколько экземпляров модуля с разными состояниями. И тогда придумали концепцию "классы" - "объекты". Класс описывает с какими данными ведется работа и какие функции эту работу проводят. А объект - это конкретный набор переменных, соответствующих описанию в классе. Функции класса одинаковые для всех объектов, поэтому их код хранится в одном экземпляре. Функции переименовали в функции-члены или методы, а переменные в переменные-члены или поля. (Пример - первые версии C++).

А программы все усложнялись ;) И стало много классов, каждый со своим именем. А так как программы пишут коллективы людей, то не удивительно, что имена разных классов могли случайно совпасть. И тогда придумали пространства имен, а каждому пространству стали давать свое имя. Это как разные комнаты - разные предметы с одинаковым названием (люстры например) могут находиться в доме, но эти предметы можно различить по номеру комнаты. (Примеры языков с пространствами имен - C#, стандартный C++)

Данное изложение сильно упрощено, зато оно короткое и упоминает основные приемы организации кода.

Пространства имен

Вообще области видимости появились с того момента, когда переменные разделились на глобальные и локальные, однако как синтаксическая конструкция пространства имен возникли недавно.

namespace SomeName
{
	// ... content of namespace resides there
}

Им дали возможность быть вложенными, как папкам в файловой системе.

namespace SomeOtherName
{
	namespace NameOfNestedNamespace
	{
	}
}

Существует еще глобальное пространство имен, туда помещаются те классы, которые не находятся внутри конструкции namespace.

Можно присоединить к глобальному пространству имен все public имена из другого пространства имен при помощи конструкции using. Строки с using обычно пишутся подряд в начале текстового файла.

using SomeName;
using SomeOtherName;
...
other text of file


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Сергей Радкевич