Основы объектно-ориентированного программирования. (Лекция 1) презентация

Содержание

Слайд 2

Тенденции разработки ПО

переход от расчетов по формулам к сложным задачам моделирования систем;
увеличение объемов

обрабатываемых данных;
повышение сложности программ, увеличение их длины (до миллионов строк кода!).

Сложность программ превышает возможности одного человека (программиста).

!

В итоге:
коллективная разработка
каждый делает свою часть независимо от других
части программы легко «собрать» вместе

Емельянов В.А.: Объектно-ориентированное программирование

Тенденции разработки ПО переход от расчетов по формулам к сложным задачам моделирования систем;

Слайд 3

Тенденции разработки ПО

Алгоритмическая декомпозиция

Структурное и процедурное программирование:

ПРОБЛЕМА: «Люди воспринимают мир, состоящий из объектов»

(Р. Декарт).

Емельянов В.А.: Объектно-ориентированное программирование

Тенденции разработки ПО Алгоритмическая декомпозиция Структурное и процедурное программирование: ПРОБЛЕМА: «Люди воспринимают мир,

Слайд 4

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

Что понимает компьютер

Как человеку проще записывать действия

Как человеку проще мыслить

Ассемблер (машинный код)

Процедурное

программирование

Парадигмы программирования

Емельянов В.А.: Объектно-ориентированное программирование

Объектно-ориентированное программирование Что понимает компьютер Как человеку проще записывать действия Как человеку проще

Слайд 5

ООП – это парадигма программирования, в которой базовым является понятие объекта.
Объект в

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

Объектно-ориентированное программирование (ООП)

Емельянов В.А.: Объектно-ориентированное программирование

Программа в ходе работы представляет собой набор взаимодействующих объектов

ООП – это парадигма программирования, в которой базовым является понятие объекта. Объект в

Слайд 6

Понятие объекта

Емельянов В.А.: Объектно-ориентированное программирование

Понятие объекта Емельянов В.А.: Объектно-ориентированное программирование

Слайд 7

Понятие класса

Класс (class) описывает признаки состояния и поведение множества схожих объектов.
Класс – это

пользовательский тип данных

Класс

Поля

Методы

состояние (state)

поведение
(behavior)

Емельянов В.А.: Объектно-ориентированное программирование

Понятие класса Класс (class) описывает признаки состояния и поведение множества схожих объектов. Класс

Слайд 8

Создание класса

C#

Емельянов В.А.: Объектно-ориентированное программирование

Класс на С# описывается следующим образом:
[модификаторы] class имя_класса

[ : предки]
{
//тело класса (поля и методы)
}

Создание класса C# Емельянов В.А.: Объектно-ориентированное программирование Класс на С# описывается следующим образом:

Слайд 9

Создание класса

UML

C#

Product
+Price:float
+Amount:float
-pID:Integer
+Calc(Count:integer)

class Product
{
//открытые данные класса
public float Price;
public float

Amount;
//внутренние закрытые данные класса
private int pID;
//метод для расчета общей стоимости
public void Calc(int count)
{
Amount = Price * count;
}
}

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Создание класса UML C# Product +Price:float +Amount:float -pID:Integer +Calc(Count:integer) class Product { //открытые

Слайд 10

Создание объекта класса (экземпляра класса)

Объекты (экземпляры классов) создаются с помощью оператора new.
Для получения

доступа к данным объекта или для вызова методов, используется оператор точка «.»
При создании объекта, копия данных, описываемых классом записывается в память и присваивается переменной ссылочного типа.

имя_Класса имя_ссылки; //объявление ссылки
имя_ссылки = new имя_Класса(); //создание объекта класса
имя_ссылки.имяПоля = 0; //обращение к полю
имя_ссылки.имяМетода(); //вызов метода

C#

Емельянов В.А.: Объектно-ориентированное программирование

Создание объекта класса (экземпляра класса) Объекты (экземпляры классов) создаются с помощью оператора new.

Слайд 11

Создание объекта класса (экземпляра класса)

C#

static void Main(string[] args)
{
int number=0;
Product orderedProduct =

new Product(); /* создание объекта с именем
orderedProduct класса Product*/
orderedProduct.Price = 10; /* обращение к полю Price
и задание цены за единицу товара=10 */
Console.WriteLine("Введите количество товара в шт.: ");
number = Convert.ToInt32(Console.ReadLine());
orderedProduct.Calc(number); /* вызов метода Calc() класса Product и
передача параметра number */
Console.WriteLine("Стоимость товара="+orderedProduct.Amount);
Console.ReadKey();
}

Емельянов В.А.: Объектно-ориентированное программирование

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

Создание объекта класса (экземпляра класса) C# static void Main(string[] args) { int number=0;

Слайд 12

Конструктор

Конструктор – особый вид метода в классе

По смыслу:
Вызывается автоматически при каждом создании объекта. Типовое

применение: установка полей в заданное значение

По синтаксису:
Имя должно совпадать с именем класса
Не имеет возвращаемого объекта
Должен иметь модификатор public

Емельянов В.А.: Объектно-ориентированное программирование

Конструктор Конструктор – особый вид метода в классе По смыслу: Вызывается автоматически при

Слайд 13

Конструктор

Особенности конструктора:
Каждый класс имеет конструктор, принятый по умолчанию
Конструктор по умолчанию не имеет параметров

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

Product orderedProduct = new Product();
//Price= 0 Amount= 0 prID= 0
//Description = пустая строка

C#

Имя класса Имя объекта Вызов конструктора

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6

Конструктор Особенности конструктора: Каждый класс имеет конструктор, принятый по умолчанию Конструктор по умолчанию

Слайд 14

Конструктор


class Product
{
public float Price;
public float Amount;
private int

pID;
// Конструктор
public Product(int ID)
{
pID = ID;
if (pID == 1111)
Price = 10;
else
Price = 20;
}
public void Calc(int count)
{
Amount = Price * count;
}
}

C#

Конструктор с параметром, созданный программистом

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Конструктор class Product { public float Price; public float Amount; private int pID;

Слайд 15

Конструктор

static void Main(string[] args)
{
int number = 0;
Console.WriteLine("Введите артикул товара,

который хотите заказать: ");
int vendorCode = Convert.ToInt32(Console.ReadLine());
Product orderedProduct = new Product(vendorCode);
Console.WriteLine("Введите количество товара в шт.: ");
number = Convert.ToInt32(Console.ReadLine());
orderedProduct.Calc(number);
Console.WriteLine("Стоимость товара = " + orderedProduct.Amount);
Console.ReadKey();
}

C#

Емельянов В.А.: Объектно-ориентированное программирование

22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

Конструктор static void Main(string[] args) { int number = 0; Console.WriteLine("Введите артикул товара,

Слайд 16

Базовые принципы ООП

Емельянов В.А.: Объектно-ориентированное программирование

Базовые принципы ООП Емельянов В.А.: Объектно-ориентированное программирование

Слайд 17

Инкапсуляция – скрытие деталей внутреннего устройства класса от внешних по отношению к нему

объектов или классов.
Поля закрываются от доступа извне
Доступ к закрытым полям выполняется через открытые методы, играющие роль интерфейса (интерфейсные методы)

Инкапсуляция

UML

Емельянов В.А.: Объектно-ориентированное программирование

Инкапсуляция – скрытие деталей внутреннего устройства класса от внешних по отношению к нему

Слайд 18

Инкапсуляция

class Employee
{
//закрытые данные класса
private string FullName;
private int EmpID;

private float CurrPay;
//конструктор
public Employee(string FName, int EmployeeID, float CurrentPay)
{
FullName = FName;
EmpID = EmployeeID;
CurrPay = CurrentPay;
}
//метод для увеличения зарплаты работника
public void GiveBonus(float amount)
{
CurrPay = CurrPay + amount;
}
}

C#

Инкапсуляция

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

скрытые поля

открытые интерфейсные методы

Инкапсуляция class Employee { //закрытые данные класса private string FullName; private int EmpID;

Слайд 19

борьба со сложностью
безопасность внутренних данных
возможность изменять «внутренности», не меняя интерфейс

Зачем нужна инкапсуляция?

Емельянов В.А.:

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

борьба со сложностью безопасность внутренних данных возможность изменять «внутренности», не меняя интерфейс Зачем

Слайд 20

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

Наследование (inheritance) – механизм создания новых классов на основе существующих.
При наследовании дочернему классу

(subclass) передаются поля и методы родительского класса (superclass)
У класса может быть один родитель и любое количество дочерних классов

Емельянов В.А.: Объектно-ориентированное программирование

Наследование Наследование (inheritance) – механизм создания новых классов на основе существующих. При наследовании

Слайд 21

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

Наследование в разработке кода:
Определение нового типа данных путем указания отличий от ранее определенного

типа данных.
Определяемый тип данных будет содержать поля и методы предка (унаследованные поля и методы) и поля и методы, определенные в нем самом.

//Класс предок
class ClassA
{
//Поля
//Методы()
}

C#

//Класс потомок(наследник)
class ClassB : ClassA
{
//Дополнительные поля
//Дополнительные методы()
}

C#

Наследование в проектировании:

UML

Емельянов В.А.: Объектно-ориентированное программирование

Наследование Наследование в разработке кода: Определение нового типа данных путем указания отличий от

Слайд 22

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

Особенности наследования в C# (Java, PHP и др.):
Класс предок может иметь несколько классов

потомков
Класс может иметь не более одного предка (множественное наследование запрещено, в отличие от C++ и UML)

Класс потомок

Класс предок 2

Класс предок 1

Емельянов В.А.: Объектно-ориентированное программирование

Наследование Особенности наследования в C# (Java, PHP и др.): Класс предок может иметь

Слайд 23

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

class Manager : Employee
{
//менеджерам необходимо знать кол-во
//имеющихся у

них опционов на акции
private int numberOfOptions;
public void NumOptions(int count)
{
numberOfOptions = count;
}
}
class SalesPerson : Employee
{
//продавцам надо знать объем продаж
private int numberOfSales;
public void NumSales(int count)
{
numberOfSales = count;
}
}

C#

static void Main(string[] args)
{
//создаем объект продавец с именем Ivan:
SalesPerson Ivan = new SalesPerson();
//Этот член унаследован от
//базового класса Employee:
Ivan.GiveBonus(5000);
//А это уникальный член
//определенный в классе-наследнике:
Ivan.NumSales(80);
}

Объявление классов-наследников
Manager и SalesPerson:

Создание объекта
класса-наследника SalesPerson:

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

Наследование class Manager : Employee { //менеджерам необходимо знать кол-во //имеющихся у них

Слайд 24

Полиморфизм

Полиморфизм (polymorphism) – реализация одной и той же операции по разному

имеется несколько реализаций

алгоритма
выбор реализации осуществляется в зависимости от типа объекта и типа параметров

Механизмы реализации полиморфизма

Перегрузка (overloading)
методов и операций

Переопределение (overriding) методов и операций

Емельянов В.А.: Объектно-ориентированное программирование

Полиморфизм Полиморфизм (polymorphism) – реализация одной и той же операции по разному имеется

Слайд 25

Полиморфизм: переопределение методов (overriding)

Переопределим реакцию объектов производных классов на метод базового класса (метод

увеличения зарплаты сотрудников):


UML

1. Метод базового класса, который будет переопределен должен быть объявлен, как виртуальный (ключевое слово virtual):

class Employee
{
//метод для увеличения зарплаты работника
public virtual void GiveBonus(float amount)
{
CurrPay = CurrPay + amount;
}
}

C#

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6
7
8
9

Полиморфизм: переопределение методов (overriding) Переопределим реакцию объектов производных классов на метод базового класса

Слайд 26

Полиморфизм: переопределение методов (overriding)

2. Переопределяя виртуальный метод в классе-наследнике, необходимо заново определить его,

используя ключевое слово override:

class SalesPerson : Employee
{
public override void GiveBonus(float amount)
{
int SalesBonus = 0; //кратность надбавки
//надбавка зависит от объема продаж
if (numberOfSales >=0 && numberOfSales <=100)
SalesBonus = 2;
else
SalesBonus = 5;
base.GiveBonus(amount * SalesBonus);
}
}

C#

Емельянов В.А.: Объектно-ориентированное программирование

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Полиморфизм: переопределение методов (overriding) 2. Переопределяя виртуальный метод в классе-наследнике, необходимо заново определить

Слайд 27

Полиморфизм: переопределение методов (overriding)

class Manager : Employee
{
public int numOfSalesPerson =

10; //количество продавцов в подчинении
public override void GiveBonus(float amount)
{
base.GiveBonus(amount+amount*numOfSalesPerson*(float)0.1);
}
}

C#

static void Main(string[] args)
{
//Улучшенная система премирования
Manager Nick = new Manager(); //Создаем менеджера Nick
Nick.GiveBonus(5000);
SalesPerson Ivan = new SalesPerson(); //Создаем продавца Ivan
Ivan.GiveBonus(1000);
}

C#

Вызов переопределенных методов:

Переопределение метода GiveBonus() класса Manager:

Емельянов В.А.: Объектно-ориентированное программирование

25
26
27
28
29
30
31
32
33

34
35
36
37
38
39
40
41
42

Полиморфизм: переопределение методов (overriding) class Manager : Employee { public int numOfSalesPerson =

Слайд 28

Полиморфизм: перегрузка методов (overloading)

В C# допускается совместное использование одного и того же имени

двумя или более методами одного и того же класса, при условии, что их параметры объявляются по-разному. В этом случае говорят, что методы перегружаются, а сам процесс называется перегрузкой методов.

Условия перегрузки методов:
разный тип передаваемых параметров
разное количество передаваемых параметров
комбинация первых двух случаев

Емельянов В.А.: Объектно-ориентированное программирование

Полиморфизм: перегрузка методов (overloading) В C# допускается совместное использование одного и того же

Слайд 29

Полиморфизм: перегрузка методов (overloading)

class OverloadMethods
{
public int methodSum(int param1, int param2)

{
return param1 + param2;
}
public int methodSum(int param1, int param2, int param3)
{
return param1 + param2 + param3;
}
public double methodSum(double param1, double param2)
{
return param1 + param2;
}
}

C#

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Полиморфизм: перегрузка методов (overloading) class OverloadMethods { public int methodSum(int param1, int param2)

Слайд 30

Полиморфизм: перегрузка методов (overloading)

class Employee
{
//закрытые данные класса
private string FullName;

private int EmpID;
private float CurrPay;
//метод для увеличения зарплаты работника
public void GiveBonus(float amount)
{
CurrPay = CurrPay + amount;
}
//метод увеличения зарплаты работника от объема продаж
public void GiveBonus(float amount, int sales)
{
CurrPay = CurrPay + amount*sales;
}
}

C#

Перегруженные методы

Емельянов В.А.: Объектно-ориентированное программирование

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Полиморфизм: перегрузка методов (overloading) class Employee { //закрытые данные класса private string FullName;

Имя файла: Основы-объектно-ориентированного-программирования.-(Лекция-1).pptx
Количество просмотров: 60
Количество скачиваний: 0