Смекни!
smekni.com

Факультет вычислительной математики и кибернетики (стр. 7 из 15)

comms

-------------------> |y y * y | -> chan2

Программа , адекватная приведенной выше схеме , будет иметь вид :

CHAN comms

PAR

VAR x:

WHILE x>0

SEQ

chan1 ? x

comms ! x*x

VAR y:

WHILE y>0

SEQ

comms ?y

chan2 ! y*y

Данная программная конструкция определяет два взаимодействующих параллельных процесса с результатом вычисления x4 , который выводится в канал chan2 . Взаимодействие параллельных процессов

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

к тому , что вычисление y2 = ( x2 ) 2 может выполняться одновременно

с вычислением квадрата последующего введенного значения

переменной x .

Приведенную выше программу можно написать короче , если определим следующую процедуру :

PROC square (CHAN source, sink) =

VAR x:

WHILE x>0

SEQ

source ? x

sink ! x*x

Таким образом , на основе определенной выше процедуры , перепишем программу следующим образом :

CHAN comms

PAR

square (chan1 , comms)

square (comms , chan2)

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

программу моделирования работы цифрового радиоприемника , точнее

часть программы , управляющей громкостью звучания. Для управления

звуком мы имеем две клавиши louder и softer , нажимая которые мы либо увеличиваем громкость звучания (louder) , либо уменьшаем (softer) .При

программировании будем представлять эти клавиши в виде каналов.

Кроме каналов louder и softer введем канал amplifier , который будет определять усилитель. Наконец , введем переменную volume , целочисленное значение которой будет определять громкость звучания .

Передача значения переменной volume на усилитель amplifier будет выполняться оператором amplifier ! volume .

Таким образом процесс

SEQ

volume:=volume +1

amplifier ! volume

моделирует увеличение громкости , а процесс

SEQ

volume:=volume -1

amplifier ! volume

моделирует уменьшение громкости .

Далее , нажатие клавиши louder будет активизировать выполнение

оператора louder ? ANY , а нажатие клавиши softer будет активизировать выполнение оператора softer ? ANY. Значение переменной ANY здесь не играет никакой роли , для нас является важным только сам факт выполнения события ввода ( louder ? ANY или softer ? ANY ) . Таким

образом мы получаем следующую альтернативную операцию :

(louder ? ANY -> LPROC) | (softer ? ANY ->SPROC ) ,

где процесс LPROC моделирует увеличение громкости , а процесс SPROC моделирует уменьшение громкости . То есть при выполнении события louder ? ANY запускается процесс LPROC , а при выполнении события softer ? ANY запускается процесс SPROC . На языке OCCAM

имеем :

ALT

louder ? ANY

LPROC

softer ? ANY

SPROC

На основе вышеперечисленного представим следующую программу

на языке OCCAM :

VAR volume:

SEQ

volume:=0

WHILE true

ALT

louder ? ANY

SEQ

volume:=volume +1

amplifier ! volume

softer ? ANY

SEQ

volume:=volume -1

amplifier ! volume

Конструкция WHILE true определяет " бесконечный цикл " до выключения цифрового радиоприемника .

В приведенной выше программе не определены верхняя и нижняя границы громкости звучания . Для учета этих границ программу можно переписать следующим образом :

DEF max=10, min=2

VAR volume:

SEQ

volume:=0

WHILE true

ALT

( volume<max ) & ( louder ? ANY )

SEQ

volume:=volume +1

amplifier ! volume

( volume>min ) & (softer ? ANY)

SEQ

volume:=volume -1

amplifier ! volume

В настоящее время используется достаточно большое количество языков параллельного программирования . Это - диалекты и расширения известных языков ( например CC++ , C/C+ , PARSEC и т.д.) , а также

языки , специально созданные для параллельных вычислений

( ADA , Concurrent Clean ,MODULA 3 и другие) . Язык OCCAM отличается от всех этих перечисленных языков своей оригинальностью , простотой

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

2.6. Объектно-ориентированное программирование.

2.6.1.Основные определения и принципы.

При объектно-ориентированном подходе в качестве основного строительного блока в процессе программирования выступает объект , принадлежащий определенному классу ( являющийся экземпляром определенного класса ) . Идея объектно-ориентированного подхода появилась при проведении исследований в области языков

программирования , а впервые была реализована при создании языка моделирования SIMULA , в котором впервые появилось и было использовано в программировании понятие класса объектов. Дальнейшее развитие объектно-ориентированного подхода , вызвавшее достаточно широкий интерес к этому способу программирования , связывают с появлением языка SMALLTALK . Следует отметить важную особенность большинства объектно-ориентированных систем программирования , которые , наряду с объектно - ориентированными средствами , предоставляют программистам возможность процедурно-

ориентированного программирования , позволяя гибко сочетать разные подходы в процессе разработки программ. Здесь мы ограничимся рассмотрением только основных принципов объектно- ориентированного программирования . Более полное и детальное описание объектно-

- ориентированного подхода можно найти в книге [ 3 ] .

Определим ряд основополагающих понятий объектно-ориентированного подхода к проектированию и реализации программного обеспечения .

Объектно-ориентированное проектирование - это методология проектирования , основанная на объектной декомпозиции и приемах представления логической , физической ,статической и динамической моделей проектируемого программного обеспечения . При процедурно - - ориентированном походе проектирование основывается на

алгоритмической ( процедурной ) декомпозиции , которая предусматривает представление некоторого программного модуля P в виде

P = W ( P1 ,P2 ,…,Pn ) ,

где W - функция , реализуемая в соответствующей среде программирования , а P1 ,P2 ,…,Pn - модули , из которых строится модуль P . Объектная декомпозиция предполагает , что в качестве элементов P , P1 ,P2 ,…,Pn вместо программных модулей фигурируют объекты .

Объектно-ориентированное программирование - это методология программирования , основанная на представлении программ в виде совокупности объектов , каждый из которых является экземпляром

определенного класса с наследованием свойств этого класса. Поскольку

во многих современных объектно-ориентированных системах

программирования каждый класс может представляться в качестве экземпляра более абстрактного класса , то в этих случаях классы образуют иерархию наследования . Содержательно класс можно рассматривать как некий абстрактный объект , наделяемый свойствами , характерными для некоторого множества объектов . В последнее время появилось достаточно много различных объектно-ориентированных систем про-граммирования , среди которых нибольшую популярность приобрели C++ , DELPHI , JAVA , UML . Особое место отводится объектно-ориентированным системам управления базами данных

( СУБД ) . В отличие от других систем программирования , СУБД представляют эффективные средства для обработки больших информационных структур . По мнению многих разработчиков программного обеспечения именно появление и дальнейшая модификация СУБД спровоцировало широкое внедрение объектно -

- ориентированного подхода . Примерами объектно-ориентированных СУБД , получивших широкое распространение , являются CACHE , VisualFoxpro , MS SQL , JASMINE , ORACLE . С другой стороны

многие современные системы программирования (например такие ,

как C++ ) , изначально не рассматриваемые в качестве СУБД , снабжа-ются в настоящее время дополнительными средствами обработки баз данных .

Методы - это процедуры и функции , реализующие операции над классами и объектами в объектно-ориентированном программировании .

Основными принципами объектно - ориентированного

программирования являются наследование , инкапсуляция и полиморфизм .

Принцип наследования заключается в передаче свойств от класса к экземпляру этого класса , который может представлять либо просто

объект или в свою очередь класс. Таким образом наследование тесно связано с иерархией классов , определяющей родительские и дочерние классы ( объекты ) . Если некоторый класс обладает некоторым фиксированным набором свойств , то экземпляр этого класса содержит тот же набор свойств и , возможно , дополнительные новые свойства , характерные для соответствующего экземпляра. Ниже следует пример

иерархической вложенности классов :

класс "Компьютер" -> класс "Персональный компьютер"->

класс " Персональный компьютер типа Pentium 4" ->

объект " конкретный персональный компьютер типа Pentium 4

№51175-028-9713636-11440 "

Инкапсуляция - это сокрытие деталей реализации классов и объектов. Можно также рассматривать инкапсуляцию как процесс отделения интерфейса от методов реализации . Если вернуться к примеру

с классом "Компьютер" , то можно проиллюстрировать инкапсуляцию следующим образом .Основным субъектом , взаимодействующим с этим классом , является пользователь , которому нет необходимости в совершенстве знать внутреннее устройство компьютера . Этот принцип

позволяет эффективно модифицировать объектно-ориентированные программы , .

Полиморфизм представляет свойство , позволяющее по разному интер-претировать выполняемые одноименные методы в зависимости от того , какому из классов относится тот или иной метод . Например , операция "выключить" по разному выполняется по отношению к таким различным объектам , как электрический свет , компьютер и автомобиль.

К другим принципам , которые , как правило , присущи большинству

современных объектно-ориентированных систем относятся следующие .