Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование и дизайн пользовательского инт...doc
Скачиваний:
4
Добавлен:
20.11.2019
Размер:
180.74 Кб
Скачать

Предотвращение, обнаружение и исправление ошибок

Ошибки могут быть классифицированы как:

  • Ошибки, которые основаны на неправильном понимании действия или порядка действий;

  • Ошибки, которые возникли случайно, непреднамеренно, например опечатка при вводе текста;

Также ошибки второго вида могут быть разделены еще на шесть видов:

  • ошибки неточности выбора опции (например, пользователь случайно нажал кнопку "Выход" и программа закрылась);

  • Ошибки управления данными (например, присвоение ошибочного имени файла из-за неточности отображения последнего);

  • Ошибки ассоциативного характера (например, сохранение файла с именем какого-либо человека, так как пользователь думал о нем в момент сохранения);

  • Ошибка потери активности, когда пользователь забывает необходимую последовательность действий для продолжения работы;

  • Ошибка режима или состояния - когда пользователь думает, что он находится в одном состоянии, но - фактически в другом, например режим вставки взамен режима печати поверх текста в текстовом процессоре;

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

  • Принудительные действия в системе, которые предотвращают или затрудняют появление ошибок;

  • Обеспечение хороших и информативных сообщений об ошибках;

  • Использование обратимых действий, которые позволяют пользователям исправлять их собственные ошибки;

  • Обеспечение нормальной диагностики системы, в процессе которой пользователю объясняется, в чем суть ошибки и пути ее исправления;

Обработка ошибок в формах ввода

Основные принципы:

  • Обеспечить возможность посимвольного редактирования введенных записей для исправления ошибок ввода (опечаток);

  • Если ошибка была обнаружена системой, желательно вернуть курсор в поле с ошибочными данными и каким-либо образом выделить это поле визуально;

  • Обеспечить значимые сообщения об ошибках, использующие стиль языка пользователя и соответствующую терминологию;

  • Обеспечьте сообщения об ошибках, которые объясняют и предлагают пути ее устранения;

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

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

Объект – это совокупность данных (переменных) и способов работы с ними (компонентных процедур и функций). Данные можно рассматривать как поля записи.

ООП характеризуется следующими свойствами (или базируется на принципах): инкапсуляция, наследование, полиморфизм и абстракция.

Инкапсуляция

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

    Объект, обладающий свойством инкапсуляции характеризуется следующими параметрами:

  • уникальное имя,

  • набор атрибутов - данных, характеризующих состояние объекта,

  • набор действий (методов) для смены своих состояний, т.е. для описания своего поведения.

    Рассмотрим характерное описание объекта:

объект:

точка

атрибуты:

позиция на плоскости

методы:

создать

удалить

переместить в новую позицию

отобразить

стереть

объект:

прибор

атрибуты:

показания

методы:

снять показания

ООП реализуется в Object Pascal с использованием типа Class, который представляет собой особую структуру, содержащую в своем составе поля, методы и свойства. Например, класс tinfo

type

 tinfo=class

 key: integer; //поле

 procedure show; //метод1

 function GetKey: integer; //метод2

 end;

Обычно для реализации класса или нескольких классов используют отдельный модуль (без формы). Типы и переменные описывают в части interface, а реализация подпрограмм – методов класса происходит в части implementation этого модуля.

Чтобы использовать новый тип в программе, нужно объявить переменную этого типа. Переменная объектного типа называется экземпляром класса или объектом:

Var

 AMyObject: tinfo;//одна переменная

 a: array[1..10] of tinfo;//массив переменных

Однако в Object Pascal этого недостаточно, чтобы можно было работать с переменной объектного типа. Инициализация переменной производится специальным методом – конструктором:

AMyObject:= tinfo.Create;

который должен быть добавлен в методы класса:

 constructor Create;

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

constructor tinfo.Create;

begin

 key:=-1;

end;

Конструктор – особый метод. Когда он вызывается, объекта еще не существует и при его вызове используется не имя переменной (как обычно), а имя класса. Конструктор – это метод класса.

Конструктор создает новый объект только в том случае, если перед его именем указано имя класса. Если указать имя уже существующего объекта, он поведет себя по-другому: не создаст новый объект, а только выполнит код, содержащийся в теле конструктора.

Объект уничтожается когда вызывается метод destructor обычно ему дают имя destroy:

 destructor destroy;

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

Области доступности элементов класса

Отдельные элементы класса могут иметь различные возможности по их использованию вне рассматриваемого класса. Это введено для того, чтобы уменьшить несанкционированное обращение к ним. Отметим 3 разновидности секций, в которые помещаются эти элементы: private, protected, public:

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

2.      Элементы, которые могут быть использованы в семействе (наследниках) класса, помещаются в секцию protected.

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

Наследование

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

  Наследование вида "является" предполагает, что объект-наследник полностью включает в себя все свойства объекта-родителя.

 Другой вид наследования - сборочный, вида "состоит-из" .

Иерархия в Object Pascal может иметь сложную древовидную структуру: каждый производный класс (потомок, наследник, дочерний класс) несет в себе характеристики своего предка (содержит те же данные, методы и свойства), а также обладает собственными характеристиками.

 При этом наследуемые данные, методы и свойства описывать у потомка нет необходимости, а использовать можно.

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

Полиморфизм

это свойство классов решать схожие по смыслу проблемы разными способами.

Полиморфизм предполагает возможность одинакового именования разных действий. Эта особенность имеет два аспекта:

  • возможность одинакового именования статических методов

  • возможность одинакового именования динамических методов.

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

Для реализации принципа полиморфизма используют виртуальные методы в базовом классе и его наследниках.

Виртуальные методы сами создают соответствующую иерархию. Для того, чтобы объявить метод, являющийся родоначальником такой иерархии, виртуальным, после его объявления следует поместить директиву Virtual. Для всех остальных переопределенных методов этой иерархии после из объявления записывается директива Override.