Технологии и методы программирования. Ответить на вопросы. Екатеринбург 2021 г. Язык C# Вопросы для контроля понимания темы Какие ключевые отличия C# от других языков
Скачать 74.2 Kb.
|
ПРАКТИЧЕСКИЕ ЗАДАЧИ по дисциплине «Технологии и методы программирования»
Екатеринбург 2021 г. Язык C#Вопросы для контроля понимания темы:Какие ключевые отличия C# от других языков? C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Delphi, Modula и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (в отличие от Haskell). Какие ближайшие “родственники” у C# и чем он от них отличается? C ++ компилируется со специальными программами компиляции в машинный код, а C # превращается в собственный код с помощью CLR (среда CLR). В C # управление памятью намного проще, чем в C ++. C # предлагает автоматическую сборку мусора, которая управляет выделением памяти. Например, когда вы определяете объекты, среда CLR выделяет для объекта память из кучи. Сборка мусора в C # означает, что C # автоматически освобождает дополнительное пространство из неиспользуемых объектов. C ++ не предлагает такой возможности, и вам нужно выполнять всё управление распределением памяти вручную. C ++ допускает множественное наследование, а C # — нет. Концепция множественного наследования означает, что класс может наследовать от нескольких классов. В некоторых случаях множественное наследование может сбивать с толку и быть слишком сложным. Кроме того, количество вариантов использования также ограничено (когда множественное наследование действительно полезно). Поэтому, чтобы избежать двусмысленности, создатели C # решили её предотвратить. При сравнении скорости C # и C ++ победителем оказывается C ++. Следовательно, для программ, требующих высокой производительности, лучше выбирать C ++. Однако есть способы оптимизации кода C #, чтобы сделать его скорость похожей на C ++. Несмотря на то, что C # работает во всех популярных операционных системах, он является наиболее популярным в среде Windows. C ++ не имеет предпочтительной или более популярной операционной системы. C# – язык компилируемого типа, интерпретируемого или какого-то ещё? Компилируемый Какие элементы включает парадигма объектно-ориентированное программирование (ООП)? Чаще всего выделяют следующие необходимые и достаточные элементы ООП: инкапсуляция; наследование; полиморфизм. Что такое .NET-машина, CIL (Ранее MSIL), JIT-компилятор? .NET Framework — программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), которая подходит для различных языков программирования. Функциональные возможности CLR доступны в любых языках программирования, использующих эту среду. В настоящее время .NET Framework развивается в виде .NET. Common Intermediate Language (сокращённо CIL) — «высокоуровневый ассемблер» виртуальной машины .NET. Промежуточный язык, разработанный фирмой Microsoft для платформы .NET Framework. JIT-компилятор CIL является частью CLR (англ. common language runtime) — общей среды выполнения программ, написанных на языках .NET. Ранее язык назывался «Microsoft Intermediate Language (MSIL)», однако был переименован для создания стандарта «ECMA-335». JIT-компиляция (англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция (англ. dynamic translation) — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом[1] (сравнимая с компилируемыми языками) за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Технология JIT базируется на двух более ранних идеях, касающихся среды выполнения: компиляции байт-кода и динамической компиляции. Какие есть версии C#? Текущей версией языка является версия C# 10.0, которая вышла 8 ноября 2021 года вместе с релизом. Основные конструкции языкаВопросы для контроля понимания темы:Какие есть встроенные типы данных? Встроенные типы делятся на три основные категории: целые, с плавающей запятой и void. Что такое преобразование типов (явное и неявное)? Неявное преобразование происходит, когда компилятор ожидает значение одного типа, но получает значение другого типа. Явное преобразование происходит, когда программист использует оператор явного преобразования для конвертации значения из одного типа данных в другой. Что такое неявная типизация? Неявная типизация не требует явного объявления типа для используемых переменных. Этот вид типизации обычно связывают с динамической типизацией, для которой типы данных ассоциируются с конкретными значениями, а переменной можно присвоить значение любого типа. Какие операторы используются для ветвления, циклов? Для выбора одной из нескольких возможностей в языке C# имеются две конструкции – if и switch. Первую из них обычно называют альтернативным выбором, вторую - разбором случаев. Операторы цикла: for, while, foreach. Что такое методы? Метод в C# — это блок кода, содержащий ряд инструкций. Программа выполняет инструкции путем вызова метода и указания аргументов. Что такое область видимости? Область видимости, или контекст переменной — это часть кода, в пределах которого доступна данная переменная. Что такое константы? Константы в C# — это литеральные значения, которые известны во время компиляции и не изменяются после компиляции программы. Что такое перечисления? Зачем они нужны? Перечисления C# — enum C# — это набор именованных констант, позволяющих сделать исходный код программы более удобочитаемым. Какие бывают массивы в C#? В C# массивы могут быть как одномерными, так и многомерными. Массивы служат самым разным целям, поскольку они предоставляют удобные средства для объединения связанных вместе переменных. Массивами в C# можно пользоваться практически так же, как и в других языках программирования. С какого числа начинают нумероваться элементы массива? 0 Что такое структуры? Зачем они нужны? Структуры отличаются от классов тем, как они сохраняются в памяти и как к ним осуществляется доступ (для начала – краткая формула «классы — это ссылочные типы, размещаемые в куче, структуры — типы значений, размещаемые в стеке»). Эта формула не совсем точная, пояснения см. позже. Структуры отличаются от классов некоторыми свойствами (например, структуры не поддерживают наследование). Из соображений производительности следует использовать структуры для небольших типов данных. Однако в отношении синтаксиса структуры очень похожи на классы. ВопросНа второй операции Visual Studio будет выдавать ошибку. Почему? И как это исправить? int a = 1; int b = Math.Sin(a); Решение: int a = 1; int b = (int)Math.Sin(a); Работа с C# в MS Visual StudioВопросы для контроля понимания темы:Что такое проект и решение? Проект — это совокупность кодовых файлов, которые могут быть скомпилированы в сборку: программу или библиотеку. Чем запуск программы по F5 отличается от Ctrl+F5? Выполнение ctrl + F5 приведет к запуску приложения без отладчика Что такое рефакторинг и как им воспользоваться? Под рефакторингом понимается процесс переделки кода для повышения удобочитаемости и производительности приложений, а также обеспечения безопасности типов и приведения кода к такому виду, в котором он лучше соответствует рекомендуемым приемам объектно-ориентированного программирования. Как запустить отладку программы и зачем это нужно? Чтобы запустить отладчик, нажмите клавишу F5 или кнопку Целевой объект отладки на стандартной панели инструментов, или же нажмите кнопку Начать отладку на панели инструментов "Отладка" или выберите Отладка> Начать отладку в строке меню. КлассыВопросы для контроля понимания темы:Дайте определение класса. Класс представляет собой шаблон, по которому определяется форма объекта. В нем указываются данные и код, который будет оперировать этими данными. Какие члены класса могут быть? Специальные функции элементов. Общие сведения о функциях элементов. Элементы данных, включая встроенные типы и другие определяемые пользователем типы. Операторы Вложенные объявления классов Объединения Перечисления Битовые поля Друзья Псевдонимы и определения типов Чем отличается класс от экземпляра класса? Класс - некая абстракция, логическая структура, описывающая поведение и характеристики. Например, машина. Она может ехать, сигналить и т.п. Объект - конкретный экземпляр класса. Например, конкретная ваша машина. Экземпляр класса - это одно и тоже, что и объект класса. Что такое инкапсуляция? Инкапсуляция — в информатике размещение в одном компоненте данных и методов, которые с ними работают. В реализации большинства языков программирования (C++, C#, Java и другие), обеспечивает механизм сокрытия, позволяющий разграничивать доступ к различным компонентам программы. Зачем нужен атрибут static? Модификатор static используется для объявления статического члена, принадлежащего собственно типу, а не конкретному объекту. Модификатор static можно использовать для объявления классов static Что такое методы расширения? Метод расширения в программировании — метод, добавляемый к существующему классу в месте, отличном от модуля объявления класса. Что такое наследование? Зачем нужно наследование? Как атрибут доступа “private” проявляется при наследовании? Наследование является одним из трех основополагающих принципов объектно-ориентированного программирования, поскольку оно допускает создание иерархических классификаций. Благодаря наследованию можно создать общий класс, в котором определяются характерные особенности, присущие множеству связанных элементов. От этого класса могут затем наследовать другие, более конкретные классы, добавляя в него свои индивидуальные особенности. В языке C# класс, который наследуется, называется базовым, а класс, который наследует, — производным. Следовательно, производный класс представляет собой специализированный вариант базового класса. Он наследует все переменные, методы, свойства и индексаторы, определяемые в базовом классе, добавляя к ним свои собственные элементы. Создание приложений с Windows-интерфейсомВопросы для контроля понимания темы:Как начать создание проекта для оконного приложения в MS Visual Studio? В Visual Studio в меню Файл выберите пункты Создать > Проект, чтобы открыть диалоговое окно Новый проект. В диалоговом окне Новый проект выберите пункт Установленные > Visual C++ если он еще не выбран, а затем выберите шаблон Пустой проект. В поле Имя введите HelloWorld. Нажмите кнопку ОК, чтобы создать проект. Какие вы знаете свойства элементов управления? Как открыть окно свойств? Окно Свойства можно открыть из меню Вид. Кроме того, его можно открыть, нажав клавишу F4 или введя слово Свойства в поле поиска. Как открыть диалоговое окно? В представление ресурсов щелкните правой кнопкой мыши RC -файл и выберите «Добавить ресурс». В диалоговом окне Добавление ресурса в списке тип ресурса выберите диалоговое окно , а затем нажмите кнопку создать. Если + рядом с типом ресурса диалогового окна отображается знак «плюс» (), это означает, что доступны шаблоны диалоговых окон. Щелкните знак «плюс», чтобы развернуть список шаблонов, выберите шаблон и нажмите кнопку создать. В редакторе диалоговых окон откроется диалоговое окно создать. Методы и параметрыВопросы для контроля понимания темы:Чем отличаются переменные ссылочного типа и типы значений? Какие типы данных в C# соответствуют ссылочным типам, а какие – типам значений? На что это влияет? Переменные, основанные на типах значений, содержат непосредственно значения. При присвоении переменной одного типа значений другому создается копия присваиваемого значения.В этом заключается отличие от переменных ссылочного типа, при присвоении которых копируются ссылки на объекты, но не сами объекты. Все типы значений являются неявными производными от System.ValueType. В отличие от ссылочных типов, новый производный тип из типа значения создать нельзя.Однако, как и в ссылочных типах, структуры могут реализовывать интерфейсы. В отличие от ссылочных типов тип значения не может содержать значение null.Однако благодаря типам, допускающим значение null, все же можно присваивать типам значений значение null. Для каждого типа значений существует неявный конструктор по умолчанию, инициализирующий значение по умолчанию для данного типа. Зачем нужен модификатор параметра Ref? Модификатор ref предназначен для указания того, что параметр метода должен передаваться по ссылке а не по значению. Зачем нужен модификатор параметра Out? Модификатор параметра out используется, если необходимо выполнение двух условий: методу не нужно передавать значение; метод обязательно должен возвращать значение с помощью параметра. Что такое Конструктор? Конструктор — это метод, имя которого совпадает с именем его типа Что такое перегрузка методов? Перегрузка методов — это приём программирования, который позволяет разработчику в одном классе для методов с разными параметрами использовать одно и то же имя. Может ли один перегруженный конструктор вызвать другой? Да Перегрузка операторовВопросы для контроля понимания темы:Что такое и зачем нужна перегрузка операторов? Перегрузка операторов в программировании — один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения операторов, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются. Какие, например, операторы могут быть перегружены? Операторы new new[] delete delete[] могут быть перегружены и могут принимать любое количеств аргументов Индексаторы и свойстваВопросы для контроля понимания темы:Что такое индексаторы? Чем удобно использование индексатора? В объектно-ориентированном программировании индексатор позволяет индексировать экземпляры определенного класса или структуры так же, как массивы. Это форма перегрузки оператора. Может ли быть индексатор без базового массива? Да Что такое свойства? Какие преимущества предоставляет использование свойств? Есть ли недостатки в использовании свойств? Обработка исключительных ситуацийВопросы для контроля понимания темы:Что такое обработка исключительных ситуаций и зачем это нужно? Обработка исключительных ситуаций самой программой заключается в том, что при возникновении исключительной ситуации управление передаётся некоторому заранее определённому обработчику — блоку кода, процедуре, функции, которые выполняют необходимые действия. Какие основные операторы для обработки исключительных ситуаций и зачем нужен каждый из них? Принимая во внимание, что .NET Framework включает большое количество предопределенных классов исключений, возникает вопрос: как их использовать в коде для перехвата ошибочных условий? Для того чтобы справиться с возможными ошибочными ситуациями в коде C#, программа обычно делится на блоки трех разных типов: Блоки try инкапсулируют код, формирующий часть нормальных действий программы, которые потенциально могут столкнуться с серьезными ошибочными ситуациями. Блоки catch инкапсулируют код, который обрабатывает ошибочные ситуации, происходящие в коде блока try. Это также удобное место для протоколирования ошибок. Блоки finally инкапсулируют код, очищающий любые ресурсы или выполняющий другие действия, которые обычно нужно выполнить в конце блоков try или catch. Важно понимать, что этот блок выполняется независимо от того, сгенерированo исключение или нет. |