Объектно-ориентированное программирование(OOP) – это подход, при котором вся программа рассматривается как набор взаимодействующих друг с другом объектов. При этом нам важно знать их характеристики.
Основные задачи ООП — структурировать код, повысить его читабельность и ускорить понимание логики программы. Косвенно выполняются и другие задачи: например, повышается безопасность кода и сокращается его дублирование.
позволяет выделить это общее в один объект (в данном случае более общим будет человек), а водителя — определить как человека, но с дополнительными свойствами и/или поведением. Например, у водителя есть водительские права, а у человека их может не быть.
Полиморфизм – это переопределение поведения. Можно снова рассмотреть «человека» и «водителя», но теперь добавить «пешехода». Человек умеет как-то передвигаться, но как именно, зависит от того, водитель он или пешеход. То есть у пешехода и водителя схожее поведение, но реализованное по-разному: один перемещается ногами, другой – на машине.
- Инкапсуляция – сокрытие поведения объекта внутри него. Объекту «водитель» не нужно знать, что происходит в объекте «машина», чтобы она ехала. Это ключевой принцип ООП.
- Наследование. Есть объекты «человек» и «водитель». У них есть явно что-то общее. Наследование позволяет выделить это общее в один объект (в данном случае более общим будет человек), а водителя — определить как человека, но с дополнительными свойствами и/или поведением. Например, у водителя есть водительские права, а у человека их может не быть.
- прототип — объект-образец, на основе которого «рождаются» другие объекты, полностью копируя его или изменяясь в процессе. При изменении в прототипе в копиях также происходят соответствующие изменения.
- Полиморфизм – это переопределение поведения. Можно снова рассмотреть «человека» и «водителя», но теперь добавить «пешехода». Человек умеет как-то передвигаться, но как именно, зависит от того, водитель он или пешеход. То есть у пешехода и водителя схожее поведение, но реализованное по-разному: один перемещается ногами, другой – на машине.
- Класс – это шаблон, описание ещё не созданного объекта. Класс содержит данные, которые описывают строение объекта и его возможности, методы работы с ним;
using System;
namespace OOPforKids
{
class Progra
- Объект — экземпляр класса. То, что «рождено» по «чертежу», то есть по описанию из класса. В качестве примера объекта и класса можно привести технический чертёж для изготовления детали — это класс. Выточенная же на станке по размерам и указаниям из чертежа деталь – объект.
- Поле– переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях.

примеры кода
namespace OOPforKids
{
public class Person
{
string eesnimi;//поля
int vanus;
int salary;// поля2
string name;
int height;
string status;
int palk;
Sugu sugu;
Emakeel emakeel;
- Конструктор – специальный блок инструкций, вызываемый при создании объекта.
пример кода
public Person() { }//конструктор
public Person(string Eesnimi,Emakeel emakeel,Sugu sugu)
{
eesnimi = Eesnimi;
this.emakeel = emakeel;
this.sugu = sugu;
}
public Emakeel Emakeel
{
get { return emakeel; }
}
public Sugu Sugu
{
get { return sugu; }
}
public string Eesnimi
{
set { if (eesnimi == null) eesnimi = value; }
get { return eesnimi; }
}
Наследование. Класс Manager (пример)
- Наследование – создание нового класса на базе уже имеющегося, или базового класса. Принцип наследования состоит в том, что элементы данных и методы базового класса автоматически становятся элементами данных нового класса. Класс в С# может иметь только одного предка.
- class имя_класса : имя_класса_родителя
Пример основного класса:
class Person
{
string fam; // поле фамилия
int salary; // поле зарплата
int tab; // поле табельный номер
public Person(string Fam, int Tab, int Salary) //конструктор с параметрами
{
fam = Fam;
tab = Tab;
salary = Salary;
}
public Person() { } // конструктор по умолчанию
public string Fam //свойство для поля фамилия
{
set { if (fam == null) fam = value; } //код - установка значения поля фамилия
get { return fam; } //код - чтение значения поля фамилия
}
public int Tab //свойство для поля табельный номер
{
set { tab = value; } //код - установка значения поля табельный номер
get { return (tab); } //код - чтение значения поля табельный номер
}
public int Salary //свойство для поля зарплата
{
get { return salary; } //код - чтение поля зарплата
set { if ((value > 13000) && (value < 17000)) salary = value; } //код - установка с проверкой поля зарплата
}
}
Пример кода Наследника:
class Manager : Person //создаем класс-наследник Manager, для которого базовым является Person
{
string company; // поле название комании
int sale; // поле объем продаж
public Manager() { } // конструктор по умолчанию
// конструктор класса-наследника с параметрами
public Manager(string Fam, int Tab, int Salary, string Company, int Sale)
: base(Fam, Tab, Salary)
{
company = Company;
sale = Sale;
}
public string Company //свойство для поля название компании
{
set { if (company == null) company = value; } //код - установка поля название компании
get { return company; } //код - чтение поля название компании
}
public int Sale //свойство для поля объем продаж
{
set { sale = value; } //код - установка значения поля объем продаж
get { return (sale); } //код - чтение поля объем продаж
}
public double Bonus //свойство для подсчета премии от объема продаж
{
get { return sale * 0.05; }
}
public void Show() // метод вывода значений всех полей
{
Console.WriteLine("Фамилия " + base.Fam);
Console.WriteLine("Табельный номер " + base.Tab);
Console.WriteLine("Зарплата " + base.Salary);
Console.WriteLine("Компания " + company);
Console.WriteLine("Объем продаж " + sale);
Console.WriteLine("Бонус " + Bonus);
double sum = Bonus + base.Salary;
Console.WriteLine("Общая сумма зарплаты " + sum );
}
Полиморфизм – свойство, которое позволяет использовать одно и то же имя функции для решения двух и более схожих, но технически разных задач.
Пример кода
abstract class Person
{
string name; //Фамилия
public void SetName() // Метод запроса фамилии
{ Console.Write("Фамилия :"); name = Console.ReadLine(); }
public void GetName() // Метод вывода фамилии
{ Console.WriteLine(" Господин "+name); }
//реализация следующих методов будет определена в потомках
public abstract void SetData(); // Метод запроса данных
public abstract bool SetStat(); // Метод определения выдающейся личности
}
class Student:Person //производный класс Студент
{ double ball; //средний балл студента
public override void SetData() // Метод запроса данных по студенту
{ Console.WriteLine("Студент:");
base.SetName(); // вызов метода базового класса Person
Console.Write("Средний балл:");
string s;
s = Console.ReadLine();
ball = Convert.ToDouble(s);
public override bool SetStat() // Метод определения выдающегося студента
{ if (ball > 4.8) { base.GetName(); Console.Write("Средний балл=" + ball); return true; } else return false; }
}
class Teach : Person //производный класс Преподаватель
{ int kol; // количество публикаций преподавателя
public override void SetData() // Метод запроса данных по преподавателю
{ Console.WriteLine("Преподаватель");
base.SetName(); // вызов метода базового класса Person
Console.Write("Кол-во публикаций:");
string s;
s = Console.ReadLine();
kol = Convert.ToInt32(s);
}
public override bool SetStat() // Метод определения выдающегося преподавателя
{ if (kol > 10) { base.GetName(); Console.Write("Количество публиаций=" + kol); return true; } else return false; }
}