- •1 Концепция структурного программирования. Причины появления концепции. Модульность и функции. Ограничения на логические конструкции. Использование оператора goto.
- •Теорема о структурном программировании (Теорема Бёма — Якопини)
- •3 Платформа .Net Framework. Многоязыковое программирование. Кроссплатформенность по. Web-ориентированные приложения.
- •Преимущества технологии динамической компиляции
- •5 Построение приложения Windows в интегрированной среде программирования
- •6 Основные типы данных
- •7 Символы и строки. Символы, строки и массивы строк. Операции над строками
- •8 Структура программы на языке c#. Понятие пространства имен. Иерархия пространств имен. Видимость имен.
- •9 Операторы. Основные языка с#. Арифметические и логические операторы. Бинарные и унарные операторы. Составные операторы. Понятие перегрузки операторов.
- •10 Выражения. Приоритет и ассоциативность операторов. Порядок вычисления выражения.
- •11 Преобразования типов. Иерархия численных типов. Явное и неявное преобразование типов. Возможные ошибки.
- •12 Тема: Модификаторы доступа языка c#. Необходимые знания: Назначение и функции модификаторов private, public, protected, internal, protected internal, private protected.
- •13 Выбор вариантов.
- •If (Условие)
- •14 Циклы.
- •15 Классы памяти
- •16 Функции в языке с#
- •17 Массивы. Создание и инициализация. Ссылки на массив. Двухмерные и многомерные массивы. Инициализация массивов. Невыровненные массивы.
- •18 Понятие класса. Определение класса и экземпляр класса. Данные и методы. Ключевое слово partial.
- •19 Создание объекта класса.
- •20 Деструкторы и «сборка мусора». Оператор «new». Резервирование и освобождение памяти. Деструкторы и «сборка мусора».
- •21 Полиморфизм и перегрузка операторов. Перегрузка унарных и бинарных операторов. Семантика перегрузки операторов в с#.
- •Понятие полиморфизма и шаблоны. Назначение и преимущества использования шаблонов. Параметры универсального типа.
- •23 Свойства c# (Понятие инкапсуляции и свойства в c#. Использование ключевых слов «get» и «set». Преимущества использования свойств.)
- •24 Механизм исключений (Назначение исключений. Основные категории исключений. Ключевые слова try, catch и finally, throw.)
- •25 Наследование в c#. Понятие наследования в c#. Механизм наследования. Базовый и производный классы. Наследование и модификаторы доступа.
23 Свойства c# (Понятие инкапсуляции и свойства в c#. Использование ключевых слов «get» и «set». Преимущества использования свойств.)
Инкапсуляция – свойство системы, позволяющее объединить данные и методы, работающие с ними в классе.
Объект и класс (набор программ изначально задумывался как одно целое) «синонимы».
При этом инкапсуляция означает, что класс должен защищать целостность данных, которые он инкапсулирует.
Инкапсуляция подразумевает сокрытие внутренней структуры данных и реализации методов объекта от остальной программы. При этом другим объектам доступен только интерфейс объекта, через который осуществляется все взаимодействие с ним.
Т. о. суть инкапсуляции - в быстрой и безопасной организации иерархической управляемости через сокрытие собственно реализации (чтобы было достаточно простой команды «что делать», без одновременного уточнения как именно делать).
Цель инкапсуляции – уйти от зависимости внешнего интерфейса класса (то, что могут использовать другие классы) от реализации. Чтобы малейшее изменение в классе не влекло за собой изменение внешнего поведения класса.
Существует 4 вида модификаторов доступа: public, protected, private и default.
Public – уровень предполагает доступ к компоненту с этим модификатором из экземпляра любого класса и любого пакета.
Protected – уровень предполагает доступ к компоненту с этим модификатором из экземпляров родного класса и классов-потомков, независимо от того, в каком пакете они находятся.
Default – уровень предполагает доступ к компоненту с этим модификатором из экземпляров любых классов, находящихся в одном пакете с этим классом.
Private – уровень предполагает доступ к компоненту с этим модификатором только из этого класса.
Свойство – это специальное поле класса, содержащее программный код доступа к внутренним переменным (полям) класса или вычисления некоторого значения. Свойства обеспечивают удобный и рациональный путь доступа к внутренней переменной в классе.
Общая форма объявления свойства в классе:
type PropName {
get {
// код для чтения внутреннего поля (переменной)
// ...
}
set {
// код для записи значения во внутреннее поле (переменную)
// ...
}
}
где
type – тип данных возвращаемый свойством;
PropName – имя свойства. По этому имени идет обращение к свойству;
get – аксессор, который используется для чтения значения из внутреннего поля класса;
set – аксессор, используемый для записи значения во внутреннее поле класса. Аксессор set получает неявный параметр value, содержащий значение, которое присваивается свойству.
Использование свойств в классах дает следующие преимущества:
обеспечивается более рациональный и естественной доступ к внутренним переменным класса;
в коде аксессоров можно реализовывать разного рода проверки на допустимость значений внутренних переменных класса;
гибкость в правах доступа к внутренней переменной: отсутствие аксесора set позволяет реализовать доступ «только для чтения» для внутренних данных класса. Это, в свою очередь, делает невозможным случайное изменение этих данных.
Главное преимущество свойства заключается в том, что его имя может быть использовано в выражениях и операторах присваивания аналогично имени обычной переменной, но в действительности при обращении к свойству по имени автоматически вызываются его аксессоры get и set.
Get – что-то берем
Set – что-то кладем
Class X
{
Public int x; // Определение класса - должны определить переменную доступную
другим классам
…
}
X1 = new X(); // Экземпляр класса
int y;
y = X1*X или X1*X = 15 // В переменную “y“ записали значение X
Залезаем в class X и можем туда что-то записать
Придумали get и set «дубляж» действия присваивания
class A
{
int x; // Переменная private по умолчанию
public int X // Метод, обеспечивающий доступ к х
{
get {return x; } // выдача наружу
set {x = value; } // присваивание величины
}
}
Внутренняя переменная – строчная буква
Внешняя переменная – заглавная буква
Программа, использующая А
A1 = new A(); // создание экземпляра класса А
A1*X = 15 // вызов оператора set из Х и через нее попадем к внутренней переменной «х»
int y = A1*X // вызов оператора get для чтения «х»
Создали get и set для обращения к внутренним переменным.
Переменная year ϵ [1;6] по условию
class student
{
int year;
.
.
.
public int Year;
{
get {return year;}
set {
if (value < 1) year = 1; // присваиваем ближайший. Нарушение области доп.знач
else if (value > 6) year = 6; // Нарушение области доп.знач.
else year = value; }
}
Во внешней программе использование будет выглядеть:
Student St1 = new Student ()
St1.Year = 0; // Вызов set, проверка value и запись правильного значения
int a = St1.Year; // Вызов get