Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

5.4.4Пакеты разработки программного обеспечения

Существует тенденция группировать транслятор и другие программы, использующиеся в процессе разработки программного обеспечения, в пакеты, которые функционируют как одна интегрированная система. Такую систему согласно предложенной нами классификации (см. раздел 3.2) можно отнести к прикладному программному обеспечению. Используя такой пакет программ, программист получает доступ к редактору для написания программ, транслятору для перевода программы на машинный язык и большому количеству инструментов отладки, которые позволяют следить за выполнением программы и обнаруживать «глюки».

Использование такой интегрированной системы дает множество преимуществ. Самое очевидное из них заключается в том, что программист в процессе изменения и проверки программы с легкостью может переключаться между редактором и инструментами отладки. Кроме того, большинство пакетов разработки программного обеспечения позволяют связывать зависимые программные единицы, находящиеся в разработке, упрощая тем самым доступ к ним. Некоторые пакеты ведут учет того, какую программную единицу из группы зависимых изменили с момента последней контрольной точки. Такие возможности очень полезны при разработке больших систем программного обеспечения, когда множество взаимосвязанных элементов создаются разными программистами.

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

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

В разделе 5.1 мы говорили о том, что объектно-ориентированная парадигма программирования подразумевает создание активных программных единиц — объектов, которые состоят из процедур, описывающих, как объект должен отвечать на различные стимулы. При объектно-ориентированном подходе к решению задачи определяются необходимые объекты, которые затем описываются как самостоятельные единицы. В свою очередь объектно-ориентированные языки программирования предоставляют средства для выражения таких идей. В данном разделе мы познакомимся с некоторыми из этих средств и тем, как они представлены в трех наиболее известных объектно-ориентированных языках: C++, Java и С#.

5.5.1Классы и объекты

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

Согласно объектно-ориентированной парадигме каждый лазер в игре будет реализован как объект, содержащий информацию об оставшемся запасе энергии и процедуры для наведения луча на цель и выстрела. Поскольку свойства всех этих объектов (лазеров) одинаковы, их можно создавать по одному шаблону. В объектно-ориентированном программировании такой шаблон называется классом (class). В языках C++, Java и С# класс описывается с помощью следующего оператора:

class Имя_класса {

}:

где Имя_класса — это имя, по которому к классу обращаются в программе. В фигурных скобках описываются свойства класса.

Class LaserClass

{ int RemainingPower - 100; ~ Описание данных, которые

будут находиться в каждом

объекте данного типа

void turnRight ( )

---------1--------- Методы, описывающие,

{• • ■} как объекты данного типа

должны отвечать void turnteft ( ) на различные сообщения

void fire С )

} Рис. 5.22. Структура класса, описывающего лазерное оружие в компьютерной игре

Например, класс LaserClass, описывающий лазеры в нашей компьютерной игре, изображен на рис. 5.22. (Более детальное описание этого класса приводится позднее на рис. 5.24.) Любой объект, созданный по этому образцу, будет включать в себя

целочисленную переменную RemainingPower и три процедуры — turnRight, turnLeft и f i re, описывающие шаги для выполнения поворота направо, поворота налево и выстрела. Переменная объекта, такая как RemainingPower, называется переменной экземпляра (instance variable), а процедура объекта называется методом (method) (или, согласно терминологии языка C++, функцией-членом (member function)). Обратите внимание на то, что на рис. 5.22 переменная экземпляра RemainingPower объявляется с помощью оператора описания, подобного тому, который мы обсуждали в разделе 5.3, а методы описываются как процедуры и функции, рассматриваемые нами там же. В самом деле, объявление переменных и описание методов, в сущности, являются понятиями императивного программирования.

5.5.2CORBAи RMI

Принципы объектно-ориентированного программирования используются при создании общесетевых систем программного обеспечения. Для таких систем разрабатываются общесетевые инфраструктуры, с помощью которых объекты могут обмениваться сообщениями по сети. Одна из технологий построения распределенных приложений называется CORBA (Common Object Request Broker Architecture — обобщенная архитектура обработчика объектных запросов). Она представляет собой систему инструкций для организации передачи сообщений между объектами. Другая технология называется RMI (Remote Method Invocation — удаленный вызов метода). Эта технология была разработана компанией Sun Microsystems и поддерживается программной средой Java, (более подробно с языком Java мы познакомимся позже в этой главе.) Разработчики программного обеспечения, использующие программную среду Java, находят, что технология RMI очень удобна при создании объектов, которые будут взаимодействовать с другими Java-объектами. Технология же CORBA обычно применяется при создании объектов в других языках программирования.

Описав класс LaserClass, мы можем объявить три переменных типа LaserClass с помощью оператора

LaserClass Laserl. Laser2. Laser3;

Обратите внимание на то, что такая же конструкция используется для описания трех целочисленных переменных х, у и z:

int x. у. 2;

Оба эти оператора состоят из имени типа и списка объявляемых переменных. Различие же заключается в том, что элемент, присвоенный переменной х, создается согласно заранее определенному шаблону целого числа (предопределенный тип данных), в то время как элемент, присвоенный переменной Laserl, создается согласно шаблону, определенному в программе как класс.

В языке C++ в результате выполнения приведенного выше оператора будут созданы три объекта типа LaserClass и присвоены переменным Laserl, Laser2 и Laser3. Однако в языках Java и С# будут просто созданы переменные, которым затем можно присвоить значения. Для того чтобы создать объект типа LaserCl ass и присвоить его переменной Laserl, в этих языках нужно использовать оператор

LaserClass Laserl = new LaserClassO;

Такой оператор не только описывает переменную типа LaserClass, но и создает новый объект, используя для этого шаблон LaserClass, и присваивает его пере-

менной Laserl. В этом случае оператор также похож на тот, который используется для объявления предопределенных типов данных. Например, оператор

int х = 3;

не только описывает тип переменной х, но и присваивает новой переменной значение 3.

Вне зависимости от того, с каким языком мы работаем, создав объекты и назначив им имена Laserl, Laser2 и Laser3, мы можем продолжить нашу программу, вызывая соответствующие методы этих объектов. Например, чтобы объект Laserl выполнил метод fire, нужно использовать оператор

Laserl.fire О:

А для того чтобы объект Laser2 выполнил метод turnLeft, используется оператор

Laser2.turnLeft О:

Прежде чем продолжить, давайте рассмотрим отношение понятий класса и объекта. Класс представляет собой шаблон, по которому создаются объекты: Один класс можно использовать для создания большого количества объектов. Часто объект называют экземпляром класса (instance). Следовательно, в нашей компьютерной игре имена Laserl, Laser2 и Laser3 используются для обозначения экземпляров класса LaserClass.