Принципы построения классов.

Класс – позволяет описать структуру объекта и его поведение. Пример:

class Book

{

//поля, методы

}

Все поля и методы класса должны иметь определенный модификатор доступа. В C# применяются следующие модификаторы доступа:

· public: публичный, общедоступный класс или член класса. Такой член класса доступен из любого места в коде, а также из других программ и сборок.

· private: закрытый класс или член класса. Представляет полную противоположность модификатору public. Такой закрытый класс или член класса доступен только из кода в том же классе или контексте.

· protected: такой член класса доступен из любого места в текущем классе или в производных классах.

· internal: класс и члены класса с подобным модификатором доступны из любого места кода в той же сборке, однако он недоступен для других программ и сборок (как в случае с модификатором public).

· protected internal: совмещает функционал двух модификаторов. Классы и члены класса с таким модификатором доступны из текущей сборки и из производных классов.

Пример

class Book

{

public string name;

public string author;

public int year;

public void Info()

{

Console.WriteLine("Книга '{0}' (автор {1}) была издана в {2} году", name, author, year);

}

}

name, author, year – поля класса

Info() – метод класса

рассмотрим структуру объявления классов.

// объявление классов в С++ class /*имя класса*/ { private: /* список свойств и методов для использования внутри класса */ public: /* список методов доступных другим функциям и объектам программы */ protected: /*список средств, доступных при наследовании*/ };

При объявлении класса, не обязательно объявлять три спецификатора доступа, и не обязательно их объявлять в таком порядке. Но лучше сразу определиться с порядком объявления спецификаторов доступа, и стараться его придерживаться. Разработаем программу, в которой объявим простейший класс, в котором будет объявлена одна функция, печатающая сообщение.

Чтобы создать новый объект, нам надо использовать ключевое слово new. Оператор new создает объект класса и выделяет для него область в памяти.

ИмяКласса ИмяОбъекта = new ИмяКласса();

Пример.

Class Book

{

public string name;

public string author;

public int year;

Public void GetInformation()

{

Console.WriteLine("Книга '{0}' (автор {1}) была издана в {2} году", name, author, year);

}

}

Class Program

{

static void Main(string[] args)

{

Book b1 = new Book();

b1.name = "Война и мир";

b1.author = "Л. Н. Толстой";

b1.year = 1869;

b1.GetInformation();

}

}

В ООП существует три основных принципа построения классов:

Инкапсуляция – возможность скрывать некоторые поля и методы класса, с целью недопущения ввода некорректных данных, либо для вложения какой-нибудь дополнительной логики.

Наследование – это свойство, позволяющее создать новый класс-потомок на основе уже существующего, при этом все характеристики класса родителя присваиваются классу-потомку.

3. Полиморфизм – способность к изменению функционала, унаследованного от базового класса, а также возможность переопределения методов.

Set и Get свойства.

Рассмотрим пример. Создадим класс Person – описание человека. В качестве полей определим такое поле как имя и возраст. Методов пока добавлять не будем.

Class Person

{

public string name;

public int age;

}

Class Program

{

Person p = new Person();

p.name = "Tom";

p.age = Convert.ToInt32(Console.ReadLine());

}

В данном примере оба поля имя и возраст являются общедоступными.

Как правило программисты делятся на тех, кто разрабатывает классы и на тех, кто этими классами активно пользуется. Предположим, разработчик класса создал класс Person , но при вводе значений полей класса возможен некорректный ввод данных. Следуя принципу инкапсуляции, программисты обычно закрывают доступ к основным полям класса, а для того, чтобы другой программист мог все-таки ввести значения этих полей, создают дополнительные общедоступные поля и используют set-свойство этих полей для установки значений и get-свойство для получения значений полей.

В нашем примере это будет выглядеть следующим образом:

Class Person

{

public string name;

Public string Name

{

Get

{

return name;

}

Private set

{

name = value;

}

}

private int age;

Public int Age

{

Set

{

if (value < 18)

{

Console.WriteLine("Возраст должен быть больше 18");

}

Else

{

age = value;

}

}

get { return age; }

}

}

Class Program

{

Person p = new Person("Tom", 24);

}

В нашем случае теперь доступными будут поля Name и Age, а поля name и age скрыты от разработчика, который пользуется данным классом. Но при установке значения свойству Name значения, автоматически будет установлено значение и свойству name, а при установке значения свойству Age сначала будет произведена проверка ввода данных, если проверка пройдена, то тогда полю age будет присвоено значение.

Конструкторы и деструкторы.

Конструктор (от слова construct — создавать) – это специальный метод класса, который предназначен для инициализации элементов класса некоторыми начальными значениями.

В отличии от конструктора, деструктор (от слова destruct — разрушать) — специальный метод класса, который служит для уничтожения элементов класса. Чаще всего его используют тогда, когда в конструкторе,при создании объекта класса, динамически был выделен участок памяти и необходимо эту память очистить, если эти значения уже не нужны для дальнейшей работы программы.

Важно запомнить:

1. конструктор и деструктор, мы всегда объявляем в разделе public;

2. при объявлении конструктора, тип данных возвращаемого значения не указывается, в том числе — void!!!;

3. у деструктора также нет типа данных для возвращаемого значения, к тому же деструктору нельзя передавать никаких параметров;

4. имя класса и конструктора должно быть идентично;

5. имя деструктора идентично имени конструктора, но с приставкой ~ ;

6. В классе допустимо создавать несколько конструкторов, если это необходимо. Имена, согласно пункту 2 нашего списка, будут одинаковыми. Компилятор будет их различать по передаваемым параметрам (как при перегрузке функций). Если мы не передаем в конструктор параметры, он считается конструктором по умолчанию;

7. Обратите внимание на то, что в классе может быть объявлен только один деструктор;

Конструкторы вызываются при создании нового объекта данного класса. Служат в основном для установки начальных значений. Пример

Class Book

{

public string name;

public string author;

public int year;

Public Book()

{ }

Наши рекомендации