Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на гос. экзамен.docx
Скачиваний:
13
Добавлен:
01.05.2025
Размер:
6 Мб
Скачать
☆

Радиолокационные методы измерения дальности

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

Методы измерения дальности подразделяются на амплитудные, частотные и фазовые в зависимости от того, какой из параметров принимаемых радиосигналов используется при измерении времени задержки.

Среди РЛС с амплитудным методом измерения дальности наибольшее распространение получили импульсные станции. Принцип их действия иллюстрируется схемой на рис. 6. Генератор высокой частоты, управляемый модулятор генератор СВЧ синхронизатор индикатор приемник антенный переключатель Рис. 6. Функциональная схема импульсного

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

Зондирующий сигнал может быть записан следующим образом:

uген(t) = U0 cos(ω0t + ψ0) при t0 £ t £ t0 + τи,

где t0 – начало отсчета на временной оси, совпадающее с началом импульса; τи – длительность импульса; U0 – амплитуда колебаний; ψ0 – начальная фаза колебаний.

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

отраженного измеряется время запаздывания tD. Синхронность процессов в передатчике РЛС и измерительном устройстве обеспечивает синхронизатор. В качестве выходного устройства в импульсной РЛС может быть использована электронно-лучевая трубка с амплитудной или яркостной отметкой. Развертка луча по экрану трубки, как правило, осуществляется с

постоянной скоростью. Работа схемы развертки синхронизирована с работой передатчика РЛС (рис. 7, а). Если на экране трубки расстояние между изображениями излученного и отраженного импульсов равно l (рис. 7, б), скорость развертки υразв , то

tD = l/υразв. (41)

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

Для импульсных дальномеров диапазон однозначного измерения дальности определяется периодом следования Тп излучаемых импульсов

БИЛЕТ № 2

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

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД

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

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

Объектно-ориентированный анализ (object-oriented analysis) -это методология, при которой требования к системе воспринима­ются с точки зрения классов и объектов, выявленных в предметной области. Объектно-ориентированный анализ направлен на создание моделей реальной действительности на основе объектно-ориенти­рованного подхода.

Объектно-ориентированное проектирование (object-oriented design) - это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления моде­лей, отражающих логическую (классы и объекты) и физическую структуру системы (процессы и деление на компоненты, файлы или модули), а также ее статические и динамические аспекты.

Объектно-ориентированное программирование (object-oriented programming) - это технология реализации программ, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы об­разуют иерархию наследования.

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

ОСНОВНЫЕ ПОНЯТИЯ - ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Понятие объектно-ориентированного программирова­ния определяет три основные концепции, при соблюдении которых программа будет объектно-ориентированной:

  • объектно-ориентированное программирование использует в каче­стве базовых элементов классы, порождающие объекты;

  • в процессе выполнения программы может одновременно ис­пользоваться несколько объектов, порожденных от одного класса (экземпляров реализации класса);

  • классы организованы иерархически (иерархия означает «быть частью»).

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

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

Объект — это структурированная переменная типа класс, со­держащая всю информацию о некотором физическом предмете или реализуемом в программе понятии. Все объекты - представители данного класса аналогичны друг другу в том смысле, что они име­ют один и тот же набор операций - методов.

Объект, как логическая единица, содержит следующие данные и операции (методы с кодом алгоритма) в отдельном участке памяти:

  • поля объекта (или атрибуты исходных данных), значения кото­рых определяют текущее состояние объекта;

  • методы объекта, которые реализуют действия (выполнение ал­горитмов) в ответ на их вызов в виде преданного сообщения;

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

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

Объекты в программах воспроизводят все оттенки явлений ре­ального мира: «рождаются» и «умирают»; меняют свое состояние; запускают и останавливают процессы; «убивают» и «возрождают» другие объекты.

ПРИНЦИПЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ: ИНКАПСУЛЯЦИЯ, НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

В основе классов лежат три фундаментальных принци­па - инкапсуляция, наследование и полиморфизм.

Инкапсуляция. Проектирование программных и техниче­ских систем базируется на том условии, что никакая подсистема данного уровня не должна зависеть от устройства любой другой подсистемы этого уровня. Такая независимость внутреннего уст­ройства одного объекта от внутреннего устройства другого называ­ется инкапсуляцией. Принцип инкапсуляции использовался в технологии модульно­го программирования. В модуле в явной форме введена инкапсуля­ция путем разделения его на секции интерфейса и реализации. В объектно-ориентированном программировании принцип ин­капсуляции используется для изоляции класса от остальных частей программы, чтобы сделать его самодостаточным для решения кон­кретной задачи. Например, класс TForm в среде Delphi содержит (инкапсулирует в себе) все необходимое для создания Windows-окна, класс ТМето представляет собой полнофункциональный тек­стовый редактор, класс TTimer обеспечивает работу программы с таймером и т. д. Инкапсуляция достигается путем совмещения в одной записи языка программирования структур данных с процедурами и функциями, которые манипулируют полями данных этой записи, для получения нового типа данных ~ класса. Инкапсуляция позволяет защитить по интерфейсу доступ к полям и методам. Доступ разре­шается лишь к открытым методам и полям. Полная совокупность методов и тонкости их реализаций являются скрытыми.

Type

TMyClass = class

IntField: Integer;

function MyFunc(a: Integer): Integer;

procedure MyProc; end;

Путем использования принципа инкапсуляции появляется воз­можность осуществлять обмен готовыми к работе программными заготовками. Например, библиотека классов Delphi - это, фактиче­ски, набор кирпичиков для построения прикладных программ.

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

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

Принцип наследования оперирует с понятиями «предок - потомок» и предусматривает расширение набора свойств наследника за счет принятия всех свойств предка.

Любой класс может быть порожден от другого класса. Для это­го при его объявлении указывается имя класса-родителя:

TChildCIass = class (TParentClass )

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

Все классы в Object Pascal порождены от единственного роди­теля - класса TObject. Этот класс не имеет полей и свойств, но включает в себя методы самого общего назначения, обеспечивающие весь жизненный цикл любых объектов - от их создания до уничтожения. Поэтому программист не может создать класс, кото­рый не был бы дочерним классом TObject. Следующие два объяв­ления идентичны.

TaClass = class(TObject) <==> TaClass = class

Принцип наследования приводит к созданию ветвящегося дере­ва классов. Каждый потомок дополняет возможности своего роди­теля новыми и передает их своим потомкам. Например, класс TPersistent обогащает возможности своего родителя TObject тем, что он умеет сохранять данные в файле и получать их из него, в резуль­тате это умеют делать и все его потомки. Класс TComponent, в свою очередь, умеет взаимодействовать со средой разработчика и пере­дает это умение своим потомкам. TControl не только способен ра­ботать с файлами и средой разработчика, но он еще умеет созда­вать и обслуживать видимые на экране изображения, а его потомок TWinControl может создавать Windows-окна и т. д.

В Object Pascal возможно только так называемое одиночное на­следование, но в реальном мире у потомка два родителя, поэтому в ряде языков (например, в C++) предусмотрен механизм множест­венного наследования. Множественное наследование более логич­но с точки зрения моделирования реального мира, однако, оно ус­ложняет реализацию языков программирования.

Полиморфизм. Одним из базовых понятий технологии объектно-ориентированного программирования является полимор­физм. Этот термин имеет греческое происхождение и приблизи­тельно означает «много форм» (poly — много, morphos — форма).

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

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

В рамках Object Pascal поведенческие свойства класса опреде­ляются набором входящих в него методов. Этот принцип используется, когда требуется расширить свойства класса не путем добав­ления новых методов, а путем достраивания одного из методов или набора методов. Изменяя алгоритм того или иного метода в потом­ках класса, программист может придавать этим потомкам отсутст­вующие у родителя специфические свойства.

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

Кроме этого, в Object Pascal полиморфизм достигается не толь­ко механизмом наследования и перекрытия методов родителя, но и их виртуализацией, позволяющей родительским методам обра­щаться к методам своих потомков.

Терминология ООП

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

Отношения между классами в программах

В традиционном ООП предусмотрены три типа отношений между классами:

  • Использование: непосредственная зависимость.

  • Включение: иногда называется агрегированием. Реализует логические связи типа «является составной частью».

  • Наследование: реализует логические связи типа «является частным случаем».

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

Термин «включение» (агрегирование) означает, что объект класса А содержит внутренние объекты класса Б.

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

В ООП термин «инкапсуляция» означает то, что мы обычно называем маскировкой данных. Скрывая данные, вы определяете свойства и методы для работы с ними. Успешное применение ООП возможно лишь в том случае, если все операции с внутренними данными объекта осуществляются посредством обмена сообщениями. Данные объекта хранятся в полях экземпляра. Текущее состояние объекта определяется текущими значениями полей экземпляра. Существует рекомендация: никогда не предоставляйте прямой доступ извне к полям экземпляра (внутренним данным объекта).

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

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

Производные классы:

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

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

Полиморфизм

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

Переход к использованию объектов

Между ООП и процедурно-ориентированным программированием существуют два важных различия:

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

  2. Методы и свойства ассоциируются с классом, предназначенным для выполнения соответствующих операций.

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

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

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

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

Предоставление доступа к полям и методам класса осуществляется с помощью трех ключевых слов: public, protected и private, которые называют модификаторами. Модификаторы устанавливаются перед описанием метода и имеют следующие значения:

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

protected – метод является закрытым и доступен только наследникам;

private – такой метод является приватным и к нему доступ закрыт для всех. Только сам объект имеет право его использовать.

Преимущества ООП

На первый взгляд классы ООП и связанные с ними методы и свойства имеют много общего с процедурным подходом и модульным строением программ. Ключевое различие заключается в следующем:

Класс представляет собой шаблон для создания объектов, состояние которых изменяется со временем.

Пример работы с классами.

Допустим создадим класс, который будет представлять собой копилку. Копилка будет иметь общедоступное (public) поле – цель накопления, скрытое поле (private) – накопленная сумма, и общедоступные методы – положить в капилку и разбить капилку. То есть нельзя посмотреть количество денег не разбив и не опусташив копилку. Класс будем писать на языке C++.

class Kopilka

{

public string Tcel_Nakopleniya;

private Summa;

public void Dobavit_v_kopilku(int dob)

{

Summa += dob;

}

public int Razbit_Kopilky()

{

int buf = Summa;

Summa = 0;

return buf;

}

};

Теперь мы можем создать экземпляр класса – объект.

Kopilka *Kopilka1 = new Kopilka();

Мы можем получить доступ к полю Tcel_Nakopleniya:

Kopilka1->Tcel_Nakopleniya = “Коплю на машину”;

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

Мы можем легко добавить некую сумму в копилку:

Kopilka1-> Dobavit_v_kopilku(100);

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

class Prozrachnaya_Kopilka : Kopilka

{

Public int Proverit_Summu()

{

Return Summa;

}

}

Теперь продемонстрируем полиморфизм.

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

class Volshebnaya_Kopilka : Kopilka

{

public int Razbit_Kopilky(int s)

{

if (Summa >= s)

{

Summa -= s;

return s;

}

else

{

int buf = Summa;

Summa = 0;

Return buf;

}

}

}

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