Общее понятие ООП. Принципы ООП: наследование, инкапсуляция, полиморфизм. Классы: основные понятия

Содержание

Слайд 2

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

В реальном мире каждый предмет или процесс обладает набором статических и

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

Слайд 3

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

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

Программа

Слайд 4

Определение

Объектно-ориентированное программирование (ООП, Object-Oriented Programming) - совокупность принципов, технологий , а также

Определение Объектно-ориентированное программирование (ООП, Object-Oriented Programming) - совокупность принципов, технологий , а
инструментальных средств для создания программных систем на основе архитектуры взаимодействия объектов.

Слайд 5

Основные определения ООП

Класс представляет собой множество объектов
имеющих общую структуру
обладающих одинаковым поведением.

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

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

Слайд 6

Классы объектов

Классом называют особую структуру, которая может иметь в своем составе поля,

Классы объектов Классом называют особую структуру, которая может иметь в своем составе
методы и свойства.

Класс Cats

Слайд 7

Классы и объекты

Классы и объекты

Слайд 8

Классы и объекты

Классы и объекты

Слайд 9

©Павловская Т.А. (СПбГУ ИТМО)

Классы и объекты

©Павловская Т.А. (СПбГУ ИТМО) Классы и объекты

Слайд 12

Основные принципы ООП

Основные принципы ООП

Слайд 13

Наследование (inheritance) — это отношение между классами, при котором класс использует структуру

Наследование (inheritance) — это отношение между классами, при котором класс использует структуру
или поведение другого класса (одиночное наследование), или других (множественное наследование) классов.

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

Слайд 18

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

Наследование применяется для:
исключения из программы повторяющихся фрагментов кода;
упрощения модификации программы;
упрощения создания новых

Наследование Наследование применяется для: исключения из программы повторяющихся фрагментов кода; упрощения модификации
программ на основе существующих.
Благодаря наследованию появляется возможность использовать объекты, исходный код которых недоступен, но в которые требуется внести изменения.
Наследование позволяет создавать иерархии классов. Иерархия представляется в виде дерева, в котором более общие классы располагаются ближе к корню, а более специализированные — на ветвях и листьях.

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 19

Иерархия классов

Иерархия классов

Слайд 20

Иерархия классов

Иерархия классов

Слайд 22

Основные принципы ООП

Основные принципы ООП

Слайд 23

Что такое инкапсуляция?

Что такое инкапсуляция?

Слайд 24

Что такое инкапсуляция?

Что такое инкапсуляция?

Слайд 25

Что такое инкапсуляция?

Что такое инкапсуляция?

Слайд 26

Что такое инкапсуляция?

Что такое инкапсуляция?

Слайд 27

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

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

Инкапсуляция При представлении реального объекта с помощью программного необходимо выделить в первом
существенные особенности и игнорировать несущественные. Это называется абстрагированием.
Таким образом, программный объект — это абстракция.
Детали реализации объекта скрыты, он используется через его интерфейс — совокупность правил доступа.
Скрытие деталей реализации называется инкапсуляцией. Это позволяет представить программу в укрупненном виде — на уровне объектов и их взаимосвязей, а следовательно, управлять большим объемом информации.
Итак, объект — это инкапсулированная абстракция с четко определенным интерфейсом.

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 29

©Павловская Т.А. (СПбГУ ИТМО)

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 32

Основные принципы ООП

Основные принципы ООП

Слайд 33

Полиморфизм

ООП позволяет писать гибкие, расширяемые и читабельные программы.
Во многом это обеспечивается

Полиморфизм ООП позволяет писать гибкие, расширяемые и читабельные программы. Во многом это
благодаря полиморфизму, под которым понимается возможность во время выполнения программы с помощью одного и того же имени выполнять разные действия или обращаться к объектам разного типа.
Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов.

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 37

Полиморфизм

Полиморфизм

Слайд 38

Пример непереопределяемого метода

Пример непереопределяемого метода

Слайд 39

Пример переопределяемого метода

Пример переопределяемого метода

Слайд 40

Родительский класс

Класс - наследник

Вызов метода из класса - наследника

Вызов метода из класса

Родительский класс Класс - наследник Вызов метода из класса - наследника Вызов
- родителя

Слайд 41

©Павловская Т.А. (СПбГУ ИТМО)

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 42

Достоинства ООП

использование при программировании понятий, близких к предметной области;
возможность успешно управлять

Достоинства ООП использование при программировании понятий, близких к предметной области; возможность успешно
большими объемами исходного кода благодаря инкапсуляции, то есть скрытию деталей реализации объектов и упрощению структуры программы;
возможность многократного использования кода за счет наследования;
сравнительно простая возможность модификации программ;
возможность создания и использования библиотек объектов.

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 43

Недостатки ООП

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

Недостатки ООП некоторое снижение быстродействия программы, связанное с использованием виртуальных методов; идеи
не просты для понимания и в особенности для практического использования;
для эффективного использования существующих объектно-ориентированных систем требуется большой объем первоначальных знаний;
неграмотное применение ООП может привести к значительному ухудшению характеристик разрабатываемой программы.

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 44

Технология разработки ОО программ

В процесс проектирования добавляется еще один этап -

Технология разработки ОО программ В процесс проектирования добавляется еще один этап -
разработка иерархии классов.
в предметной области выделяются понятия, которые можно использовать как классы. Кроме классов из прикладной области, появляются классы, связанные с аппаратной частью и реализацией
определяются операции над классами, которые впоследствии станут методами класса. Их можно разбить на группы:
- связанные с конструированием и копированием объектов
- для поддержки связей между классами, которые существуют в прикладной области
- позволяющие представить работу с объектами в удобном виде.
Определяются методы, которые будут виртуальными.
Определяются зависимости между классами. Процесс создания иерархии классов - итерационный. Например, можно в двух классах выделить общую часть в базовый класс и сделать их производными.

©Павловская Т.А. (СПбГУ ИТМО)

Классы должны как можно ближе соответствовать моделируемым объектам из предметной области.

Слайд 45

Чтобы обеспечить работу метода с полями того объекта, для которого он был

Чтобы обеспечить работу метода с полями того объекта, для которого он был
вызван, в метод автоматически передается скрытый параметр this, в котором хранится ссылка на вызвавший функцию объект.

©Павловская Т.А. (СПбГУ ИТМО)

Ключевое слово this

Метод Main:
Monster a = new…
Monster b = new…
a.Passport()
b.Passport()

Метод Passport:
//Вывод полей
name
health
ammo

ДАННЫЕ (хип):

Объект a:
name
health
ammo

Объект b:
name
health
ammo

this=a

this=b

this.name
this.health this.ammo

КОД:

Слайд 46

Указатель this - это указатель на объект, для которого был вызван нестатический

Указатель this - это указатель на объект, для которого был вызван нестатический
метод.
Ключевое слово this обеспечивает доступ к текущему экземпляру класса.
Классический пример использования this, это как раз в конструкторах, при одинаковых именах полей класса и аргументов конструктора.
Ключевое слово this это что-то вроде имени объекта, через которое мы имеем доступ к текущему объекту. 

Ключевое слово this

Слайд 47

Использование явного this

В явном виде параметр this применяется:
// чтобы возвратить из

Использование явного this В явном виде параметр this применяется: // чтобы возвратить
метода ссылку на вызвавший объект
class Demo
{ double y;
public Demo T() { return this; }
// для идентификации поля, если его имя совпадает с именем параметра метода
public void Sety( double y ) { this.y = y; }
}

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 48

Обобщение понятия класса

©Павловская Т.А. (СПбГУ ИТМО)

Обобщение понятия класса ©Павловская Т.А. (СПбГУ ИТМО)

Слайд 49

Элементы класса

©Павловская Т.А. (СПбГУ ИТМО)

Элементы класса ©Павловская Т.А. (СПбГУ ИТМО)

Слайд 50

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

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

Понятие класса Класс является типом данных, определяемым пользователем. Он должен представлять собой
логическую сущность, например, являться моделью реального объекта или процесса.
Элементами класса являются данные и функции, предназначенные для их обработки.
Все классы .NET имеют общего предка — класс object, и организованы в единую иерархическую структуру.
Внутри нее классы логически сгруппированы в пространства имен, которые служат для упорядочивания имен классов и предотвращения конфликтов имен: в разных пространствах имена могут совпадать. Пространства имен могут быть вложенными.
Любая программа использует пространство имен System.

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 51

Описание класса

[ атрибуты ] [ спецификаторы ] class имя_класса [ :

Описание класса [ атрибуты ] [ спецификаторы ] class имя_класса [ :
предки ] тело_класса
Имя класса задается по общим правилам.
Тело класса — список описаний его элементов, заключенный в фигурные скобки.
Атрибуты задают дополнительную информацию о классе.
Спецификаторы определяют свойства класса, а также доступность класса для других элементов программы.
Простейший пример описания класса:
class Demo {} // пустой класс

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 52

Спецификаторы класса

Спецификаторы класса

Слайд 53

Сквозной пример класса

class Monster {
public Monster()
{
this.name = "Noname";
this.health

Сквозной пример класса class Monster { public Monster() { this.name = "Noname";
= 100;
this.ammo = 100;
}
public Monster( string name ) : this()
{
this.name = name;
}
public Monster( int health, int ammo, string name )
{
this.name = name;
this.health = health;
this.ammo = ammo;
}
public int GetName()
{ return name; }
public int GetAmmo()
{ return ammo;}

public int Health
{
get { return health; }
set { if (value > 0) health = value;
else health = 0;
}
}
public void Passport()
{ Console.WriteLine("Monster {0} \t health = {1} \ t ammo = {2}", name, health, ammo );
}
public override string ToString()
{
string buf = string.Format("Monster {0} \t
health = {1} \ ammo = {2}", name, health, ammo);
return buf; }
string name;
int health, ammo;
}

Слайд 54

Добавление класса в Visual Studio

Обычно классы помещаются в отдельные файлы. Нередко для

Добавление класса в Visual Studio Обычно классы помещаются в отдельные файлы. Нередко
одного класса предназначен один файл. И Visual Studio предоставляет по умолчанию встроенные шаблоны для добавления класса.

Слайд 55

Добавление класса в Visual Studio

В открывшемся окне добавления нового элемента убедимся, что

Добавление класса в Visual Studio В открывшемся окне добавления нового элемента убедимся,
в центральной части с шаблонами элементов у нас выбран пункт Class. А внизу окна в поле Name введем название добавляемого класса - пусть он будет назваться Person:

Слайд 56

Добавление класса в Visual Studio

Таким образом, мы можем определять классы в отдельных

Добавление класса в Visual Studio Таким образом, мы можем определять классы в
файлах и использовать их в программе.

Слайд 57

Схема Класса

Схема Класса

Слайд 58

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

Класс является обобщенным понятием, определяющим характеристики и поведение множества конкретных

Описание объекта (экземпляра) Класс является обобщенным понятием, определяющим характеристики и поведение множества
объектов этого класса, называемых экземплярами (объектами) класса.
Объекты создаются явным или неявным образом (либо программистом, либо системой). Программист создает экземпляр класса с помощью операции new:
Demo a = new Demo();
Demo b = new Demo();
Для каждого объекта при его создании в памяти выделяется отдельная область для хранения его данных.
Кроме того, в классе могут присутствовать статические элементы, которые существуют в единственном экземпляре для всех объектов класса.
Функциональные элементы класса всегда хранятся в единственном экземпляре.

Слайд 59

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

class Monster { ... }
class Class1
{
static void

Пример создания объектов (экземпляров) class Monster { ... } class Class1 {
Main()
{
Monster X = new Monster();
X.Passport();
Monster Vasia = new Monster( "Vasia" );
Vasia.Passport();
Monster Masha = new Monster( 200, 200, "Masha" );
Сonsole.Writeline(Masha);
}
}

©Павловская Т.А. (СПбГУ ИТМО)

Результат работы программы:
Monster Noname health = 100 ammo = 100
Monster Vasia health = 100 ammo = 100
Monster Masha health = 200 ammo = 200

Слайд 60

Данные: поля и константы

Данные, содержащиеся в классе, могут быть переменными или

Данные: поля и константы Данные, содержащиеся в классе, могут быть переменными или
константами.
Переменные, описанные в классе, называются полями класса.
При описании полей можно указывать атрибуты и спецификаторы, задающие различные характеристики элементов:
[ атрибуты ] [ спецификаторы ] [ const ] тип имя [ = начальное_значение ]
Все поля сначала автоматически инициализируются нулем соответствующего типа (например, полям типа int присваивается 0, а ссылкам на объекты — значение null). После этого полю присваивается значение, заданное при его явной инициализации.

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 61

Поля класса

Поля служат для хранения данных, содержащихся в объекте. Поля аналогичны переменным,

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

Слайд 62

Пример класса

using System;
namespace CA1
{ class Demo
{ public int a = 1;

Пример класса using System; namespace CA1 { class Demo { public int
// поле данных
public const double c = 1.66; // константа
public static string s = "Demo"; // статическое поле класса
double y; // закрытое поле данных
}
class Class1
{ static void Main()
{
Demo x = new Demo(); // создание экземпляра класса Demo
Console.WriteLine( x.a ); // x.a - обращение к полю класса
Console.WriteLine( Demo.c ); // Demo.c - обращение к константе
Console.WriteLine( Demo.s ); // обращение к статическому полю
}}}

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 63

Спецификаторы полей и констант класса

©Павловская Т.А. (СПбГУ ИТМО)

Спецификаторы полей и констант класса ©Павловская Т.А. (СПбГУ ИТМО)

Слайд 64

Конструкторы

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

Конструкторы Конструктор класса – это специальный метод, который вызывается при инициализации объекта
ключевого слова new. Имя конструктора должно совпадать с именем класса.
Свойства конструкторов:
Конструктор не возвращает значение, даже типа void.
Конструктор можно не создавать явно, тогда для класса будет создан конструктор по умолчанию.
Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации.
Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, полям значимых типов присваивается нуль, полям ссылочных типов — значение null.
Если вы создадите конструктор, который содержит набор аргументов, то конструктор по умолчанию уже не будет создан для класса. Если вы хотите создавать объекты без указания аргументов, то необходимо добавить в класс соответствующий конструктор.

Слайд 65

Пример класса с конструктором

class Demo
{
public Demo( int a, double y

Пример класса с конструктором class Demo { public Demo( int a, double
) // конструктор
{
this.a = a;
this.y = y;
}
int a;
double y;
}
class Class1
{ static void Main()
{
Demo a = new Demo( 300, 0.002 ); // вызов конструктора
Demo b = new Demo( 1, 5.71 ); // вызов конструктора

} }

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 66

Пример класса с двумя конструкторами

class Demo
{
public Demo( int a )

Пример класса с двумя конструкторами class Demo { public Demo( int a
// конструктор 1
{
this.a = a;
this.y = 0.002;
}
public Demo( double y ) // конструктор 2
{
this.a = 1;
this.y = y;
}
...
}
...
Demo x = new Demo( 300 ); // вызов конструктора 1
Demo y = new Demo( 5.71 ); // вызов конструктора 2

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 67

class DemoClass
{
int field = 0;
public int Property {get;set;}
public

class DemoClass { int field = 0; public int Property {get;set;} public
void Method()
{
Console.WriteLine("Method");
}
public DemoClass()
{}
public DemoClass(int field)
{
this.field = field;
}
public DemoClass(int field, int prop)
{
this.field = field;
Property = prop;
}
}

// Поле класса

// Свойство класса

// Метод класса

// конструктор класса не содержащий аргументов

// конструктор класса, содержащий 1 аргумент

// конструктор класса, содержащий 2 аргумента

Пример класса с несколькими конструкторами

DemoClass demo = new DemoClass();
DemoClass d2 = new DemoClass(1);
d2.Method(); // field: 1, Property: 0
DemoClass d3 = new DemoClass(1, 2);
d3.Method(); // field: 1, Property: 2
DemoClass d5 = new DemoClass(10) { Property = 11 };
d5.Method(); // field: 10, Property: 11

// Инициализация объектов класса

Слайд 68

Свойства

Свойства служат для организации доступа к полям класса. Как правило, свойство определяет

Свойства Свойства служат для организации доступа к полям класса. Как правило, свойство
методы доступа к закрытому полю.
Синтаксис свойства:
[модификаторы] тип_свойства название_свойства
{
get { действия, выполняемые при получении значения свойства}
set { действия, выполняемые при установке значения свойства}
}
При обращении к свойству автоматически вызываются указанные в нем блоки чтения (get) и установки (set).
В блоке get выполняются действия по получению значения свойства. В этом блоке с помощью оператора return возвращаем некоторое значение.
В блоке set устанавливается значение свойства. В этом блоке с помощью параметра value мы можем получить значение, которое передано свойству.
Блоки get и set еще называются акссесорами или методами доступа (к значению свойства), а также геттером и сеттером.
Может отсутствовать либо часть get, либо set, но не обе одновременно. Если отсутствует часть set, свойство доступно только для чтения (read-only), если отсутствует get - только для записи (write-only).

Слайд 69

Person person = new Person();
 person.Name = "Tom";
 string personName = person.Name;
Console.WriteLine(personName);  // Tom
class

Person person = new Person(); person.Name = "Tom"; string personName = person.Name;
Person
{
    private string name = "Undefined";
    public string Name
    {
        get
        {
            return name;    // возвращаем значение свойства
        }
        set
        {
            name = value;   // устанавливаем новое значение свойства
        }
    }
}

Поля класса

Устанавливаем свойство - срабатывает блок Set
значение "Tom" – это передаваемое в свойство value

Получаем значение свойства и присваиваем его переменной - срабатывает блок Get

Параметр value представляет передаваемое значение, которое передается переменной name.

Слайд 70

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

Свойства позволяют вложить дополнительную логику, которая может быть необходима при установке или
получении значения. Например, нам выполнить проверку по возрасту:

Свойства

Person person = new Person();
 Console.WriteLine(person.Age);  // 1
person.Age = 37;
Console.WriteLine(person.Age);  // 37
person.Age = -23;               // Возраст должен быть в диапазоне от 1 до 120
Console.WriteLine(person.Age);  // 37 - возраст не изменился
class Person
{
    int age = 1;
    public int Age
    {
        set
        {
            if (value < 1 || value > 120)
                Console.WriteLine("Возраст должен быть в диапазоне от 1 до 120");
            else
                age = value;
        }
        get { return age; }
    }
}

изменяем значение свойства

пробуем передать недопустимое значение

Слайд 71

©Павловская Т.А. (СПбГУ ИТМО)

©Павловская Т.А. (СПбГУ ИТМО)

Слайд 72

Пример описания свойств

public class Button: Control
{ private string caption; //

Пример описания свойств public class Button: Control { private string caption; //
поле, с которым связано свойство
public string Caption { // свойство
get { return caption; } // способ получения свойства
set // способ установки свойства
{ if (caption != value) { caption = value; }
}} ...

©Павловская Т.А. (СПбГУ ИТМО)

В программе свойство выглядит как поле класса:
Button ok = new Button();
ok.Caption = "OK"; // вызывается метод установки свойства
string s = ok.Caption; // вызывается метод получения свойства

Имя файла: Общее-понятие-ООП.-Принципы-ООП:-наследование,-инкапсуляция,-полиморфизм.-Классы:-основные-понятия.pptx
Количество просмотров: 62
Количество скачиваний: 2