5 ответов на вопросы, связанные с типами интерфейсов


Оглавление (нажмите, чтобы открыть):

Типы вопросов в английском языке

Здравствуйте дорогие читатели. Сегодня я подготовила для вас вводный урок по теме − типы вопросов в английском языке. Изучив материал, вы ознакомитесь с 5 -ю типами вопросов, которые выделяют в английской грамматике. Подробнее на каждом из них мы будем останавливаться в следующих уроках. А сейчас наша цель заключается в том, чтобы познакомить вас в общих чертах с каждым из 5 -и видов вопросов, объяснить их смысл, особенности и конструкцию. Типы вопросов в английском языке Построение вопросительных предложений — это очень важная тема для изучения любого языка. Ведь наша речь в основном состоит из вопросов и ответов. Хочу сразу сказать, что конструкция вопросительных предложений в английском языке значительно сложнее, чем в русском. В русском языке для постановки вопроса достаточно просто изменить интонацию. В английском языке чтобы задать вопрос нужно поменять не только интонацию, но и порядок слов в предложении, а также очень часто есть необходимость использовать вспомогательные слова.

Для того, чтобы наглядно объяснить особенности каждого из типов, сначала я буду приводить примеры, а потом объяснять их суть. Я советую вам заучить конструкцию 5 -и типов вопросов наизусть.

5 типов вопросов в английском языке

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

1. Общий вопрос

Вопрос Ответ
Do you have a dog?
Does he read that book?
Did you visit your grandmother?
Is she a student?
Was he in Moscow?
Can I help you?
Must children do the homework?
Yes, I do/ No, I don’t
Yes, he does/ No, he doesn’t
Yes, I did/ No, I didn’t
Yes, she is/ No, she isn’t
Yes, he was/ No, he wasn’t
Yes, you can/ No, you can’t
Yes, they must/ No, they must not

Как видите, общий вопрос задается ко всему предложению целиком, и ответить на него можно всего одним словом — да (yes) или нет (no). Именно поэтому его и называют общим.

Для правильной постановки общего вопроса необходимо использовать вспомогательный глагол:

  • do→ для I, you, we, they
  • does→ для he, she, it
  • did→ для прошедшего времени.

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

  • Повеств. предл.: You speak English. добавляем на первое место вспомогательный глагол, и получаем
  • Общий вопрос:Do you speak English?

Если в предложении в качестве сказуемого выступает глагол to be (am, is, are, was, were — его формы), или модальные глаголы can (could), may (might), must, shall (should), will (would), то они выносятся на первое место в качестве вспомогательных. Пример:

  • Повеств. предл.: I can help you. выносим модальный глагол на первое место, и получаем
  • Общий вопрос:Can I help you?

Подведем итог! Схема общих вопросов выглядит так:
Вспомогательный глагол (Auxiliary Verb)→ подлежащее (Subject)→сказуемое (Predicate) → другие члены предложения.

Видео на тему: Общий и альтернативный вопрос в английском языке

2. Альтернативный вопрос

Вопрос Ответ
Is this a pen or a pencil?
Does Ann work as a teacher or a doctor?
Is that pencil red or green?
Was Peter in Moskow or in Minsk?
Does Jim like playing chess or watching TV?
It’s a pencil.
She works as a doctor.
It’s green.
He was in Minsk.
He likes playing chess.

Как вы, должно быть, заметили, альтернативный вопрос — это вопрос, который предлагает отвечающему сделать выбор между двумя однородными членами предложения (a pen − a pencil, teacher — doctor, red — green, Moskow — Minsk, playing chess — watching TV). Эти однородные члены предложения могут быть выражены дополнениями, обстоятельствами, определениями, именной частью составного сказуемого .

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

Обратите внимание, что альтернативный вопрос практически ничем не отличается от общего вопроса, за исключением обязательного присутствия союза or.

3. Специальный вопрос

Вопрос Ответ
Where do you have vacation every summer?
When can I see her?
What is your favorite colour?
How does he get to work?
Why are you eating at my desk?
I have vacation in London.
You can see her today.
My favourite colour is blue.
He gets to work by bus.
Because I am hungry.

Специальные вопросы в английском языке задаются для получения дополнительной информации. На первом месте всегда стоит специальное вопросительное слово:

  • what? — что? какой?
  • why? — почему?
  • where? — где? куда?
  • how? — как?
  • how long? — как долго?
  • which? — который?
  • who? — кто?
  • when? — когда?

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

  • Общий вопрос: Does he see her every day? → добавляем на первое место вопросительное местоимение, и получаем →
  • Специальный вопрос: Where does he see her every day?

А значит, схема будет выглядеть так:
Вопросительное местоимение (interrogative pronoun) → вспомогательный глагол (Auxiliary Verb)→ подлежащее (Subject)→сказуемое (Predicate) → другие члены предложения.

Обратите внимание, что в английском часто встречаются фразовые глаголы, с этими глаголами тесно связаны какие-либо предлоги. Когда задаются специальные вопросы в английском языке, эти предлоги ставятся в самом конце предложения. Например:

  • What are you busy with? — Чем ты занят?
  • What are you asking for? — О чем ты просишь?
  • Who were they waiting for? — Кого они ждали?

Ответы на специальные вопросы, как правило, даются развернутые.

Видео на тему: Специальный вопрос в английском языке

4. Вопрос к подлежащему и его определению

Вопрос Ответ
What is on going on there?
Who is listening to the tape?
Which of the children is going to the Zoo on Sunday?
Whose children are having dinner now?
A fight is.
Peter is.
John is.
Peter’s children are.

Вопросы к подлежащему или к его определению всегда начинаются с вопросительных местоимений:

  • Who — кто
  • What — что
  • Which — который
  • Whose — чей

В вопросах к подлежащему сохраняется порядок слов повествовательного предложения.

  • Повеств. Предл.:They must do it every day. вместо подлежащего They ставим Who, остальное в предложении оставляем без изменений, и получаем
  • Вопрос к подлежащему:Who must do it every day?

Заметьте, что если предложение относится к настоящему времени, то вопросительные слова who, what, which согласуются обычно со сказуемым в форме 3-го лица единственного числа. Т.к. мы не знаем, какой ответ последует, принято использовать 3-е лицо.

  • Повеств. Предл.:They study at school. вместо подлежащего They ставим Who, а к глаголу добавляем окончание 3-го лица, и получаем
  • Вопрос к подлежащему:Who studies at school?

Также нужно запомнить, что вопросительное слово «which — который» предполагает выбор из определенного числа предметов или лиц. Поэтому оно часто употребляется в составе с существительным или местоимением, перед которым стоит предлог of. Например:

  • Which of the children… — Кто из детей…
  • Whichof you… — Кто из вас…

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

5. Разделительный вопрос

Вопрос Ответ
He is a student, isn’t he?
My friends don’t play football, do they?
She can play piano, can’t she?
It isn’t warm today, is it?
Alex speaks English, doesn’t he?
Yes, he is.
No, they don’t.
Yes, she can.
No, it isn’t.
Yes, he does.

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

Запомните, что если первая часть вопроса утвердительная, то глагол во второй части должен стоять в отрицательной форме. Если первая часть вопроса отрицательная, то во второй части глагол должен стоять в утвердительной форме.

Давайте разберем пару примеров:

  • Повеств. предл. утвердительное: She can cook that dish. Переписываем предложение, ставим запятую, ставим показатель вопроса, в данном случае модальный глагол can, добавляем частичку «not» и само местоимение she. Получаем
  • Разделительный вопрос: She can cook that dish, can’t she?
  • Повеств. предл. отрицательное: She can’t cook that dish. Переписываем предложение, ставим запятую, ставим показатель вопроса, в данном случае модальный глагол can, частичку «not» добавлять не нужно, т.к. она есть в первой части предложения, ну и наконец само местоимение she. Получаем
  • Разделительный вопрос: She can’t cook that dish, can she?

Ответы на разделительные вопросы в английском языке, также как и на общие, как правило краткие, содержащие слова да (Yes) или нет (No).

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

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

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

Архитектура интерфейса V5

ВВЕДЕНИЕ

Методические указания предназначены для проведения лабораторных занятий при изучении дисциплины «Сетевые протоколы и сигнализация в телекоммуникациях (Часть 1)» студентами Высшего государственного колледжа связи специальности «Телекоммуникационные системы» дневной и заочной формы факультета электросвязи.

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

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

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

ЛАБОРАТОРНАЯ РАБОТА №1

«ПОСТРОЕНИЕ СЦЕНАРИЕВ СИГНАЛИЗАЦИИ ПРИ ИСПОЛЬЗОВАНИИ ИНТЕРФЕЙСА V5»


Цель работы:изучить архитектуру и основы построения интерфейса V5, типы и структуру сообщений интерфейса.

Теоретическая часть

Стек протоколов интерфейса V5 содержит протокол ТфОП, протокол управления, протокол назначения несу­щих каналов, протокол защиты, протокол управления трактами.

Реализации протоколов интерфейса V5, представляются актуальными именно се­годня, когда практически все ведущие операторские компании подключают к коммутационным узлам оборудование проводного и беспроводного абонентского доступа, выпускаемое независимыми и никак не связанными с поставщиками АТС производителями, а рекомендованный ITU-T и ETSI интерфейс V5 является основным способом такого подключения. Всё это диктует глубокое изучение студентами интерфейса V5 на лабораторных работах.

V5 — технология доступа к сети. Стандарты V5 (V5.1-ETS 300 324-1 и V5.2-ETS 300 347-1) должны обеспечить интерфейс взаимодействия между сетью доступа и телефонной станцией для поддержания узкополосных услуг связи. Стандарты серии V5 определяют требования (электрические, физические, процедурные и протокол) для соединений сети доступа и АТС. Сеть доступа — это система между АТС и оконечным оборудованием пользователя, заменяющая часть или всю локальную распределенную сеть. Она обеспечивает общее взаимодействие с такими устройствами, как аналоговый телефон ТфОП, аналоговая или цифровая офисная АТС, терминальное оборудование ISDN базового и первичного доступа, оконечное оборудование локальной сети и арендуемая линейная аппаратура. Она также обеспечивает мультиплексирование, ввод, вывод и передачу данных. Сеть доступа отвечает за распознавание тональных посылок доступа аналоговых сигналов, их продолжительность, напряжение и частоту импульсов, за вызывной тон, а также за конкретные характеристики последовательности передачи сигналов. АТС отвечает за управление вызовами посредством обеспечения коммутации, формирования тональных посылок набора номера, декодирования номера и т.д.

В качестве примера рассмотрим включение мультисервисных абонентских концентраторов (МАК). Применение МАК в сельских и городских телефонных сетях традиционных операторов ТфОП с подключением его к опорным цифровым АТС через стандартный интерфейс V5.2 позволит снизить затраты на абонентскую кабельную сеть за счет концентрации абонентской нагрузки.

Оборудование МАК работает с терминалами следующих типов:

• аналоговые телефонные аппараты, а также аппараты факсимильной связи и модемы;

• цифровые телефонные аппараты ISDN;

• интегрированные устройства доступа на основе технологии SHDSL, предусматривающие предоставление услуг как симметричной высокоскоростной передачи данных (до 2 Мбит/c), так и телефонии (VoDSL); электропитание таких устройств может быть дистанционным, что обеспечивает более высокую надежность;

• абонентские терминалы стандарта DECT.

Основной вариант включения МАК представлен на рис. 1. Через интерфейс V5.2 концентратор подключается к опорной АТС, а с абонентской стороны в каждую кассету включается до 570 аналоговых абонентских линий, т.е. в одном стативе можно разместить оборудование, допускающее включение до 3420 таких линий. Другой вариант организации связи с помощью МАК иллюстрирует рис.2. Как и в первом варианте, через интерфейс V5.2 концентратор подключается к опорной АТС, а с другой его стороны, через интерфейс SHDSL, подключаются интегрированные абонентские устройства IAD, в которые, в свою очередь, могут включаться телефоны и другие аналоговые устройства, а также и персональные компьютеры. Последний вариант включения представлен на рис.3 и демонстрирует полный спектр возможностей МАК. При этом услуги телефонии для абонентских терминалов всех типов предоставляются, независимо от технологии доступа, с использованием единого плана нумерации.

Рисунок 1 — Включение аналоговых абонентских линий в концентратор с V5
Рисунок 2 — Включение IAD в концентратор с V5

Рисунок 3 — Универсальный вариант включения МАК

Был создан универсальный интерфейс V5, который позволил совмещать в одной сети оборудование разных производителей. Как показано на рис. 4, наряду с интерфейсом V5 и включением абонентских терминалов в АТС по двухпроводным абонентским линиям иногда возможно использование и других про­токолов, например, в качестве временного решения. Такими прото­колами в различных ситуациях установки оборудования сети досту­па (например, WLL) могут являться системы межстанционной сиг­нализации по двум выделенным сигнальным каналам, система об­щеканальной сигнализации №7 и другие. В некоторых случаях возможно использование протокола DSS-1, ори­ентированного на организацию первичного доступа ISDN при вклю­чении УАТС в цифровые АТС сети общего пользования. Однако все эти варианты не могут рассматриваться как системные решения за­дачи подключения оборудования сети абонентского доступа к ком­мутационным станциям. Системное решение должно опираться на универсальный стандартизированный интерфейс.

Рисунок 4- Варианты включения оборудования доступа (например, WLL) в коммутационные узлы телефонной сети общего пользования

Местоположение этого универсального интерфейса, поддер­живающего различные виды абонентского доступа, согласно реко­мендации I.411, определено в опорной точке V, которая находится на границе между станционным окончанием ЕТ и линией цифро­вого доступа.

Возможные варианты доступа в точке V представлены на рис. 5, выполненном на базе рекомендации Q.512. Подробные характеристики интерфейсов V содержатся в соответствующих рекомендациях ITU-T и стандартах ETSI. Здесь же отметим только, что интерфейс VI предназначен для подключения к станционному окончанию АТС пользователей ISDN с базовым дос­тупом 2B+D, а интерфейсы V2, V3, V4 и V5 на физическом уровне представляют собой цифровые тракты 2048 Кбит/с, соответствую­щие рекомендациям G.703, G.704.

Рисунок 5- Интерфейсы и опорные точки V

Различаются эти интерфейсы используемыми системами сиг­нализации. Так, для V2 конкретный протокол сигнализации не оп­ределяется; подразумевается, что этот протокол будет специфиче­ским для каждого конкретного типа цифровых АТС. Интерфейс V3 ориентирован на подключение к станционному окончанию АТС пользователей ISDN с первичным доступом 30B+D, а специфика­ции V4 вообще исключены из последних версий рекомендации Q.512 в связи с появлением интерфейса V5. Именно этот послед­ний интерфейс произвел те революционные преобразования в ор­ганизации взаимодействия оборудования сети доступа и узлов ком­мутации, о которых упоминалось в начале главы.

Национальная часть протокола определяется для каждой страны в отдельности. Имеется два типа V5: V5.1 и V5.2.

Таблица 1- Сравнение интерфейсов V5.1 и V5.2

Характеристики Интерфейс V5.1 Интерфейс V5.2
Количество трактов ИКМ 1 тракт ИКМ от 1 до 16 трактов ИКМ со скоростью передачи 2048 кбит/с от 1 до 16 трактов ИКМ со скоростью передачи 2048 кбит/с
без концентрации с концентрацией
Протоколы Протокол ТфОП Протокол ТфОП
протокол управления протокол управления
функции несущих (информационных) каналов + +
функции поддержки D-каналов ISDN + +
функции поддержки сигнализации ТфОП + +
функции управления пользовательскими портами + +
функции общего управления + +
функции управления трактами 2048 кбит/с +
функции управления звеньями уровня 2 + +
функции защиты служебной информации +
функции назначения несущих каналов +
функции тактирования + +

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

· функции несущих (информационных) каналов, обеспечивающие двухсторонний перенос через интерфейс информации В-каналов пользовательских портов ISDN или цифровых каналов 64 кбит/с портов пользователей ТфОП;

· функции поддержки D-каналов ISDN, обеспечивающие двухсторонний перенос через интерфейс информации D-каналов пользовательских портов ISDN (сигнальной информации, данных, передаваемых в пакетном режиме, и данных, передаваемых в режиме трансляции кадров);

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

· функции управления пользовательскими портами, обеспечивающие двухсторонний перенос через интерфейс контрольной и управляющей информации, которая связана с блокировкой и разблокировкой отдельных пользовательских портов ТфОП и ISDN, а также с рядом задач, специфических для портов ISDN (активизацией/деактивизацией доступа, индикацией ошибок, контролем рабочих характеристик, управлением потоком сигнальной информации);

· функции общего управления, обеспечивающие управление реконфигурацией интерфейса, временную блокировку D-каналов отдельных портов ISDN в условиях перегрузки, рестарт протокола ТфОП и проверку согласованности обеих сторон интерфейса;

· функции управления трактами 2048 кбит/с (только в интерфейсе V5.2), обеспечивающие проверку исправности трактов и соответствия их идентификаторов на разных стороная интерфейса, блокировку/разблокирову трактов, а также цикловую и сверхцикловую синхронизацию;

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

· функции защиты служебной информации (только в интерфейсе V5.2), обеспечивающие переключение логических каналов сигнализации и управления на резервные физические каналы интерфейса при отказах ИКМ-трактов, а также контроль ошибок протокола и перезапуск средств нумерации сообщений;

· функции назначения несущих каналов (только в интерфейсе V5.2), обеспечивающие создание и разрушение физических соединений между пользовательскими портами сети доступа и несущими каналами интерфейса;

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

Архитектура интерфейса V5

Стек протоколов V5 используется для подключения сетей доступа (Access Network — AN) к телефонным станциям LE (Local Exchange). Протоколы V5 используются следующими методами доступа:

1) Доступ по аналоговым телефонным линиям.

2) Доступ по каналам ISDN BRI.

3) Доступ по каналам ISDN PRI (V5.2).

Другие аналоговые или цифровые системы доступа для полупостоянных (semi-permanent) соединений без связанной с ними сигнальной информации, передаваемой по отдельному каналу (outband).

Протокол V5 использует каналы 2048 кб/с; V5.2 может работать одновременно с 16 такими каналами. При аналоговом доступе сигнализация от LE на пользовательском порту ТфОП (PSTN) преобразуется в функциональную часть протокола V5 для передачи в сторону AN. Для пользователей ISDN в стеке V5 определен протокол управления для обмена отдельными функциями и сообщениями, требующимися для координации с процедурами управления вызовами в LE.

Для поддержки более высокого уровня трафика и динамического распределения каналов протокол V5.2 поддерживает дополнительные функции:

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

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

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

На различных уровнях стека V5 определены протоколы: LAPV5-EF, LAPV5, V5-Link Control (управление каналом), V5-BCC, V5-PSTN, V5-Control (управление) и V5-Protection (защита).

На рисунке 6 показано положение стека протоколов V5 и других телефонных протоколов в эталонной модели OSI.

Рисунок 6 — Положение стека телефонных протоколов в эталонной модели OSI

С#. Вопросы и ответы к собеседованию. Часть 4

Вопрос 15

В чем отличие необязательных параметров от именованных?

Ответ

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

Вопрос 16

Чем отличаются друг от друга классы String и StringBuilder? Зачем нужно такое разделение?

Ответ

String создает новые объекты при добавлении новой строки. StringBuilder работает с одним объектом в памяти.

Строка иммьютабельна (её невозможно изменить после того, как она создана). Если вы что-то прибавляете к строке, то в действительности вы не получите старую строку + добавку, вы получите новую строку, составленную из старой и добавки. Отсюда все проблемы с производительностью в приложениях, которые последовательно формируют большие строки.

StringBuilder же будет последовательно выделять память и “по-настоящему” дозаписываться данными. Так что при построении больших строк – только StringBuilder.

Вопрос 17

Какие отличие между значимыми и ссылочными типами?

Ответ

Типы по значению размещаются в стеке потока. Типы по ссылке размещаются в управляемой куче.

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

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

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

Более подробно на metanit

Вопрос 18

Как и зачем использовать конструкцию Using в C#?

Ответ

Это аналог try finally. Мы говорим компилятору, что ресурсы можно очистить. По окончании блока вызывается метод Dispose. Класс, который использует using обязательно должен реализовывать интерфейс IDisposalbe.

Вопрос 19

В чем отличие использования Finalize и Dispose?

В моменте очистки мусора.

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

Finalize определен для типа object и соответственно его потомков. Физическое удаление из памяти происходит в момент сборки мусора, например в конце программы. Dispose это метод интерфейса IDisposable. Предполагается, что физическое удаление ресурсов произойдет в момент вызова Dispose.


Вопрос 20

В чем основные отличия класса от структуры в языке C#?

Класс это ссылочный тип. Все его данные содержатся в куче. Структура может содержать данные по значению и по ссылке. Данные структуры по значению содержатся в стеке, по ссылке в куче.

Более подробно на metanit

Вопрос 21

Как можно сравнить строки в C#?

Через метод Compare например.

Либо по значению

Вопрос 22

Что такое управляемый код и CLR? Основные требования к управляемому коду.

Ответ

CLR заботится об управлении памятью, о совместимости между платформами, о безопасности кода и так далее Это хорошо описано у Рихтера.

Вопрос 23

Разница IEnumerable и IQueryable при работе с удаленной БД ?

Мастер Йода рекомендует:  Инструкция по размещению статей

Ответ

IQueryable наследуется от IEnumerable

IEnumerable находится в пространстве имен System.Collections

IQueryable располагается в пространстве имен System.Linq

Объект IEnumerable представляет набор данных в памяти и может перемещаться по этим данным только вперед. Запрос, представленный объектом IEnumerable, выполняется немедленно и полностью, поэтому получение данных приложением происходит быстро.

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

Методы расширений LINQ могут возвращать два объекта: IEnumerable и IQueryable. С одной стороны, интерфейс IQueryable наследуется от IEnumerable, поэтому по идее объект IQueryable это и есть также объект IEnumerable. Но реальность несколько сложнее. Между объектами этих интерфейсов есть разница в плане функциональности, поэтому они не взаимозаменяемы.

Интерфейс IEnumerable находится в пространстве имен System.Collections . Объект IEnumerable представляет набор данных в памяти и может перемещаться по этим данным только вперед. Запрос, представленный объектом IEnumerable, выполняется немедленно и полностью, поэтому получение данных приложением происходит быстро.

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

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

Вопрос 24

Что такое абстракция и как она связана с ООП?

Абстракция – это определенный уровень описания/представления модели чего либо.
ООП базируется на взаимодействии объектов которые описывают модель чего либо.
С помощью ООП можно создать абстракцию чего либо.
Абстракция необходима в крупных проектах.
С помощью нее можно обсуждать и работать на разных уровнях представления системы гораздо эффективнее не вдаваясь в детали всей системы.
Это как книга: название говорит о чем книга в целом, название разделов дает больше информации, но мы все равно не знаем что конкретно там написанно. Нахвание глав дает конкретнее посказку, но сама информация полная только внутри.
Представьте обсуждения книг без их названия, частей, глав.

Вопрос 25

Что такое IoC(Inversion of Control/инверсия зависимостей) и для чего она нужна?

BestProg

Интерфейсы

1. Назначение интерфейсов. Особенности применения интерфейсов в C#

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

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

Структура также как и класс может реализовывать любое количество интерфейсов.

Особенности интерфейсов

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

При использовании интерфейсов в классах-наследниках:

  • запрещено изменять модификатор доступа для метода при его реализации;
  • невозможно объявить методы интерфейса как virtual ;
  • запрещено объявлять методы интерфейса с ключевым словом static (как статические).

2. Какое отличие между интерфейсами и абстрактными классами?

В языке программирования C# существуют следующие отличия между интерфейсами и абстрактными классами:

  1. В интерфейсе запрещено прописывать реализацию его членов. В абстрактном классе часть членов может иметь реализацию. Иными словами, интерфейс это тот же абстрактный класс, у которого все методы абстрактные.
  2. В интерфейсе запрещено описывать поля (переменные, объекты), в абстрактном классе можно.
  3. Интерфейс не может содержать конструктор. В абстрактном классе может быть объявлен конструктор.
  4. Любой класс может быть унаследован от нескольких интерфейсов. При этом любой класс может быть унаследован только от одного абстрактного класса (и не более).

3. Сколько классов могут иметь реализацию методов интерфейса?

Если интерфейс определен, то он может быть реализован в любом количестве классов.

4. Сколько интерфейсов может быть реализовано в одном классе?

В одном классе может быть реализовано любое количество интерфейсов.

5. Какой общий вид описания интерфейса?

Интерфейсы объявляются с помощью ключевого слова interface . Общая форма описания интерфейса, в котором определяются методы, следующая:

  • имя – конкретное имя интерфейса;
  • имя_метода1 , имя_метода2 , …, имя_методаN – имена методов интерфейсов;
  • возвращаемый_тип1 , возвращаемый_тип2 , …, возвращаемый_типN – типы, которые возвращаются методами интерфейса;
  • параметры1 , параметры2 , …, параметрыN – списки параметров методов интерфейса.

Кроме методов, в интерфейсах можно указывать свойства, события и индексаторы.

6. Какие элементы языка программирования можно указывать в интерфейсах?

В интерфейсах можно указывать:

7. Как выглядит общая форма реализации интерфейса в классе?

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

где имя_интерфейса – имя интерфейса, методы (свойства, индексаторы, события) которого реализуются в классе. Класс обязательно должен реализовать все методы интерфейса.

8. Какая общая форма класса реализующего несколько интерфейсов?

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

Общая форма класса реализующего несколько интерфейсов:

где имя_интерфейса1 , имя_интерфейса2 , …, имя_интерфейсаN – имена интерфейсов, которые должен реализовать класс. Класс должен реализовать все методы всех интерфейсов.

9. Пример объявления интерфейса и класса наследующего этот интерфейс

В данном примере интерфейсу присваивается имя IMyInterface . Рекомендовано к имени интерфейса добавить префикс ‘ I ’ в соответствии с общераспространенной практикой.

Интерфейс объявлен как public .

В данном примере, в интерфейсе объявлено описание четырех методов, которые должны быть реализованы во всех классах, определяющих эти интерфейсы. Это методы: MyGetInt() , MyGetPi() , MySquare() , MySqrt() .

Пример описания класса использующего этот интерфейс.


Все методы, которые определяются в классе, должны иметь тип доступа public . Если установить другой тип доступа ( private или protected ), то Visual Studio выдаст следующее сообщение:

где MyFun() – название функции, которая реализована в классе с модификатором доступа private или protected .

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

10. Пример объявления двух интерфейсов и класса, который реализует методы этих интерфейсов

В нижеследующем примере объявлено два интерфейса с именами MyInterface и MyInterface2. Первый интерфейс содержит 4 методы. Второй интерфейс содержит 1 метод.

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

11. Пример использования ссылки на интерфейс для доступа к методам класса

В C# допускается описывать ссылки на интерфейс. Если описать переменную-ссылку на интерфейс, то с ее помощью можно вызвать методы класса, который использует этот интерфейс.

Пример.

В данном примере создается объект (экземпляр) класса MyClass с именем mc . Затем описывается ссылка на интерфейс IMyInterface с именем mi .

приводит к тому, что ссылка mi указывает на объект класса mc . Таким образом, через ссылку mi можно иметь доступ к методам класса MyClass , так как класс MyClass реализует методы интерфейса IMyInterface.

С помощью ссылки на интерфейс можно иметь доступ к методам классов, которые реализуют описанные в этом интерфейсе методы.

12. Каким образом в интерфейсе описывается свойство?

Свойство описывается в интерфейсе без тела. Общая форма объявления интерфейсного свойства следующая:

Если свойство предназначено только для чтения, то используется один только аксессор get .

Если свойство предназначено для записи, то используется только один аксессор set .

Пример. Описывается интерфейс и класс. Класс возвращает свойство MyPi .

13. Пример интерфейса, в котором описывается индексатор.

Общая форма объявления интерфейсного индексатора имеет вид:

Пример описания и использования интерфейсного индексатора, который считывает элемент из массива, состоящего из 5 элементов типа double .

14. Какие элементы программирования языка C# нельзя описывать в интерфейсах?

Интерфейсы не могут содержать:

  • члены данных;
  • конструкторы;
  • деструкторы;
  • операторные методы.

15. Как работает механизм наследования интерфейсов?

Интерфейс может наследовать другой интерфейс. Синтаксис наследования интерфейсов такой же, как и у классов.

Общая форма наследования интерфейса следующая:

где имя_интерфейса – имя интерфейса, который наследует другие интерфейсы;

имя_интерфейса1 , имя_интерфейса2 , …, имя_интерфейсаN – имена интерфейсов-предков.

Пример. В данном примере класс MyClass использует интерфейс, который наследует другой интерфейс. В классе нужно реализовать все методы (свойства, индексаторы, события) интерфейса MyInterface1 и интерфейса MyInterface2.

16. Что такое явная реализация члена интерфейса?

Если перед именем метода (свойства, индексатора, события) стоит имя интерфейса через разделитель ‘ . ‘ (точка), то это называется явной реализацией члена интерфейса.

Пример явной реализации.

17. Когда целесообразно применять явную реализацию члена интерфейса? Примеры.

Явная реализация члена интерфейса применяется в следующих случаях:

  • когда нужно, чтобы интерфейсный метод был доступен по интерфейсной ссылке, а не по объекту класса, реализующего данный интерфейс. В этом случае интерфейсный метод не является открытым ( public ) членом класса (см. пример 1);
  • когда в одном классе реализованы два интерфейса, в которых методы имеют одинаковые имена и сигнатуру (см. пример 2).

Пример 1. Явная реализация интерфейсного метода. По интерфейсной ссылке метод есть доступен, а по объекту класса недоступен.

Пример 2. Есть два интерфейса MyInterface1 и MyInterface2 . Каждый из них имеет методы с одинаковыми именами и сигнатурами. В данном случае это метод Method() , не возвращающий параметров ( void ). С помощью явной реализации класс распознает эти методы.

18. В каких случаях лучше использовать интерфейс, а в каких абстрактный класс?

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

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

Тестирование пользовательского интерфейса

24.1. Задачи и цели тестирования пользовательского интерфейса

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

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

С другой стороны, пользовательский интерфейс — «лицо» системы, и от его продуманности зависит эффективность работы пользователя с системой. Факторы, влияющие на эффективность работы, слабо поддаются формализации в виде конкретных требований к отдельным элементам, однако должны быть учтены в виде общих рекомендаций и принципов построения пользовательского интерфейса программной системы. Проверка интерфейса на эффективность человеко-машинного взаимодействия получила название проверки удобства использования ( usability verification ; в русскоязычной литературе в качестве перевода термина usability часто используют слово «практичность»).

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

24.2. Функциональное тестирование пользовательских интерфейсов

Функциональное тестирование пользовательского интерфейса состоит из пяти фаз:

  • анализ требований к пользовательскому интерфейсу;
  • разработка тест-требований и тест-планов для проверки пользовательского интерфейса;
  • выполнение тестовых примеров и сбор информации о выполнении тестов;
  • определение полноты покрытия пользовательского интерфейса требованиями;
  • составление отчетов о проблемах в случае несовпадения поведения системы и требований либо в случае отсутствия требований на отдельные интерфейсные элементы.

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

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

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

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

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

24.2.1. Проверка требований к пользовательскому интерфейсу

24.2.1.1. Типы требований к пользовательскому интерфейсу

Требования к пользовательскому интерфейсу могут быть разбиты на две группы:

  • требования к внешнему виду пользовательского интерфейса и формам взаимодействия с пользователем;

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

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

К первой группе можно отнести следующие типы требований.

  • Требования к размещению элементов управления на экранных формах

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

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

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

Примером требований по размещению конкретного элемента может служить следующее:

Кнопка «Начать передачу» должна находиться непосредственно под строкой меню в левой части рабочей области окна.

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

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

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

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

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

Однако в случае тестирования требования вида

Сообщения об ошибках должны выводиться в статусную строку прижатыми к левому краю красным цветом полужирным шрифтом.

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

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

Ко второй группе относятся следующие типы требований.

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

При нажатии кнопки «Сброс» значение таймера синхронизации передачи должно сбрасываться в 0.

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

При нажатии кнопки «Отложенный сброс» должно выводиться окно «Ввод значения времени для отложенного сброса».

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

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

24.2.1.2. Тестопригодность требований к пользовательскому интерфейсу

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

Примером тестонепригодного требования может служить классическое требование

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

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

Под интуитивной понятностью интерфейса понимается доступность любой функции системы при помощи не более чем 5 щелчков мыши по интерфейсным элементам.

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

Примером вероятностного критерия может служить следующее дополнение:

Под интуитивной понятностью интерфейса понимается, что пользователь обращается к руководству пользователя не чаще, чем раз в пять минут на этапе обучения и не чаще, чем раз в 2 часа на этапе активного использования системы. Значения должны быть получены на репрезентативной выборке пользователей не менее 1000 человек.

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

Интерфейсы (Руководство по программированию в C#) Interfaces (C# Programming Guide)

Интерфейс содержит определения для группы связанных функциональных возможностей, которые может реализовать неабстрактный класс или структура. An interface contains definitions for a group of related functionalities that a non-abstract class or a struct must implement.

С помощью интерфейсов можно, например, включить в класс поведение из нескольких источников. By using interfaces, you can, for example, include behavior from multiple sources in a class. Эта возможность очень важна в C#, поскольку этот язык не поддерживает множественное наследование классов. That capability is important in C# because the language doesn’t support multiple inheritance of classes. Кроме того, необходимо использовать интерфейс, если требуется имитировать наследование для структур, поскольку они не могут фактически наследовать от другой структуры или класса. In addition, you must use an interface if you want to simulate inheritance for structs, because they can’t actually inherit from another struct or class.

Интерфейс определяется с помощью ключевого слова interface, You define an interface by using the interface keyword. как показано в следующем примере. as the following example shows.

Имя структуры должно быть допустимым именем идентификатора C#. The name of the struct must be a valid C# identifier name. По соглашению имена интерфейсов начинаются с заглавной буквы I . By convention, interface names begin with a capital I .

Любой объект (класс или структура), реализующий интерфейс IEquatable , должен содержать определение для метода Equals, соответствующее сигнатуре, которую задает интерфейс. Any class or struct that implements the IEquatable interface must contain a definition for an Equals method that matches the signature that the interface specifies. В результате вы можете быть уверены, что класс, реализующий IEquatable , содержит метод Equals , с помощью которого экземпляр этого класса может определить, равен ли он другому экземпляру того же класса. As a result, you can count on a class that implements IEquatable to contain an Equals method with which an instance of the class can determine whether it’s equal to another instance of the same class.

Определение IEquatable не предоставляет реализацию для метода Equals . The definition of IEquatable doesn’t provide an implementation for Equals . Класс или структура может реализовывать несколько интерфейсов, но класс может наследовать только от одного класса. A class or struct can implement multiple interfaces, but a class can only inherit from a single class.

Дополнительные сведения об абстрактных классах см. в разделе Абстрактные и запечатанные классы и члены классов. For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

Интерфейсы могут содержать методы, свойства, события, индексаторы, а также любое сочетание этих четырех типов членов. Interfaces can contain methods, properties, events, indexers, or any combination of those four member types. Ссылки на примеры см. в разделе Связанные разделы. For links to examples, see Related Sections. Интерфейс не может содержать константы, поля, операторы, конструкторы экземпляров, методы завершения или типы. An interface can’t contain constants, fields, operators, instance constructors, finalizers, or types. Члены интерфейса автоматически являются открытыми, и они не могут включать модификаторы доступа. Interface members are automatically public, and they can’t include any access modifiers. Члены также не могут быть статическими. Members also can’t be static.

Для реализации члена интерфейса соответствующий член реализующего класса должен быть открытым и не статическим, а также иметь такое же имя и сигнатуру, что и член интерфейса. To implement an interface member, the corresponding member of the implementing class must be public, non-static, and have the same name and signature as the interface member.

Если класс (или структура) реализует интерфейс, этот класс (или структура) должен предоставлять реализацию для всех членов, которые определяет этот интерфейс. When a class or struct implements an interface, the class or struct must provide an implementation for all of the members that the interface defines. Сам интерфейс не предоставляет функциональность, которую класс или структура может наследовать таким же образом, как можно наследовать функциональность базового класса. The interface itself provides no functionality that a class or struct can inherit in the way that it can inherit base class functionality. Однако если базовый класс реализует интерфейс, то любой класс, производный от базового класса, наследует эту реализацию. However, if a base class implements an interface, any class that’s derived from the base class inherits that implementation.

В следующем примере показана реализация интерфейса IEquatable . The following example shows an implementation of the IEquatable interface. Реализующий класс Car должен предоставлять реализацию метода Equals. The implementing class, Car , must provide an implementation of the Equals method.

Свойства и индексаторы класса могут определять дополнительные методы доступа для свойства или индексатора, определенного в интерфейсе. Properties and indexers of a class can define extra accessors for a property or indexer that’s defined in an interface. Например, интерфейс может объявлять свойство, имеющее акцессор get. For example, an interface might declare a property that has a get accessor. Класс, реализующий этот интерфейс, может объявлять это же свойство с обоими акцессорами ( get и set). The class that implements the interface can declare the same property with both a get and set accessor. Однако если свойство или индексатор использует явную реализацию, методы доступа должны совпадать. However, if the property or indexer uses explicit implementation, the accessors must match. Дополнительные сведения о явной реализации см. в статьях Явная реализация интерфейса и Свойства интерфейса. For more information about explicit implementation, see Explicit Interface Implementation and Interface Properties.

Мастер Йода рекомендует:  Как и когда использовать атрибут tabindex

Интерфейсы могут наследовать от других интерфейсов. Interfaces can inherit from other interfaces. Класс может включать интерфейс несколько раз через наследуемые базовые классы или через интерфейсы, которые наследуются другими интерфейсами. A class might include an interface multiple times through base classes that it inherits or through interfaces that other interfaces inherit. Однако класс может предоставить реализацию интерфейса только однократно и только если класс объявляет интерфейс как часть определения класса ( class ClassName : InterfaceName ). However, the class can provide an implementation of an interface only one time and only if the class declares the interface as part of the definition of the class ( class ClassName : InterfaceName ). Если интерфейс наследуется, поскольку наследуется базовый класс, реализующий этот интерфейс, то базовый класс предоставляет реализацию членов этого интерфейса. If the interface is inherited because you inherited a base class that implements the interface, the base class provides the implementation of the members of the interface. Но производный класс может повторно реализовать любые члены виртуального интерфейса и не использовать наследованную реализацию. However, the derived class can reimplement any virtual interface members instead of using the inherited implementation.

Базовый класс также может реализовывать члены интерфейса с помощью виртуальных членов. A base class can also implement interface members by using virtual members. В таком случае производный класс может изменять поведение интерфейса путем переопределения виртуальных членов. In that case, a derived class can change the interface behavior by overriding the virtual members. Дополнительные сведения о виртуальных членах см. в статье Полиморфизм. For more information about virtual members, see Polymorphism.

Сводка по интерфейсам Interfaces summary

Интерфейс имеет следующие свойства. An interface has the following properties:

  • Интерфейс подобен абстрактному базовому классу, имеющему только абстрактные члены. An interface is like an abstract base class with only abstract members. Любой класс (или структура), реализующий интерфейс, должен реализовывать все его члены. Any class or struct that implements the interface must implement all its members.
  • Невозможно создать экземпляр интерфейса напрямую. An interface can’t be instantiated directly. Его члены реализуются любым классом (или структурой), реализующим интерфейс. Its members are implemented by any class or struct that implements the interface.
  • Интерфейсы могут содержать события, индексаторы, методы и свойства. Interfaces can contain events, indexers, methods, and properties.
  • Интерфейсы не содержат реализацию методов. Interfaces contain no implementation of methods.
  • Класс или структура может реализовывать несколько интерфейсов. A class or struct can implement multiple interfaces. Класс может наследовать базовому классу и также реализовывать один или несколько интерфейсов. A class can inherit a base class and also implement one or more interfaces.

Содержание раздела In this section

Явная реализация интерфейса Explicit Interface Implementation
В этом разделе объясняется, как создать член класса, который относится к интерфейсу. Explains how to create a class member that’s specific to an interface.

Практическое руководство. Явная реализация элементов интерфейса How to: Explicitly Implement Interface Members
В этом разделе содержится пример явной реализации членов интерфейсов. Provides an example of how to explicitly implement members of interfaces.

Практическое руководство. Явная реализация элементов двух интерфейсов How to: Explicitly Implement Members of Two Interfaces
В этом разделе содержится пример явной реализации членов интерфейсов с помощью наследования. Provides an example of how to explicitly implement members of interfaces with inheritance.

Интерфейсы зачем их использовать

15.02.2013, 20:28

Зачем нужны интерфейсы?
Доброе утро, можете пожалуйста объяснить зачем нужны интерфейсы. Читаю книгу Шилдта и не понимаю.

Зачем нужны Интерфейсы
Здравствуйте. Вот такой у меня вопрос, касательно самой сути интерфейсов — зачем они нужны? В.

Зачем нужны интерфейсы?
Ознакомился с соответствующей литературой, посмотрел исходники, однако так и не понял идею, для.

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

Зачем нужны интерфейсы?
Никак не могу понять. Вроде все методы потом объявляются в классе.

15.02.2013, 20:34 2

Эта тема здесь создается с периодичностью минимум раз в неделю

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

Ну и для самостоятельного чтения, результат поиска по запросу «интерфейсы»:
http://www.cyberforum.ru/search.php?search >

15.02.2013, 20:37 [ТС] 3 15.02.2013, 20:43 4
15.02.2013, 20:43
15.02.2013, 20:44 [ТС] 5

15.02.2013, 20:46 6
15.02.2013, 20:48 7

Забудьте про коллекции — их тоже кто-то в какой-то момент писал.
Напишите, пожалуйста, метод.

Добавлено через 1 минуту
IamRain, слишком сложно, наверное, — сразу про плагины
Для начала человеку надо саму суть интерфейса понять.

15.02.2013, 20:52 8
15.02.2013, 20:54 [ТС] 9
15.02.2013, 20:58 10

Если учесть, что работаю я в сфере телерадиовещания, то нулевой.
Хотя вру, после универа отработал полтора года в том же универе рисёрч ассистентом.
Так что — полтора года.

15.02.2013, 20:59 11

CSharp, я все уже забыл хД Тимлид меня убьет)

Добавлено через 43 секунды

15.02.2013, 21:13 12
16.02.2013, 13:20 13

Решение

Как уже сказали, интерфейс — это контракт на реализацию. Использовать интерфейс нужно тогда, когда классы решают одну и ту же задачу, но могут сильно различаться по реализации, например две разных фирмы пишут разные классы для реализации одной задачи (например пополнение счёта у операторов связи). Эти фирмы никак друг с другом не сотрудничают и не знают исходных кодов друг друга, но пополнять счёт можно через один терминал. ПО терминала должно уметь это делать, но откуда оно узнает как работать с тем или иным типом связи? Для этого надо гарантировать, что каждый тип связи имеет строго определённый набор членов, т.е. требует реализацию интерфейса. Фирмы знают этот интерфейс и проблем никаких нет:

Как видите, здесь невозможно использовать базовый класс, т.к. фирмы не сотрудничают, а если не использовать интерфейс, то не будет гарантии, что нужный метод реализован, или придётся писать множество перегрузок для метода терминала (а в реале фирм или чего-то там еще может быть сотни). В общем, когда надо обеспечить связь неродственных классов, которые занимаются одним и тем же, то лучше использовать интерфейс.
В примере с сортировками массива происходит тоже самое: массивы разного типа — это какие-нибудь «фирмы» (типов бесконечное множество) и для каждого типа своя логика сортировки, которую «терминал» знать не может. Но если каждая «фирма» будет реализовывать интерфейс с методом Sort(), то в метод «терминала» можно будет передать любой объект, реализующий этот интерфейс и для каждого объекта будет выполнена его логика сортировки.

PS: наверное немного перемудрил, но, думаю, суть ясна.

Тема 3.2 Разработка пользовательских интерфейсов

Тема 3.2 Разработка пользовательских интерфейсов

1. Типы пользовательских интерфейсов и этапы их разработки.

2. Психофизические особенности человека, связанные с восприятием, запоминанием и обработкой информации.

3. Пользовательская и программная модели интерфейса.

4. Классификации диалогов и общие принципы их разработки.

5. Основные компоненты графических пользовательских интерфейсов.

6. Реализация диалогов в графическом пользовательском интерфейсе.

7. Пользовательские интерфейсы прямого манипулирования и их проектирование.

8. Интеллектуальные элементы пользовательских интерфейсов.

На ранних этапах развития вычислительной техники пользовательский интерфейс рассматривался как средство общения человека с операционной системой и был достаточно примитивным.

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

1. Типы пользовательских интерфейсов и этапы их разработки

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

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

Обмен информацией осуществляется передачей сообщений и управляющих сигналов.

Сообщение – порция информации, участвующая в диалоговом обмене.

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

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

Пользователь генерирует сообщения типа:

— запрос операции или функции,

— ввод или изменение информации,

— выбор поля кадра.

Получает в ответ:

— подсказки или справки,

— приказы, требующие действий,

— сообщения об ошибках, нуждающиеся в ответных действиях,

— изменение формата кадра.

Основные устройства, обеспечивающие выполнение операций ввода-вывода.

Для вывода сообщений:

— монохромные и цветные мониторы – вывод оперативной текстовой и графической информации;

— принтеры – получение «твердой копии» текстовой и графической информации;

— графопостроители – получение твердой копии графической информации;

— синтезаторы речи – речевой вывод;

— звукогенераторы – вывод музыки.

Для ввода сообщений:

— клавиатура – текстовый ввод;

— планшеты – графический ввод;

— сканеры – графический ввод;

— манипуляторы, световое перо, сенсорный экран – позиционирование и выбор информации на экране.

Рисунок 1 – Типы интерфейсов

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

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

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

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

Интерфейсы со свободной навигацией называют графическими пользовательскими интерфейсами. Интерфейсы этого типа ориентированы на использование экрана в графическом режиме с высокой разрешающей способностью.

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

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

— меню различных типов: ниспадающее, кнопочное, контекстное;

— разного рода компоненты ввода данных.

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

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

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

Этапы разработки пользовательского интерфейса. Разработка пользовательского интерфейса включает те же основные этапы, что и разработка программного обеспечения:

— постановка задачи – определение типа интерфейса и общих требований к нему;

— анализ требований и определение спецификаций – определение сценариев использования и пользовательской модели интерфейса;

— проектирование – проектирование диалогов и их реализация в виде процессов ввода-вывода;

— реализация – программирование и тестирование интерфейсных процессов.

2. Психофизические особенности человека, связанные с восприятием, запоминанием и обработкой


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

Исследованием принципов работы мозга человека занимается когнитивная психология.

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

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

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

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

В процессе переработки информации мозг сравнивает поступающие данные с предыдущими.

При смене кадра мозг на некоторое время блокируется: он «осваивает» новую картинку, выделяя наиболее существенные детали. А значит, если необходима быстрая реакция пользователя, то резко менять картину не стоит.

Краткосрочная память – самое «узкое» место «системы обработки информации» человека. Ее емкость приблизительно равна 7+2 несвязанных объектов. Не востребованная информация хранится в краткосрочной памяти не более 30 с.

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

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

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

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

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

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

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

При ожидании более 1-2 с пользователь может отвлечься, «потерять мысль», что неблагоприятно сказывается на результатах работы и увеличивает усталость, так как каждый раз после ожидания много сил тратится на включение в работу.

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

Для «развлечения» пользователя используется анимация. Например, в Windows при копировании файлов демонстрируется «ролик» с летающими листочками. Следует иметь в виду, что, когда какую-либо анимацию смотришь первый раз, то это интересно, а когда в течение получаса наблюдаешь, как «летают» листочки при получении информации из Интернета,, то это начинает раздражать.

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

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

3. Пользовательская и программная модели интерфейса

Модели пользовательского интерфейса:

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

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

— уровнем подготовки в предметной области разрабатываемого программного обеспечения;

— интуитивными моделями выполнения операций в этой предметной области;

— уровнем подготовки в области владения компьютером;

— устоявшимися стереотипами работы с компьютером.

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

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

Рисунок 2 – Процесс проектирования пользовательского интерфейса

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

Критерии оценки интерфейса пользователем. Основные критерии интерфейсов пользователя:

— простота освоения и запоминания операций системы – конкретно оценивают время освоения и продолжительность сохранения информации в памяти;

— скорость достижения результатов при использовании системы – определяется количеством вводимых или выбираемых мышью команд и настроек;

— субъективная удовлетворенность при эксплуатации системы (удобство работы, утомляемость и т. д.).

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

4. Классификация диалогов и общие принципы их разработки

Типы диалога. Тип диалога определяет, кто из «собеседников» управляет процессом обмена информацией.

Различают два типа диалога:

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

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

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

Различают три формы диалога:

Фразовая форма предполагает «общение» с пользователем на естественном языке или его подмножестве. Содержание диалога составляют повелительные, повествовательные и вопросительные предложения и ответы на вопросы.

Чаще всего используют диалоги, предполагающие односложные ответы.

Программа: Введите свой возраст (полных лет):

При обработке фраз оперируют понятием словоформа.

Словоформа – отрезок текста между двумя соседними пробелами или знаками препинания.

Морфологический анализ — обработка словоформ вне связи с контекстом.

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

— процедурный – предполагает выделение в текущей словоформе основу, которую затем идентифицируют.

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

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

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

Недостатки фразовой формы:

— большие затраты ресурсов;

— отсутствие гарантии однозначной интерпретации формулировок;

— необходимость ввода длинных грамматически правильных фраз.

Достоинство фразовой формы – свободное общение с системой.

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

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

Команду можно вводить:

— в виде строки текста, специально разработанного формата (команды MS DOS в командной строке);

— нажатием некоторой комбинации клавиш (комбинации «быстрого доступа» Windows-приложений);

— посредством манипулирования мышью («перетаскиванием» пиктограмм);

— комбинацией второго и третьего способов.

Достоинства директивной формы:

— небольшой объем вводимой информации;

— гибкость – возможности выбора операции, ограничивается набором допустимых команд;

— ориентация на диалог, управляемый пользователем;

— использование минимальной области экрана или не использование ее вообще;

— возможность совмещения с другими формами.

Недостатки директивной формы:

— практическое отсутствие подсказок на экране, что требует запоминания вводимых команд и их синтаксиса;


— почти полное отсутствие обратной связи о состоянии инициированных процессов;

— необходимость навыков ввода текстовой информации или манипуляций мышью;

— отсутствие возможности настройки пользователем.

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

Табличная форма – пользователь выбирает ответ из предложенных программой. Язык диалога имеет простейший синтаксис и однозначную семантику, что достаточно легко реализовать. Форма удобна для пользователя, так как выбрать всегда проще, что существенно для пользователя-непрофессионала. Эту форму можно использовать, если множество возможных ответов на конкретный вопрос конечно. Если количество возможных ответов велико (более 20), то применение табличной формы может оказаться нецелесообразным.

Достоинства табличной формы:

— сокращение количества ошибок ввода: пользователь не вводит информацию, а указывает на нее;

— сокращение времени обучения пользователя;

— возможность совмещения с другими формами;

— в некоторых случаях возможность настройки пользователем.

Недостатки табличной формы:

— необходимость наличия навыков навигации по экрану;

— использование сравнительно большой площади экрана для изображения визуальных компонентов;

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

Типы и формы диалога выбирают независимо друг от друга: любая форма применима для обоих типов диалогов.

Синхронные — диалоги, происходящие в процессе нормальной работы программного обеспечения.

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

Разработка диалогов. Стадии проектирования и реализации диалогов:

— определение множества необходимых диалогов, их основных сообщений и возможных сценариев – проектирование абстрактных диалогов;

— определение типа и формы каждого диалога, а также синтаксиса и семантики используемых языков – проектирование конкретных диалогов;

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

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

Кроме сценариев используют диаграммы состояний интерфейса или графы диалога.

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

Каждый маршрут на графе соответствует возможному варианту диалога.

Рисунок 3 – Графы абстрактного диалога:

а – диалог, управляемый системой; б – диалог, управляемый пользователем

5. Основные компоненты графических пользовательских интерфейсов

Графические пользовательские интерфейсы поддерживаются операционными системами Windows, Apple Macintosh, OS/2 и т. д. Для таких интерфейсов разработаны наборы стандартных компонентов взаимодействия с пользователем для каждой операционной системы.

Интерфейсы строятся по технологии WIMP: W – Windows (окна), I – Icons (пиктограммы), M – Mouse (мышь), P — Pop-up (всплывающие или выпадающие меню). Основные элементы графических интерфейсов: окна, пиктограммы, комноненты ввода-вывода и мышь, которую используют в качестве указующего устройства и устройства прямого манипулирования объектами на экране.

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

5 категорий окон:

— основные окна (окна приложений);

— дочерние или подчиненные окна;

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

Дочернее окно Windows используют в многодокументных программных интерфейсах (MDI). Это окно не содержит меню. В строке заголовка – специальное имя, идентифицирующее связанный с ним документ или файл. Пиктограммы всех дочерних окон одинаковы.

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

Оно может содержать:

— строку заголовка с кнопкой системного меню;

— компоненты, обеспечивающие пользователю возможность ввода или выбора ответа;

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

Размер окна не изменяем, но по экрану его можно перемещать.

Информационные окна двух типов:

Окна сообщений содержат: заголовок с кнопкой системного меню, текст сообщения, одна или несколько кнопок реакции пользователя (Yes, No, Cancel).

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

Окна меню Windows используют как открывающиеся панели иерархического меню или как контекстные меню.

Каждой строке окна меню может соответствовать:

— меню следующего уровня, что обеспечивается стрелкой;

— окно диалога, что обозначается тремя точками.

Добавляется указание клавиш быстрого вызова.

Пиктограммы. Пиктограмма – небольшое окно с графическим изображением, отражающим содержимое буфера, с которым она связана.

— программные, связанные с соответствующей программой;

— пиктограммы дочерних окон, обеспечивающие доступ к различным документам;

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

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

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

По реакции на воздействие различают типы адресатов:

— указание и выбор (развертывание пиктограмм, определение активного окна);

— буксировка и «резиновая нить» (перенос объекта или его границ);

— экранные кнопки и «скользящие» барьеры (выполнение или циклически повторяемых действий (выполнение некоторых операций или рисование, подразумеваемых при активизации определенной области экрана — кнопки)).

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

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

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

Другие формы ввода-вывода:

6. Реализация диалогов в графическом пользовательском интерфейсе

Диалоги обоих типов:

Реализация диалогов, управляемых пользователем. Для реализации применяют меню различных видов:

— контекстные и кнопочные.

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

Меню. Меню проектируют на основе графов диалогов разрабатываемого программного обеспечения. Если число операций не превышает 5, то обычно используют кнопки. Если число операций не более 9-10, то – одноуровневое меню. Если число операций более 10, то используют «ниспадающее» двухуровневое иерархическое меню.

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

Традиционно (обычно в текстовых и графических редакторах):

последний пункт Справка.

Количество уровней иерархического меню не должно превышать 2-3 (сложно искать). Число операций в окне не должно превышать7-8 операций.

Если число операций превышает 70-80. Разработчики Microsoft Word предложили адаптивное иерархического меню, где содержимое окна меню второго уровня постоянно меняется, отображая только те операции, которые использует пользователь. Если пользователь не находит нужной операции, то через несколько секунд или при нажатии специальной кнопки Word демонстрирует окно меню полностью.

7 Пользовательские интерфейсы прямого манипулирования и их проектирование


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

Интерфейсы используют директивную форму диалога: ввод команды осуществляется при выполнении определенных действий с пиктограммой объекта мышью. Основными элементами этих интерфейсов являются: метафоры, объекты, представления объектов и технологии Drag and Drop («перетащил и бросил»).

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

Интерфейс прямого манипулирования должен обеспечить пользователю среду, содержащую знакомые элементы, с которыми пользователь не раз встречался в профессиональной деятельности или в быту, и предоставлять ему возможность манипулирования отдельными объектами. (Метафора “Выбрасывание мусора” — для удаления файлов).

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

Целесообразно не делать изображения слишком реалистичными,, чтобы не обмануть ожидания пользователя.

Метафоры и анимация. При реализации метафор все большая роль уделяется средствам мультимедиа, в основном анимации. Используя мультипликацию, можно не только развлекать пользователя, но и “готовить” его к смене кадров, сокращая время, необходимое для адаптации к изменившейся ситуации.

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

Объекты интерфейса прямого манипулирования и их представления.

Три основные типа объектов интерфейсов прямого манипулирования:

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

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

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

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

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

Различие между типами объектов является условным, так как один и тот же объект в разных ситуациях может вести себя то, как объект-данные, то, как объект-устройство, то, как объект-контейнер (принтер – объект-устройство, может обладать свойства объекта-контейнера, может содержать объекты-данные в очереди на печать; представление в виде пиктограммы, окна очереди на печать, окна настроек; имя представления целесообразно указывать в заголовке окна объекта).

Технология Drag and Drop. Основные принципы прямого манипулирования, описанные в руководстве по разработке пользовательских интерфейсов фирмы IBM:

— результат перемещения объекта должен соответствовать ожиданиям пользователя;

— пользователи не должны неожиданно терять информацию;

— пользователь должен иметь возможность отменить неправильное действие.

Основные принципы визуализации операции прямого манипулирования:

— исходное выделение – используется в качестве обратной связи пользователю, чтобы сообщить ему, что объект захвачен, в Windows с этой целью используется выделение цветом;

— визуализация перемещения – используется для идентификации выполняемого действия;

— целевое выделения – используется для идентификации пункта назначения, показывая, таким образом, куда «упадет» объект, если его отпустить в текущий момент времени;

— визуализация действия – используется для обозначения времени ожидания завершения операции, обычно с этой целью применяют анимацию или изменение формы курсора на «песочные часы».

Существует два вида пунктов назначения: один принимает объект, а другой его копию (Пользователь «бросает» документ в «корзину» – уничтожается сам документ, а если на принтер, то передается копия документа).

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

— формирование множества объектов предметной области, которое должно быть представлено на экране, причем в качестве основы в этом случае используют не варианты использования, а концептуальную модель предметной области;

— анализ объектов, определение их типов и представлений, а также перечня операций с этими объектами;

— уточнение взаимодействия объектов и построение матрицы прямого манипулирования;

— определение визуальных представлений объектов;

— разработка меню окон объектов и контекстных меню;

— создание прототипа интерфейса;

— тестирование на удобство использования.

8 Интеллектуальные элементы пользовательских интерфейсов

Элементы пользовательских интерфейсов: Мастер, Советчик, Агент. Сделано множество попыток создания социализированного пользовательского интерфейса. В основе такого интерфейс лежит идея создания персонифицированного, т. е. «имеющего личность», интерфейса. Развлекающие программы, такие как Cats(кошки) и Dogs(собаки), реализующие сложное поведение домашних животных в разных ситуациях, показывают, что технически это вполне решаемая задача.

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

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

Мастер реализует последовательный или древовидный сценарий диалога. Его целесообразно использовать для решения хорошо структурированных, последовательных задач.

При этом необходимо:

— предоставить пользователю возможность возврата на предыдущий шаг;

— предусмотреть возможность отмены работы Мастера;

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

— пояснить пользователю каждый шаг;

— по возможности демонстрировать результат уже выполненных операций на каждом шаге.

Программные агенты. Используются для выполнения рутинной работы. Основными функциями Агентов-Помощников являются: наблюдение, поиски управление. Различают:

программы-агенты, настраиваемые на выполнение указанных задач;

программы-агенты, способные обучаться (фиксируя действия пользователя (по типу магнитофона)).

Интерфейсы (Руководство по программированию в C#) Interfaces (C# Programming Guide)

Интерфейс содержит определения для группы связанных функциональных возможностей, которые может реализовать неабстрактный класс или структура. An interface contains definitions for a group of related functionalities that a non-abstract class or a struct must implement.

С помощью интерфейсов можно, например, включить в класс поведение из нескольких источников. By using interfaces, you can, for example, include behavior from multiple sources in a class. Эта возможность очень важна в C#, поскольку этот язык не поддерживает множественное наследование классов. That capability is important in C# because the language doesn’t support multiple inheritance of classes. Кроме того, необходимо использовать интерфейс, если требуется имитировать наследование для структур, поскольку они не могут фактически наследовать от другой структуры или класса. In addition, you must use an interface if you want to simulate inheritance for structs, because they can’t actually inherit from another struct or class.

Интерфейс определяется с помощью ключевого слова interface, You define an interface by using the interface keyword. как показано в следующем примере. as the following example shows.

Имя структуры должно быть допустимым именем идентификатора C#. The name of the struct must be a valid C# identifier name. По соглашению имена интерфейсов начинаются с заглавной буквы I . By convention, interface names begin with a capital I .

Любой объект (класс или структура), реализующий интерфейс IEquatable , должен содержать определение для метода Equals, соответствующее сигнатуре, которую задает интерфейс. Any class or struct that implements the IEquatable interface must contain a definition for an Equals method that matches the signature that the interface specifies. В результате вы можете быть уверены, что класс, реализующий IEquatable , содержит метод Equals , с помощью которого экземпляр этого класса может определить, равен ли он другому экземпляру того же класса. As a result, you can count on a class that implements IEquatable to contain an Equals method with which an instance of the class can determine whether it’s equal to another instance of the same class.

Определение IEquatable не предоставляет реализацию для метода Equals . The definition of IEquatable doesn’t provide an implementation for Equals . Класс или структура может реализовывать несколько интерфейсов, но класс может наследовать только от одного класса. A class or struct can implement multiple interfaces, but a class can only inherit from a single class.

Дополнительные сведения об абстрактных классах см. в разделе Абстрактные и запечатанные классы и члены классов. For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

Интерфейсы могут содержать методы, свойства, события, индексаторы, а также любое сочетание этих четырех типов членов. Interfaces can contain methods, properties, events, indexers, or any combination of those four member types. Ссылки на примеры см. в разделе Связанные разделы. For links to examples, see Related Sections. Интерфейс не может содержать константы, поля, операторы, конструкторы экземпляров, методы завершения или типы. An interface can’t contain constants, fields, operators, instance constructors, finalizers, or types. Члены интерфейса автоматически являются открытыми, и они не могут включать модификаторы доступа. Interface members are automatically public, and they can’t include any access modifiers. Члены также не могут быть статическими. Members also can’t be static.

Для реализации члена интерфейса соответствующий член реализующего класса должен быть открытым и не статическим, а также иметь такое же имя и сигнатуру, что и член интерфейса. To implement an interface member, the corresponding member of the implementing class must be public, non-static, and have the same name and signature as the interface member.

Если класс (или структура) реализует интерфейс, этот класс (или структура) должен предоставлять реализацию для всех членов, которые определяет этот интерфейс. When a class or struct implements an interface, the class or struct must provide an implementation for all of the members that the interface defines. Сам интерфейс не предоставляет функциональность, которую класс или структура может наследовать таким же образом, как можно наследовать функциональность базового класса. The interface itself provides no functionality that a class or struct can inherit in the way that it can inherit base class functionality. Однако если базовый класс реализует интерфейс, то любой класс, производный от базового класса, наследует эту реализацию. However, if a base class implements an interface, any class that’s derived from the base class inherits that implementation.

В следующем примере показана реализация интерфейса IEquatable . The following example shows an implementation of the IEquatable interface. Реализующий класс Car должен предоставлять реализацию метода Equals. The implementing class, Car , must provide an implementation of the Equals method.

Свойства и индексаторы класса могут определять дополнительные методы доступа для свойства или индексатора, определенного в интерфейсе. Properties and indexers of a class can define extra accessors for a property or indexer that’s defined in an interface. Например, интерфейс может объявлять свойство, имеющее акцессор get. For example, an interface might declare a property that has a get accessor. Класс, реализующий этот интерфейс, может объявлять это же свойство с обоими акцессорами ( get и set). The class that implements the interface can declare the same property with both a get and set accessor. Однако если свойство или индексатор использует явную реализацию, методы доступа должны совпадать. However, if the property or indexer uses explicit implementation, the accessors must match. Дополнительные сведения о явной реализации см. в статьях Явная реализация интерфейса и Свойства интерфейса. For more information about explicit implementation, see Explicit Interface Implementation and Interface Properties.

Интерфейсы могут наследовать от других интерфейсов. Interfaces can inherit from other interfaces. Класс может включать интерфейс несколько раз через наследуемые базовые классы или через интерфейсы, которые наследуются другими интерфейсами. A class might include an interface multiple times through base classes that it inherits or through interfaces that other interfaces inherit. Однако класс может предоставить реализацию интерфейса только однократно и только если класс объявляет интерфейс как часть определения класса ( class ClassName : InterfaceName ). However, the class can provide an implementation of an interface only one time and only if the class declares the interface as part of the definition of the class ( class ClassName : InterfaceName ). Если интерфейс наследуется, поскольку наследуется базовый класс, реализующий этот интерфейс, то базовый класс предоставляет реализацию членов этого интерфейса. If the interface is inherited because you inherited a base class that implements the interface, the base class provides the implementation of the members of the interface. Но производный класс может повторно реализовать любые члены виртуального интерфейса и не использовать наследованную реализацию. However, the derived class can reimplement any virtual interface members instead of using the inherited implementation.

Базовый класс также может реализовывать члены интерфейса с помощью виртуальных членов. A base class can also implement interface members by using virtual members. В таком случае производный класс может изменять поведение интерфейса путем переопределения виртуальных членов. In that case, a derived class can change the interface behavior by overriding the virtual members. Дополнительные сведения о виртуальных членах см. в статье Полиморфизм. For more information about virtual members, see Polymorphism.

Сводка по интерфейсам Interfaces summary

Интерфейс имеет следующие свойства. An interface has the following properties:

  • Интерфейс подобен абстрактному базовому классу, имеющему только абстрактные члены. An interface is like an abstract base class with only abstract members. Любой класс (или структура), реализующий интерфейс, должен реализовывать все его члены. Any class or struct that implements the interface must implement all its members.
  • Невозможно создать экземпляр интерфейса напрямую. An interface can’t be instantiated directly. Его члены реализуются любым классом (или структурой), реализующим интерфейс. Its members are implemented by any class or struct that implements the interface.
  • Интерфейсы могут содержать события, индексаторы, методы и свойства. Interfaces can contain events, indexers, methods, and properties.
  • Интерфейсы не содержат реализацию методов. Interfaces contain no implementation of methods.
  • Класс или структура может реализовывать несколько интерфейсов. A class or struct can implement multiple interfaces. Класс может наследовать базовому классу и также реализовывать один или несколько интерфейсов. A class can inherit a base class and also implement one or more interfaces.

Содержание раздела In this section

Явная реализация интерфейса Explicit Interface Implementation
В этом разделе объясняется, как создать член класса, который относится к интерфейсу. Explains how to create a class member that’s specific to an interface.

Практическое руководство. Явная реализация элементов интерфейса How to: Explicitly Implement Interface Members
В этом разделе содержится пример явной реализации членов интерфейсов. Provides an example of how to explicitly implement members of interfaces.

Практическое руководство. Явная реализация элементов двух интерфейсов How to: Explicitly Implement Members of Two Interfaces
В этом разделе содержится пример явной реализации членов интерфейсов с помощью наследования. Provides an example of how to explicitly implement members of interfaces with inheritance.

Интерфейсы

Определение интерфейсов

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

Определение интерфейса

Для определения интерфейса используется ключевое слово interface . Как правило, названия интерфейсов в C# начинаются с заглавной буквы I , например, IComparable, IEnumerable (так называемая венгерская нотация), однако это не обязательное требование, а больше стиль программирования.

Что может определять интерфейс? В целом интерфейсы могут определять следующие сущности:

Статические поля и константы (начиная с версии C# 8.0)

Однако интерфейсы не могут определять переменные. Например, простейший интерфейс, который определяет все эти компоненты:

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

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

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

Еще один момент в объявлении интерфейса: если его члены — методы и свойства не имеют модификаторов доступа, но фактически по умолчанию доступ public , так как цель интерфейса — определение функционала для реализации его классом. Это касается также и констант и статических переменных, которые в классах и структурах по умолчанию имееют модификатор private. В интерфейсах же они имеют по умолчанию модификатор public. И например, мы могли бы обратиться к константе minSpeed и переменной maxSpeed интерфейса IMovable:

Но также, начиная с версии C# 8.0, мы можем явно указывать модификаторы доступа у компонентов интерфейса:

Начиная с версии C# 8.0 интерфейсы поддерживают реализацию методов и свойств по умолчанию. Это значит, что мы можем определить в интерфейсах полноценные методы и свойства, которые имеют реализацию как в обычных классах и структурах. Например, определим реализацию метода Move по умолчанию:

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

Стоит отметить, что если интерфейс имеет приватные методы и свойства (то есть с модификатором private), то они должны иметь реализацию по умолчанию. То же самое относится к любым статическим методам и свойствам (не обязательно приватным):

Модификаторы доступа интерфейсов

Как и классы, интерфейсы по умолчанию имеют уровень доступа internal , то есть такой интерфейс доступен только в рамках текущего проекта. Но с помощью модификатора public мы можем сделать интерфейс общедоступным:

Стоит отметить, что в Visual Studio есть специальный компонент для добавления нового интерфейса в отдельном файле. Для добавления интерфейса в проект можно нажать правой кнопкой мыши на проект и в появившемся контекстном меню выбрать Add -> New Item. и в диалоговом окне добавления нового компонента выбрать пункт Interface :

Мастер Йода рекомендует:  Коррекция цвета с помощью Apply Image
Добавить комментарий