Программирование на языке высокого уровня
Основные понятия ООП – ОП ООП 
Основные понятия ООП
Пример иерархии и полиморфизма
Если бы был класс для рациональных дробей…
Мир ботов v0.1 alpha
Программируем мир ботов
172.91K
Category: programmingprogramming

Основы объектно-ориентированного программирования

1. Программирование на языке высокого уровня

Богатов Р.Н.
Программирование
на языке высокого уровня
Лекция 11.
Основы объектно-ориентированного программирования
Кафедра АСОИУ ОмГТУ, 2012

2. Основные понятия ООП – ОП ООП 

Основные понятия ООП
– ОП ООП
• Класс — описание устройства и поведения объектов. Класс
можно сравнить с чертежом, согласно которому создаются
объекты.
• Объект — сущность в памяти компьютера, появляющаяся
при создании экземпляра класса. Одновременно может
существовать несколько экземпляров одного класса.

3. Основные понятия ООП

• Инкапсуляция — объединение данных и кода в единый
объект с целью 1) их защиты и 2) сокрытия реализации
объекта.
• Наследование — возможность порождать один класс от
другого 1) с сохранением свойств и методов базового
(родительского) класса и 2) с добавлением, при
необходимости, новых свойств и методов.
• Полиморфизм — изменение реализации метода базового
класса в классах-потомках

4. Пример иерархии и полиморфизма

Студент
public:
подготовиться_к_экзамену()
отпраздновать_конец_сессии()
перекусить()
private:
кинуть_монетку()
Отличник
public:
подготовиться_к_экзамену()
отпраздновать_конец_сессии()
получить_стипендию()
посетить_библиотеку()
private:
помедитировать_над_Фихтенгольцем()
помянуть_Эйнштейна()
Троечник
public:
подготовиться_к_экзамену()
отпраздновать_конец_сессии()
порадоваться_тройке()
private:
звонок_другу()
мне_повезёт()
задействовать_план_Б()

5. Если бы был класс для рациональных дробей…

РацДробь
A, B,
C, D, E;
class
РацДробь
class
РацДробь
A = new {РацДробь();
{
...
Bpublic
= newulong
РацДробь();
Числитель, Знаменатель;
public
public
РацДробь()
{}РацДробь(ulong num, ulong den)
...
{
ulong НОД(ulong
x, ulong y) {...}
A.Числитель
= 1234;
Числитель = num;
РацДробь A = new РацДробь(1234, 5678);
A.Знаменатель =Знаменатель
5678;
= den;
void Сократить()
РацДробь B = new РацДробь(100);
...
}
{
...
ulong t;
public
static РацДробь operator +(РацДробь x, РацДробь y)
// Вычислим
E = (A+B*C)/D;
if (Числитель>Знаменатель)
{
t = НОД(Числитель,
Знаменатель);
E = (A+B*C)/D;
E = B.Умножить(C);
РацДробь t = new РацДробь(
else
label3.Text = Convert.ToString(E);
E = A.Прибавить(E);
x.Числитель*y.Знаменатель
+ y.Числитель*x.Знаменатель,
t = НОД(Знаменатель,
Числитель);
//label3.Text
= E.ToString();
E = E.Разделить(D);
Числитель /= t;x.Знаменатель*y.Знаменатель);
t.Сократить();
Знаменатель /=
t;
return
t;
//
E
=
A.Прибавить(B.Умножить(C)).Разделить(D);
}
}
label3.Text =
public
РацДробь Прибавить(РацДробь x) + "/"
Convert.ToString(E.Числитель)
public override string ToString()
{
+ Convert.ToString(E.Знаменатель);
РацДробь {t = new РацДробь();
t.Числитель =Сократить();
Числитель * x.Знаменатель
string* sЗнаменатель;
= Convert.ToString(Числитель);
+ x.Числитель
t.Знаменательif= (Знаменатель!=1)
Знаменатель * x.Знаменатель;
s += "/" + Convert.ToString(Знаменатель);
t.Сократить();
return
s;
return t;
}
}
...
...
}
}

6. Мир ботов v0.1 alpha

7. Программируем мир ботов

abstract class Bot
{ class Builder: Bot
string sName = "";
{ class
Warrior: Bot
bool
= true;
boolbAlive
bBuilding
= false;
{ public
partial
class Form1 : Form
int
iHealth
= 100;
string
sBuilding;
bAttacking = false;
{intbool
iPower = 50;
Bot
BotToAttack;
List<Bot>
Bots= =new
new List<Bot>();
...
List<string>
Bag
public
Builder()
{ } List<string>();
public
Builder(string
Name, int Health, int Power)...
public
Warrior()
{ } время"
// //
команда
команда
public
Bot()
{ "Прошло
} боту "Использовать"
public
Warrior(string
Name, int Health,
intEventArgs
Power)...
private
void
buStep_Click(object
sender,
e)
private
void
buUtilize_Click(object
sender,
EventArgs
e)
public
Bot(string
Name,
int Health, int
Power)
{...}
public
override
bool
Utilize(string
smth)
{...}
{
{
public
virtual
void
MakeStep()
public
override
void
MakeStep()
publicforeach
override
bool
Utilize(string
b in
Bots)
// i -(Bot
индекс
избранного
ботаsmth) {...}
{{
public override void MakeStep()
public override
void
MakeStep()
{...}
//b.MakeStep();
tbUtilize.Text
- что нужно
Power
=
Power
- 2 * Bag.Count
1; ему дать
if (bBuilding)
{
...Bots[i].Utilize(
// обновить информацию
о ботах
tbUtilize.Text
);
}
{
if (bAttacking)
public
void
Attack(Bot
smb)
} virtual
... //
обновить
информацию
о ботах
public
bool
Utilize(string
smth)
{...}
Power--;
{
{
} if (Power == 0)
...
if (Bag.Contains("ружьё"))
= smb; воина"
// BotToAttack
команда "Добавить
}
bBuilding
= false;
BotToAttack.Health
-= 40;
bAttacking
=
true;
private
void buWarrior_Click(object
sender, EventArgs
e)
// команда
"Строить"
}
} { private void buBuild_Click(object sender,else
EventArgs e)
base.MakeStep();
if пользователем)
(Bag.Contains("нож"))
public
void
Investigate(int
x,
int
y)
{...}
// sBotName - имя бота (случайное или задано
} ... {
BotToAttack.Health
-= 10;
Warrior
= new Warrior(sBotName,
r.Next(101));
... Build(string
//x проверить,
что i-й бот - r.Next(101),
строитель
public
void
smth)
else
}
Bots.Add(x);
Bots[i].Build( tbBuilding.Text );
{
BotToAttack.Health -= 3;
......
// //
обновить
информацию
о ботах
информацию
о ботах
sBuilding
= обновить
smth;
if (!BotToAttack.Alive)
} }
bBuilding = true;
bAttacking = false;
......
}
Power--;
}
...
}
}
base.MakeStep();
}
English     Русский Rules