На этом шаге рассмотрим один из типов дополнительных элементов объектной модели - параллелизм.
Существуют задачи, решая которые, автоматические системы должны обрабатывать много разных событий одновременно. Кроме того, решение некоторых задач требует вычислительной мощности, превышающей ресурсы одного процессора. В таких случаях естественно рассмотреть возможность использования сети распределенных компьютеров или перейти в многозадачный режим. Отдельный процесс — это источник независимого динамического действия внутри системы.
Каждая программа имеет по крайней мере один поток управления, но в параллельной системе имеется много таких потоков: как кратковременные, так и долгосрочные. Реальная параллельность достигается только на многопроцессорных системах, а системы с одним процессором могут лишь имитировать параллельность за счет алгоритма разделения времени.
Кроме того, следует различать "тяжеловесный" и "легковесный" параллелизм. Тяжеловесные процессы обычно управляются операционной системой независимо от других и могут иметь свое собственное адресное пространство. Легковесные процессы совместно существуют в рамках отдельной операционной системы, используя одно и то же адресное пространство. Связь между тяжеловесными процессами реализуется посредством межпроцессорного взаимодействия, которое является слишком затратным. Связь между легковесными процессами требует меньшего расхода ресурсов и часто реализуется с помощью общего набора данных.
В то время как объектно-ориентированное программирование сосредоточивает внимание на абстракции, инкапсуляции и наследовании данных, параллелизм делает акцент на абстракции и синхронизации процессов. Объект — это понятие, объединяющее две точки зрения: каждый объект (построенный на основе абстракции реального мира) может представлять собой отдельный поток управления (абстракцию процесса). Такой объект называется активным (active). Система, построенная на основе объектно-ориентированного проектирования, может быть представлена как совокупность взаимодействующих объектов, часть из которых является активной и независимой от других. Следуя этому подходу, можно сформулировать такое определение параллелизма. Параллелизм — это свойство, отличающее активные объекты от пассивных.
Рассмотрим АКТИВНЫЙ_ДАТЧИК_ТЕПЕРАТУРЫ ActiveTemperatureSensor, который периодически измеряет температуру и сообщает клиенту о том, что она отклонилась от установленного значения на определенное количество градусов. Несмотря на то что реализация этого класса пока неизвестна, очевидно, что здесь требуется параллелизм.
Существуют три подхода к параллелизму в объектно-ориентированном проектировании.
Независимо от выбранного подхода включение параллелизма порождает проблему синхронизации работы как активных, так и последовательных объектов. Например, если два объекта пытаются послать сообщения третьему, необходимо использовать определенный механизм взаимной блокировки, гарантирующий, что объект, на который направлено действие, не будет разрушен при одновременной попытке двух активных объектов изменить его состояние. Для решения этой проблемы необходимо использовать идеи абстракции, инкапсуляции и параллелизма.
В параллельных системах недостаточно определить методы объекта - необходимо также принять меры для сбережения семантики этих методов в присутствии нескольких потоков управления.
На следующем шаге рассмотрим персистентность.