Similar presentations:
Разработка программ с использованием классов. 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 экземпляру
каждого класса
Показать вызов всех методов для каждого объекта