Вы находитесь на странице: 1из 15

1. Краткая характеристика платформы .NE.

Терминология и основные
определения ООП.
Платформа .Net предоставляет библиотеку классов .Net.
Это набор классов, каждый из которых реализует совокупность функций
свойственных некоторому объекту.
Под ее управлением выполняются программы.
Платформа .Net это прослойка между ОС и приложением.
Библиотека .NET позволяет создавать объекты (экземпляры) классов, а так
же порождать новые классы, используя библиотечные в качестве базовых.
Программа, при объектно-ориентированном подходе выполняется с
помощью объектов.
ООП - это метод программирования, позволяющий рассматривать
концептуальную модель как набор объектов. Объектно–ориентированный
подход в программировании – это средство для создания больших, сложных,
а самое главное, работающих программ. Программа, при
объектноориентированном подходе выполняется с помощью объектов.
Объекты - как в реальной жизни - обладают определенными свойствами. Эти
свойства объектов определяются программистом. Свойства объектов
описываются относительно небольшим по объему кодом, который легко
поддается отладке и тестированию. Для создания и определения свойств
объектов используются структуры и классы.
Классы - это новый тип данных, является расширением типа struct и образует
абстрактный тип данных для ООП. Класс состоит из набора переменных
(данных) и операций (методов или функций-членов класса), работающих с
этими переменными. Объекты - это экземпляры класса или структуры.
В C# структура является ограниченным по своим возможностям классом.
Инкапсуляция - это сокрытие информации о строении или деталях класса.
Класс включает в себя как данные, так и код (функции). Доступ к элементам
класса управляем. Задача программиста, создающего новый тип данных -
класс - скрыть как можно больше информации от пользователя класса.
Наследование - это средство получения новых классов из существующих
классов. Другими словами наследование - это способность класса
наследовать свойства других классов.
Полиморфизм - это свойство кода С# вести себя по разному в зависимости от
ситуации, возникающей в момент выполнения.
Различают несколько видов полиморфизма:
1. Специальный полиморфизм
2. Параметрический полиморфизм
3. Чистый полиморфизм
Каждый вид полиморфизма реализуется с помощью различных механизмов,
которые будут нами рассмотрены в соответствующих разделах.

2. Система типов C#. Типы по значению. Встроенные типы по значению.


Пользовательские типы по значению
все типы делятся на две большие категории. Это деление осуществляется по
способу хранения экземпляров типов в памяти ЭВМ.
Первая категория это ссылочные типы, которые предназначены для хранения
сложных типов данных. Типы по ссылке хранятся в памяти ЭВМ,
называемой кучей. Вторая категория данных – это объекты, хранящиеся в
стеке, и называется типы по значению. Они применяются для хранения
данных фиксированного размера.
Типы по значению, в свою очередь делятся на три типа: 1. Встроенные типы
по значению или их называют еще базовыми типами по значению. 2. Типы
по значению, определяемые пользователем. 3. Перечисления

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


проинициализировать все поля структуры. Для этого, при создании
экземпляра структуры, проще всего использовать оператор new для вызова
конструктора по умолчанию, например: Point myPoint = new Point();
3. Типы по ссылке. Упакованные типы по значению.

При любом обращении к функциональности типа по значению -


автоматически создается его временная копия в области памяти, называемой
кучей. Копия типа по значению в куче - это ссылочный тип, обладающий
полной функциональностью. Преобразование типа по значению,
хранящегося в стеке, в ссылочный тип в куче называется упаковкой. После
использования функциональных возможностей копия уничтожается.
4. Классы.
Классы это абстрактный тип данных, определяемый пользователем
(программистом). Синтаксис объявления класса выглядит следующим
образом:
class имя_типа
{
// члены класса
}
Классы содержат член данные и член функции для работы с этими данными.
Доступ к членам класса управляем. Имеется четыре спецификации доступа:
public – общедоступный (доступ вне класса)
protected – защищенный член, к нему могут обращаться только члены
данного класса и производных от него классов
private – член доступен только членам данного класса (производным классам
он не доступен) internal – член доступен только в пределах данной сборки и
нигде больше.
Каждый член класса, если спецификация доступа отлична от private, должен
быть явно объявлен с модификатором доступа. По умолчанию, то есть, если
спецификация доступа опущена, устанавливается спецификация private

К данным класса относятся:


- поля
- константы
- события
Поле – это любые переменные объявленные в классе, или другими словами –
это обычная член-переменная, содержащая некоторое значение.
class CA {
public int x;
protected float z;
double m;
public char sim;
private decimal sum;
}
Константы – это поле, объявленное с модификатором const, или, другими
словами это поле, значение которого изменить нельзя, например: public const
int x = 25;
События – являются членами класса, позволяющие объекту класса
информировать клиента класса об изменениях (событиях), произошедших
при выполнении кода, например, изменении какого-либо поля.
Член - данные класса, в отличие от членов – данных структуры, при
объявлении класса разрешается инициализировать. Член - данные структуры
при объявлении структуры инициализировать запрещено.
Поля класса можно, с помощью модификатора static, объявлять как
статические.
При обращении к статическому полю используется имя класса, а не имя
объекта этого класса. Попытка обратиться к статическому полю через имя
объекта класса (например: pa.x) приведет к ошибке. Статическое поле класса
хранится в единственном экземпляре для всех объектов класса (оно общее).
5. Конструкторы. Конструктор по умолчанию.

Конструктор по умолчанию
Конструктор, объявленный без аргументов, называется конструктором по
умолчанию.
Если в классе программистом не определен конструктор по умолчанию, то, в
отсутствии других конструкторов, компилятор создает его сам. Конструктор
по умолчанию, созданный компилятором, инициализирует все поля класса
следующим образом - числовым значениям - ноль, булевским переменным -
false, для строк значение пустой ссылки - null.
6. Конструкторы. Статический конструктор.
Для класса можно написать статистический конструктор без параметров
(конструктор по умолчанию).
Статистический конструктор не имеет спецификации доступа, так как он
никогда не вызывается кодом C#, а только самой средой исполнения .NET, и
вызывается он только один единственный раз, еще до создания какого либо
экземпляра класса.
Применяются статистические конструкторы для инициализации статических
полей класса.

7. Конструкторы. Конструкторы с аргументами.


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

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

9. Вызов конструкторов из других конструкторов.


Очень часто разные конструкторы независимо друг от друга содержат один и
тот же код. Может сложиться ситуация, когда код одного конструктора будет
изменен, а соответствующие изменения в тело другого конструктора, по
рассеянности, внесены не будут. Для исключения подобной ситуации
рекомендуется, для выполнения совпадающего кода осуществлять вызов
конструкторов из других конструкторов. Для этого после имени
конструктора указывается, через двоеточие, ключевое слово this со списком
передаваемых параметров.
public CA(int a,int b)
{ x=a; y=b; z=a+b; rd=x+y+z; }
public CA(int a,int b,int c):this(a,b)
{ z=c; rd=x+y+z; }
10. Свойства. Массивы. Индексаторы
Свойства предназначены для облегчения организации доступа к закрытым и
защищенным полям класса. Свойство содержит два метода – аксессоры. Эти
методы - аксессоры называются получатель (get) и установщик (set). Именно
они должны выполнять работу по установке и получению значений полей
класса, по правилам, определенным для объекта, поведение которого
описывается классом:
private int z;
public int y
{ get { return z; } set { z = value; } }
Аксессор get всегда возвращает значение того типа, который указан в
определении свойства. Аксессор set всегда принимает в качестве параметра
переменную value, которая передается ему неявно.
В С# массивы являются объектами, производными от базового класса
System.Array Поскольку массивы – это объекты класса, то их создание
производится точно так же, как и объектов ссылочного типа.
массивы в С# объявляются следующим образом:
int[] mas;
mas = new int[10];
float [, ,] ms = new float[3,2,2];
int[] ch = new int[]{25,30,40,75};
int[] ch = {25,30,40,75};
Инициализация многомерного массива:
int ms[,] = {{5,7,25},{7,4,25,75}};
Обращение к элементам массива осуществляется по имени массива с
указанием индекса (номера) элемента массива:
ms[j,k] = 35;
ms[1,2] = ch[3];
Индексаторы позволяют программе обращаться с объектами так, как будто
они являются массивами.
Индексатор во многом напоминает свойство, но он в отличие от свойства
оперирует с полем, являющимся массивом, и в качестве имени индексатора
используется ключевое слово this (это) с заключенными в квадратные скобки
индексом.
protected int [] mas = new int[10];
public int this[int j] // индексатор для одномерного массива
{
get{ return (mas[j]);}
set{ mas[j] = value;}
}
11. Наследование. Наследование и проблемы доступа.
Наследование – это средство для получения новых классов (типов) из
существующих классов (типов). Класс, от которого осуществляется
наследование, называется базовым классом или классом родителем, а класс
наследник называют производным или порожденным классом.
В C# для классов не поддерживается множественное наследование.
Члены базового класса объявленные со спецификацией private не
наследуются. Остальные члены базового класса становятся членами
производного класса с теми же спецификациями доступа, что и в базовом
классе.
class CB : CA
наследуемый класс не может иметь более открытый спецификатор доступа,
чем его предок.
ецификаторы доступа действуют и в рамках пространства имён (поэтому и
классы в нашем пространстве имён были объявлены со спецификаторами
доступа public). Но в пространстве имён явным образом можно использовать
лишь один спецификатор – спецификатор public, либо не использовать
никаких спецификаторов.
12. Порядок вызовов конструкторов при наследовании. Явное обращение к
конструктору базового класс.
При вызове конструктора производного класса сперва вызывается
конструктор базового.
Если в классах родителях присутствует хотя бы один конструктор с
аргументами, то конструкторы по умолчанию должны быть явно определены
во всех родительских классах, иначе произойдет ошибка на этапе создания
объекта производного класса, т.к. цепочка вызовов конструкторов будет
нарушена.
Нельзя объявлять конструктор по умолчанию со спецификацией private, если
необходимо создавать производные классы при помощи наследования.
Private – конструктор по умолчанию – запрещает наследование.
13. Изолированные классы.
Классы, от которых запрещено наследовать, называются запечатанными или
изолированными классами. Изолировать класс можно с помощью ключевого
слова sealed.
Например:
sealed class CM
{ int x; int y; : }
Попытка наследования: class CA : CM { : }
приведет к ошибке трансляции.
Запрещение наследования обычно применяется для классов,
предназначенных для выполнения ответственных операций, вмешательство в
работу которых не допустимо
14. Сокрытие методов базового класса.
Если в производном классе объявить функцию с точно таким же заголовком,
что и в базовом классе, то говорят, что новый метод сокроет метод базового
класса.
Для метода, скрывающего метод базового класса, необходимо указать
ключевое слово new, которое говорит, что вы сознательно пошли на этот
шаг. Если не сделать этого, то компилятор выдает предупреждение, но
ошибки не будет.
15. Создание приложения с помощью мастера интегрированной рабочей
среды Visual Studio.NET.
Интегрированная рабочая среда Visual Studio.NET поддерживает технологию
быстрой разработки приложения – RAD (Rapid Application Development) .
При создании проекта Windows Application перед нами появится пустая
поверхность окна приложения – форма. В среде визуальной разработки,
которую нам предоставляет Visual Studio.NET, размер, местоположение, цвет
фона, имя заголовка и другие свойства формы можно изменять с помощью
окна свойств – Properties.
16. Создание элементов управления и задание их свойств. Встроенные
функции. Встроенные элементы. Класс System.Math.
Функции:
public static int Max(int val1, int val2)
public static int Min(int val1, int val2)
 public static double Pow(double x, double y);
public static double Round(double d, int value)
public static int Sign(int value) определяет знак
public static double Sin(double a); в радианах
public static double Sqrt(double d);

Класс System.Math Предоставляет константы и статические методы для


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

17. Пространство имен (Namespace & Using). Использование пространств


имен для управления областью действия
платформа .NET Framework использует пространства имен для организации
наименований множества классов. Это выполняется следующим образом.
System.Yes.No.Net.Console.WriteLine("Hello World!");
System — это пространство имен, а Console — класс в нем, WriteLine —
метод класса. Таким образом определены все имена в C#. Пространства имен
могут быть неограниченно вложены друг в друга
Для объявления пространства имен воспользуйтесь ключевым словом
namespace
Пространство имен global является корневым пространством имен, например
global::System всегда будет ссылаться на пространство имен платформы .NET
Framework System. Все пространства имен как бы «вложены» в global,
образуя дерево
Для однозначного обращения к объекту необходимо указать его полное имя.
Для сокращения записи полных имен можно использовать ключевое слово
using.
Ключевое слово namespace используется для объявления области действия.
Возможность создавать области действия в рамках проекта помогает
организовывать код и позволяет создавать глобально уникальные типы.