ОБЪЕКТНО-
ОРИЕНТИРОВАННОЕ
ПРОГРАММИРОВАНИЕ.
ИСКЛЮЧЕНИЯ.
ЧАСТЬ I.
ОБЪЕКТНО-
ОРИЕНТИРОВАННОЕ
ПРОГРАММИРОВАНИЕ
В ООП выделяют 4 парадигмы (принципа):
Наследование
Полиморфизм
Инкапсуляция
Абстракция
НАСЛЕДОВАНИЕ
Наследованием называется возможность создавать класс
путем расширения функциональности другого класса, с
сохранением свойств и методов класса-предка (прародителя,
иногда его называют суперклассом) .
Набор классов, связанных отношением наследования,
называют иерархией.
ПОЛИМОРФИЗМ
Полиморфизмом называется взаимозаменяемость
объектов имеющих одинаковый набор методов.
Достигается полиморфизм созданием метода в классе
наследнике, сигнатура которого совпадает с методом в
супер классе.
ИНКАПСУЛЯЦИЯ
Предназначена для сокрытия реализации определенных
методов и полей от пользователя-программиста
АБСТРАКЦИЯ
Предназначена для выделения важного функционала,
упрощая процесс программирования.
Так, допустим, для езды на машине мы не будем
использовать несколько разных методов для запуска
двигателя, управления автомобилем, использование
педалей, и т.д.
Вместо это у нас будет единственный метод управления
машиной, который будет более глубоко раскрывать
логику
КЛАСС
Класс - это базовым элементом объектно-ориентированного программирования ,
который является шаблоном для создания объекта.
Классы по умолчанию имеют доступ default, к тому же обратите внимание,
Что мы не сможем сделать импорт класса из default package.
Объект - это экземпляр класса.
Все, что объявлено внутри класса – это член класса.
Если это переменная – поле класса.
Если метод – метод класса.
Классы высшего уровня не могут иметь модификатор
доступа private или static. Только public, abstract, final
Тем не менее, вложенные классы могут быть
приватными
КОНСТРУКТОР
Конструктор требуется для создания экземпляра класса с
определенными параметрами. У каждого объекта есть
конструктор по умолчанию. Он вызывается, если никаких
других конструкторов не было вызвано.
Конструктор может быть
По умолчанию (Без параметров)
С параметрами
Для обращения к полю конкретного экземпляра
используется ключевое слово this
ПЕРЕГРУЗКА МЕТОДОВ
И КОНСТРУКТОРОВ
Методы и конструкторы перегружаются, если меняются
определенные части сигнатуры (входящие параметры,
возвращаемое значение), но не ИМЯ.
МЕТОДЫ КЛАССА
По умолчанию, методы класса имеют модификатор
доступа default (package-only).
В параметры метода можно передать любой объект
СТАТИЧЕСКИЕ
МЕТОДЫ КЛАССОВ
Объявляя поле класса, мы декларируем то, что каждый
экземпляр класса будет иметь такое поле. Но, у нас есть
возможность создавать поля и методы, которые будут
являться общими для всех экземпляров класса. Такие
поля называются статическими. Создается такое поле с
помощью спецификатора static .
НАСЛЕДОВАНИЕ
Для того что бы расширить функциональность класса
используется ключевое слово extends.
В Java доступ к полям и методам базового класса зависит от
спецификаторов доступа.
Спецификатор доступа в
суперклассе
Доступ
private Доступ к полям и методам
со спецификатором
private, класс наследник
не имеет
protected Поля и методы со
спецификатором protected
доступны только в
методах класса
наследника
public Доступ к полям и методом
со спецификатором public
можно получить через
объект производного
класса
Обратите внимание, что при вызове конструктора
дочернего класса, также будет вызван и конструктор по
умолчанию родительского класса, но неявно.
ПЕРЕОПРЕДЕЛЕНИЕ
МЕТОДОВ
Для переопределения методов используется аннотация
@Override над сигнатурой метода. Сигнатура
переопределенного метода должна совпадать с
сигнатурой родительского метода
Реализация родительского метода может быть
принудительно вызвана с помощью ключевого слова
super.[Имя метода]();
КАКОВ БУДЕТ РЕЗУЛЬТАТ
ВЫПОЛНЕНИЯ
ПРОГРАММЫ?
ОТВЕТ
4-ый вывод равен Bye, а не Hello.
Т.к. дочерний метод вызывает реализацию родительского
класса, а не его значение. В данном случае будет вызвать
метод .Say() класса С
ДИНАМИЧЕСКАЯ
ДИСПЕТЧЕРИЗАЦИЯ
МЕТОДОВ
Динамической диспетчеризацией является способность
ссылочной переменной суперкласса указать ссылку по
подкласс и вызвать переопределенный метод.
Данная концепция тесно связано с понятием
полиморфизма.
Обращение к объекту происходит во время выполнения,
а не компляции
+ Можно работать с объектами одинаково. Отлично
проявляет себя при работе с коллекциями, где хранятся
элементы разных классов, но имеющих один супер
класс.
- Небольшие накладные расходы на вызов. Объекты
занимают больше места из-за их таблицы виртуальных
методов
АБСТРАКТНЫЙ
КЛАСС
Абстрактным называется класс, содержащий хотя бы один
абстрактный метод.
Абстрактным называется метод, не содержащий
реализации, другими словами метод в классе существует
(тип возвращаемого значение, имя, параметры) а его тело
отсутствует.
Следовательно, если мы имеем метод без реализации то
создать экземпляр такого класса не можем, т.к. вызвать
такой метод невозможно.
Абстрактные классы не могут быть final.
ИНТЕРФЕЙС
Интерфейс — это элемент языка программирования который, специфицирует набор услуг,
предоставляемых классом. Другими словами интерфейс - это элемент языка программирования
который содержит описание методов, но не содержит их реализацию. Объявление интерфейсов очень
похоже на упрощенное объявление классов.
Оно начинается с заголовка. Сначала указываются модификаторы. Интерфейс может быть объявлен
как public и тогда он будет доступен для общего использования, либо модификатор доступа может не
указываться, в этом случае интерфейс доступен только для типов своего пакета.
Модификатор abstract для интерфейса не требуется, поскольку все интерфейсы являются
абстрактными. Его можно указать, но делать этого не рекомендуется, чтобы не загромождать код.
Далее записывается ключевое слово interface и имя интерфейса.
После этого может следовать ключевое слово extends и список интерфейсов, от которых будет
наследоваться объявляемый интерфейс. Родительских типов может быть много, главное, чтобы не
было повторений и чтобы отношение наследования не образовывало циклической зависимости.
Чтобы реализовать интерфейс в классе, требуется использовать фразу
class название_класса implements название_интерфейса
В интерфейсе не может быть приватных методов
Интерфейс высшего уровня может быть только public и
abstract
Вложенный интерфейс может быть static и private
Статический интерфейс могут реализовывать как
статические, так и не статические классы
От статического интерфейса могут наследоваться как
статические, так и не статические интерфейсы
Интерфейсы могут иметь переменные. Они будут final и
static
ИНТЕРФЕЙС МОЖНО
ИСПОЛЬЗОВАТЬ ДЛЯ
ПОЛИМОРФИЗМА
ПОДКЛАСС
Подклассом (subclass) – называется класс, объявленный
внутри другого класса. Подклассы используются:
● При реализации класса со сложной логикой работы.
Возможна ситуация в которой Вам понадобятся
некоторые вспомогательные классы (для расчетов,
специфического вывода информации и т.д.). Что бы «не
засорять» проект служебными классами, как правила их
реализуют в виде подклассов.
● Для реализации класса помощника, который позволяет
управлять экземпляром другого класса.
Подкласс имеет доступ ко всем полям внешнего класса, а
так же спецификатор доступа который определяет, может ли
быть доступен нам экземпляр подкласса за пределами
внешнего класса.
Спецификатор доступа подкласса определяет доступность
класса за пределами внешнего. Спецификатор доступа
private указывает на то, что доступ к полям и методам
внутреннего класса имеет только внешний класс, а
спецификаторы public и protected указывают что доступ к
полям и методам может получить любой класс программы.
Так же следует отметить, что наличие спецификатора
доступа private запрещает использовать подкласс в классах
наследниках внешнего.
Инициализация внутреннего класса практически не
отличается от иниц. Внешнего класса, за исключением того,
что требуется явно специфицировать его внешний класс

Step 3.1

  • 1.
  • 2.
    ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В ООП выделяют4 парадигмы (принципа): Наследование Полиморфизм Инкапсуляция Абстракция
  • 3.
    НАСЛЕДОВАНИЕ Наследованием называется возможностьсоздавать класс путем расширения функциональности другого класса, с сохранением свойств и методов класса-предка (прародителя, иногда его называют суперклассом) . Набор классов, связанных отношением наследования, называют иерархией.
  • 4.
    ПОЛИМОРФИЗМ Полиморфизмом называется взаимозаменяемость объектовимеющих одинаковый набор методов. Достигается полиморфизм созданием метода в классе наследнике, сигнатура которого совпадает с методом в супер классе.
  • 6.
    ИНКАПСУЛЯЦИЯ Предназначена для сокрытияреализации определенных методов и полей от пользователя-программиста
  • 7.
    АБСТРАКЦИЯ Предназначена для выделенияважного функционала, упрощая процесс программирования. Так, допустим, для езды на машине мы не будем использовать несколько разных методов для запуска двигателя, управления автомобилем, использование педалей, и т.д. Вместо это у нас будет единственный метод управления машиной, который будет более глубоко раскрывать логику
  • 9.
    КЛАСС Класс - этобазовым элементом объектно-ориентированного программирования , который является шаблоном для создания объекта. Классы по умолчанию имеют доступ default, к тому же обратите внимание, Что мы не сможем сделать импорт класса из default package. Объект - это экземпляр класса. Все, что объявлено внутри класса – это член класса. Если это переменная – поле класса. Если метод – метод класса.
  • 11.
    Классы высшего уровняне могут иметь модификатор доступа private или static. Только public, abstract, final
  • 12.
    Тем не менее,вложенные классы могут быть приватными
  • 13.
    КОНСТРУКТОР Конструктор требуется длясоздания экземпляра класса с определенными параметрами. У каждого объекта есть конструктор по умолчанию. Он вызывается, если никаких других конструкторов не было вызвано.
  • 14.
    Конструктор может быть Поумолчанию (Без параметров) С параметрами
  • 16.
    Для обращения кполю конкретного экземпляра используется ключевое слово this
  • 17.
    ПЕРЕГРУЗКА МЕТОДОВ И КОНСТРУКТОРОВ Методыи конструкторы перегружаются, если меняются определенные части сигнатуры (входящие параметры, возвращаемое значение), но не ИМЯ.
  • 19.
    МЕТОДЫ КЛАССА По умолчанию,методы класса имеют модификатор доступа default (package-only). В параметры метода можно передать любой объект
  • 21.
    СТАТИЧЕСКИЕ МЕТОДЫ КЛАССОВ Объявляя полекласса, мы декларируем то, что каждый экземпляр класса будет иметь такое поле. Но, у нас есть возможность создавать поля и методы, которые будут являться общими для всех экземпляров класса. Такие поля называются статическими. Создается такое поле с помощью спецификатора static .
  • 23.
    НАСЛЕДОВАНИЕ Для того чтобы расширить функциональность класса используется ключевое слово extends.
  • 24.
    В Java доступк полям и методам базового класса зависит от спецификаторов доступа. Спецификатор доступа в суперклассе Доступ private Доступ к полям и методам со спецификатором private, класс наследник не имеет protected Поля и методы со спецификатором protected доступны только в методах класса наследника public Доступ к полям и методом со спецификатором public можно получить через объект производного класса
  • 25.
    Обратите внимание, чтопри вызове конструктора дочернего класса, также будет вызван и конструктор по умолчанию родительского класса, но неявно.
  • 27.
    ПЕРЕОПРЕДЕЛЕНИЕ МЕТОДОВ Для переопределения методовиспользуется аннотация @Override над сигнатурой метода. Сигнатура переопределенного метода должна совпадать с сигнатурой родительского метода Реализация родительского метода может быть принудительно вызвана с помощью ключевого слова super.[Имя метода]();
  • 28.
  • 29.
    ОТВЕТ 4-ый вывод равенBye, а не Hello. Т.к. дочерний метод вызывает реализацию родительского класса, а не его значение. В данном случае будет вызвать метод .Say() класса С
  • 30.
    ДИНАМИЧЕСКАЯ ДИСПЕТЧЕРИЗАЦИЯ МЕТОДОВ Динамической диспетчеризацией являетсяспособность ссылочной переменной суперкласса указать ссылку по подкласс и вызвать переопределенный метод. Данная концепция тесно связано с понятием полиморфизма. Обращение к объекту происходит во время выполнения, а не компляции
  • 32.
    + Можно работатьс объектами одинаково. Отлично проявляет себя при работе с коллекциями, где хранятся элементы разных классов, но имеющих один супер класс. - Небольшие накладные расходы на вызов. Объекты занимают больше места из-за их таблицы виртуальных методов
  • 34.
    АБСТРАКТНЫЙ КЛАСС Абстрактным называется класс,содержащий хотя бы один абстрактный метод. Абстрактным называется метод, не содержащий реализации, другими словами метод в классе существует (тип возвращаемого значение, имя, параметры) а его тело отсутствует. Следовательно, если мы имеем метод без реализации то создать экземпляр такого класса не можем, т.к. вызвать такой метод невозможно. Абстрактные классы не могут быть final.
  • 36.
    ИНТЕРФЕЙС Интерфейс — этоэлемент языка программирования который, специфицирует набор услуг, предоставляемых классом. Другими словами интерфейс - это элемент языка программирования который содержит описание методов, но не содержит их реализацию. Объявление интерфейсов очень похоже на упрощенное объявление классов. Оно начинается с заголовка. Сначала указываются модификаторы. Интерфейс может быть объявлен как public и тогда он будет доступен для общего использования, либо модификатор доступа может не указываться, в этом случае интерфейс доступен только для типов своего пакета. Модификатор abstract для интерфейса не требуется, поскольку все интерфейсы являются абстрактными. Его можно указать, но делать этого не рекомендуется, чтобы не загромождать код. Далее записывается ключевое слово interface и имя интерфейса. После этого может следовать ключевое слово extends и список интерфейсов, от которых будет наследоваться объявляемый интерфейс. Родительских типов может быть много, главное, чтобы не было повторений и чтобы отношение наследования не образовывало циклической зависимости. Чтобы реализовать интерфейс в классе, требуется использовать фразу class название_класса implements название_интерфейса
  • 37.
    В интерфейсе неможет быть приватных методов Интерфейс высшего уровня может быть только public и abstract Вложенный интерфейс может быть static и private Статический интерфейс могут реализовывать как статические, так и не статические классы От статического интерфейса могут наследоваться как статические, так и не статические интерфейсы Интерфейсы могут иметь переменные. Они будут final и static
  • 40.
  • 41.
    ПОДКЛАСС Подклассом (subclass) –называется класс, объявленный внутри другого класса. Подклассы используются: ● При реализации класса со сложной логикой работы. Возможна ситуация в которой Вам понадобятся некоторые вспомогательные классы (для расчетов, специфического вывода информации и т.д.). Что бы «не засорять» проект служебными классами, как правила их реализуют в виде подклассов. ● Для реализации класса помощника, который позволяет управлять экземпляром другого класса.
  • 43.
    Подкласс имеет доступко всем полям внешнего класса, а так же спецификатор доступа который определяет, может ли быть доступен нам экземпляр подкласса за пределами внешнего класса. Спецификатор доступа подкласса определяет доступность класса за пределами внешнего. Спецификатор доступа private указывает на то, что доступ к полям и методам внутреннего класса имеет только внешний класс, а спецификаторы public и protected указывают что доступ к полям и методам может получить любой класс программы. Так же следует отметить, что наличие спецификатора доступа private запрещает использовать подкласс в классах наследниках внешнего.
  • 44.
    Инициализация внутреннего классапрактически не отличается от иниц. Внешнего класса, за исключением того, что требуется явно специфицировать его внешний класс