ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.04.2019

Просмотров: 5785

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Свойства объекта определяют его характеристики и поведение. Например, для объекта форма (окно) свойство Caption определяет название в виде текста, которое будет отображаться в верхней части окна, Color задает цвет окна, Width – его ширину и т. д. Свойства объекта можно менять при помощи инспектора объектов Инспектор объектов содержит две вкладки: Свойства (Properties) и События (Events). Свойства отображает доступные для управления свойства того или иного объекта. События отображает перечень событий, связанных с объектом.

В разделе класса _published объявляются опубликованные свойства. Этот раздел могут иметь только классы, производные от TObject.

В качестве спецификатора доступа _published эквивалентно public. Разница между ними в том, что опубликованные свойства доступны и в режиме проектирования через инспектор объектов, в то время как к открытым свойствам можно обращаться только программно во время выполнения.

Объект, для которого требуется изменить свойства, можно выбрать, щелчком мыши на самом объекте или выбрав его из списка в верхней части Инспектора объектов. Каждое свойство объекта имеет имя (которое нельзя изменить), например, «COLOR» и значение, которое можно изменить, например «red». Таким образом, через инспектор объектов можно настроить объект требуемым образом, не прибегая к программированию.

Свойства объекта можно менять и в самой программе. Для обращения к свойству объекта в программе записывают имя объекта и имя свойства, разделенные знаком—> (стрелка), например, для объекта c именем Form1 обращение к свойству Caption выглядит так: Forml->Caption="Суперпрограмма!";

Суперпрограмма! - значение свойства. После использования данного оператора в программе название окна формы будет Суперпрограмма! С помощью изменения значения свойства Visible можно управлять Видимостью окна: Forml->Visible=false; Forml->Visible=true; Первый оператор делает окно невидимым, второй заставляет окно вновь появиться.

Другим важным средством управления объектами являются методы. Методы представляют собой функции, которые можно вызывать для управления объектами. Например, для того чтобы окно стало невидимым, можно вызвать следующий метод: Forml->Hide(); Чтобы сделать окно вновь видимым, надо вызвать другой метод: Forml->Show(); Полный перечень свойств и методов объекта из библиотеки VCL приводится в документации и во встроенной справочной системе Borland C++ Builder.

Третье средство управления объектами — это события. Для каждого объекта существует свой перечень событий, содержащихся на вкладке Events. Каждое событие, также как и каждое свойство имеет неизменное имя и значение, которое можно изменить. Используя вкладку Events инспектора объектов, можно изменить реакцию объекта на то или иное событие. Для этого необходимо в инспекторе объектов выбрать нужное событие и дважды на его значении щелкнуть мышью. После этого открывается окно редактора кода, с автоматически созданной заготовкой функции, которая будет вызываться при возникновении данного события. Программисту остается написать код тела этой функции. Визуально пример изменения стандартной обработки события активизации окна показан на Рис. 3. Рис. 3. Изменение стандартной обработки события Лекция 24 5 С каждым объектом связано событие «по умолчанию». Например, для объекта Button (Кнопка) событие «по умолчанию» - Click (Щелчок). Событие «по умолчанию» содержится первым на вкладке Events. Если дважды щелкнуть мышью на самом объекте, то открывается окно редактора кода, с автоматически созданной заготовкой, куда вписывается тело функции, которая будет вызываться при возникновении события «по умолчанию». Редактор форм позволяет визуально разместить на форме с помощью мыши требуемые объекты. Редактор кода представляет собой текстовый редактор, позволяющий программисту создавать фрагменты кода программы, чтобы запрограммировать поведение созданных объектов приложения.


1.20-21 Методы класса. Особенности объявления и работы с ними.

Метод класса – это метод, связанный с классом, а не с экземпляром класса; онвызывается через сам класс, а не через конкретный экземпляр класса. Методы – определяют действия, которые объект способен выполнять. Метод — это фрагмент кода, к кот можно обратиться по имени. Он описывается один раз, а вызываться может столько раз, сколько необходимо.

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

Любой метод содержит одну или несколько инструкций. Каждый метод имеет имя, и именно это имя используется для его вызова. В общем случае методу можно присвоить любое имя. Имена методов сопровождаются парой круглых скобок. Например, если метод имеет имя getval, то в тексте будет написано getval (). Это помогает отличать имена переменных от имен методов.

Запись метода: доступ тип_возврата имя (список_параметров) {// тело метода}

Если задан тип метода (кроме void), то последним оператором тела метода должен быть оператор return, возвращающий результат работы метода.

Если перед методом указан тип void, то метод не должен возвращать результат своей работы с помощью оператора return (оператор return в этом случае отсутствует в теле метода).

Доступ к методам

Каждый метод имеет модификатор доступа, принимающий одно из четырех значений:public,private,protected. Атрибутом доступа по умолчанию является атрибут private. Независимо от значения атрибута доступа все методы доступны для вызова при выполнении метода класса. Если методы имеют атрибут доступа private, возможно опущенный, то тогда они доступны только для вызова только внутри методов самого класса. Такие методы считаются закрытыми. Понятно, что класс, у которого все методы закрыты, абсурден, поскольку никто не смог бы вызвать ни один из его методов. Как правило, у класса есть открытые методы, задающие интерфейс класса, и закрытые методы. Интерфейс – это лицо класса, именно он определяет, чем класс интересен своим клиентам, что он может делать, какие сервисы предоставляет клиентам. Закрытые методы составляют важную часть класса, позволяя клиентам класса не вникать во многие детали реализации класса. Эти методы клиентам класса недоступны, они о них могут ничего не знать, и, самое главное, изменения в закрытых методах класса никак не отражаются на клиентах класса при условии корректной работы открытых методов класса.

Рассмотрим пример:

Class X {

Public:

int m; // данные-члены

int mf (int v) { int old = m; m=v; return old; } // функция-член

};

Члены класса могут иметь разные типы. Большинство из них являются либо данные-членами, определяющими представления объекта класса, либо функциями-членами, описывающими операции над такими объектами. Так же В соответствии со стандартной терминологией ООП функции - компоненты класса или компонентные функции можно


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

X var; // var – переменная типа Х

Var.m = 7: // присваиваем значение члену m обьекта var

Int x = var.mf (9); // вызываем функцию-член mf() обьекта var

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

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

класса. В последнем случае определение класса должно содержать прототипы

этих функций, а заголовок функции должен включать описатель видимости,

который состоит из имени класса и знака «::». Таким способом компилятору

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

<тип функции> <имя класса>:: <имя функции>(<список параметров>)

{<тело компонентной функции>}

1.21-24 Объект исключительной ситуации. Понятие глобального обработчика исключительных ситуаций.

Обработка исключительных ситуаций при помощи стандартного глобального обработчика исключительных ситуаций.

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

В Delphi предусмотрен глобальный обработчик исключительных ситуаций и могут быть задействованы локальные обработчики. Глобальная обработка исключений реализуется через объект Application. Глобальная обработка обеспечивает пользователя информацией об ошибке, но не устраняет причины. Если в каком либо методе не отловлено исключение, то оно будет обработано процедурой глобального обработчика исключений.

По умолчанию все исключения обрабатываются одинаково. Исключения, если они не перехвачены обработчиком пользователя, передаются в глобальный обработчик исключений TApplication.HandleException. Обработчик проверяет тип исключения, а затем выводит диагностическое сообщение.

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

Локальная обработка исключительных ситуаций позволяет при возникновении ошибки перейти к специально подготовленному коду программы. Такой подход реализуется с помощью языковых конструкций, которые как бы «охраняют» фрагмент кода программы и определяют обработчики ошибок, которые будут вызываться, если в защищённом участке кода что-то пойдет не так, как предполагалось.


Для обозначения начала защищенного участка кода используется служебное слово try, завершается конструкция словом end. Существует два типа защищенных участков: try...except и try...finally, которые имеют похожий синтаксис, но отличаются по назначению. Первый тип используется для обработки исключительных ситуаций. Его синтаксис:

try

{Операторы, выполнение которых может вызвать ошибку}

except

{Операторы, которые должны быть выполнены в случае ошибки}

end;

Конструкция try...except применяется для перехвата исключительной ситуации и позволяет восстановить работоспособность программы. Секция except может быть разбита на несколько частей on...do для обработки разных классов исключений. После конструкций on...do может быть помещён раздел else, который относится ко всему блоку. По логике работы группа конструкций on...do напоминает оператор case. К исключениям, не имеющим своих локальных обработчиков, применяется механизм глобальной обработки через объект Application.

try

{Операторы, выполнение которых может вызвать ошибку}

except

{ераторы, которые должны быть выполнены в случае ошибки}

Оп on Exception1 do ...;

on Exception2 do ...;

...

else

.end;

..

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

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

procedure TForm1.Button1Click(Sender: TObject);

Var a,b:integer;

rbegin

ez:extended;

try

a:=strtoint(Edit1.Text);

b:=strtoint(Edit2.Text);

rez:=a/b;

Edit3.Text:=floattostr(rez);

except

ShowMessage('Ошибка!');

end;

Memo1.Lines.Add(Edit1.Text);

Memo1.Lines.Add(Edit2.Text);

Memo1.Lines.Add(inttostr(a+b));

Memo1.Lines.Add(floattostr(rez));

end;

В этом случае при возникновении любого исключения будет прерываться выполнение операторов защищённого блока, и результат не появится. На экран будет выведено окно с сообщением «Ошибка!». Операторы, расположенные после защищённого блока, будут выполняться, то есть в Memo1 появятся записи.

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

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

try

...{Операторы, выполнение которых может вызвать ошибку}

finally

{Операторы, которые должны быть выполнены даже в случае ошибки}

end;

Конструкцию try...finally можно включить в блок try...except. Это позволяет выполнить обязательные операторы секции finally и обработать исключение операторами секции except. Оба типа конструкций можно использовать в любом месте, допускается вложенность любой глубины.


Использование этих конструкций позволяет выделить операторы

обработки исключений в особые группы.

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

(exception) Вторая конструкция используется, если при возникновении исключения необходимо выполнить специальные действия, которые аннулируют последствия возникновения исключительной ситуации.

Создание и настройка глобального обработчика исключения на событии TApplication.OnException.

////////////////////////////////////////////////////////////////////////////////

// Автоматическое создание глобального обработчика исключения

////////////////////////////////////////////////////////////////////////////////

initialization

ExceptHandler := TExceptHandler.Create;

Application.OnException := ExceptHandler.OnException;

end.

Базовым классом для всех исключений является класс Exception. Основное н а з н а ч е н и е класса исключения — идентификация групп ошибок: отнесение исключения к тому или другому классу определяет способ обработки данного исключений.

ТЕОРИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ И МЕТОДЫ ТРАНСЛЯЦИИ

2.1-2.2 Классификация языков и граммати. Примеры классификации языков и грамматик.

От того, к какому типу относится тот или иной язык программирования,

зависит сложность распознавателя для этого языка. Для некоторых типов

языков в принципе невозможно построить компилятор, который анализировал

бы исходные тексты на этих языках за приемлемое время на основе

ограниченных вычислительных ресурсов.

1.4.1 Классификация грамматик по Хомскому

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

Если все без исключения правила грамматики удовлетворяют определённой

структуре, то её относят к заданному типу. Если хотя бы одно правило

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

заданный тип. Если правила грамматики соответствуют структуре нескольких

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

Пусть грамматика обозначена как G(VT,VN,P,S), V=VT VN. В соответствии с иерархией Хомского выделяют 4 типа грамматик.

1. Тип 0 – грамматики с фразовой структурой, или без ограничений

На структуру их правил не накладывается никаких ограничений, т.е.

правила имеют вид: α→ β, где αV+ , βV* . Это самый общий тип грамматик.

Грамматики, которые относятся только к этому и не могут быть отнесены ни

к какому другому типу, являются самыми сложными.

2. Тип 1 – Контекстно-зависимые (КЗ) и неукорачивающие грамматики

К этому типу относятся два основных класса грамматик.

В КЗ-грамматиках при построении предложений заданного языка один и

тот же нетерминальный символ может быть заменен различными

терминальными цепочками в зависимости от контекста, в котором он

встречается. Цепочки α1 и α2 в правилах обозначают контекст: α1 – левый