Классы, объекты, поля и методы. (Лекция 4)

Содержание

Слайд 2

И.М.Желакович БНТУ Определение класса в ООП Класс – это тип данных,

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это тип данных, задающий реализацию

некоторой абстракции данных (сущности), характерной для моделируемой предметной области.
Слайд 3

И.М.Желакович БНТУ Определение класса в ООП Класс – это тип данных,

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это тип данных, задающий реализацию

некоторой абстракции данных (сущности), характерной для моделируемой предметной области.

моделируемая предметная область – та часть реального мира, для которой создается программное обеспечение
Банковская система
Управление персоналом (отдел кадров)
Управление реактором АЭС
Разработка игровой стратегии

Слайд 4

И.М.Желакович БНТУ Определение класса в ООП Класс – это тип данных,

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это тип данных, задающий реализацию

некоторой абстракции данных (сущности), характерной для моделируемой предметной области.

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

Слайд 5

И.М.Желакович БНТУ Определение класса в ООП Класс – это тип данных,

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это тип данных, задающий реализацию

некоторой абстракции данных (сущности), характерной для моделируемой предметной области.

задающий реализацию – описывающий содержимое сущности, т.е. ее атрибуты (поля), действия (методы), реагирование сущности (события)

Слайд 6

И.М.Желакович БНТУ Определение класса в ООП Класс – это тип данных,

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это тип данных, задающий реализацию

некоторой абстракции данных (сущности), характерной для моделируемой предметной области.

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

Слайд 7

И.М.Желакович БНТУ Определение класса в ООП Класс – это тип данных,

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это тип данных, задающий реализацию

некоторой абстракции данных (сущности), характерной для моделируемой предметной области.

тип данных – не содержит конкретных значений и не захватывает память под поля, это только описание, шаблон.

Слайд 8

И.М.Желакович БНТУ Определение класса в ООП Класс – это тип данных,

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это тип данных, задающий реализацию

некоторой абстракции данных (сущности), характерной для моделируемой предметной области.
Слайд 9

И.М.Желакович БНТУ Определение класса в ООП Класс – это модуль, архитектурная

И.М.Желакович БНТУ

Определение класса в ООП

Класс – это модуль, архитектурная единица построения

программной системы.

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

Слайд 10

И.М.Желакович БНТУ Проектирование в ООП Объектно-ориентированная разработка программной системы основана на

И.М.Желакович БНТУ

Проектирование в ООП

Объектно-ориентированная разработка программной системы основана на стиле, называемом

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

Каждая из таких абстракций реализуется в виде класса, которые и становятся модулями - архитектурными единицами построения нашей системы. В основе класса лежит абстрактный тип данных.

Слайд 11

И.М.Желакович БНТУ Проектирование в ООП Некоторые сущности проявляются в процессе разработки

И.М.Желакович БНТУ

Проектирование в ООП

Некоторые сущности проявляются в процессе разработки – возможно,

нам потребуются стены, пол и потолок, а для описания температуры, освещенности и концентрации СО2 может выявиться сущность – КОМФОРТ. У каждой сущности выявляются атрибуты и методы.

Спроектируем нашу аудиторию. Некоторые сущности выделить несложно – столы, стулья, доска, окна, дверь, студенты.

Слайд 12

И.М.Желакович БНТУ Проектирование в ООП Некоторые сущности могут включать в себя

И.М.Желакович БНТУ

Проектирование в ООП

Некоторые сущности могут включать в себя другие:
группа состоит

из студентов
окна являются частью стены
светильники являются частью стены или потолка
Слайд 13

И.М.Желакович БНТУ Проектирование в ООП В ООП используются понятия клиент и

И.М.Желакович БНТУ

Проектирование в ООП

В ООП используются понятия клиент и сервер. Сервер

– тот, кто поставляет услугу (в нашем случае – класс), клиент – тот, кто использует этот класс (программист, возможно тот же, кто писал класс, возможно – другой).
Слайд 14

И.М.Желакович БНТУ Класс CCar Рассмотрим создане и использование простейшего класса –

И.М.Желакович БНТУ

Класс CCar

Рассмотрим создане и использование простейшего класса – автомобиль (Car).


Для имен классов желательно использовать префикс – первую букву C (Class), чтобы не путать их в дальнейшем с объектами.
Поэтому имя класса будет CCar
Слайд 15

И.М.Желакович БНТУ Создание нового проекта

И.М.Желакович БНТУ

Создание нового проекта

Слайд 16

И.М.Желакович БНТУ Добавление нового класса (правый клик на имени проекта)

И.М.Желакович БНТУ

Добавление нового класса (правый клик на имени проекта)

Слайд 17

И.М.Желакович БНТУ Задание имени класса

И.М.Желакович БНТУ

Задание имени класса

Слайд 18

И.М.Желакович БНТУ Класс CCar Желательно каждый класс описывать в отдельном модуле Заготовка для класса создается автоматически

И.М.Желакович БНТУ

Класс CCar

Желательно каждый класс описывать в отдельном модуле
Заготовка для класса

создается автоматически
Слайд 19

И.М.Желакович БНТУ Класс CCar у нашего класса пока только два атрибута

И.М.Желакович БНТУ

Класс CCar

у нашего класса пока только два атрибута (поля)
public –

поля будут видны во всем проекте (и в классе Program)
Слайд 20

И.М.Желакович БНТУ Класс CCar Объекты создаются в том классе, где они используются – в Program

И.М.Желакович БНТУ

Класс CCar

Объекты создаются в том классе, где они используются –

в Program
Слайд 21

И.М.Желакович БНТУ Класс CCar при обращении к объекту видны все поля

И.М.Желакович БНТУ

Класс CCar

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

а также их типы
Слайд 22

И.М.Желакович БНТУ Класс CCar Мы можем использовать поля, чтобы присвоить им

И.М.Желакович БНТУ

Класс CCar

Мы можем использовать поля, чтобы присвоить им значения и

чтобы получить их значения.
Слайд 23

И.М.Желакович БНТУ Класс CCar Добавим еще один объект. Итого у нас есть 2 объекта.

И.М.Желакович БНТУ

Класс CCar

Добавим еще один объект.
Итого у нас есть 2 объекта.

Слайд 24

И.М.Желакович БНТУ Класс CCar И еще один. Сколько всего объектов у нас есть?

И.М.Желакович БНТУ

Класс CCar

И еще один.
Сколько всего объектов у нас есть?

Слайд 25

И.М.Желакович БНТУ Класс CCar Для удобства добавим к нашему классу метод

И.М.Желакович БНТУ

Класс CCar

Для удобства добавим к нашему классу метод – вывод

всей информации о полях класса
Слайд 26

И.М.Желакович БНТУ Класс CCar Теперь пользоваться нашим классом стало намного удобнее

И.М.Желакович БНТУ

Класс CCar

Теперь пользоваться нашим классом стало намного удобнее

Слайд 27

И.М.Желакович БНТУ Класс CCar Добавим метод посложнее

И.М.Желакович БНТУ

Класс CCar

Добавим метод посложнее

Слайд 28

И.М.Желакович БНТУ Класс CCar Разгоним один автомобиль

И.М.Желакович БНТУ

Класс CCar

Разгоним один автомобиль

Слайд 29

И.М.Желакович БНТУ Класс CCar И притормозим другой

И.М.Желакович БНТУ

Класс CCar

И притормозим другой

Слайд 30

И.М.Желакович БНТУ Класс CCar Еще один вариант метода – с возвращаемым значением

И.М.Желакович БНТУ

Класс CCar

Еще один вариант метода – с возвращаемым значением

Слайд 31

И.М.Желакович БНТУ Класс CCar И его использование

И.М.Желакович БНТУ

Класс CCar

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

Слайд 32

И.М.Желакович БНТУ Класс CCar Насколько один автомобиль едет быстрее, чем другой? Метод работает с двумя объектами.

И.М.Желакович БНТУ

Класс CCar

Насколько один автомобиль едет быстрее, чем другой?
Метод работает с

двумя объектами.
Слайд 33

И.М.Желакович БНТУ Класс CCar Здесь важно продумать, от какого объекта будет

И.М.Желакович БНТУ

Класс CCar

Здесь важно продумать, от какого объекта будет вызван метод

(первый автомобиль) и какой объект будет подан в качестве аргумента (автомобиль, с которым сравниваем).
Вызов будет выглядеть так:
car1.faster(car2)
Слайд 34

И.М.Желакович БНТУ Класс CCar А что он будет возвращать? На сколько км/ч быстрее

И.М.Желакович БНТУ

Класс CCar

А что он будет возвращать? На сколько км/ч быстрее


Слайд 35

И.М.Желакович БНТУ Класс CCar Так это метод будет вызываться:

И.М.Желакович БНТУ

Класс CCar

Так это метод будет вызываться:

Слайд 36

И.М.Желакович БНТУ Класс CCar Но если мы хотим упростить жизнь пользователю

И.М.Желакович БНТУ

Класс CCar

Но если мы хотим упростить жизнь пользователю класса (т.е.

классу Program), можно весь вывод перенести внутрь метода

И вызов в Program будет намного короче:

Слайд 37

И.М.Желакович БНТУ Подведение итогов. Метод Метод – это функция, описанная внутри

И.М.Желакович БНТУ

Подведение итогов. Метод

Метод – это функция, описанная внутри класса
Метод

вызывается от объекта класса и ему доступны поля объекта, который его вызвал
Метод может возвращать результат или иметь тип void
Метод может принимать аргументы (или не принимать)
Слайд 38

И.М.Желакович БНТУ Конструкторы такое создание объектов не слишком удобно

И.М.Желакович БНТУ

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

такое создание объектов не слишком удобно

Слайд 39

И.М.Желакович БНТУ Конструкторы Так было бы удобнее

И.М.Желакович БНТУ

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

Так было бы удобнее

Слайд 40

И.М.Желакович БНТУ Конструкторы Конструктор – особый метод класса, используемый при создании

И.М.Желакович БНТУ

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

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

данного класса.
Конструктор всегда имеет то же имя, что и класс.
Конструктор никогда не имеет возвращаемого значения.

Класс может иметь несколько конструкторов, различающихся к-вом и типами аргументов.

Слайд 41

И.М.Желакович БНТУ Конструкторы Если класс не имеет ни одного конструктора, компилятор создает конструктор по умолчанию.

И.М.Желакович БНТУ

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

Если класс не имеет ни одного конструктора, компилятор создает конструктор

по умолчанию.
Слайд 42

И.М.Желакович БНТУ Конструкторы Добавление хотя бы одного конструктора отменяет создание конструктора по умолчанию

И.М.Желакович БНТУ

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

Добавление хотя бы одного конструктора отменяет создание конструктора по умолчанию

Слайд 43

И.М.Желакович БНТУ Перегруженные конструкторы

И.М.Желакович БНТУ

Перегруженные конструкторы

Слайд 44

И.М.Желакович БНТУ Перегруженные конструкторы При вызове конструктора появляется подсказка. Желательно видеть в подсказке осмысленные имена полей.

И.М.Желакович БНТУ

Перегруженные конструкторы

При вызове конструктора появляется подсказка. Желательно видеть в подсказке

осмысленные имена полей.
Слайд 45

И.М.Желакович БНТУ Ключевое слово this Чтобы отличать имена полей от имен аргументов, используется слово this.

И.М.Желакович БНТУ

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

Чтобы отличать имена полей от имен аргументов, используется

слово this.
Слайд 46

И.М.Желакович БНТУ Цепочки конструкторов При создании автомобиля пользователь может указать нереальную

И.М.Желакович БНТУ

Цепочки конструкторов

При создании автомобиля пользователь может указать нереальную скорость (-10

или 100000).
Желательно добавить проверку.
Придется добавлять проверку в каждый конструктор?
Слайд 47

И.М.Желакович БНТУ Цепочки конструкторов Изменим только один конструктор (самый подробный)

И.М.Желакович БНТУ

Цепочки конструкторов

Изменим только один конструктор (самый подробный)

Слайд 48

И.М.Желакович БНТУ Цепочки конструкторов

И.М.Желакович БНТУ

Цепочки конструкторов

Слайд 49

И.М.Желакович БНТУ Свойства Есть еще более грамотный способ обеспечить корректность полей

И.М.Желакович БНТУ

Свойства

Есть еще более грамотный способ обеспечить корректность полей класса –

свойство.
Свойство – это метод (или пара метода), которые с точки зрения клиентского кода ведут себя как поле.
Такой подход позволят при работе с полями выполнять дополнительную обработку – проверку бизнес-правил (соответствие определенным критериям)
Слайд 50

И.М.Желакович БНТУ Свойства private для поля имя поля с _ public

И.М.Желакович БНТУ

Свойства

private для поля
имя поля с _
public для свойства
внешнее имя
get и

set
value
Слайд 51

И.М.Желакович БНТУ Свойства Проверку на корректность лучше делать внутри свойства

И.М.Желакович БНТУ

Свойства

Проверку на корректность лучше делать внутри свойства

Слайд 52

И.М.Желакович БНТУ Свойства Свойство выглядит иначе, чем поле

И.М.Желакович БНТУ

Свойства

Свойство выглядит иначе, чем поле

Слайд 53

И.М.Желакович БНТУ Свойства get и set вызываются в зависимости от контекста

И.М.Желакович БНТУ

Свойства

get и set вызываются в зависимости от контекста

Слайд 54

И.М.Желакович БНТУ Свойства Сработало ограничение на скорость свыше 300 км/ч

И.М.Желакович БНТУ

Свойства

Сработало ограничение на скорость свыше 300 км/ч

Слайд 55

И.М.Желакович БНТУ Что не так в нашем классе?

И.М.Желакович БНТУ

Что не так в нашем классе?

Слайд 56

И.М.Желакович БНТУ Свойства Мы вполне можем вернуть прежний вариант конструктора, ведь теперь здесь будет использоваться свойство.

И.М.Желакович БНТУ

Свойства

Мы вполне можем вернуть прежний вариант конструктора, ведь теперь здесь

будет использоваться свойство.
Слайд 57

И.М.Желакович БНТУ Свойства И проверка на корректность выполняется при вызове конструктора

И.М.Желакович БНТУ

Свойства

И проверка на корректность выполняется при вызове конструктора

Слайд 58

И.М.Желакович БНТУ Свойства Лучшее место в классе для проверки бизнес-правил – это свойство!

И.М.Желакович БНТУ

Свойства

Лучшее место в классе для проверки бизнес-правил – это свойство!

Слайд 59

И.М.Желакович БНТУ Модификаторы доступа Любой член класса может иметь один из

И.М.Желакович БНТУ

Модификаторы доступа

Любой член класса может иметь один из модификаторов доступа:
private

(по умолчанию) – доступ только внутри класса
public – для всех подключенных сборок
protected – только для своего класса и наследников
internal (по умолчанию)– только для своей сборки
Слайд 60

И.М.Желакович БНТУ Свойства Используя модификаторы доступа можно управлять свойствами: создать свойство

И.М.Желакович БНТУ

Свойства

Используя модификаторы доступа можно управлять свойствами:
создать свойство только для чтения

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

И.М.Желакович БНТУ Сбор мусора Если не существует ни одной ссылки на

И.М.Желакович БНТУ

Сбор мусора

Если не существует ни одной ссылки на объект, то

предполагается, что этот объект больше не нужен, и занимаемая им память освобождается.
Слайд 62

И.М.Желакович БНТУ Сбор мусора Поскольку на сбор мусора требуется определенное время,

И.М.Желакович БНТУ

Сбор мусора

Поскольку на сбор мусора требуется определенное время, динамическая система

С# активизирует этот процесс только по необходимости или в специальных случаях.
Слайд 63

И.М.Желакович БНТУ Деструкторы Деструктор – метод, который должен вызываться непосредственно перед

И.М.Желакович БНТУ

Деструкторы

Деструктор – метод, который должен вызываться непосредственно перед тем,

как объект будет окончательно разрушен системой сбора мусора.
Слайд 64

И.М.Желакович БНТУ Деструкторы ~имя_класса() { // код деструктора }

И.М.Желакович БНТУ

Деструкторы

~имя_класса()
{
// код деструктора
}

Слайд 65

И.М.Желакович БНТУ Деструкторы

И.М.Желакович БНТУ

Деструкторы