Основы ООП

Содержание

Слайд 2

Немного истории Первым языком программирования, в котором были предложены основные понятия

Немного истории

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

была Си́мула-67 (Simula 67). В момент его появления в 1967 году в нём были предложены революционные идеи: объекты, классы, виртуальные методы и др.
Первым широко распространённым объектно-ориентированным языком программирования стал Smalltalk. Здесь понятие класса стало основообразующей идеей для всех остальных конструкций языка.
Слайд 3

Так что же такое ООП? Объе́ктно-ориенти́рованное программи́рование (ООП) — методология программирования,

Так что же такое ООП?

Объе́ктно-ориенти́рованное программи́рование (ООП) — методология программирования, основанная

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

Понятия класс и объект Класс - это шаблон, на основе которого

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

Класс - это шаблон, на основе которого может

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

Принципы ООП Инкапсуляция Абстрагирование Наследование Полиморфизм

Принципы ООП

Инкапсуляция
Абстрагирование
Наследование
Полиморфизм

Слайд 6

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

Принцип 1. Инкапсуляция

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

методы, работающие с ними, в классе и скрыть детали реализации от пользователя.
Изначальное значение слова «инкапсуляция» в программировании — объединение данных и методов работы с этими данными в одной упаковке («капсуле»).
Предоставление открытых методов для работы с объектом также является частью механизма инкапсуляции, так как если полностью закрыть доступ к объекту – он станет бесполезным.
Слайд 7

Принцип 1. Инкапсуляция

Принцип 1. Инкапсуляция

Слайд 8

Принцип 1. Инкапсуляция

Принцип 1. Инкапсуляция

Слайд 9

Принцип 1. Инкапсуляция

Принцип 1. Инкапсуляция

Слайд 10

Принцип 1. Инкапсуляция / Преимущества Контроль за корректным состоянием объекта. Примеры

Принцип 1. Инкапсуляция / Преимущества

Контроль за корректным состоянием объекта. Примеры этому

были выше: благодаря сеттеру и модификатору private, мы обезопасили нашу программу от котов с весом 0.
Удобство для пользователя за счет интерфейса. Мы оставляем «снаружи» для доступа пользователя только методы. Ему достаточно вызвать их, чтобы получить результат, и совсем не нужно вникать в детали их работы.
Изменения в коде не отражаются на пользователях. Все изменения мы проводим внутри методов. На пользователя это не повлияет: если мы меняем что-то в работе метода, для него останется незаметным: он, как и раньше, просто будет получать нужный результат.
Слайд 11

Принцип 2. Абстрагирование Абстрагирование – это способ выделить набор значимых характеристик

Принцип 2. Абстрагирование

Абстрагирование – это способ выделить набор значимых характеристик объекта,

исключая из рассмотрения незначимые. Соответственно, абстракция – это набор всех таких характеристик.
Слайд 12

Принцип 2. Абстрагирование !!! При создании программы также очень важно помнить,

Принцип 2. Абстрагирование

!!!
При создании программы также очень важно помнить, что с

точки зрения разных задач один и тот же объект может обладать совершенно разными характеристиками.
Слайд 13

Принцип 1. Абстрагирование

Принцип 1. Абстрагирование

Слайд 14

Принцип 3. Наследование Наследование – это свойство системы, позволяющее описать новый

Принцип 3. Наследование

Наследование – это свойство системы, позволяющее описать новый класс

на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым или родительским. Новый класс – потомком, наследником или производным классом.
Слайд 15

Принцип 3. Наследование/ Правила наследования Дочерний класс может быть родительским для

Принцип 3. Наследование/ Правила наследования

Дочерний класс может быть родительским для другого

класса, тот родительским еще для одного и т.д. Образуется цепочка наследования, которая может быть любой длины.
Класс расширяет другой класс с помощью ключевого слова extends в определении класса. Класс может расширять только один другой класс, но он может реализовывать несколько интерфейсов.
Класс, расширяющий другой класс, наследует все методы и свойства расширенного класса.
Кроме того, расширяющий класс может переопределять существующие виртуальные методы с помощью ключевого слова override в определении метода.
Слайд 16

Принцип 3. Наследование

Принцип 3. Наследование

Слайд 17

Принцип 3. Наследование/ Преимущества и недостатки Повторное использование кода. Устанавливается логическое

Принцип 3. Наследование/ Преимущества и недостатки

Повторное использование кода.
Устанавливается логическое отношение «is

a» (является кем-то, чем-то). Например: Dog is an animal. (Собака является животным).
Модуляризация кода.
Слайд 18

Принцип 4. Полиморфизм Полиморфизмом в объектно-ориентированных языках чаще всего называют механизмы,

Принцип 4. Полиморфизм

Полиморфизмом в объектно-ориентированных языках чаще всего называют механизмы,

позволяющие работать с разными данными и разными функциями используя одно и то же имя.
«Один интерфейс — много реализаций».
Слайд 19

Принцип 4. Полиморфизм Перегрузка функций. Позволяет создавать несколько функций с одним

Принцип 4. Полиморфизм

Перегрузка функций. Позволяет создавать несколько функций с одним и

тем же именем в одном классе. Это как правило используется для того, чтобы дать одно имя группе функций, выполняющих сходные задачи, но работающих с разными исходными данными.
Переопределение (overriding). Используется в том случае, если какая-то функция объявлена в родительском классе, и в дочернем нужна функция с тем же именем и параметрами, но выполняющая другие действия.
Слайд 20

Принцип 4. Полиморфизм Перегрузка функций: У перегружаемых функций могут отличаться типы

Принцип 4. Полиморфизм

Перегрузка функций:

У перегружаемых функций могут отличаться типы параметров, или

их количество и типы возвращаемых значений. Но параметры должны отличаться обязательно. Двух функций с одинаковым именем, одинаковым количеством и одинаковыми типами параметров в одном классе быть не может!
Слайд 21

Принцип 4. Полиморфизм Переопределение (overriding):

Принцип 4. Полиморфизм

Переопределение (overriding):

Слайд 22

Принцип 4. Полиморфизм / Преимущества Позволяет записывать методы лишь однажды и

Принцип 4. Полиморфизм / Преимущества

Позволяет записывать методы лишь однажды и затем

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

Ключевое слово Static Переменные, методы, код инициализации

Ключевое слово Static Переменные, методы, код инициализации

Слайд 24

Характеристики Static-методов, переменных, кода инициализации: Связаны с классом. Модификатор static в

Характеристики Static-методов, переменных, кода инициализации:

Связаны с классом.
Модификатор static в Java

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

Характеристики Static-методов, переменных, кода инициализации Статические методы имеют преимущество в применении,

Характеристики Static-методов, переменных, кода инициализации

Статические методы имеют преимущество в применении, т.к.

отсутствует необходимость каждый раз создавать новый объект для доступа к таким методам. Статический метод можно вызвать, используя тип класса, в котором эти методы описаны. Class Math — замечательный пример со статическими переменными и методами.
Инициализируются только когда класс загружен. Порядок инициализации сверху вниз, в том же порядке, в каком они описаны в исходном файле Apex класса.
Статические методы и переменные можно использовать только с внешними классами. Внутренние классы не имеют статических методов или переменных.
Слайд 26

Блок инициализации Класс может иметь любое количество блоков кода инициализации экземпляра.

Блок инициализации

Класс может иметь любое количество блоков кода инициализации экземпляра. Они

могут появляться в любом месте тела кода. Блоки кода выполняются в том порядке, в котором они появляются в файле, так же, как и в Java.
Статический код инициализации можно использовать для инициализации статических конечных переменных и объявления статической информации.
Слайд 27

Транзакции Apex Статическая переменная является статической только в рамках транзакции Apex.

Транзакции Apex

Статическая переменная является статической только в рамках транзакции Apex. Она

не является статической на сервере или во всей организации. Значение статической переменной сохраняется в контексте одной транзакции и сбрасывается через границы транзакции. Например, если запрос Apex DML приводит к многократному запуску триггера, статические переменные сохраняются в этих вызовах триггера. Рекурсивный триггер может использовать значение переменной класса для выхода из рекурсии.