Разработка программ с использованием классов
1/21

Разработка программ с использованием классов. C#

1. Разработка программ с использованием классов

C#

2. Класс

Это тип данных, определяемый пользователем
Является моделью реального объекта или
процесса
Элементами класса являются данные и
функции, предназначенные для их обработки
Для каждого объекта при создании выделяется
память, в которой хранятся его данные

3. Создание экземпляров класса

class Monster // класс Монстр (игровой персонаж)
{
string name;
// поля класса
int power;
//сила
int health;
//здоровье
public Monster(string name, int power, int health)
// конструктор класса
{
this.name = name;
this.power = power;
this.health = health;
}
}
static void Main()
{
Monster Vasia = new Monster("Вася",120, 100);
}

4. Статические данные класса

В классе могут присутствовать статические
элементы, которые существуют в
единственном экземпляре для всех
объектов класса
Статические данные называют данными
класса, а остальные – данными экземпляра
класса

5. Пример

class Demo // класс
{
public static string Name = "Demo"; // статическое поле
public const double q = 1.66; // константа
double y;
// закрытое поле данных
public Demo(double y)
{
this.y = y;
}
// конструктор класса
}
static void Main()
{
Demo X = new Demo(56.5);
Console.WriteLine(Demo.Name);
Console.WriteLine(Demo.q);
}

6. Элементы класса

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

7. Элементы класса

Свойства определяют характеристики
класса и способы их задания и получения,
то есть методы записи и чтения
Идексаторы задают обращение к скрытому
полю-массив с помощью квадратных
скобок
Операции задают действия с объектами с
помощью знаков операций
Типы – это типы данных, внутренние по
отношению к классу

8. Пример программы

namespace Monster
Пример программы
{
class Monster // базовый класс Монстр
{
string name;
// поля класса
int power;
int health;
public Monster() // конструктор по умолчанию
{
this.name = "NoName";
this.power = 0;
this.health = 0;
}
public Monster(string name) // конструктор класса
{
this.name = name;
this.power = 100;
this.health = 150;
}

9. Пример программы

public Monster(string name, int power, int health)
// конструктор класса
{
this.name = name;
this.power = power;
this.health = health;
}
virtual public void Show() // метод для вывода
информации о монстре на экран
{
Console.Write("\tМонстр: {0}\tСила: {1}\tЗдоровье:
{2}", name, power, health);
}

10. Продолжение программы

public int GetPower()
// метод возвращает значение силы
{
return power;
}
public void SetPower(int S)
// метод устанавливает силу
{
power=S;
}
Продолжение программы

11. Свойство

public int Power
//свойство возвращает,устанавливает значение силы
{
get
{
return power;
}
set
{
if (value >= 0)
power = value;
else
power = 0;
}
}
Свойство

12. Использование свойства

static void Main()
{
Monster M = new Monster("Masha", 100, 200);
if (M.Power<100)
M.Power = 300;
M.Power *= 2;
Console.WriteLine (M.Power);
}
Использование свойства

13. Продолжение программы

public static void Attac(Monster M1, Monster M2)
//метод атаки (сражение между двумя монстрами)
{
if (M1.power>M2.power)
{
M1.power += 10;
M2.health -= 10;
}
else
if (M1.power<M2.power)
{
M2.power += 10;
M1.health -= 10;
}
else
{
M1.power += 5;
M2.power += 5;
}
Продолжение программы
}
} // конец описания класса Monster

14. Продолжение программы

class Demon : Monster // порождённый класс Демон
{
int brain; // демон имеет ум
public Demon():base() // конструктор для Демона
{
this.brain = 2;
}
public Demon(string name, int power, int health,
int brain): base(name, power, health)
{
this.brain = brain;
}
// метод для вывода информации о Демоне
override public void Show()
{
base.Show();
Console.Write("\tУм: {0}", brain);
Продолжение программы
}
}

15. Наследование

На уровне базового класса можно написать
универсальный код, который может работать
также с объектами дочерних классов, что
реализуется с помощью виртуальных методов;
Как виртуальные в классе должны быть
описаны методы, которые выполняют во всей
иерархии одну и ту же функцию, но разными
способами;
Обычные (не виртуальные) методы
переопределять в дочерних классах не
рекомендуется!

16. Начало главной функции

class Program
{
static void Main()
{
const int n = 4;
// количество персонажей игры
Random Rnd = new Random();
Monster[] stado = new Monster[n];
// массив стадо Монстров
Начало главной функции

17. Задаём значения полей персонажей

for (int i = 0; i < n; i++)
{
string My_name; // вводим имена персонажей
Console.WriteLine("Введите имя персонажа:");
My_name = Console.ReadLine();
Console.WriteLine("Монстр или демон? (м/д)");
char k = Convert.ToChar(Console.Read());
if (k=='д' || k=='Д')
stado[i] = new Demon(My_name, Rnd.Next(200),
Rnd.Next(200), Rnd.Next(1,3));
else
stado[i] = new Monster(My_name, Rnd.Next(200),
Rnd.Next(200)); // по умолчанию персонаж монстр
}
Задаём значения полей персонажей

18. Вывод на экран информации о персонажах

for (int i = 0; i < n; i++)
{
stado[i].Show();
Console.WriteLine("\n------------------\n");
}
Console.ReadKey();
}
Вывод на экран информации о персонажах

19. Рекомендации по программированию

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

20. Проверочная работа № 2

I вариант
Базовый класс Круг (поле: Радиус), дочерний
класс Цилиндр (поля: Радиус, Высота)
II вариант
Базовый класс Прямоугольник (поля: Длина,
Ширина), дочерний класс Параллелограмм
(поля: Длина, Ширина, Угол наклона)

21. План работы:

Описать поля базового класса
Описать 2 конструктора базового класса
Описать метод Show() для вывода на экран
значений полей
Описать метод Square() для вычисления площади
фигуры
Аналогично для дочернего класса
В главной функции создать по 1 экземпляру
каждого класса
Показать вызов всех методов для каждого объекта
English     Русский Rules