SlideShare una empresa de Scribd logo
1 de 31
д.т.н. Емельянов Виталий Александрович
: v.yemelyanov@gmail.com
1
Getting StartedObject-Oriented
Programming
2
Тенденции разработки ПО
 переход от расчетов по формулам к сложным задачам
моделирования систем;
 увеличение объемов обрабатываемых данных;
 повышение сложности программ, увеличение их длины (до
миллионов строк кода!).
Сложность программ превышает возможности одного
человека (программиста).
!
В итоге:
 коллективная разработка
 каждый делает свою часть независимо от других
 части программы легко «собрать» вместе
Как?
?
Емельянов В.А.: Объектно-ориентированное программирование
3
Тенденции разработки ПО
подзадача 1 подзадача 3
подзадача 2.1 подзадача 2.2 подзадача 2.3
подзадача 2
задача
Алгоритмическая
декомпозиция
Структурное и процедурное программирование:
ПРОБЛЕМА: «Люди воспринимают мир, состоящий из
объектов» (Р. Декарт).
Емельянов В.А.: Объектно-ориентированное программирование
4
Объектно-ориентированное
программирование
Что понимает компьютер
Как человеку проще
записывать действия
Как человеку проще
мыслить
Ассемблер (машинный код)
Процедурное программирование
Парадигмы программирования
Емельянов В.А.: Объектно-ориентированное программирование
5
ООП – это парадигма программирования, в которой базовым
является понятие объекта.
Объект в программе – это абстракция реального объекта
Абстракция – это выделение существенных свойств объекта,
отличающих его от других объектов
Объектно-ориентированное
программирование (ООП)
Емельянов В.А.: Объектно-ориентированное программирование
Программа в ходе работы
представляет собой набор
взаимодействующих объектов
6
behavior
state
Object
Нажать
на газ
Нажать на
тормоз Заправить
топливом
Марка Скорость
Уровень
бензина
Понятие объекта
Емельянов В.А.: Объектно-ориентированное программирование
7
Понятие класса
 Класс (class) описывает признаки состояния и поведение
множества схожих объектов.
 Класс – это пользовательский тип данных
auto1
auto2
auto3
Car
objects class
Класс
Поля Методы
состояние
(state)
поведение
(behavior)
Емельянов В.А.: Объектно-ориентированное программирование
8
Создание класса
C#
Емельянов В.А.: Объектно-ориентированное программирование
Доступность
элементов
Модификатор:
Class
(базовый
класс)
Subclass
(класс-
наследник)
World
public Да Да Да
protected Да Да Нет
private Да Нет Нет
Класс на С# описывается следующим образом:
[модификаторы] class имя_класса [ : предки]
{
//тело класса (поля и методы)
}
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
10
Создание объекта класса
(экземпляра класса)
 Объекты (экземпляры классов) создаются с помощью
оператора new.
 Для получения доступа к данным объекта или для вызова
методов, используется оператор точка «.»
 При создании объекта, копия данных, описываемых классом
записывается в память и присваивается переменной
ссылочного типа.
имя_Класса имя_ссылки; //объявление ссылки
имя_ссылки = new имя_Класса(); //создание объекта класса
имя_ссылки.имяПоля = 0; //обращение к полю
имя_ссылки.имяМетода(); //вызов метода
C#
Емельянов В.А.: Объектно-ориентированное программирование
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
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
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
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
скрытые поля открытые интерфейсные методы
19
 борьба со сложностью
 безопасность внутренних данных
 возможность изменять «внутренности», не меняя
интерфейс
Зачем нужна инкапсуляция?
Емельянов В.А.: Объектно-ориентированное программирование
20
Наследование
Наследование (inheritance) – механизм создания новых
классов на основе существующих.
 При наследовании дочернему классу (subclass)
передаются поля и методы родительского класса
(superclass)
 У класса может быть один родитель и любое количество
дочерних классов
родительский
класс
дочерний
класс
Transport
Car Bicycle
Емельянов В.А.: Объектно-ориентированное программирование
21
Наследование
Наследование в разработке кода:
 Определение нового типа данных путем
указания отличий от ранее определенного
типа данных.
 Определяемый тип данных будет содержать
поля и методы предка (унаследованные поля
и методы) и поля и методы, определенные в
нем самом.
//Класс предок
class ClassA
{
//Поля
//Методы()
}
C#
//Класс потомок(наследник)
class ClassB : ClassA
{
//Дополнительные поля
//Дополнительные методы()
}
C#
Наследование в
проектировании:
UML
Емельянов В.А.: Объектно-ориентированное программирование
22
Наследование
Особенности наследования в C# (Java, PHP и др.):
 Класс предок может иметь несколько классов потомков
 Класс может иметь не более одного предка (множественное
наследование запрещено, в отличие от C++ и UML)
Класс предок Класс потомок 2Класс потомок 1
Класс потомок Класс предок 2Класс предок 1
Емельянов В.А.: Объектно-ориентированное программирование
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
24
Полиморфизм
Полиморфизм (polymorphism) – реализация одной и той же
операции по разному
 имеется несколько реализаций алгоритма
 выбор реализации осуществляется в зависимости от типа
объекта и типа параметров
Механизмы реализации полиморфизма
Перегрузка (overloading)
методов и операций
Переопределение (overriding)
методов и операций
Емельянов В.А.: Объектно-ориентированное программирование
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
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
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
28
Полиморфизм: перегрузка методов
(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
Перегруженные
методы
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
Steve Jobs, 1994,
интервью журналу Rolling Stone:
 «Объекты – они как люди. Они живые вещи, у которых есть разум,
позволяющий им знать, как сделать ту или иную вещь, у них есть память.
Вы взаимодействуете с ними на очень высоком уровне абстракции, словно
с людьми.
 Например, я – ваш объект, занимающийся чисткой ваших вещей. Вы
можете дать мне грязную одежду и послание “доставь мои вещи в
прачечную”. Я знаю, где в Сан-Франциско лучшая прачечная, я говорю по-
английски и у меня есть деньги в кармане. Я выхожу, ловлю такси,
посещаю прачечную и возвращаюсь с вашими вещами и словами: “Вот,
ваша чистая одежда”.
 Вы не знаете, как я это сделал. Не знаете, где эта прачечная или вы
говорите по-французски, а может у вас нет денег, чтобы поймать такси.
Однако, я знал, как все это сделать, а вам – это знать необязательно. Вся
сложность процесса скрыта внутри меня, но наше с вами общение было
простым – в этом вся суть объектов. СЛОЖНОСТИ – ВНУТРИ, НО
ИНТЕРФЕЙС – ДОСТУПЕН КАЖДОМУ.»
Не могли бы вы в нескольких словах объяснить, что же такое
объектно-ориентированное программное обеспечение?
?

Más contenido relacionado

La actualidad más candente

Introduction to GNU Make Programming Language
Introduction to GNU Make Programming LanguageIntroduction to GNU Make Programming Language
Introduction to GNU Make Programming LanguageShih-Hsiang Lin
 
WebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみたWebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみたtoru tom
 
Redmineチケットによるプロジェクト火消し戦略!
Redmineチケットによるプロジェクト火消し戦略!Redmineチケットによるプロジェクト火消し戦略!
Redmineチケットによるプロジェクト火消し戦略!TrinityT _
 
Android open source project build system phi innovations - android summit 2015
Android open source project build system   phi innovations - android summit 2015Android open source project build system   phi innovations - android summit 2015
Android open source project build system phi innovations - android summit 2015Rafael Coutinho
 
전략적 사고 : 2W1H
전략적 사고 : 2W1H전략적 사고 : 2W1H
전략적 사고 : 2W1HJUNHEEKIM27
 
Презентация на тему:"Локальные и глобальные компьютерные сети"
Презентация на тему:"Локальные и глобальные компьютерные сети"Презентация на тему:"Локальные и глобальные компьютерные сети"
Презентация на тему:"Локальные и глобальные компьютерные сети"Lerka_Bo
 
系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書鍾誠 陳鍾誠
 
這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧志龍 陳
 
Windows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたWindows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたy-uti
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?Nikita Popov
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章鍾誠 陳鍾誠
 
Adding Love to an API (or How to Expose C++ in Unity)
Adding Love to an API (or How to Expose C++ in Unity)Adding Love to an API (or How to Expose C++ in Unity)
Adding Love to an API (or How to Expose C++ in Unity)Unity Technologies
 
Python用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみたPython用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみたHirofumi Watanabe
 

La actualidad más candente (17)

Introduction to GNU Make Programming Language
Introduction to GNU Make Programming LanguageIntroduction to GNU Make Programming Language
Introduction to GNU Make Programming Language
 
WebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみたWebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみた
 
Redmineチケットによるプロジェクト火消し戦略!
Redmineチケットによるプロジェクト火消し戦略!Redmineチケットによるプロジェクト火消し戦略!
Redmineチケットによるプロジェクト火消し戦略!
 
Android open source project build system phi innovations - android summit 2015
Android open source project build system   phi innovations - android summit 2015Android open source project build system   phi innovations - android summit 2015
Android open source project build system phi innovations - android summit 2015
 
전략적 사고 : 2W1H
전략적 사고 : 2W1H전략적 사고 : 2W1H
전략적 사고 : 2W1H
 
Презентация на тему:"Локальные и глобальные компьютерные сети"
Презентация на тему:"Локальные и глобальные компьютерные сети"Презентация на тему:"Локальные и глобальные компьютерные сети"
Презентация на тему:"Локальные и глобальные компьютерные сети"
 
系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書
 
這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧這些年,我寫 Angular 時所使用的小技巧
這些年,我寫 Angular 時所使用的小技巧
 
Windows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたWindows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみた
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章
 
Git入門
Git入門Git入門
Git入門
 
Adding Love to an API (or How to Expose C++ in Unity)
Adding Love to an API (or How to Expose C++ in Unity)Adding Love to an API (or How to Expose C++ in Unity)
Adding Love to an API (or How to Expose C++ in Unity)
 
Node.js入門
Node.js入門Node.js入門
Node.js入門
 
Basic of compiler
Basic of compiler Basic of compiler
Basic of compiler
 
from Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Worksfrom Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Works
 
Python用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみたPython用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみた
 

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

Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Alexandr Konfidentsialno
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Alexander Babich
 
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
слайд питон БОН.pptx
слайд  питон  БОН.pptxслайд  питон  БОН.pptx
слайд питон БОН.pptxHSharipov
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Software Engineering Knowledge Matrix
Software Engineering Knowledge MatrixSoftware Engineering Knowledge Matrix
Software Engineering Knowledge MatrixOlena Syrota
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеSergey Nemchinsky
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++Olga Maksimenkova
 

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

лекция №1
лекция №1лекция №1
лекция №1
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010
 
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
слайд питон БОН.pptx
слайд  питон  БОН.pptxслайд  питон  БОН.pptx
слайд питон БОН.pptx
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Software Engineering Knowledge Matrix
Software Engineering Knowledge MatrixSoftware Engineering Knowledge Matrix
Software Engineering Knowledge Matrix
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++
 
C# vs C++
C# vs C++C# vs C++
C# vs C++
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 

Más de Виталий Емельянов

Más de Виталий Емельянов (8)

Лекция Google Cloud Platform
Лекция Google Cloud PlatformЛекция Google Cloud Platform
Лекция Google Cloud Platform
 
Лекция 1. Архитектура информационных систем
Лекция 1. Архитектура информационных системЛекция 1. Архитектура информационных систем
Лекция 1. Архитектура информационных систем
 
Лекция 4. UML (physical model)
Лекция 4. UML (physical model)Лекция 4. UML (physical model)
Лекция 4. UML (physical model)
 
Лекция 3. UML (dynamic logical model)
Лекция 3. UML (dynamic logical model)Лекция 3. UML (dynamic logical model)
Лекция 3. UML (dynamic logical model)
 
Лекция 2. UML (static logical model)
Лекция 2. UML (static logical model)Лекция 2. UML (static logical model)
Лекция 2. UML (static logical model)
 
Лекция 1. UML (use cases)
Лекция 1. UML (use cases)Лекция 1. UML (use cases)
Лекция 1. UML (use cases)
 
Лекция 3. Связи между классами
Лекция 3. Связи между классамиЛекция 3. Связи между классами
Лекция 3. Связи между классами
 
Лекция 2. Интерфейсы и абстрактные классы
Лекция 2. Интерфейсы и абстрактные классыЛекция 2. Интерфейсы и абстрактные классы
Лекция 2. Интерфейсы и абстрактные классы
 

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

  • 1. д.т.н. Емельянов Виталий Александрович : v.yemelyanov@gmail.com 1 Getting StartedObject-Oriented Programming
  • 2. 2 Тенденции разработки ПО  переход от расчетов по формулам к сложным задачам моделирования систем;  увеличение объемов обрабатываемых данных;  повышение сложности программ, увеличение их длины (до миллионов строк кода!). Сложность программ превышает возможности одного человека (программиста). ! В итоге:  коллективная разработка  каждый делает свою часть независимо от других  части программы легко «собрать» вместе Как? ? Емельянов В.А.: Объектно-ориентированное программирование
  • 3. 3 Тенденции разработки ПО подзадача 1 подзадача 3 подзадача 2.1 подзадача 2.2 подзадача 2.3 подзадача 2 задача Алгоритмическая декомпозиция Структурное и процедурное программирование: ПРОБЛЕМА: «Люди воспринимают мир, состоящий из объектов» (Р. Декарт). Емельянов В.А.: Объектно-ориентированное программирование
  • 4. 4 Объектно-ориентированное программирование Что понимает компьютер Как человеку проще записывать действия Как человеку проще мыслить Ассемблер (машинный код) Процедурное программирование Парадигмы программирования Емельянов В.А.: Объектно-ориентированное программирование
  • 5. 5 ООП – это парадигма программирования, в которой базовым является понятие объекта. Объект в программе – это абстракция реального объекта Абстракция – это выделение существенных свойств объекта, отличающих его от других объектов Объектно-ориентированное программирование (ООП) Емельянов В.А.: Объектно-ориентированное программирование Программа в ходе работы представляет собой набор взаимодействующих объектов
  • 6. 6 behavior state Object Нажать на газ Нажать на тормоз Заправить топливом Марка Скорость Уровень бензина Понятие объекта Емельянов В.А.: Объектно-ориентированное программирование
  • 7. 7 Понятие класса  Класс (class) описывает признаки состояния и поведение множества схожих объектов.  Класс – это пользовательский тип данных auto1 auto2 auto3 Car objects class Класс Поля Методы состояние (state) поведение (behavior) Емельянов В.А.: Объектно-ориентированное программирование
  • 8. 8 Создание класса C# Емельянов В.А.: Объектно-ориентированное программирование Доступность элементов Модификатор: Class (базовый класс) Subclass (класс- наследник) World public Да Да Да protected Да Да Нет private Да Нет Нет Класс на С# описывается следующим образом: [модификаторы] class имя_класса [ : предки] { //тело класса (поля и методы) }
  • 9. 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
  • 10. 10 Создание объекта класса (экземпляра класса)  Объекты (экземпляры классов) создаются с помощью оператора new.  Для получения доступа к данным объекта или для вызова методов, используется оператор точка «.»  При создании объекта, копия данных, описываемых классом записывается в память и присваивается переменной ссылочного типа. имя_Класса имя_ссылки; //объявление ссылки имя_ссылки = new имя_Класса(); //создание объекта класса имя_ссылки.имяПоля = 0; //обращение к полю имя_ссылки.имяМетода(); //вызов метода C# Емельянов В.А.: Объектно-ориентированное программирование
  • 11. 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
  • 12. 12 Конструктор Конструктор – особый вид метода в классе По смыслу: Вызывается автоматически при каждом создании объекта. Типовое применение: установка полей в заданное значение По синтаксису: Имя должно совпадать с именем класса Не имеет возвращаемого объекта Должен иметь модификатор public Емельянов В.А.: Объектно-ориентированное программирование
  • 13. 13 Конструктор Особенности конструктора:  Каждый класс имеет конструктор, принятый по умолчанию  Конструктор по умолчанию не имеет параметров и устанавливает все поля в значение по умолчанию в зависимости от их типа  Программист может определить собственный конструктор. В этом случае конструктор по умолчанию удаляется.  Конструктор может иметь параметры. Product orderedProduct = new Product(); //Price= 0 Amount= 0 prID= 0 //Description = пустая строка C# Имя класса Имя объекта Вызов конструктора Емельянов В.А.: Объектно-ориентированное программирование 1 2 3 4 5 6
  • 14. 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
  • 15. 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
  • 17. 17 Инкапсуляция – скрытие деталей внутреннего устройства класса от внешних по отношению к нему объектов или классов.  Поля закрываются от доступа извне  Доступ к закрытым полям выполняется через открытые методы, играющие роль интерфейса (интерфейсные методы) Инкапсуляция UML Емельянов В.А.: Объектно-ориентированное программирование
  • 18. 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 скрытые поля открытые интерфейсные методы
  • 19. 19  борьба со сложностью  безопасность внутренних данных  возможность изменять «внутренности», не меняя интерфейс Зачем нужна инкапсуляция? Емельянов В.А.: Объектно-ориентированное программирование
  • 20. 20 Наследование Наследование (inheritance) – механизм создания новых классов на основе существующих.  При наследовании дочернему классу (subclass) передаются поля и методы родительского класса (superclass)  У класса может быть один родитель и любое количество дочерних классов родительский класс дочерний класс Transport Car Bicycle Емельянов В.А.: Объектно-ориентированное программирование
  • 21. 21 Наследование Наследование в разработке кода:  Определение нового типа данных путем указания отличий от ранее определенного типа данных.  Определяемый тип данных будет содержать поля и методы предка (унаследованные поля и методы) и поля и методы, определенные в нем самом. //Класс предок class ClassA { //Поля //Методы() } C# //Класс потомок(наследник) class ClassB : ClassA { //Дополнительные поля //Дополнительные методы() } C# Наследование в проектировании: UML Емельянов В.А.: Объектно-ориентированное программирование
  • 22. 22 Наследование Особенности наследования в C# (Java, PHP и др.):  Класс предок может иметь несколько классов потомков  Класс может иметь не более одного предка (множественное наследование запрещено, в отличие от C++ и UML) Класс предок Класс потомок 2Класс потомок 1 Класс потомок Класс предок 2Класс предок 1 Емельянов В.А.: Объектно-ориентированное программирование
  • 23. 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
  • 24. 24 Полиморфизм Полиморфизм (polymorphism) – реализация одной и той же операции по разному  имеется несколько реализаций алгоритма  выбор реализации осуществляется в зависимости от типа объекта и типа параметров Механизмы реализации полиморфизма Перегрузка (overloading) методов и операций Переопределение (overriding) методов и операций Емельянов В.А.: Объектно-ориентированное программирование
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 28 Полиморфизм: перегрузка методов (overloading) В C# допускается совместное использование одного и того же имени двумя или более методами одного и того же класса, при условии, что их параметры объявляются по- разному. В этом случае говорят, что методы перегружаются, а сам процесс называется перегрузкой методов. Условия перегрузки методов:  разный тип передаваемых параметров  разное количество передаваемых параметров  комбинация первых двух случаев Емельянов В.А.: Объектно-ориентированное программирование
  • 29. 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 Перегруженные методы
  • 30. 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
  • 31. Steve Jobs, 1994, интервью журналу Rolling Stone:  «Объекты – они как люди. Они живые вещи, у которых есть разум, позволяющий им знать, как сделать ту или иную вещь, у них есть память. Вы взаимодействуете с ними на очень высоком уровне абстракции, словно с людьми.  Например, я – ваш объект, занимающийся чисткой ваших вещей. Вы можете дать мне грязную одежду и послание “доставь мои вещи в прачечную”. Я знаю, где в Сан-Франциско лучшая прачечная, я говорю по- английски и у меня есть деньги в кармане. Я выхожу, ловлю такси, посещаю прачечную и возвращаюсь с вашими вещами и словами: “Вот, ваша чистая одежда”.  Вы не знаете, как я это сделал. Не знаете, где эта прачечная или вы говорите по-французски, а может у вас нет денег, чтобы поймать такси. Однако, я знал, как все это сделать, а вам – это знать необязательно. Вся сложность процесса скрыта внутри меня, но наше с вами общение было простым – в этом вся суть объектов. СЛОЖНОСТИ – ВНУТРИ, НО ИНТЕРФЕЙС – ДОСТУПЕН КАЖДОМУ.» Не могли бы вы в нескольких словах объяснить, что же такое объектно-ориентированное программное обеспечение? ?