Найти в Дзене

Инкапсуляция в программирование на С#. Показываю на Танке.

Яндекс картинки.
Яндекс картинки.

Всем Хай! Сегодня тема не сложная и поэтому быстро разбирается.

Одним из правил или свойств, не знаю как правильно сказать, является «Инкапсуляция». В прошлой статье я написал, что это назначения неких прав для доступа из другого «класса».

Мне известно о трёх таких правах.

  1. public – Из названия понятно, что это «публичное» право. То есть доступ есть из любого «класса».
  2. private – Или «личное» право. Доступ возможен только из того класса, в котором записан этот метод либо поле.
  3. protected – Это некая смесь первых двух прав. Только в этом случае доступ возможен из любого класса, кроме основного «Program», где пишется основной код. Сегодня у нас не получится его рассмотреть в коде. Мы рассмотрим его, когда будем разбирать «наследование».

И так, давайте взглянем на код.

class Program
{
static void Main(string[] args)
{
Tank tank1 = newTank();
int damage = 100;
tank1.Health = 500;
tank1.Armor = 50;
tank1.Damage = 150;
tank1.TakeDamage(damage);
tank1.ShowStat();
}
}
class Tank
{
public int Health;
public int Armor;
public int Damage;
private int _speed = 300;
public void ShowStat()
{
Console.WriteLine("Танк 1" + "\nЖизни - " + Health + "\nБроня - " + Armor + "\nУрон - " + Damage + "\nСкорость - " + _speed);
}
public void TakeDamage(int damage)
{
Health -= damage - Armor;
}
}

Как вы поняли сегодня у нас на разборе Танк. Характеристики у него, естественно, условные.

Для обозначения характеристик танка, мы создаём «class Tank» за пределами основного класса «Program».

Внутри мы прописываем 4 поля нашего класса. Первые 3 поля у нас имеют публичный доступ «public» для того, чтобы можно было задать вручную характеристики Танка из основного класса. А четвёртое поле имеет приватный тип «private». Вот не хочу, чтобы к нему был доступ. Пусть скорость у всех таков будет одна.

public int Health;
public int Armor;
public int Damage;
private int _speed = 300;

Я говорил что поля в классе можно сравнить с переменными. Отличается только правило записи имени в зависимости от типа доступа.

  • Если доступ «public» или «protected», то Имя поля пишем с большой буквы.
  • Если доступ «private», то перед именем ставим нижнее подчёркивание и имя поля начинается с маленькой буквы.

Права доступа мы ставим не только при объявлении поля, но и при объявлении методов. Его, как я говорил, вы можете сравнить с функцией.

Давайте создадим два «публичных» метода.

  • Первый будет отвечать за вывод характеристик нашего танка.
public void ShowStat()
{
Console.WriteLine("Танк 1" + "\nЖизни - " + Health + "\nБроня - " + Armor + "\nУрон - " + Damage + "\nСкорость - " + _speed);
}
  • Второй будет отвечать за урон нашему танку.
public void TakeDamage(int damage)
{
Health -= damage - Armor;
}

Система повреждений у нас будет простая. Жизни танка отнимаем от урона за вычетом брони.

Теперь переходим в основной класс «Program» метода «Main». Здесь мы инициализируем наш новый танк «tank1».

Tank tank1 = new Tank()

И сразу создаём переменную для прописывания урона по танку.

int damage = 100

Теперь пишем имя танка, нажимаем точку и выбираем поля, которые будем заполнять. Если бы поля были приватные, то их не было бы в списке. Собственно мы видим, что поля с выбором скорости в списке у нас нет. Правильно оно ведь у нас приватное.

tank1.Health = 500;
tank1.Armor = 50;
tank1.Damage = 150;
Скриншот полей в С#
Скриншот полей в С#

Точно также через точку мы записываем наши методы повреждения и вывода харкетеристик.

tank1.TakeDamage(damage);
tank1.ShowStat();
Скриншот методов в С#
Скриншот методов в С#

Компилируем код и видим, что всё посчиталось правильно.

Скрмншот работы кода
Скрмншот работы кода

Урон по формуле тоже прошёл такой, какой мы задумали.

Я думаю теперь вам понятно, что инкапсуляция только на слух не понятно. По факту обычные права доступа. Причём не так их и много.

Как вам статья? Понятно? Непонятно? Пишите свои мысли в комментариях. Обязательно подписывайтесь. На следующей недели начнём становиться разработчиком для Яндекса. Ну а я с Вами прощаюсь до послезавтра. Всем пока!

#it #разработкаигр #программированиеснуля #программированиедляначинающих #какстатьпрограммистом #csharp #сишарп