ЛАБОРАТОРНАЯ РАБОТА 4.
КЛАССЫИ ОБЪЕКТЫ. ИНКАПСУЛЯЦИЯ
Цель лабораторной работы: познакомиться с созданием классов и объектов на языке C#. Изучить основные конструкции, используемые при построении классов и объектов. Разобраться с понятием инкапсуляции.
Теоретические основы
В С элементом программирования является функция, а в С# - является класс.
С теоретической точки зрения:
Класс – это тип, описывающий устройство объектов.
Поля – это переменные, принадлежащие классу.
Методы – это функции (процедуры), принадлежащие классу.
Объект – это экземпляр класса, сущность в адресном пространстве компьютера.
Можно сказать, что класс является шаблоном для объекта, описывающим его структуру и поведение. Поля класса определяют структуру объекта, методы класса – поведение объекта.
С точки зрения практической реализации (в самом тексте программы) класс является типом данных, а объект – переменной этого типа.
Объявление класса состоит из двух частей: объявление заголовка класса и объявление тела класса. Заголовок класса состоит из модификатора доступа, ключевого слова class и имени самого класса. Тело класса – есть конструкция, заключенная в фигурные скобки и содержащая объявление полей и методов, принадлежащих классу.
Пример объявления класса:
public class MyClass { int a; }
Объявление объекта (создание объекта как экземпляра класса) состоит из двух частей: создание переменной-ссылки на область памяти, в которой будет располагаться объект, выделение памяти для объекта и заполнение этой памяти начальными значениями, иначе говоря инициализация данной переменной-ссылки. Объявление переменной-ссылки, а иными словами объекта, подчиняется общему правилу объявления переменных в C#. Переменные могут объявляться в любом месте в теле методов, за исключением тел условных операторов. Переменная, объявленная вне тела метода, но внутри тела класса, становится полем. Синтаксис объявления переменных имеет вид:
<имя_типа><имя_переменной>.
Пример объявления целочисленной переменной:
int a;
Пример объявления переменной-объекта класса MyClass:
MyClass MyObj;
При объявлении переменная может быть сразу инициализирована (ей может быть присвоено какое-либо значение).
Пример инициализации переменной при объявлении:
int a=0;
Выделение памяти осуществляет оператор new, а задачу заполнения памяти начальными значениями решает специальный метод объекта, называемый конструктором. Конструктор – метода объекта, объявленный следующим образом: для этого метода всегда используется модификатор доступа public, нет типа возвращаемого значения (нет даже void), имя метода совпадает с именем класса. Однако компилятор С# не требует обязательного определения конструктора для класса. Если конструктор не объявлен, компилятор вызовет так называемый конструктор по умолчанию, который создаст сам.
Таким образом, создание объекта класса MyClass будет иметь вид:
MyClass MyObj=new MyClass();
Классы (и объекты) являются прямым воплощением такой идеи объектно-ориентированного программирования как инкапсуляция данных и кода.
Инкапсуляция – это механизм объединения данных и кода, манипулирующего этими данными, а также защиты того и другого от внешнего вмешательства, неправильного использования или от несанкционированного доступа. Объект – это то, что поддерживает инкапсуляцию (объединяет в себе данные и код, работающий с ними). Для закрытия данных внутри объекта используются модификаторы доступа, в частности модификатор private, который используется по умолчанию, если не употреблен другой. Данные или методы, объявленные с этим модификатором будут недоступны вне класса (объекта), то есть к ним можно будет обратиться через открытые (объявленные с модификатором public) методы или свойства класса. Свойства класса – нечто среднее между полем и методом, представляет собой конструкцию вида:
<Модификатор доступа> <Тип свойства> <Имя свойства>
{
get{return <значение>}
set{<поле>=value}
}
Обычно свойства связываются с закрытыми полями класса и помогают осуществить доступ к этим полям из внешних (относительно класса) частей программы. Свойства вместе с модификаторами доступа реализуют механизм защиты данных от несанкционированного доступа. Как мы видим, свойство имеет заголовок и тело. В заголовке указывается модификатор доступа (обычно public), тип возвращаемого свойством значения и имя свойства. В теле объявлено два метода get и set. Больше ничего в теле свойства объявлять нельзя. Метод get имеет ключевое слово return и возвращает какое-либо значение (обычно значение какого-либо поля, хотя не обязательно). Метод set имеет ключевое слово value и присваивает (устанавливает) это значение полю объекта.
Пример объявление свойства в классе MyClass:
public class MyClass
{
int a; //поле
public int A// свойство
{
get { return a;}
set { a=value;}
}
}
Пример использование описанного свойства в программе:
MyClass MyObj=new MyClass();
MyObj.A=6; // полю a объекта MyObj присвоится значение 6.
int b=MyObj.A; // переменной b присвоится значение поля a объекта MyObj.
Так как программа на языке C# может иметь множество классов со множеством методов, то необходимо каким-то образом определять точку, откуда начнется выполнятся программа. Эта точка называется точкой входа и представляет собой метод любого класса, объявленный с заголовком static void Main(string[] args). Точка входа может принадлежать любому классу, из описанных в программе, единственно, что она должна быть в программе одна.
Задание к лабораторной работе
В рамках консольного приложения создать класс А с полями а и b и свойством с. Свойство – значение выражения над полями а и b (выражение и типы полей – см. вариант в таблице 1). Поля инициализировать при объявлении класса. Конструктор оставить по умолчанию. Проследить, чтобы поля а и b напрямую в других классах были недоступны. Создать класс Programm с одним методом – точкой входа. В теле метода создать объект класса А, вывести на экран значение свойства с.
Таблица 1. Варианты заданий к лабораторной работе
Контрольные вопросы
1. Что такое класс?
2. Что такое объект?
3. Как связаны между собой классы и объекты в программе?
4. Что такое инкапсуляция?
5. За счет чего реализуется защита от несанкционированного доступа к данным?
6. Чем отличаются поля от переменных?
7. Что такое свойство?
8. Какие методы есть у свойства?
9. Что делают эти методы?
10. Что такое точка входа?
ЛАБОРАТОРНАЯ РАБОТА 5