SlideShare ist ein Scribd-Unternehmen logo
1 von 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:
 «Объекты – они как люди. Они живые вещи, у которых есть разум,
позволяющий им знать, как сделать ту или иную вещь, у них есть память.
Вы взаимодействуете с ними на очень высоком уровне абстракции, словно
с людьми.
 Например, я – ваш объект, занимающийся чисткой ваших вещей. Вы
можете дать мне грязную одежду и послание “доставь мои вещи в
прачечную”. Я знаю, где в Сан-Франциско лучшая прачечная, я говорю по-
английски и у меня есть деньги в кармане. Я выхожу, ловлю такси,
посещаю прачечную и возвращаюсь с вашими вещами и словами: “Вот,
ваша чистая одежда”.
 Вы не знаете, как я это сделал. Не знаете, где эта прачечная или вы
говорите по-французски, а может у вас нет денег, чтобы поймать такси.
Однако, я знал, как все это сделать, а вам – это знать необязательно. Вся
сложность процесса скрыта внутри меня, но наше с вами общение было
простым – в этом вся суть объектов. СЛОЖНОСТИ – ВНУТРИ, НО
ИНТЕРФЕЙС – ДОСТУПЕН КАЖДОМУ.»
Не могли бы вы в нескольких словах объяснить, что же такое
объектно-ориентированное программное обеспечение?
?

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Unix shell scripts
Unix shell scriptsUnix shell scripts
Unix shell scripts
 
JDBC
JDBCJDBC
JDBC
 
Java String
Java String Java String
Java String
 
Structures and Unions
Structures and UnionsStructures and Unions
Structures and Unions
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
JavaScript Objects
JavaScript ObjectsJavaScript Objects
JavaScript Objects
 
Sql joins
Sql joinsSql joins
Sql joins
 
Memory allocation in c
Memory allocation in cMemory allocation in c
Memory allocation in c
 
QA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профиQA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профи
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
String Handling, Inheritance, Packages and Interfaces
String Handling, Inheritance, Packages and InterfacesString Handling, Inheritance, Packages and Interfaces
String Handling, Inheritance, Packages and Interfaces
 
Java strings
Java   stringsJava   strings
Java strings
 
C# basics
 C# basics C# basics
C# basics
 
Aggregate functions
Aggregate functionsAggregate functions
Aggregate functions
 
Java Foundations: Basic Syntax, Conditions, Loops
Java Foundations: Basic Syntax, Conditions, LoopsJava Foundations: Basic Syntax, Conditions, Loops
Java Foundations: Basic Syntax, Conditions, Loops
 
Regular Expressions in PHP
Regular Expressions in PHPRegular Expressions in PHP
Regular Expressions in PHP
 
Introduction to oracle functions
Introduction to oracle functionsIntroduction to oracle functions
Introduction to oracle functions
 
16. Java stacks and queues
16. Java stacks and queues16. Java stacks and queues
16. Java stacks and queues
 
Java interface
Java interfaceJava interface
Java interface
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
 

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

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
Technopark
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
Technopark
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
Sergey Nemchinsky
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
metaform
 

Ähnlich wie Лекция 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
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 

Mehr von Виталий Емельянов

Mehr von Виталий Емельянов (6)

Лекция 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)
 
Лекция 3. Связи между классами
Лекция 3. Связи между классамиЛекция 3. Связи между классами
Лекция 3. Связи между классами
 

Лекция 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:  «Объекты – они как люди. Они живые вещи, у которых есть разум, позволяющий им знать, как сделать ту или иную вещь, у них есть память. Вы взаимодействуете с ними на очень высоком уровне абстракции, словно с людьми.  Например, я – ваш объект, занимающийся чисткой ваших вещей. Вы можете дать мне грязную одежду и послание “доставь мои вещи в прачечную”. Я знаю, где в Сан-Франциско лучшая прачечная, я говорю по- английски и у меня есть деньги в кармане. Я выхожу, ловлю такси, посещаю прачечную и возвращаюсь с вашими вещами и словами: “Вот, ваша чистая одежда”.  Вы не знаете, как я это сделал. Не знаете, где эта прачечная или вы говорите по-французски, а может у вас нет денег, чтобы поймать такси. Однако, я знал, как все это сделать, а вам – это знать необязательно. Вся сложность процесса скрыта внутри меня, но наше с вами общение было простым – в этом вся суть объектов. СЛОЖНОСТИ – ВНУТРИ, НО ИНТЕРФЕЙС – ДОСТУПЕН КАЖДОМУ.» Не могли бы вы в нескольких словах объяснить, что же такое объектно-ориентированное программное обеспечение? ?