Вопросы программная инженерия первый курс. Мое. 5. Числовые типы данных, перечислите. Чем они отличаются. Особенность сравнения чисел с плавающей запятой
Скачать 423.2 Kb.
|
№1.Типы данных. Какие существуют типы данных, какие категории типов данных можно выделить. Логический тип данных, какие значения может принимать? Переменная - именованная область в памяти, куда можно поместить какое-то значение для дальнейших операций. Тип переменной - формат, т.е.инструкция, каким образом размещается информация в памяти. Существуют: целочисленный (int, long), вещественный (double, float), логический (bool), символьный (char), строковой (string). Категории: значащие (стек), ссылочные (куча). №2. Преобразование и приведение типов данных. Приоритет типов данных?Приведение явное: int a = 45; double b = 34.45; a = (int)b; C.Wr(a)=34 (потеря инфы). Неявное: int a = 45; double b = 34.45; b = (int)a; C.Wr(a)=45.00. Приор: byte, short, int, long. (тип с меньшим приоритетом преображается в тип с большим приоритетом). №5. Числовые типы данных, перечислите. Чем они отличаются. Особенность сравнения чисел с плавающей запятой. Системный тип, размер и числа: byte (1b), short(2b), int(4b), long(8b), float(4b),double(8b),decimal(16b). Погрешность. №6 Строка. Операторы работы со строками. Какие методы и свойства есть у строк. Значение строки null? Строка - последовательность символов, тип string. Можно использовать оператор присваивания (=), обращение к определенному символу по индексу (text[]), сложение (+"x"). Методы: вывод с 1-го по x символ: str.Substring(0,5); (на всяк: int.Parse(str);); String.Compare(a, b): если первая строка будет находиться ниже в результатах сортировки(-1)/(1)/(0); num.ToString(); text.Remove(m,i) удаляет m элементов, начиная с i-го элемента. Св-ва: str.Lenght. Строка может иметь зн-ние null, т.к. ссылочный тип, значит значение строки нет. №7.var. Арифметические операции и var. a/b(11/4)=2 (цело), a%b(11%4)=3(остаток). Приоритет: приведение к типу = +-итд. a=b=c <=> a=(b=c). ++a - сразу(пре). var a/2.0(5/2.0)=double. №8.Методы, синтаксис метода, разбиение алгоритма на методы? Метод-блок кода, содержащий ряд инструкций. Обьявляется в классе. Все инструкции выполняются в контексте метода. Синтаксис: static тип данных Name(тип1 n1, тип2 n2). Вызывать метод: var name = Name(x,y). static void -невернем, return (a/b). Private | public - защищенный и открытый методы. К первым могут обращаться ТОЛЬКО объекты данного класса, ко 2ым любые объекты. №10.Цикл. Виды циклов, сравнительный анализ. Операторы перехода? for ([инициализация счетчика]; [условие]; [изменение счетчика]) foreach (тип данных переменная in откуда берем) / foreach (int e in array) - из массива do (что-то) while (условие) - хотя бы 1 раз выполнится // while(условие) {делаем} - сразу проверяет true Операторы: break - если нужно выйти из цикла, не ждя finish; continue - до end, но для пропуска итерации №11. Массив. Виды массивов, отличия (в том числе организация в памяти). Массивы и foreach? Массив - последовательность однородных данных. Шаблон: тип д[] name = new тип д[n]. Индексация array[0]=1. Массивы бывают многомерные, чье кол-во измерений (ранг) больше 1 (двумерные int[,], трехмерные). Существует массив массивов:int[][]array=int[3][, array[0]=new int[2]; ММ отличается от М тем, что к-во эл-ов в строках может быть разным, его можно создать благодаря вложенным М. №12.Массивы. Тип ссылки и тип значения, может ли массив иметь значение null. Передача массива в метод? М можно передавать в кач-ве арг-ов в параметре метода. Поскольку М представляет собой ссылочные типы, метод может изменять значение эл-ов. №13.Сравнение массивов и строк? 1. Строка имеет методы, специфичные только для строк: str.Substring(n,k) - взятые подстроки, вывод эл-ов с n в кол-ве k; str.ToLower()- K->k. 2. Строки неизменяемы: при сложении строк, текущая строка не изменяется, ссылка начинает ввести на новый обьект, т.е. меняется ссылка. №14.StringBuilder. Что это такое, зачем нужен, как использовать, в чем преимущество? SB-класс, изменяемая строка: var name=new SB(*txt*); в пр-ве имен using System.Text. Методы: name.Append("*txt*")-позволяет вложить какое-то значение (добавляют к строке подстроку), name.Insert(n,"*txt*")-вставляет текст с n-го эл-та (старый не меняется); name.Remove(n,k)-удаление, name[n]='char'. Не нужно полностью заменять строки на SB, только в тех случаях, когда много преобразований. При конкатенации большого кол-ва строк, обычный метод "в лоб" требует много памяти в куче и работает медленнее, SB-yes. №15. Специальные символы. Что это такое, как задаются в коде, их использование. Что такое экранирование? Экранирование символов — корректный вывод строки на экран: \' \'' \\ -вывод символов. \r -возврат каретки; \t - гор.табуляция; \v-верт.табуляци; \0 -пустой символ; C.Wr(@ "Гриб")=> Гриб. №16.Файл. Каталог. Какие методы для работы с ними вы знаете. Кодировка файла, управление кодировкой? Файл-именованая область данных на носителе информации. Каталог-обьект в файловой системе, который упрощает организацию файлов. Перевод символов в байты осуществляется с помощью кодировки. Консорциум Юникода - приняла единый станд. кодирования символов(юникод), включающий в себя знаки почти всех письменных языков мира. UTF-8 - распространенный стандарт кодирования символов. (1eng-1b;1rus-2b;1kit-3b). Для работы с файлами предназначена пара классов File и FileInfo. №18. Класс. Объект. Их разница. Что такое метод, поле, свойство класса? Класс- некая сущность, общая инструкция по которой строятся уже обьекты, ссылочный тип. Обьект - экземпляр класса: public class Student, обьект: var students=new Student(). Например, класс студентов - обьект - студент. Еще пример: класс-лист анкета-обьекты-заполненный лист - обьект. Вся функц-сть класса представлена его полями(переменными): public int Age;, методами и св-вами. Свойства позволяют вложить дополнительную логику, которая может быть необходима, например при присвоении переменной класса какое-либо значение: publicтип Age { get {возвращаемое_значение;} set {устанавливаемое_значение;}} №19.Статический класс, статический метод, статическое поле класса? Статический класс - класс, все поля и методы которого являются статическими. Статические поля - грубо говоря общие для всех обьектов класса. Т.е. статические данные постоянные данные, которые равны во всех экземплярах класса. Стат.метод: вызываем из класса, а не из обьекта №20.Наследование. Иерархия наследования. Upcast, downcast. Наследование - когда что-то является частным случае чего-то. Каждый частный случай добавляет какие-то свои характеристики. Чем тщательней отбор, тем больше отличительных свойств. Т.е. каждая следующая сущность наследует признаки предыдущего. Трансп.средст-с двиг внутр.сгораня-автомобиль. Пример: class Car : Transport; car - дочерний от класса transport, transport - род.класс. Upcast - приведение обьекта к базовому типу (род.классу), downcast - к дочернему. (В результате upcast создается ссылка базового класса из ссылки производного класса. После upcast переменная ссылается на тот же самый объект. Сам объект в результате upcast никак не изменяется и не преобразуется. В результате downcast создается ссылка производного класса из ссылки базового класса. Меняется только ссылка, а не обьект.) Downcast требует явного приведения, поскольку данная операция потенциально может вызвать ошибку при выполнении. №21. Интерфейсы. Отличие интерфейсов от классов. Примеры интерфейсов и классов, которые их реализуют? Интерфейс- ссылочный тип, контракт, обязательство для класса содержать определенные методы. Если программист забудет некоторые методы, то программа не скомплируется, потому что контракт нарушен. Интерфейс могут реализовать только динамические классы: class Student : IRules - указывает, что класс должен реализовать этот интерфейс. Классы содержат поля и реализованные методы, а интерфейс только предполагает эти методы. Класс их наследуют и реализует. №22.Полиморфизм. Виртуальные методы. Пример? Полиморфизм - способность работать с разными данными через интерфейс/способность объектов с одним интерфейсом иметь различную реализацию. Допустим у нас есть 2 класса, у обоих есть метод GetSquared() (площадь). Но площадь этих фигур нужно вычислять индивидуально => реализация одного и того же метода различна. Полиморфизм проявляется в виртуальных методах. Виртуальный метод - переопределяемый в производных классов метод. Вызов вирт.метода осуществляется в соотв-вии с фактическим типом обьекта, к которому метод применяется. virtual - спецификатор, позволяющий переопределить реализацию метода в дочерних классах. Если метод в дочернем классе не был переопределен, то при обращении к нему будет вызван метод род.класса. В классе пишем виртуальный метод, тогда в каждом наследнике будет этот самый метод, причем его реализацию можно изменить, добавив слово override: в классе животные public virtual void Say(), потом создаем класс Cat и Dog : Animals. Переопределяем методы: Кот:public override void Say()/С.Wr("Meow") и Пес: public override void Say()/С.Wr("Gaf"). №23. Целостность данных. Зачем нужна, как реализуется. Конструктор. Readonly поля? Целостность данных - это ряд ограничивающих условий, которые показывают что данные, которые хранятся в некотором классе, соответствуют его логике. Данные целые, когда они осмыслены. Откуда берутся условия ЦД: мат.смысла тех или иных понятий (пр:процент удачи),законов. Чтоб не сломать программу. Защитить ЦД: ключ.слово private (доступ к данному полю/методу возможен только внутри данного класса). Конструктор- еще один способ обеспечения ЦД. Это метод, имя которого совпадает с именем его типа. Его сигнатура метода содержит только имя метода и список параметров, у него нет возвращаемого типа: class Person и public int Age {get;(private)св-во можно изменять тольк внутри класса set;} и public Person(int age){Age=age}. В другом классе создаю обьект: Person Cat = new Person(2) и тогда Cat.Age=99 мы не можем сделать. Get - код, который выполняется, когда мы пытаемся получить значение св-ва; set - код, который выполняется, когда мы пытаемся присвоить св-ву значение. Readonly - приват поля, которые доступны только для чтения. Их можно присваивать только при обьявлении или в конструкторе. Их можно изменить только раз, из donly поля инициализируешь 1 раз и его можно будет только считывать(пример угол 90 градусов у прямоугольников). №24 Структура. Отличие от класса. Передача структуры в метод? Наряду с классами структура представляет еще один способ создания собст.типданных в С#. Более того многие примитивные типы(int, double и др) по сути являются структурами. Struct - ключ.слово. Все поля структуры должны быть инициализированы. Отличие от класса: S - тип значение (стек), C-ссыл.тип, (куча), S не может иметь значение null и мы всегда знаем сколько памяти понадобится, не нуждается в создании обьекта от нее. При передачи структуры в метод передается копия исходной структуры. Метод не изменяет ее значение. №25. Boxing, unboxing. Принципиальное отличие от upcast, downcast? Boxing(упаковка)-процесс (upcast), при котором структура перемещается в кучу вместе с ее значениями, т.е. это процесс явного преобразования в ссылочный тип. Unboxing(распаковка)-процесс (downcast), при котором структура из кучи будет перемещена в стек. Но нужно обязательно проверить совместимость типов. Отличие: 1) Когда работаешь классом, то up/down позволяют нам сменить точку зрения на обьект. 2)up|down работает быстрее Box|Unbox, т.к. во втором случае создается целая структура, память забивается. №27. LINQ, что такое, как с ним работать, примеры? LINQ - библиотека для работы с коллекциями, это простой и удобный язык запросов к источнику данных. Позволяет эффективно работать со списками. Работает в пространстве имен System.Linq. Например: фильтрация, нужно найти тех студентов, которые учатся в B группе. Вместо того, чтобы воспользоваться foreach можно кратко: result = students.Where(z => z.Group == "KN-1") или выборка, взять каждого студента и сформировать его фамилию из листа студентов в лист фамилий .Select(z => z.LastName) превратить список в лист .ToList(); Когда мы берем LINQ, то несколько ограничиваем язык/агоритмы, но все из базовых кирпичиков. №28. Что такое делегат, для чего используется? Делегат представляет собой обьект, который может ссылаться на метод. Следовательно, когда создается делегат, то в итоге получается обьект, содержащий ссылку на метод. Более того, метод можно вызвать по этой ссылке. Т.е. делегат позволяет вызывать метод, на который он ссылается: delegate возвращаемый_тип имя (список_параметров). Где возвращаемый тип обозначает тип значения, возвращаемого методами, которые будут вызываться делегатом, список параметров - параметры, необходимые для методов, вызываемых делегатов. Как только будет создан экземпляр делегата, он может вызывать и ссылаться на те методы, возвращаемый тип и параметры которых соответствуют указанным в объявлении делегата. |