
- •Экзаменационные вопросы Дисциплина: «Технология разработки программных продуктов»
- •Определение технологии конструирования программного обеспечения. Технология программирования. Программная инженерия.
- •Требования к программному средству.
- •Существенные черты программных средств как сложных систем.
- •Характеристики качества программного изделия.
- •Структура жизненного цикла. Большой жизненный цикл.
- •Структура жизненного цикла. Малый жизненный цикл.
- •Классический жизненный цикл пи. Водопадная модель. Классический жизненный цикл
- •Макетирование.
- •Стратегии конструирования по: инкрементная модель.
- •Стратегии конструирования по: быстрая разработка приложений.
- •Стратегии конструирования по: спиральная модель.
- •Руководство проектом. Планирование расписания работ.
- •Руководство проектом. Ввод, распределение ресурсов, анализ полученного расписания. Ввод и распределение ресурсов для выполнения проекта
- •Анализ полученного расписания
- •Руководство проектом. Контроль за исполнением проекта.
- •Особенности ценообразования программных продуктов.
- •Конструктивная модель стоимости: затратный подход.
- •Конструктивная модель стоимости: рыночный подход.
- •Конструктивная модель стоимости: доходный подход.
- •Проектирование программного изделия. Основные этапы.
- •Системный анализ. Требования при разработке технического задания. Техническое задание
- •Общие положения
- •Содержание разделов технического задания
- •Стадии разработки программ: эскизный проект.
- •Стадии разработки программ: технический проект.
- •Стадии разработки программ: рабочий проект.
- •Виды схем и их особенности.
- •Модульно – иерархическое построение программы. Основные принципы структурной методологии.
- •Типовая структура модуля.
- •Модуль. Виды связности.
- •Модуль. Виды сцепления.
- •Сцепление по управлению
- •Общие правила проектирования программного средства: связь по управлению.
- •Общие правила проектирования программного средства: связь по информации.
- •Стиль программирования
- •Стандарты структурного программирования.
- •Внешнее проектирование модулей.
- •Проектирование и кодирование логики модулей.
- •Проектирование программных средств: разработка архитектуры.
- •Проектирование программных средств: процедурная разработка.
- •Принципы объектно-ориентированного программирования: инкапсуляция.
- •Принципы объектно-ориентированного программирования: полиморфизм.
- •Принципы объектно-ориентированного программирования: наследование.
- •Объектно-ориентированный подход в программировании: области доступности элементов класса.
- •Сущность объектного подхода к разработке программных средств: классы, объекты, методы.
- •Основные принципы создания пользовательского интерфейса.
- •Типичные ошибки разработки интерфейса.
- •Современные компоненты интерфейса пользователя. Размещение информации на экране
- •Выделение элементов интерфейса яркостью
- •Использование цвета при проектировании эргономичного интерфейса
- •Непротиворечивость и стандартизация
- •Тексты и диалоги
- •Средства управления графического интерфейса пользователя.
- •Изображения (Иконки)
- •Ментальная модель пользовательского интерфейса.
- •Модель пользователя.
- •Модель программиста.
- •Основные принципы создания меню. Меню
- •Основные принципы создания меню
- •Предотвращение, обнаружение и исправление ошибок.
- •Обработка ошибок в формах ввода
- •Средства организации и работы с графикой.
- •Файлы проекта Delphi.
- •Структура модуля программы Delphi.
- •Окна программы Delphi.
- •Библиотека визуальных компонентов vcl и ее базовые классы.
- •Управление свойствами визуальных компонент в процессе выполнения.
- •Организация ветвлений при разработке программ.
- •Средства организации и обработки событий.
- •Средства организации и работы с файлами.
- •Подпрограммы работы с файлами
- •Компоненты tOpenDialog и tSaveDialog
- •Средства организации и работы с модулями.
Сущность объектного подхода к разработке программных средств: классы, объекты, методы.
Под объектами понимают некоторую абстрактную сущность, заданную набором имен атрибутов и имен методов поведения. Но объект не имеет никакого конкретного состояния, т.к. его атрибуты не имеют значений.
Объект — это конкретное представление абстракции. Объект обладает индивидуальностью, состоянием и поведением. Структура и поведение подобных объектов < определены в их общем классе. Термины «экземпляр класса» и «объект» взаимозаменяемы.
Индивидуальность — это характеристика объекта, которая отличает его от всех, других объектов.
Состояние объекта характеризуется перечнем всех свойств объекта и текущими значениями каждого из этих свойств (рисунок 16.1).
Объекты не существуют изолированно друг от друга. Они подвергаются воздействию или сами воздействуют на другие объекты.
Поведение характеризует то, как объект воздействует на другие объекты (или подвергается воздействию) в терминах изменений его состояния и передачи сообщений. Поведение объекта является функцией как его состояния, так и выполняемых им операций (Купить, Продать, Взвесить, Переместить, Покрасить). Говорят, что состояние объекта представляет суммарный результат его поведения.
Операция обозначает обслуживание, которое объект предлагает своим клиентам. Возможны пять видов операций клиента над объектом:
модификатор (изменяет состояние объекта);
селектор (дает доступ к состоянию, но не изменяет его);
итератор (доступ к содержанию объекта по частям, в строго определенном по рядке);
конструктор (создает объект и инициализирует его состояние);
деструктор (разрушает объект и освобождает занимаемую им память).
-
Стул
Стоимость
Вес
Размеры
Положение
Цвет
Купить ()
Продать ()
Взвесить ()
Переместить ()
Покрасить ()
Представление объекта с именем Стул
Примеры операций приведены в таблице 16.1.
Разновидности операций
-
Вид операции
Пример операции
Модификатор
Пополнеть (кг)
Селектор
КакойВес (): integer
Итератор
ПоказатьАссортиментТоваров (): string
Конструктор
СоздатьРобот (параметры)
Деструктор
УничтожитьРобот ()
В некоторых задачах принципиально подчеркнут характер отношений между объектом и его экземплярами. Примерами таких отношений являются:
а) объект не может иметь экземпляров (имеет 0 экземпляров)
б) объект может иметь только один экземпляр в рамках данной задачи
в) объект может иметь много экземпляров
Примером отношений являются:
а) объект млекопитающее не может иметь экземпляров, т.к. любое реальное млекопитающее является экземпляром объекта-потомка от млекопитающего.
б) объект "президент России" может иметь только один экземпляр в течение некоторого периода времени.
в) объект ястерб-тетеревятник имеет множество экземпляров.
Возможность контроля допустимого количества экземпляров объекта увеличивает надежность системы за счет исключения ошибок при создании недопустимых экземпляров.
В общем случае все методы и свободные подпрограммы, ассоциированные с конкретным объектом, образуют его протокол. Таким образом, протокол определяет оболочку допустимого поведения объекта и поэтому заключает в себе цельное (статическое и динамическое) представление объекта.
Большой протокол полезно разделять на логические группировки поведения. Эти группировки, разделяющие пространство поведения объекта, обозначают роли, которые может играть объект.
С точки зрения внешней среды важное значение имеет такое понятие, как обязанности объекта.
Обязанности означают обязательства объекта обеспечить определенное поведение. Обязанностями объекта являются все виды обслуживания, которые он предлагает клиентам. В мире объект играет определенные роли, выполняя свои обязанности.
Наличие у объекта внутреннего состояния означает, что порядок выполнения им операций очень важен. Иначе говоря, объект может представляться как независимый автомат. По аналогии с автоматами можно выделять активные и пассивные объекты (рисунок 16.2).
Объекты
Активные
объекты (самостоятельное поведение)
Пассивные
объекты (поведение по заказу)
Активные и пассивные объекты
Активный объект имеет собственный канал (поток) управления, пассивный — нет. Активный объект автономен, он может проявлять свое поведение без воздействия со стороны других объектов. Пассивный объект, наоборот, может изменять свое состояние только под воздействием других объектов.
Классом в Object Pascal называется структура языка, которая может иметь в своем составе переменные, функции и процедуры. Переменные в зависимости от предназначения именуются полями или свойствами (см. ниже). Процедуры и функции класса — методами. Соответствующий классу тип будем называть объектным типом:
type
TMyObject = class(TObject)
MyField: Integer;
function MyMethod: Integer;
end;
В этом примере описан класс TMyObject, содержащий поле MyField и метод
MyMethod.
Поля объекта аналогичны полям записи (record). Это данные, уникальные для каждого созданного в программе экземпляра класса. Описанный здесь класс TMyObject имеет одно поле — MyField.
Методы — это процедуры и функции, описанные внутри класса и предназначенные для операций над его полями. В состав класса входит указатель на специальную таблицу, где содержится вся информация, нужная для вызова методов. От обычных процедур и функций методы отличаются тем, что им при вызове передается указатель на тот объект, который их вызвал. Поэтому обрабатываться будут поля именно того объекта, который вызвал метод. Внутри метода указатель на вызвавший его объект доступен под зарезервированным именем self.
Понятие свойства будет подробно рассмотрено ниже. Пока можно определить его как поле, доступное для чтения и записи не напрямую, а через соответствующие методы.
Классы могут быть описаны либо в секции интерфейса модуля, либо на верхнем уровне вложенности секции реализации. Не допускается описание классов "где попало", т. е. внутри процедур и других блоков кода.
Разрешено опережающее объявление классов, как в следующем примере:
type
TFirstObject = class;
TSecondObject = class(TObject)
Fist : TFirstObject;
...
end;
TFirstObject = class(TObject)
...
end;
Чтобы использовать класс в программе, нужно, как минимум, объявить переменную этого типа. Переменная объектного типа называется экземпляром класса или объектом:
var
AMyObject: TMyObject;
До введения термина "класс" в языке Pascal существовала двусмысленность определения "объект", который мог обозначать и тип, и переменную этого типа. Теперь же существует четкая граница: класс — это описание, объект — то, что создано в соответствии с этим описанием.
В Object Pascal экземпляры объектов могут быть только динамическими. Это означает, что в приведенном выше фрагменте переменная AMyObject на самом деле является указателем, содержащим адрес объекта.
Под объектами понимают некоторую абстрактную сущность, заданную набором имен атрибутов и имен методов поведения. Но объект не имеет никакого конкретного состояния, т.к. его атрибуты не имеют значений.
Объект — это конкретное представление абстракции. Объект обладает индивидуальностью, состоянием и поведением. Структура и поведение подобных объектов определены в их общем классе. Термины «экземпляр класса» и «объект» взаимозаменяемы.
Индивидуальность — это характеристика объекта, которая отличает его от всех, других объектов.
Состояние объекта характеризуется перечнем всех свойств объекта и текущими значениями каждого из этих свойств.
Объекты не существуют изолированно друг от друга. Они подвергаются воздействию или сами воздействуют на другие объекты.
Объект "появляется на свет" в результате вызова специального метода, который инициализирует объект — конструктора. Созданный экземпляр уничтожается другим методом — деструктором:
AMyObject := TMyObject.Create;
{ действия с созданным объектом }
...
AMyObject.Destroy;
Вызывается метод TMyObject.Create, а не AMyObject.Create. Есть такие методы (в том числе конструктор), которые успешно работают до (или даже без) создания объекта.
В Object Pascal конструкторов у класса может быть несколько. Общепринято называть конструктор create (в отличие от Turbo Pascal, где конструктор обычно назывался init, и от C++, где его имя совпадает с именем класса). Типичное название деструктора — Destroy.
type
TMyObject = class(TObject)
MyField: Integer;
Constructor Create;
Destructor Destroy;
Function MyMethod: Integer;
end;
Для уничтожения экземпляра объекта рекомендуется использовать метод Free, который первоначально проверяет указатель (не равен ли он Nil) и только затем вызывает Destroy:
AMyObj ect.Free ;
До передачи управления телу конструктора происходит собственно создание объекта — под него отводится память, значения всех полей обнуляются. Далее выполняется код конструктора, написанный программистом для инициализации экземпляров данного класса. Таким образом, хотя на первый взгляд синтаксис конструктора схож с вызовом процедуры (не определено возвращаемое значение), но на самом деле конструктор — - это функция, возвращающая созданный и инициализированный объект.
Конструктор создает новый объект только в том случае, если перед его именем указано имя класса. Если указать имя уже существующего объекта, он поведет себя по-другому: не создаст новый объект, а только выполнит код, содержащийся в теле конструктора.
Чтобы правильно инициализировать в создаваемом объекте поля, относящиеся к классу-предку, нужно сразу же при входе в конструктор вызвать конструктор предка при помощи зарезервированного слова inherited:
constructor TMyObject.Create;
begin
inherited Create;
...
end;