8.38M
Category: programmingprogramming

ООП 2

1.

МЕТОДЫ В СИ-ШАРП

2.

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

3.

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

4.

Простые методы служат для обработки
внутренних данных объекта.
Приведу пример использования простого
метода. Класс Телевизор, у него есть
поле switchedOn, которое отображает состояние
включен/выключен, и два метода – включение
и выключение:

5.

6.

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

7.

ПРИМЕР СТАТИЧЕСКОГО МЕТОДА, КОТОРЫЙ
ОБРЕЗАЕТ СТРОКУ ДО УКАЗАННОЙ ДЛИНЫ, И
ДОБАВЛЯЕТ МНОГОТОЧИЕ:

8.

СТАТИЧЕСКИЙ МЕТОД НЕ ИМЕЕТ
ДОСТУПА К НЕСТАТИЧЕСКИМ ПОЛЯМ
КЛАССА:

9.

ЗАДАНИЕ
Создайте класс Телевизор. В нем есть поле
текущий канал. Предусмотрите в нем
возможность переключения каналов:
следующий канал, предыдущий канал,
переход к каналу по номеру. Учтите, что канал
не может иметь отрицательный номер.

10.

КОНСТРУКТОРЫ В СИ-ШАРП

11.

КОНСТРУКТОРЫ
Кроме обычных методов в классах
используются также и специальные методы,
которые называются конструкторами.
Конструкторы вызываются при создании
нового объекта данного класса. Конструкторы
выполняют инициализацию объекта.

12.

Конструктор – это метод класса,
предназначенный для инициализации объекта
при его создании.
Инициализация – это задание начальных
параметров объектов/переменных при их
создании.

13.

Объявление конструктора имеет следующую
структуру:
public [имя_класса] ([аргументы])
{
// тело конструктора
}

14.

КОНСТРУКТОР ПО УМОЛЧАНИЮ
Если в классе не определено ни одного
конструктора, то для этого класса
автоматически создается конструктор по
умолчанию.
Такой конструктор не имеет параметров и не
имеет тела.

15.

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

16.

17.

Для создания объекта Person используется
выражение new Person().
Оператор new выделяет память для объекта
Person. И затем вызывается конструктор по
умолчанию, который не принимает никаких
параметров.
В итоге после выполнения данного выражения в
памяти будет выделен участок, где будут храниться
все данные объекта Person. А переменная tom
получит ссылку на созданный объект.
Если конструктор не инициализирует значения
переменных объекта, то они получают значения по
умолчанию. Для переменных числовых типов это
число 0, а для типа string и классов - это
значение null (то есть фактически отсутствие
значения).
После создания объекта мы можем обратиться к
переменным объекта Person через переменную tom
и установить или получить их значения,
например, tom.name = "Tom";.

18.

НАПРИМЕР, У НАС ЕСТЬ КЛАСС АВТОМОБИЛЬ. СОЗДАВАЯ
НОВЫЙ АВТОМОБИЛЬ, ЗНАЧЕНИЯ ПРОБЕГА И КОЛИЧЕСТВА
ТОПЛИВА В БАКЕ ЕСТЬ СМЫСЛ ПОСТАВИТЬ РАВНЫМИ НУЛЮ:

19.

Без конструктора нам бы пришлось после
создания объекта отдельно присваивать
значения его полям, что очень неудобно.
Конструктор также может иметь параметры.
Пример с тем же автомобилем, только теперь
при создании объекта мы можем задать любые
начальные значения

20.

СОЗДАНИЕ КОНСТРУКТОРОВ
Выше для инициализации объекта
использовался конструктор по умолчанию.
Однако мы сами можем определить свои
конструкторы.
Теперь в классе определено три конструктора,
каждый из которых принимает различное
количество параметров и устанавливает
значения полей класса.

21.

22.

ИСПОЛЬЗУЕМ ЭТИ КОНСТРУКТОРЫ:

23.

КЛЮЧЕВОЕ СЛОВО THIS
Ключевое слово this представляет ссылку на
текущий экземпляр класса. В каких ситуациях
оно нам может пригодиться? В примере выше
определены три конструктора. Все три
конструктора выполняют однотипные действия
- устанавливают значения полей name и age.
Но этих повторяющихся действий могло быть
больше. И мы можем не дублировать
функциональность конструкторов, а просто
обращаться из одного конструктора к другому
через ключевое слово this, передавая нужные
значения для параметров:

24.

25.

ТАКЖЕ СТОИТ ОТМЕТИТЬ, ЧТО В ТРЕТЬЕМ
КОНСТРУКТОРЕ ПАРАМЕТРЫ НАЗЫВАЮТСЯ
ТАКЖЕ, КАК И ПОЛЯ КЛАССА.
И чтобы разграничить параметры и поля класса, к полям класса
обращение идет через ключевое слово this.
Так, в выражении this.name = name;
первая часть this.name означает, что name - это поле текущего
класса, а не название параметра name.
Если бы у нас параметры и поля назывались по-разному, то
использовать слово this было бы необязательно.
Также через ключевое слово this можно обращаться к любому полю
или методу.

26.

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

27.

ПРИМЕР ИСПОЛЬЗОВАНИЯ НЕСКОЛЬКИХ
КОНСТРУКТОРОВ:

28.

ЕСЛИ В КЛАССЕ ОПРЕДЕЛЕН ОДИН ИЛИ НЕСКОЛЬКО
КОНСТРУКТОРОВ С ПАРАМЕТРАМИ, МЫ НЕ СМОЖЕМ СОЗДАТЬ
ОБЪЕКТ ЧЕРЕЗ НЕЯВНЫЙ КОНСТРУКТОР ПО УМОЛЧАНИЮ:

29.

ПРИ ИСПОЛЬЗОВАНИИ ИНИЦИАЛИЗАТОРОВ
СЛЕДУЕТ УЧИТЫВАТЬ СЛЕДУЮЩИЕ
МОМЕНТЫ:
С помощью инициализатора мы можем
установить значения только доступных из
внешнего кода полей и свойств объекта.
Например, в примере выше поля name и age
имеют модификатор доступа public, поэтому
они доступны из любой части программы.
Инициализатор выполняется после
конструктора, поэтому если и в конструкторе, и
в инициализаторе устанавливаются значения
одних и тех же полей и свойств, то значения,
устанавливаемые в конструкторе, заменяются
значениями из инициализатора.

30.

ИНИЦИАЛИЗАТОРЫ ОБЪЕКТОВ
Для инициализации объектов классов можно
применять инициализаторы.
Инициализаторы представляют передачу в
фигурных скобках значений доступным полям
и свойствам объекта:
Person tom = new Person { name = "Tom", age=31
};
tom.GetInfo();
// Имя: Tom Возраст: 31

31.

ВОПРОС

32.

ОТВЕТ
Поле name объекта tom будет иметь значение
"Bob". В самом начале выполняется начальная
инициализация полей класса, и полю name
присваивается значение "Sam". Далее
выполняется конструктор, который
устанавливает для переменной name значение
"Tom". И в последнюю очередь выполняется
инициализатор, который устанавливает для
поля name значение "Bob".

33.

34.

ОТВЕТ
Значения полей:
name: Bob
age: 31
email: [email protected]

35.

ВИДЕО
https://www.youtube.com/watch?v=_yk5lMV-
Bx0&feature=youtu.be

36.

ЗАДАНИЕ
Создайте класс Студент, определите в нем
поля: имя, курс, есть ли у него стипендия.
Создайте в классе несколько конструкторов,
для возможности задания сразу всех
указанных параметров или нескольких при
создании экземпляров.
English     Русский Rules